{"version":3,"sources":["Assets/Icons/Status/approved.png","Assets/Icons/DL.svg","Assets/Icons/Status/denied.png","Assets/Icons/Status/under-review.png","Assets/Icons/Status/waiting.png","Assets/Icons/Application.svg","Assets/Icons/Status/saved.png","Assets/Icons/Status/submitted.png","Assets/Icons/Privacy.svg","Assets/Icons/AccessControl.svg","Assets/Icons/Benefits.svg","Assets/Icons/Event.svg","Assets/Icons/MLSA.svg","Assets/Icons/MVP.svg","Assets/Icons/PendingRequest.svg","Assets/Icons/RD.svg","Assets/Icons/Search.svg","ServiceWorker.ts","Constants/SagaConstants.ts","Authentication/AuthHelper.tsx","Constants/HttpStatusCode.ts","Services/ApiUtils.ts","Authentication/AuthProvider.tsx","Services/AdminApi.ts","Components/Common/Results/Result.styles.ts","Containers/Common/CommonContainer.styles.ts","Authentication/Login.tsx","Constants/AuthenticationConstants.ts","Authentication/PrivateRoute.tsx","Components/Common/FormikErrorMessage/FormikErrorMessage.styles.ts","Components/Common/FormikErrorMessage/FormikErrorMessage.tsx","Components/Common/SharedTableStyles.styles.ts","Components/Common/ChevronIcon/ChevronIcon.tsx","Components/Common/Pagination/Pagination.styles.ts","Components/Common/SharedListStyles.styles.ts","Constants/OperationStatus.ts","Dataflows/DistributionLists/DistributionListsSelector.ts","Components/MicrosoftMembersList/MicrosoftMembersList.styles.ts","Components/MicrosoftMembersList/MicrosoftMembersList.tsx","Components/SidePanel/SidePanel.styles.ts","Components/SidePanel/SidePanel.tsx","Constants/PeoplePickerConstants.ts","Constants/RegexConstants.ts","Constants/RolesPermissionsConstants.ts","Constants/TenantTypes.ts","Containers/MVP/MostValuableProfessionalDetailsContainer/MostValuableProfessionalDetailsContainer.styles.ts","Dataflows/DistributionLists/DistributionListsAction.ts","Dataflows/DistributionLists/DistributionListsActionTypes.ts","Utility/MsGraphApiCall.ts","Utility/Utils.ts","Components/DistributionListDetails/DistributionListDetails.styles.ts","Components/DistributionListDetails/DistributionListDetails.tsx","Dataflows/UserProfile/UserProfileAction.ts","Dataflows/UserProfile/UserActionTypes.ts","Dataflows/UserProfile/UserProfileSelector.ts","Constants/Layout.ts","Components/Common/Layout/Layout.tsx","Components/ReactHookForm/HookErrorMessage/HookErrorMessage.styles.ts","Components/ReactHookForm/HookErrorMessage/HookErrorMessage.tsx","Components/ReactHookForm/ReactHookFormShared.styles.ts","Components/ReactHookForm/CheckboxController/CheckboxController.styles.ts","Components/ReactHookForm/CheckboxController/CheckboxController.tsx","Components/CharacterCounter/CharacterCounter.styles.ts","Components/CharacterCounter/CharacterCounter.tsx","Components/ReactHookForm/TextFieldController/TextFieldController.styles.ts","Components/ReactHookForm/TextFieldController/TextFieldController.tsx","Constants/ValidationMessages.ts","Components/UpdatePrimaryEmailPanel/UpdatePrimaryEmailPanel.tsx","Components/ProfileHeader/ProfileHeader.styles.ts","Components/ProfileHeader/ProfileHeader.tsx","Components/ProfileVisualStudioBenefitDetails/VisualStudioBenefitDetailSidePanel.styles.ts","Constants/FilterFields.ts","Constants/BenefitConstants.ts","Components/ProfileVisualStudioBenefitDetails/VisualStudioBenefitDetailSidePanel.tsx","Components/CopyButton/CopyButton.tsx","Components/VisualStudioBenefitDetail/VisualStudioBenefitDetail.styles.ts","Constants/ApplicationStatusTypes.ts","Constants/ApplicationConstants.ts","Constants/ProfileConstants.ts","Constants/ProgramProfileConstants.ts","Components/ProfileBenefitOtherTenant/ProfileBenefitOtherTenant.tsx","Components/VisualStudioBenefitDetail/VisualStudioBenefitDetail.tsx","Components/ReactHookForm/ComboBoxController/ComboBoxController.styles.ts","Components/ReactHookForm/ComboBoxController/ComboBoxController.tsx","Components/KeyBenefitsList/KeyBenefitsList.styles.ts","Components/KeyBenefitsList/KeyBenefitsList.tsx","Components/ProfileBenefitDetails/ProfileBenefitDetails.styles.ts","Components/StudentBenefitDetails/StudentBenefitDetails.tsx","Components/AddComment/AddComment.styles.ts","Components/AddComment/AddComment.tsx","Constants/Time.ts","Utility/FormatHelper.ts","Components/CommentDetail/CommentDetail.styles.ts","Components/CommentDetail/CommentDetail.tsx","Components/CommentsHistory/CommentsHistory.styles.ts","Components/CommentsHistory/CommentsHistory.tsx","Components/StudentComments/StudentComments.tsx","Components/SetProfileToPrivateSidePanel/SetProfileToPrivateSidePanel.tsx","Dataflows/School/SchoolDataAction.ts","Dataflows/School/SchoolDataActionTypes.ts","Dataflows/StateProvince/StateProvinceAction.ts","Dataflows/StateProvince/StateProvinceActionTypes.ts","Constants/DateConstants.ts","Components/Common/DatePicker/FormikDatePicker.tsx","Components/Common/Dropdown/FormikDropdown.tsx","Components/Common/Dropdown/FormikMultiDropdown.tsx","Components/Common/Picker/FormikPicker.styles.ts","Components/Common/Picker/FormikPicker.tsx","Components/Common/TextField/FormikTextField.tsx","Components/Common/Toggle/FormikToggle.tsx","Components/StudentEditProfile/StudentEdit.styles.ts","Components/StudentEditProfile/StudentEditProfileForm.tsx","Constants/Languages.ts","Utility/ValidateHelper.ts","Services/TelemetryService.ts","Components/StudentEditProfile/StudentProfileValidationSchema.ts","Components/StudentEditProfile/StudentEditProfileEnhancedForm.tsx","Constants/FormStatusConstants.ts","Dataflows/CountryRegion/CountryRegionSelector.ts","Dataflows/ProgramLanguage/ProgramLanguageAction.ts","Dataflows/ProgramLanguage/ProgramLanguageActionTypes.ts","Dataflows/ProgramLanguage/ProgramLanguageSelector.ts","Dataflows/School/SchoolSelector.ts","Dataflows/SocialNetwork/SocialNetworkAction.ts","Dataflows/SocialNetwork/SocialNetworkActionTypes.ts","Dataflows/SocialNetwork/SocialNetworkSelector.ts","Dataflows/StateProvince/StateProvinceSelector.ts","Components/StudentProfile/StudentProfile.styles.ts","Components/StudentProfile/StudentProfile.tsx","Components/ReactHookForm/DatePickerController/DatePickerController.styles.ts","Components/ReactHookForm/DatePickerController/DatePickerController.tsx","Components/StudentProgramProfile/StudentProgramProfile.styles.ts","Components/ReactHookForm/PeoplePickerController/PeoplePickerController.styles.ts","Components/ReactHookForm/PeoplePickerController/PeoplePickerController.tsx","Components/StudentProgramProfileEditForm/StudentProgramProfileEditForm.tsx","Components/StudentProgramProfile/StudentProgramProfile.tsx","Utility/CustomTabHooks.ts","Components/StudentDetails/StudentDetails.tsx","Constants/AccessControlConstants.ts","Dataflows/AccessControl/AccessControlAction.ts","Dataflows/AccessControl/AccessControlActionTypes.ts","Dataflows/TechnologyArea/TechnologyAreaTypes.ts","Dataflows/TechnologyArea/TechnologyAreaAction.ts","Dataflows/ClRegion/ClRegionActionTypes.ts","Dataflows/ClRegion/ClRegionAction.ts","Components/AccessControlDetails/AccessControlDetails.tsx","Constants/AdminConstants.ts","Constants/EventConstants.ts","Constants/VisualStudioBenefitConstants.ts","Components/Common/Status/StatusElement.styles.ts","Components/Common/Status/StatusElement.tsx","Components/AccessControlList/AccessControlList.tsx","Components/Common/ListCounts/ListCounts.styles.ts","Components/Common/ListCounts/ListCounts.tsx","Components/RoleGuideList/RoleGuideList.tsx","Dataflows/AccessControl/AccessControlSelector.ts","Dataflows/ActivityEventTypes/ActivityEventTypesSelector.ts","Dataflows/AwardKitSku/AwardKitSkuSelector.ts","Dataflows/ClRegion/ClRegionSelector.ts","Dataflows/CommonData/CommonDataSelector.ts","Dataflows/IndustryFocus/IndustryFocusSelector.ts","Dataflows/Region/RegionSelector.ts","Dataflows/TechnicalExpertise/TechnicalExpertiseSelector.ts","Dataflows/TechnologyArea/TechnologyAreaSelector.ts","Components/SideBar/SideBar.styles.ts","Components/SideBar/SideBar.tsx","Containers/SideBarContainer/SideBarContainer.tsx","Dataflows/AwardPeriod/AwardPeriodSelector.ts","Containers/AccessControl/AccessControlContainer.tsx","Components/AccessControlRoles/AccessControlRole.styles.tsx","Components/AccessControlRoles/AccessControlRole.tsx","Components/AccessControlRoles/AccessControlRoles.styles.ts","Components/RegionalGroupedList/RegionalGroupedList.tsx","Components/AccessControlRoles/AccessControlRolesForm.styles.tsx","Components/AccessControlRoles/AccessControlRolesForm.tsx","Components/AccessControlRoles/AccessControlRoles.tsx","Components/AccessControlUserForm/AccessControlUserForm.styles.ts","Components/AccessControlUserForm/AccessControlUserForm.tsx","Containers/AccessControl/AccessControlCreateEditContainer/AccessControlCreateEditContainer.styles.ts","Containers/AccessControl/AccessControlCreateEditContainer/AccessControlCreateEditContainer.tsx","Dataflows/Application/ApplicationAction.ts","Dataflows/Application/ApplicationActionTypes.ts","Dataflows/CommonData/CommonDataActionTypes.ts","Dataflows/CommonData/CommonDataAction.ts","Dataflows/ApplicationDetails/ApplicationDetailsAction.ts","Dataflows/ApplicationDetails/ApplicationDetailsActionTypes.ts","Dataflows/Application/ApplicationSelector.ts","Components/ApplicationDetails/ApplicationDetails.styles.ts","Components/ApplicationDetails/ApplicationDetails.tsx","Components/ApplicationsList/ApplicationList.styles.ts","Components/ApplicationsList/ApplicationsList.tsx","Utility/DownloadHelper.ts","Constants/DownloadConstants.ts","Utility/QueryParamHelper.ts","Containers/Applications/ApplicationsContainer.styles.ts","Containers/Applications/ApplicationsContainer.tsx","Constants/AwardCategoriesConstants.ts","Dataflows/AwardCategories/AwardCategoriesSlice.ts","Services/AwardCategoriesApi.ts","Components/AwardCategoriesStatusUpdatePanel/AwardCategoriesUpdatePanel.tsx","Components/AwardCategories/AwardCategories.tsx","Containers/AwardCategories/AwardCategoriesContainer.tsx","Dataflows/AzureBenefitRequests/AzureBenefitRequestsAction.ts","Dataflows/AzureBenefitRequests/AzureBenefitRequestsActionTypes.ts","Dataflows/AzureBenefitRequests/AzureBenefitRequestsSelector.ts","Containers/Benefits/AzureBenefitRequestDetailsContainer/AzureBenefitRequestDetailsContainer.styles.ts","Containers/Benefits/AzureBenefitRequestDetailsContainer/AzureBenefitRequestDetailsContainer.tsx","Dataflows/VisualStudioBenefit/VisualStudioBenefitAction.ts","Dataflows/VisualStudioBenefit/VisualStudioBenefitActionTypes.ts","Components/AzureRequestsList/AzureRequestsList.tsx","Constants/AzureBenefitConstants.ts","Containers/Benefits/AzureBenefitRequestsContainer/AzureBenefitRequestsContainer.tsx","Dataflows/Benefit/BenefitAction.ts","Dataflows/Benefit/BenefitActionTypes.ts","Dataflows/AwardKitSku/AwardKitSkuActionTypes.ts","Dataflows/AwardKitSku/AwardKitSkuAction.ts","Components/BenefitsList/BenefitsList.tsx","Dataflows/Benefit/BenefitSelector.ts","Containers/Benefits/BenefitsContainer.tsx","Components/M365CopilotBenefitList/M365CopilotBenefitList.tsx","Constants/M365CopilotBenefitConstants.ts","Dataflows/M365CopilotBenefit/M365CopilotBenefitAction.ts","Dataflows/M365CopilotBenefit/M365CopilotBenefitActionType.ts","Dataflows/M365CopilotBenefit/M365CopilotBenefitSelector.ts","Containers/Benefits/M365CopilotBenefitContainer/M365CopilotBenefitContainer.tsx","Dataflows/AwardPeriod/AwardPeriodActionTypes.ts","Dataflows/AwardPeriod/AwardPeriodAction.ts","Components/VisualStudioBenefitsList/VisualStudioBenefitsList.tsx","Dataflows/VisualStudioBenefit/VisualStudioBenefitSelector.ts","Containers/Benefits/VisualStudioBenefitContainer/VisualStudioBenefitContainer.tsx","Dataflows/Demographics/DemographicsAction.ts","Dataflows/Demographics/DemographicsActionTypes.ts","Dataflows/Demographics/DemographicsSelector.ts","Components/Demographics/DemographicsBarChart/DemographicsBarChart.styles.ts","Components/Demographics/DemographicsBarChart/DemographicsBarChart.tsx","Components/Demographics/DemographicsPieChart/DemographicsPieChart.styles.ts","Components/Demographics/DemographicsPieChart/DemographicsPieChart.tsx","Containers/Demographics/DemographicsController.styles.ts","Containers/Demographics/DemographicsContainer.tsx","Components/DistributionLists/DistributionListPendingRequestsList.tsx","Components/DistributionListsJoinRequestForm/DistributionListsJoinRequestFormProps.styles.ts","Components/DistributionListsJoinRequestForm/DistributionListsJoinRequestForm.tsx","Containers/DistributionLists/DistributionListRequestsContainer.tsx","Components/DistributionLists/DistributionLists.tsx","Containers/DistributionLists/DistributionListsContainer.tsx","Dataflows/Event/EventAction.ts","Dataflows/Event/EventActionTypes.ts","Dataflows/Event/EventSelector.ts","Components/EventApprovalForm/EventApprovalForm.styles.ts","Components/EventApprovalForm/EventApprovalForm.tsx","Components/EventStudentList/EventStudentList.tsx","Components/EventDetails/EventDetails.styles.ts","Components/EventDetails/EventDetails.tsx","Components/EventsList/EventsList.tsx","Containers/Events/EventsContainer.tsx","Containers/Home/HomeContainer.tsx","Containers/MVP/Events/MvpEventContainer.tsx","Containers/MVP/Home/MvpHomeContainer.tsx","Components/ApplicationAssignSidePanel/ApplicationAssignSidePanel.tsx","Dataflows/ActivityEventTypes/ActivityEventTypesAction.ts","Dataflows/ActivityEventTypes/ActivityEventTypesActionTypes.ts","Dataflows/CountryRegion/CountryRegionAction.ts","Dataflows/CountryRegion/CountryRegionActionTypes.ts","Dataflows/AccessControl/AccessControlReducer.ts","Dataflows/ActivityEventTypes/ActivityEventTypesReducer.ts","Dataflows/Application/ApplicationReducer.ts","Dataflows/ApplicationDetails/ApplicationDetailsReducer.ts","Dataflows/AwardKitSku/AwardKitSkuReducer.ts","Dataflows/AwardPeriod/AwardPeriodReducer.ts","Dataflows/AzureBenefitRequests/AzureBenefitRequestsReducer.ts","Dataflows/Benefit/BenefitReducer.ts","Dataflows/CommonData/CommonDataReducer.ts","Dataflows/Demographics/DemographicsReducer.ts","Dataflows/DistributionLists/DistributionListsReducer.ts","Dataflows/M365CopilotBenefit/M365CopilotBenefitReducer.ts","Dataflows/MVP/MVPActionTypes.ts","Dataflows/MVP/MVPReducer.ts","Dataflows/RD/UserProfile/RDUserProfileActionTypes.ts","Dataflows/RD/UserProfile/RDUserProfileReducer.ts","Dataflows/Region/RegionReducer.ts","Dataflows/Region/RegionActionTypes.ts","Dataflows/SA/UpdateSARegistrationStatus/UpdateSARegistrationStatusActionType.ts","Dataflows/SA/UpdateSARegistrationStatus/UpdateSARegistrationStatusReducer.ts","Dataflows/TechnologyArea/TechnologyAreaReducer.ts","Dataflows/ClRegion/ClRegionsReducer.ts","Dataflows/CountryRegion/CountryRegionReducer.ts","Dataflows/Event/EventReducer.ts","Dataflows/IndustryFocus/IndustryFocusActionTypes.ts","Dataflows/IndustryFocus/IndustryFocusReducer.ts","Dataflows/ProgramLanguage/ProgramLanguageReducer.ts","Dataflows/School/SchoolDataReducer.ts","Dataflows/SocialNetwork/SocialNetworkReducer.ts","Dataflows/StateProvince/StateProvinceReducer.ts","Dataflows/TechnicalExpertise/TechnicalExpertiseTypes.ts","Dataflows/TechnicalExpertise/TechnicalExpertiseReducer.ts","Dataflows/UserProfile/UserProfileReducer.ts","Dataflows/VisualStudioBenefit/VisualStudioBenefitReducer.ts","Dataflows/SA/UpdateSAProgramStatus/UpdateSAProgramStatusActionType.ts","Dataflows/SA/UpdateSAProgramStatus/UpdateSAProgramStatusReducer.ts","Dataflows/Reducers/index.ts","Services/AccessControlApi.ts","Dataflows/AccessControl/AccessControlSaga.ts","Services/SiteContentApi.ts","Dataflows/ActivityEventTypes/ActivityEventTypesSaga.ts","Services/ApplicationApi.ts","Dataflows/Application/ApplicationSaga.ts","Dataflows/ApplicationDetails/ApplicationDetailsSaga.ts","Dataflows/AwardPeriod/AwardPeriodSaga.ts","Dataflows/AwardKitSku/AwardKitSkuSaga.ts","Services/AzureBenefitApi.ts","Dataflows/AzureBenefitRequests/AzureBenefitRequestsSaga.ts","Services/BenefitApi.ts","Dataflows/Benefit/BenefitSaga.ts","Dataflows/ClRegion/ClRegionsSaga.ts","Dataflows/CommonData/CommonDataSaga.ts","Dataflows/CountryRegion/CountryRegionSaga.ts","Services/MVP/MVPApi.ts","Dataflows/Demographics/DemographicsSaga.ts","Services/DistributionListApi.ts","Dataflows/DistributionLists/DistributionListsSaga.ts","Dataflows/IndustryFocus/IndustryFocusAction.ts","Dataflows/IndustryFocus/IndustryFocusSaga.ts","Services/M365CopilotBenefitApi.ts","Dataflows/M365CopilotBenefit/M365CopilotBenefitSaga.ts","Dataflows/MVP/MVPAction.ts","Dataflows/MVP/MVPSaga.ts","Dataflows/ProgramLanguage/ProgramLanguageSaga.ts","Services/RD/RDApi.ts","Dataflows/RD/UserProfile/RDUserProfileAction.ts","Dataflows/RD/UserProfile/RDUserProfileSaga.ts","Dataflows/Region/RegionAction.ts","Dataflows/Region/RegionSaga.ts","Dataflows/School/SchoolSaga.ts","Dataflows/SocialNetwork/SocialNetworkSaga.ts","Dataflows/StateProvince/StateProvinceSaga.ts","Dataflows/TechnicalExpertise/TechnicalExpertiseAction.ts","Dataflows/TechnicalExpertise/TechnicalExpertiseSaga.ts","Dataflows/TechnologyArea/TechnologyAreaSaga.ts","Services/UserProfileApi.ts","Dataflows/UserProfile/UserProfileSaga.ts","Services/VisualStudioBenefitApi.ts","Dataflows/VisualStudioBenefit/VisualStudioBenefitSaga.ts","Services/EventApi.ts","Dataflows/Event/EventSaga.ts","Services/SA/SAApi.ts","Dataflows/SA/UpdateSARegistrationStatus/UpdateSARegistrationStatusAction.ts","Dataflows/SA/UpdateSARegistrationStatus/UpdateSARegistrationStatusSaga.ts","Dataflows/SA/UpdateSAProgramStatus/UpdateSAProgramStatusAction.ts","Dataflows/SA/UpdateSAProgramStatus/UpdateSAProgramStatusSaga.ts","Dataflows/Sagas/index.ts","Store/index.ts","Dataflows/ApplicationDetails/ApplicationDetailsSelector.ts","Components/ApplicationDetails/ActivityEventDetailsSidePanel.tsx","Components/ApplicationDetails/MVP/AdditionalActivitiesEvents.tsx","Components/ApplicationDetails/MVP/ApplicationFlags.tsx","Components/ApplicationDetails/MVP/ApplicationQuestions.tsx","Components/ApplicationDetails/MVP/HighlightedActivitiesEvents.tsx","Components/ApplicationDetails/MVP/Nomination.tsx","Components/ApplicationDetails/MVP/ProfileInformation.tsx","Components/ApplicationFlaggingSidePanel/ApplicationFlaggingSidePanel.styles.ts","Components/ApplicationFlaggingSidePanel/ApplicationFlaggingSidePanel.tsx","Components/ReactHookForm/RadioSelectController/RadioSelectController.styles.ts","Components/ReactHookForm/RadioSelectController/RadioSelectController.tsx","Components/ApplicationScoringSidePanel/ApplicationScoringSidePanel.tsx","Components/ManageApplicationSidePanel/ManageApplicationSidePanel.tsx","Dataflows/MVP/Comments/MVPCommentsSelector.ts","Components/MostValuableProfessionalComments/MostValuableProfessionalComments.tsx","Components/ProfileHeader/ApplicationProfileHeader.tsx","Components/UpdateTechnologyAreaSitePanel/UpdateTechnologyAreaSitePanel.tsx","Constants/SiteConstants.ts","Containers/MVP/MostValuableProfessionalApplicationDetailsContainer/MostValuableProfessionalApplicationDetailsContainer.tsx","Components/ConfirmationPopup/ConfirmationPopup.styles.ts","Components/ConfirmationPopup/ConfirmationPopup.tsx","Components/DistributionLists/UserProfileDistributionList.styles.ts","Components/DistributionLists/UserProfileDistributionList.tsx","Dataflows/MVP/UserProfile/MVPUserProfileSelector.ts","Components/MostValuableProfessionalDistributionLists/MostValuableProfessionalDistributionLists.tsx","Components/GrantAnnualExceptionSidePanel/GrantAnnualExceptionSidePanel.tsx","Components/MostValuableProfessionalProfile/MostValuableProfessionalProfile.styles.ts","Components/MostValuableProfessionalProfile/MostValuableProfessionalProfile.tsx","Components/ReactHookForm/MultiDropdownController/MultiDropdownController.styles.ts","Components/ReactHookForm/MultiDropdownController/MultiDropdownController.tsx","Dataflows/MVP/ProgramProfile/IMVPProgramProfileSelector.ts","Components/MostValuableProfessionalProgramProfileEditForm/MostValuableProfessionalProgramProfileEditForm.tsx","Dataflows/MVP/RetireProfile/IMVPRetireProfileSelector.ts","Components/MostValuableProfessionalRetireEditForm/MostValuableProfessionalRetireEditForm.tsx","Components/MostValuableProfessionalProgramProfile/MostValuableProfessionalProgramProfile.styles.ts","Components/MostValuableProfessionalProgramProfile/MostValuableProfessionalProgramProfile.tsx","Dataflows/MVP/Benefits/MVPBenefitsSelector.ts","Components/AzureBenefitExtendCreditForm/AzureBenefitExtendCreditForm.tsx","Components/M365CopilotBenefitDetail/M365CopilotBenefitDetail.styles.ts","Components/M365CopilotBenefitDetail/M365CopilotBenefitDetail.tsx","Components/M365DetailsEditForm/M365DetailsEditForm.tsx","Components/ProfileAzureBenefitDetail/ProfileAzureBenefitDetail.styles.ts","Components/ProfileAzureBenefitDetail/ProfileAzureBenefitDetail.tsx","Dataflows/RD/UserProfile/RDUserProfileSelector.ts","Components/AzureBenefitAddRecordForm/AzureBenefitAddRecordForm.tsx","Components/ProfileBenefitDetails/ProfileBenefitDetails.tsx","Components/MostValuableProfessionalProfileBenefits/MostValuableProfessionalBenefitDetails.tsx","Containers/MVP/MostValuableProfessionalDetailsContainer/MostValuableProfessionalDetailsContainer.tsx","Dataflows/MVP/Search/MVPUserProfileSearchSelector.ts","Components/MostValuableProfessionalList/MostValuableProfessionalList.tsx","Containers/MVP/MostValuableProfessionalSearchContainer.tsx","Components/Navigation/Navigation.styles.ts","Components/Navigation/Navigation.tsx","Containers/Navigation/NavigationContainer.tsx","Containers/PageNotFound/PageNotFoundContainer.tsx","Containers/RD/Events/RegionalDirectorsEventsContainer.tsx","Containers/RD/Home/RegionalDirectorsHomeContainer.tsx","Components/RegionalDirectorBenefitDetails/RegionalDirectorBenefitDetails.tsx","Components/RegionalDirectorComments/RegionalDirectorComments.styles.ts","Components/RegionalDirectorComments/RegionalDirectorComments.tsx","Components/RegionalDirectorProfile/RegionalDirectorProfile.styles.ts","Components/RegionalDirectorProfile/RegionalDirectorProfile.tsx","Components/RegionalDirectorProgramProfileEditForm/RegionalDirectorProgramProfileEditForm.tsx","Components/RegionalDirectorProgramProfile/RegionalDirectorProgramProfile.styles.ts","Components/RegionalDirectorProgramProfile/RegionalDirectorProgramProfile.tsx","Components/RegionalDirectorsDistributionLists/RegionalDirectorsDistributionLists.tsx","Components/RegionalDirectorDetails/RegionalDirectorDetails.tsx","Containers/RD/RegionalDirectorDetailsContainer/RegionalDirectorsDetailsContainer.tsx","Components/RegionalDirectorsList/RegionalDirectorsList.tsx","Containers/RD/RegionalDirectorsContainer/RegionalDirectorsContainer.tsx","Components/NavigationLink/NavigationLink.styles.ts","Components/NavigationLink/NavigationLink.tsx","Components/SideNavigation/SideNavigation.styles.ts","Components/SideNavigation/SideNavigation.tsx","Constants/SideNavigationLinks.ts","Containers/SideNavigation/SideNavigationContainer.tsx","Containers/Students/Home/StudentHomeContainer.tsx","Components/StudentList/StudentList.tsx","Utility/FileUploadHelper.ts","Dataflows/SA/UpdateSARegistrationStatus/UpdateSARegistrationStatusSelector.ts","Components/UpdateSARegistrationStatus/UpdateSARegistrationStatus.styles.ts","Components/UpdateSARegistrationStatusSidePanel/UpdateSARegistrationStatusSidePanel.tsx","Dataflows/SA/UpdateSAProgramStatus/UpdateSAProgramStatusSelector.ts","Components/UpdateSAProgramStatusSidePanel/UpdateSAProgamStatusSidePanel.tsx","Components/UpdateSARegistrationStatus/UpdateSARegistrationStatus.tsx","Containers/Students/StudentsContainer.tsx","Containers/Unauthorized/UnauthorizedContainer.tsx","Containers/App/AppContainer.styles.tsx","Containers/App/AppContainer.tsx","index.tsx"],"names":["module","exports","Boolean","window","location","hostname","match","backendHost","process","APPLICATION_BASE_URL","concat","ACTIVITY_EVENT_BASE_URL","APPLICATIONS_BASE_URL","APPLICATION_FLAGS_URL","QUESTION_ANSWERS_URL","APPLICATION_ACTIVITIES_EVENTS_URL","USERPROFILE_ACTIVITIES_EVENTS_URL","ADMIN_USER_BASE_URL","MVP_AZURE_BENEFIT_BASE_URL","RD_AZURE_BENEFIT_BASE_URL","MVP_M365_COPILOT_BENEFIT_BASE_URL","RD_M365_COPILOT_BENEFIT_BASE_URL","EVENT_BASE_URL","PROFILE_BASE_URL","PROFILE_BLOCK_SHIPPING_BASE_URL","MVP_PROFILE_BLOCK_SHIPPING_BASE_URL","BENEFIT_BASE_URL","DISTRIBUTION_LIST_BASE_URL","GENERIC_DISTRIBUTION_LIST_BASE_URL","VISUAL_STUDIO_BENEFIT_BASE_URL","VISUAL_STUDIO_BENEFIT_DOWNLOAD_URL","RD_PROFILE_BASE_URL","MVP_PROFILE_BASE_URL","PROGRAM_PROFILE_BASE_URL","MVP_PROGRAM_PROFILE_BASE_URL","MVP_RETIRE_BASE_URL","RD_PROGRAM_PROFILE_BASE_URL","SITECONTENT_BASE_URL","UPLOAD_CSV_FILE_SA_REGISTRATION_STATUS","SUBMIT_CSV_FILE_SA_REGISTRATION_STATUS","UPLOAD_CSV_FILE_SA_PROGRAM_STATUS","SUBMIT_CSV_FILE_SA_PROGRAM_STATUS","SITECONTENT_AWARD_PERIODS_BASE_URL","SITECONTENT_COUNTRYREGIONS_BASE_URL","SITECONTENT_STATEPROVINCES_BASE_URL","SITECONTENT_SCHOOLS_BASE_URL","SITECONTENT_SOCIALNETWORKS_BASE_URL","SITECONTENT_CLREGIONS_BASE_URL","SITECONTENT_ACTIVITY_EVENT_TYPES_BASE_URL","INDUSTRY_FOCUS_BASE_URL","TECHNICAL_EXPERTISE_BASE_URL","PROGRAM_LANGUAGE_BASE_URL","TECHNOLOGY_AREA_BASE_URL","CL_REGIONS_BASE_URL","GEO_DATA_BASE_URL","COMMON_DATA_BASE_URL","SITECONTENT_AWARD_KIT_SKU_BASE_URL","AWARDCATEGORIES_BASE_URL","ACCESS_CONTROL_BASE_URL","requiresInteraction","errorMessage","length","indexOf","MAVEN_SCOPES","USER_ACCESS","GRAPH_ENDPOINTS","GRAPH_REQUESTS","LOGIN","scopes","extraScopesToConsent","MAVEN_REQUESTS","msalApp","UserAgentApplication","auth","clientId","authority","validateAuthority","redirectUri","origin","postLogoutRedirectUri","navigateToLoginRequestUrl","cache","cacheLocation","storeAuthStateInCookie","isIE","ua","navigator","userAgent","msie","msie11","system","navigateFrameWait","HttpStatusCode","Object","freeze","Ok","CreatedAt","NoContent","BadRequest","Unauthorized","Forbidden","NotFound","ServerError","NotImplemented","BadGateway","ServiceNotAvailable","async","acquireToken","request","redirect","acquireTokenSilent","catch","error","errorCode","acquireTokenRedirect","acquireTokenPopup","http","isProtectedEndpoint","arguments","undefined","isResponseJson","response","tokenResponse","Promise","reject","fetch","headers","Authorization","accessToken","status","parsedBody","json","httpStatusCode","Error","get","path","args","method","Request","post","body","JSON","stringify","put","remove","authContext","createContext","isUserLoggedIn","loading","useProvideAuth","adminAccount","setAdminAccount","useState","setError","setLoading","graphProfile","setGraphProfile","adminPermissions","setAdminPermissions","authCallback","adminRoles","adminRolePermissions","map","rolePermission","role","hasAnyRoles","useEffect","handleRedirectCallback","account","getAccount","url","fetchMsGraph","fetchAdminUserPermissions","adminUserPermissionsResult","adminEmail","adminApi","userName","adminPermissionsResult","hasPermission","tenant","verifyPermission","filter","permissions","permission","hasRole","onSignIn","loginRedirect","onSignOut","logout","roles","AuthProvider","_ref","children","React","createElement","Provider","value","useAuth","useContext","theme","getTheme","FlexRow","styled","div","_templateObject","_taggedTemplateLiteral","Title","p","_templateObject2","FontSizes","size20","FontWeights","semibold","palette","black","containerStackStyles","root","height","containerStackTokens","childrenGap","wrapperStackStyles","padding","commandBarStyles","borderRadius","boxShadow","margin","selectors","marginRight","fontSize","fontWeight","buttonStackTokens","listStackStyles","backgroundColor","white","FlexRowAlignedCenter","PaddedFlexRow","searchBoxStyles","tableStackStyles","DetailWrapper","_templateObject3","RDFlexRow","img","_templateObject4","_templateObject5","Link","_templateObject6","mediumPlus","_templateObject7","RDPaddedFlexRow","_templateObject8","RDButtonStyles","marginLeft","RDTextStyles","color","flexGrow","Login","renderRedirect","sessionStorage","setItem","pathname","Redirect","to","PrivateRoute","component","Component","rest","Route","assign","render","props","Spinner","size","SpinnerSize","large","RedText","red","FormikErrorMessage","ErrorMessage","name","msg","aria-relevant","className","bodyContainerStackStyles","eventsAndActivityBodyContainerStackStyles","overflowX","bodyContainerStackTokens","labelStyles","headerStackStyles","bodyRowStackStyles","display","justifyContent","bodyColumnStackItemStyles","width","headerTextStyles","ContainerWrapper","DetailsListWrapper","TableTextWrapper","detailsListStyles","paddingTop","themePrimary","size14","ChevronIcon","FontIcon","iconName","PaginationRow","detailListStyles","iconButtonStyles","neutralPrimary","rootHovered","neutralDark","ModalContent","ModalHeader","modalHeaderStyles","xLarge","modalStyles","mergeStyles","flexFlow","alignItems","minHeight","maxHeight","position","spinnerStyles","marginTop","StyledSpan","span","highActivitiesEventsDetailsHeaderStyles","filterButtonStyles","OperationStatus","getDistributionLists","state","distributionListsState","distributionLists","getNetworkOperationStatus","networkOperationStatus","getNetworkOperationStatusApprove","networkOperationStatusApprove","getNetworkOperationStatusError","networkOperationError","getNetworkOperationStatusApproveError","networkOperationApproveError","getCurrentPage","currentPage","getPageSize","pageSize","getCurrentTenant","currentTenant","getFilteredCount","filteredCount","getDistributionListsByTenant","distributionListsByTenant","getDistributionListsByTenantCount","distributionListsByTenantCount","getSelectedDistributionList","selectedDistributionList","getSelectedDistributionListMicrosoftMembers","selectedDistributionListMicrosoftMembers","getNetworkOperationStatusAddMember","networkOperationStatusAddMember","getNetworkOperationStatusRemoveMember","networkOperationStatusRemoveMember","getAddMemberToDLErrorMessage","addMemberToDLErrorMessage","getRemoveMemberFromDLErrorMessage","removeMemberFromDLErrorMessage","getNetworkOperationStatusFetchMicrosoftMembers","networkOperationStatusFetchMicrosoftMembers","getNetworkOperationStatusFetchByTenant","networkOperationStatusFetchByTenant","getFetchDistributionListsByTenantError","fetchDistributionListsByTenantError","border","marginBottom","MicrosoftMembersList","microsoftMembers","useSelector","members","setMembers","setCurrentPage","setPageSize","fetchingMembersOperationStatus","addingMemberOperationStatus","removingMemberOperationStatus","canRemoveUser","setIsAddingUser","setIsRemovingUser","setIsPanelOpen","setSelectedEmail","Succeeded","startIndex","endIndex","slice","Pending","styles","Fragment","Stack","Text","TextField","label","onChange","onChangeText","ev","text","displayNameLookup","x","displayName","toLowerCase","emailLookup","email","lookupResults","_union","DetailsList","items","columns","key","ariaLabel","fieldName","minWidth","isResizable","selectionMode","SelectionMode","none","getKey","item","setKey","layoutMode","DetailsListLayoutMode","fixedColumns","isHeaderVisible","onRenderRow","defaultRender","selectedMicrosoftMember","onClick","handleClick","enterModalSelectionOnTouch","Pagination","total","page","showTitle","current","prevIcon","nextIcon","showSizeChanger","Dropdown","options","_e","op","selectedKey","title","panelHeaderStyles","lineHeight","buttonStyles","messageBarStyles","icon","panelContentStyles","content","SidePanel","isOpen","saveButtonLabel","cancelButtonLabel","disableActions","hideFooter","onDismiss","onSave","onCancel","Panel","type","PanelType","medium","closeButtonAriaLabel","onRenderHeader","onRenderHeaderContent","onRenderFooterContent","MessageBar","messageBarType","MessageBarType","warning","Separator","PrimaryButton","disabled","DefaultButton","isFooterAtBottom","peoplePickerSuggestionProps","suggestionsHeaderText","mostRecentlyUsedHeaderText","noResultsFoundText","loadingText","showRemoveButtons","suggestionsAvailableAlertText","suggestionsContainerAriaLabel","MICROSOFT_DOMAIN_REGEX","RegExp","RolesEnum","PermissionsEnum","RoleNamesEnum","ApplicationReviewStatusesEnum","TenantTypesEnum","SubSiteUrlRootPath","mlsa","MLSA","rd","RD","mvp","MVP","searchDistributionListsFail","updateCurrentPage","updatePageSize","approveOrDeclineJoinRequestFail","fetchDistributionListsByTenantFail","fetchMicrosoftMembersForDL","dlAlias","fetchMicrosoftMembersForDLFail","addMicrosoftMemberToDLFail","removeMicrosoftMemberFromDLFail","callMsGraphGetUserByEmail","Headers","bearer","append","then","getTenant","MSP","onInputChange","input","emailAddress","exec","substring","GetApplicationQuestionsGroupBySectionAndByQuestionId","applicationQuestions","_","chain","groupBy","question","questionSection","mapValues","questions","questionId","questionLocKey","groupedQuestions","questionText","orderBy","questionResponseText","join","ContentContainer","PageHeader","PanelSubHeader","h3","size32","size24","Subtitle","regular","size16","h2","FlexWrapper","StyledForm","Form","_templateObject9","verticalStackTokens","horizontalStackTokens","fieldItemStyles","flexStackStyles","flexWrap","footerButtonStyles","formStackStyles","flexDirection","DistributionListDetails","dispatch","useDispatch","history","useHistory","emailAlias","useParams","isPanelOpen","isAddingUser","isRemovingUser","userDetails","setUserDetails","selectedEmail","successMessage","setSuccessMessage","isAddingOrRemoving","setIsAddingOrRemoving","isSubmitting","setIsSubmitting","addUserErrorMessage","removeUserErrorMessage","canUpdateDistributionList","MVP_UPDATE_DISTRIBUTIONS_LIST","RD_UPDATE_BENEFITS","dismissPanel","cleanup","distributionListEmail","Failed","picker","useRef","iconProps","handlePanelClick","test","firstName","lastName","addMicrosoftMemberToDL","memberEmail","removeMicrosoftMemberFromDL","save","onFilterChanged","filterText","currentPersonas","endsWith","find","id","imageInitials","secondaryText","userPrincipalName","presence","PersonaPresence","givenName","surname","defaultSelect","renderItemWithSecondaryText","newProps","ValidationState","valid","showSecondaryText","PeoplePickerItem","addMSMemberSchema","Yup","shape","String","notOneOf","ms","removeMSMemberSchema","ActionButton","onBackClickEvent","goBack","tokens","distributionGroupDisplayName","CommandBar","success","Formik","initialValues","validationSchema","onSubmit","setFieldValue","isValid","errors","horizontal","wrap","Item","Label","Field","NormalPeoplePicker","placeholder","defaultSelectedItems","emailUser","userInfo","onResolveSuggestions","pickerSuggestionsProps","onRenderItem","removeButtonAriaLabel","inputProps","componentRef","resolveDelay","itemLimit","getProfileBenefits","userProfileId","profileBenefitsFail","profileBenefitsErrorMessage","updateProgramProfileFailure","message","searchUserProfiles","searchText","selectedUserProfilesFilterValues","searchPage","searchUserProfilesSuccess","userProfiles","searchUserProfilesFail","addUserProfilesFilterValue","filterValue","removeUserProfilesFilterValue","removeUserProfilesFilterProvinceValue","updateUserProfilesFilterValue","loadUserProfile","loadUserProfileSuccess","userProfile","loadUserProfileFail","updateSelectedUserProfileId","updateUserProfileSuccess","updateUserProfileFail","loadUserProfileCommentsSuccess","userProfileComments","loadUserProfileCommentsFail","loadCommentsError","addNewCommentFail","loadUserProfileVSBenefitFail","provisionUserProfileVSBenefitFail","extendUserProfileVSBenefitFail","endUserProfileVSBenefitFail","claimBenefit","benefitType","claimBenefitFail","claimBenefitReset","fetchProgramProfile","programProfileId","fetchProgramProfileFail","userProfileUpdateBlockShippingFail","userProfileDlLoad","userProfileDlLoadFail","userProfileDlRemove","dlGroup","userEmail","userProfileDlRemoveFail","userProfileDlRemoveAll","userProfileDlRemoveAllFail","userProfileIsPrivateUpdateFail","resetUserProfileFilterValue","getUserProfilesFilterValues","userProfileState","userProfileFilterValues","getUserProfile","selectedUserProfile","getAppStateUserProfile","isUserProfilesLoading","isAppStateSelectedUserProfileUpdating","isSelectedUserProfileUpdating","isAppStateCurrentUserProfileLoading","isCurrentUserProfileLoading","getAppStateUpdateUserProfileError","updateUserProfileError","getAppStateUserProfileComments","commentsState","isUserProfileCommentsLoading","getLoadCommentsError","_state$userProfileSta","commentsErrorMessage","getSearchText","getProgramProfileUpdateErrorMessage","programProfileUpdateError","getProgramProfileOperationStatus","programProfileOperationStatus","getProgramProfileErrorMessage","fetchProgramProfileError","getIsClaimingBenefitsError","_state$userProfileSta2","benefitsOperationStatus","create","claimBenefitError","profileBenefits","getProfileBenefitsStatus","profileBenefitsStatus","getProfileBenefitsErrorMessage","getUpdateVSProfileBenefitStatus","updatingVSBenefitOperationStatus","getUpdateVSProfileBenefitsError","updateVSBenefitsError","getProgramProfile","programProfile","getAddCommentOperationStatus","_state$userProfileSta3","commentsOperationStatus","getUserProfileDl","getUserProfileDlLoadStatus","loadingDlStatus","getUserProfileDlRemoveStatus","removingDlStatus","getUserProfileDlRemoveError","removingDlErrorMessage","getUserProfileDlRemoveAllStatus","removingAllDlStatus","getUserProfileDlRemoveAllError","removingAllErrorMessage","getUserProfileUpdateIsPrivateError","updateIsPrivateProfileError","getUserProfileUpdateIsPrivateOperationStatus","updateIsPrivateProfileStatus","getIsClaimingBenefitStatus","_state$userProfileSta4","MEDIA_BREAK","MIN_PRIMARY_COLUMN_WIDTH","screen","Space","paddingBottom","paddingLeft","paddingRight","FlexCol","Column","flex","textAlign","alignSelf","ColumnContent","_ref2","Row","_ref3","ErrorMessageDiv","RedTextDiv","HookErrorMessage","inputName","messages","entries","desktopInputFontSize","mobileInputFontSize","checkboxStyles","CheckboxController","labelDisplayName","control","isDisabled","Controller","field","Checkbox","aria-labelledby","e","checked","CharacterCounterDiv","CharacterCounter","currentCount","localizedCharactersDisplayText","localizedMaximumDisplayText","localizedMinimumDisplayText","maximumCount","minimumCount","isMinimumCountMet","getPercentValue","maximum","ProgressIndicator","ariaValueText","charactersText","minimumText","minimum","getMaximumCharactersText","maximumText","description","getCurrentMaximumCharactersText","barHeight","percentComplete","alertDescription","itemDescription","itemName","small","textFieldStyles","fieldGroup","prefix","CounterAndErrorMessageDiv","TextFieldController","characterCounterProps","characterCountLimit","defaultValue","hasTooltip","isMultiline","isRequired","localizedDescriptionDisplayText","placeholderText","toolTipDisplayText","onChangeFromProps","subText","suffix","textFieldType","textFieldValue","useWatch","htmlFor","required","TooltipHost","Icon","aria-label","hasAsterisk","tabIndex","maxLength","multiline","autoAdjustHeight","newValue","TOO_LONG","INPUT_REQUIRED","INVALID_PHONE_NUMBER","ADDRESS_ENGLISH_REG_EX","INVALID_EMAIL_REG_EX","GUID_REG_EX","UpdatePrimaryEmailPanel","setIsOpen","updatePrimaryEmailStatus","updatePrimaryEmailError","onPrimaryEmailUpdate","onPrimaryEmailUpdateReset","handleSubmit","reset","formState","useForm","defaultValues","azureBenefitEmailChecked","newEmail","resolver","yupResolver","oneOf","matches","externalEmail","replace","onSaveClicked","data","StackItem","bolderTextStyles","normalTextStyles","isCompetitorTextStyles","bolderTextStylesSmall","isCompetitorTextStylesSmall","privateProfileTextStyles","contentStackTokens","headerStackTokens","contentStackStyles","applicationContentStackStyles","updateButtonStyles","blue","ProfileHeader","primaryEmail","secondaryEmail","tenants","isPrivate","isOvdfBlock","technologyAreas","yearsInProgram","isCompetitor","companyName","jobTitle","canUpdatePrimaryEmail","isUpdatePrimaryEmailPanelOpen","setIsUpdatePrimaryEmailPanelOpen","CommandBarButton","renderTenantLinks","index","tenantName","tenantDisplayName","technologyArea","technologyFocusAreaName","benefitLabelStyles","containerStyles","horizontalGapStackTokens","removeButtonStyles","redDark","fieldTypes","FilterValueFieldNames","BenefitStatusEnum","BenefitNameEnum","BenefitDisplayNameEnum","benefitNameToResultMap","AzureRequests","Azure","GitHubPro","MCP","LinkedInLearning","Teams","VisualStudio","O365","M365","M365Copilot","AwardKits","SwagKit","MS365","BenefitsSubSiteUrlPath","azureRequests","gitHubPro","linkedInLearning","m365Copilot","mcp","teams","awardKit","visualStudio","swagKit","benefitStatus","benefitFilterFields","defaultFilterValues","tenantBenefitTypes","additionalFilter","countryCodePool","sku","CountryCodePoolColumn","teamsCountryCodePool","o365CountryCodePool","values","ms365CountryCodePool","benefitTeamsFilterWithCountryCodePool","benefitO365FilterWithCountryCodePool","benefitMS365FilterWithCountryCodePool","SwagKitColumn","benefitSwagKitFilter","SKUColumn","benefitAwardKitFilter","VisualStudioBenefitDetailSidePanel","isProvisioned","currentStatus","canEnableBenefits","assignBenefitClicked","extendBenefitClicked","removeBenefitClicked","operationStatus","delay","isSaving","CopyButton","showCopyText","isCopied","setIsCopied","copyToClipboard","clipboard","writeText","setTimeout","verticalAlign","neutralTertiaryAlt","copyIconStyles","right","top","transform","ApplicationStatusTypesEnum","APPLICATION_STATUS_DROPDOWN_OPTIONS","InvitedPending","DeclinePending","DecisionPending","ApplicationTypeEnum","ApplicationTabs","QuestionsFormSectionStringEnum","applicationTypes","ANY","NEW","RENEW","applicationTypesWithoutAny","applicationStatusMLSA","INVITED","SAVED","UNDER_REVIEW","Declined","applicationStatusMvp","Submitted","REVIEW_ELIGIBLE","NOT_SUBMITTED","applicationStatusRd","TechnologyAreaStatusEnum","technologyAreaStatuses","DeclinedPending","ME","anyOrMeOptions","MVP_REVIEWER","COMMUNITY_MANAGER","technologyAreaStatusReasonEnum","technologyAreaStatusReasons","BelowMinScore","ExceedsCap","MayWorkForCompetitor","ManualDecline","NotScored","RenewalNotSubmitted","NeedManualInput","GENERIC_API_TIMEOUT_ERROR","studentsApplicationFilterFields","ApplicationCohortEnum","cohortOptions","Any","Current","Future","Past","FlagReasons","REASON_FOR_FLAG_DROPDOWN_OPTIONS","WrongCategoryTechArea","Misconduct","MVPRequestedToBeRetired","NeedsAdditionalReview","GovernmentOfficial","VendorAtMicrosoft","HiredByMicrosoft","UnscoredApplication","REASON_FOR_FLAG_DROPDOWN_MULTISELECT_OPTIONS","NotFlagged","mvpApplicationFilterFields","REVIEW_STATUS","COHORT","ASSIGNED_TO","TECHNOLOGY_AREA_GROUP","TECHNOLOGY_AREA","TECHNOLOGY_AREA_STATUS","SCORE","toString","TECHNOLOGY_AREA_STATUS_REASON","sort","a","b","localeCompare","FLAG_REASON","AVAILABLE_CPM_LIST","COUNTRY","GRANT_ANNUAL_EXCEPTION","rdApplicationFilterFields","mvpActivitiesEventsFilterFields","ACTIVITY_OR_EVENT","ACTIVITY_OR_EVENT_TYPE","defaultActivitiesEventsFilterValues","SidePanelConstants","ReviewSubSiteUrlPath","applications","demographics","mvpApplicationDemographicsFilterFields","REGION","GENDER","defaultMvpDemographicsFilterValues","urlInvalidError","STATE_COUNTRIES","ProfileTabs","milestones","newMilestone","_find","programStatusTypes","acceptedApplicationStatus","MlsaProgramProfileStatuses","mvpProgramProfileStatuses","mvpProgramProfileRetireStatuses","mvpAnnualExceptionOptions","AwardkitMilestone","rdProgramProfileStatuses","activeProgramProfileStatus","schoolDegreeLevels","schoolDegreePrograms","namesLocalized","mlsaUserSidebarFilterFields","OTHER_PROGRAM_MEMBERSHIP","defaultMlsaFilterValues","mvpSidebarFilterFields","PROGRAM_STATUS","STATE_PROVINCE","AWARD_PERIOD_START_DATE","AWARD_PERIOD_END_DATE","NDA_STATUS","OVDF_BLOCK","defaultMvpFilterValues","rdSidebarFilterFields","defaultRdFilterValues","mvpProgramProfileStrengths","VALIDATE_COUNTRY_NAMES","VALID_FILE_TYPES","SwagKitType","ProfileBenefitOtherTenant","style","Benefits","VisualStudioBenefitDetail","benefits","canManageBenefits","benefitOtherTenantName","maxWidth","justified","ariaLabelForSelectionColumn","ariaLabelForSelectAllCheckbox","checkButtonAriaLabel","checkboxVisibility","CheckboxVisibility","hidden","onRenderItemColumn","renderItemColumn","column","startDate","Date","toDateString","expirationDate","lastRenewalDate","subscriptionGuid","fieldContent","trimContent","comboBoxStyles","container","ComboBoxController","autoComplete","defaultSelectedKey","comboboxElement","Array","from","document","getElementsByClassName","addAriaLabel","createAttribute","setAttributeNode","cursor","ComboBox","useComboBoxAsMenuWidth","scrollSelectedToTop","option","neutralLight","KeyBenefitsList","editM365DetailsClicked","editMS365DetailsClicked","m365BenefitDetail","m365FetchErrorMessage","m365FetchStatus","ms365BenefitDetail","ms365FetchErrorMessage","ms365FetchStatus","editM365Details","editMS365Details","benefitActionItems","m365TypeColumn","teamsTypeColumn","awardKitsTypeColumn","isM365Benefit","isMS365Benefit","isTeamsBenefit","isAwardKits","splice","getBenefitTitle","tenantId","subscriptionId","claimedDate","href","containerStylesWithMarginTop","mergeStyleSets","StudentBenefitDetails","_selectedUserProfile$","_selectedUserProfile$2","_selectedUserProfile$3","_selectedUserProfile$4","claimingBenefitError","isClaimingBenefitStatus","MLSABenefitsSelector","isAssignPanelOpen","setIsAssignPanelOpen","benefitToClaim","setBenefitToClaim","isClaimingBenefit","MLSAActions","parseInt","visualStudioBenefitOperationStatus","visualStudioBenefitError","MSA_BENEFITS_MANAGER","MSA_PROGRAM_OWNER","hasStudentPartnerEmail","studentPartnerEmail","includes","levelStatus","levelName","programProfileStatusName","assignBenefitClickedVs","getBenefitOtherTenantName","benefitTenant","getProfileBenefitsMap","dismissAssignPanel","benefitLists","_getProfileBenefitsMa","_getProfileBenefitsMa2","_getProfileBenefitsMa3","_getProfileBenefitsMa4","_getProfileBenefitsMa5","_getProfileBenefitsMa6","_getProfileBenefitsMa7","_getProfileBenefitsMa8","formData","textFieldStackStyles","textStyles","errorMessageStyles","borderColor","neutralTertiary","AddComment","textValue","setTextValue","onAddCommentClicked","addCommentStatus","times","timespan","emptyDate","moment","utc","format","isDateEmpty","dateObject","formatDate","utcDateStr","momentDate","toLocaleDateString","year","month","day","convertFromDateTimeToDate","dateTime","parse","getEventDateAsLocalDateString","date","timeZoneOffset","eventDate","setMinutes","getMinutes","getUTCFullYear","getUTCMonth","getUTCDate","getEventTimeText","getUTCHours","padStart","getUTCMinutes","time","getFormattedDateTime","formatDateEu","removeDateTimeOffset","dt","getTimezoneOffset","addDateTimeOffset","commentStackTokens","commentContainerStackStyles","commentTextStackStyles","createdTextStyles","createdDateTextStyles","commentTextStyles","overflowWrap","CommentDetail","userProfileComment","dateCreated","createdBy","messageStackStyles","CommentsHistory","isLoading","isEmpty","sortBy","comment","reverse","StudentComments","_useSelector","addCommentOpStatus","loadUserProfileComments","canAddComments","MSA_UPDATE_USERS","newComment","addNewComment","SetProfileToPrivateSidePanel","updateStatus","updateError","panelProps","getSchoolData","countryRegionName","getSchoolDataFailure","schoolDataLoadError","getStateProvince","getStateProvinceFailure","stateProvincesLoadError","getStateProvinceShipping","getStateProvinceShippingFailure","stateProvincesShippingLoadError","getStateProvinceSchool","getStateProvinceSchoolFailure","stateProvincesSchoolLoadError","DayPickerStrings","months","shortMonths","days","shortDays","goToToday","prevMonthAriaLabel","nextMonthAriaLabel","prevYearAriaLabel","nextYearAriaLabel","FormikDatePicker","form","minDate","maxDate","endDate","DatePicker","strings","onSelectDate","initialPickerDate","FormikDropdown","FormikMultiDropdown","selectedKeys","multiSelect","newItem","background","FullWidth","existingItem","FormikPicker","touched","TagPicker","onRenderSuggestionsItem","isNewItem","onItemSelected","_onFilterChanged","tagList","existingMatches","suggestedItems","tag","_listContains","compareTag","allowTypedInputItemResult","some","getTextFromItem","selectedItems","FormikTextField","FormikToggle","Toggle","inlineLabel","datePickerFieldStyles","textField","xLargePlus","xxLargePlus","FieldSet","fieldset","FieldBlock","formSectionTitleStyles","horizontalFormFieldsStackTokens","sectionSubtitleStyles","toggleFieldStyles","ShippingSameRow","shippingSameLabelStyles","ShippingSameSwitch","IsSocialMediaPrivateRow","IsSocialMediaPrivate","isSocialMediaPrivateLabelStyles","formSectionsFields","fields","StudentEditProfile","isUpdating","setIsUpdating","handleBlur","handleChange","stateProvinceOptionList","countryRegionOptionList","countryRegionPhoneOptionList","stateProvinceShippingOptionList","stateProvinceSchoolOptionList","schoolOptionList","socialNetworkOptionList","programLanguageOptionList","canEditUser","updateProfileError","handlePanelClose","shippingSameAsAddress","shippingAddress1","shippingAddress2","shippingCity","shippingPostCode","shippingCountryOrRegionName","shippingStateOrProvince","shippingPhoneCountryOrRegionName","shippingPhoneNumber","indexPersonalInformation","findIndex","obj","indexUserProfileProgramLanguage","handleOnSave","section","block","FastField","stackWidth","showGoToToday","fieldProps","selected","currIndex","tapi","addressStateOrProvince","onBlur","as","rows","userProfileSchool","profileSchool","_values$userProfileSc","_values$userProfileSc2","userSchool","emptyCountryName","SchoolCountryRegionName","emptyStateName","schoolStateProvinceName","emptyStateList","isArray","suggestionHeaderText","noResultFoundText","itemProps","onKeyPress","preventIcon","schoolName","addYears","now","addDays","userProfileSocialNetwork","profileSocialNetwork","urlPrefix","socialNetworkUrlPrefix","phones","isMobilePhone","str","hasOwnProperty","appInsights","ai","initialize","instrumentationKey","ApplicationInsights","config","disableFetchTracking","extensions","extensionConfig","enableCorsCorrelation","enableAutoRouteTracking","loadAppInsights","trackPageView","getAppInsights","StudentProfileValidationSchema","yup","titleName","trim","genderName","dateOfBirth","address1","max","address2","excludeEmptyString","addressCity","addressCountryOrRegionName","when","val","nullable","addressPostCode","is","otherwise","ensure","primaryPhoneCountryOrRegionTapiCode","primaryPhone","parent","createError","this","tapiCode","countryName","primaryPhoneCountryOrRegionName","phoneNumber","fullNumber","validator","validatorHelper","_getAppInsights","trackTrace","severityLevel","SeverityLevel","Information","properties","shippingPhoneCountryOrRegionTapiCode","_getAppInsights2","of","schoolDegreeLevelName","schoolDegreeProgramName","schoolCountryRegionName","expectedGraduationDate","companyRole","StudentEditProfileEnhancedForm","withFormik","validateOnMount","mapPropsToTouched","shouldValidate","localizedFirstName","localizedLastName","genderPronounPreferenceName","shirtFitType","shirtSize","languages","biography","headline","socialNetworkName","handle","mapPropsToValues","_props$countryRegionP","_props$countryRegionP2","_props$countryRegionP3","_props$countryRegionP4","addresses","awardNameLocalized","companySize","companyUrl","microsoftReferralId","isPrivacyAgreed","isShippingBlocked","isTextOptIn","onboardingWizardStep","phoneContacts","primaryAddressId","primaryPhoneCountryOrRegionId","primaryPhoneId","profileImageUrl","profilePictureUrl","profilePictureBase64","programProfileBenefit","programProfileStatusId","screenNameLocalized","shippingAddressId","shippingName","shippingPhoneCountryOrRegionId","shippingPhoneId","school","userProfileProgramLanguage","schoolOptionsSelected","setSubmitting","application","dateDeleted","dateModified","deleted","deletedBy","fullPhoneNumber","isOnboardingWizardComplete","modifiedBy","newSchoolAdded","onboardingWizardStepId","pictureLink","programProfileStartDate","programProfileEndDate","puid","renewalStatusName","shippingCompany","shippingCountryOrRegionId","userProfileIdentifier","updateUserProfile","StudentEditProfileForm","getCountryRegionsOptionList","getAppStateCountryRegionsOptionList","countryRegionDataState","getAppStateCountryRegionPhoneOptionList","getCountryRegionLoadError","countryRegionLoadError","getAppStateCountryRegionLoadError","getProgramLanguageFailure","programLanguageLoadError","getAppStateProgramLanguageOptionList","programLanguageDataState","getAppStateProgramLanguageLoadError","getAppStateSchoolOptionList","schoolDataState","getAppStateSchoolLoadError","getSocialNetworkFailure","socialNetworkLoadError","getAppStateSocialNetworkOptionList","socialNetworkDataState","getAppStateSocialNetworkLoadError","getStateProvincesOptionList","stateProvincesOptionList","getAppStateProvincesOptionList","stateProvinceDataState","getAppStateStateProvinceShippingOptionList","stateProvincesShippingOptionList","getAppStateStateProvinceSchoolOptionList","stateProvincesSchoolOptionList","getStateProvinceLoadError","getAppStateStateProvinceLoadError","getAppStateStateProvinceShippingLoadError","getAppStateStateProvinceSchoolLoadError","subHeaderTextStyles","size18","green","StudentProfile","_profileInfo$applicat","_find2","_profileInfo$language","_profileInfo$userProf","_profileInfo$isPrivat","isSetToPrivatePanelOpen","setIsSetToPrivatePanelOpen","profileInfo","countryRegionsLoadError","schoolsDataLoadError","socialNetworksDataLoadError","programLanguageDataLoadError","userProfileIsPrivateUpdateStatus","userProfileIsPrivateUpdateError","applicationStatus","handleSetProfileToPrivateTogglePanel","commandBarItems","o","socialNetworkImageLink","isSelectedUserProfileLoading","handleUpdateUserProfile","handleSetProfileToPrivateSave","datePickerStyles","DatePickerController","checkedStartDate","spanStyles","peoplePickerStyles","PeoplePickerController","keyPropertyName","suggestedOptions","setSuggestedOptions","defaultPersonas","setDefaultPersonas","_option$text","_option$secondaryText","startsWith","onEmptyResolveSuggestions","onRemoveSuggestion","StudentProgramProfileEditForm","shouldAutoAdvanceLevel","programEndDate","levelStatusName","cpm","programProfileErrorMessage","update","availableCommunityProgramManagers","assignees","assignee","StudentProgramProfile","formatDateOrUndefined","canEditProgramProfile","MSA_REVIEWER","read","dateLastModified","dateSubmitted","programProfileStatus","useProfileTabs","tab","URLSearchParams","search","selectedTab","setSelectedTabName","Profile","setSelectedTab","StudentDetails","Number","UserProfileActions","UserProfileSelector","Pivot","onLinkClick","itemKey","PivotItem","headerText","ProgramInformation","Comments","accessControlUserStatusTypes","accessControlUserStatus","accessControlUserRole","MVP_PROGRAM_OWNER","PROGRAM_OWNER","MVP_TECH_AREA_VALIDATOR","PRODUCT_GROUP_PARTNER","MVP_BENEFITS_MANAGER","BENEFITS_MANAGER","MVP_EXECUTIVE","EXECUTIVE","MVP_BUSINESS_GROUP","BUSINESS_GROUP","MSA_GUEST","GUEST","RD_PROGRAM_OWNER","RD_REVIEWER","RD_GUEST","RD_BENEFITS_MANAGER","ROLE","mlsaAccessControlFilterFields","mvpAccessControlFilterFields","rdAccessControlFilterFields","addAccessControlFilterValue","removeAccessControlFilterValue","removeAccessControlFilterProvinceValue","removeAccessControlFilterCountryValue","updateAccessControlFilterValue","searchUsers","selectedAccessControlFilterValues","searchUsersFail","resetProps","resetPaginationProps","createUser","accessUser","createUserFail","updateUserStatus","userId","isActive","updateUserStatusFail","updateUserStatusError","updateSelectedUser","selectedUser","updateSelectedUserId","selectedUserId","loadUserRoles","loadUserRolesFail","deleteUserRole","roleId","createUserRole","createUserRoleFail","updateUserRole","updateUserRoleFail","deleteUserRoleFail","getTechnologyAreas","getTechnologyAreaFailure","technologyAreaLoadError","getClRegions","getClRegionsFailure","regionsLoadError","getGeoData","getGeoDataFailure","geoDataLoadError","AccessControlDetails","SortingColumns","eventStatusTypes","eventStatus","eventFormats","scheduledApprovalStatus","returnedApprovalStatus","eventFilterFields","defaultEventFilterValues","VisualStudioBenefitStatusEnum","visualStudioBenefitStatus","Assign","Remove","visualStudioBenefitFilterFields","defaultVisualStudioBenefitFilterValues","StatusImg","StatusSpan","getImgSource","statusValue","imgSource","Claimed","approved","Expired","denied","submitted","waiting","underReview","Unclaimed","saved","StatusElement","src","alt","connect","mapStateToProps","ownProps","actions","loadCLRegions","bindActionCreators","ClRegionActions","AccessControlActions","isModalOpen","setIsModalOpen","totalCount","isSorted","onRender","selectedTenant","leng","roleNames","formatRolesColumn","r","statusKey","incomingDate","formatedDate","formatModifiedByDate","mvpColumns","techAreas","techAreaNames","formatTechAreaColumn","technologyFocusAreas","onClickEvent","push","invert","onRenderColumn","Modal","titleAriaId","isBlocking","containerClassName","topOffsetFixed","IconButton","onModalClose","ResultCount","ListCounts","RoleGuideList","getUsers","accessControlState","users","getAccessControlFilterValues","accessControlFilterValues","getSelectedUser","getNewUserId","newUserId","getUserRoles","userRoles","getNetworkOperationError","getActivityEventTypesOptionsList","activityEventTypes","activityEventTypesData","itemType","SelectableOptionMenuItemType","Header","at","Normal","Divider","flatten","getActivityEventTypesLoadError","getAwardKitSkuLoadError","awardKitSkuState","awardKitSkuLoadError","getClRegionsOptionList","clRegionsOptionList","getClRegionsLoadError","clRegionsLoadError","geoData","getMvpReviewStatusOptionList","reviewStatusOptionList","getMvpAvailableCpmOptionList","availableCpmOptionList","getMlsaAvailableCpmOptionList","getIndustryFocusOptionList","industryFocusesOptionList","getIndustryFocusLoadError","industryFocusLoadError","getRegionsOptionList","regionOptionList","getRegionLoadError","regionLoadError","getTechnicalExpertiseOptionList","technicalExpertiseOptionList","getTechnicalExpertiseLoadError","technicalExpertiseLoadError","getTechAreas","ta","technologyName","getAllTechnologyAreaOptionList","technologyAreaDataState","technologyAreaData","getTechnologyAreaOptionList","getTechnologyAreaLoadError","getTechnologyAreaGroupOptionList","selectTechnologyAreaBySelectedGroups","selectedGroups","technologyFocusAreaGroupName","SideBarDiv","titleStyles","xxLarge","filterStackTokens","ClearDateText","comboStyles","dropdownStyles","dropdown","callout","SideBar","awardPeriodOptionList","awardPeriodLoadError","awardKitSkuOptionList","filterFields","selectedFilterValues","industryFocusOptionList","technologyAreaOptionList","technologyAreaGroupOptionList","activityEventTypesOptionList","activityEventTypesError","urlWithParam","addFilterValue","removeFilterValue","removeFilterProvinceValue","removeFilterCountryValue","onTechAreaGroupFilterValueChanged","updateFilterValue","loadStateProvince","otherTechAreaGroupsNotSelected","compact","y","getSelectedKeys","getSelectedKey","_selectedFilterValues","onSelectChange","forEach","whetherOnlineOnlyOnSelected","formatField","loadStateProvinceOptionsBySingularSelectedCountry","selectedCountries","countryToFetch","otherCountriesInList","sc","formatSkuOptions","skuList","selectedCountryFilters","selectedCountry","filterField","_filterField$options","_filterField$options2","_filterField$options3","_filterField$options4","selectOptions","eventFormatOptions","whetherOnlineOnlyOnSelecting","selectedText","fieldKey","whetherOnlineLeftOnly","whetherOnlineSelectOnly","expeditedOptions","awardPeriodName","reviewStatusOptions","defaultProps","selectedDate","datePickerProps","selectedTechAreaGroups","awardPeriodState","awardPeriodDataState","awardKitSkuDataState","AwardKitSkuSelectors","CountryRegionSelectors","RegionSelectors","regionDataState","StateProvinceSelectors","IndustryFocusSelectors","industryFocusDataState","TechnicalExpertiseSelectors","technicalExpertiseDataState","TechnologyAreaSelectors","ActivityEventTypesSelectors","activityEventTypesState","ClRegionsSelectors","clRegionsDataState","CommonDataSelectors","commonDataState","StateProvinceActions","fakeRoleGuideMspItems","fakeRoleGuideRdItems","fakeRoleGuideMvpItems","getAccessControlFilterFields","tenantType","AccessControlConstants","withConnect","networkStatus","selectedUsersFilterValues","activeTenant","resetPagination","removeAccessControlProvinceFilterValue","removeAccessControlCountryFilterValue","compose","withRouter","params","showRoleGuide","setShowRoleGuide","setSearchText","TechnologyAreaActions","roleAndPermissions","setRoleAndPermissions","roleGuideItems","permissionId","row","handleSearch","searchValue","resetFilterValues","disableShrink","SideBarContainer","grow","SearchBox","onSearch","event","onClear","AccessControlList","semanticColors","listItemBackgroundHovered","stackRoleStyles","textTransform","stackRoleDetailsStyles","deleteButtonStyles","rootPressed","editIcon","deleteIcon","AccessControlRole","canEdit","userRoleName","roleName","horizontalAlign","_role$technologyAreas","_role$awardCategories","_role$userRegions","split","awardCategories","ac","userRegions","ur","stateOrProvinceName","countryOrRegionName","clRegionName","roleDetails","editRole","confirmDeletingRole","popupTitleStyles","popupContentStyles","popupStyles","bottom","left","borderTopStyle","borderTopColor","popupHorizontalGapStackTokens","RegionalGroupedList","selectedData","onSelectionChanged","groups","buildGroups","clRegion","_clRegion$countryRegi","_clRegion$countryRegi2","_clRegion$countryRegi3","hasStates","countryRegions","cr","stateProvinces","group","count","clRegionId","level","groupLevel2WithoutStates","isoShort","groupLevel2","_clRegion$countryRegi4","_clRegion$countryRegi5","buildItems","itemGroups","clr","_clr$countryRegions","_cr$stateProvinces","_cr$stateProvinces2","sp","stateProvinceName","regionName","regionIsoCode","stateProvinceId","flattenDeep","selection","useConst","s","Selection","getSelection","setItems","element","setKeySelected","SelectionZone","multiple","GroupedList","onRenderCell","nestingDepth","itemIndex","DetailsRow","groupNestingDepth","onShouldVirtualize","verticalGapStackTokens","min","notRequired","AccessControlRolesForm","selectedUserRole","initValues","adminUserId","isEditing","_technologyFocusAreas","_technologyFocusAreas2","selectedRole","setSelectedRole","roleFieldMap","shouldRenderField","_roleFieldMap$find","saveRole","AccessControlRoles","isLoadingStatus","isConfirmationOpen","setIsConfirmationOpen","selectedRoleId","setSelectedRoleId","editingUserRole","setEditingUserRole","openConfirmationModal","dismissConfirmationModal","useCallback","onUpdateUserRole","onCreateUserRole","Layer","Popup","aria-modal","Overlay","FocusTrapZone","deleteRole","onDeleteUserRole","highlightTextStyles","caretDownWrapper","SolidDivider","hr","accessUserSchema","pickerUser","isFormSubmitting","canOnlyUpdateStatus","user","innerStackStyles","AccessControlSelectors","TechnologyFocusAreaSelectors","ClRegionSelector","loadTechFocusAreas","TechnologyFocusAreaActions","loadGeoData","_selectedUser$emailAd","adminUserEmail","AccessControlUserForm","applicationSearchSortingUpdate","sortColumn","sortDescending","loadApplication","selectedApplicationEmail","loadApplicationFail","loadSelectedApplicationError","addApplicationsFilterValue","downloadApplicationsToCSV","selectedApplicationsFilterValues","downloadApplicationsToCSVFail","downloadApplicationsToCSVClean","removeApplicationsFilterValue","removeApplicationsFilterProvinceValue","removeApplicationsFilterCountryValue","updateApplicationsFilterValue","searchApplications","requestorEmailAddress","applicationType","searchApplicationsFail","resetApplications","updateSelectedApplicationEmail","getAssignApplicationFail","assignApplicationFail","scoreApplicationFail","flagApplicationFail","loadCommonData","getCommonDataFailure","commonDataLoadError","addActivitiesEventsFilterValue","isHighlighted","removeActivitiesEventsFilterValue","removeMultipleActivitiesEventsFilterValues","filterValues","updateActivitiesEventsCurrentPage","updateActivitiesEventsPageSize","resetActivitiesEventsFilterValues","getUserProfileBySelectedApplicationId","selectedApplicationId","getUserProfileBySelectedApplicationIdFail","fetchApplicationQuestionsBySelectedApplicationId","getApplicationQuestionsBySelectedApplicationIdFail","getHighlightedActivitiesEventsBySelectedApplicationIdFail","getAdditionalActivitiesEventsBySelectedUserProfileIdFail","fetchActivityEventById","activityEventId","contributionType","getActivityEventByIdFail","fetchApplicationFlagsBySelectedApplicationId","fetchApplicationFlagsBySelectedApplicationIdFail","updateApplicationStatusesAndRemoveFlagsFail","updateApplicationTechnologyAreaAndResetScoresFail","getApplicationsFilterValues","applicationState","applicationsFilterValues","getSelectedApplication","selectedApplication","getSelectedApplicationEmail","getLoadSelectedApplicationError","isLoadingApplications","getFileDownloadData","fileDownloadData","getFileDownloadStatus","fileDownloadStatus","getAssignApplicationInfoStatus","assignApplicationInfoStatus","getAssignApplicationInfoErrorMessage","assignApplicationInfoErrorMessage","getAssignApplicationInfo","assignApplicationInfo","getSortColumn","getSortDescending","getAssignApplicationStatus","assignApplicationStatus","getAssignApplicationErrorMessage","assignApplicationErrorMessage","getScoreApplicationStatus","scoreApplicationStatus","getScoreApplicationErrorMessage","scoreApplicationErrorMessage","getFlagApplicationStatus","flagApplicationStatus","getFlagApplicationErrorMessage","flagApplicationErrorMessage","eventStackTokens","eventStackStyles","labelTextStyles","detailsHeaderTextStyles","detailsStackItemStyles","detailsTextStyles","detailsStackTokens","applicationFields","ApplicationDetails","componentDidMount","loadSelectedApplication","isLoadingSelectedApplication","fieldValue","getFieldValue","ApplicationActions","reviewStatusButtonStyles","neutralSecondaryAlt","rootDisabled","activeReviewStatusButtonStyles","loadApplicationsError","formSubmittingComplete","getSelectedApplicationById","ActivitiesEventsActions","formatScoreColumn","score","applicationColumn","technologyArea1","score1","technologyArea2","score2","submittedOn","reviewStatus","setColumns","applicationId","open","onColumnClickHandler","col","isSortedDescending","onSortingUpdate","newColumns","sortingColumns","c","onColumnClick","_x$tenants","calculatedItemProps","closeModal","constructCsvDownload","file","fileName","blob","Blob","URL","createObjectURL","downloadLink","setAttribute","appendChild","click","validUrlLength","queryParam","removeQueryParams","param","delete","replaceState","addFilterValues","urlFilterValues","getFiltersFromQueryParams","_request$applicationS","_request$reviewStatus","_request$technologyAr","_request$technologyAr2","_request$technologyAr3","_request$technologyAr4","_request$technologyAr5","_request$flagReason","_request$availableCpm","_request$countryRegio","_request$stateProvinc","_request$annualExcept","applicationStatusList","reviewStatusList","cohort","ApplicationConstants","assignedToMe","technologyAreaGroupList","technologyAreaList","technologyAreaStatusList","technologyAreaScoreList","technologyAreaStatusReasonList","flagReason","availableCpmList","countryRegionList","stateProvinceList","annualExceptionList","ErrorWrapper","CommonDataActions","cleanDownloadCSV","removeApplicationsProvinceFilterValue","removeApplicationsCountryFilterValue","canDownload","encode","decode","LZString","compressToEncodedURIComponent","encodedData","decompressedText","decompressFromEncodedURIComponent","urlError","setUrlError","getQueryParam","queryParamValue","resetUrlWithError","showError","getQueryParamsRequest","validUrl","addRoleBasedDefaultFilters","defaultFilters","cohortFilter","technologyAreaStatusInvitedPending","technologyAreaStatusDeclinedPending","_adminPermissions$adm","arp","_arp$awardCategories","awardCategoryFilter","createQueryParams","isValidRequestURL","_selectedApplications","requestBody","compressedText","set","setQueryParamsRequest","setFilterToQueryParams","pageIndex","searchKey","isResetButtonClicked","requestPayload","alert","toLocaleString","every","handleDownloadToCSV","ApplicationsList","awardCategoryStatuses","inactiveImpactList","unaffectedList","awardCategoriesSlice","createSlice","initialState","selectedAwardCategory","fetchAwardCategoriesError","updateACErrorMessage","isAwardCategoryUpdated","reducers","selectAwardCategory","action","payload","setIsAwardCategoryUpdated","getSelectedAwardCategory","getUpdateACErrorMessage","getIsAwardCategoryUpdated","awardCategoriesApi","createApi","reducerPath","baseQuery","fetchBaseQuery","baseUrl","prepareHeaders","getAuthToken","endpoints","builder","getAwardCategories","query","updateAwardCategory","mutation","awardCategory","useGetAwardCategoriesQuery","useUpdateAwardCategoryMutation","AwardCategoriesUpdatePanel","mutationError","Status","IsActive","unwrap","align","AwardCategories","refetch","technologyFocusAreaGroupId","awardCategoryData","single","ariaLabelForListHeader","always","selectionPreservedOnEmptyClick","AwardCategoriesContainer","isStatusUpdatePanelOpen","setStatusUpdatePanelOpen","routeParams","selectCategoryMessage","setSelectCategoryMessage","onModifyClick","searchAzureBenefitRequestsFail","getAzureBenefitRequestDetailsFail","approveOrDeclineAzureBenefitRequest","approveOrDecline","requestId","approveOrDeclineAzureBenefitRequestFailure","getAzureBenefitRequests","azureBenefitRequestsState","requests","isLoadingAzureBenefitRequests","getLoadAzureBenefitRequestsError","loadAzureBenefitRequestsError","getAzureBenefitRequestsFilterValues","azureBenefitRequestsFilterValues","getSelectedAzureBenefitRequestDetails","selectedAzureBenefitRequest","getSelectedAzureBenefitRequestIsExpedited","selectedAzureBenefitRequestIsExpedited","getSelectedAzureBenefitRequestExpeditedByDate","selectedAzureBenefitRequestExpeditedByDate","getFetchAzureBenefitRequestDetailsErrorMessage","fetchAzureBenefitRequestDetailsErrorMessage","getApproveOrDeclineRequestOperationStatus","azureBenefitApproveOrDeclineOperationStatus","getApproveOrDeclineRequestErrorMessage","azureBenefitApproveOrDeclineErrorMessage","bodyContainerExpeditedStackStyles","questionTextStyles","answerTextStyles","nameTextStyles","emailTextStyles","emailStackTokens","nameInfoStackStyles","mainContainerStyles","AzureBenefitRequestDetailsContainer","setSelectedUser","siteEmail","azureBenefitRequestDetails","azureBenefitRequests","azureBenefitRequestDetailsError","approveOrDeclineOperationStatus","approveOrDeclineError","azureBenefitRequestExpeditedByDate","azureBenefitRequestIsExpedited","canUpdateBenefit","MVP_UPDATE_BENEFITS","req","keys","q","searchVisualStudioBenefitsFail","downloadRequestsToCSVFail","AzureRequestsList","loadAzureRequestsError","isLoadingAzureRequests","_index","_column","idLink","requestedDate","expedited","getAzureBenefitRequestDetails","onClickAzureBenefitRequest","VisualStudioBenefitActions","azureBenefitRequestsFilterFields","AzureBenefitRequestsContainer","searchTextState","setSearchTextState","selectedAzureBenefitRequestsFilterValues","pageSizeLocal","selectedRequestsFilterValues","AzureBenefitRequestsActions","searchBenefits","benefitName","selectedBenefitsFilterValues","searchBenefitsFail","resetBenefits","addBenefitsFilterValue","removeBenefitsFilterValue","updateBenefitsFilterValue","getAwardKitSkuFailure","BenefitsList","loadBenefitsError","isLoadingBenefits","hasSwagKitCol","hasCountryCodePoolCol","hasSkuCol","formatDisplayDate","dateUploaded","keyExpirationDate","dateClaimed","copyObject","BenefitConstants","poolType","labelText","getLabel","_x$values","formatCountryCodeColumn","countryCodePoolName","batchId","benefitState","getLoadBenefitsError","getUnclaimedCount","unclaimedCount","getBenefitsFilterValues","benefitsFilterValues","getCurrentBenefitName","currentBenefitName","BenefitActions","benefitNameKey","_routeParams$benefitT","benefitDisplayName","getFilterFields","M365CopilotBenefitList","loadM365CopilotBenefitError","isLoadingM365CopilotBenefit","copilotTenantId","m365CopilotFilterFields","searchM365CopilotBenefit","searchM365CopilotBenefitFail","resetM365CopilotBenefit","addM365CopilotFilterValue","removeM365CopilotFilterValue","updateM365CopilotFilterValue","updateM365CopilotCurrentPage","updateM365CopilotPageSize","getM365CopilotBenefits","getM365CopilotBenefitsIsLoading","getM365CopilotBenefitsLoadError","getM365CopilotBenefitsSearchKey","getM365CopilotBenefitsFilteredCount","getM365CopilotBenefitsCurrentPage","getM365CopilotBenefitsPageSize","getM365CopilotBenefitsFilterValues","m365CopilotFilterValues","getM365CopilotBenefitsCurrentTenant","m365CopilotBenefitState","loadM365CopilotBenefitsError","loadBenefits","resetM365CopilotBenefits","onReset","onSearchTextClear","getAwardPeriods","getAwardPeriodsFailure","VisualStudioBenefitsList","assignedTo","createdDate","getVisualStudioBenefits","visualStudioBenefitState","visualStudioBenefits","isLoadingVisualStudioBenefits","getLoadVisualStudioBenefitsError","loadVisualStudioBenefitsError","getVisualStudioBenefitsFilterValues","visualStudioBenefitsFilterValues","VisualStudioBenefitContainer","selectedvisualStudioBenefitsFilterValues","AwardPeriodActions","handleDownloadRequests","filterDemographicsFail","capDataLoadFail","getDemographics","demographicsState","demographicsData","getCapData","capData","getDemographicsFilterValues","demographicsFilterValues","barCharStyle","COLORS","DemographicsBarChart","BarChart","barCategoryGap","XAxis","tick","YAxis","Tooltip","Bar","dataKey","Cell","fill","Legend","layout","renderCustomLegend","entry","Surface","Symbols","cx","cy","pieChartStyle","noDataStyle","DemographicsPieChart","RADIAN","Math","PI","PieChart","Pie","nameKey","outerRadius","midAngle","innerRadius","percent","radius","cos","sin","textAnchor","dominantBaseline","labelLine","cardStyle","cardTextStyle","demographicsStackItemStyle","splitStackStyle","Line","InfoText","DemographicsContainer","filterDemographics","selectedDemographicsFilterValues","DemographicsActions","DemographicsSelectors","filteredDemographics","handleFilter","_selectedDemographics","_selectedDemographics2","v","capTableColumns","incomingCohort","activeUsers","renderProjectedPopulationColumn","isOverCapacity","capacity","capStyle","renderCapacityColumn","averageApplicationScore","numberOfApplications","genderData","declineReasonData","statusData","regionBarData","awardCategoryBarData","capacityData","DistributionListPendingRequestsList","isLoadingDlJoinRequest","loadDlJoinRequestError","dateRequested","selectedJoinRequest","distributionListRequest","onRowClick","dlFormJoinRequestLabelStyles","dlStackItemStyles","DistributionListsJoinRequestForm","dlJoinRequest","distributionListName","distributionListTechCategory","justificationToJoin","DistributionListRequestsContainer","isSidePanelOpen","setIsSidePanelOpen","setSelectedJoinRequest","distributionListsSelectors","networkOperationStatusError","networkOperationStatusApproveError","approveOrDeclineJoinRequest","joinRequestId","reviewAction","distributionListsActions","searchDistributionLists","isApprovingDlJoinRequest","dlJoinRequestId","handleDismiss","DistributionLists","isLoadingDLs","loadDLsError","rdColumns","updateSelectedDistributionList","DistributionListsContainer","distributionListCount","pageNumber","loadEvent","selectedEventId","loadEventFail","loadSelectedEventError","addEventsFilterValue","removeEventsFilterValue","removeEventsFilterProvinceValue","removeEventsFilterCountryValue","updateEventsFilterValue","searchEvents","selectedEventsFilterValues","searchEventsFail","updateEventStatusFail","updateEventStatusError","updateSelectedEventId","resetEvents","isLoadingEvents","eventState","getEventsFilterValues","eventsFilterValues","getLoadSelectedEventError","getSelectedEvent","selectedEvent","getSelectedEventId","approvalFromStackTokens","commentStyles","approvalOptions","approvalType","EventApprovalForm","isUpdatingStatus","authProvider","eventStatusName","eventFormatName","inPersonAttendees","onDemandViews","liveOnlineViews","updateEventStatus","EventApprovalSchema","renderField","eventIdentifier","resetForm","renderReachFields","EventActions","students","eventUserProfileContributorRole","eventOrganizerUserProfileRole","TitleContainer","sectionTitleStyles","eventFields","EventDetails","loadSelectedEvent","isLoadingSelectedEvent","eventCreatedBy","eventFormat","target","rel","lastReviewedBy","dateLastReviewed","EventStudentList","loadEventsError","eventsToRender","formatEventDate","dateStart","dateEnd","eventId","events","removeEventsProvinceFilterValue","removeEventsCountryFilterValue","EventConstants","EventsList","HomeContainer","redirectUrl","getItem","removeItem","MvpEventContainer","MvpHomeContainer","ApplicationAssignSidePanel","applicationFormId","onSubmitSuccess","Idle","getAssignApplication","mapAssignApplicationInfoToFormValues","technologyAssignments","assignment","_assignment$currentAs","_assignment$currentAs2","currentAssignee","hasScore","canAssign","availableAssignees","aa","_formData$technologyA","technologyFocusArea","assignApplication","useFieldArray","_ta$currentAssignee","info","getActivityEventTypes","getActivityEventTypesFailure","activityEventTypesLoadError","getCountryRegionFailure","INITIAL_STATE","countryString","region","applyResetProps","applyResetPaginationProps","applyLoadUser","applyLoadFailUser","loadSelectedUserError","applySearchUsers","applySearchUsersSuccess","applySearchUsersFail","applySelectedUserId","applySelectedUser","applyCreateUser","applyCreateUserSuccess","applyCreateUserFail","applyUpdateUserStatus","applyUpdateUserStatusSuccess","newState","u","userStatus","applyUpdateUserStatusFail","applyUpdateCurrentPage","applyUpdatePageSize","applyLoadUserRoles","applyLoadUserRolesSuccess","applyLoadUserRolesFail","applyDeleteUserRolesSuccess","userRoleId","applyDeleteUserRolesFail","applyCreateUserRolesSuccess","applyUpdateUserRolesSuccess","applyUpdateUserRolesFail","applyCreateUserRolesFail","accessControlReducer","applyLoadActivityEventTypesSuccess","applyLoadActivityEventTypesFailure","activityAndEventTypesReducer","fileDownloadErrorMessage","techArea","modifiedDate","isReadOnly","technicalExpertise","industryFocus","applyLoadAssignApplicationInfo","applyLoadAssignApplicationInfoSuccess","applyLoadAssignApplicationInfoFail","applyAssignApplication","applyAssignApplicationSuccess","applyAssignApplicationFail","applyAssignApplicationReset","applyScoreApplicationSuccess","applyScoreApplicationFail","applyScoreApplicationReset","applyFlagApplication","applyFlagApplicationSuccess","applyFlagApplicationFail","applyFlagApplicationReset","applyLoadApplication","applyLoadFailApplication","applySelectedApplication","applySearchApplications","applySearchApplicationsSuccess","applyApplicationsReset","applyDownloadApplicationsToCSV","applyDownloadApplicationsToCSVSuccess","csvFile","applyDownloadApplicationsToCSVFailed","applyDownloadApplicationsClean","applySearchSortingUpdate","applicationReducer","additionalActivitiesEventsState","activitiesEventsFilterValues","activitiesEvents","highlightedActivitiesEventsState","applyFilterValueAdd","applyFilterValueRemove","fv","applyFilterValueBulkRemove","sfv","applyFilterValueReset","applyGetUserProfileBySelectedApplicationId","selectedUserProfileInformation","selectedUserProfileInformationOpStatus","selectedUserProfileInformationErrorMessage","applyGetUserProfileBySelectedApplicationIdSuccess","userProfileInfo","applyGetUserProfileBySelectedApplicationIdFail","applyGetApplicationFlagsBySelectedApplicationId","selectedApplicationFlags","selectedApplicationFlagsOpStatus","selectedApplicationFlagsErrorMessage","applyGetApplicationFlagsBySelectedApplicationIdSuccess","applicationFlags","applyGetApplicationFlagsBySelectedApplicationIdFail","applyGetApplicationQuestionsBySelectedApplicationId","selectedApplicationQuestions","selectedApplicationQuestionsOpStatus","selectedApplicationQuestionsErrorMessage","applyGetApplicationQuestionsBySelectedApplicationIdSuccess","applyGetApplicationQuestionsBySelectedApplicationIdFail","applyGetHighlightedActivitiesEventsBySelectedApplicationId","activitiesEventsOpStatus","activitiesEventsErrorMessage","applyGetHighlightedActivitiesEventsBySelectedApplicationIdSuccess","highlightedActivitiesEvents","applyGetHighlightedActivitiesEventsBySelectedApplicationIdFail","applyGetAdditionalActivitiesEventsBySelectedUserprofileId","applyGetAdditionalActivitiesEventsBySelectedUserprofileIdSuccess","additionalActivitiesEvents","applyGetAdditionalActivitiesEventsBySelectedUserprofileIdFail","applyUpdateActivitiesEventsPageSize","applyUpdateActivitiesEventsCurrentPage","applyUpdateApplicationStatusesAndRemoveFlags","manageApplicationOpStatus","manageApplicationErrorMessage","applyUpdateApplicationStatusesAndRemoveFlagsFail","applyUpdateApplicationStatusesAndRemoveFlagsSuccess","applyUpdateApplicationStatusesAndRemoveFlagsReset","applyUpdateApplicationTechnologyAreaAndResetScores","updateTechnologyAreaOpStatus","updateTechnologyAreaErrorMessage","applyUpdateApplicationTechnologyAreaAndResetScoresFail","applyUpdateApplicationTechnologyAreaAndResetScoresSuccess","applyUpdateApplicationTechnologyAreaAndResetScoresReset","applicationDetailsReducer","selectedActivityEvent","activityEvent","selectedActivityEventOpStatus","selectedActivityEventErrorMessage","applyLoadAwardKitSku","awardKitSku","applyLoadAwardKitSkuFail","awardKitSkuReducer","applyLoadAwardPeriods","awardPeriods","applyLoadAwardPeriodsFail","awardPeriodReducer","applySearchAzureBenefitRequests","applySearchAzureBenefitRequestsSuccess","applySearchAzureBenefitRequestsFail","addAzureBenefitRequestsFilterValue","removeAzureBenefitRequestsFilterValue","updateAzureBenefitRequestsFilterValue","clearAzureBenefitRequestsFilterValue","applyGetAzureBenefitRequestDetails","applyGetAzureBenefitRequestDetailsSuccess","questionAnswerMap","expeditedDate","applyGetAzureBenefitRequestDetailsFail","applyApproveOrDeclineAzureBenefitRequest","applyApproveOrDeclineAzureBenefitRequestSuccess","applyApproveOrDeclineAzureBenefitRequestFailure","azureBenefitRequestsReducer","applySearchBenefits","applySearchBenefitsSuccess","applySearchBenefitsFail","applyResetBenefits","benefitReducer","commonDataOperationStatus","reviewStatuses","availableCpms","applyLoadSuccessCommonData","commonData","applyLoadFailCommonData","CommonDataReducer","isLoadingDemographics","isLoadingCapData","loadDemographicsError","loadCapDataError","applyFilterDemographics","applyFilterDemographicsSuccess","addDemographicsFilterValue","applyDemographicsFilterReset","removeDemographicsFilterValue","removeDemographicsFilterRegionValue","removeDemographicsFilterCountryValue","updateDemographicsFilterValue","applyCapacityDataLoad","applyCapacityDataLoadSuccess","fetchMicrosoftMembersError","applySearchDistributionLists","applySearchDistributionListsSuccess","applySearchDistributionListsFail","applyResetDistributionLists","applyApproveOrDeclineJoinRequest","applyApproveOrDeclineJoinRequestSuccess","applyApproveOrDeclineJoinRequestFail","applyFetchDistributionListsByTenant","applyFetchDistributionListsByTenantSuccess","applyFetchDistributionListsByTenantFail","applyUpdateSelectedDistributionList","dl","applyFetchMicrosoftMembersForDL","applyFetchMicrosoftMembersForDLFail","applyFetchMicrosoftMembersForDLSuccess","applyAddMicrosoftMemberToDL","applyAddMicrosoftMemberToDLFail","applyAddMicrosoftMemberToDLSuccess","applyResetMicrosoftMemberDLs","applyRemoveMicrosoftMemberFromDL","applyRemoveMicrosoftMemberFromDLFail","applyRemoveMicrosoftMemberFromDLSuccess","distributionListsReducer","applySearchM365CopilotBenefits","applySearchM365CopilotBenefitsSuccess","applySearchM365CopilotBenefitsFail","applyResetM365CopilotBenefits","applyAddM365CopilotFilterValue","applyRemoveM365CopilotFilterValue","applyUpdateM365CopilotFilterValue","applyUpdateM365CopilotCurrentPage","applyUpdateM365CopilotPageSize","m365CopilotBenefitReducer","azureBenefitExtendCreditState","extendAzureCreditOperationStatus","extendAzureCreditError","azureBenefitAddState","addAzureBenefitOperationStatus","addAzureBenefitError","m365BenefitDetailState","m365UpdateErrorMessage","m365OperationStatus","ms365BenefitDetailState","ms365UpdateErrorMessage","ms365OperationStatus","teamsBenefitDetailState","teamsFetchErrorMessage","teamsUpdateErrorMessage","teamsOperationStatus","teamsBenefitDetail","claimDate","code","awardKitsBenefitDetailState","awardKitsFetchErrorMessage","awardKitsUpdateErrorMessage","awardKitsOperationStatus","awardKitsBenefitDetail","benefitsState","azure","githubPro","linkedIn","m365","awardKits","selectedUserProfileState","userProfileOperationStatus","updateBlockShippingOperationStatus","updateBlockShippingErrorMessage","updatePrimaryEmailErrorMessage","updateAnnualExceptionProfileStatus","updateAnnualExceptionProfileError","userProfilesSearchState","filteredUserProfiles","searchOperationStatus","searchFilterValues","programProfileState","retireProfileState","applyFetchBenefits","applyFetchProfileBenefitsSuccess","userProfileBenefits","applyFetchBenefitsFail","applyClaimingBenefit","applyClaimingBenefitSuccess","applyClaimingBenefitFail","applyClaimingBenefitReset","applyExtendAzureBenefitCredit","applyExtendAzureBenefitCreditSuccess","applyExtendAzureBenefitCreditFail","applyExtendAzureBenefitCreditReset","applyFetchComments","applyFetchCommentsSuccess","applyFetchCommentsFail","applyAddNewComment","applyAddNewCommentSuccess","applyAddNewCommentFail","applyFetchProgramProfile","applyFetchRetireProfile","retireProfile","applyFetchProgramProfileSuccess","applyFetchRetireProfileSuccess","applyFetchProgramProfileFail","applyAddAzureBenefit","applyAddAzureBenefitSuccess","applyAddAzureBenefitFail","applyAddAzureBenefitReset","applyFetchRetireProfileFail","applyUpdateProgramProfile","applyRetireProfileReset","applyRetireProfile","applyUpdateProgramProfileSuccess","applyRetireProfileSuccess","applyUpdateProgramProfileFail","applyRetireProfileFail","applyUpdateProgramProfileReset","applyFetchUserProfile","fetchUserProfileErrorMessage","applyFetchUserProfileSuccess","applyFetchUserProfileFail","applyUserProfilesSearch","applyUserProfilesSearchSuccess","applyUserProfilesSearchFail","searchErrorMessage","applyUserProfilesSearchFilterValueAdd","applyUserProfilesSearchFilterValueRemove","isEqual","applyUserProfilesSearchFilterValuesBulkRemove","applyUserProfilesSearchFilterValueStateProvinceRemove","applyUserProfilesSearchFilterValueUpdate","applyUserProfilesSearchPageSizeUpdate","applyUserProfilesSearchCurrentPageUpdate","applyM365BenefitDetailReset","applyGetM365BenefitDetailsSuccess","applyGetM365BenefitDetailsFailure","applyGetM365BenefitDetails","applyUpdateM365BenefitDetails","applyUpdateM365BenefitDetailsSuccess","applyUpdateM365BenefitDetailsFailure","applyMS365BenefitDetailReset","applyGetMS365BenefitDetailsSuccess","applyGetMS365BenefitDetailsFailure","applyGetMS365BenefitDetails","applyUpdateMS365BenefitDetails","applyUpdateMS365BenefitDetailsSuccess","applyUpdateMS365BenefitDetailsFailure","applyGetTeamsBenefitDetailsSuccess","applyGetTeamsBenefitDetailsFailure","applyGetTeamsBenefitDetails","applyGetAwardKitsBenefitDetailsSuccess","applyGetAwardKitsBenefitDetailsFailure","applyGetAwardKitsBenefitDetails","applyUpdateBlockShipping","applyUpdateBlockShippingFail","applyUpdateBlockShippingSuccess","applyUserProfileIsPrivateUpdate","applyUserProfileIsPrivateUpdateSuccess","applyUserProfileIsPrivateUpdateFail","applyUserProfileAnnualExceptionUpdate","applyUserProfileAnnualExceptionUpdateSuccess","applyUserProfileAnnualExceptionUpdateFail","applyUserProfilesSearchSortingUpdate","applyUserProfileFilterValueReset","applyUserProfilePrimaryEmailUpdate","applyUserProfilePrimaryEmailUpdateFail","applyUserProfilePrimaryEmailUpdateSuccess","applyUserProfilePrimaryEmailUpdateReset","mvpReducer","fetchUserProfileCommentsStatus","updateProgramProfileOperationStatus","fetchUserProfileOperationStatus","addUserProfileCommentOperationStatus","fetchProgramProfileErrorMessage","selectedUserProfileId","applicationFormDateLastModified","applicationFormDateSubmitted","companyTypeName","currentEmployerName","industryFocusNames","technicalExpertiseNames","userProfileFunctionalRole","applyUpdateSorting","applyFileDownloadStatus","applySearchUserProfiles","applySearchUserProfilesSuccess","applySearchUserProfilesFail","applyDownloadToCSV","applyDownloadToCSVSuccess","applyDownloadToCSVFailed","applyFetchUserProfileComments","fetchUserProfileCommentsErrorMessage","applyFetchUserProfileCommentsSuccess","applyFetchUserProfileCommentsFail","rdUserProfileId","rdUserProfile","applyAddUserProfileComment","addUserProfileCommentErrorMessage","applyAddUserProfileCommentSuccess","applyAddUserProfileCommentFail","applyAddUserProfileCommentResetValues","applyUpdateUserProfileId","updateProgramProfileErrorMessage","savedProgramProfileStatusName","applyUpdateProgramProfileResetStatus","applyClaimingRdBenefit","applyClaimingRdBenefitSuccess","applyClaimingRdBenefitFail","applyClaimingRdBenefitReset","applyGetProfileBenefits","applyGetProfileBenefitsSuccess","applyProfileBenefitsFail","rdUserProfileReducer","intialState","regions","applyLoadRegions","applyLoadFailregions","regionReducer","uploadCSVFileRequest","CsvBase64","submitCSVFileRequest","fileId","isUploading","validationResponse","summary","submitResponse","applyUploadCsv","applyUploadCsvSuccess","applyUploadCsvFail","applyUploadCsvReset","applySubmitCsv","applySubmitCsvSuccess","applySubmitCsvFail","UpdateSARegistrationStatusReducer","applyLoadTechnologyAreas","applyLoadFailTechnologyAreas","technologyAreaReducer","clRegions","applyLoadClRegions","applyLoadFailClRegions","applyLoadGeoData","applyLoadFailGeoData","ClRegionReducer","applyLoadCountryRegions","countryRegionId","applyLoadFailCountryRegions","countryRegionReducer","INITIAL_USER_PROFILE_ROLE","userProfileFirstName","userProfileLastName","userProfilePrimaryEmail","userProfileStudentPartnerEmail","userProfileHeadline","eventRoleId","eventRoleName","userProfileLevelStatus","isHighImpact","actualAttendance","addressLatitude","addressLongitude","allDay","city","eventCountryOrRegionNames","streetAddress","buildingName","roomNo","eventSkillNames","eventTargetAudienceNames","eventType","eventUri","expectedAttendance","icsuri","isCateringRequested","isFirstParty","isReimbursementRequested","microsoftContactOwnerEmailAddress","microsoftContactOwnerFirstName","microsoftContactOwnerLastName","photosUrl","postEventDetails","programProfileEvent","accepted","reach","spotlight","stateOrProvince","timeEnd","timeStart","userRole","videoUri","applyLoadEvent","applyLoadFailEvent","applySearchEvents","applySearchEventsSuccess","applySearchEventsFail","applySelectedEvent","applyUpdateEventStatus","applyUpdateEventStatusSuccess","applyUpdateEventStatusFail","applyEventsReset","eventReducer","industryFocuses","applyLoadIndustryFocuses","industryFocusLocKey","applyLoadFailIndustryFocuses","industryFocusReducer","programLanguages","applyLoadProgramLanguage","applyLoadFailProgramLanguage","ProgramLanguageReducer","schools","applyLoadSchools","schoolId","applyLoadFailSchools","schoolDataReducer","socialNetworks","applyLoadSocialNetworks","socialNetworkId","applyLoadFailSocialNetworks","socialNetworkReducer","stateProvincesShipping","stateProvincesSchool","applyLoadStateProvince","applyLoadFailStateProvinces","applyLoadStateProvinceShipping","applyLoadFailStateProvinceShipping","applyLoadStateProvinceSchool","applyLoadFailStateProvinceSchool","stateProvinceReducer","applyLoadTechnicalExpertise","technicalExpertiseLocKey","applyLoadFailTechnicalExpertise","TechnicalExpertiseReducer","isLoadingVSBenefits","loadVSBenefitsError","isUpdatingVSBenefits","isClaimingBenefitSuccess","loadingDlErrorMessage","applyUpdateProgramProfileFailure","applyLoadUserProfile","applyLoadFailUserProfile","applyUpdateUserProfile","applyUpdateFailUserProfile","applyUpdateSuccessUserProfile","applyLoadUserProfileComments","applyLoadFailUserProfileComments","applyUpdateUserProfileComment","applyUpdateFailUserProfileComment","applyLoadUserProfileVSBenefitsSuccess","userProfileVSBenefit","applyLoadUserProfileVSBenefitsFail","applyUpdateUserProfileVSBenefits","applyProvisionUserProfileVSBenefitsSuccess","applyProvisionUserProfileVSBenefitsFail","applyExtendUserProfileVSBenefitsSuccess","applyExtendUserProfileVSBenefitsFail","applyEndUserProfileVSBenefitsSuccess","applyEndUserProfileVSBenefitsFail","applyVSBenefitReset","applyGetProfileBenefitsFail","applyDlLoad","applyDlLoadSuccess","applyDlLoadFail","applyDlRemoveAll","applyDlRemoveAllSuccess","applyDlRemoveAllFail","applyDlRemove","applyDlRemoveSuccess","applyDlRemoveFail","userProfileReducer","applyDownloadVisualStudioBenefitRequestsToCSV","applyDownloadVisualStudioBenefitRequestsToCSVSuccess","applyDownloadVisualStudioBenefitRequestsToCSVFailed","applySearchVisualStudioBenefits","applySearchVisualStudioBenefitsSuccess","applySearchVisualStudioBenefitsFail","addVisualStudioBenefitsFilterValue","removeVisualStudioBenefitsFilterValue","updateVisualStudioBenefitsFilterValue","clearVisualStudioBenefitsFilterValue","visualStudioBenefitReducer","UpdateSAProgramStatusReducer","rootReducer","combineReducers","applicationDetailsState","clRegionReducer","mvpState","saRegistrationStatusState","saProgramStatusState","rdUserProfileState","socialNetworkDataReducer","programLanguageDataReducer","technicalExpertiseReducer","demographicsReducer","awardCategoriesReducer","reducer","adminUser","adminUserRole","searchAccessControlList","searchRequest","handleCreateUser","result","timeout","race","call","accessControlApi","okResult","handleLoadUserRoles","handleDeleteUserRole","handleCreateUserRole","handleUpdateUserRole","handleUpdateUserStatus","updateUserStatusSuccess","handleSearchAccessUsers","usersStatus","usersRole","usersRegion","usersCountry","usersState","usersTechArea","accessControlAdminList","fetchAwardPeriodList","fetchAwardKitSkuList","fetchCountryRegionList","fetchSchoolList","fetchRegionList","fetchStateProvinceList","fetchSocialNetworkList","fetchIndustryFocusList","fetchTechnicalExpertiseList","fetchProgramLanguageList","fetchTechnologyAreaList","fetchClRegionsList","fetchGeoData","fetchActivityEventTypes","fetchCommonData","handleLoadActivityEventTypesResults","siteContentApi","getApplication","getProfileInformationByApplicationId","getApplicationFlagsByApplicationId","getApplicationQuestionsByApplicationId","assignApplicationRequest","scoreApplication","scoreApplicationRequest","flagApplication","flagApplicationRequest","manageApplication","manageApplicationRequest","updateApplicationTechnologyArea","updateApplicationTechnologyAreaRequest","getApplications","getActivitiesEventsByApplicationId","getActivitiesEventsByUserprofileId","getActivityEventById","handleLoadApplication","applicationApi","loadApplicationSuccess","applicationForm","handleLoadAssignApplication","failedMessage","getAssignResult","handleAssignApplication","applicationAssignees","handleScoreApplication","justification","handleFlagApplication","flagReasonId","handleSearchApplications","applicationForms","handleDownloadApplicationsToCSV","updateFilterValues","handleUserProfileFetchByApplicationId","handleFetchApplicationFlagsByApplicationId","handleApplicationQuestionsFetchByApplicationId","handleHighlightedActivitiesEventsFetchByApplicationId","sortFieldName","isDescendingSort","contributionTypes","activityOrEventTypes","handleAdditionalActivitiesEventsFetchByUserprofileId","userprofileId","handleActivityEventFetchById","handleUpdateApplicationStatusesAndRemoveFlags","technologyFocusAreaStatuses","removeFlags","handleUpdateApplicationTechnologyAreaAndResetScores","applicationFormTechnologyFocusAreas","handleLoadAwardPeriods","handleLoadAwardKitSku","skuLists","searchMvpAzureBenefitRequests","searchRdAzureBenefitRequests","getMvpAzureRequestDetails","getRdAzureRequestDetails","approveOrDeclineMvpAzureBenefitRequest","approveOrDeclineRequest","approveOrDeclineRdAzureBenefitRequest","handleSearchAzureBenefitRequests","apiEndpoint","azureBenefitApi","handleGetAzureBenefitRequestDetails","handleApproveOrDenyAzureBenefitRequest","updated","handleSearchBenefits","benefitStatusList","claimedFrom","claimedTo","uploadedFrom","uploadedTo","expirationStartDate","expirationEndDate","benefitApi","benefitKeys","handleLoadClRegions","handleLoadGeoData","handleLoadCommonData","handleLoadCountryRegions","fetchUserComments","mvpUserProfileId","fromLastRenewal","fetchUserProfile","claimUserProfileBenefitsGithubPro","claimUserProfileBenefitsMcp","claimUserProfileBenefitsLinkedIn","claimUserProfileBenefitsM365","claimUserProfileBenefitsMS365","claimUserProfileBenefitsTeams","claimUserProfileBenefitsAwardKits","SkuId","updateProgramProfile","fetchRetireProfile","updateUserProfileBlockShipping","blockShippingRequest","getM365BenefitDetails","updateM365BenefitDetails","m365BenefitDetails","getMS365BenefitDetails","updateMS365BenefitDetails","extendAzureBenefitCredit","credit","saveAzureBenefitClaim","updateUserProfileIsPrivate","updateUserProfileAnnualException","getFilteredDemographicsData","getCapacityData","updateUserProfilePrimaryEmail","handleFilterDemographics","clRegionList","awardCategoryList","genderList","mvpApi","handleCapData","approveOrDeclineDlJoinRequest","fetchDistributionListsByTenant","handleSearchDistributionLists","DistributionListApi","handleApproveOrDeclineJoinRequest","_ref$error","handleFetchDistributionListByTenantRequest","_ref2$error","distributionGroups","handleFetchMicrosoftMembersForDL","_ref3$error","distributionGroupMembers","handleAddMicrosoftMemberToDL","_ref4","_ref4$error","handleRemoveMicrosoftMemberFromDL","_ref5","_ref5$error","getIndustryFocusFailure","handleLoadIndustryFocuses","searchMvpM365CopilotBenefit","searchRdM365CopilotBenefit","handleSearchM365CopilotBenefits","defaultErrorMessage","m365BenefitDetailReset","fetchM365BenefitDetail","fetchM365BenefitDetailFailure","fetchTeamsBenefitDetail","fetchAwardKitsBenefitDetail","extendAzureBenefitCreditFailure","extendAzureBenefitCreditReset","updateM365BenefitDetail","updateM365BenefitDetailFailure","ms365BenefitDetailReset","fetchMS365BenefitDetail","fetchMS365BenefitDetailFailure","updateMS365BenefitDetail","updateMS365BenefitDetailFailure","fetchProfileBenefits","fetchProfileBenefitsFail","Sku","fetchUserProfileCommentsFail","fetchRetireProfileFail","updateProgramProfileFail","retireProfileFail","addAzureBenefitDetail","azureBenefit","addAzureBenefitDetailFail","addAzureBenefitReset","fetchUserProfileFail","userProfileAnnualExceptionUpdateFail","userProfilePrimaryEmailUpdateFail","handleMVPFetchProfileBenefits","handleMVPClaimBenefit","benefitApiMap","apiCall","isSuccess","handleMVPCommentsFetch","fetchUserProfileCommentsSuccess","handleMVPAddComment","addNewCommentSuccess","handleMVPProgramProfileFetch","fetchProgramProfileSuccess","handleMVPRetireProfileFetch","fetchRetireProfileSuccess","handleMVPUpdateProgramProfile","handleAddAzureBenefit","handleMVPRetireProfile","handleMVPUserProfileFetch","fetchUserProfileSuccess","handleMVPSearchUserProfiles","programStatusList","awardPeriodEndDate","awardPeriodStartDate","ndaStatusList","otherProgramMembershipList","cpmList","mapFilterValuesToRequestBody","searchUserProfileSuccess","handleMVPGetM365BenefitDetail","handleMVPUpdateM365BenefitDetail","handleMVPGetMS365BenefitDetail","handleMVPUpdateMS365BenefitDetail","handleMVPExtendAzureBenefitCredit","requestResult","capCredit","handleMVPUpdateUserProfileBlockShipping","userProfileToUpdate","blockShipping","handleMVPUserProfileIsPrivateUpdate","handleMVPUserProfilePrimaryEmailUpdate","handleMVPUserProfileAnnualExceptionUpdate","handleLoadProgramLanguage","searchRDUserProfiles","downloadRDUserProfiles","fetchRDUserProfile","fetchRDUserProfileComments","addRDUserProfileComment","getRDProgramProfile","updateRDProgramProfile","downloadRDUserProfilesToCSVFail","searchUserRDProfilesSuccess","searchRDUserProfilesFail","updateRDProgramProfileFail","addUserProfileCommentFail","claimRdBenefit","claimRdBenefitFail","claimRdBenefitReset","industryFocusList","technicalExpertiseList","handleRDSearchUserProfiles","rdUserProfileApi","handleRDUserProfileDownload","handleRDUserProfileFetch","handleRDProgramProfileFetch","handleRDUserProfileCommentsFetch","handleRDAddUserProfileComment","addUserProfileCommentSuccess","handleRDUpdateProgramProfile","handleRDClaimBenefit","handleRDGetProfileBenefits","handleRDGetM365BenefitDetail","handleRDGetMS365BenefitDetail","handleRDUpdateMS365BenefitDetail","handleRDUpdateM365BenefitDetail","handleRDExtendAzureBenefitCredit","handleRDUserProfileIsPrivateUpdate","handleRDUserProfilePrimaryEmailUpdate","handleRDAddAzureBenefit","getRegionFailure","handleLoadRegions","handleLoadSchools","schoolData","handleLoadSocialNetworks","handleLoadStateProvincesSchool","stateProvinceData","handleLoadStateProvincesShipping","handleLoadStateProvinces","getTechnicalExpertiseFailure","handleLoadTechnicalExpertise","technicalExpertises","handleLoadTechAreaResults","techFocusAreas","programDetailsRequest","getUserProfileByEmail","getUserProfileComments","createUserProfileComment","newUserProfileComment","updateUserProfileComment","getUserProfileVSBenefits","provisionUserProfileVSBenefits","extendUserProfileVSBenefits","endUserProfileVSBenefits","claimUserProfileBenefitSwagkit","swagKitType","loadDistributionLists","toLocaleLowerCase","removeDistributionLists","distributionGroup","removeAllDistributionLists","handleSearchUserProfiles","SearchKey","PageIndex","PageSize","milestoneList","benefitsProvisionedList","programStartDate","userProfileApi","handleLoadUserProfile","_userProfile$userProf","handleLoadUserProfileByEmail","_userProfile$userProf2","handleUpdateUserProfileBlockShipping","handleLoadUserProfileComments","handleUpdateUserProfileComment","userProfileCommentToUpdate","handleLoadUserProfileVSBenefits","loadUserProfileVSBenefitSuccess","handleProvisionUserProfileVSBenefits","userProfileVSBenefitRequest","handleExtendUserProfileVSBenefits","handleEndUserProfileVSBenefits","handleUpdateProgramProfile","updateProgramProfileSuccess","handleClaimBenefit","handleGetProfileBenefits","handleProgramProfileFetch","handleAddComment","userProfileCommentToCreate","handleDlLoad","userProfileDlLoadSuccess","details","handleDlRemove","handleDlRemoveAll","handleUserProfileIsPrivateUpdate","searchVisualStudioBenefits","downloadRequestsToCsv","handleSearchVisualStudioBenefits","awardPeriodList","visualStudioBenefitApi","vsBenefits","handleDownloadRequestsToCSV","getEvent","handleLoadEvent","eventApi","loadEventSuccess","handleSearchEvents","eventsStatus","eventsType","eventsFormat","eventsCountry","eventsState","eventsLastReviewedBy","eventsStudentMilestone","eventsStartDate","eventsEndDate","handleEventStatusUpdate","updateEventStatusSuccess","uploadCSVFile","fileString","submitCSVFile","uploadProgramStatusCSVFile","submitProgramStatusCSVFile","uploadCsvFileFail","submitCsvFileFail","handleCsvFileUpload","sAApi","uploadCsv","uploadCsvFileBadRequest","handleCsvFileSubmit","handleProgramCsvFileUpload","handleProgramCsvFileSubmit","watchAll","all","takeEvery","sagaMiddleware","createSagaMiddleware","store","configureStore","middleware","getDefaultMiddleware","thunk","serializableCheck","run","getSelectedHighlightedActivitiesEventsFilterValues","getSelectedAdditionalActivitiesEventsFilterValues","selectTechnologyAreaFilterValuesByAreaGroups","areaGroups","rootState","getState","getHighlightedActivitiesEventsCurrentPage","getHighlightedActivitiesEventsFilteredCount","getHighlightedActivitiesEventsPageSize","getAdditionalActivitiesEventsCurrentPage","getAdditionalActivitiesEventsFilteredCount","getAdditionalActivitiesEventsPageSize","isLoadingUserProfileInfoBySelectedApplicationId","_state$applicationDet","getUserProfileInfoBySelectedApplicationIdErrorMessage","getUserProfileInfoBySelectedApplicationId","getApplicationQuestionsBySelectedApplicationId","getApplicationQuestionsBySelectedApplicationIdErrorMessage","getIsLoadingApplicationQuestionsBySelectedApplicationId","_state$applicationDet2","getHighlightedActivitiesEventsBySelectedApplicationId","getHighlightedActivitiesEventsBySelectedApplicationIdErrorMessage","getIsLoadingHighlightedActivitiesEventsBySelectedApplicationId","_state$applicationDet3","getAdditionalActivitiesEventsBySelectedApplicationId","getAdditionalActivitiesEventsBySelectedApplicationIdErrorMessage","getIsLoadingAdditionalActivitiesEventsBySelectedApplicationId","_state$applicationDet4","getIsLoadingActivityEventDetails","_state$applicationDet5","getSelectedActivityEvent","getSelectedActivityEventErrorMessage","getApplicationFlagsBySelectedApplicationId","getIsLoadingApplicationFlagsBySelectedApplicationId","_state$applicationDet6","getApplicationFlagsBySelectedApplicationIdErrorMessage","getSelectedUserProfileApplicationId","_state$applicationDet7","getManageApplicationOperationStatus","_state$applicationDet8","getUpdateTechnologyAreaOperationStatus","_state$applicationDet9","ActivityEventDetailsSidePanel","isEvent","activityEventName","activityEventType","privateDescription","targetAudiences","additionalTechnologyAreas","activityOrEventUrl","photosRecordingUrl","quantity","liveStreamViews","subscriberBase","numberOfSessions","numberOfViews","eventTimeZone","activityPublishedDate","eventStartDateTimeUtc","eventEndDateTimeUtc","AdditionalActivitiesEvents","techAreaGroupsRemoved","setTechAreaGroupsRemoved","isActivityEventDetailsPanelOpen","setIsActivityEventDetailsPanelOpen","lastSelectedSortColum","setLastSelectedSortColumn","isSelectedSortColumDesc","setIsSelectedSortColumnDesc","onItemClicked","selectedItem","techAreasToRemove","fl","fetchAdditionalActivitiesEventsBySelectedUserprofileId","filtersNotSelected","f","onColumnHeaderClick","_column$isSortedDesce","isDesc","onSortColumn","ApplicationFlags","isLoadingFlags","applicationFlagsErrorMessage","flags","flag","justificationText","flagKey","getFlagReasonText","ApplicationQuestions","_applicationQuestions","_applicationQuestions2","_applicationQuestions3","applicationQuestionsGroupBySectionAndByQuestionId","HighlightedActivitiesEvents","fetchHighlightedActivitiesEventsBySelectedApplicationId","Nomination","_nominatorForm$userPr","nominatorForm","userProfileTenant","userProfileTenants","microsoftEmail","microsoftRole","toUpperCase","nominatorReasons","reason","wordBreak","answerText","ProfileInformation","_profileInfo$userProf2","sortedApplicationQuestions","PROFILE_INFORMATION","siteEmailAddress","preferredContactEmailAddress","leveragingNetworkAndInfluenceQuestion","leveragingNetworkAndInfluenceQuestionResponse","flexColumnStackStyles","tfaTitleStyles","tfaTextStyles","ApplicationFlaggingSidePanel","applicationTechnologyFocusAreas","flagReasonOption","tfa","technologyFocusAreaScore","technologyFocusAreaStatus","choiceGroupStyles","RadioSelectController","ChoiceGroup","ApplicationScoringSidePanel","technologyAreaName","typeError","ManageApplicationSidePanel","manageApplicationError","shouldRemoveFlags","setShouldRemoveFlags","updateApplicationStatusesAndRemoveFlags","temp","technologyFocusAreaId","currentTechnologyFocusAreaStatusName","newTechnologyFocusAreaStatusName","opt","getComments","getCommentsIsLoadingStatus","_state$mvpState$comme","_state$mvpState$comme2","getCommentsErrorMessage","_state$mvpState$comme3","MostValuableProfessionalComments","fetchUserProfileComments","MVP_UPDATE_USERS","MVP_VIEW_APPLICATIONS","ApplicationProfileHeader","isGovtEmployee","awardedTechnologyAreas","_technologyArea$techn","UpdateTechnologyAreaSitePanel","updateTechnologyAreaError","technologyAreaOptions","isLoadingTechnologyAreas","setIsLoadingTechnologyAreas","isResetScores","updateApplicationTechnologyAreaAndResetScores","i","currentTechnologyFocusAreaName","newTechnologyFocusAreaName","isResetScore","_technologyAreaOption","BrandLabel","MostValuableProfessionalApplicationDetailsContainer","tooltipId","useId","useApplicationTabs","isUserProfileLoading","updateTechnologyAreaOperationStatus","isScorePanelOpen","setIsScorePanelOpen","isFlagApplicationPanelOpen","setisFlagApplicationPanelOpen","isManageApplicationPanelOpen","setIsManageApplicationPanelOpen","isUpdateTechnologyAreaPanelOpen","setIsUpdateTechnologyAreaPanelOpen","techAreaBeingScored","setTechAreaBeingScored","applicationIsInCorrectWindow","BG_FINAL_REVIEW","scoringIsDisabled","PG_REVIEW","hasScored","_assignee$hasScore","_userProfileInfo$appl","assignIsDisabled","normalizeDate","getFullYear","getMonth","getDate","normalizedToday","normalizedEnrollmentEndDate","enrollmentEndDate","formStatus","isAnnualException","isRenewalApplication","applicationFormTechnologyFocusArea","CPM_REVIEW","isInReview","closeDelay","isCurrentEmployerCompetitor","isGovernmentEmployeeQuestionResponse","deleteButtonDangerStyles","popupTitleDangerStyles","contentDanger","ConfirmationPopup","confirmButtonText","cancelButtonText","onConfirm","CommandBarWrapper","TableWrapper","commandBarButtonPresent","UserProfileDistributionList","_selectedDl$dlDisplay","allowEditing","dlRemoveStatus","dlRemoveError","dlRemoveAllStatus","dlRemoveAllError","onRemoveDl","onRemoveAllDl","selectedDl","setSelectedDl","isRemovingDl","isRemovingAllDl","distributionList","onClickRemove","dlDisplayName","getSelectedUserProfile","getUserProfileIsLoadingStatus","getFetchUserProfileErrorMessage","getUserProfileUpdatePrimaryEmailStatus","getUserProfileUpdatePrimaryEmailErrorMessage","getUserProfileUpdateAnnualExceptionError","getUserProfileUpdateAnnualExceptionOperationStatus","MostValuableProfessionalDistributionLists","distributionListLoadStatus","distributionListRemoveStatus","distributionListRemoveError","distributionListRemoveAllStatus","distributionListRemoveAllError","canEditDistributionListMembership","handleLoadDl","joinedEmail","handleRemoveAll","GrantAnnualExceptionSidePanel","labelStylesNormal","commandBarUnblockStyles","MostValuableProfessionalProfile","_profileInfo$id","_profileInfo$id2","isGrantAnnualExceptionPanelOpen","setIsGrantAnnualExceptionPanelOpen","userProfileAnnualExceptionUpdateStatus","userProfileAnnualExceptionUpdateError","handleGrantAnnualExceptionTogglePanel","canGrantAnnualException","isInCurrentCohort","userProfileAnnualExceptionUpdate","MultiDropdownController","setCount","dropdownOptions","setDropdownOptions","setSelectedItems","_props$defaultValues","maxLimit","formOnChange","_event","newSelectedItems","onItemRemoved","_state$mvpState","_state$mvpState$progr2","MostValuableProfessionalProgramProfileEditForm","firstAwardDate","strengths","getRetireProfileOperationStatus","getRetireProfileErrorMessage","_state$mvpState$retir2","MostValuableProfessionalRetireEditForm","customErrorMessage","setCustomErrorMessage","additionalInformation","setAdditionalInformation","reasonForRemoval","resizable","onRetire","MostValuableProfessionalProgramProfile","_programProfile$techn","_programProfile$techn2","_programProfile$techn3","_programProfile$techn4","_programProfile$stren","isRetirePanelOpen","setIsRetirePanelOpen","renderCommand","technologyAreaGroups","consecutiveAwards","ndaStatus","mvpLegacyId","_state$mvpState$benef","_state$mvpState$benef3","_state$mvpState$benef4","_state$mvpState$benef5","m365GetBenefitDetail","m365UpdateStatus","_state$mvpState$m365B","_state$mvpState$m365B2","ms365GetBenefitDetail","_state$mvpState$ms","ms365UpdateStatus","_state$mvpState$ms2","teamsGetBenefitDetail","awardKitsGetBenefitDetail","teamsFetchStatus","_state$mvpState$teams","awardKitsFetchStatus","_state$mvpState$award","azureBenefitUpdateStatus","_state$mvpState$azure","azureBenefitUpdateErrorMessage","getAddAzureBenefitOperationStatus","getAddAzureBenefitErrorMessage","_state$mvpState$azure3","AzureBenefitExtendCreditForm","M365CopilotBenefitDetail","M365DetailsEditForm","isEditM365PanelOpen","setIsEditM365PanelOpen","validation","optional","FormatSubscriptionId","addAzureBenefitClicked","registrationId","isModernSponsorship","getUserProfiles","getSelectedUserProfileIsLoadingStatus","getUserProfileCommentsIsLoadingStatus","getUserProfileCommentsErrorMessage","getProgramProfileUpdateStatus","_state$rdUserProfileS","getUpdateProgramProfileErrorMessage","getUserProfileAddCommentInProgressStatus","_state$rdUserProfileS2","_state$rdUserProfileS3","_state$rdUserProfileS4","_state$rdUserProfileS5","_state$rdUserProfileS6","_state$rdUserProfileS7","getCurrentSortColumn","getCurrentSortDescending","getUserProfileUpdatePrimaryEmailError","_state$rdUserProfileS9","_state$rdUserProfileS10","AzureBenefitAddRecordForm","addAzureBenefitCredit","addAzureBenefitStatusMVP","getAddAzureBenefitOperationStatusMVP","addAzureBenefitStatusRD","getAddAzureBenefitOperationStatusRD","MVPActions","RDUserProfileAction","ProfileBenefitDetails","m365UpdateBenefitDetail","ms365UpdateBenefitDetail","extendAzureBenefitCreditUpdateStatus","extendAzureBenefitCreditErrorMessage","addAzureBenefits","addAzureBenefitsUpdateStatus","addAzureBenefitsErrorMessage","isEditMS365PanelOpen","setIsEditMS365PanelOpen","isExtendAzureCreditPanelOpen","setIsExtendAzureCreditPanelOpen","isAddAzureBenefitPanelOpen","setIsAddAzureBenefitPanelOpen","setSku","dismissEditM365Panel","dismissEditMS365Panel","manageAzureBenefitCreditClicked","manageAddAzureBenefitClicked","dismissExtendAzureBenefitCreditPanel","dismissAddAzureBenefitPanel","_profileBenefits$bene","_profileBenefits$bene2","_profileBenefits$bene3","_profileBenefits$bene4","ProfileAzureBenefitDetail","getBenefitDisplayTitle","claimBenefitDispatch","skuValue","MostValuableProfessionalBenefitDetails","MVPBenefitsSelector","azureBenefitExtendCreditError","azureBenefitExtendCreditStatus","MostValuableProfessionalDetailsContainer","_partialProfileInfo$i","fetchErrorMessage","partialProfileInfo","canViewBenefits","MVP_VIEW_BENEFITS","canViewDistributionLists","MVP_VIEW_DISTRIBUTIONS_LIST","MVP_UPDATE_PRIMARY_EMAIL","userProfilePrimaryEmailUpdate","getIsLoadingStatus","getFilteredUserProfiles","getSelectedFilterValues","getSearchTextValue","getPaginationPageSize","getPaginationCurrentPage","headerTooltip","columnName","formatStatusColumn","MostValuableProfessionalList","isLoadingUsers","_props$column","_props$column2","_props$column3","_props$column4","_props$column5","_props$column6","_props$column7","_props$column8","_props$column9","_props$column10","_props$column11","_props$column12","_props$column13","_props$column14","userProfileSearchSortingUpdate","profileId","onUserProfileSelected","userProfileSearchCurrentPageUpdate","userProfileSearchPageSizeUpdate","MostValuableProfessionalSearchContainer","removeUserProfilesProvinceFilterValue","AdminNavbar","Navbar","AdminNavLink","NavLink","AdminNavBrand","NavbarBrand","Navigation","isUserAuthenticated","onSignInClicked","onSignOutClicked","expand","Brand","aria-controls","Collapse","Nav","NavigationContainer","PageNotFoundContainer","RegionalDirectorsEventContainer","RdHomeContainer","RegionalDirectorBenefitDetails","RDUserProfileSelector","RDUserProfilesActions","CommentContainer","RegionalDirectorComments","RD_UPDATE_USERS","RegionalDirectorProfile","RegionalDirectorProgramProfileEditForm","programProfileUpdateErrorMessage","RegionalDirectorProgramProfile","userProfileAwardPeriodEndDate","RegionalDirectorsDistributionLists","RegionalDirectorDetails","selectedUserProfileErrorMessage","userProfileCommentsErrorMessage","addUserProfileCommentStatus","RegionalDirectorsDetailsContainer","createdOrModifiedBy","RdUserProfileSelectors","updateProgramProfileStatus","SocialNetworkSelectors","RD_UPDATE_PRIMARY_EMAIL","RdUserProfilesActions","detailsProps","onClaimBenefit","onDismissClaimBenefitPanel","RegionalDirectorsLists","profilesToRender","applicationProfileStatus","UserProfilesActions","onClickProfile","RegionalDirectorsContainer","UserProfileSelectors","rdListsProps","fetchSelectedUserProfile","Image","active","$isActiveTenant","LinkWrapper","$isActive","$hasActiveChild","AnchorWrapper","AnchorLink","$active","$activeTenant","header","AnchorLinkWrapper","SubLinkWrapper","$hasActiveParent","NavigationLink","useLocation","source","isPrivacyLink","subLinks","firstSubLink","isActiveTenant","hasActiveChild","subLink","FlexColumn","SideNavigation","links","privacyLink","PrivacyIcon","link","SideNavLinksEnum","headerLink","sideNavigationByRoles","HEADER","USERS","REVIEW","ACCESS","AWARDCATEGORIES","BENEFITS","DL","EVENTS","APPLICATIONS","getLink","program","linkType","MLSAIcon","MVPIcon","RDIcon","SearchIcon","EventIcon","eventsLink","ApplicationIcon","applicationsLink","reviewLink","_subNavigationByRoles","AccessControlIcon","accessControlLink","DistributionListIcon","awardCategoriesLink","gitHubProBenefit","linkedInLearningBenefit","M365Benefit","m365CopilotBenefit","mcpExamVoucherBenefit","visualStudioBenefit","swagKitBenefit","teamsBenefit","awardKitBenefit","AwardKit","microsoft365Benefit","BenefitsIcon","benefitsLink","mvpSubLinks","PendingRequestIcon","rdSubLinks","distributionListsLink","getSideNavigationLinksForUser","roleMatch","_sideNavigationByRole","l","unionBy","SideNavigationContainer","StudentHomeContainer","studentProfilesToRender","_levelStatus","_application","studentId","onClickStudentProfile","validateFileUpload","files","currentTarget","typeParts","convertCsvToBase64","resolve","reader","FileReader","readAsDataURL","onload","base64String","onerror","getCsvUploadState","getCsvUploadErrors","getCsvSubmitStatus","fileUploadContainer","fileInputs","iconButton","summaryText","errorText","updateCommandBarStyles","UpdateSARegistrationStatusSidePanel","fileInputRef","fileUploadError","setFileUploadError","selectedFileName","setSelectedFileName","csvError","isSubmitted","shouldTriggerEmail","setShouldTriggerEmail","resetState","onClickOfSubmit","skipTransactionalEmail","Button","handleDownloadStaticCSV","readOnly","_fileInputRef$current","accept","ref","UpdateSAProgramStatusSidePanel","UpdateSARegistrationStatus","isProgramStatusPanelOpen","setIsProgramStatusPanelOpen","StudentList","UnauthorizedContainer","headerContent","pageStyles","sideBarStyles","contentStyles","overflow","initializeIcons","AppContainer","Switch","exact","AccessControlCreateEditContainer","AzureRequestsContainer","M365CopilotBenefitContainer","BenefitsContainer","EventsContainer","StudentsContainer","ApplicationsContainer","AccessControlContainer","RegionalDirectorsHomeContainer","ReactDOM","StrictMode","Router","getElementById","serviceWorker","ready","registration","unregister","console"],"mappings":"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CjGkC,0BDkGlCZ,KClGkC,2BDoGpC,CACEY,ICnGuC,+BDoGvCZ,KCpGuC,gCDsGzC,CACEY,ICtGwB,gBDuGxBZ,KCvGwB,iBDyG1B,CACEY,ICtGoC,2BDuGpCZ,KCvGoC,4BDyGtC,CACEY,IC3GmC,0BD4GnCZ,KC5GmC,2BD8GrC,CACEY,IChH6B,oBDiH7BZ,KCjH6B,qBDmH/B,CACEY,ICrH4B,mBDsH5BZ,KCtH4B,oBDwH9B,CACEY,ICrHyB,gBDsHzBZ,KCtHyB,kBDyHhB8rB,GAAwC,CACnD,CACElrB,IC3IqB,YD4IrBZ,KC5IqB,aD8IvB,CACEY,IC9IkB,SD+IlBZ,KC/IkB,UDiJpB,CACEY,ICjJyB,gBDkJzBZ,KClJyB,iBDoJ3B,CACEY,ICpJoB,WDqJpBZ,KCrJoB,YDuJtB,CACEY,ICvJ4B,mBDwJ5BZ,KCxJ4B,oBD0J9B,CACEY,IC1JyB,gBD2JzBZ,KC3JyB,iBD6J3B,CACEY,IC7J0B,iBD8J1BZ,KC9J0B,kBDgK5B,CACEY,IChK8B,mBDiK9BZ,KCjK8B,oBDmKhC,CACEY,IC1JiC,wBD2JjCZ,KC3JiC,0BD+JxB+rB,GAA8C,CACzD,CACEnrB,IC1KkC,0BD2KlCZ,KC3KkC,2BD6KpC,CACEY,IC7KgC,wBD8KhCZ,KC9KgC,yBDgLlC,CACEY,IChLuC,+BDiLvCZ,KCjLuC,gCDmLzC,CACEY,ICnLwB,gBDoLxBZ,KCpLwB,iBDsL1B,CACEY,ICnLoC,2BDoLpCZ,KCpLoC,4BDsLtC,CACEY,ICxLmC,0BDyLnCZ,KCzLmC,2BD2LrC,CACEY,IC9L4B,mBD+L5BZ,KC/L4B,oBDiM9B,CACEY,IC9LyB,gBD+LzBZ,KC/LyB,kBDmMhBgsB,GAAwC,CACnD,CACEprB,IAAK,MACLZ,KAAM,OAER,CACEY,IAAK,KACLZ,KAAM,OAGGisB,GAAgC,CAC3C,CACErrB,IAAK,YACLZ,KAAM,OAER,CACEY,IAAK,YACLZ,KAAM,SAER,CACEY,IAAK,YACLZ,KAAM,2BAER,CACEY,IAAK,YACLZ,KAAM,4BAER,CACEY,IAAK,YACLZ,KAAM,4BAER,CACEY,IAAK,YACLZ,KAAM,4BAER,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,UAAW,gBACX3N,MAAO,WAeJ,MAAMi6B,GAAyC,CACpD,CACExsB,IAAK,SACLZ,KAAM,UAER,CACEY,IAAK,sBACLZ,KAAM,uBAER,CACEY,IAAK,0BACLZ,KAAM,2BAER,CACEY,IAAK,iBACLZ,KAAM,kBAER,CACEY,IAAK,kBACLZ,KAAM,mBAER,CACEY,IAAK,SACLZ,KAAM,UAER,CACEY,IAAK,6CACLZ,KAAM,+CAOGqtB,GAAyB,CACpC,UACA,uBACA,UACA,UACA,QACA,OACA,SACA,SACA,eACA,UACA,aACA,yBACA,UACA,WACA,aACA,UACA,UACA,UACA,UACA,cACA,SACA,YACA,SACA,iBACA,WACA,QACA,gBACA,YACA,UACA,QACA,QACA,QACA,YACA,UACA,cACA,WACA,cACA,SACA,YACA,eACA,SACA,gBACA,WACA,eACA,SACA,WACA,YACA,QACA,WACA,aACA,UACA,QACA,SACA,SACA,WACA,UACA,UACA,UACA,OACA,gBACA,UACA,SACA,gBACA,aACA,aACA,aACA,SACA,UACA,YACA,QACA,QACA,aACA,YACA,QACA,YACA,WACA,SACA,QACA,cACA,SACA,SACA,SACA,WACA,UACA,SACA,WACA,WACA,SACA,SACA,WACA,SACA,UACA,UACA,QACA,gBACA,YACA,SACA,aACA,UACA,UACA,OACA,WASWC,GAAmB,CAAC,OAIpBC,GAA0B,CACrC,CACE3sB,IAAK,iBACLZ,KAAM,iBAER,CACEY,IAAK,iBACLZ,KAAM,kBEt1BKwtB,OAhBmB16B,IAE0B,IAFzB,WACjC4tB,GACgC5tB,EAChC,MAAM,GAAEga,GAAOtC,eAEf,OACExX,IAAAC,cAACsG,GAAgB,CAACk0B,MAAO,CAAExyB,UAAW,SAAU,oEAE9CjI,IAAAC,cAACkD,IAAI,CAACiB,GAAE,IAAA3P,OAAMi5B,EAAWtgB,cAAa,aAAA3Y,OAAYqlB,EAAE,SAAArlB,OAAQ8jC,GAAYmC,UAAYjP,SAAO,GAAC,QAErF,MC6KEkP,OAlKb/1B,IAEA,MAAM,YAAE2a,EAAW,SAAEqb,EAAQ,qBAAErJ,EAAoB,k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C3C,CAAEv0B,IAAK,QAASZ,KAAM,UAAWm1B,SAAU,YAC3C,CAAEv0B,IAAK,QAASZ,KAAM,UAAWm1B,SAAU,YAC3C,CAAEv0B,IAAK,QAASZ,KAAM,UAAWm1B,SAAU,YAC3C,CAAEv0B,IAAK,QAASZ,KAAM,UAAWm1B,SAAU,YAC3C,CAAEv0B,IAAK,QAASZ,KAAM,UAAWm1B,SAAU,YAC3C,CAAEv0B,IAAK,QAASZ,KAAM,UAAWm1B,SAAU,YAC3C,CAAEv0B,IAAK,QAASZ,KAAM,UAAWm1B,SAAU,YAC3C,CAAEv0B,IAAK,QAASZ,KAAM,UAAWm1B,SAAU,YAC3C,CAAEv0B,IAAK,QAASZ,KAAM,UAAWm1B,SAAU,YAC3C,CAAEv0B,IAAK,QAASZ,KAAM,UAAWm1B,SAAU,YAC3C,CAAEv0B,IAAK,QAASZ,KAAM,UAAWm1B,SAAU,YAC3C,CAAEv0B,IAAK,QAASZ,KAAM,UAAWm1B,SAAU,YAC3C,CAAEv0B,IAAK,QAASZ,KAAM,UAAWm1B,SAAU,YAC3C,CAAEv0B,IAAK,QAASZ,KAAM,UAAWm1B,SAAU,YAC3C,CAAEv0B,IAAK,QAASZ,KAAM,UAAWm1B,SAAU,YAC3C,CAAEv0B,IAAK,QAASZ,KAAM,UAAWm1B,SAAU,YAC3C,CAAEv0B,IAAK,QAASZ,KAAM,UAAWm1B,SAAU,YAC3C,CAAEv0B,IAAK,QAASZ,KAAM,UAAWm1B,SAAU,YAC3C,CAAEv0B,IAAK,QAASZ,KAAM,UAAWm1B,SAAU,YAC3C,CAAEv0B,IAAK,QAASZ,KAAM,UAAWm1B,SAAU,YAC3C,CAAEv0B,IAAK,QAASZ,KAAM,UAAWm1B,SAAU,YAC3C,CAAEv0B,IAAK,QAASZ,KAAM,UAAWm1B,SAAU,YAC3C,CAAEv0B,IAAK,QAASZ,KAAM,UAAWm1B,SAAU,YAC3C,CAAEv0B,IAAK,QAASZ,KAAM,UAAWm1B,SAAU,YAC3C,CAAEv0B,IAAK,QAASZ,KAAM,UAAWm1B,SAAU,YAC3C,CAAEv0B,IAAK,QAASZ,KAAM,UAAWm1B,SAAU,YAC3C,CAAEv0B,IAAK,QAASZ,KAAM,UAAWm1B,SAAU,YAC3C,CAAEv0B,IAAK,QAASZ,KAAM,UAAWm1B,SAA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ACb,KAAKxC,GAAeG,SACZgD,cD+EuBygG,EC/EE+K,EAAOrsG,WDgFrC,CACL+U,KlDnJ8C,qCkDoJ9CusF,oBCjFI,MACF,KAAK5jG,GAAeM,iBACZ6C,aAAIgjH,GAAkB7T,IAC5B,MACF,cACQnvG,aAAIgjH,GAAkB7T,KAEhC,MAAOlxG,SACD+B,aAAIgjH,GAAkB7T,IDsEzB,IAA8B1O,EEmRtB+iB,OAhJf,kBACQC,aAAI,CACRC,axK7R4B,mBwK6RA5U,IAC5B4U,apKpRF,8CoKoRyD3T,IACvD2T,apK9QF,mDoKgRI1T,IAEF0T,apK3QF,uDoK6QIzT,IAEFyT,apKxQF,+DoK0QIxT,IAEFwT,apKrQF,8DoKuQInT,IAEFmT,apKnQoC,2BoKmQAjT,IACpCiT,azFhT8C,qCyFgTA/V,IAC9C+V,axKrRkC,yBwKqRAxU,IAClCwU,axKlR8B,qBwKkRArU,IAC9BqU,axKzQ6B,oBwKyQAnU,IAC7BmU,axK/Q4B,mBwK+QAjU,IAC5BiU,axK1S+B,sBwK0SA/T,IAC/B+T,alJrTyC,gCkJqTAjS,IACzCiS,alJlSoD,2CkJkSA7R,IACpD6R,alJzS6C,oCkJySA9R,IAC7C8R,axIzT2B,kBwIyTA3R,IAC3B2R,a7IrTyC,gC6IqTArC,IACzCqC,a7I3ToC,2B6I2TAjC,IACpCiC,a5H5T6B,oB4H4TA3S,IAC7B2S,avI7T8B,qBuI6TA1S,IAC9B0S,a9M9T0B,iB8M8TAjR,IAC1BiR,arE/T2B,kBqE+TAxG,IAC3BwG,avFpU4B,mBuFoUA9Q,IAC5B8Q,ajNhTuB,ciNgTAnY,IACvBmY,axKlTwC,+BwKkTA7T,IACxC6T,avGpUsB,auGoUA/B,IACtB+B,avG1TyB,gBuG0TA5B,IACzB4B,a9DrU+B,sB8DqUAvN,IAC/BuN,a1EtRsC,6B0EsRAtL,IACtCsL,a1E5R6B,oB0E4RArL,IAC7BqL,a1ExU2B,kB0EwUA/K,IAC3B+K,a1ErU8B,qB0EqUAjL,IAC9BiL,a1EzO2C,kC0EyOAvJ,IAC3CuJ,axEzP0C,iCwEyPA7G,IAC1C6G,a1ElTwC,+B0EkTAxK,IACxCwK,a1E3TqC,4B0E2TA7K,IACrC6K,a1E/SoC,2B0E+SA3K,IACpC2K,a1E1TsC,6B0E0TAzK,IACtCyK,a1EhT8B,qB0EgTAvK,IAC9BuK,a1EzUkC,yB0EyUAtK,IAClCsK,a1E5QuC,8B0E4QA3J,IACvC2J,a1EzQ0C,iC0EyQA1J,IAC1C0J,axExRsC,6BwEwRAjH,IACtCiH,axErRyC,gCwEqRA9G,IACzC8G,a1EtQwC,+B0EsQAzJ,IACxCyJ,a1EnQ2C,kC0EmQAxJ,IAC3CwJ,axElRuC,8BwEkRAhH,IACvCgH,axE/Q0C,iCwE+QA/G,IAC1C+G,a1EnToC,2B0EmTApK,IACpCoK,axE9UuC,8BwE8UAtH,IACvCsH,axEnT8B,qBwEmTA1H,IAC9B0H,axE5U0C,iCwE4UAvH,IAC1CuH,axEzUiC,wBwEyUAzH,IACjCyH,axE1VoC,2BwE0VAxH,IACpCwH,axE1SmC,0BwE0SAlH,IACnCkH,axExVqC,4BwEwVApH,IACrCoH,axEhTyC,gCwEgTAnH,IACzCmH,axE1UmC,0BwE0UA5H,IACnC4H,a1PpW2B,kB0PoWAvG,IAC3BuG,ajOtWkC,yBiOsWArG,IAClCqG,arOtWiC,wBqOsWA9I,IACjC8I,axPxWkC,yBwPwWAjG,IAClCiG,axPjWoC,2BwPiWApG,IACpCoG,axPtWsC,6BwPsWAlG,IACtCkG,ahN1W6B,oBgN0WA7F,IAC7B6F,axD3WoC,2BwD2WA/F,IACpC+F,avG9V+B,sBuG8VAlB,IAC/BkB,ajNxV8B,qBiNwVAxX,IAC9BwX,apK3TF,+CoK6TIhT,IAEFgT,apKtTF,sDoKwTI7S,IAEF6S,ajNvV2B,kBiNuVA5X,IAC3B4X,ajNpV4B,oBiNoVA3X,IAC5B2X,ajNjV4B,oBiNiVA1X,IAC5B0X,a9MrXyB,gB8MqXAhR,IACzBgR,ajN/U4B,oBiN+UAzX,IAC5ByX,axSlSqC,4BwSkSAlD,IACrCkD,axSrRsC,6BwSqRArD,IACtCqD,axSzRyC,gCwSyRAtD,IACzCsD,axSlW6C,oCwSkWAhD,IAC7CgD,axSpR4C,mCwSoRAjD,IAC5CiD,axS1WqC,4BwS0WAhE,IACrCgE,axSrUqC,4BwSqUA7D,IACrC6D,axSpSuC,8BwSoSA1D,IACvC0D,axS9W4B,mBwS8WAlE,IAC5BkE,axSnS4C,mCwSmSAxD,IAC5CwD,axSrUsC,6BwSqUA5D,IACtC4D,axStW8C,qCwSsWApD,IAC9CoD,axS3V8B,qBwS2VArlE,IAC9BqlE,axSzV6C,oCwSyVA9D,IAC7C8D,a1E7XiD,wC0E6XApJ,IACjDoJ,axSzX+B,sBwSyXA1E,IAC/B0E,axSxUmC,0BwSwUA/C,IACnC+C,ajNlYwB,eiNkYAtX,IACxBsX,axSnU+B,sBwSmUA7C,IAC/B6C,axShUiC,wBwSgUA1C,IACjC0C,axS7TqC,4BwS6TAzC,IACrCyC,a9S/YqC,4B8S+YAxO,IACrCwO,a9S7XF,6C8S+XIpO,IAEFoO,a9SxYF,oD8SwY+DtO,IAC7DsO,a9SvX0C,iC8SuXAjO,IAC1CiO,a9SpXsC,6B8SoXA9N,IACtC8N,a9SjX2C,kC8SiXA3N,IAC3C2N,axSrWyC,gCwSqWAxC,IACzCwC,a1EpT6C,oC0EoTAjJ,IAC7CiJ,a1ExSmD,0C0EwSA/I,IACnD+I,axErU4C,mCwEqUA5G,IAC5C4G,atHvZ+B,sBsHuZAhP,IAC/BgP,atHnZ8B,qBsHmZA3O,IAC9B2O,avK/Z4B,mBuK+ZA/Q,IAC5B+Q,a1ErTgD,uC0EqTAhJ,IAChDgJ,axEtUgD,uCwEsUA3G,IAChD2G,axErYuC,8BwEqYA1G,IACvC0G,a/HnawC,+B+HmaApN,IACxCoN,apEna8B,qBoEmaAT,IAC9BS,apEha8B,qBoEgaAL,IAC9BK,apDrasC,6BoDqaAJ,IACtCI,apDjasC,6BoDiaAH,OC5Z1C,MAAMI,GAAiBC,eAUjBC,GAAQC,aAAe,CAC3B5Y,QAASb,GACT0Z,WAAaC,GACXA,EAAqB,CACnBC,OAAO,EACPC,mBAAmB,IAElBvsH,OAAOgsH,IACPhsH,OAAO81E,GAAmBs2C,cAGjCJ,GAAeQ,IAAIX,IAEnBK,GAAMxpG,SzFF0B,CAC9BnG,KCrC8B,qBwFwCjB2vG,UCrBR,MAAMO,GACX14G,GAEAA,EAAM6+F,wBAAwBte,iCAAiCF,6BAEpDs4B,GACX34G,GAEAA,EAAM6+F,wBAAwBze,gCA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","file":"static/js/main.1dc85290.chunk.js","sourcesContent":["module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAFrSURBVHgBfZE/SAJhGMbf79RTzz+coVODp9BSEEljgydNDREGQbTktUSTa6NDRFtJg0PDNQVNDS3RkFlB0nIO0SR0BRFI5pXXeX/Uy+9IC9Se4YPveX+83/c+L4If8QJPF+6FdF39ZNtgstgj7Y6SoirZ042jwy6H8LF5kmGepNe8rMkMDBBFUmIkMJrYSWZEAhuP0stQGEvRFash/oVtPreSMlrN1CAQIQTRYBhqygfoLZ2uSDWNoFye9DB4fWYVdhe3YIQKWF5dleOE3jSmulDIG7TALjw3Pgu5Gx7elZpVx2HYwTR7HfeXtuHuWQBFa/Tgs4eL32c7rG1iIca22m0G3yvyGyxPJ2EsFO2HO3I53CW7z+kvVJtVFhtX5VtoGGqn4ITrcrE/Le0ri/g8T5+LReG/WLHwLo7XDiIEl+CkMM0k3KRLHAZ7nF5rcdasfwt4Jzhm3cDJmUAgdOkj/YX4ZGyPi3ESZr4BWKCUo+lGuw4AAAAASUVORK5CYII=\"","module.exports = __webpack_public_path__ + \"static/media/DL.14a5d64a.svg\";","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAGGSURBVHgBfZG/S0JRFMfPfb40tPRlDkFDmoTQD0gyCKJQCYQiiJYadZE2jWiO6g9It2ixsaaGCJco3xC1KRRUQ/iLSqPA9Jn69L3Xu9e0IfO73Ms5n3PuPeeL4EfRUIgRw2c+Pv9pl0TRjhACSqWK1bhicPoictjgEIH9fmMl/nQpFPJGaCGFRp1QmS0OayCQIAU3i/NxoVhsCTdEd2sTyqVlq+LKaXdLVd6Ng0q9HhjbJJRSSQL1zsyCwHEglEog8hUGvaQrCu/YcEjiq30YYCZsYNnelZNl0I6MgnljEwp3t1BKp0gDqVYDdO2ak8Rqtfl0/8oqDHjXyD15sA/Px0fNHEV3ANXu3/WV/ErCswBCEfm044DB4STdcWcsfK+8ZuCdjdS31amM0TTTw/JvWVJQeLiHx50t+GBZApQzWeDkWEM17iuI4qE9JntyHpW3YYQ2wl5MnYZNlMmzntMNDjkojSbxLyx7gI37Mxb2RNGl9kllfpxk5PloRscaXAsBk8eTw8w3a56SFqoBXBAAAAAASUVORK5CYII=\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAHASURBVHgBbVHLSiNBFD3V6Z6QcUhaGDMzODNp8YURxMcH2LoQ3am4FbJwqUQXbvQDXLhJQHCpLl2IDxAUhURdCOIj4iOKYqJoi4omto+QdCdtVRKDoIeqC/fWqcu59xBk0TsWEv2K6j6PaDIhoNeA2UQCmk68d8N14+88woJrLCj5TmM+RdUkfIGCH0K4ym5pWOirCKc/SIPboassue5/HuRyK0Z8N2lyIpmCYQB/rEK4vSS/xlTQv+W6e9FdVAYGmv/C0+HAVVTDYvARk12lKBTNWD97wnM8Jb4ayTgv8Iabdar9l4ce+RcavYcIXsfS3QfnLrDUXYHlo0fsXr7gPJKo5+I6qtljc6WI+f1IjsxwqMQwuxdFk9OWGZgugzeYQIq10yfaSf00MM8BXGY3NBJwBoifJasnKmwWE0rtFnxc4czuA6YC9+nczHMB3mETVg5ukzIrlNnNmOgsxhyVxlH2b+s3tI4eI5lVoemGl/ROh8TpzeiOoiYkVqwq/I4WOg8TvHAQocO+5rxQhmqLcsb5z2I+uk4JX4B54PxJqHE1GeNyjvZvuASed8f1VDVTQY/fkS+syE6rx9NWFGWcNyoUricA8Z3sAAAAAElFTkSuQmCC\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAFcSURBVHgBdVG/SwJRHP++9+5ELy7MJMJJIxoKQiMiiOgc22qoocmhNayhtX+gIS3am9qioL10iBwCHawGIW9IkcAzFbxT73z1LA89z8/w3pfP9/P9wfeD4B+Ht3n3XboWLddbkkGpBIBAcKBMVe3E2xcrVz0dYo909u5/KzUeKw3dDzYQnUSe85Fw6igkdws8xy/5umaY4gWfq/u/FlWzaELg5L1VT4jwB8+Rlg6R/o7nOwFYnx2Hm7Riclq74y4qzSYWXXzUugLBABweXq2sdjZws02DYAMHQUOcYYCEqY346aMOm/Nu2F+bsmQom0wTv5HUT8cfSjA5xsHlrh9yXxokc7UuL/Aow3lFkixUdMk65eT+E7IFFbLFhslVNRpHzLDrlJIe5UEPzAvldDmAY9uB76VpISw6OXmUmHmwOEPCLB44BfNEdPJRTadB9JdMeEWc3Ap5Yqwx0/wAmP16LQctAMcAAAAASUVORK5CYII=\"","module.exports = __webpack_public_path__ + \"static/media/Application.9770fa36.svg\";","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAE6SURBVHgBlZG/boJQFMYPtzroItU4S6IPQGeH2kkXBx+AxIGEkYWFJ2DVGQYTHoCVTQ0Jc9khvTwBfwYSAgm9h5S2SW0bf8NN7jnfOTnnOxx84DgO73memiTJin1XHMdBv99/LYriaNv2qdNx+BiGIcRxfB6NRsJms4H5fN4moygC13UhTVMqCMKLruu0LVAU5U0URUGWZej1evCduq7BsiwIgoCu1+unB0mS9tPpdK9p2g8xQggB1gx83+fZFCUZDAYqjnFL3IE51h3Yfs+kqiqxm/kvFosFNE2zInAnhJVd0I3/CMOwtZk8jsdXtA7d+A3MoaYsyyPZbreHPM8pWnerCGOmaUKWZfTE+DwcpfTM83x7OFywGwM7o3g2m30drgNvMhwOVXQO/8yVy2QyuS6Xy8Nut0sx9g5yvZAxJ2LydQAAAABJRU5ErkJggg==\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAFNSURBVHgBjVG/T8JAFH53pYUYYxrcpf4Is0yGRfBfEDcdHOpIIPJvqIGwmNjBQTfrv6C4ECeY1WDLrmkcTG25nveunDFqIl/S3Lve9767930EFJoD00gmDc55FQA/AUKGwFkn7pbPFY2k5L6lM3ojKgv+hhfHyRaclj3ZoNfvn5FcyBvg7K2AmctIKf/1A1quL9YobdKMUkav9/cV+couQut6DHdPb1K2kM+Ce1CE2tkDNlnGJGxSzmkDD4+3LdhxHr/ICLzh0B2Ds7sq95xoFUoIrEu1RUMSfgIFzDltuuNVCjOAfKspB3KLRfDOYHNt4RcZZ/NeItU5pMLnHtb25QhOakuSoFARAqkR/vRFSYdgYDqLBqlTWTgSTZZYgYtbQwb2xUjN5sXdjWX5vJwIjv0TnCaCC1VwCpgJ2qyc4xznY735TK4dtEsB/vsErt+GqHjUB9EAAAAASUVORK5CYII=\"","module.exports = __webpack_public_path__ + \"static/media/Privacy.0361e22d.svg\";","module.exports = __webpack_public_path__ + \"static/media/AccessControl.21ed665b.svg\";","module.exports = __webpack_public_path__ + \"static/media/Benefits.7b784f35.svg\";","module.exports = __webpack_public_path__ + \"static/media/Event.d1196d21.svg\";","module.exports = __webpack_public_path__ + \"static/media/MLSA.5be18783.svg\";","module.exports = __webpack_public_path__ + \"static/media/MVP.a3f8179f.svg\";","module.exports = __webpack_public_path__ + \"static/media/PendingRequest.646b0365.svg\";","module.exports = __webpack_public_path__ + \"static/media/RD.cca7cc62.svg\";","module.exports = __webpack_public_path__ + \"static/media/Search.a6ffed7d.svg\";","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n  window.location.hostname === \"localhost\" ||\n    // [::1] is the IPv6 localhost address.\n    window.location.hostname === \"[::1]\" ||\n    // 127.0.0.0/8 are considered localhost for IPv4.\n    window.location.hostname.match(/^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/)\n);\n\ntype Config = {\n  onSuccess?: (registration: ServiceWorkerRegistration) => void;\n  onUpdate?: (registration: ServiceWorkerRegistration) => void;\n};\n\n// eslint-disable-next-line @typescript-eslint/explicit-function-return-type\nfunction registerValidSW(swUrl: string, config?: Config) {\n  navigator.serviceWorker\n    .register(swUrl)\n    .then((registration) => {\n      // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n      registration.onupdatefound = () => {\n        const installingWorker = registration.installing;\n        if (installingWorker == null) {\n          return;\n        }\n        // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n        installingWorker.onstatechange = () => {\n          if (installingWorker.state === \"installed\") {\n            if (navigator.serviceWorker.controller) {\n              // At this point, the updated precached content has been fetched,\n              // but the previous service worker will still serve the older\n              // content until all client tabs are closed.\n              console.log(\n                \"New content is available and will be used when all \" +\n                  \"tabs for this page are closed. See https://bit.ly/CRA-PWA.\"\n              );\n\n              // Execute callback\n              if (config && config.onUpdate) {\n                config.onUpdate(registration);\n              }\n            } else {\n              // At this point, everything has been precached.\n              // It's the perfect time to display a\n              // \"Content is cached for offline use.\" message.\n              console.log(\"Content is cached for offline use.\");\n\n              // Execute callback\n              if (config && config.onSuccess) {\n                config.onSuccess(registration);\n              }\n            }\n          }\n        };\n      };\n    })\n    .catch((error) => {\n      console.error(\"Error during service worker registration:\", error);\n    });\n}\n\n// eslint-disable-next-line @typescript-eslint/explicit-function-return-type\nfunction checkValidServiceWorker(swUrl: string, config?: Config) {\n  // Check if the service worker can be found. If it can't reload the page.\n  fetch(swUrl, {\n    headers: { \"Service-Worker\": \"script\" },\n  })\n    .then((response) => {\n      // Ensure service worker exists, and that we really are getting a JS file.\n      const contentType = response.headers.get(\"content-type\");\n      if (\n        response.status === 404 ||\n        (contentType != null && contentType.indexOf(\"javascript\") === -1)\n      ) {\n        // No service worker found. Probably a different app. Reload the page.\n        navigator.serviceWorker.ready.then((registration) => {\n          registration.unregister().then(() => {\n            window.location.reload();\n          });\n        });\n      } else {\n        // Service worker found. Proceed as normal.\n        registerValidSW(swUrl, config);\n      }\n    })\n    .catch(() => {\n      console.log(\"No internet connection found. App is running in offline mode.\");\n    });\n}\n\n// eslint-disable-next-line @typescript-eslint/explicit-function-return-type\nexport function register(config?: Config) {\n  if (process.env.NODE_ENV === \"production\" && \"serviceWorker\" in navigator) {\n    // The URL constructor is available in all browsers that support SW.\n    const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n    if (publicUrl.origin !== window.location.origin) {\n      // Our service worker won't work if PUBLIC_URL is on a different origin\n      // from what our page is served on. This might happen if a CDN is used to\n      // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n      return;\n    }\n\n    window.addEventListener(\"load\", () => {\n      const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n      if (isLocalhost) {\n        // This is running on localhost. Let's check if a service worker still exists or not.\n        checkValidServiceWorker(swUrl, config);\n\n        // Add some additional logging to localhost, pointing developers to the\n        // service worker/PWA documentation.\n        navigator.serviceWorker.ready.then(() => {\n          console.log(\n            \"This web app is being served cache-first by a service \" +\n              \"worker. To learn more, visit https://bit.ly/CRA-PWA\"\n          );\n        });\n      } else {\n        // Is not localhost. Just register service worker\n        registerValidSW(swUrl, config);\n      }\n    });\n  }\n}\n\n// eslint-disable-next-line @typescript-eslint/explicit-function-return-type\nexport function unregister() {\n  if (\"serviceWorker\" in navigator) {\n    navigator.serviceWorker.ready\n      .then((registration) => {\n        registration.unregister();\n      })\n      .catch((error) => {\n        console.error(error.message);\n      });\n  }\n}\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nconst backendHost = process.env.REACT_APP_BACKEND_HOST;\nexport const APPLICATION_BASE_URL = `${backendHost}/api/ApplicationForms/`;\nexport const ACTIVITY_EVENT_BASE_URL = `${backendHost}/api/ApplicationForms/{contributionType}/{activityEventId}`;\nexport const APPLICATIONS_BASE_URL = `${backendHost}/api/{tenant}/ApplicationForms/`;\nexport const APPLICATION_FLAGS_URL = `${backendHost}/api/{tenant}/ApplicationForms/flags/`;\nexport const QUESTION_ANSWERS_URL = `${backendHost}/api/{tenant}/QuestionAnswers/`;\nexport const APPLICATION_ACTIVITIES_EVENTS_URL = `${backendHost}/api/{tenant}/ApplicationActivitiesEvents/`;\nexport const USERPROFILE_ACTIVITIES_EVENTS_URL = `${backendHost}/api/{tenant}/UserprofileActivitiesEvents/`;\nexport const ADMIN_USER_BASE_URL = `${backendHost}/api/AdminUser/`;\nexport const MVP_AZURE_BENEFIT_BASE_URL = `${backendHost}/api/mvp/benefit/azure`;\nexport const RD_AZURE_BENEFIT_BASE_URL = `${backendHost}/api/rd/benefit/azure`;\nexport const MVP_M365_COPILOT_BENEFIT_BASE_URL = `${backendHost}/api/mvp/benefit/m365Copilot`;\nexport const RD_M365_COPILOT_BENEFIT_BASE_URL = `${backendHost}/api/rd/benefit/m365Copilot`;\nexport const EVENT_BASE_URL = `${backendHost}/api/Events/`;\nexport const PROFILE_BASE_URL = `${backendHost}/api/UserProfiles/`;\nexport const PROFILE_BLOCK_SHIPPING_BASE_URL = `${backendHost}/api/UserProfiles/BlockShipping`;\nexport const MVP_PROFILE_BLOCK_SHIPPING_BASE_URL = `${backendHost}/api/mvp/UserProfiles/BlockShipping`;\nexport const BENEFIT_BASE_URL = `${backendHost}/api/{tenant}/benefit/`;\nexport const DISTRIBUTION_LIST_BASE_URL = `${backendHost}/api/{tenant}/dl/`;\nexport const GENERIC_DISTRIBUTION_LIST_BASE_URL = `${backendHost}/api/dl/`;\nexport const VISUAL_STUDIO_BENEFIT_BASE_URL = `${backendHost}/api/{tenant}/benefit/vs`;\nexport const VISUAL_STUDIO_BENEFIT_DOWNLOAD_URL = `${backendHost}/api/{tenant}/vs/download`;\nexport const RD_PROFILE_BASE_URL = `${backendHost}/api/rd/UserProfiles/`;\nexport const MVP_PROFILE_BASE_URL = `${backendHost}/api/mvp/UserProfiles/`;\nexport const PROGRAM_PROFILE_BASE_URL = `${backendHost}/api/ProgramProfile/`;\nexport const MVP_PROGRAM_PROFILE_BASE_URL = `${backendHost}/api/mvp/ProgramProfile/`;\nexport const MVP_RETIRE_BASE_URL = `${backendHost}/api/mvp/retire/`;\nexport const RD_PROGRAM_PROFILE_BASE_URL = `${backendHost}/api/rd/ProgramProfile/`;\nexport const SITECONTENT_BASE_URL = `${backendHost}/api/SiteContent/`;\nexport const UPLOAD_CSV_FILE_SA_REGISTRATION_STATUS = `${backendHost}/api/UserProfiles/ApplicationFormStatus/Csv/Upload`;\nexport const SUBMIT_CSV_FILE_SA_REGISTRATION_STATUS = `${backendHost}/api/UserProfiles/ApplicationFormStatus/Csv/Submit`;\nexport const UPLOAD_CSV_FILE_SA_PROGRAM_STATUS = `${backendHost}/api/ProgramProfile/ProgramStatus/Csv/Upload`;\nexport const SUBMIT_CSV_FILE_SA_PROGRAM_STATUS = `${backendHost}/api/ProgramProfile/ProgramStatus/Csv/Submit`;\nexport const SITECONTENT_AWARD_PERIODS_BASE_URL = `${SITECONTENT_BASE_URL}awardperiods/`;\nexport const SITECONTENT_COUNTRYREGIONS_BASE_URL = `${SITECONTENT_BASE_URL}countryregions/`;\nexport const SITECONTENT_STATEPROVINCES_BASE_URL = `${SITECONTENT_BASE_URL}stateprovinces/`;\nexport const SITECONTENT_SCHOOLS_BASE_URL = `${SITECONTENT_BASE_URL}schools/`;\nexport const SITECONTENT_SOCIALNETWORKS_BASE_URL = `${SITECONTENT_BASE_URL}socialnetworks/`;\nexport const SITECONTENT_CLREGIONS_BASE_URL = `${SITECONTENT_BASE_URL}clregions/`;\nexport const SITECONTENT_ACTIVITY_EVENT_TYPES_BASE_URL = `${SITECONTENT_BASE_URL}activityeventtypes`;\nexport const INDUSTRY_FOCUS_BASE_URL = `${SITECONTENT_BASE_URL}industryfocuses/`;\nexport const TECHNICAL_EXPERTISE_BASE_URL = `${SITECONTENT_BASE_URL}technicalexpertises/`;\nexport const PROGRAM_LANGUAGE_BASE_URL = `${SITECONTENT_BASE_URL}programLanguages/`;\nexport const TECHNOLOGY_AREA_BASE_URL = `${SITECONTENT_BASE_URL}techfocusarea`;\nexport const CL_REGIONS_BASE_URL = `${SITECONTENT_BASE_URL}clregions/`;\nexport const GEO_DATA_BASE_URL = `${SITECONTENT_BASE_URL}geodata/`;\nexport const COMMON_DATA_BASE_URL = `${SITECONTENT_BASE_URL}Common/Data/`;\nexport const SITECONTENT_AWARD_KIT_SKU_BASE_URL = `${SITECONTENT_BASE_URL}skus/`;\nexport const AWARDCATEGORIES_BASE_URL = `${backendHost}/api/awardcategory/`;\n\n// Access Control endpoints\nexport const ACCESS_CONTROL_BASE_URL = `${backendHost}/api/adminuser/`;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\nimport { UserAgentApplication } from \"msal\";\n\n/**\n * Support for Internet Explorer\n */\nexport const isIE = (): boolean => {\n  const ua = window.navigator.userAgent;\n  const msie = ua.indexOf(\"MSIE \") > -1;\n  const msie11 = ua.indexOf(\"Trident/\") > -1;\n\n  return msie || msie11;\n};\n\n/**\n * Determines if interactive method is needed to acquire token.\n * Since the silent token requests to Azure AD may fail for some reasons such as an expired Azure AD session or a password change.\n */\nexport const requiresInteraction = (errorMessage: any): boolean => {\n  if (!errorMessage || !errorMessage.length) {\n    return false;\n  }\n\n  return (\n    errorMessage.indexOf(\"consent_required\") > -1 ||\n    errorMessage.indexOf(\"interaction_required\") > -1 ||\n    errorMessage.indexOf(\"login_required\") > -1 ||\n    errorMessage.indexOf(\"block_token_requests\") > -1 ||\n    errorMessage.indexOf(\"token_renewal_error\") > -1\n  );\n};\n\n/**\n * Define access scopes\n */\nexport const GRAPH_SCOPES = {\n  OPENID: \"openid\",\n  PROFILE: \"profile\",\n  USER_READ: \"User.Read\",\n  USER_READBASIC_ALL: \"User.ReadBasic.All\",\n};\n\n/**\n * Define access scopes for Maven.\n */\nexport const MAVEN_SCOPES = {\n  USER_ACCESS: process.env.REACT_APP_API_APPID\n    ? \"api://\" + process.env.REACT_APP_API_APPID + \"/user_impersonate\"\n    : \"api://790b3d39-99e5-4590-80d7-916adf11faef/user_impersonate\",\n};\n\nexport const GRAPH_ENDPOINTS = {\n  ME: \"https://graph.microsoft.com/v1.0/me\",\n  USER_BY_EMAIL: \"https://graph.microsoft.com/v1.0/users/\",\n};\n\n/**\n * Define Graph request with scope info.\n * NOTE: Also defining extra scope to enable silently getting Maven token from cache when needed.\n */\nexport const GRAPH_REQUESTS = {\n  LOGIN: {\n    scopes: [\n      GRAPH_SCOPES.OPENID,\n      GRAPH_SCOPES.PROFILE,\n      GRAPH_SCOPES.USER_READ,\n      GRAPH_SCOPES.USER_READBASIC_ALL,\n    ],\n    extraScopesToConsent: [MAVEN_SCOPES.USER_ACCESS],\n  },\n};\n\n/**\n * Define Maven api request scopes.\n */\nexport const MAVEN_REQUESTS = {\n  LOGIN: {\n    scopes: [MAVEN_SCOPES.USER_ACCESS],\n  },\n};\n\n/**\n * Fetch MS graph data.\n * @param {string} url The Graph endpoint.\n * @param {string} accessToken The access token.\n * @returns {Promise<any>} .\n */\nexport const fetchMsGraph = async (url: any, accessToken: any) => {\n  const response = await fetch(url, {\n    headers: {\n      Authorization: `Bearer ${accessToken}`,\n    },\n  });\n\n  return response.json();\n};\n\n/**\n * Core MSAL configuration\n * Instantiate UserAgentApplication  with a configuration object - this intializes MSAL authentication context\n * TODO - revisit caching options and port to config file after refactoring\n */\nexport const msalApp = new UserAgentApplication({\n  auth: {\n    clientId: process.env.REACT_APP_AAD_CLIENTID || \"964edd73-cfe4-4cec-8b36-68cb5c2f5cc5\",\n    authority: \"https://login.microsoftonline.com/\" + process.env.REACT_APP_AAD_TENANTID,\n    validateAuthority: true,\n    redirectUri: window.location.origin,\n    postLogoutRedirectUri: window.location.origin,\n    navigateToLoginRequestUrl: false,\n  },\n  cache: {\n    cacheLocation: \"localStorage\",\n    storeAuthStateInCookie: isIE(),\n  },\n  system: {\n    navigateFrameWait: 0,\n  },\n});\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\n/**\n * An enumeration of different Http status codes.\n * Following this pattern since we need runtime support of\n * the values of the enum.\n * Tip #4: https://medium.com/@martin_hotell/10-typescript-pro-tips-patterns-with-or-without-react-5799488d6680\n */\ntype EnumLiteralOf<T extends object> = T[keyof T];\n\nexport const HttpStatusCode = Object.freeze({\n  Ok: 200 as 200,\n  CreatedAt: 201 as 201,\n  NoContent: 204 as 204,\n  BadRequest: 400 as 400,\n  Unauthorized: 401 as 401,\n  Forbidden: 403 as 403,\n  NotFound: 404 as 404,\n  ServerError: 500 as 500,\n  NotImplemented: 501 as 501,\n  BadGateway: 502 as 502,\n  ServiceNotAvailable: 503 as 503,\n});\n\nexport type HttpStatusCode = EnumLiteralOf<typeof HttpStatusCode>;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { AuthenticationParameters, AuthResponse } from \"msal\";\n\nimport { msalApp, requiresInteraction, MAVEN_REQUESTS } from \"../Authentication/AuthHelper\";\nimport { HttpStatusCode } from \"../Constants/HttpStatusCode\";\n\nexport interface IHttpResponse<T> extends Response {\n  parsedBody?: T;\n  httpStatusCode?: number;\n}\n\n/**\n * Acquires authentication token through msal (OAUTH 2.0 flow)\n * @method\n * @param {AuthenticationParameters} request The request params.\n * @param {boolean} redirect Is redirect option enabled.\n * @returns {Promise<AuthResponse>} Authentication token response\n */\nexport async function acquireToken(\n  request: AuthenticationParameters,\n  redirect: boolean\n): Promise<AuthResponse> {\n  // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n  // @ts-ignore\n  return msalApp.acquireTokenSilent(request).catch((error) => {\n    // Call interactive token request method in case of acquireTokenSilent failure\n    // due to consent or interaction required\n    if (requiresInteraction(error.errorCode)) {\n      return redirect\n        ? msalApp.acquireTokenRedirect({ ...request, redirectUri: window.location.origin })\n        : msalApp.acquireTokenPopup(request);\n    }\n  });\n}\n\n/**\n * Utility function to send HTTP requests.\n * NOTE: Errors needs to be caught and handled by the caller as since  this is just a util, there is no telemetry instance.\n * @param {RequestInfo} request The Request info.\n * @param {boolean} isProtectedEndpoint If true get access token and attach it.\n * @param {boolean} isResponseJson If true the response is JSON.\n * @return {Promise<IHttpResponse<T>>} The Response.\n */\nexport async function http<T>(\n  request: RequestInfo,\n  isProtectedEndpoint = false,\n  isResponseJson = true\n): Promise<IHttpResponse<T>> {\n  // In the case of the Service not being available, fetch will return a TypeError\n  // Need to look into how fetch can handle a timeout, or if we implement our own\n  // timeout on the frontend and send back a rejected promise.\n  try {\n    let response: IHttpResponse<T>;\n\n    // if its protected, obtain token and call api.\n    if (isProtectedEndpoint) {\n      const tokenResponse = await acquireToken(MAVEN_REQUESTS.LOGIN, true);\n      if (tokenResponse) {\n        response = await fetch(request, {\n          headers: {\n            Authorization: `Bearer ${tokenResponse.accessToken}`,\n            \"Content-Type\": \"application/json\",\n          },\n        });\n      } else {\n        // TODO: Log telemetry\n        return Promise.reject(\"Unable to fetch authentication token.\");\n      }\n    } else {\n      response = await fetch(request);\n    }\n\n    // httpStatusCode.NoContent has no content/body\n    // and fails response.json()\n    if (response.status !== HttpStatusCode.NoContent && isResponseJson) {\n      response.parsedBody = await response.json();\n    }\n\n    response.httpStatusCode = response.status;\n    return response;\n  } catch (error) {\n    throw new Error(error);\n  }\n}\n\n/**\n * Utility function to send GET HTTP requests.\n * @param {string} path The url info.\n * @param {boolean} isProtectedEndpoint Indicates if the endpoint is protected.\n * @param {RequestInit} args The arguments.\n * @return {Promise<IHttpResponse<T>>} The Response.\n */\nexport async function get<T>(\n  path: string,\n  isProtectedEndpoint = false,\n  args: RequestInit = { method: \"GET\" }\n): Promise<IHttpResponse<T>> {\n  return await http<T>(new Request(path, args), isProtectedEndpoint);\n}\n\n/**\n * Utility function to send POST HTTP requests.\n * @param {string} path The url info.\n * @param {any} body The post body.\n * @param {boolean} isProtectedEndpoint Indicates if the endpoint is protected.\n * @param {boolean} isResponseJson If true the response is JSON.\n * @param {RequestInit} args The arguments.\n * @return {Promise<IHttpResponse<T>>} The Response.\n */\nexport async function post<T>(\n  path: string,\n  body: any,\n  isProtectedEndpoint = false,\n  isResponseJson = true,\n  args: RequestInit = {\n    method: \"POST\",\n    body: JSON.stringify(body),\n    headers: { \"Content-Type\": \"application/json\" },\n  }\n): Promise<IHttpResponse<T>> {\n  return await http<T>(new Request(path, args), isProtectedEndpoint, isResponseJson);\n}\n\n/**\n * Utility function to send PUT HTTP requests.\n * @param {string} path The url info.\n * @param {any} body The put body.\n * @param {boolean} isProtectedEndpoint Indicates if the endpoint is protected.\n * @param {RequestInit} args The arguments.\n * @return {Promise<IHttpResponse<T>>} The Response.\n */\nexport async function put<T>(\n  path: string,\n  body: any,\n  isProtectedEndpoint = false,\n  args: RequestInit = {\n    method: \"PUT\",\n    body: JSON.stringify(body),\n    headers: { \"Content-Type\": \"application/json\" },\n  }\n): Promise<IHttpResponse<T>> {\n  return await http<T>(new Request(path, args), isProtectedEndpoint);\n}\n\n/**\n * Utility function to send DELETE HTTP requests.\n * @param {string} path The url info.\n * @param {any} body The delete body.\n * @param {boolean} isProtectedEndpoint Indicates if the endpoint is protected.\n * @param {RequestInit} args The arguments.\n * @return {Promise<IHttpResponse<T>>} The Response.\n */\nexport async function remove<T>(\n  path: string,\n  body: any,\n  isProtectedEndpoint = false,\n  args: RequestInit = {\n    method: \"DELETE\",\n    body: JSON.stringify(body),\n    headers: { \"Content-Type\": \"application/json\" },\n  }\n): Promise<IHttpResponse<T>> {\n  return await http<T>(new Request(path, args), isProtectedEndpoint);\n}\n\n/**\n * Utility function to create auth token for requests.\n * @param {Headers} headers The headers info.\n * @param {any} body The delete body.\n */\nexport async function getAuthToken(headers: Headers): Promise<Headers> {\n  const tokenResponse = await acquireToken(MAVEN_REQUESTS.LOGIN, true);\n  if (tokenResponse) {\n    headers.set(\"Authorization\", `Bearer ${tokenResponse.accessToken}`);\n  }\n  return headers;\n}\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { createContext, useContext, useEffect, useState } from \"react\";\n\nimport { Account, AuthenticationParameters } from \"msal\";\n\nimport * as adminApi from \"../Services/AdminApi\";\n\nimport { IAdminPermissions } from \"Interfaces/Admin/IAdminPermissions\";\n\nimport {\n  fetchMsGraph,\n  msalApp,\n  requiresInteraction,\n  GRAPH_ENDPOINTS,\n  GRAPH_REQUESTS,\n} from \"./AuthHelper\";\nimport IAuthProvider from \"./IAuthProviderProps\";\n\n/**\n * Enable redirect authentication flow\n */\nconst useRedirectFlow = true;\n\nconst DEFAULT_AUTH_STATE = {\n  isUserLoggedIn: false,\n  loading: true,\n} as IAuthProvider;\n\nconst authContext = createContext(DEFAULT_AUTH_STATE);\n\nconst useProvideAuth = (): IAuthProvider => {\n  const [adminAccount, setAdminAccount] = useState<Account>();\n  const [error, setError] = useState<string>();\n  const [loading, setLoading] = useState<boolean>(true);\n  const [graphProfile, setGraphProfile] = useState<any>();\n  const [adminPermissions, setAdminPermissions] = useState<any>();\n\n  const authCallback = (error, response) => {\n    if (error) {\n      const errorMessage = error ? error : \"Unable to acquire access token.\";\n      setError(errorMessage);\n    }\n  };\n\n  /**\n   * Signin call back\n   * @method\n   * @param {boolean} redirect Is redirect enabled.\n   * @returns {Promise<void>} Empty promise.\n   */\n  const onSignIn = (redirect: boolean) => {\n    if (redirect) {\n      return msalApp.loginRedirect(GRAPH_REQUESTS.LOGIN);\n    }\n  };\n\n  /**\n   * Signout call back\n   * @method\n   * @returns {void}\n   */\n  const onSignOut = (): void => {\n    msalApp.logout();\n  };\n\n  /**\n   * Returns roles as list of strings.\n   * @type {string[]} adminRoles\n   */\n  const adminRoles: string[] = !loading\n    ? adminPermissions?.adminRolePermissions.map((rolePermission) => rolePermission.role)\n    : [];\n\n  /**\n   * Returns if user has any roles\n   * @type {boolean} hasAnyRoles\n   */\n  const hasAnyRoles: boolean = adminRoles && adminRoles.length > 0;\n\n  /**\n   * Checks if the admin user had the given role\n   * @param {string} role name of role\n   * @returns {boolean} flag if user has given role\n   */\n  const hasRole = (role: string): boolean =>\n    adminPermissions?.adminRolePermissions.filter((rolePermission) => rolePermission.role === role)\n      .length > 0;\n\n  /**\n   * Checks if the admin has permission for given tenant\n   * @param {string} tenant the tenant to check permission for\n   * @param {string} verifyPermission the permission being checked\n   * @returns {boolean} flag indicating if user has given permission for tenant\n   */\n  const hasPermission = (tenant: string, verifyPermission: string): boolean =>\n    adminPermissions?.adminRolePermissions.filter(\n      (rolePermission) =>\n        rolePermission.tenant === tenant &&\n        rolePermission.permissions.filter((permission) => permission === verifyPermission).length >\n          0\n    ).length > 0;\n\n  /**\n   * Initial set up of Auth Provider\n   */\n  useEffect(() => {\n    // Register error callback for redirect flow\n    msalApp.handleRedirectCallback(authCallback);\n\n    const account = msalApp.getAccount();\n    setAdminAccount(account);\n    if (!account) {\n      setLoading(false);\n    }\n  }, []);\n\n  useEffect(() => {\n    /**\n     * Acquires authentication token through msal (OAUTH 2.0 flow)\n     * @param {AuthenticationParameters} request The request params.\n     * @param {boolean} redirect Is redirect option enabled.\n     * @returns {Promise<void>} Authentication token response\n     */\n    const acquireToken = async (\n      request: AuthenticationParameters,\n      redirect: boolean\n    ): Promise<void> => {\n      const tokenResponse = await msalApp.acquireTokenSilent(request).catch((error) => {\n        // Call interactive token request method in case of acquireTokenSilent failure\n        // due to consent or interaction required\n        if (requiresInteraction(error.errorCode)) {\n          redirect ? msalApp.acquireTokenRedirect(request) : msalApp.acquireTokenPopup(request);\n        }\n      });\n\n      if (tokenResponse) {\n        const graphProfile = await fetchMsGraph(\n          GRAPH_ENDPOINTS.ME,\n          tokenResponse.accessToken\n        ).catch(() => {\n          setError(\"Unable to fetch Graph profile.\");\n        });\n\n        graphProfile && setGraphProfile(graphProfile);\n      }\n    };\n\n    /**\n     * Fetch application user profile after sign in.\n     * @param {string}  email The signed in email.\n     * @returns {Promise<void>} Empty promise.\n     */\n    const fetchAdminUserPermissions = async (): Promise<void> => {\n      const adminUserPermissionsResult =\n        adminAccount &&\n        (await adminApi.getAdminPermissions(adminAccount?.userName).catch((error: Error) => {\n          setError(\"Unable to fetch app user profile.\");\n          setLoading(false);\n        }));\n\n      if (adminUserPermissionsResult) {\n        const adminPermissionsResult =\n          adminUserPermissionsResult.parsedBody as unknown as IAdminPermissions;\n\n        // found profile so update state accordingly.\n        adminPermissionsResult && setAdminPermissions(adminPermissionsResult);\n        setLoading(false);\n      }\n    };\n\n    (async () => {\n      await acquireToken(GRAPH_REQUESTS.LOGIN, useRedirectFlow);\n      await fetchAdminUserPermissions();\n    })();\n  }, [adminAccount]);\n\n  return {\n    account: adminAccount,\n    adminPermissions,\n    error,\n    graphProfile,\n    hasAnyRoles,\n    hasPermission,\n    hasRole,\n    isUserLoggedIn: !!adminAccount,\n    loading,\n    onSignIn,\n    onSignOut,\n    roles: adminRoles,\n  };\n};\n\nexport const AuthProvider = ({ children }): React.ReactElement => {\n  const auth = useProvideAuth();\n  return <authContext.Provider value={auth}>{children}</authContext.Provider>;\n};\n\nexport const useAuth = () => {\n  return useContext(authContext);\n};\n\nexport const withAuthProvider = (Component: any) => {\n  // eslint-disable-next-line react/display-name\n  return (props: any) => {\n    const authProvider: IAuthProvider = useAuth();\n\n    return <Component authProvider={authProvider} {...props} />;\n  };\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { ADMIN_USER_BASE_URL } from \"../Constants/SagaConstants\";\nimport { IAdminPermissionsDataResult } from \"../Interfaces/Admin/IAdminPermissionsDataResult\";\nimport { IApiResult2 } from \"../Interfaces/IApiResult\";\nimport { get, IHttpResponse } from \"./ApiUtils\";\n\n/**\n * Get full detail of individual application\n */\nexport async function getAdminPermissions(\n  adminEmail: string\n): Promise<IHttpResponse<IApiResult2<IAdminPermissionsDataResult>>> {\n  return await get<IApiResult2<IAdminPermissionsDataResult>>(\n    ADMIN_USER_BASE_URL + \"permissions/\" + adminEmail,\n    true\n  );\n}\n","/*!\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n */\r\n\r\nimport { getTheme, FontSizes, FontWeights } from \"office-ui-fabric-react\";\r\nimport styled from \"styled-components\";\r\n\r\nconst theme = getTheme();\r\n\r\n/**\r\n * Flex column styles.\r\n */\r\nexport const FlexRow = styled.div`\r\n  display: flex;\r\n  flex-direction: row;\r\n  justify-content: space-between;\r\n`;\r\n\r\n/**\r\n * Styles for result counts text\r\n */\r\nexport const Title = styled.p`\r\n  font-size: ${FontSizes.size20};\r\n  font-weight: ${FontWeights.semibold};\r\n  color: ${theme.palette.black};\r\n  flex-grow: 2;\r\n`;\r\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\n/**\n * This file contains all shared styles used across\n * different containers - the application container, events container,\n * students container, and access control container.\n */\n\nimport { Link } from \"react-router-dom\";\n\nimport styled from \"styled-components\";\n\nimport {\n  getTheme,\n  FontSizes,\n  FontWeights,\n  IButtonStyles,\n  ICommandBarStyles,\n  ISearchBoxStyles,\n  IStackStyles,\n  IStackTokens,\n  ITextStyles,\n} from \"@fluentui/react\";\n\nimport { FlexRow } from \"../../Components/Common/Results/Result.styles\";\n\nconst theme = getTheme();\n\n/**\n * Styling for the table container area\n */\nexport const containerStackStyles = (): IStackStyles => {\n  return {\n    root: {\n      height: \"100%\",\n    },\n  };\n};\n\n/**\n * Styling for the container stack\n */\nexport const containerStackTokens = (): IStackTokens => {\n  return {\n    childrenGap: 36,\n  };\n};\n\n/**\n * Styling for the wrapper stack\n */\nexport const wrapperStackStyles = (): IStackStyles => {\n  return {\n    root: {\n      padding: \"0 3.25rem 0 1.25rem\",\n    },\n  };\n};\n\nexport const commandBarStyles: ICommandBarStyles = {\n  root: {\n    borderRadius: \"8px\",\n    boxShadow: \" 0px 1px 4px rgba(0, 0, 0, 0.2)\",\n    margin: \"1rem 0.5rem 0\",\n    padding: \"0.75rem\",\n    selectors: {\n      [\"button\"]: {\n        marginRight: \"36px\",\n      },\n      [\".ms-Button-label\"]: {\n        fontSize: \"14px\",\n        fontWeight: FontWeights.semibold,\n      },\n    },\n  },\n};\n\n/**\n * Styling for the button stack.\n */\nexport const buttonStackTokens = (): IStackTokens => {\n  return {\n    childrenGap: 15,\n  };\n};\n\n/**\n * Styling for filter button\n */\nexport const filterButtonStyles = (): IStackStyles => {\n  return {\n    root: {\n      marginTop: \"10px\",\n      display: \"block\",\n    },\n  };\n};\n\n/**\n * Styling for list stack (right side of container)\n */\n// TODO: this is duplicated from students container, should fix that\nexport const listStackStyles = (): IStackStyles => {\n  return {\n    root: {\n      backgroundColor: theme.palette.white,\n      borderRadius: \"0.5rem\",\n    },\n  };\n};\n\nexport const emptyStackStyles = (): IStackStyles => {\n  return {\n    root: {\n      height: \"36px\",\n    },\n  };\n};\n\n/**\n * Aligned center flex row.\n */\nexport const FlexRowAlignedCenter = styled.div`\n  display: flex;\n  align-items: center;\n\n  p {\n    margin: 0;\n    margin-right: 20px;\n  }\n`;\n\n/**\n * Styling for the row that holds the title and results.\n */\nexport const PaddedFlexRow = styled(FlexRow)`\n  padding: 23px;\n  padding-bottom: 0; // no padding needed, margin is on <p /> tag.\n`;\n\n/**\n * Styling for the search box\n */\nexport const searchBoxStyles = (): ISearchBoxStyles => {\n  return {\n    root: {\n      margin: \"0 23px\",\n    },\n  };\n};\n\n/**\n * Styling for the table stack\n */\nexport const tableStackStyles = (): IStackStyles => {\n  return {\n    root: {\n      height: \"100%\",\n    },\n  };\n};\n\n/**\n * Styling for container wrapping inner detail contents (i.e. user's access control)\n */\nexport const DetailWrapper = styled.div`\n  padding: 10px;\n  height: 100%;\n  width: 100%;\n  background-color: ${theme.palette.white};\n  border-radius: 0.5rem;\n`;\n\n/**\n * Styling for icon image when using custom SVG with text to right\n */\nexport const IconImage = styled.img`\n  padding-right: 0.5rem;\n  margin-bottom: 4px;\n`;\n\n/**\n * Styling for separator between panels (i.e. user's access control)\n */\nexport const Divider = styled.div`\n  height: 36px;\n`;\n\n/**\n * Styling for return link\n */\nexport const ReturnLink = styled(Link)`\n  color: ${theme.palette.black};\n  padding-bottom: 1rem;\n  font-size: ${FontSizes.mediumPlus};\n`;\n\n/**\n * Flex column styles.\n */\nexport const RDFlexRow = styled.div`\n  display: flex;\n  flex-direction: row;\n  justify-content: space-between;\n  align-items: baseline;\n`;\n\n/**\n * Styling for the row that holds the title, results count and download button.\n */\nexport const RDPaddedFlexRow = styled(RDFlexRow)`\n  padding-left: 23px;\n  padding-right: 23px;\n  padding-top: 23px;\n`;\n\n/**\n * Styling download button.\n */\nexport const RDButtonStyles: IButtonStyles = {\n  root: {\n    marginLeft: \"1.45rem\",\n  },\n};\n\n/**\n * Styling for text.\n */\nexport const RDTextStyles: ITextStyles = {\n  root: {\n    fontSize: FontSizes.size20,\n    fontWeight: FontWeights.semibold,\n    color: theme.palette.black,\n    flexGrow: 2,\n  },\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { useEffect, ReactElement } from \"react\";\n\nimport { DetailWrapper } from \"Containers/Common/CommonContainer.styles\";\n\nimport { useAuth } from \"./AuthProvider\";\n\n/**\n * Login Component that prompts the users to sign-in\n * @class\n */\nconst Login = (): ReactElement => {\n  const { onSignIn } = useAuth();\n\n  useEffect(() => onSignIn(false), []);\n\n  /**\n   * Renders Login component\n   */\n  return <DetailWrapper></DetailWrapper>;\n};\n\nexport default Login;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\n/**\n * The MSAL Id Token Key\n */\nexport const MSAL_IDTOKEN_KEY = \"msal.idtoken\";\n\n/**\n * The MSAL Access Token Key\n */\nexport const MSAL_ACCESSTOKEN_KEY = \"msal.accesstoken\";\n\n/**\n * Key to retrieve the locally stored url to redirect after authentication\n */\nexport const AAD_REPLYURL_SESSIONSTORAGE_KEY = \"aad.redirect.url\";\n\n/**\n * The MSAL Access Token Key\n */\nexport const MICROSOFT_AAD_TENANT_ID = \"72f988bf-86f1-41af-91ab-2d7cd011db47\";\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { ReactElement } from \"react\";\n\nimport { Redirect, Route } from \"react-router-dom\";\n\nimport { Spinner, SpinnerSize } from \"@fluentui/react\";\n\nimport { useAuth } from \"Authentication/AuthProvider\";\n\nimport { AAD_REPLYURL_SESSIONSTORAGE_KEY } from \"../Constants/AuthenticationConstants\";\n\n/**\n * Stores the current requested url.\n * Useful in redirecting user after authentication protocols are complete.\n * @method\n */\nexport const storeCurrentUrl = (): void => {\n  sessionStorage.setItem(AAD_REPLYURL_SESSIONSTORAGE_KEY, window.location.pathname);\n};\n\n/**\n * Function to store current url and redirect to Login component\n * @function\n */\nconst renderRedirect = (): ReactElement => {\n  storeCurrentUrl();\n\n  return <Redirect to=\"/login\" />;\n};\n\n/**\n * Wrapper for creating routes for authenticated components\n * If user is logged in, then the component is rendered, else redirected to Login.\n * @function\n */\nconst PrivateRoute = ({ component: Component, ...rest }): ReactElement => {\n  const { isUserLoggedIn, loading, hasAnyRoles } = useAuth();\n  return (\n    <Route\n      {...rest}\n      render={(props): ReactElement => {\n        if (!loading) {\n          if (!isUserLoggedIn) {\n            return renderRedirect();\n          } else if (!hasAnyRoles) {\n            return <Redirect to=\"/unauthorized\" />;\n          } else {\n            return <Component {...props} />;\n          }\n        }\n\n        return <Spinner size={SpinnerSize.large} />;\n      }}\n    />\n  );\n};\n\nexport default PrivateRoute;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport styled from \"styled-components\";\nimport { getTheme } from \"office-ui-fabric-react\";\n\nconst theme = getTheme();\n/**\n * Styled component that returns error message in red.\n */\nexport const RedText = styled.p`\n  color: ${theme.palette.red};\n  animation: fadein 1s;\n\n  @keyframes fadein {\n    from {\n      opacity: 0;\n    }\n    to {\n      opacity: 1;\n    }\n  }\n`;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { ErrorMessage } from \"formik\";\nimport React from \"react\";\nimport { IFormikErrorMessageProps } from \"./IFormikErrorMessageProps\";\nimport { RedText } from \"./FormikErrorMessage.styles\";\n\n/**\n * Formik Error Message.\n * @component\n * @returns {React.ReactElement<IFormikErrorMessagesProps>}\n */\nexport default function FormikErrorMessage(props: IFormikErrorMessageProps): React.ReactElement {\n  return (\n    <ErrorMessage\n      name={props.name}\n      render={(msg: string): React.ReactElement => (\n        <div role=\"alert\" aria-relevant=\"all\">\n          <RedText className=\"error\"> {msg} </RedText>\n        </div>\n      )}\n    />\n  );\n}\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport styled from \"styled-components\";\n\nimport {\n  getTheme,\n  FontSizes,\n  FontWeights,\n  ICommandBarStyles,\n  IDetailsListStyles,\n  ILabelStyles,\n  IMessageBarStyles,\n  IStackItemStyles,\n  IStackStyles,\n  IStackTokens,\n  ITextStyles,\n} from \"@fluentui/react\";\n\nconst theme = getTheme();\n\nexport const bodyContainerStackStyles = (): IStackStyles => {\n  return { root: { margin: \"1rem 1.5rem\", borderRadius: \" 0px 0px 8px 8px\" } };\n};\n\nexport const eventsAndActivityBodyContainerStackStyles = (): IStackStyles => {\n  return { root: { margin: \"1rem 1.5rem\", borderRadius: \" 0px 0px 8px 8px\", overflowX: \"scroll\" } };\n};\n\nexport const bodyContainerStackTokens = (): IStackTokens => {\n  return { childrenGap: \"1rem\" };\n};\n\nexport const labelStyles = (): ILabelStyles => {\n  return { root: { fontWeight: 600 } };\n};\n\nexport const headerStackStyles = (): IStackStyles => {\n  return { root: { backgroundColor: \"#5B5FC7\", borderRadius: \"8px 8px 0 0\" } };\n};\n\nexport const bodyRowStackStyles = (): IStackStyles => {\n  return { root: { display: \"flex\", justifyContent: \"space-between\" } };\n};\n\nexport const bodyColumnStackItemStyles = (): IStackItemStyles => {\n  return { root: { width: \"50%\" } };\n};\n\nexport const headerTextStyles = (): ITextStyles => {\n  return {\n    root: {\n      fontWeight: 600,\n      fontSize: FontSizes.size20,\n      padding: \"1rem 1.5rem\",\n      color: theme.palette.white,\n    },\n  };\n};\n\nexport const commandBarStyles: ICommandBarStyles = {\n  root: {\n    borderRadius: \"8px\",\n    boxShadow: \" 0px 1px 4px rgba(0, 0, 0, 0.2)\",\n    margin: \"1rem 0.5rem 1.5rem\",\n    padding: \"0.75rem\",\n    selectors: {\n      [\"button\"]: {\n        marginRight: \"36px\",\n      },\n      [\".ms-Button-label\"]: {\n        fontSize: \"14px\",\n        fontWeight: FontWeights.semibold,\n      },\n      [\"i[data-icon-name='Blocked']\"]: {\n        color: theme.palette.red,\n      },\n    },\n  },\n};\n\nexport const ContainerWrapper = styled.div`\n  background-color: ${theme.palette.white};\n  box-shadow: rgba(0, 0, 0, 0.2) 0px 1px 4px;\n  border-radius: 8px;\n  margin: 1rem 0.5rem 1.5rem;\n`;\n\nexport const DetailsListWrapper = styled.div`\n  padding: 1rem;\n  padding-top: 0;\n  padding-bottom: 0;\n`;\n\nexport const TableTextWrapper = styled.div`\n  font-size: 14px;\n  padding: 0 1rem 1rem 1.5rem;\n`;\n\nexport const detailsListStyles: Partial<IDetailsListStyles> = {\n  root: {\n    selectors: {\n      [\"div[role=row]\"]: {\n        paddingTop: \"0\",\n      },\n    },\n  },\n};\n\nexport const messageBarStyles: IMessageBarStyles = {\n  root: {\n    backgroundColor: theme.palette.white,\n  },\n  iconContainer: {\n    marginLeft: 0,\n  },\n  icon: {\n    color: theme.palette.themePrimary,\n  },\n  content: {\n    alignItems: \"center\",\n  },\n  text: { fontSize: FontSizes.size14 },\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React from \"react\";\n\nimport { FontIcon } from \"@fluentui/react\";\n\n/**\n * Arrow icon used to indicate \"next\" or \"back\".\n * @param {name} name icon name property.\n * @returns {React.ReactElement} FontIcon chevron arrow element.\n */\nconst ChevronIcon = (name: string): React.ReactElement => <FontIcon iconName={name} />;\n\nexport default ChevronIcon;\n","/*!\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n */\r\n\r\nimport styled from \"styled-components\";\r\n\r\n/**\r\n * Styled modal content container (div)\r\n */\r\nexport const PaginationRow = styled.div`\r\n  align-items: flex-end;\r\n  border-top: 1px solid #c4c4c4;\r\n  display: flex;\r\n  flex-direction: row;\r\n  justify-content: space-between;\r\n  padding: 23px;\r\n`;\r\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\n/**\n * This file is for all shared styles across\n * ApplicationsList, EventsList, and StudentList.\n */\n\nimport styled from \"styled-components\";\n\nimport {\n  getTheme,\n  mergeStyles,\n  FontSizes,\n  IButtonStyles,\n  IDetailsListStyles,\n  ISpinnerStyles,\n  IStackStyles,\n  ITextStyles,\n} from \"@fluentui/react\";\n\nconst theme = getTheme();\n\n/**\n * Styles used for Details List\n */\nexport const detailListStyles: Partial<IDetailsListStyles> = {\n  root: {\n    borderRadius: \"8px\",\n    height: \"100%\",\n    padding: \"23px\",\n    paddingTop: \"0\",\n  },\n};\n\n/**\n * Styles for the icon button used within the modal\n */\nexport const iconButtonStyles: IButtonStyles = {\n  root: {\n    color: theme.palette.neutralPrimary,\n    margin: \"0px 2px 20px auto\",\n  },\n  rootHovered: {\n    color: theme.palette.neutralDark,\n  },\n};\n\n/**\n * Styled modal content container (div)\n */\nexport const ModalContent = styled.div`\n  z-index: 1;\n  width: 100%;\n  margin-top: 1rem;\n  padding-right: 1rem;\n`;\n\n/**\n * Styled modal header component within detail\n */\nexport const ModalHeader = styled.div`\n  width: 100%;\n  display: flex;\n`;\n\n/**\n * Styles for header of the modal\n */\nexport const modalHeaderStyles: Partial<ITextStyles> = {\n  root: {\n    fontSize: FontSizes.xLarge,\n    flexGrow: 2,\n  },\n};\n\n/**\n * Styles for detail modal\n */\nexport const modalStyles = mergeStyles({\n  display: \"flex\",\n  flexFlow: \"column nowrap\",\n  alignItems: \"stretch\",\n  width: \"56.25rem\",\n  minHeight: 600,\n  maxHeight: \"80%\",\n  padding: \"24px\",\n  position: \"relative\",\n});\n\n/**\n * Styles used for loading spinner\n */\nexport const spinnerStyles: ISpinnerStyles = {\n  root: {\n    marginTop: 32,\n  },\n};\n\n/**\n * Styled span for ID column\n */\nexport const StyledSpan = styled.span`\n  color: #0078d7;\n  cursor: pointer;\n`;\n\nexport const highActivitiesEventsDetailsHeaderStyles: Partial<IDetailsListStyles> = {\n  root: {\n    [\".ms-DetailsHeader\"]: { \"padding-top\": 0 },\n  },\n};\n\nexport const filterButtonStyles: IStackStyles = {\n  root: {\n    marginTop: \"10px\",\n    display: \"block\",\n  },\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\n/**\n * The Operation status.\n */\nexport enum OperationStatus {\n  Idle = \"IDLE\",\n  Pending = \"PENDING\",\n  Succeeded = \"SUCCEEDED\",\n  Failed = \"FAILED\",\n}\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { OperationStatus } from \"Constants/OperationStatus\";\nimport { TenantTypesEnum } from \"Constants/TenantTypes\";\nimport { AppState } from \"Dataflows/Reducers\";\nimport { IDistributionGroupMember } from \"Interfaces/DistributionLists/IDistributionGroupMember\";\nimport { IDistributionListsJoinRequest } from \"Interfaces/DistributionLists/IDistributionListsJoinRequest\";\n\n/**\n * Returns current value from state for: distribution lists.\n * @param {AppState} state\n */\nexport const getDistributionLists = (state: AppState): IDistributionListsJoinRequest[] =>\n  state.distributionListsState.distributionLists;\n\n/**\n * Returns the current network operation status.\n * @param {AppState} state\n */\nexport const getNetworkOperationStatus = (state: AppState): OperationStatus =>\n  state.distributionListsState.networkOperationStatus;\n\n/**\n * Returns the current network operation status when approving or declining.\n * @param {AppState} state\n */\nexport const getNetworkOperationStatusApprove = (state: AppState): OperationStatus =>\n  state.distributionListsState.networkOperationStatusApprove;\n\n/**\n * Returns the current network operation status error.\n * @param {AppState} state\n */\nexport const getNetworkOperationStatusError = (state: AppState): string =>\n  state.distributionListsState.networkOperationError;\n\n/**\n * Returns the current network operation status error when approving.\n * @param {AppState} state\n */\nexport const getNetworkOperationStatusApproveError = (state: AppState): string =>\n  state.distributionListsState.networkOperationApproveError;\n\n/**\n * Returns current value from state for: currentPage.\n * @param {AppState} state\n */\nexport const getCurrentPage = (state: AppState): number => state.distributionListsState.currentPage;\n\n/**\n * Returns current value from state for: pageSize.\n * @param {AppState} state\n */\nexport const getPageSize = (state: AppState): number => state.distributionListsState.pageSize;\n\n/**\n * Returns current value from state for: currentTenant.\n * @param {AppState} state\n */\nexport const getCurrentTenant = (state: AppState): TenantTypesEnum | undefined =>\n  state.distributionListsState.currentTenant;\n\n/**\n * Returns current value from state for: filteredCount.\n * @param {AppState} state\n */\nexport const getFilteredCount = (state: AppState): number =>\n  state.distributionListsState.filteredCount;\n\n/**\n * Returns the list of distribution lists for a tenant.\n * @param {AppState} state\n */\nexport const getDistributionListsByTenant = (state: AppState): any =>\n  state.distributionListsState.distributionListsByTenant;\n\n/**\n * Returns the total number of DLs for that tenant.\n * @param {AppState} state\n * @returns {number} distributionListsByTenantCount\n */\nexport const getDistributionListsByTenantCount = (state: AppState): number =>\n  state.distributionListsState.distributionListsByTenantCount;\n\n/**\n * Returns distribution list that the user has selected.\n * @param {AppState} state\n * @returns\n */\nexport const getSelectedDistributionList = (state: AppState): any =>\n  state.distributionListsState.selectedDistributionList;\n\n/**\n * Returns the list of microsoft members for a distribution list.\n * @param {AppState} state\n * @returns {IDistributionGroupMember[]}\n */\nexport const getSelectedDistributionListMicrosoftMembers = (\n  state: AppState\n): IDistributionGroupMember[] =>\n  state.distributionListsState.selectedDistributionListMicrosoftMembers;\n\n/**\n * Returns the networl operation status when adding a member to a DL.\n * @param {AppState} state\n * @returns\n */\nexport const getNetworkOperationStatusAddMember = (state: AppState): OperationStatus =>\n  state.distributionListsState.networkOperationStatusAddMember;\n\n/**\n * Returns the networl operation status when removing a member from a DL.\n * @param {AppState} state\n * @returns\n */\nexport const getNetworkOperationStatusRemoveMember = (state: AppState): OperationStatus =>\n  state.distributionListsState.networkOperationStatusRemoveMember;\n\nexport const getAddMemberToDLErrorMessage = (state: AppState): string =>\n  state.distributionListsState.addMemberToDLErrorMessage;\n\nexport const getRemoveMemberFromDLErrorMessage = (state: AppState): string =>\n  state.distributionListsState.removeMemberFromDLErrorMessage;\n\nexport const getNetworkOperationStatusFetchMicrosoftMembers = (state: AppState): string =>\n  state.distributionListsState.networkOperationStatusFetchMicrosoftMembers;\n\nexport const getNetworkOperationStatusFetchByTenant = (state: AppState): string =>\n  state.distributionListsState.networkOperationStatusFetchByTenant;\n\nexport const getFetchDistributionListsByTenantError = (state: AppState): string =>\n  state.distributionListsState.fetchDistributionListsByTenantError;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { IDetailsListStyles } from \"@fluentui/react\";\n\nexport const detailListStyles: Partial<IDetailsListStyles> = {\n  root: {\n    borderRadius: \"8px\",\n    height: \"100%\",\n    padding: \"23px\",\n    paddingTop: \"0\",\n    border: \"1px solid #C8C8C8\",\n    marginBottom: \"1.5rem\",\n  },\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { useEffect, useState } from \"react\";\n\nimport { useSelector } from \"react-redux\";\n\nimport _union from \"lodash/union\";\nimport Pagination from \"rc-pagination\";\n\nimport {\n  DetailsList,\n  DetailsListLayoutMode,\n  Dropdown,\n  IColumn,\n  IDetailsRowProps,\n  SelectionMode,\n  Spinner,\n  SpinnerSize,\n  Stack,\n  Text,\n  TextField,\n} from \"@fluentui/react\";\n\nimport ChevronIcon from \"Components/Common/ChevronIcon/ChevronIcon\";\nimport { PaginationRow } from \"Components/Common/Pagination/Pagination.styles\";\nimport { spinnerStyles } from \"Components/Common/SharedListStyles.styles\";\nimport { OperationStatus } from \"Constants/OperationStatus\";\nimport {\n  getNetworkOperationStatusAddMember,\n  getNetworkOperationStatusFetchMicrosoftMembers,\n  getNetworkOperationStatusRemoveMember,\n  getSelectedDistributionListMicrosoftMembers,\n} from \"Dataflows/DistributionLists/DistributionListsSelector\";\nimport { IDistributionGroupMember } from \"Interfaces/DistributionLists/IDistributionGroupMember\";\n\nimport { IMicrosoftMembersListProps } from \"./IMicrosoftMembersListProps\";\nimport { detailListStyles } from \"./MicrosoftMembersList.styles\";\n\n/**\n * The Microsoft Members List Component.\n * @method\n * @returns {ReactElement} The Microsoft Members List component\n */\nconst MicrosoftMembersList = (props: IMicrosoftMembersListProps) => {\n  const microsoftMembers = useSelector(getSelectedDistributionListMicrosoftMembers);\n\n  const [members, setMembers] = useState(microsoftMembers);\n  const [currentPage, setCurrentPage] = useState(1);\n  const [pageSize, setPageSize] = useState(16);\n\n  const fetchingMembersOperationStatus = useSelector(\n    getNetworkOperationStatusFetchMicrosoftMembers\n  );\n  const addingMemberOperationStatus = useSelector(getNetworkOperationStatusAddMember);\n  const removingMemberOperationStatus = useSelector(getNetworkOperationStatusRemoveMember);\n\n  const { canRemoveUser, setIsAddingUser, setIsRemovingUser, setIsPanelOpen, setSelectedEmail } =\n    props;\n\n  useEffect((): any => {\n    if (addingMemberOperationStatus === OperationStatus.Succeeded) {\n      setIsPanelOpen(false);\n    }\n  }, [addingMemberOperationStatus]);\n\n  useEffect((): any => {\n    if (removingMemberOperationStatus === OperationStatus.Succeeded) {\n      setIsPanelOpen(false);\n    }\n  }, [removingMemberOperationStatus]);\n\n  useEffect(() => {\n    const page = currentPage - 1;\n    const startIndex = page * pageSize;\n    const endIndex = startIndex + pageSize;\n\n    setMembers(microsoftMembers.slice(startIndex, endIndex));\n\n    return (): void => {\n      setMembers([]);\n    };\n  }, [microsoftMembers, pageSize, currentPage]);\n\n  const columns: IColumn[] = [\n    {\n      key: \"displayName\",\n      name: \"Name\",\n      ariaLabel: \"Name\",\n      fieldName: \"displayName\",\n      minWidth: 240,\n      isResizable: true,\n    },\n    {\n      key: \"email\",\n      name: \"Email\",\n      ariaLabel: \"Email\",\n      fieldName: \"email\",\n      minWidth: 240,\n      isResizable: true,\n    },\n  ];\n\n  const handleClick = (email: string): void => {\n    if (canRemoveUser) {\n      setIsAddingUser(false);\n      setIsRemovingUser(true);\n      setSelectedEmail(email);\n      setIsPanelOpen(true);\n    }\n  };\n\n  const onRenderRow = (props?: IDetailsRowProps, defaultRender?: any): any => {\n    const selectedMicrosoftMember = props!.item as any;\n\n    return defaultRender!({\n      ...props,\n      item: selectedMicrosoftMember,\n      onClick: () => handleClick(selectedMicrosoftMember.email),\n    });\n  };\n\n  if (fetchingMembersOperationStatus === OperationStatus.Pending) {\n    return <Spinner size={SpinnerSize.large} styles={spinnerStyles} />;\n  }\n\n  if (microsoftMembers && microsoftMembers.length === 0) {\n    return <p>There are no microsoft members in this DL.</p>;\n  }\n\n  const onChangeText = (ev, text): void => {\n    const displayNameLookup = microsoftMembers.filter(\n      (x) => x.displayName.toLowerCase().indexOf(text.toLowerCase()) > -1\n    );\n\n    const emailLookup = microsoftMembers.filter(\n      (x) => x.email.toLowerCase().indexOf(text.toLowerCase()) > -1\n    );\n\n    let lookupResults = _union(displayNameLookup, emailLookup);\n\n    if (text.length === 0) {\n      lookupResults = microsoftMembers;\n    }\n\n    setMembers(lookupResults);\n  };\n\n  return (\n    <>\n      {/*\n          Hard coding style so that this can cherry-picked into the release branch, the PR that introduced the LabelStyle\n          is in a feature being developed this sprint and is not ready to be merged into the release branch.\n        */}\n      <Stack>\n        <Text styles={{ root: { fontWeight: 600 } }}>Total Count: {microsoftMembers.length}</Text>\n      </Stack>\n      <Stack styles={{ root: { fontWeight: 600 } }}>\n        <TextField label=\"Filter lookup: \" onChange={onChangeText} />\n      </Stack>\n      <br />\n      <Stack>\n        <DetailsList\n          items={members}\n          columns={columns}\n          selectionMode={SelectionMode.none}\n          getKey={(item: IDistributionGroupMember): string => `${item.email}`}\n          setKey=\"none\"\n          layoutMode={DetailsListLayoutMode.fixedColumns}\n          isHeaderVisible={true}\n          onRenderRow={onRenderRow}\n          enterModalSelectionOnTouch={true}\n          styles={detailListStyles}\n        />\n        <PaginationRow>\n          <Pagination\n            total={microsoftMembers.length}\n            onChange={(page): void => {\n              setCurrentPage(page);\n            }}\n            showTitle={false}\n            current={currentPage}\n            prevIcon={ChevronIcon(\"ChevronLeft\")}\n            nextIcon={ChevronIcon(\"ChevronRight\")}\n            pageSize={pageSize}\n            showSizeChanger\n          />\n          <Dropdown\n            options={[\n              { key: 16, text: \"Show 16 results\" },\n              { key: 32, text: \"Show 32 results\" },\n              { key: 48, text: \"Show 48 results\" },\n            ]}\n            onChange={(_e, op): void => {\n              setCurrentPage(1);\n              setPageSize(op?.key as number);\n            }}\n            selectedKey={pageSize}\n            className=\"pagination-dropdown\"\n            title=\"Page Size Dropdown\"\n          />\n        </PaginationRow>\n      </Stack>\n    </>\n  );\n};\n\nexport default MicrosoftMembersList;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { IButtonStyles, IMessageBarStyles, IPanelStyles, ITextStyles } from \"@fluentui/react\";\n\nexport const panelHeaderStyles: ITextStyles = {\n  root: {\n    fontWeight: \"600\",\n    fontSize: \"32px\",\n    lineHeight: \"40px\",\n    flexGrow: 1,\n    margin: \"24px\",\n  },\n};\n\nexport const buttonStyles: IButtonStyles = {\n  root: {\n    marginRight: 8,\n    width: \"120px\",\n    height: \"32px\",\n  },\n};\n\n//add margin top to the message bar\nexport const messageBarStyles: IMessageBarStyles = {\n  root: {\n    backgroundColor: \"white\",\n    color: \"#33333\",\n    marginBottom: \"1rem\",\n  },\n  icon: {\n    color: \"#ff0000\",\n  },\n};\n\nexport const panelContentStyles: Partial<IPanelStyles> = {\n  root: {\n    height: \"100%\",\n  },\n  content: {\n    height: \"100%\",\n  },\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React from \"react\";\n\nimport {\n  DefaultButton,\n  MessageBar,\n  MessageBarType,\n  Panel,\n  PanelType,\n  PrimaryButton,\n  Separator,\n  Text,\n} from \"@fluentui/react\";\n\nimport {\n  buttonStyles,\n  messageBarStyles,\n  panelContentStyles,\n  panelHeaderStyles,\n} from \"./SidePanel.styles\";\nimport { ISidePanelProps } from \"./SidePanelProps\";\n\nexport const SidePanel = (props: ISidePanelProps): React.ReactElement => {\n  const {\n    isOpen,\n    title,\n    saveButtonLabel,\n    cancelButtonLabel,\n    error,\n    disableActions,\n    hideFooter,\n    onDismiss,\n    onSave,\n    onCancel,\n  } = props;\n\n  const onRenderHeaderContent = (): JSX.Element => <Text styles={panelHeaderStyles}>{title}</Text>;\n\n  const onRenderFooterContent = (): JSX.Element => (\n    <>\n      {!!error ? (\n        <MessageBar messageBarType={MessageBarType.warning} styles={messageBarStyles}>\n          {error}\n        </MessageBar>\n      ) : null}\n      <div>\n        <Separator />\n        {!!onSave && (\n          <PrimaryButton\n            onClick={onSave}\n            styles={buttonStyles}\n            disabled={disableActions}\n            type=\"submit\"\n          >\n            {!!saveButtonLabel ? saveButtonLabel : \"Save\"}\n          </PrimaryButton>\n        )}\n        <DefaultButton\n          onClick={onCancel ?? onDismiss}\n          styles={buttonStyles}\n          disabled={disableActions}\n        >\n          {!!cancelButtonLabel ? cancelButtonLabel : \"Cancel\"}\n        </DefaultButton>\n      </div>\n    </>\n  );\n\n  return (\n    <>\n      <Panel\n        isOpen={isOpen}\n        onDismiss={onDismiss}\n        type={PanelType.medium}\n        closeButtonAriaLabel=\"Close\"\n        onRenderHeader={onRenderHeaderContent}\n        onRenderFooterContent={!hideFooter ? onRenderFooterContent : undefined}\n        isFooterAtBottom={true}\n        styles={panelContentStyles}\n      >\n        {props.children}\n      </Panel>\n    </>\n  );\n};\n","/**\n * The Window property screen returns a reference to the screen object associated with the window.\n */\n\nimport { IBasePickerSuggestionsProps } from \"@fluentui/react\";\n\n/**\n * The suggestion props for the NormalPeoplePicker.\n */\nexport const peoplePickerSuggestionProps: IBasePickerSuggestionsProps = {\n  suggestionsHeaderText: \"Suggested People\",\n  mostRecentlyUsedHeaderText: \"Suggested Contacts\",\n  noResultsFoundText: \"No results found\",\n  loadingText: \"Loading\",\n  showRemoveButtons: true,\n  suggestionsAvailableAlertText: \"People Picker Suggestions available\",\n  suggestionsContainerAriaLabel: \"Suggested contacts\",\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nexport const MICROSOFT_DOMAIN_REGEX = new RegExp(\"[a-z0-9_@./#&+-]+@microsoft.com\");\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\n/**\n * The Roles enum\n */\nexport enum RolesEnum {\n  MVP_PROGRAM_OWNER = \"mvp-program-owner\",\n  MVP_REVIEWER = \"mvp-reviewer\", // Renamed to Community Manager / Community Program Manager\n  MVP_TECH_AREA_VALIDATOR = \"mvp-tech-area-validator\", // Renamed to Product Group Partner\n  MVP_BENEFITS_MANAGER = \"mvp-benefits-manager\",\n  MVP_BUSINESS_GROUP = \"mvp-business-group\",\n  MVP_EXECUTIVE = \"mvp-executive\",\n  MSA_PROGRAM_OWNER = \"msa-program-owner\",\n  MSA_REVIEWER = \"msa-reviewer\",\n  MSA_BENEFITS_MANAGER = \"msa-benefits-manager\",\n  MSA_GUEST = \"msa-guest\",\n  RD_PROGRAM_OWNER = \"rd-program-owner\",\n  RD_REVIEWER = \"rd-reviewer\",\n  RD_GUEST = \"rd-guest\",\n  RD_BENEFITS_MANAGER = \"rd-benefits-manager\",\n}\n\n/**\n * The Permissions enum\n */\nexport enum PermissionsEnum {\n  MVP_VIEW_USERS = \"mvp-view-users\",\n  MVP_UPDATE_USERS = \"mvp-update-users\",\n  MVP_VIEW_APPLICATIONS = \"mvp-view-applications\",\n  MVP_SCORE_APPLICATIONS = \"mvp-score-applications\",\n  MVP_VIEW_BENEFITS = \"mvp-view-benefits\",\n  MVP_UPDATE_BENEFITS = \"mvp-update-benefits\",\n  MVP_VIEW_ACCESS_CONTROL = \"mvp-view-access-control\",\n  MVP_UPDATE_ACCESS_CONTROL = \"mvp-update-access-control\",\n  MVP_VIEW_DISTRIBUTIONS_LIST = \"mvp-view-distributions-list\",\n  MVP_UPDATE_DISTRIBUTIONS_LIST = \"mvp-update-distributions-list\",\n  MVP_DOWNLOAD_APPLICATIONS = \"mvp-download-applications\",\n  MVP_VIEW_DEMOGRAPHICS = \"mvp-view-demographics\",\n  MVP_FLAG_APPLICATION = \"mvp-flag-application\",\n  MVP_MANAGE_APPLICATION = \"mvp-manage-application\",\n  MVP_MANUALLY_ASSIGN_APPLICATION = \"mvp-manually-assign-application\",\n  MVP_UPDATE_PRIMARY_EMAIL = \"mvp-update-primary-email\",\n  MSA_VIEW_USERS = \"msa-view-users\",\n  MSA_UPDATE_USERS = \"msa-update-users\",\n  MSA_VIEW_EVENTS = \"msa-view-events\",\n  MSA_REVIEW_EVENTS = \"msa-review-events\",\n  MSA_VIEW_APPLICATIONS = \"msa-view-applications\",\n  MSA_SCORE_APPLICATIONS = \"msa-score-applications\",\n  MSA_REVIEW_APPLICATIONS = \"msa-review-applications\",\n  MSA_ASSIGN_OWNER = \"msa-assign-owner\",\n  MSA_UPDATE_OWNER = \"msa-update-owner\",\n  MSA_ASSIGN_REVIEWER = \"msa-assign-reviewer\",\n  MSA_UPDATE_REVIEWER = \"msa-update-reviewer\",\n  MSA_ASSIGN_GUEST = \"msa-assign-guest\",\n  MSA_UPDATE_GUEST = \"msa-update-guest\",\n  MSA_MANUALLY_ASSIGN_APPLICATIONS = \"msa-manually-assign-applications\",\n  MSA_VIEW_BENEFITS = \"msa-view-benefits\",\n  MSA_UPDATE_BENEFITS = \"msa-update-benefits\",\n  MSA_VIEW_ACCESS_CONTROL = \"msa-view-access-control\",\n  MSA_UPDATE_ACCESS_CONTROL = \"msa-update-access-control\",\n  RD_VIEW_USERS = \"rd-view-users\",\n  RD_UPDATE_USERS = \"rd-update-users\",\n  RD_VIEW_EVENTS = \"rd-view-events\",\n  RD_REVIEW_EVENTS = \"rd-review-events\",\n  RD_VIEW_APPLICATIONS = \"rd-view-applications\",\n  RD_SCORE_APPLICATIONS = \"rd-score-applications\",\n  RD_REVIEW_APPLICATIONS = \"rd-review-applications\",\n  RD_ASSIGN_OWNER = \"rd-assign-owner\",\n  RD_UPDATE_OWNER = \"rd-update-owner\",\n  RD_ASSIGN_REVIEWER = \"rd-assign-reviewer\",\n  RD_UPDATE_REVIEWER = \"rd-update-reviewer\",\n  RD_ASSIGN_GUEST = \"rd-assign-guest\",\n  RD_UPDATE_GUEST = \"rd-update-guest\",\n  RD_MANUALLY_ASSIGN_APPLICATIONS = \"rd-manually-assign-applications\",\n  RD_VIEW_BENEFITS = \"rd-view-benefits\",\n  RD_UPDATE_BENEFITS = \"rd-update-benefits\",\n  RD_VIEW_ACCESS_CONTROL = \"rd-view-access-control\",\n  RD_UPDATE_ACCESS_CONTROL = \"rd-update-access-control\",\n  RD_VIEW_DISTRIBUTIONS_LIST = \"rd-view-distributions-list\",\n  RD_UPDATE_DISTRIBUTIONS_LIST = \"rd-update-distributions-list\",\n  RD_UPDATE_PRIMARY_EMAIL = \"rd-update-primary-email\",\n}\n\nexport enum RoleNamesEnum {\n  PROGRAM_OWNER = \"Program Owner\",\n  COMMUNITY_MANAGER = \"Community Manager\",\n  PRODUCT_GROUP_PARTNER = \"Product Group Partner\",\n  GUEST = \"Guest\",\n  BENEFITS_MANAGER = \"Benefits Manager\",\n  EXECUTIVE = \"Executive\",\n  BUSINESS_GROUP = \"Business Group\",\n}\n\nexport enum ApplicationReviewStatusesEnum {\n  PG_REVIEW = \"PG-Review\",\n  CPM_REVIEW = \"CPM-Review\",\n  BG_FINAL_REVIEW = \"BG-Final-Review\",\n}\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\n/**\n * The TenantTypes enum.\n */\nexport enum TenantTypesEnum {\n  /**\n   * Tenant Type enum: MSP\n   */\n  MSP = \"MSP\",\n\n  /**\n   * Tenant Type enum: MLSA\n   */\n  MLSA = \"MLSA\",\n\n  /**\n   * Tenant Type enum: MVP\n   */\n  MVP = \"MVP\",\n\n  /**\n   * Tenant Type enum: RD\n   */\n  RD = \"RD\",\n}\n\n/**\n * Sub site url root tenant paths\n */\nexport const SubSiteUrlRootPath = {\n  mlsa: TenantTypesEnum.MLSA,\n  rd: TenantTypesEnum.RD,\n  mvp: TenantTypesEnum.MVP,\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { getTheme, FontSizes, IStackStyles, IStackTokens, ITextStyles } from \"@fluentui/react\";\n\nconst theme = getTheme();\n\n/**\n * Styling for the wrapper stack\n */\nexport const wrapperStackStyles = (): IStackStyles => {\n  return {\n    root: {\n      padding: \"0 3.25rem 0 1.25rem\",\n    },\n  };\n};\n\n/**\n * Styling for the name info stack\n */\nexport const nameInfoStackStyles = (): IStackStyles => {\n  return {\n    root: {\n      padding: \"1.5rem\",\n      backgroundColor: theme.palette.white,\n      borderRadius: \"0.5rem\",\n    },\n  };\n};\n\n/**\n * Styling for the name text\n */\nexport const nameTextStyles = (): ITextStyles => {\n  return { root: { fontSize: FontSizes.size20, fontWeight: 600 } };\n};\n\n/**\n * Styling for the name text\n */\nexport const isCompetitorTextStyles = (): ITextStyles => {\n  return { root: { fontSize: FontSizes.size20, fontWeight: 600, color: \"red\" } };\n};\n\n/**\n * Styling for the email text\n */\nexport const emailTextStyles = (): ITextStyles => {\n  return { root: { fontSize: FontSizes.size16, fontWeight: 400 } };\n};\n\n/**\n * Styling for the private profile text\n */\nexport const privateProfileTextStyles = (): ITextStyles => {\n  return {\n    root: {\n      fontSize: FontSizes.size16,\n      lineHeight: \"1.375 rem\",\n      fontWeight: 600,\n      color: \"#FF0000\",\n    },\n  };\n};\n\n/**\n * Styling for the container stack\n */\nexport const containerStackTokens = (): IStackTokens => {\n  return {\n    childrenGap: 36,\n  };\n};\n\n/**\n * Styling for the content stacks\n */\nexport const contentStackTokens = (): IStackTokens => {\n  return { childrenGap: 24, padding: \"0.5rem 0 0 0\" };\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { TenantTypesEnum } from \"Constants/TenantTypes\";\nimport { IDistributionGroupMember } from \"Interfaces/DistributionLists/IDistributionGroupMember\";\nimport { IDistributionListsJoinRequest } from \"Interfaces/DistributionLists/IDistributionListsJoinRequest\";\n\nimport {\n  ADD_MICROSOFT_MEMBER_TO_DL,\n  ADD_MICROSOFT_MEMBER_TO_DL_FAIL,\n  ADD_MICROSOFT_MEMBER_TO_DL_SUCCESS,\n  APPROVE_OR_DECLINE_DISTRIBUTION_LIST_JOIN_REQUEST,\n  APPROVE_OR_DECLINE_DISTRIBUTION_LIST_JOIN_REQUEST_FAIL,\n  APPROVE_OR_DECLINE_DISTRIBUTION_LIST_JOIN_REQUEST_SUCCESS,\n  DISTRIBUTION_LISTS_RESET,\n  DISTRIBUTION_LISTS_SEARCH,\n  DISTRIBUTION_LISTS_SEARCH_FAIL,\n  DISTRIBUTION_LISTS_SEARCH_SUCCESS,\n  FETCH_DISTRIBUTION_LISTS_BY_TENANT_REQUEST,\n  FETCH_DISTRIBUTION_LISTS_BY_TENANT_REQUEST_FAIL,\n  FETCH_DISTRIBUTION_LISTS_BY_TENANT_REQUEST_SUCCESS,\n  FETCH_MICROSOFT_MEMBERS_FOR_DL,\n  FETCH_MICROSOFT_MEMBERS_FOR_DL_FAIL,\n  FETCH_MICROSOFT_MEMBERS_FOR_DL_SUCCESS,\n  MICROSOFT_MEMBER_DL_RESET,\n  REMOVE_MICROSOFT_MEMBER_FROM_DL,\n  REMOVE_MICROSOFT_MEMBER_FROM_DL_FAIL,\n  REMOVE_MICROSOFT_MEMBER_FROM_DL_SUCCESS,\n  UPDATE_DISTRIBUTION_LISTS_LISTING_CURRENT_PAGE,\n  UPDATE_DISTRIBUTION_LISTS_LISTING_PAGE_SIZE,\n  UPDATE_SELECTED_DISTRIBUTION_LIST,\n} from \"./DistributionListsActionTypes\";\n\n/**\n * Action for when searching distribution list.\n * @interface\n */\nexport interface ISearchDistributionLists {\n  type: typeof DISTRIBUTION_LISTS_SEARCH;\n  tenant: TenantTypesEnum;\n  searchPage: number;\n  pageSize: number;\n}\n\n/**\n * Action for when distribution lists were searched successfully.\n * @interface\n */\nexport interface ISearchDistributionListsSuccess {\n  type: typeof DISTRIBUTION_LISTS_SEARCH_SUCCESS;\n  distributionLists: IDistributionListsJoinRequest[];\n  searchPage: number;\n  pageSize: number;\n  filteredCount: number;\n}\n\n/**\n * Action for when loading distribution lists failed.\n * @interface\n */\nexport interface ISearchDistributionListsFail {\n  type: typeof DISTRIBUTION_LISTS_SEARCH_FAIL;\n  error: string;\n}\n\n/**\n * Action for resetting distribution lists failed.\n * @interface\n */\nexport interface IResetDistributionLists {\n  type: typeof DISTRIBUTION_LISTS_RESET;\n}\n\n/**\n * Action for when updating listing current page\n * @interface\n */\nexport interface IUpdateCurrentPage {\n  type: typeof UPDATE_DISTRIBUTION_LISTS_LISTING_CURRENT_PAGE;\n  currentPage: number;\n}\n\n/**\n * Action for when updating listing page size\n * @interface\n */\nexport interface IUpdatePageSize {\n  type: typeof UPDATE_DISTRIBUTION_LISTS_LISTING_PAGE_SIZE;\n  pageSize: number;\n}\n\n/**\n * Action for when the dl join request is approved or declined.\n * @interface\n */\nexport interface IApproveOrDeclineJoinRequest {\n  type: typeof APPROVE_OR_DECLINE_DISTRIBUTION_LIST_JOIN_REQUEST;\n  requestId: number;\n  tenant: string;\n  reviewAction: string;\n}\n\n/**\n * Action for when the dl join request approve or decline succeed.\n */\nexport interface IApproveOrDeclineJoinRequestSuccess {\n  type: typeof APPROVE_OR_DECLINE_DISTRIBUTION_LIST_JOIN_REQUEST_SUCCESS;\n}\n\n/**\n * Action for when the dl join request approve or decline fail.\n */\nexport interface IApproveOrDeclineJoinRequestFail {\n  type: typeof APPROVE_OR_DECLINE_DISTRIBUTION_LIST_JOIN_REQUEST_FAIL;\n  error: string;\n}\n\n/**\n * Action for fetching a list of DLs by tenant.\n * @interface\n */\nexport interface IFetchDistributionListByTenantRequest {\n  type: typeof FETCH_DISTRIBUTION_LISTS_BY_TENANT_REQUEST;\n  tenant: string;\n  pageSize: number;\n  pageNumber: number;\n}\n\n/**\n * Action for when fetching a list of DLs by tenant is successful.\n * @interface\n */\nexport interface IFetchDistributionListByTenantRequestSuccess {\n  type: typeof FETCH_DISTRIBUTION_LISTS_BY_TENANT_REQUEST_SUCCESS;\n  distributionListsByTenant: any;\n  count: number;\n}\n\n/**\n * Action for when fetching a list of DLs by tenant fails.\n * @interface\n */\nexport interface IFetchDistributionListByTenantRequestFail {\n  type: typeof FETCH_DISTRIBUTION_LISTS_BY_TENANT_REQUEST_FAIL;\n  errorMessage: string;\n}\n\n/**\n * Action for fetching the microsoft members of a DL.\n * @interface\n */\nexport interface IFetchMicrosoftMembersForDLRequest {\n  type: typeof FETCH_MICROSOFT_MEMBERS_FOR_DL;\n  tenant: string;\n  dlAlias: string;\n}\n\n/**\n * Action for when fetching the microsoft members of a DL\n * is successful.\n * @interface\n */\nexport interface IFetchMicrosoftMembersForDLRequestSuccess {\n  type: typeof FETCH_MICROSOFT_MEMBERS_FOR_DL_SUCCESS;\n  microsoftMembers: IDistributionGroupMember[];\n}\n\n/**\n * Action for when fetching the microsoft members of a DL fails.\n * @interface\n */\nexport interface IFetchMicrosoftMembersForDLRequestFail {\n  type: typeof FETCH_MICROSOFT_MEMBERS_FOR_DL_FAIL;\n  errorMessage: string;\n}\n\n/**\n * Action for updating the user's selected\n * distribution list.\n * @interface\n */\nexport interface IUpdateSelectedDistributionList {\n  type: typeof UPDATE_SELECTED_DISTRIBUTION_LIST;\n  distributionListEmail: string;\n}\n\n/**\n * Action for adding a microsoft member to a DL.\n * @interface\n */\nexport interface IAddMicrosoftMemberToDLRequest {\n  type: typeof ADD_MICROSOFT_MEMBER_TO_DL;\n  tenant: string;\n  dlAlias: string;\n  displayName: string;\n  email: string;\n  firstName: string;\n  lastName: string;\n}\n\n/**\n * Action for when adding a microsoft member to a DL fails.\n * @interface\n */\nexport interface IAddMicrosoftMemberToDLRequestFail {\n  type: typeof ADD_MICROSOFT_MEMBER_TO_DL_FAIL;\n  errorMessage: string;\n}\n\n/**\n * Action for when adding a microsoft member to a DL succeeds.\n * @interface\n */\nexport interface IAddMicrosoftMemberToDLRequestSuccess {\n  type: typeof ADD_MICROSOFT_MEMBER_TO_DL_SUCCESS;\n}\n\n/**\n * Action for removing a microsoft member from a DL.\n * @interface\n */\nexport interface IRemoveMicrosoftMemberFromDLRequest {\n  type: typeof REMOVE_MICROSOFT_MEMBER_FROM_DL;\n  tenant: string;\n  dlAlias: string;\n  memberEmail: string;\n}\n\n/**\n * Action for when removing a microsoft member from a DL fails.\n * @interface\n */\nexport interface IRemoveMicrosoftMemberFromDLRequestFail {\n  type: typeof REMOVE_MICROSOFT_MEMBER_FROM_DL_FAIL;\n  errorMessage: string;\n}\n\n/**\n * Action for when removing a microsoft member from a DL succeeds.\n * @interface\n */\nexport interface IRemoveMicrosoftMemberFromDLRequestSuccess {\n  type: typeof REMOVE_MICROSOFT_MEMBER_FROM_DL_SUCCESS;\n}\n\n/**\n * Action for resetting the state for adding/removing Microsoft\n * members to/from distribution lists.\n * @interface\n */\nexport interface IResetMicrosoftMemberDLs {\n  type: typeof MICROSOFT_MEMBER_DL_RESET;\n}\n\n/**\n * Action: updating a user's blocked shipping status\n * @interface\n */\nexport interface IFetchMicrosoftMembersDlSuccess {\n  type: typeof FETCH_MICROSOFT_MEMBERS_FOR_DL_SUCCESS;\n  microsoftMembers: IDistributionGroupMember[];\n}\n\n/**\n * Action creator for DISTRIBUTION_LIST_SEARCH.\n */\nexport function searchDistributionLists(\n  tenant: TenantTypesEnum,\n  searchPage: number,\n  pageSize: number\n): DistributionListsActionTypes {\n  return {\n    type: DISTRIBUTION_LISTS_SEARCH,\n    tenant,\n    searchPage,\n    pageSize,\n  };\n}\n\n/**\n * Action creator for DISTRIBUTION_LIST_SEARCH_SUCCESS.\n * @param distributionList the distribution list request successfully searched.\n */\nexport function searchDistributionListsSuccess(\n  distributionLists: IDistributionListsJoinRequest[],\n  searchPage: number,\n  pageSize: number,\n  filteredCount: number\n): DistributionListsActionTypes {\n  return {\n    type: DISTRIBUTION_LISTS_SEARCH_SUCCESS,\n    distributionLists,\n    searchPage,\n    pageSize,\n    filteredCount,\n  };\n}\n\n/**\n * Action creator for DISTRIBUTION_LIST_SEARCH_FAIL.\n * @param error the error message from the API.\n */\nexport function searchDistributionListsFail(error: string): DistributionListsActionTypes {\n  return {\n    type: DISTRIBUTION_LISTS_SEARCH_FAIL,\n    error,\n  };\n}\n\n/**\n * Action creator for DISTRIBUTION_LISTS_RESET.\n * @returns\n */\nexport function resetDistributionLists(): DistributionListsActionTypes {\n  return {\n    type: DISTRIBUTION_LISTS_RESET,\n  };\n}\n\n/**\n * Action creator for UPDATE_DISTRIBUTION_LIST_LISTING_CURRENT_PAGE.\n */\nexport function updateCurrentPage(currentPage: number): DistributionListsActionTypes {\n  return {\n    type: UPDATE_DISTRIBUTION_LISTS_LISTING_CURRENT_PAGE,\n    currentPage,\n  };\n}\n\n/**\n * Action creator for UPDATE_DISTRIBUTION_LIST_LISTING_PAGE_SIZE.\n */\nexport function updatePageSize(pageSize: number): DistributionListsActionTypes {\n  return {\n    type: UPDATE_DISTRIBUTION_LISTS_LISTING_PAGE_SIZE,\n    pageSize,\n  };\n}\n\n/**\n * Action creator for APPROVE_OR_DECLINE_DISTRIBUTION_LIST_JOIN_REQUEST.\n */\nexport function approveOrDeclineJoinRequest(\n  requestId: number,\n  tenant: string,\n  approved: boolean\n): DistributionListsActionTypes {\n  return {\n    type: APPROVE_OR_DECLINE_DISTRIBUTION_LIST_JOIN_REQUEST,\n    requestId,\n    tenant,\n    reviewAction: approved ? \"Approved\" : \"Declined\",\n  };\n}\n\n/**\n * Action creator for APPROVE_OR_DECLINE_DISTRIBUTION_LIST_JOIN_REQUEST_SUCCESS.\n */\nexport function approveOrDeclineJoinRequestSuccess(): DistributionListsActionTypes {\n  return {\n    type: APPROVE_OR_DECLINE_DISTRIBUTION_LIST_JOIN_REQUEST_SUCCESS,\n  };\n}\n\n/**\n * Action creator for APPROVE_DISTRIBUTION_LIST_JOIN_REQUEST_FAIL.\n * @param error the error message from the API.\n */\nexport function approveOrDeclineJoinRequestFail(error: string): DistributionListsActionTypes {\n  return {\n    type: APPROVE_OR_DECLINE_DISTRIBUTION_LIST_JOIN_REQUEST_FAIL,\n    error,\n  };\n}\n\n/**\n * Action creator for FETCH_DISTRIBUTION_LISTS_BY_TENANT_REQUEST.\n * @param tenant tenant\n * @param pageSize page size\n * @param pageNumber page number\n */\nexport function fetchDistributionListsByTenant(\n  tenant: string,\n  pageSize: number,\n  pageNumber: number\n): DistributionListsActionTypes {\n  return {\n    type: FETCH_DISTRIBUTION_LISTS_BY_TENANT_REQUEST,\n    tenant,\n    pageSize,\n    pageNumber,\n  };\n}\n\n/**\n * Action creator for FETCH_DISTRIBUTION_LISTS_BY_TENANT_REQUEST_SUCCESS.\n * @param distributionListsByTenant all DLs for a given tenant\n * @param count total number of DLs in that list returned\n */\nexport function fetchDistributionListsByTenantSuccess(\n  distributionListsByTenant: any,\n  count: number\n): DistributionListsActionTypes {\n  return {\n    type: FETCH_DISTRIBUTION_LISTS_BY_TENANT_REQUEST_SUCCESS,\n    distributionListsByTenant,\n    count,\n  };\n}\n\n/**\n * Action creator for FETCH_DISTRIBUTION_LISTS_BY_TENANT_REQUEST_FAIL.\n * @param errorMessage error message\n */\nexport function fetchDistributionListsByTenantFail(\n  errorMessage: string\n): DistributionListsActionTypes {\n  return {\n    type: FETCH_DISTRIBUTION_LISTS_BY_TENANT_REQUEST_FAIL,\n    errorMessage,\n  };\n}\n\n/**\n * Action creator for UPDATE_SELECTED_DISTRIBUTION_LIST.\n * @param distributionListEmail the distribution list email\n */\nexport function updateSelectedDistributionList(\n  distributionListEmail: string\n): DistributionListsActionTypes {\n  return {\n    type: UPDATE_SELECTED_DISTRIBUTION_LIST,\n    distributionListEmail,\n  };\n}\n\n/**\n * Action creator for FETCH_MICROSOFT_MEMBERS_FOR_DL.\n * @param tenant tenant name\n * @param dlAlias the distribution list email\n */\nexport function fetchMicrosoftMembersForDL(tenant: string, dlAlias: string) {\n  return {\n    type: FETCH_MICROSOFT_MEMBERS_FOR_DL,\n    tenant,\n    dlAlias,\n  };\n}\n\n/**\n * Action creator for FETCH_MICROSOFT_MEMBERS_FOR_DL_FAIL.\n * @param errorMessage error message\n */\nexport function fetchMicrosoftMembersForDLFail(errorMessage: string) {\n  return {\n    type: FETCH_MICROSOFT_MEMBERS_FOR_DL_FAIL,\n    errorMessage,\n  };\n}\n\n/**\n * Action creator for FETCH_MICROSOFT_MEMBERS_FOR_DL_SUCCESS.\n * @param {IDistributionGroupMember[]} microsoftMembers list of microsoft members in that DL\n * @returns {IFetchMicrosoftMembersDlSuccess} microsoft members\n */\nexport function fetchMicrosoftMembersForDLSuccess(\n  microsoftMembers: IDistributionGroupMember[]\n): IFetchMicrosoftMembersDlSuccess {\n  return {\n    type: FETCH_MICROSOFT_MEMBERS_FOR_DL_SUCCESS,\n    microsoftMembers,\n  };\n}\n\n/**\n * Action creator for ADD_MICROSOFT_MEMBER_TO_DL.\n * @param tenant tenant name\n * @param dlAlias distribution list email\n * @param email the user's email\n * @param displayName the user's display name (first and last name)\n */\nexport function addMicrosoftMemberToDL(\n  tenant: string,\n  dlAlias: string,\n  email: string,\n  displayName: string,\n  firstName: string,\n  lastName: string\n) {\n  return {\n    type: ADD_MICROSOFT_MEMBER_TO_DL,\n    tenant,\n    dlAlias,\n    email,\n    displayName,\n    firstName,\n    lastName,\n  };\n}\n\n/**\n * Action creator for ADD_MICROSOFT_MEMBER_TO_DL_FAIL.\n * @param errorMessage error message\n */\nexport function addMicrosoftMemberToDLFail(errorMessage: string) {\n  return {\n    type: ADD_MICROSOFT_MEMBER_TO_DL_FAIL,\n    errorMessage,\n  };\n}\n\n/**\n * Action creator for ADD_MICROSOFT_MEMBER_TO_DL_SUCCESS.\n */\nexport function addMicrosoftMemberToDLSuccess() {\n  return {\n    type: ADD_MICROSOFT_MEMBER_TO_DL_SUCCESS,\n  };\n}\n\n/**\n * Action creator for REMOVE_MICROSOFT_MEMBER_FROM_DL.\n * @param tenant tenant name\n * @param dlAlias distribution list email\n * @param memberEmail the user's microsoft email\n */\nexport function removeMicrosoftMemberFromDL(tenant: string, dlAlias: string, memberEmail: string) {\n  return {\n    type: REMOVE_MICROSOFT_MEMBER_FROM_DL,\n    tenant,\n    dlAlias,\n    memberEmail,\n  };\n}\n\n/**\n * Action creator for REMOVE_MICROSOFT_MEMBER_FROM_DL_FAIL\n * @param errorMessage error message\n */\nexport function removeMicrosoftMemberFromDLFail(errorMessage: string) {\n  return {\n    type: REMOVE_MICROSOFT_MEMBER_FROM_DL_FAIL,\n    errorMessage,\n  };\n}\n\n/**\n * Action creator for REMOVE_MICROSOFT_MEMBER_FROM_DL_SUCCESS\n */\nexport function removeMicrosoftMemberFromDLSuccess() {\n  return {\n    type: REMOVE_MICROSOFT_MEMBER_FROM_DL_SUCCESS,\n  };\n}\n\n/**\n * Action creator for REMOVE_MICROSOFT_MEMBER_FROM_DL_SUCCESS\n */\nexport function resetMicrosoftMemberDLs() {\n  return {\n    type: MICROSOFT_MEMBER_DL_RESET,\n  };\n}\n\nexport type DistributionListsActionTypes =\n  | ISearchDistributionLists\n  | ISearchDistributionListsSuccess\n  | ISearchDistributionListsFail\n  | IResetDistributionLists\n  | IUpdateCurrentPage\n  | IUpdatePageSize\n  | IApproveOrDeclineJoinRequest\n  | IApproveOrDeclineJoinRequestSuccess\n  | IApproveOrDeclineJoinRequestFail\n  | IFetchDistributionListByTenantRequest\n  | IFetchDistributionListByTenantRequestFail\n  | IFetchDistributionListByTenantRequestSuccess\n  | IUpdateSelectedDistributionList\n  | IFetchMicrosoftMembersForDLRequest\n  | IFetchMicrosoftMembersForDLRequestFail\n  | IFetchMicrosoftMembersForDLRequestSuccess\n  | IAddMicrosoftMemberToDLRequest\n  | IAddMicrosoftMemberToDLRequestFail\n  | IAddMicrosoftMemberToDLRequestSuccess\n  | IRemoveMicrosoftMemberFromDLRequest\n  | IRemoveMicrosoftMemberFromDLRequestFail\n  | IRemoveMicrosoftMemberFromDLRequestSuccess\n  | IResetMicrosoftMemberDLs;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\n// NOTE: Distribution list search is for pending requests, not all DLs per tenant\nexport const DISTRIBUTION_LISTS_SEARCH = \"DISTRIBUTION_LISTS_SEARCH\";\nexport const DISTRIBUTION_LISTS_SEARCH_SUCCESS = \"DISTRIBUTION_LISTS_SEARCH_SUCCESS\";\nexport const DISTRIBUTION_LISTS_SEARCH_FAIL = \"DISTRIBUTION_LISTS_SEARCH_FAIL\";\n\nexport const DISTRIBUTION_LISTS_RESET = \"DISTRIBUTION_LISTS_RESET\";\n\nexport const UPDATE_DISTRIBUTION_LISTS_LISTING_CURRENT_PAGE =\n  \"UPDATE_DISTRIBUTION_LISTS_LISTING_CURRENT_PAGE\";\nexport const UPDATE_DISTRIBUTION_LISTS_LISTING_PAGE_SIZE =\n  \"UPDATE_DISTRIBUTION_LISTS_LISTING_PAGE_SIZE\";\n\nexport const APPROVE_OR_DECLINE_DISTRIBUTION_LIST_JOIN_REQUEST =\n  \"APPROVE_OR_DECLINE_DISTRIBUTION_LIST_JOIN_REQUEST\";\nexport const APPROVE_OR_DECLINE_DISTRIBUTION_LIST_JOIN_REQUEST_SUCCESS =\n  \"APPROVE_OR_DECLINE_DISTRIBUTION_LIST_JOIN_REQUEST_SUCCESS \";\nexport const APPROVE_OR_DECLINE_DISTRIBUTION_LIST_JOIN_REQUEST_FAIL =\n  \"APPROVE_OR_DECLINE_DISTRIBUTION_LIST_JOIN_REQUEST_FAIL\";\n\nexport const FETCH_DISTRIBUTION_LISTS_BY_TENANT_REQUEST =\n  \"FETCH_DISTRIBUTION_LISTS_BY_TENANT_REQUEST\";\nexport const FETCH_DISTRIBUTION_LISTS_BY_TENANT_REQUEST_SUCCESS =\n  \"FETCH_DISTRIBUTION_LISTS_BY_TENANT_REQUEST_SUCCESS\";\nexport const FETCH_DISTRIBUTION_LISTS_BY_TENANT_REQUEST_FAIL =\n  \"FETCH_DISTRIBUTION_LISTS_BY_TENANT_REQUEST_FAIL\";\n\nexport const UPDATE_SELECTED_DISTRIBUTION_LIST = \"UPDATE_SELECTED_DISTRIBUTION_LIST\";\nexport const UPDATE_SELECTED_DISTRIBUTION_LIST_FAIL = \"UPDATE_SELECTED_DISTRIBUTION_LIST_FAIL\";\nexport const UPDATE_SELECTED_DISTRIBUTION_LIST_SUCCESS =\n  \"UPDATE_SELECTED_DISTRIBUTION_LIST_SUCCESS\";\n\nexport const FETCH_MICROSOFT_MEMBERS_FOR_DL = \"FETCH_MICROSOFT_MEMBERS_FOR_DL\";\nexport const FETCH_MICROSOFT_MEMBERS_FOR_DL_FAIL = \"FETCH_MICROSOFT_MEMBERS_FOR_DL_FAIL\";\nexport const FETCH_MICROSOFT_MEMBERS_FOR_DL_SUCCESS = \"FETCH_MICROSOFT_MEMBERS_FOR_DL_SUCCESS\";\n\nexport const ADD_MICROSOFT_MEMBER_TO_DL = \"ADD_MICROSOFT_MEMBER_TO_DL\";\nexport const ADD_MICROSOFT_MEMBER_TO_DL_FAIL = \"ADD_MICROSOFT_MEMBER_TO_DL_FAIL\";\nexport const ADD_MICROSOFT_MEMBER_TO_DL_SUCCESS = \"ADD_MICROSOFT_MEMBER_TO_DL_SUCCESS\";\n\nexport const REMOVE_MICROSOFT_MEMBER_FROM_DL = \"REMOVE_MICROSOFT_MEMBER_FROM_DL\";\nexport const REMOVE_MICROSOFT_MEMBER_FROM_DL_FAIL = \"REMOVE_MICROSOFT_MEMBER_FROM_DL_FAIL\";\nexport const REMOVE_MICROSOFT_MEMBER_FROM_DL_SUCCESS = \"REMOVE_MICROSOFT_MEMBER_FROM_DL_SUCCESS\";\n\nexport const MICROSOFT_MEMBER_DL_RESET = \"MICROSOFT_MEMBER_DL_RESET\";\n","/*!\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n */\r\nimport { msalApp, GRAPH_ENDPOINTS, GRAPH_REQUESTS } from \"Authentication/AuthHelper\";\r\n\r\n/**\r\n * Call MsGraph to search AAD User Info.\r\n * @param {string}  email  the user email.\r\n */\r\nexport async function callMsGraphGetUserByEmail(email: string) {\r\n  const account = msalApp.getAccount();\r\n  if (!account) {\r\n    throw Error(\r\n      \"No active account! Verify a user has been signed in and setActiveAccount has been called.\"\r\n    );\r\n  }\r\n\r\n  const response = await msalApp.acquireTokenSilent({\r\n    ...GRAPH_REQUESTS.LOGIN,\r\n    account: account,\r\n  });\r\n\r\n  const headers = new Headers();\r\n  const bearer = `Bearer ${response.accessToken}`;\r\n\r\n  headers.append(\"Authorization\", bearer);\r\n\r\n  const options = {\r\n    method: \"GET\",\r\n    headers: headers,\r\n  };\r\n\r\n  return fetch(`${GRAPH_ENDPOINTS.USER_BY_EMAIL}${email}`, options)\r\n    .then((response) => response.json())\r\n    .catch((error) => error);\r\n}\r\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport _ from \"lodash\";\n\nimport { TenantTypesEnum } from \"Constants/TenantTypes\";\nimport { IApplicationQuestionResponse } from \"Interfaces/Application/IApplicationQuestionResponse\";\n\n/**\n * Gets the default API timeout configuration. (in MilliSeconds)\n * @returns {number} The timeout.\n */\nexport function getDefaultApiTimeOutConfiguration(): number {\n  if (process.env.REACT_APP_DEFAULT_API_TIMEOUT) {\n    return +process.env.REACT_APP_DEFAULT_API_TIMEOUT;\n  }\n\n  // based on .net core default timeout values and taking in to account slow connections\n  return 150000;\n}\n\n/**\n * Gets the tenant while the consolidation of the MSA to MLSA is complete.\n * @returns {TenantTypesEnum} One of the three standard tenants (MVP, RD, MLSA)\n */\nexport function getTenant(tenant: TenantTypesEnum): TenantTypesEnum {\n  if (tenant === TenantTypesEnum.MSP) return TenantTypesEnum.MLSA;\n\n  return tenant;\n}\n\n/**\n * Function to add @microsoft.com to emails in people picker component.\n * @param input\n * @returns\n */\nexport function onInputChange(input: string): string {\n  const outlookRegEx = /@.*/g;\n  const emailAddress = outlookRegEx.exec(input);\n\n  if (emailAddress && emailAddress[0]) {\n    return `${input.substring(0, input.length - emailAddress[0].length)}@microsoft.com`;\n  }\n\n  return input;\n}\n\n/**\n * Function to group application questions by section and question id.\n * @param applicationQuestions\n * @returns\n */\nexport function GetApplicationQuestionsGroupBySectionAndByQuestionId(\n  applicationQuestions: IApplicationQuestionResponse[] | undefined\n): any {\n  return _.chain(applicationQuestions)\n    .groupBy((question) => question.questionSection)\n    .mapValues((questions) =>\n      _.chain(questions)\n        .groupBy((question) => `${question.questionId}-${question.questionLocKey}`)\n        .map((groupedQuestions) => {\n          const { questionId, questionLocKey, questionText, orderBy } = groupedQuestions[0];\n          const questionResponseText = _.map(groupedQuestions, \"questionResponseText\").join(\", \");\n          return { questionId, questionLocKey, questionText, questionResponseText, orderBy };\n        })\n        .value()\n    )\n    .value();\n}\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { Form } from \"formik\";\nimport styled from \"styled-components\";\n\nimport {\n  getTheme,\n  FontSizes,\n  FontWeights,\n  IButtonStyles,\n  ICommandBarStyles,\n  IStackItemStyles,\n  IStackStyles,\n  IStackTokens,\n} from \"@fluentui/react\";\n\nconst theme = getTheme();\n\nexport const ContentContainer = styled.div`\n  background-color: ${theme.palette.white};\n  box-shadow: 0px 1px 4px rgba(0, 0, 0, 0.2);\n  border-radius: 8px;\n  padding: 24px;\n`;\n\nexport const PageHeader = styled.div`\n  background-color: ${theme.palette.white};\n  display: flex;\n  flex-direction: column;\n  border-radius: 8px;\n  padding: 24px;\n  margin-top: 24px;\n`;\n\nexport const PanelHeader = styled.h3`\n  margin-bottom: 43px;\n  font-weight: ${FontWeights.semibold};\n  font-size: ${FontSizes.size32};\n  line-height: 40px;\n`;\n\nexport const PanelSubHeader = styled.p`\n  font-weight: ${FontWeights.semibold};\n  font-size: ${FontSizes.size24};\n  line-height: 32px;\n  margin-bottom: 24px;\n`;\n\nexport const Subtitle = styled.p`\n  font-weight: ${FontWeights.regular};\n  font-size: ${FontSizes.size16};\n  line-height: 22px;\n  margin-bottom: 0;\n`;\n\nexport const TextFieldContainer = styled.div`\n  margin-bottom: 15px;\n`;\n\nexport const Title = styled.h2`\n  font-weight: ${FontWeights.semibold};\n  font-size: ${FontSizes.size20};\n  line-height: 28px;\n`;\n\nexport const FlexWrapper = styled.div`\n  display: flex;\n  flex-direction: column;\n  justify-content: space-between;\n  height: 100%;\n`;\n\nexport const StyledForm = styled(Form)`\n  display: flex;\n  flex-direction: column;\n  justify-content: space-between;\n  height: 100%;\n\n  & input {\n    height: 48px;\n    font-size: 20px;\n    line-height: 1.75rem;\n  }\n`;\n\nexport const verticalStackTokens: IStackTokens = { childrenGap: 20 };\nexport const horizontalStackTokens: IStackTokens = { childrenGap: 40 };\n\nexport const commandBarStyles: ICommandBarStyles = {\n  root: {\n    boxShadow: \"0px 1px 4px rgba(0, 0, 0, 0.2)\",\n    borderRadius: \"8px\",\n    padding: \"18px\",\n    minHeight: \"56px\",\n    marginBottom: \"24px\",\n  },\n};\n\nexport const fieldItemStyles: IStackItemStyles = {\n  root: { height: \"35px\", width: \"100%\" },\n};\n\nexport const flexStackStyles: IStackStyles = {\n  root: {\n    display: \"flex\",\n    flexWrap: \"wrap\",\n    marginBottom: \"1.5rem\",\n  },\n};\n\nexport const footerButtonStyles: IButtonStyles = {\n  root: {\n    marginRight: 8,\n    width: \"120px\",\n    height: \"32px\",\n  },\n};\n\nexport const formStackStyles: IStackStyles = {\n  root: {\n    margin: \"0\",\n    display: \"flex\",\n    flexDirection: \"column\",\n    justifyContent: \"space-between\",\n  },\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { useEffect, useState } from \"react\";\n\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { useHistory, useParams } from \"react-router-dom\";\n\nimport { Field, Formik } from \"formik\";\nimport * as Yup from \"yup\";\n\nimport {\n  ActionButton,\n  CommandBar,\n  DefaultButton,\n  ICommandBarItemProps,\n  IPersonaProps,\n  IPickerItemProps,\n  Label,\n  MessageBar,\n  MessageBarType,\n  NormalPeoplePicker,\n  PeoplePickerItem,\n  PersonaPresence,\n  PrimaryButton,\n  Separator,\n  Stack,\n  Text,\n  ValidationState,\n} from \"@fluentui/react\";\n\nimport { useAuth } from \"Authentication/AuthProvider\";\nimport { IPersonaPropsExtend } from \"Components/AccessControlUserForm/IPersonaPropsExtend\";\nimport FormikErrorMessage from \"Components/Common/FormikErrorMessage/FormikErrorMessage\";\nimport {\n  bodyContainerStackStyles,\n  headerStackStyles,\n  headerTextStyles,\n  ContainerWrapper,\n} from \"Components/Common/SharedTableStyles.styles\";\nimport { IUserDetailsGraphProps } from \"Components/DistributionLists/IUserDetailsGraphProps\";\nimport MicrosoftMembersList from \"Components/MicrosoftMembersList/MicrosoftMembersList\";\nimport { SidePanel } from \"Components/SidePanel/SidePanel\";\nimport { messageBarStyles } from \"Components/SidePanel/SidePanel.styles\";\nimport { OperationStatus } from \"Constants/OperationStatus\";\nimport { peoplePickerSuggestionProps } from \"Constants/PeoplePickerConstants\";\nimport { MICROSOFT_DOMAIN_REGEX } from \"Constants/RegexConstants\";\nimport { PermissionsEnum } from \"Constants/RolesPermissionsConstants\";\nimport { TenantTypesEnum } from \"Constants/TenantTypes\";\nimport {\n  containerStackTokens,\n  wrapperStackStyles,\n} from \"Containers/MVP/MostValuableProfessionalDetailsContainer/MostValuableProfessionalDetailsContainer.styles\";\nimport {\n  addMicrosoftMemberToDL,\n  fetchMicrosoftMembersForDL,\n  removeMicrosoftMemberFromDL,\n  resetMicrosoftMemberDLs,\n} from \"Dataflows/DistributionLists/DistributionListsAction\";\nimport {\n  getAddMemberToDLErrorMessage,\n  getNetworkOperationStatusAddMember,\n  getNetworkOperationStatusRemoveMember,\n  getRemoveMemberFromDLErrorMessage,\n  getSelectedDistributionList,\n  getSelectedDistributionListMicrosoftMembers,\n} from \"Dataflows/DistributionLists/DistributionListsSelector\";\nimport { callMsGraphGetUserByEmail } from \"Utility/MsGraphApiCall\";\nimport { onInputChange } from \"Utility/Utils\";\n\nimport {\n  commandBarStyles,\n  fieldItemStyles,\n  flexStackStyles,\n  footerButtonStyles,\n  formStackStyles,\n  horizontalStackTokens,\n  verticalStackTokens,\n  ContentContainer,\n  FlexWrapper,\n  PageHeader,\n  PanelSubHeader,\n  StyledForm,\n  Subtitle,\n  Title,\n} from \"./DistributionListDetails.styles\";\n\n/**\n * Distribution List Details functional component\n * @param props {IDistributionListDetailsProps} Distribution List Details props.\n * @returns {React.ReactElement} Distribution List Details Component.\n */\nconst DistributionListDetails = (): React.ReactElement => {\n  const dispatch = useDispatch();\n  const history = useHistory();\n  const { emailAlias, tenant } = useParams<{ emailAlias: string; tenant: string }>();\n  const [isPanelOpen, setIsPanelOpen] = useState<boolean>(false);\n  const [isAddingUser, setIsAddingUser] = useState<boolean>(false);\n  const [isRemovingUser, setIsRemovingUser] = useState<boolean>(false);\n  const [userDetails, setUserDetails] = useState<IUserDetailsGraphProps | undefined>(undefined);\n  const [selectedEmail, setSelectedEmail] = useState<string>(\"\");\n  const [successMessage, setSuccessMessage] = useState<string>(\"\");\n  const [isAddingOrRemoving, setIsAddingOrRemoving] = useState<boolean>(false);\n  const [isSubmitting, setIsSubmitting] = useState<boolean>(false);\n  const selectedDistributionList = useSelector(getSelectedDistributionList);\n  const networkOperationStatusAddMember = useSelector(getNetworkOperationStatusAddMember);\n  const networkOperationStatusRemoveMember = useSelector(getNetworkOperationStatusRemoveMember);\n  const addUserErrorMessage = useSelector(getAddMemberToDLErrorMessage);\n  const removeUserErrorMessage = useSelector(getRemoveMemberFromDLErrorMessage);\n  const microsoftMembers = useSelector(getSelectedDistributionListMicrosoftMembers);\n  const { hasPermission } = useAuth();\n  const canUpdateDistributionList =\n    (tenant.toLowerCase() === TenantTypesEnum.MVP.toLowerCase() &&\n      hasPermission(TenantTypesEnum.MVP, PermissionsEnum.MVP_UPDATE_DISTRIBUTIONS_LIST)) ||\n    (tenant.toLowerCase() === TenantTypesEnum.RD.toLowerCase() &&\n      hasPermission(TenantTypesEnum.RD, PermissionsEnum.RD_UPDATE_BENEFITS));\n\n  useEffect(() => {\n    dispatch(fetchMicrosoftMembersForDL(tenant, emailAlias));\n  }, []);\n\n  useEffect(() => {\n    if (isPanelOpen) {\n      dispatch(resetMicrosoftMemberDLs());\n    }\n  }, [isPanelOpen]);\n\n  const dismissPanel = (): void => {\n    setIsPanelOpen(false);\n  };\n\n  const cleanup = (): void => {\n    setIsAddingOrRemoving(false);\n    setUserDetails(undefined);\n    dispatch(fetchMicrosoftMembersForDL(tenant, selectedDistributionList.distributionListEmail));\n    setIsSubmitting(false);\n    dismissPanel();\n  };\n\n  useEffect(() => {\n    if (networkOperationStatusAddMember === OperationStatus.Succeeded) {\n      setSuccessMessage(\n        \"Your request was successful! Please allow 30 minutes for Exchange to process the changes.\"\n      );\n      cleanup();\n    } else if (networkOperationStatusAddMember === OperationStatus.Pending) {\n      setIsAddingOrRemoving(true);\n    } else if (networkOperationStatusAddMember === OperationStatus.Failed) {\n      setIsAddingOrRemoving(false);\n      setIsSubmitting(false);\n    }\n  }, [networkOperationStatusAddMember]);\n\n  useEffect(() => {\n    if (networkOperationStatusRemoveMember === OperationStatus.Succeeded) {\n      setSuccessMessage(\n        \"Your request was successful! Please allow 30 minutes for Exchange to process the changes.\"\n      );\n      cleanup();\n    } else if (networkOperationStatusRemoveMember === OperationStatus.Pending) {\n      setIsAddingOrRemoving(true);\n    } else if (networkOperationStatusRemoveMember === OperationStatus.Failed) {\n      setIsAddingOrRemoving(false);\n      setIsSubmitting(false);\n    }\n  }, [networkOperationStatusRemoveMember]);\n\n  const picker = React.useRef(null);\n\n  /**\n   * Handler for when the back button is clicked.\n   * @returns {void} void no return for function.\n   */\n  const onBackClickEvent = (): void => {\n    history.goBack();\n  };\n\n  const items: ICommandBarItemProps[] = [\n    {\n      key: \"addMsMember\",\n      text: \"Add\",\n      iconProps: { iconName: \"Add\" },\n      onClick: (): void => {\n        setIsAddingUser(true);\n        setIsPanelOpen(true);\n      },\n    },\n  ];\n\n  const handlePanelClick = (email: string): void => {\n    if (MICROSOFT_DOMAIN_REGEX.test(email) && !!userDetails) {\n      setSelectedEmail(email);\n      if (!!userDetails) {\n        dispatch(\n          addMicrosoftMemberToDL(\n            tenant,\n            selectedDistributionList.distributionListEmail,\n            userDetails.emailAddress,\n            userDetails.text,\n            userDetails.firstName,\n            userDetails.lastName\n          )\n        );\n      }\n    } else {\n      dispatch(\n        removeMicrosoftMemberFromDL(\n          tenant,\n          selectedDistributionList.distributionListEmail,\n          selectedEmail\n        )\n      );\n    }\n  };\n\n  /**\n   * Save changes to add/remove a user from a DL.\n   */\n  const save = (): void => {\n    if (!!userDetails?.emailAddress) {\n      return handlePanelClick(userDetails.emailAddress);\n    } else if (isRemovingUser && selectedEmail) {\n      return handlePanelClick(selectedEmail);\n    }\n  };\n\n  /**\n   * Search AAD User Info by the input user email.\n   * @param {string}  filterText  the user email.\n   * @param {IPersonaProps[] | undefined}  currentPersonas  Already selected persons.\n   * @returns {IPersonaPropsExtend[] | Promise<IPersonaPropsExtend[]>} Selectable persons.\n   */\n  const onFilterChanged = (\n    filterText: string,\n    currentPersonas: IPersonaProps[] | undefined\n  ): IPersonaPropsExtend[] | Promise<IPersonaPropsExtend[]> => {\n    if (filterText && filterText.endsWith(\"@microsoft.com\")) {\n      return callMsGraphGetUserByEmail(filterText).then((value) => {\n        if (!value.error && !currentPersonas?.find((p) => p.id === value.id)) {\n          return [\n            {\n              id: value.id,\n              imageInitials: `${value.displayName}`,\n              text: value.displayName,\n              secondaryText: value.userPrincipalName,\n              presence: PersonaPresence.none,\n              firstName: value.givenName,\n              lastName: value.surname,\n              emailAddress: value.userPrincipalName,\n            },\n          ];\n        }\n      }) as Promise<IPersonaPropsExtend[]>;\n    } else {\n      return [];\n    }\n  };\n\n  const defaultSelect = [] as Array<IPersonaPropsExtend>;\n\n  /**\n   * Render item with secondary text for the NormalPeoplePicker.\n   */\n  const renderItemWithSecondaryText = (props: IPickerItemProps<IPersonaProps>): JSX.Element => {\n    const newProps = {\n      ...props,\n      item: {\n        ...props.item,\n        ValidationState: ValidationState.valid,\n        showSecondaryText: true,\n      },\n    };\n\n    return <PeoplePickerItem {...newProps} />;\n  };\n\n  /**\n   * The Validation for the access user form.\n   */\n  const addMSMemberSchema = Yup.object().shape({\n    email: Yup.string()\n      .test(\"Validate Email\", \"Email must be a Microsoft email\", (value) => {\n        return MICROSOFT_DOMAIN_REGEX.test(String(value).toLowerCase());\n      })\n      .notOneOf(\n        microsoftMembers.map((ms) => ms.email),\n        \"This user is already a member of this group.\"\n      ),\n  });\n\n  /**\n   * The Validation for the access user form.\n   */\n  const removeMSMemberSchema = Yup.object().shape({\n    email: Yup.string().notOneOf(\n      microsoftMembers.map((ms) => ms.email),\n      \"This user is already a member of this group.\"\n    ),\n  });\n\n  return (\n    <>\n      <Stack styles={wrapperStackStyles}>\n        <Stack>\n          <ActionButton\n            iconProps={{ iconName: \"RevToggleKey\" }}\n            ariaLabel=\"Back\"\n            onClick={onBackClickEvent}\n          >\n            Back\n          </ActionButton>\n        </Stack>\n\n        <Stack tokens={containerStackTokens}>\n          <PageHeader>\n            <Title>{selectedDistributionList.distributionGroupDisplayName}</Title>\n            <Subtitle>{selectedDistributionList.distributionListEmail}</Subtitle>\n          </PageHeader>\n          <ContentContainer>\n            {canUpdateDistributionList && (\n              <Stack>\n                <CommandBar\n                  styles={commandBarStyles}\n                  items={items}\n                  ariaLabel=\"Add microsoft member\"\n                />\n                {successMessage && (\n                  <MessageBar messageBarType={MessageBarType.success}>{successMessage}</MessageBar>\n                )}\n              </Stack>\n            )}\n            <ContainerWrapper>\n              <Stack styles={headerStackStyles}>\n                <Text styles={headerTextStyles}>Microsoft Members</Text>\n              </Stack>\n              <Stack styles={bodyContainerStackStyles}>\n                <MicrosoftMembersList\n                  canRemoveUser={canUpdateDistributionList}\n                  setIsPanelOpen={setIsPanelOpen}\n                  setIsAddingUser={setIsAddingUser}\n                  setIsRemovingUser={setIsRemovingUser}\n                  setSelectedEmail={setSelectedEmail}\n                />\n              </Stack>\n            </ContainerWrapper>\n          </ContentContainer>\n        </Stack>\n        <SidePanel\n          isOpen={isPanelOpen}\n          title={isAddingUser ? \"Add a member\" : \"Remove a member\"}\n          saveButtonLabel={isAddingUser ? \"Add\" : \"Remove\"}\n          error={addUserErrorMessage || removeUserErrorMessage}\n          disableActions={isAddingOrRemoving}\n          onDismiss={dismissPanel}\n          onSave={(): void => save()}\n          hideFooter\n        >\n          <FlexWrapper>\n            <div>\n              <PanelSubHeader>\n                {selectedDistributionList.distributionGroupDisplayName}\n              </PanelSubHeader>\n              <p>\n                {isAddingUser\n                  ? \"You can add a Microsoft FTE or external staff member to this distribution list.\"\n                  : \"You can remove this member from the DL. Removed users will not be receiving any further emails.\"}\n              </p>\n            </div>\n            <Formik\n              initialValues={{\n                email: undefined,\n              }}\n              validationSchema={isAddingUser ? addMSMemberSchema : removeMSMemberSchema}\n              onSubmit={(): void => setIsSubmitting(true)}\n            >\n              {({ setFieldValue, isValid, errors }): React.ReactNode => {\n                return (\n                  <StyledForm>\n                    <Stack tokens={verticalStackTokens} styles={formStackStyles}>\n                      <Stack\n                        horizontal\n                        wrap={true}\n                        tokens={horizontalStackTokens}\n                        styles={flexStackStyles}\n                      >\n                        {isAddingUser && (\n                          <Stack.Item styles={fieldItemStyles}>\n                            <Label>Email: </Label>\n                            <Field\n                              disabled={isAddingOrRemoving}\n                              component={NormalPeoplePicker}\n                              id=\"email\"\n                              label=\"Email Address\"\n                              name=\"email\"\n                              placeholder=\"Enter here\"\n                              defaultSelectedItems={defaultSelect}\n                              onChange={(emailUser: IUserDetailsGraphProps[] | undefined): void => {\n                                const userInfo =\n                                  !!emailUser && emailUser.length > 0 ? emailUser[0] : undefined;\n                                setUserDetails(userInfo);\n                                setFieldValue(\"email\", userInfo?.emailAddress);\n                              }}\n                              onResolveSuggestions={onFilterChanged}\n                              pickerSuggestionsProps={peoplePickerSuggestionProps}\n                              className=\"ms-PeoplePicker\"\n                              key=\"normal\"\n                              onRenderItem={renderItemWithSecondaryText}\n                              removeButtonAriaLabel=\"Remove\"\n                              inputProps={{\n                                \"aria-label\": \"People Picker\",\n                              }}\n                              componentRef={picker}\n                              onInputChange={onInputChange}\n                              resolveDelay={300}\n                              itemLimit={1}\n                            />\n                            <FormikErrorMessage name=\"email\" />\n                          </Stack.Item>\n                        )}\n                      </Stack>\n                    </Stack>\n                    <Stack horizontal>\n                      <Stack.Item>\n                        {errors.email ? (\n                          <MessageBar\n                            messageBarType={MessageBarType.warning}\n                            styles={messageBarStyles}\n                          >\n                            {errors.email}\n                          </MessageBar>\n                        ) : null}\n                        {!!addUserErrorMessage ? (\n                          <MessageBar\n                            messageBarType={MessageBarType.warning}\n                            styles={messageBarStyles}\n                          >\n                            {addUserErrorMessage}\n                          </MessageBar>\n                        ) : null}\n                        {!!removeUserErrorMessage ? (\n                          <MessageBar\n                            messageBarType={MessageBarType.warning}\n                            styles={messageBarStyles}\n                          >\n                            {removeUserErrorMessage}\n                          </MessageBar>\n                        ) : null}\n                        <div>\n                          <Separator />\n                          <PrimaryButton\n                            onClick={(): void => {\n                              save();\n                            }}\n                            styles={footerButtonStyles}\n                            disabled={!isValid || isSubmitting}\n                            type=\"submit\"\n                          >\n                            {isAddingUser ? \"Add\" : \"Remove\"}\n                          </PrimaryButton>\n                          <DefaultButton\n                            onClick={dismissPanel}\n                            styles={footerButtonStyles}\n                            disabled={!isValid || isSubmitting}\n                          >\n                            Cancel\n                          </DefaultButton>\n                        </div>\n                      </Stack.Item>\n                    </Stack>\n                  </StyledForm>\n                );\n              }}\n            </Formik>\n          </FlexWrapper>\n        </SidePanel>\n      </Stack>\n    </>\n  );\n};\n\nexport default DistributionListDetails;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport {\n  UPDATE_LISTING_CURRENT_PAGE,\n  UPDATE_LISTING_PAGE_SIZE,\n  UPDATE_USERPROFILE_ID,\n  USERPROFILE_ADD_COMMENT,\n  USERPROFILE_ADD_COMMENT_FAIL,\n  USERPROFILE_ADD_COMMENT_SUCCESS,\n  USERPROFILE_CLAIM_BENEFIT,\n  USERPROFILE_CLAIM_BENEFIT_FAIL,\n  USERPROFILE_CLAIM_BENEFIT_RESET,\n  USERPROFILE_CLAIM_BENEFIT_SUCCESS,\n  USERPROFILE_DL_LOAD,\n  USERPROFILE_DL_LOAD_FAIL,\n  USERPROFILE_DL_LOAD_SUCCESS,\n  USERPROFILE_DL_REMOVE,\n  USERPROFILE_DL_REMOVE_ALL,\n  USERPROFILE_DL_REMOVE_ALL_FAIL,\n  USERPROFILE_DL_REMOVE_ALL_SUCCESS,\n  USERPROFILE_DL_REMOVE_FAIL,\n  USERPROFILE_DL_REMOVE_SUCCESS,\n  USERPROFILE_END_VSBENEFITS,\n  USERPROFILE_END_VSBENEFITS_FAIL,\n  USERPROFILE_END_VSBENEFITS_SUCCESS,\n  USERPROFILE_EXTEND_VSBENEFITS,\n  USERPROFILE_EXTEND_VSBENEFITS_FAIL,\n  USERPROFILE_EXTEND_VSBENEFITS_SUCCESS,\n  USERPROFILE_FETCH_PROGRAM_PROFILE,\n  USERPROFILE_FETCH_PROGRAM_PROFILE_FAIL,\n  USERPROFILE_FETCH_PROGRAM_PROFILE_SUCCESS,\n  USERPROFILE_GET_PROFILE_BENEFITS,\n  USERPROFILE_GET_PROFILE_BENEFITS_FAIL,\n  USERPROFILE_GET_PROFILE_BENEFITS_SUCCESS,\n  USERPROFILE_LOAD,\n  USERPROFILE_LOAD_BY_EMAIL,\n  USERPROFILE_LOAD_COMMENTS,\n  USERPROFILE_LOAD_COMMENTS_FAIL,\n  USERPROFILE_LOAD_COMMENTS_SUCCESS,\n  USERPROFILE_LOAD_FAIL,\n  USERPROFILE_LOAD_SUCCESS,\n  USERPROFILE_LOAD_VSBENEFITS,\n  USERPROFILE_LOAD_VSBENEFITS_FAIL,\n  USERPROFILE_LOAD_VSBENEFITS_SUCCESS,\n  USERPROFILE_PROVISION_VSBENEFITS,\n  USERPROFILE_PROVISION_VSBENEFITS_FAIL,\n  USERPROFILE_PROVISION_VSBENEFITS_SUCCESS,\n  USERPROFILE_UPDATE,\n  USERPROFILE_UPDATE_BLOCK_SHIPPING,\n  USERPROFILE_UPDATE_BLOCK_SHIPPING_FAIL,\n  USERPROFILE_UPDATE_BLOCK_SHIPPING_SUCCESS,\n  USERPROFILE_UPDATE_COMMENT,\n  USERPROFILE_UPDATE_COMMENT_FAIL,\n  USERPROFILE_UPDATE_COMMENT_SUCCESS,\n  USERPROFILE_UPDATE_FAIL,\n  USERPROFILE_UPDATE_IS_PRIVATE,\n  USERPROFILE_UPDATE_IS_PRIVATE_FAIL,\n  USERPROFILE_UPDATE_IS_PRIVATE_SUCCESS,\n  USERPROFILE_UPDATE_PROGRAM_PROFILE,\n  USERPROFILE_UPDATE_PROGRAM_PROFILE_FAILURE,\n  USERPROFILE_UPDATE_PROGRAM_PROFILE_SUCCESS,\n  USERPROFILE_UPDATE_SUCCESS,\n  USERPROFILE_VSBENEFITS_RESET,\n  USERPROFILES_FILTER_PROVINCE_VALUE_REMOVE,\n  USERPROFILES_FILTER_VALUE_ADD,\n  USERPROFILES_FILTER_VALUE_REMOVE,\n  USERPROFILES_FILTER_VALUE_RESET,\n  USERPROFILES_FILTER_VALUE_UPDATE,\n  USERPROFILES_SEARCH,\n  USERPROFILES_SEARCH_FAIL,\n  USERPROFILES_SEARCH_SUCCESS,\n} from \"Constants/ActionTypes\";\nimport { TenantTypesEnum } from \"Constants/TenantTypes\";\nimport { IProfileBenefitResult } from \"Interfaces/Benefits/IProfileBenefitResult\";\nimport { IFilterValue } from \"Interfaces/IFilterValue\";\nimport { IProgramProfile } from \"Interfaces/ProgramProfile/IProgramProfile\";\nimport { IUserProfile } from \"Interfaces/UserProfile/IUserProfile\";\nimport { IUserProfileComment } from \"Interfaces/UserProfile/IUserProfileComment\";\nimport { IUserProfileVSBenefit } from \"Interfaces/UserProfile/IUserProfileVSBenefit\";\nimport { IUserProfileVSBenefitsUpdateRequest } from \"Interfaces/UserProfile/IUserProfileVSBenefitsUpdateRequest\";\n\n/*************** BEGIN INTERFACES *************** */\n/**\n * Action to get profile benefits.\n * @interface\n */\nexport interface IGetProfileBenefits {\n  type: typeof USERPROFILE_GET_PROFILE_BENEFITS;\n  userProfileId: number;\n}\n\n/**\n * Action to get profile benefits success.\n * @interface\n */\nexport interface IGetProfileBenefitsSuccess {\n  type: typeof USERPROFILE_GET_PROFILE_BENEFITS_SUCCESS;\n  userProfileBenefits: IProfileBenefitResult;\n}\n\n/**\n * Action to get profile benefits fail.\n * @interface\n */\nexport interface IGetProfileBenefitsFail {\n  type: typeof USERPROFILE_GET_PROFILE_BENEFITS_FAIL;\n  profileBenefitsErrorMessage: string;\n}\n\n/**\n * Action for when updating user profile program details.\n * @interface\n */\nexport interface IUpdateProgramProfile {\n  type: typeof USERPROFILE_UPDATE_PROGRAM_PROFILE;\n  programProfile: IProgramProfile;\n}\n\n/**\n * Action for when updating user profile Program details success.\n * @interface\n */\nexport interface IUpdateProgramProfileSuccess {\n  type: typeof USERPROFILE_UPDATE_PROGRAM_PROFILE_SUCCESS;\n  programProfile: IProgramProfile;\n}\n\n/**\n * Action for when updating user profile Program details failure.\n * @interface\n */\nexport interface IUpdateProgramProfileFailure {\n  type: typeof USERPROFILE_UPDATE_PROGRAM_PROFILE_FAILURE;\n  message: string;\n}\n\n/**\n * Action for when updating listing current page\n * @interface\n */\nexport interface IUpdateCurrentPage {\n  type: typeof UPDATE_LISTING_CURRENT_PAGE;\n  currentPage: number;\n}\n\n/**\n * Action for when updating listing page size\n * @interface\n */\nexport interface IUpdatePageSize {\n  type: typeof UPDATE_LISTING_PAGE_SIZE;\n  pageSize: number;\n}\n\n/**\n * Action for when searching user profiles.\n * @interface\n */\nexport interface ISearchUserProfiles {\n  type: typeof USERPROFILES_SEARCH;\n  searchText: string;\n  selectedUserProfilesFilterValues: IFilterValue[];\n  searchPage: number;\n  pageSize: number;\n}\n\n/**\n * Action for when user profiles were searched successfully.\n * @interface\n */\nexport interface ISearchUserProfilesSuccess {\n  type: typeof USERPROFILES_SEARCH_SUCCESS;\n  userProfiles: IUserProfile[];\n  searchPage: number;\n  filteredCount: number;\n  pageSize: number;\n}\n\n/**\n * Action for when searching user profiles failed.\n * @interface\n */\nexport interface ISearchUserProfilesFail {\n  type: typeof USERPROFILES_SEARCH_FAIL;\n  error: string;\n}\n\n/**\n * Action for when adding selected filter value.\n * @interface\n */\nexport interface IUserProfilesFilterValueAdd {\n  type: typeof USERPROFILES_FILTER_VALUE_ADD;\n  filterValue: IFilterValue;\n}\n\n/**\n * Action for when removing selected filter value.\n * @interface\n */\nexport interface IUserProfilesFilterValueRemove {\n  type: typeof USERPROFILES_FILTER_VALUE_REMOVE;\n  filterValue: IFilterValue;\n}\n\n/**\n * Action for when removing selected province filter value.\n * @interface\n */\nexport interface IUserProfilesFilterProvinceValueRemove {\n  type: typeof USERPROFILES_FILTER_PROVINCE_VALUE_REMOVE;\n}\n\n/**\n * Action for when updating selected filter value.\n * @interface\n */\nexport interface IUserProfilesFilterValueUpdate {\n  type: typeof USERPROFILES_FILTER_VALUE_UPDATE;\n  filterValue: IFilterValue;\n}\n\n/**\n * Action for when loading a user profile.\n * @interface\n */\nexport interface ILoadUserProfile {\n  type: typeof USERPROFILE_LOAD;\n  userProfileId: number;\n}\n\n/**\n * action for when loading a user profile.\n * @interface\n */\nexport interface ILoadUserProfileByEmail {\n  type: typeof USERPROFILE_LOAD_BY_EMAIL;\n  email: string;\n}\n\n/**\n * Action for when user profile was loaded successfully.\n * @interface\n */\nexport interface ILoadUserProfileSuccess {\n  type: typeof USERPROFILE_LOAD_SUCCESS;\n  userProfile: IUserProfile;\n}\n\n/**\n * Action for when loading a user profile failed.\n * @interface\n */\nexport interface ILoadUserProfileFail {\n  type: typeof USERPROFILE_LOAD_FAIL;\n  error: string;\n}\n\n/**\n * Action for when updating user profile ID.\n * @interface\n */\nexport interface IUpdateUserProfileId {\n  type: typeof UPDATE_USERPROFILE_ID;\n  userProfileId: number;\n}\n\n/**\n * Action for updating a user profile.\n * @interface\n */\nexport interface IUpdateUserProfile {\n  type: typeof USERPROFILE_UPDATE;\n  userProfile: IUserProfile;\n}\n\n/**\n * Action for when updating a user profile is successful.\n * @interface\n */\nexport interface IUpdateUserProfileSuccess {\n  type: typeof USERPROFILE_UPDATE_SUCCESS;\n  userProfile: IUserProfile;\n}\n\n/**\n * Action for when updating a user profile fails.\n * @interface\n */\nexport interface IUpdateUserProfileFail {\n  type: typeof USERPROFILE_UPDATE_FAIL;\n  error: string;\n}\n\n/**\n * Action for when loading user profile comments.\n * @interface\n */\nexport interface ILoadUserProfileComments {\n  type: typeof USERPROFILE_LOAD_COMMENTS;\n  userProfileId: number;\n}\n\n/**\n * Action for when user profile comments were loaded successfully.\n * @interface\n */\nexport interface ILoadUserProfileCommentsSuccess {\n  type: typeof USERPROFILE_LOAD_COMMENTS_SUCCESS;\n  userProfileComments: IUserProfileComment[];\n}\n\n/**\n * Action for when loading user profile comments failed.\n * @interface\n */\nexport interface ILoadUserProfileCommentsFail {\n  type: typeof USERPROFILE_LOAD_COMMENTS_FAIL;\n  loadCommentsError: string;\n}\n\n/**\n * Action for when updating a user profile comment.\n * @interface\n */\nexport interface IUpdateUserProfileComment {\n  type: typeof USERPROFILE_UPDATE_COMMENT;\n  userProfileComment: IUserProfileComment;\n}\n\n/**\n * Action for when a user profile comment were updated successfully.\n * @interface\n */\nexport interface IUpdateUserProfileCommentSuccess {\n  type: typeof USERPROFILE_UPDATE_COMMENT_SUCCESS;\n  userProfileComment: IUserProfileComment;\n}\n\n/**\n * Action for when updating a user profile comment failed.\n * @interface\n */\nexport interface IUpdateUserProfileCommentFail {\n  type: typeof USERPROFILE_UPDATE_COMMENT_FAIL;\n  error: string;\n}\n\n/**\n * Action to reset the VS Benefits State.\n * @interface\n */\nexport interface IUserProfileVSBenefitsReset {\n  type: typeof USERPROFILE_VSBENEFITS_RESET;\n}\n\n/**\n * Action for loading Visual Studio benefits for a user profile\n * @interface\n */\nexport interface ILoadUserProfileVSBenefits {\n  type: typeof USERPROFILE_LOAD_VSBENEFITS;\n  userProfileId: number;\n}\n\n/**\n * Action for when user profile Visual Studio benefits were loaded successfully.\n * @interface\n */\nexport interface ILoadUserProfileVSBenefitsSuccess {\n  type: typeof USERPROFILE_LOAD_VSBENEFITS_SUCCESS;\n  userProfileVSBenefit: IUserProfileVSBenefit;\n}\n\n/**\n * Action for when loading user profile Visual Studio benefits failed.\n * @interface\n */\nexport interface ILoadUserProfileVSBenefitsFail {\n  type: typeof USERPROFILE_LOAD_VSBENEFITS_FAIL;\n  error: string;\n}\n\n/**\n * Action for Provisioning Visual Studiobenefits for a user profile\n * @interface\n */\nexport interface IProvisionUserProfileVSBenefits {\n  type: typeof USERPROFILE_PROVISION_VSBENEFITS;\n  userProfileId: number;\n}\n\n/**\n * Action for when user profile Visual Studio benefits were provisioned successfully.\n * @interface\n */\nexport interface IProvisionUserProfileVSBenefitsSuccess {\n  type: typeof USERPROFILE_PROVISION_VSBENEFITS_SUCCESS;\n  userProfileVSBenefitRequest: IUserProfileVSBenefitsUpdateRequest;\n}\n\n/**\n * Action for when provisioning user profile Visual Studio benefits fails.\n * @interface\n */\nexport interface IProvisionUserProfileVSBenefitsFail {\n  type: typeof USERPROFILE_PROVISION_VSBENEFITS_FAIL;\n  error: string;\n}\n\n/**\n * Action for extending Visual Studio benefits for a user profile\n * @interface\n */\nexport interface IExtendUserProfileVSBenefits {\n  type: typeof USERPROFILE_EXTEND_VSBENEFITS;\n  userProfileId: number;\n}\n\n/**\n * Action for when user profile Visual Studio benefits were extended successfully.\n * @interface\n */\nexport interface IExtendUserProfileVSBenefitsSuccess {\n  type: typeof USERPROFILE_EXTEND_VSBENEFITS_SUCCESS;\n  userProfileVSBenefitRequest: IUserProfileVSBenefitsUpdateRequest;\n}\n\n/**\n * Action for when extending user profile Visual Studio benefits fails.\n * @interface\n */\nexport interface IExtendUserProfileVSBenefitsFail {\n  type: typeof USERPROFILE_EXTEND_VSBENEFITS_FAIL;\n  error: string;\n}\n\n/**\n * Action for ending Visual Studio benefits for a user profile\n * @interface\n */\nexport interface IEndUserProfileVSBenefits {\n  type: typeof USERPROFILE_END_VSBENEFITS;\n  userProfileId: number;\n}\n\n/**\n * Action for when user profile Visual Studio benefits were extended successfully.\n * @interface\n */\nexport interface IEndUserProfileVSBenefitsSuccess {\n  type: typeof USERPROFILE_END_VSBENEFITS_SUCCESS;\n  userProfileVSBenefitRequest: IUserProfileVSBenefitsUpdateRequest;\n}\n\n/**\n * Action for when ending user profile Visual Studio benefits fails.\n * @interface\n */\nexport interface IEndUserProfileVSBenefitsFail {\n  type: typeof USERPROFILE_END_VSBENEFITS_FAIL;\n  error: string;\n}\n\n/**\n * Action claiming the benefits for a user profile.\n * @interface\n */\nexport interface IClaimBenefit {\n  type: typeof USERPROFILE_CLAIM_BENEFIT;\n  userProfileId: number;\n  benefitType: string;\n  tenant: string;\n}\n\n/**\n * Action claiming the benefits for a user profile succeed.\n * @interface\n */\nexport interface IClaimBenefitSuccess {\n  type: typeof USERPROFILE_CLAIM_BENEFIT_SUCCESS;\n}\n\n/**\n * Action claiming the benefits for a user profile fail.\n * @interface\n */\nexport interface IClaimBenefitFail {\n  type: typeof USERPROFILE_CLAIM_BENEFIT_FAIL;\n  error: string;\n}\n\n/**\n * Action claiming the benefits for a user profile reset.\n * @interface\n */\nexport interface IClaimBenefitReset {\n  type: typeof USERPROFILE_CLAIM_BENEFIT_RESET;\n}\n\nexport interface IFetchProgramProfile {\n  type: typeof USERPROFILE_FETCH_PROGRAM_PROFILE;\n  programProfileId: number;\n}\n\n/**\n * Action to fetch Program Profile fail\n * @interface\n */\nexport interface IFetchProgramProfileFail {\n  type: typeof USERPROFILE_FETCH_PROGRAM_PROFILE_FAIL;\n  errorMessage: string;\n}\n\n/**\n * Action to fetch Program Profile success\n * @interface\n */\nexport interface IFetchProgramProfileSuccess {\n  type: typeof USERPROFILE_FETCH_PROGRAM_PROFILE_SUCCESS;\n  programProfile: IProgramProfile;\n}\n\n/**\n * Action to add new comment\n * @interface\n */\nexport interface IAddNewComment {\n  type: typeof USERPROFILE_ADD_COMMENT;\n  userProfileId: number;\n  newComment: string;\n  createdBy: string;\n}\n\n/**\n * Action: add new comment success\n * @interface\n */\nexport interface IAddNewCommentSuccess {\n  type: typeof USERPROFILE_ADD_COMMENT_SUCCESS;\n  userProfileId: number;\n}\n\n/**\n * Action: add new comment fail\n * @interface\n */\nexport interface IAddNewCommentFail {\n  type: typeof USERPROFILE_ADD_COMMENT_FAIL;\n  errorMessage: string;\n}\n\n/**\n * Action: update user's blocked shipping status\n * @interface\n */\nexport interface IUserProfileUpdateBlockShipping {\n  type: typeof USERPROFILE_UPDATE_BLOCK_SHIPPING;\n  isShippingBlocked: boolean;\n  userProfileId: number;\n}\n\n/**\n * Action: update user's blocked shipping status fail\n * @interface\n */\nexport interface IUserProfileUpdateBlockShippingFail {\n  type: typeof USERPROFILE_UPDATE_BLOCK_SHIPPING_FAIL;\n  errorMessage: string;\n}\n\n/**\n * Action: update user's blocked shipping status success\n * @interface\n */\nexport interface IUserProfileUpdateBlockShippingSuccess {\n  type: typeof USERPROFILE_UPDATE_BLOCK_SHIPPING_SUCCESS;\n  userProfileId: number;\n}\n\n/**\n * Action: load the profile's DL.\n * @interface\n */\nexport interface IUserProfileDlLoad {\n  type: typeof USERPROFILE_DL_LOAD;\n  userProfileId: number;\n  tenant: string;\n}\n\n/**\n * Action: load the profile's DL succeed.\n * @interface\n */\nexport interface IUserProfileDlLoadSuccess {\n  type: typeof USERPROFILE_DL_LOAD_SUCCESS;\n  distributionLists: any;\n}\n\n/**\n * Action: load the profile's DL fail.\n * @interface\n */\nexport interface IUserProfileDlLoadFail {\n  type: typeof USERPROFILE_DL_LOAD_FAIL;\n  error: string;\n}\n\n/**\n * Action: remove the profile's from DL.\n * @interface\n */\nexport interface IUserProfileDlRemove {\n  type: typeof USERPROFILE_DL_REMOVE;\n  dlGroup: string;\n  userEmail: string;\n  tenant: string;\n}\n\n/**\n * Action: remove the profile's from DL succeed.\n * @interface\n */\nexport interface IUserProfileDlRemoveSuccess {\n  type: typeof USERPROFILE_DL_REMOVE_SUCCESS;\n}\n\n/**\n * Action: remove the profile's from DL fail.\n * @interface\n */\nexport interface IUserProfileDlRemoveFail {\n  type: typeof USERPROFILE_DL_REMOVE_FAIL;\n  error: string;\n}\n\n/**\n * Action: remove the profile's from all DL.\n * @interface\n */\nexport interface IUserProfileDlRemoveAll {\n  type: typeof USERPROFILE_DL_REMOVE_ALL;\n  userProfileId: number;\n  tenant: string;\n}\n\n/**\n * Action: remove the profile's from all DL succeed.\n * @interface\n */\nexport interface IUserProfileDlRemoveAllSuccess {\n  type: typeof USERPROFILE_DL_REMOVE_ALL_SUCCESS;\n}\n\n/**\n * Action: remove the profile's from all DL fail.\n * @interface\n */\nexport interface IUserProfileDlRemoveAllFail {\n  type: typeof USERPROFILE_DL_REMOVE_ALL_FAIL;\n  error: string;\n}\n\n/**\n * Action: update user's profile is private flag.\n * @interface\n */\nexport interface IUserProfileIsPrivateUpdate {\n  type: typeof USERPROFILE_UPDATE_IS_PRIVATE;\n  isPrivate: boolean;\n  userProfileId: number;\n}\n\n/**\n * Action: update user's profile is private flag success.\n * @interface\n */\nexport interface IUserProfileIsPrivateUpdateSuccess {\n  type: typeof USERPROFILE_UPDATE_IS_PRIVATE_SUCCESS;\n}\n\n/**\n * Action: update user's profile is private flag fail.\n * @interface\n */\nexport interface IUserProfileIsPrivateUpdateFail {\n  type: typeof USERPROFILE_UPDATE_IS_PRIVATE_FAIL;\n  error: string;\n}\n\n/**\n * Action: reset user profile.\n */\nexport interface IUserProfileFilterValueReset {\n  type: typeof USERPROFILES_FILTER_VALUE_RESET;\n}\n\n/*************** END INTERFACES *************** */\n\n/*************** BEGIN FUNCTIONS *************** */\n\n/**\n * Action used for getting profile benefits.\n * @param userProfileId the userProfileId to get benefits for.\n * @param tenant the tenant to get benefits for.\n * @returns {IGetProfileBenefits} the action.\n */\nexport function getProfileBenefits(userProfileId: number): UserProfileActionTypes {\n  return {\n    type: USERPROFILE_GET_PROFILE_BENEFITS,\n    userProfileId,\n  };\n}\n\n/**\n * Action used for getting profile benefits success.\n * @param userProfileBenefits the benefits for the profile.\n * @returns {IGetProfileBenefitsSuccess} the action.\n */\nexport function getProfileBenefitsSuccess(\n  userProfileBenefits: IProfileBenefitResult\n): UserProfileActionTypes {\n  return {\n    type: USERPROFILE_GET_PROFILE_BENEFITS_SUCCESS,\n    userProfileBenefits,\n  };\n}\n\n/**\n * Action used for getting profile benefits fail.\n * @param profileBenefitsErrorMessage the profileBenefitsError message to set\n * @returns {IGetProfileBenefitsFail} the action.\n */\nexport function profileBenefitsFail(profileBenefitsErrorMessage: string): UserProfileActionTypes {\n  return {\n    type: USERPROFILE_GET_PROFILE_BENEFITS_FAIL,\n    profileBenefitsErrorMessage,\n  };\n}\n\n/**\n * Action creator for the update program profile failure.\n * @param {string} message the error message returned\n * @returns {IUpdateProgramProfileFailure} the update program profile failure action.\n */\nexport function updateProgramProfileFailure(message: string): UserProfileActionTypes {\n  return {\n    type: USERPROFILE_UPDATE_PROGRAM_PROFILE_FAILURE,\n    message,\n  };\n}\n/**\n * Action creator for the Update ProgramProfile success.\n * @param {IProgramProfile} programProfile the updated program profile details.\n * @returns {IUpdateProgramProfileSuccess} the update program profile success action.\n */\nexport function updateProgramProfileSuccess(\n  programProfile: IProgramProfile\n): UserProfileActionTypes {\n  return {\n    type: USERPROFILE_UPDATE_PROGRAM_PROFILE_SUCCESS,\n    programProfile,\n  };\n}\n\n/**\n * Action creator for Update Program Profile.\n * @param {IProgramProfile} programProfile the program profile to update.\n * @returns {IUpdateProgramProfile} the update program profile action.\n */\nexport function updateProgramProfile(programProfile: IProgramProfile): UserProfileActionTypes {\n  return {\n    type: USERPROFILE_UPDATE_PROGRAM_PROFILE,\n    programProfile,\n  };\n}\n\n/**\n * Action creator for UPDATE_LISTING_CURRENT_PAGE.\n */\nexport function updateCurrentPage(currentPage: number): UserProfileActionTypes {\n  return {\n    type: UPDATE_LISTING_CURRENT_PAGE,\n    currentPage,\n  };\n}\n\n/**\n * Action creator for UPDATE_LISTING_PAGE_SIZE.\n */\nexport function updatePageSize(pageSize: number): UserProfileActionTypes {\n  return {\n    type: UPDATE_LISTING_PAGE_SIZE,\n    pageSize,\n  };\n}\n\n/**\n * Action creator for USERPROFILES_SEARCH.\n */\nexport function searchUserProfiles(\n  searchText: string,\n  selectedUserProfilesFilterValues: IFilterValue[],\n  searchPage: number,\n  pageSize: number\n): UserProfileActionTypes {\n  return {\n    type: USERPROFILES_SEARCH,\n    searchText,\n    selectedUserProfilesFilterValues,\n    searchPage,\n    pageSize,\n  };\n}\n\n/**\n * Action creator for USERPROFILES_SEARCH_SUCCESS.\n * @param userProfiles the user profiles successfully searched.\n */\nexport function searchUserProfilesSuccess(\n  userProfiles: IUserProfile[],\n  searchPage: number,\n  pageSize: number,\n  filteredCount: number\n): UserProfileActionTypes {\n  return {\n    type: USERPROFILES_SEARCH_SUCCESS,\n    userProfiles,\n    searchPage,\n    filteredCount,\n    pageSize,\n  };\n}\n\n/**\n * Action creator for USERPROFILES_SEARCH_FAIL.\n * @param error the error message from the API.\n */\nexport function searchUserProfilesFail(error: string): UserProfileActionTypes {\n  return {\n    type: USERPROFILES_SEARCH_FAIL,\n    error,\n  };\n}\n\n/**\n * Action creator for USERPROFILES_FILTER_VALUE_ADD.\n * @param error the error message from the API.\n */\nexport function addUserProfilesFilterValue(filterValue: IFilterValue): UserProfileActionTypes {\n  return {\n    type: USERPROFILES_FILTER_VALUE_ADD,\n    filterValue,\n  };\n}\n\n/**\n * Action creator for USERPROFILES_FILTER_VALUE_REMOVE.\n * @param error the error message from the API.\n */\nexport function removeUserProfilesFilterValue(filterValue: IFilterValue): UserProfileActionTypes {\n  return {\n    type: USERPROFILES_FILTER_VALUE_REMOVE,\n    filterValue,\n  };\n}\n\n/**\n * Action creator for USERPROFILES_FILTER_PROVINCE_VALUE_REMOVE.\n */\nexport function removeUserProfilesFilterProvinceValue(): UserProfileActionTypes {\n  return {\n    type: USERPROFILES_FILTER_PROVINCE_VALUE_REMOVE,\n  };\n}\n\n/**\n * Action creator for USERPROFILES_FILTER_VALUE_UPDATE.\n * @param error the error message from the API.\n */\nexport function updateUserProfilesFilterValue(filterValue: IFilterValue): UserProfileActionTypes {\n  return {\n    type: USERPROFILES_FILTER_VALUE_UPDATE,\n    filterValue,\n  };\n}\n\n/**\n * Action creator for USERPROFILE_LOAD.\n * @param userProfileId the id of the user profile to load.\n */\nexport function loadUserProfile(userProfileId: number): UserProfileActionTypes {\n  return {\n    type: USERPROFILE_LOAD,\n    userProfileId,\n  };\n}\n\n/**\n * Action creator for USERPROFILE_LOAD_BY_EMAIL.\n * @param {string} email the id of the user profile to load.\n * @returns {UserProfileActionTypes} The action type.\n */\nexport function loadUserProfileByEmail(email: string): UserProfileActionTypes {\n  return {\n    type: USERPROFILE_LOAD_BY_EMAIL,\n    email,\n  };\n}\n\n/**\n * Action creator for USERPROFILE_LOAD_SUCCESS.\n * @param userProfile the user profile successfully loaded.\n */\nexport function loadUserProfileSuccess(userProfile: IUserProfile): UserProfileActionTypes {\n  return {\n    type: USERPROFILE_LOAD_SUCCESS,\n    userProfile,\n  };\n}\n\n/**\n * Action creator for USERPROFILE_LOAD_FAIL.\n * @param error the error message from the API.\n */\nexport function loadUserProfileFail(error: string): UserProfileActionTypes {\n  return {\n    type: USERPROFILE_LOAD_FAIL,\n    error,\n  };\n}\n\n/**\n * Action creator for UPDATE_USERPROFILE_ID.\n */\nexport function updateSelectedUserProfileId(userProfileId: number): UserProfileActionTypes {\n  return {\n    type: UPDATE_USERPROFILE_ID,\n    userProfileId,\n  };\n}\n\n/**\n * Action creator for UPDATE_USERPROFILE.\n */\nexport function updateUserProfile(userProfile: IUserProfile): UserProfileActionTypes {\n  return {\n    type: USERPROFILE_UPDATE,\n    userProfile,\n  };\n}\n\n/**\n * Action creator for USERPROFILE_UPDATE_SUCCESS.\n * @param userProfile the user profile successfully updated.\n */\nexport function updateUserProfileSuccess(userProfile: IUserProfile): UserProfileActionTypes {\n  return {\n    type: USERPROFILE_UPDATE_SUCCESS,\n    userProfile,\n  };\n}\n\n/**\n * Action creator for USERPROFILE_UPDATE_COMMENTS_FAIL.\n * @param error the error message from the API.\n */\nexport function updateUserProfileFail(error: string): UserProfileActionTypes {\n  return {\n    type: USERPROFILE_UPDATE_FAIL,\n    error,\n  };\n}\n\n/**\n * Action creator for USERPROFILE_LOAD_COMMENTS.\n */\nexport function loadUserProfileComments(userProfileId: number): UserProfileActionTypes {\n  return {\n    type: USERPROFILE_LOAD_COMMENTS,\n    userProfileId,\n  };\n}\n\n/**\n * Action creator for USERPROFILE_LOAD_COMMENTS_SUCCESS.\n * @param userProfileComments the user profile comment successfully loaded.\n */\nexport function loadUserProfileCommentsSuccess(\n  userProfileComments: IUserProfileComment[]\n): UserProfileActionTypes {\n  return {\n    type: USERPROFILE_LOAD_COMMENTS_SUCCESS,\n    userProfileComments,\n  };\n}\n\n/**\n * Action creator for USERPROFILE_LOAD_COMMENTS_FAIL.\n * @param error the error message from the API.\n */\nexport function loadUserProfileCommentsFail(error: string): UserProfileActionTypes {\n  return {\n    type: USERPROFILE_LOAD_COMMENTS_FAIL,\n    loadCommentsError: error,\n  };\n}\n\n/**\n * Action creator for USERPROFILE_ADD_COMMENT.\n * @param userProfileId The user profile id.\n * @param newComment The new comment.\n * @param createdBy The user who created the comment.\n */\nexport function addNewComment(\n  userProfileId: number,\n  newComment: string,\n  createdBy: string\n): UserProfileActionTypes {\n  return {\n    type: USERPROFILE_ADD_COMMENT,\n    userProfileId,\n    newComment,\n    createdBy,\n  };\n}\n\n/**\n * Action creator for USERPROFILE_ADD_COMMENT_SUCCESS.\n * @param userProfileId The user profile id.\n */\nexport function addNewCommentSuccess(userProfileId: number): UserProfileActionTypes {\n  return {\n    type: USERPROFILE_ADD_COMMENT_SUCCESS,\n    userProfileId,\n  };\n}\n\n/**\n * Action creator for USERPROFILE_ADD_COMMENT_FAIL.\n * @param errorMessage The error message.\n */\nexport function addNewCommentFail(errorMessage: string): UserProfileActionTypes {\n  return {\n    type: USERPROFILE_ADD_COMMENT_FAIL,\n    errorMessage,\n  };\n}\n\n/**\n * Action creator for USERPROFILE_UPDATE_COMMENT.\n */\nexport function updateUserProfileComment(\n  userProfileComment: IUserProfileComment\n): UserProfileActionTypes {\n  return {\n    type: USERPROFILE_UPDATE_COMMENT,\n    userProfileComment,\n  };\n}\n\n/**\n * Action creator for USERPROFILE_UPDATE_COMMENT_SUCCESS.\n * @param userProfileComment the user profile comment successfully updated.\n */\nexport function updateUserProfileCommentSuccess(\n  userProfileComment: IUserProfileComment\n): UserProfileActionTypes {\n  return {\n    type: USERPROFILE_UPDATE_COMMENT_SUCCESS,\n    userProfileComment,\n  };\n}\n\n/**\n * Action creator for USERPROFILE_UPDATE_COMMENT_FAIL.\n * @param error the error message from the API.\n */\nexport function updateUserProfileCommentFail(error: string): UserProfileActionTypes {\n  return {\n    type: USERPROFILE_UPDATE_COMMENT_FAIL,\n    error,\n  };\n}\n\n/**\n * Action creator for USERPROFILE_LOAD_VSBENEFITS.\n */\nexport function loadUserProfileVSBenefit(userProfileId: number): UserProfileActionTypes {\n  return {\n    type: USERPROFILE_LOAD_VSBENEFITS,\n    userProfileId,\n  };\n}\n\n/**\n * Action creator for USERPROFILE_LOAD_VSBENEFITS_SUCCESS.\n * @param userProfileVSBenefits the user profile benefits successfully loaded.\n */\nexport function loadUserProfileVSBenefitSuccess(\n  userProfileVSBenefit: IUserProfileVSBenefit\n): UserProfileActionTypes {\n  return {\n    type: USERPROFILE_LOAD_VSBENEFITS_SUCCESS,\n    userProfileVSBenefit,\n  };\n}\n\n/**\n * Action creator for USERPROFILE_LOAD_VSBENEFITS_FAIL.\n * @param loadVSBenefitsError the error message from the API.\n */\nexport function loadUserProfileVSBenefitFail(error: string): UserProfileActionTypes {\n  return {\n    type: USERPROFILE_LOAD_VSBENEFITS_FAIL,\n    error,\n  };\n}\n\n/**\n * Action creator for USERPROFILE_PROVISION_VSBENEFITS.\n */\nexport function provisionUserProfileVSBenefit(userProfileId: number): UserProfileActionTypes {\n  return {\n    type: USERPROFILE_PROVISION_VSBENEFITS,\n    userProfileId,\n  };\n}\n\n/**\n * Action creator for USERPROFILE_PROVISION_VSBENEFITS_SUCCESS.\n * @param userProfileVSBenefitRequest the user profile benefits successfully loaded.\n */\nexport function provisionUserProfileVSBenefitSuccess(\n  userProfileVSBenefitRequest: IUserProfileVSBenefitsUpdateRequest\n): UserProfileActionTypes {\n  return {\n    type: USERPROFILE_PROVISION_VSBENEFITS_SUCCESS,\n    userProfileVSBenefitRequest,\n  };\n}\n\n/**\n * Action creator for USERPROFILE_PROVISION_VSBENEFITS_FAIL.\n * @param error the error message from the API.\n */\nexport function provisionUserProfileVSBenefitFail(error: string): UserProfileActionTypes {\n  return {\n    type: USERPROFILE_PROVISION_VSBENEFITS_FAIL,\n    error,\n  };\n}\n\n/**\n * Action creator for USERPROFILE_EXTEND_VSBENEFITS.\n */\nexport function extendUserProfileVSBenefit(userProfileId: number): UserProfileActionTypes {\n  return {\n    type: USERPROFILE_EXTEND_VSBENEFITS,\n    userProfileId,\n  };\n}\n\n/**\n * Action creator for USERPROFILE_EXTEND_VSBENEFITS_SUCCESS.\n * @param userProfileComments the user profile benefits successfully loaded.\n */\nexport function extendUserProfileVSBenefitSuccess(\n  userProfileVSBenefitRequest: IUserProfileVSBenefitsUpdateRequest\n): UserProfileActionTypes {\n  return {\n    type: USERPROFILE_EXTEND_VSBENEFITS_SUCCESS,\n    userProfileVSBenefitRequest,\n  };\n}\n\n/**\n * Action creator for USERPROFILE_EXTEND_VSBENEFITS_FAIL.\n * @param error the error message from the API.\n */\nexport function extendUserProfileVSBenefitFail(error: string): UserProfileActionTypes {\n  return {\n    type: USERPROFILE_EXTEND_VSBENEFITS_FAIL,\n    error,\n  };\n}\n\n/**\n * Action creator for USERPROFILE_END_VSBENEFITS.\n */\nexport function endUserProfilVSBenefit(userProfileId: number): UserProfileActionTypes {\n  return {\n    type: USERPROFILE_END_VSBENEFITS,\n    userProfileId,\n  };\n}\n\n/**\n * Action creator for USERPROFILE_END_VSBENEFITS_SUCCESS.\n * @param   userProfileVSBenefitRequest: IUserProfileVSBenefitsUpdateRequest\n the user profile benefits successfully loaded.\n */\nexport function endUserProfileVSBenefitSuccess(\n  userProfileVSBenefitRequest: IUserProfileVSBenefitsUpdateRequest\n): UserProfileActionTypes {\n  return {\n    type: USERPROFILE_END_VSBENEFITS_SUCCESS,\n    userProfileVSBenefitRequest,\n  };\n}\n\n/**\n * Action creator for USERPROFILE_END_VSBENEFITS_FAIL.\n * @param error the error message from the API.\n */\nexport function endUserProfileVSBenefitFail(error: string): UserProfileActionTypes {\n  return {\n    type: USERPROFILE_EXTEND_VSBENEFITS_FAIL,\n    error,\n  };\n}\n\n/**\n * Action creator for USERPROFILE_VSBENEFITS_RESET.\n * @returns {IUserProfileVSBenefitsReset}\n */\nexport function userProfileVSBenefitReset(): IUserProfileVSBenefitsReset {\n  return {\n    type: USERPROFILE_VSBENEFITS_RESET,\n  };\n}\n\n/**\n * Action creator for USERPROFILE_CLAIM_BENEFIT.\n * @param {string} benefitType The selected benefit type to claim.\n * @param {number} userProfileId The user profile id to claim the benefit for.\n * @param {string} tenant The tenant to claim the benefit for.\n * @returns {UserProfileActionTypes}\n */\nexport function claimBenefit(\n  benefitType: string,\n  userProfileId: number,\n  tenant: string = TenantTypesEnum.MLSA\n): IClaimBenefit {\n  return {\n    type: USERPROFILE_CLAIM_BENEFIT,\n    benefitType,\n    userProfileId,\n    tenant,\n  };\n}\n\n/**\n * Action creator for USERPROFILE_CLAIM_BENEFIT_SUCCESS.\n * @returns {UserProfileActionTypes}\n */\nexport function claimBenefitSuccess(): UserProfileActionTypes {\n  return {\n    type: USERPROFILE_CLAIM_BENEFIT_SUCCESS,\n  };\n}\n\n/**\n * Action creator for USERPROFILE_CLAIM_BENEFIT_FAIL.\n * @param {string} error The error message from the API.\n * @returns {UserProfileActionTypes}\n */\nexport function claimBenefitFail(error: string): UserProfileActionTypes {\n  return {\n    type: USERPROFILE_CLAIM_BENEFIT_FAIL,\n    error,\n  };\n}\n\n/**\n * Action creator for USERPROFILE_CLAIM_BENEFIT_RESET.\n * @returns {IClaimBenefitReset}\n */\nexport function claimBenefitReset(): IClaimBenefitReset {\n  return {\n    type: USERPROFILE_CLAIM_BENEFIT_RESET,\n  };\n}\n\n/**\n * Action creator for USERPROFILE_FETCH_PROGRAM_PROFILE.\n * @param programProfileId The program profile id.\n */\nexport function fetchProgramProfile(programProfileId: number): IFetchProgramProfile {\n  return {\n    type: USERPROFILE_FETCH_PROGRAM_PROFILE,\n    programProfileId,\n  };\n}\n\n/**\n * Action creator for USERPROFILE_FETCH_PROGRAM_PROFILE_SUCCESS.\n * @param userProfile The user profile.\n */\nexport function fetchProgramProfileSuccess(\n  programProfile: IProgramProfile\n): IFetchProgramProfileSuccess {\n  return {\n    type: USERPROFILE_FETCH_PROGRAM_PROFILE_SUCCESS,\n    programProfile,\n  };\n}\n\n/**\n * Action creator for USERPROFILE_FETCH_PROGRAM_PROFILE_FAIL.\n * @param errorMessage The error message.\n */\nexport function fetchProgramProfileFail(errorMessage: string): IFetchProgramProfileFail {\n  return {\n    type: USERPROFILE_FETCH_PROGRAM_PROFILE_FAIL,\n    errorMessage,\n  };\n}\n\n/**\n * Action creator for USERPROFILE_UPDATE_BLOCK_SHIPPING.\n * @returns {IUserProfileUpdateBlockShipping}\n */\nexport function userProfileUpdateBlockShipping(\n  isShippingBlocked: boolean,\n  userProfileId: number\n): IUserProfileUpdateBlockShipping {\n  return {\n    type: USERPROFILE_UPDATE_BLOCK_SHIPPING,\n    userProfileId,\n    isShippingBlocked,\n  };\n}\n\n/**\n * Action creator for USERPROFILE_UPDATE_BLOCK_SHIPPING_FAIL.\n * @returns {IUserProfileUpdateBlockShippingFail}\n */\nexport function userProfileUpdateBlockShippingFail(\n  errorMessage: string\n): IUserProfileUpdateBlockShippingFail {\n  return {\n    type: USERPROFILE_UPDATE_BLOCK_SHIPPING_FAIL,\n    errorMessage,\n  };\n}\n\n/**\n * Action creator for USERPROFILE_UPDATE_BLOCK_SHIPPING_SUCCESS.\n * @returns {IUserProfileUpdateBlockShippingSuccess}\n */\nexport function userProfileUpdateBlockShippingSuccess(\n  userProfileId: number\n): IUserProfileUpdateBlockShippingSuccess {\n  return {\n    type: USERPROFILE_UPDATE_BLOCK_SHIPPING_SUCCESS,\n    userProfileId,\n  };\n}\n\n/**\n * Action creator for USERPROFILE_DL_LOAD.\n * @returns {IUserProfileDlLoad}\n */\nexport function userProfileDlLoad(userProfileId: number, tenant: string): IUserProfileDlLoad {\n  return {\n    type: USERPROFILE_DL_LOAD,\n    userProfileId,\n    tenant,\n  };\n}\n\n/**\n * Action creator for USERPROFILE_DL_LOAD_SUCCESS.\n * @returns {IUserProfileDlLoadSuccess}\n */\nexport function userProfileDlLoadSuccess(distributionLists: any): IUserProfileDlLoadSuccess {\n  return {\n    type: USERPROFILE_DL_LOAD_SUCCESS,\n    distributionLists,\n  };\n}\n\n/**\n * Action creator for USERPROFILE_DL_LOAD_FAIL.\n * @returns {IUserProfileDlLoadFail}\n */\nexport function userProfileDlLoadFail(error: string): IUserProfileDlLoadFail {\n  return {\n    type: USERPROFILE_DL_LOAD_FAIL,\n    error,\n  };\n}\n\n/**\n * Action creator for USERPROFILE_DL_REMOVE.\n * @returns {IUserProfileDlRemove}\n */\nexport function userProfileDlRemove(\n  dlGroup: string,\n  userEmail: string,\n  tenant: string\n): IUserProfileDlRemove {\n  return {\n    type: USERPROFILE_DL_REMOVE,\n    dlGroup,\n    userEmail,\n    tenant,\n  };\n}\n\n/**\n * Action creator for USERPROFILE_DL_REMOVE_SUCCESS.\n * @returns {IUserProfileDlRemove}\n */\nexport function userProfileDlRemoveSuccess(): IUserProfileDlRemoveSuccess {\n  return {\n    type: USERPROFILE_DL_REMOVE_SUCCESS,\n  };\n}\n\n/**\n * Action creator for USERPROFILE_DL_REMOVE_SUCCESS.\n * @returns {IUserProfileDlRemoveFail}\n */\nexport function userProfileDlRemoveFail(error: string): IUserProfileDlRemoveFail {\n  return {\n    type: USERPROFILE_DL_REMOVE_FAIL,\n    error,\n  };\n}\n\n/**\n * Action creator for USERPROFILE_DL_REMOVE_ALL.\n * @returns {IUserProfileDlRemoveAll}\n */\nexport function userProfileDlRemoveAll(\n  userProfileId: number,\n  tenant: string\n): IUserProfileDlRemoveAll {\n  return {\n    type: USERPROFILE_DL_REMOVE_ALL,\n    userProfileId,\n    tenant,\n  };\n}\n\n/**\n * Action creator for USERPROFILE_DL_REMOVE_ALL_SUCCESS.\n * @returns {IUserProfileDlRemoveAll}\n */\nexport function userProfileDlRemoveAllSuccess(): IUserProfileDlRemoveAllSuccess {\n  return {\n    type: USERPROFILE_DL_REMOVE_ALL_SUCCESS,\n  };\n}\n\n/**\n * Action creator for USERPROFILE_DL_REMOVE_ALL_FAIL.\n * @returns {IUserProfileDlRemoveAllFail}\n */\nexport function userProfileDlRemoveAllFail(error: string): IUserProfileDlRemoveAllFail {\n  return {\n    type: USERPROFILE_DL_REMOVE_ALL_FAIL,\n    error,\n  };\n}\n\n/**\n * Action creator for USERPROFILE_UPDATE_IS_PRIVATE.\n * @returns {IUserProfileIsPrivateUpdate}\n */\nexport function userProfileIsPrivateUpdate(\n  isPrivate: boolean,\n  userProfileId: number\n): IUserProfileIsPrivateUpdate {\n  return {\n    type: USERPROFILE_UPDATE_IS_PRIVATE,\n    isPrivate,\n    userProfileId,\n  };\n}\n\n/**\n * Action creator for USERPROFILE_UPDATE_IS_PRIVATE_SUCCESS.\n * @returns {IUserProfileIsPrivateUpdateSuccess}\n */\nexport function userProfileIsPrivateUpdateSuccess(): IUserProfileIsPrivateUpdateSuccess {\n  return {\n    type: USERPROFILE_UPDATE_IS_PRIVATE_SUCCESS,\n  };\n}\n\n/**\n * Action creator for USERPROFILE_UPDATE_IS_PRIVATE_FAIL.\n * @returns {IUserProfileIsPrivateUpdate}\n */\nexport function userProfileIsPrivateUpdateFail(error: string): IUserProfileIsPrivateUpdateFail {\n  return {\n    type: USERPROFILE_UPDATE_IS_PRIVATE_FAIL,\n    error,\n  };\n}\n\n/**\n * Action creator for USERPROFILES_RESET.\n * @returns {IUserProfileFilterValueReset}\n */\nexport function resetUserProfileFilterValue(): IUserProfileFilterValueReset {\n  return {\n    type: USERPROFILES_FILTER_VALUE_RESET,\n  };\n}\n\n/*************** END FUNCTIONS *************** */\n\nexport type UserProfileActionTypes =\n  | IUpdateCurrentPage\n  | IUpdatePageSize\n  | ISearchUserProfiles\n  | ISearchUserProfilesSuccess\n  | ISearchUserProfilesFail\n  | IUserProfilesFilterValueAdd\n  | IUserProfilesFilterValueRemove\n  | IUserProfilesFilterProvinceValueRemove\n  | IUserProfilesFilterValueUpdate\n  | ILoadUserProfile\n  | ILoadUserProfileByEmail\n  | ILoadUserProfileSuccess\n  | ILoadUserProfileFail\n  | IUpdateUserProfileId\n  | IUpdateUserProfile\n  | IUpdateUserProfileSuccess\n  | IUpdateUserProfileFail\n  | ILoadUserProfileComments\n  | ILoadUserProfileCommentsSuccess\n  | ILoadUserProfileCommentsFail\n  | IUpdateUserProfileComment\n  | IUpdateUserProfileCommentSuccess\n  | IUpdateUserProfileCommentFail\n  | ILoadUserProfileVSBenefits\n  | ILoadUserProfileVSBenefitsSuccess\n  | ILoadUserProfileVSBenefitsFail\n  | IProvisionUserProfileVSBenefits\n  | IProvisionUserProfileVSBenefitsSuccess\n  | IProvisionUserProfileVSBenefitsFail\n  | IExtendUserProfileVSBenefits\n  | IExtendUserProfileVSBenefitsSuccess\n  | IExtendUserProfileVSBenefitsFail\n  | IEndUserProfileVSBenefits\n  | IEndUserProfileVSBenefitsSuccess\n  | IEndUserProfileVSBenefitsFail\n  | IUserProfileVSBenefitsReset\n  | IUpdateProgramProfile\n  | IUpdateProgramProfileSuccess\n  | IUpdateProgramProfileFailure\n  | IClaimBenefit\n  | IClaimBenefitSuccess\n  | IClaimBenefitFail\n  | IClaimBenefitReset\n  | IGetProfileBenefits\n  | IGetProfileBenefitsFail\n  | IGetProfileBenefitsSuccess\n  | IFetchProgramProfile\n  | IFetchProgramProfileFail\n  | IFetchProgramProfileSuccess\n  | IAddNewComment\n  | IAddNewCommentFail\n  | IAddNewCommentSuccess\n  | IUserProfileUpdateBlockShipping\n  | IUserProfileUpdateBlockShippingFail\n  | IUserProfileUpdateBlockShippingSuccess\n  | IUserProfileDlLoad\n  | IUserProfileDlLoadSuccess\n  | IUserProfileDlLoadFail\n  | IUserProfileDlRemove\n  | IUserProfileDlRemoveSuccess\n  | IUserProfileDlRemoveFail\n  | IUserProfileDlRemoveAll\n  | IUserProfileDlRemoveAllSuccess\n  | IUserProfileDlRemoveAllFail\n  | IUserProfileIsPrivateUpdate\n  | IUserProfileIsPrivateUpdateSuccess\n  | IUserProfileIsPrivateUpdateFail\n  | IUserProfileFilterValueReset;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\n/**\n * User Profiles\n */\nexport const UPDATE_LISTING_CURRENT_PAGE = \"UPDATE_LISTING_CURRENT_PAGE\";\nexport const UPDATE_LISTING_PAGE_SIZE = \"UPDATE_LISTING_PAGE_SIZE\";\n\nexport const USERPROFILES_FILTER_VALUE_ADD = \"USERPROFILES_FILTER_VALUE_ADD\";\nexport const USERPROFILES_FILTER_VALUE_REMOVE = \"USERPROFILES_FILTER_VALUE_REMOVE\";\nexport const USERPROFILES_FILTER_PROVINCE_VALUE_REMOVE =\n  \"USERPROFILES_FILTER_PROVINCE_VALUE_REMOVE\";\nexport const USERPROFILES_FILTER_VALUE_UPDATE = \"USERPROFILES_FILTER_VALUE_UPDATE\";\nexport const USERPROFILES_FILTER_VALUE_RESET = \"USERPROFILES_FILTER_VALUE_RESET\";\n\n/**\n * Individual user profile\n */\nexport const USERPROFILES_SEARCH_SUCCESS = \"USERPROFILES_SEARCH_SUCCESS\";\nexport const USERPROFILES_SEARCH = \"USERPROFILES_SEARCH\";\nexport const USERPROFILES_SEARCH_FAIL = \"USERPROFILES_SEARCH_FAIL\";\n\nexport const USERPROFILE_LOAD_SUCCESS = \"USERPROFILE_LOAD_SUCCESS\";\nexport const USERPROFILE_LOAD = \"USERPROFILE_LOAD\";\nexport const USERPROFILE_LOAD_BY_EMAIL = \"USERPROFILE_LOAD_BY_EMAIL\";\nexport const USERPROFILE_LOAD_FAIL = \"USERPROFILE_LOAD_FAIL\";\n\n/**\n * Program profile\n */\nexport const USERPROFILE_FETCH_PROGRAM_PROFILE = \"USERPROFILE_FETCH_PROGRAM_PROFILE\";\nexport const USERPROFILE_FETCH_PROGRAM_PROFILE_FAIL = \"USERPROFILE_FETCH_PROGRAM_PROFILE_FAIL\";\nexport const USERPROFILE_FETCH_PROGRAM_PROFILE_SUCCESS =\n  \"USERPROFILE_FETCH_PROGRAM_PROFILE_SUCCESS\";\nexport const USERPROFILE_UPDATE_PROGRAM_PROFILE = \"USERPROFILE_UPDATE_PROGRAM_PROFILE\";\nexport const USERPROFILE_UPDATE_PROGRAM_PROFILE_SUCCESS =\n  \"USERPROFILE_UPDATE_PROGRAM_PROFILE_SUCCESS\";\nexport const USERPROFILE_UPDATE_PROGRAM_PROFILE_FAILURE =\n  \"USERPROFILE_UPDATE_PROGRAM_PROFILE_FAILURE\";\n\n/**\n * Update\n */\nexport const UPDATE_USERPROFILE_ID = \"UPDATE_USERPROFILE_ID\";\n\nexport const USERPROFILE_UPDATE_SUCCESS = \"USERPROFILE_UPDATE_SUCCESS\";\nexport const USERPROFILE_UPDATE = \"USERPROFILE_UPDATE\";\nexport const USERPROFILE_UPDATE_FAIL = \"USERPROFILE_UPDATE_FAIL\";\n\nexport const USERPROFILE_UPDATE_BLOCK_SHIPPING = \"USERPROFILE_UPDATE_BLOCK_SHIPPING\";\nexport const USERPROFILE_UPDATE_BLOCK_SHIPPING_FAIL = \"USERPROFILE_UPDATE_BLOCK_SHIPPING_FAIL\";\nexport const USERPROFILE_UPDATE_BLOCK_SHIPPING_SUCCESS =\n  \"USERPROFILE_UPDATE_BLOCK_SHIPPING_SUCCESS\";\n\nexport const USERPROFILE_UPDATE_IS_PRIVATE = \"USERPROFILE_UPDATE_IS_PRIVATE\";\nexport const USERPROFILE_UPDATE_IS_PRIVATE_FAIL = \"USERPROFILE_UPDATE_IS_PRIVATE_FAIL\";\nexport const USERPROFILE_UPDATE_IS_PRIVATE_SUCCESS = \"USERPROFILE_UPDATE_IS_PRIVATE_SUCCESS\";\n\n/**\n * Comments\n */\nexport const USERPROFILE_LOAD_COMMENTS_SUCCESS = \"USERPROFILE_LOAD_COMMENTS_SUCCESS\";\nexport const USERPROFILE_LOAD_COMMENTS = \"USERPROFILE_LOAD_COMMENTS\";\nexport const USERPROFILE_LOAD_COMMENTS_FAIL = \"USERPROFILE_LOAD_COMMENTS_FAIL\";\n\nexport const USERPROFILE_UPDATE_COMMENT_SUCCESS = \"USERPROFILE_UPDATE_COMMENT_SUCCESS\";\nexport const USERPROFILE_UPDATE_COMMENT = \"USERPROFILE_UPDATE_COMMENT\";\nexport const USERPROFILE_UPDATE_COMMENT_FAIL = \"USERPROFILE_UPDATE_COMMENT_FAIL\";\n\nexport const USERPROFILE_ADD_COMMENT = \"USERPROFILE_ADD_COMMENT\";\nexport const USERPROFILE_ADD_COMMENT_FAIL = \"USERPROFILE_ADD_COMMENT_FAIL\";\nexport const USERPROFILE_ADD_COMMENT_SUCCESS = \"USERPROFILE_ADD_COMMENT_SUCCESS\";\n\n/**\n * Distribution Lists\n */\nexport const USERPROFILE_DL_LOAD = \"USERPROFILE_DL_LOAD\";\nexport const USERPROFILE_DL_LOAD_FAIL = \"USERPROFILE_DL_LOAD_FAIL\";\nexport const USERPROFILE_DL_LOAD_SUCCESS = \"USERPROFILE_DL_LOAD_SUCCESS\";\n\nexport const USERPROFILE_DL_REMOVE = \"USERPROFILE_DL_REMOVE\";\nexport const USERPROFILE_DL_REMOVE_FAIL = \"USERPROFILE_DL_REMOVE_FAIL\";\nexport const USERPROFILE_DL_REMOVE_SUCCESS = \"USERPROFILE_DL_REMOVE_SUCCESS\";\n\nexport const USERPROFILE_DL_REMOVE_ALL = \"USERPROFILE_DL_REMOVE_ALL\";\nexport const USERPROFILE_DL_REMOVE_ALL_SUCCESS = \"USERPROFILE_DL_REMOVE_ALL_SUCCESS\";\nexport const USERPROFILE_DL_REMOVE_ALL_FAIL = \"USERPROFILE_DL_REMOVE_ALL_FAIL\";\n\n/**\n * Benefits\n */\nexport const USERPROFILE_CLAIM_BENEFIT = \"USERPROFILE_CLAIM_BENEFIT\";\nexport const USERPROFILE_CLAIM_BENEFIT_FAIL = \"USERPROFILE_CLAIM_BENEFIT_FAIL\";\nexport const USERPROFILE_CLAIM_BENEFIT_SUCCESS = \"USERPROFILE_CLAIM_BENEFIT_SUCCESS\";\nexport const USERPROFILE_CLAIM_BENEFIT_RESET = \"USERPROFILE_CLAIM_BENEFIT_RESET\";\nexport const USERPROFILE_VSBENEFITS_RESET = \"USERPROFILE_VSBENEFITS_RESET\";\nexport const USERPROFILE_LOAD_VSBENEFITS = \"USERPROFILE_LOAD_VSBENEFITS\";\nexport const USERPROFILE_LOAD_VSBENEFITS_FAIL = \"USERPROFILE_LOAD_VSBENEFITS_FAIL\";\nexport const USERPROFILE_LOAD_VSBENEFITS_SUCCESS = \"USERPROFILE_LOAD_VSBENEFITS_SUCCESS\";\nexport const USERPROFILE_PROVISION_VSBENEFITS = \"USERPROFILE_PROVISION_VSBENEFITS\";\nexport const USERPROFILE_PROVISION_VSBENEFITS_FAIL = \"USERPROFILE_PROVISION_VSBENEFITS_FAIL\";\nexport const USERPROFILE_PROVISION_VSBENEFITS_SUCCESS = \"USERPROFILE_PROVISION_VSBENEFITS_SUCCESS\";\nexport const USERPROFILE_EXTEND_VSBENEFITS = \"USERPROFILE_EXTEND_VSBENEFITS\";\nexport const USERPROFILE_EXTEND_VSBENEFITS_FAIL = \"USERPROFILE_EXTEND_VSBENEFITS_FAIL\";\nexport const USERPROFILE_EXTEND_VSBENEFITS_SUCCESS = \"USERPROFILE_EXTEND_VSBENEFITS_SUCCESS\";\nexport const USERPROFILE_END_VSBENEFITS = \"USERPROFILE_END_VSBENEFITS\";\nexport const USERPROFILE_END_VSBENEFITS_FAIL = \"USERPROFILE_END_VSBENEFITS_FAIL\";\nexport const USERPROFILE_END_VSBENEFITS_SUCCESS = \"USERPROFILE_END_VSBENEFITS_SUCCESS\";\n\nexport const USERPROFILE_GET_PROFILE_BENEFITS = \"USERPROFILE_GET_PROFILE_BENEFITS\";\nexport const USERPROFILE_GET_PROFILE_BENEFITS_FAIL = \"USERPROFILE_GET_PROFILE_BENEFITS_FAIL\";\nexport const USERPROFILE_GET_PROFILE_BENEFITS_SUCCESS = \"USERPROFILE_GET_PROFILE_BENEFITS_SUCCESS\";\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { OperationStatus } from \"Constants/OperationStatus\";\nimport { AppState } from \"Dataflows/Reducers\";\nimport { IProfileBenefitResult } from \"Interfaces/Benefits/IProfileBenefitResult\";\nimport { IFilterValue } from \"Interfaces/IFilterValue\";\nimport { IOperationStatusType } from \"Interfaces/IOperationStatusType\";\nimport { IProgramProfile } from \"Interfaces/ProgramProfile/IProgramProfile\";\nimport { IDistributionList } from \"Interfaces/UserProfile/DistributionLists/IDistributionLists\";\nimport { IUserProfile } from \"Interfaces/UserProfile/IUserProfile\";\nimport { IUserProfileComment } from \"Interfaces/UserProfile/IUserProfileComment\";\nimport { IUserProfileVSBenefit } from \"Interfaces/UserProfile/IUserProfileVSBenefit\";\n\nimport { IUserProfileState } from \"./IUserProfileState\";\n\n/**\n * Returns current value from state for: userProfileId\n * @param userProfileState\n */\nexport const getUserProfileId = (userProfileState: IUserProfileState): number =>\n  userProfileState.userProfileId;\n\n/**\n * Returns current value from state for: userProfiles\n * @param userProfileState\n */\nexport const getUserProfiles = (userProfileState: IUserProfileState): IUserProfile[] =>\n  userProfileState.userProfiles;\n\n/**\n * Returns current value from state for: userProfiles\n * @param userProfileState\n */\nexport const getUserProfilesFilterValues = (userProfileState: IUserProfileState): IFilterValue[] =>\n  userProfileState.userProfileFilterValues;\n\n/**\n * Returns current value from state for: selectedUserProfile\n * @param userProfileState\n */\nexport const getUserProfile = (userProfileState: IUserProfileState): IUserProfile =>\n  userProfileState.selectedUserProfile;\n\nexport const getAppStateUserProfile = (state: AppState): IUserProfile =>\n  state.userProfileState.selectedUserProfile;\n\n/**\n * Returns current value from state for: isUserProfilesLoading\n * @param userProfileState\n */\nexport const isUserProfilesLoading = (userProfileState: IUserProfileState): boolean =>\n  userProfileState.isUserProfilesLoading;\n\n/**\n * Returns current value from state for: isSelectedUserProfileUpdating\n * @param userProfileState\n */\nexport const isSelectedUserProfileUpdating = (userProfileState: IUserProfileState): boolean =>\n  userProfileState.isSelectedUserProfileUpdating;\n\nexport const isAppStateSelectedUserProfileUpdating = (state: AppState): boolean =>\n  state.userProfileState.isSelectedUserProfileUpdating;\n\n/**\n * Returns current value from state for: isCurrentUserProfileLoading\n * @param userProfileState\n */\nexport const isCurrentUserProfileLoading = (userProfileState: IUserProfileState): boolean =>\n  userProfileState.isCurrentUserProfileLoading;\n\nexport const isAppStateCurrentUserProfileLoading = (state: AppState): boolean =>\n  state.userProfileState.isCurrentUserProfileLoading;\n\n/**\n * Returns current value from state for: error\n * @param userProfileState\n */\nexport const getLoadingError = (userProfileState: IUserProfileState): string =>\n  userProfileState.error;\n\n/**\n * Returns current value from state for: updateUserProfileError\n * @param userProfileState\n */\nexport const getUpdateUserProfileError = (userProfileState: IUserProfileState): string =>\n  userProfileState.updateUserProfileError;\n\nexport const getAppStateUpdateUserProfileError = (state: AppState): string =>\n  state.userProfileState.updateUserProfileError;\n\n// COMMENTS\n/**\n * Returns current value from state for: userProfileComments\n * @param userProfileState\n */\nexport const getUserProfileComments = (\n  userProfileState: IUserProfileState\n): IUserProfileComment[] | undefined => userProfileState.commentsState.userProfileComments;\n\nexport const getAppStateUserProfileComments = (\n  state: AppState\n): IUserProfileComment[] | undefined => state.userProfileState.commentsState.userProfileComments;\n\n/**\n * Returns current value from state for: isUserProfileCommentsLoading\n * @param userProfileState\n */\nexport const isUserProfileCommentsLoading = (userProfileState: IUserProfileState): boolean =>\n  userProfileState.isUserProfileCommentsLoading;\n\n/**\n * Returns current value from state for: loadCommentsError\n * @param userProfileState\n */\nexport const getLoadCommentsError = (state: AppState): string | undefined =>\n  state.userProfileState.commentsState?.commentsErrorMessage;\n\n// VSBENEFITS\n/**\n * Returns current value from state for: userProfileVSBenefit\n * @param userProfileState\n */\nexport const getUserProfileVSBenefit = (\n  userProfileState: IUserProfileState\n): IUserProfileVSBenefit | undefined => userProfileState.userProfileVSBenefit;\n\nexport const getAppStateUserProfileVSBenefit = (\n  state: AppState\n): IUserProfileVSBenefit | undefined => state.userProfileState.userProfileVSBenefit;\n\n/**\n * Returns current value from state for: isLoadingVSBenefits\n * @param userProfileState\n */\nexport const isLoadingVSBenefits = (userProfileState: IUserProfileState): boolean =>\n  userProfileState.isLoadingVSBenefits;\n\n/**\n * Returns current value from state for: loadVSBenefitsError\n * @param userProfileState\n */\nexport const getVSBenefitsFetchErrorMessage = (userProfileState: IUserProfileState): string =>\n  userProfileState.loadVSBenefitsError;\n\n/**\n * Returns current value from state for: isUpdatingVSBenefits\n * @param userProfileState\n */\nexport const isUpdatingVSBenefits = (userProfileState: IUserProfileState): boolean =>\n  userProfileState.isUpdatingVSBenefits;\n\n/**\n * Returns current value from state for: updateVSBenefitsError\n * @param userProfileState\n */\nexport const getVSBenefitsUpdateErrorMessage = (userProfileState: IUserProfileState): string =>\n  userProfileState.updateVSBenefitsError;\n\n// LISTING SEARCH AND PAGING\n/**\n * Returns current value from state for: currentPage\n * @param userProfileState\n */\nexport const getCurrentPage = (userProfileState: IUserProfileState): number =>\n  userProfileState.currentPage;\n\n/**\n * Returns current value from state for: pageSize\n * @param userProfileState\n */\nexport const getPageSize = (userProfileState: IUserProfileState): number =>\n  userProfileState.pageSize;\n\n/**\n * Returns current value from state for: searchText\n * @param userProfileState\n */\nexport const getSearchText = (userProfileState: IUserProfileState): string =>\n  userProfileState.searchText;\n\n/**\n * Returns the programProfileUpdateError message.\n * @param userProfileState\n */\nexport const getProgramProfileUpdateErrorMessage = (userProfileState: IUserProfileState): string =>\n  userProfileState.programProfileUpdateError;\n\nexport const getProgramProfileOperationStatus = (state: AppState): IOperationStatusType =>\n  state.userProfileState.programProfileOperationStatus;\n\nexport const getProgramProfileErrorMessage = (state: AppState): string =>\n  state.userProfileState.fetchProgramProfileError;\n\n/**\n * Returns the filtered count.\n * @param userProfileState\n */\nexport const getFilteredCount = (userProfileState: IUserProfileState): number =>\n  userProfileState.filteredCount;\n\n/**\n * Returns the isClaimingBenefit value.\n * @param {AppState} state\n * @returns {boolean}\n */\nexport const getIsClaimingBenefit = (state: AppState): boolean =>\n  state.userProfileState.isClaimingBenefit;\n\n/**\n * Returns the isClaimingBenefitSuccess value.\n * @param {AppState} state\n * @returns {boolean}\n */\nexport const getIsClaimingBenefitSuccess = (state: AppState): boolean =>\n  state.userProfileState.isClaimingBenefitSuccess;\n\n/**\n * Returns the isClaimingBenefitError value.\n * @param {AppState} state\n * @returns {string}\n */\nexport const getIsClaimingBenefitsError = (state: AppState): string =>\n  state.userProfileState.benefitsOperationStatus?.create === OperationStatus.Failed &&\n  !!state.userProfileState.claimBenefitError\n    ? state.userProfileState.claimBenefitError\n    : \"\";\n\n/**\n * Returns the getClaimingBenefitError value.\n * @param {AppState} state\n * @returns {boolean}\n */\nexport const getClaimingBenefitError = (state: AppState): string =>\n  state.userProfileState.claimBenefitError;\n\n/**\n * Returns the getProfileBenefits value.\n * @param {AppState} state\n * @returns {IProfileBenefitResult}\n */\nexport const getProfileBenefits = (state: AppState): IProfileBenefitResult =>\n  state.userProfileState.profileBenefits;\n\n/**\n * Returns the getProfileBenefitsStatus value.\n * @param {AppState} state\n * @returns {OperationStatus}\n */\nexport const getProfileBenefitsStatus = (state: AppState): OperationStatus =>\n  state.userProfileState.profileBenefitsStatus;\n\n/**\n * Returns the getProfileBenefitsErrorMessage value.\n * @param {AppState} state\n * @returns {string}\n */\nexport const getProfileBenefitsErrorMessage = (state: AppState): string =>\n  state.userProfileState.profileBenefitsErrorMessage;\n\n/**\n * Returns the getUpdateVSProfileBenefitsStatus value.\n * @param {AppState} state\n * @returns {OperationStatus}\n */\nexport const getUpdateVSProfileBenefitStatus = (state: AppState): OperationStatus =>\n  state.userProfileState.updatingVSBenefitOperationStatus;\n\n/**\n * Returns the getProfileBenefitsErrorMessage value.\n * @param {AppState} state\n * @returns {string}\n */\nexport const getUpdateVSProfileBenefitsError = (state: AppState): string =>\n  state.userProfileState.updateVSBenefitsError;\n\n/**\n * Returns program profile.\n * @param appState\n */\nexport const getProgramProfile = (state: AppState): IProgramProfile | undefined =>\n  state.userProfileState.selectedUserProfile.programProfile;\n\n/**\n * Returns loading status of user profile comments.\n * @param appState\n * @returns {boolean}\n */\nexport const getAddCommentOperationStatus = (state: AppState): OperationStatus | undefined =>\n  state.userProfileState.commentsState.commentsOperationStatus?.create;\n\n/**\n * Returns operation status of update blocked shipping.\n * @param appState\n * @returns {string}\n */\nexport const getUserProfileUpdateBlockShippingStatus = (\n  state: AppState\n): OperationStatus | undefined => state.userProfileState.updateBlockShippingOperationStatus;\n\n/**\n * Returns operation status of update blocked shipping.\n * @param appState\n * @returns {string}\n */\nexport const getUserProfileUpdateBlockShippingErrorMessage = (state: AppState): string =>\n  state.userProfileState.updateBlockShippingErrorMessage;\n\n/**\n * Returns distribution list details.\n * @param appState\n * @returns {IDistributionList[]}\n */\nexport const getUserProfileDl = (state: AppState): IDistributionList[] =>\n  state.userProfileState.distributionLists;\n\n/**\n * Returns distribution list details operation status.\n * @param appState\n * @returns {OperationStatus}\n */\nexport const getUserProfileDlLoadStatus = (state: AppState): OperationStatus =>\n  state.userProfileState.loadingDlStatus;\n\n/**\n * Returns distribution list remove operation status.\n * @param appState\n * @returns {OperationStatus}\n */\nexport const getUserProfileDlRemoveStatus = (state: AppState): OperationStatus =>\n  state.userProfileState.removingDlStatus;\n\n/**\n * Returns distribution list remove error.\n * @param appState\n * @returns {string}\n */\nexport const getUserProfileDlRemoveError = (state: AppState): string =>\n  state.userProfileState.removingDlErrorMessage;\n\n/**\n * Returns distribution list remove all operation status.\n * @param appState\n * @returns {OperationStatus}\n */\nexport const getUserProfileDlRemoveAllStatus = (state: AppState): OperationStatus =>\n  state.userProfileState.removingAllDlStatus;\n\n/**\n * Returns distribution list remove all error.\n * @param appState\n * @returns {string}\n */\nexport const getUserProfileDlRemoveAllError = (state: AppState): string =>\n  state.userProfileState.removingAllErrorMessage;\n\n/**\n * Returns update user profile is private error.\n * @param appState\n * @returns {string}\n */\nexport const getUserProfileUpdateIsPrivateError = (state: AppState): string =>\n  state.userProfileState.updateIsPrivateProfileError;\n\n/**\n * Returns update user profile is private operation status.\n * @param appState\n * @returns {OperationStatus}\n */\nexport const getUserProfileUpdateIsPrivateOperationStatus = (state: AppState): OperationStatus =>\n  state.userProfileState.updateIsPrivateProfileStatus;\n\n/**\n * Returns the isClaimingBenefitSuccess value.\n * @param {AppState} state\n * @returns {OperationStatus}\n */\nexport const getIsClaimingBenefitStatus = (state: AppState): OperationStatus | undefined =>\n  state.userProfileState.benefitsOperationStatus?.create;\n","/**\n * The Window property screen returns a reference to the screen object associated with the window.\n */\n\nexport const WINDOW_SCREEN = window.screen;\nexport const MIN_PRIMARY_COLUMN_WIDTH = 600;\nexport const MIN_SECONDARY_COLUMN_WIDTH = 320;\nexport const COL_GAP = 24;\nexport const NAVBAR_WIDTH = WINDOW_SCREEN ? 80 : 72;\n// add 144 (72 * 2) to account for the left side nav\nexport const MEDIA_BREAK =\n  MIN_PRIMARY_COLUMN_WIDTH + MIN_SECONDARY_COLUMN_WIDTH + COL_GAP + NAVBAR_WIDTH * 2;\nexport const LARGE_DESKTOP_WIDTH = 1920;\n\nexport const BREAKPOINTS = {\n  xsmall: 375, // mobile\n  small: 575.98, // large mobile\n  medium: 767.98, // tablet\n  highMedium: 1024, // laptop\n  large: 1440, // average desktop or large laptop\n  xlarge: 1920, // large desktop\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\nimport React from \"react\";\n\nimport { getTheme } from \"office-ui-fabric-react\";\nimport styled from \"styled-components\";\n\nimport { LARGE_DESKTOP_WIDTH, MEDIA_BREAK } from \"../../../Constants/Layout\";\nimport ILayoutProps from \"./Interfaces/ILayoutProps\";\nimport ISpaceProps from \"./Interfaces/ISpaceProps\";\n\nconst theme = getTheme();\n\n/**\n * Space to passed into any component.\n * @param props\n */\n// eslint-disable-next-line @typescript-eslint/explicit-function-return-type\nexport const Space = (props: ISpaceProps) => ({\n  margin: props.margin || \"\",\n  marginBottom: props.marginBottom || \"\",\n  marginLeft: props.marginLeft || \"\",\n  marginRight: props.marginRight || \"\",\n  marginTop: props.marginTop || \"\",\n  padding: props.padding || \"\",\n  paddingBottom: props.paddingBottom || \"\",\n  paddingLeft: props.paddingLeft || \"\",\n  paddingRight: props.paddingRight || \"\",\n  paddingTop: props.paddingTop || \"\",\n});\n\n/**\n * Flex-box designed div-row.\n * @component\n */\nexport const FlexRow = styled.div`\n  display: flex;\n  flex-direction: row;\n  justify-content: flex-start;\n  align-items: center;\n`;\n\n/**\n * Flex-box designed div-col.\n * @component\n */\nexport const FlexCol = styled.div`\n  display: flex;\n  flex-direction: column;\n  justify-content: flex-start;\n  align-items: stretch;\n`;\n\n/**\n * Parent Wrapper with 100 left and right margins.\n */\nexport const LayoutWrapper = styled(FlexCol)<ILayoutProps & { backgroundColor?: string }>`\n  padding-left: 83px;\n  padding-right: 83px;\n  max-width: 100vw;\n  background-color: ${({ backgroundColor }): string =>\n    backgroundColor ? theme.palette[backgroundColor] : \"\"};\n\n  @media (min-width: ${LARGE_DESKTOP_WIDTH}px) {\n    padding-left: 100px;\n    padding-right: 100px;\n  }\n  @media (max-width: ${MEDIA_BREAK}px) {\n    padding-left: 15px;\n    padding-right: 15px;\n  }\n`;\n\n/**\n * A parent flex column to any layout.\n * TODO: Remove this when editing home container.\n * @component\n */\nexport const LayoutFlexWrapper = styled(FlexCol)`\n  grid-area: content;\n  height: 100%;\n  width: 100%;\n  max-width: 100vw;\n  background-color: ${theme.palette.white};\n  overflow: hidden;\n  z-index: ${1};\n`;\n\n/**\n * Flex-box designed div-col with props.\n * @component\n * @returns {FlexCol<ILayoutProps>}\n */\nexport const Column = styled(FlexCol)<ILayoutProps>`\n  position: relative;\n  flex: ${(props): ILayoutProps[\"flex\"] => props.flex};\n  flex-wrap: ${(props): ILayoutProps[\"flexWrap\"] => props.flexWrap};\n  width: ${(props): ILayoutProps[\"width\"] => props.width};\n  height: ${(props): ILayoutProps[\"height\"] => props.height};\n  text-align: ${(props): ILayoutProps[\"textAlign\"] => props.textAlign};\n  align-items: ${(props): ILayoutProps[\"alignItems\"] => props.alignItems};\n  align-self: ${(props): ILayoutProps[\"alignSelf\"] => props.alignSelf};\n  justify-content: ${(props): ILayoutProps[\"justifyContent\"] => props.justifyContent};\n  background-color: ${(props): ILayoutProps[\"backgroundColor\"] => props.backgroundColor};\n  @media (max-width: ${MEDIA_BREAK}px) {\n    flex-direction: column;\n  }\n`;\n\n/**\n * Flex-box designed div-col with props and additional space props.\n * @component\n * @returns {FlexCol<ILayoutProps>}\n */\nexport const ColumnContent = styled(({ ...rest }) => <Column {...rest} />)`\n  ${Space}\n`;\n\n/**\n * Flex-box designed div-row with props.\n * @component\n * @returns {FlexRow<ILayoutProps>}\n */\nexport const Row = styled(FlexRow)<ILayoutProps>`\n  position: relative;\n  flex: ${(props): ILayoutProps[\"flex\"] => props.flex};\n  flex-wrap: ${(props): ILayoutProps[\"flexWrap\"] => props.flexWrap};\n  width: ${(props): ILayoutProps[\"width\"] => props.width};\n  height: ${(props): ILayoutProps[\"height\"] => props.height};\n  text-align: ${(props): ILayoutProps[\"textAlign\"] => props.textAlign};\n  align-items: ${(props): ILayoutProps[\"alignItems\"] => props.alignItems};\n  align-self: ${(props): ILayoutProps[\"alignSelf\"] => props.alignSelf};\n  justify-content: ${(props): ILayoutProps[\"justifyContent\"] => props.justifyContent};\n  background-color: ${(props): ILayoutProps[\"backgroundColor\"] => props.backgroundColor};\n  @media (max-width: ${MEDIA_BREAK}px) {\n    flex-direction: column;\n  }\n`;\n\n/**\n * Flex-box designed div-row with props and additional space props.\n * @component\n * @returns {FlexRow<ILayoutProps>}\n */\nexport const RowContent = styled(({ ...rest }) => <Row {...rest} />)`\n  ${Space}\n`;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { getTheme } from \"office-ui-fabric-react/lib/Styling\";\nimport styled from \"styled-components\";\n\nconst theme = getTheme();\n/**\n * Styled component that returns error message in red.\n */\n// TODO: Holding off on font-size and color of error message until Kyle finalzes mockups for error messages\nexport const RedText = styled.p`\n  color: ${theme.palette.red};\n  font-size: 12px;\n  margin-top: 2px;\n  animation: fadein 1s;\n\n  @keyframes fadein {\n    from {\n      opacity: 0;\n    }\n    to {\n      opacity: 1;\n    }\n  }\n`;\n\n/**\n * Styled div for error message.\n */\nexport const ErrorMessageDiv = styled.div`\n  width: 100%;\n  display: flex;\n  flex-direction: row;\n  justify-content: flex-start;\n`;\n\n/**\n * Styled div for red text.\n */\nexport const RedTextDiv = styled.div`\n  height: 0;\n`;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React from \"react\";\n\nimport entries from \"lodash/entries\";\n\nimport { ErrorMessage } from \"@hookform/error-message\";\n\nimport { ErrorMessageDiv, RedText, RedTextDiv } from \"./HookErrorMessage.styles\";\nimport { IHookErrorMessageProps } from \"./IHookErrorMessageProps\";\n\n/**\n * React hook error message component.\n * @component\n * @param {IHookErrorMessageProps} props The props.\n * @returns {React.ReactElement<IHookErrorMessagesProps>} React hook error message component.\n */\nexport function HookErrorMessage(props: IHookErrorMessageProps): React.ReactElement {\n  return (\n    <ErrorMessageDiv>\n      <ErrorMessage\n        errors={props.errors}\n        name={props.inputName}\n        render={({ message, messages }): React.ReactNode => {\n          return messages ? (\n            entries(messages).map(([type, message]) => (\n              <div key={type} role=\"alert\" aria-relevant=\"all\">\n                <RedText className=\"error\"> {message} </RedText>\n              </div>\n            ))\n          ) : (\n            <RedTextDiv role=\"alert\" aria-relevant=\"all\">\n              <RedText className=\"error\"> {message} </RedText>\n            </RedTextDiv>\n          );\n        }}\n      />\n    </ErrorMessageDiv>\n  );\n}\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { FontSizes } from \"@fluentui/react\";\n\n/**\n * Default font size used for inputs on desktop\n */\nexport const desktopInputFontSize = FontSizes.size20;\n\n/**\n * Default input height on desktop\n */\nexport const desktopInputHeight = 48;\n\n/**\n * Default font size used for inputs on mobile and tablet sizes\n */\nexport const mobileInputFontSize = FontSizes.size16;\n\n/**\n * Default input height on mobile and tablet sizes\n */\nexport const mobileInputHeight = 38;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { ICheckboxStyles } from \"office-ui-fabric-react/lib/Checkbox\";\n\nimport { BREAKPOINTS } from \"Constants/Layout\";\n\nimport { desktopInputFontSize, mobileInputFontSize } from \"../ReactHookFormShared.styles\";\n\n/**\n * Styling for Checkbox.\n * @type {Partial<ICheckboxStyles>}\n */\nexport const checkboxStyles: Partial<ICheckboxStyles> = {\n  label: {\n    width: \"100%\",\n  },\n  text: {\n    fontSize: desktopInputFontSize,\n    selectors: {\n      [`@media (max-width: ${BREAKPOINTS.medium}px)`]: {\n        fontSize: mobileInputFontSize,\n      },\n    },\n  },\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React from \"react\";\n\nimport { Controller } from \"react-hook-form\";\n\nimport { Checkbox } from \"office-ui-fabric-react\";\n\nimport { FlexCol, FlexRow } from \"Components/Common/Layout/Layout\";\nimport { HookErrorMessage } from \"Components/ReactHookForm/HookErrorMessage/HookErrorMessage\";\n\nimport { checkboxStyles } from \"./CheckboxController.styles\";\nimport { ICheckboxControllerProps } from \"./ICheckboxControllerProps\";\n\n/**\n * CheckboxController.\n * @component\n * @param {ICheckboxControllerProps} props The component props.\n * @returns {React.ReactElement} CheckboxController.\n */\nconst CheckboxController: (props: ICheckboxControllerProps) => React.ReactElement = (\n  props: ICheckboxControllerProps\n): React.ReactElement => {\n  const { inputName, labelDisplayName, control, isDisabled, errors } = props;\n  return (\n    <FlexCol>\n      <FlexRow>\n        <Controller\n          name={inputName}\n          control={control}\n          render={({ field }): React.ReactElement => (\n            <Checkbox\n              {...props}\n              aria-labelledby={labelDisplayName}\n              label={labelDisplayName}\n              styles={checkboxStyles}\n              disabled={isDisabled}\n              onChange={(e, checked) => field.onChange(checked)}\n              checked={field.value}\n            />\n          )}\n        />\n      </FlexRow>\n      <HookErrorMessage errors={errors} inputName={inputName} />\n    </FlexCol>\n  );\n};\n\nexport default CheckboxController;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport {\n  IProgressIndicatorStyles,\n  IProgressIndicatorStyleProps,\n} from \"office-ui-fabric-react/lib/ProgressIndicator\";\n/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\nimport { getTheme, FontSizes, FontWeights } from \"office-ui-fabric-react/lib/Styling\";\nimport { IStyleFunctionOrObject } from \"office-ui-fabric-react/lib/Utilities\";\nimport styled from \"styled-components\";\n\nconst theme = getTheme();\n\n/**\n * Styled div for character counter.\n */\nexport const CharacterCounterDiv = styled.div`\n  width: 100%;\n  display: flex;\n  flex-direction: row;\n  justify-content: flex-end;\n`;\n\n/**\n * The Character Counter Styles.\n * @param {boolean} alertDescription Flag indicating whether to alert item description.\n * @returns {IStyleFunctionOrObject} The style function object.\n */\nexport const characterCounterStyles: (\n  alertDescription: boolean\n) => IStyleFunctionOrObject<IProgressIndicatorStyleProps, IProgressIndicatorStyles> = (\n  alertDescription: boolean\n) => {\n  return {\n    itemDescription: {\n      color: alertDescription ? theme.palette.red : theme.palette.black,\n      fontWeight: FontWeights.semibold,\n      display: \"flex\",\n      justifyContent: \"flex-end\",\n    },\n    itemName: {\n      fontSize: FontSizes.small,\n      fontWeight: FontWeights.semibold,\n    },\n  };\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React from \"react\";\n\nimport { ProgressIndicator } from \"@fluentui/react/lib/ProgressIndicator\";\n\nimport { characterCounterStyles, CharacterCounterDiv } from \"./CharacterCounter.styles\";\nimport { ICharacterCounterProps } from \"./ICharacterCounterProps\";\n\n/**\n * Character Counter.\n * @component\n * @param {ICharacterCounterProps} props The component props.\n */\nconst CharacterCounter: React.FunctionComponent<ICharacterCounterProps> = (\n  props: ICharacterCounterProps\n) => {\n  const {\n    currentCount,\n    localizedCharactersDisplayText,\n    localizedMaximumDisplayText,\n    localizedMinimumDisplayText,\n    maximumCount,\n    minimumCount,\n  } = props;\n  const isMinimumCountMet = !!minimumCount && currentCount < minimumCount;\n  const getMinimumCharactersText = (\n    charactersText: string,\n    minimumText?: string,\n    minimum?: number\n  ): string => `${minimumText} ${minimum} ${charactersText}`;\n\n  const getMaximumCharactersText = (\n    charactersText: string,\n    maximumText?: string,\n    maximum?: number\n  ): string => `${maximumText} ${maximum} ${charactersText}`;\n\n  const getCurrentMaximumCharactersText = (\n    current: number,\n    maximum: number,\n    charactersText: string\n  ): string => `${current} / ${maximum} ${charactersText}`;\n\n  const getPercentValue = (current: number, maximum: number): number => current / maximum;\n\n  return (\n    <CharacterCounterDiv>\n      <ProgressIndicator\n        ariaValueText={\"Percentage is \" + getPercentValue(currentCount, maximumCount)}\n        label={\n          isMinimumCountMet\n            ? getMinimumCharactersText(\n                localizedCharactersDisplayText,\n                localizedMinimumDisplayText,\n                minimumCount\n              )\n            : getMaximumCharactersText(\n                localizedCharactersDisplayText,\n                localizedMaximumDisplayText,\n                maximumCount\n              )\n        }\n        description={getCurrentMaximumCharactersText(\n          currentCount,\n          maximumCount,\n          localizedCharactersDisplayText\n        )}\n        barHeight={8}\n        percentComplete={getPercentValue(currentCount, maximumCount)}\n        styles={characterCounterStyles(isMinimumCountMet)}\n      />\n    </CharacterCounterDiv>\n  );\n};\n\nexport default CharacterCounter;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { IIconStyles } from \"office-ui-fabric-react/lib/Icon\";\nimport { ITextFieldStyles, ITextFieldStyleProps } from \"office-ui-fabric-react/lib/TextField\";\nimport { IStyleFunctionOrObject } from \"office-ui-fabric-react/lib/Utilities\";\nimport styled from \"styled-components\";\n\nimport { desktopInputFontSize, desktopInputHeight } from \"../ReactHookFormShared.styles\";\n\n/**\n * Styling for text field control.\n * @type {IStyleFunctionOrObject<ITextFieldStyleProps, ITextFieldStyles>}\n */\nexport const textFieldStyles: IStyleFunctionOrObject<ITextFieldStyleProps, ITextFieldStyles> = {\n  field: {\n    height: desktopInputHeight,\n    lineHeight: \"1.75rem\",\n    padding: \"10px 12px\",\n    fontSize: desktopInputFontSize,\n    selectors: {\n      [\"::placeholder\"]: {\n        fontSize: desktopInputFontSize,\n      },\n    },\n  },\n  fieldGroup: {\n    minHeight: desktopInputHeight,\n  },\n  prefix: {\n    fontSize: desktopInputFontSize,\n  },\n  root: { width: \"100%\" },\n};\n\n/**\n * Styling for ICon control.\n * @type {Partial<IIconStyles>}\n * @param {boolean} hasAsterisk The value to determine if control label has required asterisk.\n */\nexport const getIconStyles: (hasAsterisk: boolean) => Partial<IIconStyles> = (hasAsterisk) => {\n  return { root: { paddingLeft: !hasAsterisk ? \"10px\" : \"\", color: \"#0078D7\" } };\n};\n\n/**\n * Styled div for counter and error message.\n */\nexport const CounterAndErrorMessageDiv = styled.div`\n  width: 100%;\n  display: flex;\n`;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React from \"react\";\n\nimport { useWatch, Controller } from \"react-hook-form\";\n\nimport { Icon } from \"@fluentui/react/lib/Icon\";\nimport { Label } from \"@fluentui/react/lib/Label\";\nimport { Text } from \"@fluentui/react/lib/Text\";\nimport { TextField } from \"@fluentui/react/lib/TextField\";\nimport { TooltipHost } from \"@fluentui/react/lib/Tooltip\";\n\nimport CharacterCounter from \"Components/CharacterCounter/CharacterCounter\";\nimport { FlexCol, FlexRow } from \"Components/Common/Layout/Layout\";\nimport { HookErrorMessage } from \"Components/ReactHookForm/HookErrorMessage/HookErrorMessage\";\n\nimport { ITextFieldControllerProps } from \"./ITextFieldControllerProps\";\nimport {\n  getIconStyles,\n  textFieldStyles,\n  CounterAndErrorMessageDiv,\n} from \"./TextFieldController.styles\";\n\n/**\n * TextFieldController.\n * @component\n * @param {ITextFieldControllerProps} props The component props.\n * @returns {React.ReactElement} TextFieldController component\n */\nconst TextFieldController: (props: ITextFieldControllerProps) => React.ReactElement = (\n  props: ITextFieldControllerProps\n): React.ReactElement => {\n  const {\n    characterCounterProps,\n    characterCountLimit,\n    control,\n    defaultValue,\n    errors,\n    hasTooltip,\n    inputName,\n    isDisabled,\n    isMultiline,\n    isRequired,\n    labelStyles,\n    localizedDescriptionDisplayText,\n    labelDisplayName,\n    placeholderText,\n    toolTipDisplayText,\n    onChange: onChangeFromProps,\n    prefix,\n    subText,\n    suffix,\n    textFieldType,\n  } = props;\n\n  const textFieldValue = useWatch({\n    control,\n    name: inputName,\n    defaultValue: defaultValue || \"\",\n  });\n\n  /**\n   * Triggers onChangeFromProps if it exists.\n   * @param {string} value updated value.\n   * @returns {void}\n   */\n  const handleOnChange = (value?: string): void => {\n    if (onChangeFromProps) {\n      onChangeFromProps(value);\n    }\n  };\n\n  return (\n    <FlexCol>\n      <FlexRow>\n        <Label htmlFor={inputName} required={isRequired} styles={labelStyles}>\n          {labelDisplayName}\n        </Label>\n        {hasTooltip && (\n          <TooltipHost id={inputName} content={toolTipDisplayText || labelDisplayName}>\n            <Icon\n              aria-label=\"information\"\n              iconName=\"info\"\n              role=\"img\"\n              styles={getIconStyles(!!isRequired)}\n              tabIndex={0}\n            />\n          </TooltipHost>\n        )}\n      </FlexRow>\n      <FlexRow>\n        {localizedDescriptionDisplayText && <Text>{localizedDescriptionDisplayText}</Text>}\n        {subText}\n      </FlexRow>\n      <FlexRow>\n        <Controller\n          name={inputName}\n          control={control}\n          render={({ field }): React.ReactElement => {\n            return (\n              <TextField\n                styles={textFieldStyles}\n                maxLength={characterCountLimit}\n                disabled={isDisabled}\n                multiline={isMultiline}\n                autoAdjustHeight={isMultiline}\n                prefix={prefix}\n                suffix={suffix}\n                ariaLabel={labelDisplayName}\n                onChange={(_, newValue): void => {\n                  field.onChange(newValue);\n                  handleOnChange(newValue);\n                }}\n                placeholder={placeholderText}\n                type={textFieldType}\n                value={textFieldValue}\n              />\n            );\n          }}\n        />\n      </FlexRow>\n      <CounterAndErrorMessageDiv>\n        <HookErrorMessage errors={errors} inputName={inputName} />\n        {!!characterCounterProps && (\n          <CharacterCounter {...characterCounterProps} currentCount={textFieldValue.length} />\n        )}\n      </CounterAndErrorMessageDiv>\n    </FlexCol>\n  );\n};\n\nexport default TextFieldController;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\nexport const TOO_LONG = \"Too long.\";\nexport const TOO_SHORT = \"Please provide the required number of characters.\";\nexport const SELECTION_REQUIRED = \"Selection required.\";\nexport const INVALID_LINK = \"This URL is not allowed.\";\nexport const INPUT_REQUIRED = \"Input required.\";\nexport const PROVIDE_HTTPS = \"Please provide full URL containing http:// or https://\";\nexport const PROVIDE_HTTPS_SOCIAL_MEDIA =\n  \"Please provide full URL to your account containing http:// or https://\";\nexport const VIDEO_AND_WRITTEN_CANNOT_BE_EMPTY =\n  \"Video link and written response both cannot be empty.\";\nexport const PHONE_REG_EX = /^\\s*(?:\\+?(\\d{1,3}))?[-. (]*(\\d{3})[-. )]*(\\d{3})[-. ]*(\\d{4})(?: *x(\\d+))?\\s*$/;\nexport const INVALID = \"Invalid.\";\nexport const LINK_REQUIRED = \"One video link is required\";\nexport const WRITTEN_REQUIRED_VIDEO_URL_EXISTS =\n  \"Written response is required because video url exists\";\nexport const CANNOT_HAVE_VIDEO_AND_WRITTEN = \"Cannot have video link and written response\";\nexport const INVALID_QUANTITY_GREATER_THAN_TOTAL =\n  \"Invalid quantity, greater than total order quantity.\";\nexport const INVALID_QUANTITY_LESS_THAN_ZERO = \"Quantity cannot be smaller than 0.\";\nexport const INVALID_ORDER =\n  \"We limit orders to less than or equal to 100 lunches/event. You will not be able to proceed if your order is larger than 100 lunches. Please return to the previous page and edit your number of event attendees to less than 100. If you still need to request a larger order size, you can place a smaller order and tell us that you need an exception in the order details box.\";\nexport const CHARACTERS_EXCEEDED = \"No characters remaining\";\nexport const CHARACTERS_REMAINING = \"characters remaining\";\nexport const INVALID_PHONE_NUMBER =\n  \"Your phone number is not valid for the phone Country or Region: \";\nexport const INACTIVE_USER_WARNING_MESSAGE =\n  \"User is not an active student ambassador, no edit allowed!\";\nexport const ADDRESS_ENGLISH_REG_EX = /^[a-zA-Z0-9,\\s\\.\\-\\#]+$/;\nexport const INVALID_ADDRESS_ENGLISH_CHARS = \"Invalid character.\";\nexport const EMAIL_NOT_ALLOWED = \"You cannot use this email address.\";\nexport const INVALID_EMAIL_REG_EX = /^[a-zA-Z0-9._%-]+@(?!studentambassadors\\.com)[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/i;\nexport const GUID_REG_EX = /^[0-9a-fA-F]{8}-?([0-9a-fA-F]{4}-?){3}[0-9a-fA-F ]{12}$/;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { useEffect } from \"react\";\n\nimport { useForm } from \"react-hook-form\";\n\nimport { Stack, StackItem } from \"office-ui-fabric-react\";\nimport * as Yup from \"yup\";\n\nimport { yupResolver } from \"@hookform/resolvers/yup\";\n\nimport CheckboxController from \"Components/ReactHookForm/CheckboxController/CheckboxController\";\nimport TextFieldController from \"Components/ReactHookForm/TextFieldController/TextFieldController\";\nimport { SidePanel } from \"Components/SidePanel/SidePanel\";\nimport { OperationStatus } from \"Constants/OperationStatus\";\nimport { EMAIL_NOT_ALLOWED, INVALID_EMAIL_REG_EX } from \"Constants/ValidationMessages\";\nimport { callMsGraphGetUserByEmail } from \"Utility/MsGraphApiCall\";\n\nimport IUpdatePrimaryEmailPanelProps from \"./IUpdatePrimaryEmailPanelProps\";\n\nexport const UpdatePrimaryEmailPanel: React.FunctionComponent<IUpdatePrimaryEmailPanelProps> = (\n  props: IUpdatePrimaryEmailPanelProps\n) => {\n  const {\n    isOpen,\n    setIsOpen,\n    userProfileId,\n    updatePrimaryEmailStatus,\n    updatePrimaryEmailError,\n    onPrimaryEmailUpdate,\n    onPrimaryEmailUpdateReset,\n    loadUserProfile,\n  } = props;\n\n  const disableActions = updatePrimaryEmailStatus === OperationStatus.Pending;\n\n  const checkBoxText =\n    \"Check this box to confirm this user's Azure registration email is already updated to match the email below. A mismatch will cause the automated Azure extension to fail at the time of renewal.\";\n\n  const {\n    control,\n    handleSubmit,\n    reset,\n    formState: { errors },\n  } = useForm({\n    defaultValues: {\n      azureBenefitEmailChecked: false,\n      newEmail: \"\",\n    },\n    resolver: yupResolver(\n      Yup.object().shape({\n        azureBenefitEmailChecked: Yup.bool().oneOf([true], \"Please check the box to proceed\"),\n        newEmail: Yup.string()\n          .required()\n          .email(\"Please enter a valid email\")\n          .matches(INVALID_EMAIL_REG_EX, EMAIL_NOT_ALLOWED)\n          .test(\"IsInAad\", \"Email is not a valid account\", async (email) => {\n            if (!email || !email.match(INVALID_EMAIL_REG_EX)) {\n              // If email is undefined or not in the correct format, return true, do not call Graph API\n              return true;\n            }\n            const externalEmail = `${email.replace(\"@\", \"_\")}%23EXT%23@microsoft.onmicrosoft.com`;\n            return await callMsGraphGetUserByEmail(externalEmail).then((value) => {\n              // return !value.error; commenting this to skip GraphAPI and process the request. This will be reverted once GraphAPI is fixed.\n              return true;\n            });\n          }),\n      })\n    ),\n  });\n\n  // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n  const onSaveClicked = handleSubmit((data) => {\n    onPrimaryEmailUpdate && onPrimaryEmailUpdate(userProfileId, data.newEmail);\n  });\n\n  const onDismiss = (): void => {\n    setIsOpen(false);\n    reset();\n    onPrimaryEmailUpdateReset && onPrimaryEmailUpdateReset();\n  };\n\n  useEffect(() => {\n    if (updatePrimaryEmailStatus === OperationStatus.Succeeded) {\n      onDismiss();\n      loadUserProfile && loadUserProfile(userProfileId);\n    }\n  }, [updatePrimaryEmailStatus]);\n\n  return (\n    <form onSubmit={onSaveClicked}>\n      <SidePanel\n        isOpen={isOpen}\n        title=\"Update Login Email\"\n        onDismiss={onDismiss}\n        onSave={onSaveClicked}\n        disableActions={disableActions}\n        error={updatePrimaryEmailError}\n      >\n        <Stack tokens={{ childrenGap: \"1rem\" }}>\n          <StackItem>\n            <CheckboxController\n              inputName=\"azureBenefitEmailChecked\"\n              control={control}\n              errors={errors}\n              labelDisplayName={checkBoxText}\n              isDisabled={false}\n            />\n          </StackItem>\n          <StackItem>\n            <TextFieldController\n              inputName=\"newEmail\"\n              control={control}\n              errors={errors}\n              isRequired\n              hasTooltip\n              labelDisplayName=\"Login Email\"\n              toolTipDisplayText=\"Please enter the new login email.\"\n            />\n          </StackItem>\n        </Stack>\n      </SidePanel>\n    </form>\n  );\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport {\n  getTheme,\n  FontSizes,\n  IButtonStyles,\n  IStackItemStyles,\n  IStackStyles,\n  IStackTokens,\n  ITextStyles,\n} from \"@fluentui/react\";\n\nconst theme = getTheme();\n\nexport const headerStackStyles = (): IStackStyles => {\n  return {\n    root: {\n      padding: \"1.5rem\",\n      backgroundColor: theme.palette.white,\n      borderRadius: \"0.5rem\",\n    },\n  };\n};\n\nexport const bolderTextStyles = (): ITextStyles => {\n  return { root: { fontSize: FontSizes.size20, fontWeight: 600 } };\n};\n\nexport const normalTextStyles = (): ITextStyles => {\n  return { root: { fontSize: FontSizes.size16, fontWeight: 400 } };\n};\n\nexport const isCompetitorTextStyles = (): ITextStyles => {\n  return { root: { fontSize: FontSizes.size20, fontWeight: 600, color: \"red\" } };\n};\n\nexport const bolderTextStylesSmall = (): ITextStyles => {\n  return { root: { fontSize: FontSizes.size16, fontWeight: 600 } };\n};\n\nexport const isCompetitorTextStylesSmall = (): ITextStyles => {\n  return { root: { fontSize: FontSizes.size16, fontWeight: 600, color: \"red\" } };\n};\n\nexport const privateProfileTextStyles = (): ITextStyles => {\n  return {\n    root: {\n      fontSize: FontSizes.size16,\n      lineHeight: \"1.375 rem\",\n      fontWeight: 600,\n      color: \"#FF0000\",\n    },\n  };\n};\n\nexport const contentStackTokens = (): IStackTokens => {\n  return { childrenGap: 24, padding: \"0.5rem 0 0 0\" };\n};\n\nexport const headerStackTokens = (): IStackTokens => {\n  return { childrenGap: 15 };\n};\n\nexport const contentStackStyles = (): IStackItemStyles => {\n  return {\n    root: {\n      minWidth: \"30%\",\n    },\n  };\n};\n\nexport const applicationContentStackStyles = (): IStackItemStyles => {\n  return {\n    root: {\n      minWidth: \"20%\",\n    },\n  };\n};\n\nexport const updateButtonStyles: IButtonStyles = {\n  root: {\n    padding: \"4px 2px\",\n    margin: \"0 10px\",\n    minWidth: \"90px\",\n  },\n  label: {\n    fontSize: FontSizes.size16,\n    color: theme.palette.blue,\n  },\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React from \"react\";\n\nimport { Link } from \"react-router-dom\";\n\nimport { CommandBarButton, Stack, StackItem, Text } from \"@fluentui/react\";\n\nimport { UpdatePrimaryEmailPanel } from \"Components/UpdatePrimaryEmailPanel/UpdatePrimaryEmailPanel\";\nimport { TenantTypesEnum } from \"Constants/TenantTypes\";\nimport { getTenant } from \"Utility/Utils\";\n\nimport { IProfileHeaderProps } from \"./IProfileHeaderProps\";\nimport {\n  bolderTextStyles,\n  contentStackStyles,\n  contentStackTokens,\n  headerStackStyles,\n  headerStackTokens,\n  isCompetitorTextStyles,\n  normalTextStyles,\n  privateProfileTextStyles,\n  updateButtonStyles,\n} from \"./ProfileHeader.styles\";\n\nconst ProfileHeader = (props: IProfileHeaderProps): React.ReactElement => {\n  const {\n    userProfileId,\n    firstName,\n    lastName,\n    primaryEmail,\n    secondaryEmail,\n    tenants,\n    currentTenant,\n    isPrivate,\n    isOvdfBlock,\n    technologyAreas,\n    yearsInProgram,\n    isCompetitor,\n    companyName,\n    jobTitle,\n    canUpdatePrimaryEmail,\n    updatePrimaryEmailStatus,\n    updatePrimaryEmailError,\n    onPrimaryEmailUpdate,\n    onPrimaryEmailUpdateReset,\n    loadUserProfile,\n  } = props;\n\n  const [isUpdatePrimaryEmailPanelOpen, setIsUpdatePrimaryEmailPanelOpen] = React.useState(false);\n\n  const renderTenantLinks = (): JSX.Element[] | undefined => {\n    if (!tenants?.length || tenants?.length <= 1) return undefined;\n\n    return tenants.map((tenant, index) => {\n      const tenantName = getTenant(tenant);\n      const tenantDisplayName: string =\n        tenantName === TenantTypesEnum.MLSA ? \"Student\" : tenantName;\n\n      return (\n        <React.Fragment key={tenant}>\n          {tenant === currentTenant ? (\n            <span>{tenantDisplayName}</span>\n          ) : (\n            <Link to={`/${tenantName.toLowerCase()}/details/${userProfileId}`} replace>\n              {tenantDisplayName}\n            </Link>\n          )}\n          {index < tenants.length - 1 ? \" | \" : null}\n        </React.Fragment>\n      );\n    });\n  };\n\n  return (\n    <Stack styles={headerStackStyles} tokens={headerStackTokens}>\n      <Stack horizontal tokens={contentStackTokens}>\n        <StackItem styles={contentStackStyles}>\n          <Text styles={bolderTextStyles}>{`${firstName} ${lastName} [${userProfileId}]`}</Text>\n        </StackItem>\n        {!!yearsInProgram && (\n          <StackItem styles={contentStackStyles}>\n            <Text styles={bolderTextStyles}>{`Years in Program: ${yearsInProgram}`}</Text>\n          </StackItem>\n        )}\n        {!!isCompetitor && (\n          <StackItem styles={contentStackStyles}>\n            <Text styles={isCompetitorTextStyles}>{\"May work for a competitor\"}</Text>\n          </StackItem>\n        )}\n      </Stack>\n      <Stack horizontal tokens={contentStackTokens}>\n        <Stack styles={contentStackStyles}>\n          <Stack horizontal tokens={contentStackTokens}>\n            <StackItem>\n              <Text styles={normalTextStyles}>{`Login Email: ${primaryEmail}`}</Text>\n            </StackItem>\n            {!!canUpdatePrimaryEmail && (\n              <CommandBarButton\n                onClick={() => setIsUpdatePrimaryEmailPanelOpen(true)}\n                styles={updateButtonStyles}\n                text=\"Update\"\n                iconProps={{ iconName: \"Edit\" }}\n              ></CommandBarButton>\n            )}\n          </Stack>\n          {!!secondaryEmail && (\n            <StackItem>\n              <Text styles={normalTextStyles}>{`Contact Email: ${secondaryEmail}`}</Text>\n            </StackItem>\n          )}\n          <StackItem tokens={contentStackTokens}>{renderTenantLinks()}</StackItem>\n          {!!isPrivate && (\n            <StackItem>\n              <Text styles={privateProfileTextStyles}>{\"Private Profile\"}</Text>\n            </StackItem>\n          )}\n          {isOvdfBlock && (\n            <StackItem>\n              <Text styles={privateProfileTextStyles}>{\"OVDF Block\"}</Text>\n            </StackItem>\n          )}\n        </Stack>\n        <Stack styles={contentStackStyles}>\n          {technologyAreas?.map((technologyArea, index) => (\n            <StackItem key={technologyArea.technologyFocusAreaName}>\n              <Text styles={normalTextStyles}>{`Technology Area ${index + 1}: ${\n                technologyArea.technologyFocusAreaName\n              }`}</Text>\n            </StackItem>\n          ))}\n        </Stack>\n        <Stack styles={contentStackStyles}>\n          {!!jobTitle && (\n            <StackItem>\n              <Text styles={normalTextStyles}>{`Job Title: ${jobTitle}`}</Text>\n            </StackItem>\n          )}\n          {!!companyName && (\n            <StackItem>\n              <Text\n                styles={normalTextStyles}\n              >{`Current Employer/Organization: ${companyName}`}</Text>\n            </StackItem>\n          )}\n        </Stack>\n      </Stack>\n      <UpdatePrimaryEmailPanel\n        isOpen={isUpdatePrimaryEmailPanelOpen}\n        setIsOpen={setIsUpdatePrimaryEmailPanelOpen}\n        userProfileId={userProfileId}\n        updatePrimaryEmailStatus={updatePrimaryEmailStatus}\n        updatePrimaryEmailError={updatePrimaryEmailError}\n        onPrimaryEmailUpdate={onPrimaryEmailUpdate}\n        onPrimaryEmailUpdateReset={onPrimaryEmailUpdateReset}\n        loadUserProfile={loadUserProfile}\n      />\n    </Stack>\n  );\n};\n\nexport default ProfileHeader;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { getTheme, IButtonStyles, IStackStyles, IStackTokens, ITextStyles } from \"@fluentui/react\";\n\nconst theme = getTheme();\n\nexport const panelHeaderStyles: ITextStyles = {\n  root: {\n    fontWeight: \"600\",\n    fontSize: \"32px\",\n    lineHeight: \"40px\",\n    flexGrow: 1,\n    margin: \"24px\",\n  },\n};\n\nexport const benefitLabelStyles: ITextStyles = {\n  root: {\n    fontWeight: \"600\",\n    fontSize: \"16px\",\n    lineHeight: \"22px\",\n  },\n};\n\nexport const benefitStyles: ITextStyles = {\n  root: {\n    fontWeight: \"400\",\n    fontSize: \"16px\",\n    lineHeight: \"22px\",\n  },\n};\n\n/**\n * The stack containing all of the form elements.\n */\nexport const containerStyles: IStackStyles = {\n  root: {\n    marginBottom: \"1.5rem\",\n  },\n};\n\nexport const horizontalGapStackTokens: IStackTokens = {\n  childrenGap: 10,\n};\n\nexport const removeButtonStyles: IButtonStyles = {\n  root: {\n    marginRight: 8,\n    width: \"120px\",\n    height: \"32px\",\n    backgroundColor: theme.palette.red,\n    border: `1px solid ${theme.palette.red}`,\n  },\n  rootHovered: {\n    backgroundColor: theme.palette.redDark,\n    border: `1px solid ${theme.palette.redDark}`,\n  },\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nexport const fieldTypes = {\n  COUNTRY: \"country\",\n  DATE_PICKER: \"datePicker\",\n  FORMAT: \"eventFormat\",\n  SELECT: \"select\",\n  MULTI_SELECT: \"multiSelect\",\n  PROVINCE: \"province\",\n  REGION: \"region\",\n  CL_REGION: \"clRegion\",\n  INDUSTRY_FOCUS: \"industryFocus\",\n  TECHNICAL_EXPERTISE: \"technicalExpertise\",\n  TECHNOLOGY_AREA_GROUP: \"technologyAreaGroup\",\n  TECHNOLOGY_AREA: \"technologyArea\",\n  REVIEW_STATUS: \"reviewStatuses\",\n  AWARD_PERIOD: \"awardPeriod\",\n  NDA_STATUS: \"ndaStatus\",\n  EXPEDITED: \"expedited\",\n  ACTIVITY_OR_EVENT_TYPE: \"activityOrEventType\",\n  AVAILABLE_CPM_LIST: \"availableCpmList\",\n  SKU: \"sku\",\n};\n\nexport enum FilterValueFieldNames {\n  PROGRAM_STATUS = \"programStatus\",\n  TECHNOLOGY_AREA = \"technologyArea\",\n  AWARD_PERIOD_START_DATE = \"awardPeriodStartDate\",\n  AWARD_PERIOD_END_DATE = \"awardPeriodEndDate\",\n  NDA_STATUS = \"ndaStatus\",\n  COUNTRY = \"country\",\n  STATE_PROVINCE = \"stateOrProvince\",\n  GRANT_ANNUAL_EXCEPTION = \"grantAnnualException\",\n  REGION = \"clRegion\",\n  INDUSTRY_FOCUS = \"industryFocus\",\n  TECHNICAL_EXPERTISE = \"technicalExpertise\",\n  TECHNOLOGY_AREA_GROUP = \"technologyAreaGroup\",\n  EXPEDITED = \"expedited\",\n  ACTIVITY_OR_EVENT = \"activityOrEvent\",\n  ACTIVITY_OR_EVENT_TYPE = \"activityOrEventType\",\n  OTHER_PROGRAM_MEMBERSHIP = \"otherProgramMembership\",\n  ASSIGNED_TO = \"assignedTo\",\n  GENDER = \"gender\",\n  SCORE = \"technologyAreaScore\",\n  TECHNOLOGY_AREA_STATUS = \"technologyAreaStatus\",\n  TECHNOLOGY_AREA_STATUS_REASON = \"technologyAreaStatusReason\",\n  FLAG_ROLE = \"flagRole\",\n  FLAG_REASON = \"flagReason\",\n  COHORT = \"cohort\",\n  TECHNOLOGY_AREA_SCORE = \"technologyAreaScore\",\n  REVIEW_STATUS = \"reviewStatuses\",\n  AVAILABLE_CPM_LIST = \"availableCpmList\",\n  OVDF_BLOCK = \"ovdfBlock\",\n}\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { IFilterField } from \"Interfaces/IFilterField\";\nimport { IKeyText } from \"Interfaces/IKeyText\";\n\nimport { fieldTypes } from \"./FilterFields\";\nimport { TenantTypesEnum } from \"./TenantTypes\";\n\nexport const defaultListingPageSize = 16;\n\nexport enum BenefitStatusEnum {\n  Unclaimed = \"Unclaimed\",\n  Claimed = \"Claimed\",\n  Expired = \"Expired\",\n}\n\nexport enum BenefitNameEnum {\n  AzureRequests = \"AzureRequests\",\n  Azure = \"Azure Credits\",\n  GitHubPro = \"GitHub Pro\",\n  LinkedInLearning = \"LinkedIn\",\n  VisualStudio = \"Visual Studio\",\n  O365 = \"O365\",\n  M365 = \"M365\",\n  M365Copilot = \"M365 Copilot\",\n  MCP = \"MCP Exam Voucher\",\n  Teams = \"Teams\",\n  AwardKit = \"AwardKit\",\n  SwagKit = \"SwagKit\",\n  AwardKits = \"MVP Award Kits\",\n  MS365 = \"MS365\",\n}\n\nexport enum BenefitDisplayNameEnum {\n  AzureRequests = \"Azure Requests\",\n  Azure = \"Extended Azure Credit\",\n  GitHubPro = \"GitHub Pro\",\n  LinkedInLearning = \"LinkedIn Learning\",\n  VisualStudio = \"Visual Studio\",\n  O365 = \"Office 365\",\n  M365Copilot = \"M365 Copilot\",\n  MCP = \"MCP Exam Voucher\",\n  Teams = \"Teams\",\n  AwardKit = \"MVP Award Kit\",\n  SwagKit = \"Student Ambassador Swag kit\",\n  AwardKits = \"MVP Award Kits\",\n  MS365 = \"Microsoft 365\",\n}\n\nexport const benefitNameToResultMap = {\n  [BenefitNameEnum.AzureRequests]: \"azureRequests\",\n  [BenefitNameEnum.Azure]: \"azure\",\n  [BenefitNameEnum.GitHubPro]: \"githubPro\",\n  [BenefitNameEnum.MCP]: \"mcp\",\n  [BenefitNameEnum.LinkedInLearning]: \"linkedIn\",\n  [BenefitNameEnum.Teams]: \"teams\",\n  [BenefitNameEnum.VisualStudio]: \"visualStudio\",\n  [BenefitNameEnum.O365]: \"O365\",\n  [BenefitNameEnum.M365]: \"m365\",\n  [BenefitNameEnum.M365Copilot]: \"m365Copilot\",\n  [BenefitNameEnum.AwardKits]: \"awardKit\",\n  [BenefitNameEnum.SwagKit]: \"swagKit\",\n  [BenefitNameEnum.MS365]: \"ms365\",\n};\n\nexport const BenefitsSubSiteUrlPath = Object.freeze({\n  azureRequests: \"azureRequests\",\n  gitHubPro: \"gitHubPro\",\n  linkedInLearning: \"linkedInLearning\",\n  O365: \"O365\",\n  M365: \"M365\",\n  m365Copilot: \"m365Copilot\",\n  mcp: \"mcp\",\n  teams: \"teams\",\n  awardKit: \"awardKit\",\n  visualStudio: \"visualStudio\",\n  swagKit: \"swagKit\",\n  MS365: \"MS365\",\n});\n\nexport const benefitStatus: IKeyText[] = [\n  {\n    key: \"Unclaimed\",\n    text: \"Unclaimed\",\n  },\n  {\n    key: \"Claimed\",\n    text: \"Claimed\",\n  },\n  {\n    key: \"Expired\",\n    text: \"Expired\",\n  },\n];\n\nexport const AWARD_PERIOD = \"awardPeriod\";\nexport const BENEFIT_STATUS = \"benefitStatus\";\nexport const CLAIMED_FROM = \"claimedFrom\";\nexport const CLAIMED_TO = \"claimedTo\";\nexport const UPLOADED_FROM = \"uploadedFrom\";\nexport const UPLOADED_TO = \"uploadedTo\";\nexport const EXPIRATION_START_DATE = \"expirationStartDate\";\nexport const EXPIRATION_END_DATE = \"expirationEndDate\";\nexport const COUNTRY_CODE_POOL = \"countryCodePool\";\nexport const SKU = \"sku\";\nexport const SWAG_KIT = \"levelStatusName\";\n\n/**\n * Sidebar filter constants used for rendering\n */\nexport const benefitFilterFields: IFilterField[] = [\n  {\n    key: BENEFIT_STATUS,\n    text: \"Benefit Status\",\n    type: fieldTypes.MULTI_SELECT,\n    options: benefitStatus,\n  },\n  {\n    key: CLAIMED_FROM,\n    text: \"Claimed From\",\n    type: fieldTypes.DATE_PICKER,\n  },\n  {\n    key: CLAIMED_TO,\n    text: \"Claimed To\",\n    type: fieldTypes.DATE_PICKER,\n  },\n  {\n    key: UPLOADED_FROM,\n    text: \"Uploaded From\",\n    type: fieldTypes.DATE_PICKER,\n  },\n  {\n    key: UPLOADED_TO,\n    text: \"Uploaded To\",\n    type: fieldTypes.DATE_PICKER,\n  },\n  {\n    key: EXPIRATION_START_DATE,\n    text: \"Expiration Start Date\",\n    type: fieldTypes.DATE_PICKER,\n  },\n  {\n    key: EXPIRATION_END_DATE,\n    text: \"Expiration End Date\",\n    type: fieldTypes.DATE_PICKER,\n  },\n];\n\n/**\n * default filter values for benefits.\n */\nexport const defaultFilterValues: {\n  fieldName: string;\n  value: string;\n}[] = [];\n\nexport const tenantBenefitTypes = {\n  [TenantTypesEnum.MSP]: [BenefitNameEnum.VisualStudio, BenefitNameEnum.SwagKit],\n  [TenantTypesEnum.MVP]: [\n    BenefitNameEnum.Azure,\n    BenefitNameEnum.GitHubPro,\n    BenefitNameEnum.LinkedInLearning,\n    BenefitNameEnum.MS365,\n    BenefitNameEnum.M365, // This will be now O365\n    BenefitNameEnum.M365Copilot,\n    BenefitNameEnum.MCP,\n    BenefitNameEnum.Teams,\n    BenefitNameEnum.VisualStudio,\n    BenefitNameEnum.AwardKits,\n  ],\n  [TenantTypesEnum.RD]: [\n    BenefitNameEnum.Azure,\n    BenefitNameEnum.GitHubPro,\n    BenefitNameEnum.LinkedInLearning,\n    BenefitNameEnum.MS365,\n    BenefitNameEnum.M365, // This will be now O365\n    BenefitNameEnum.Teams,\n    BenefitNameEnum.VisualStudio,\n  ],\n};\n\n/**\n * Configure additional filter name with benefits(url path)\n */\nexport const additionalFilter = {\n  countryCodePool: [\"teams\", \"O365\", \"MS365\"],\n  swagKit: [\"swagKit\"],\n  sku: [\"awardKit\"],\n};\n\n/**\n * Field constant used for rendering in data-table for Teams and O365 benefits\n */\nexport const CountryCodePoolColumn = {\n  key: \"countryCodePool\",\n  name: \"Country Code Pool\",\n  fieldName: \"countryCodePoolName\",\n  minWidth: 160,\n  isResizable: true,\n};\n\n/**\n * Drop-down options for Teams - country code pool\n */\nexport const teamsCountryCodePool: IKeyText[] = [\n  {\n    key: \"Teams\",\n    text: \"Any\",\n  },\n  {\n    key: \"Teams-ROW\",\n    text: \"ROW\",\n  },\n  {\n    key: \"Teams-EEA\",\n    text: \"EEA\",\n  },\n];\n\n/**\n * Drop-down options for O365 - country code pool\n */\nexport const o365CountryCodePool = [\n  {\n    key: \"O365\",\n    text: \"Any\",\n  },\n  {\n    key: \"O365-E3-ROW\",\n    text: \"ROW\",\n    values: [\"O365-E3-ROW\"], // used to display in data-table field\n  },\n  {\n    key: \"O365-E5-ROW-Established\",\n    text: \"ROW-Established Market\",\n    values: [\"O365-E5-ROW-Established\"], // used to display in data-table field\n  },\n  {\n    key: \"O365-E5-ROW-Emerging\",\n    text: \"ROW-Emerging Market\",\n    values: [\"O365-E5-ROW-Emerging\"], // used to display in data-table field\n  },\n  {\n    key: \"O365-EEA\",\n    text: \"EEA\",\n    values: [\"O365-E3-EEA\", \"O365-E5-EEA\"], // used to display in data-table field\n  },\n];\n\n/**\n * Drop-down options for MS365 - country code pool\n */\nexport const ms365CountryCodePool = [\n  {\n    key: \"MS365\",\n    text: \"Any\",\n  },\n  {\n    key: \"MS365-E5-ROW-Established\",\n    text: \"ROW-Established Market\",\n  },\n  {\n    key: \"MS365-E5-ROW-Emerging\",\n    text: \"ROW-Emerging Market\",\n  },\n  {\n    key: \"MS365-E5-EEA\",\n    text: \"EEA\",\n  },\n];\n\n/**\n * Sidebar filter constants used for rendering in Teams benefits\n * Additional filter : Country Code Pool\n */\nexport const benefitTeamsFilterWithCountryCodePool: IFilterField[] = [\n  {\n    key: BENEFIT_STATUS,\n    text: \"Benefit Status\",\n    type: fieldTypes.SELECT,\n    options: benefitStatus,\n  },\n  {\n    key: COUNTRY_CODE_POOL,\n    text: \"Country Code Pool\",\n    type: fieldTypes.SELECT,\n    options: teamsCountryCodePool,\n  },\n  {\n    key: CLAIMED_FROM,\n    text: \"Claimed From\",\n    type: fieldTypes.DATE_PICKER,\n  },\n  {\n    key: CLAIMED_TO,\n    text: \"Claimed To\",\n    type: fieldTypes.DATE_PICKER,\n  },\n  {\n    key: UPLOADED_FROM,\n    text: \"Uploaded From\",\n    type: fieldTypes.DATE_PICKER,\n  },\n  {\n    key: UPLOADED_TO,\n    text: \"Uploaded To\",\n    type: fieldTypes.DATE_PICKER,\n  },\n  {\n    key: EXPIRATION_START_DATE,\n    text: \"Expiration Start Date\",\n    type: fieldTypes.DATE_PICKER,\n  },\n  {\n    key: EXPIRATION_END_DATE,\n    text: \"Expiration End Date\",\n    type: fieldTypes.DATE_PICKER,\n  },\n];\n\n/**\n * Sidebar filter constants used for rendering in O365 benefits\n * Additional filter : Country Code Pool\n */\nexport const benefitO365FilterWithCountryCodePool: IFilterField[] = [\n  {\n    key: BENEFIT_STATUS,\n    text: \"Benefit Status\",\n    type: fieldTypes.MULTI_SELECT,\n    options: benefitStatus,\n  },\n  {\n    key: COUNTRY_CODE_POOL,\n    text: \"Country Code Pool\",\n    type: fieldTypes.SELECT,\n    options: o365CountryCodePool,\n  },\n  {\n    key: CLAIMED_FROM,\n    text: \"Claimed From\",\n    type: fieldTypes.DATE_PICKER,\n  },\n  {\n    key: CLAIMED_TO,\n    text: \"Claimed To\",\n    type: fieldTypes.DATE_PICKER,\n  },\n  {\n    key: UPLOADED_FROM,\n    text: \"Uploaded From\",\n    type: fieldTypes.DATE_PICKER,\n  },\n  {\n    key: UPLOADED_TO,\n    text: \"Uploaded To\",\n    type: fieldTypes.DATE_PICKER,\n  },\n  {\n    key: EXPIRATION_START_DATE,\n    text: \"Expiration Start Date\",\n    type: fieldTypes.DATE_PICKER,\n  },\n  {\n    key: EXPIRATION_END_DATE,\n    text: \"Expiration End Date\",\n    type: fieldTypes.DATE_PICKER,\n  },\n];\n\n/**\n * Sidebar filter constants used for rendering in MS365 benefits\n * Additional filter : Country Code Pool\n */\nexport const benefitMS365FilterWithCountryCodePool: IFilterField[] = [\n  {\n    key: BENEFIT_STATUS,\n    text: \"Benefit Status\",\n    type: fieldTypes.MULTI_SELECT,\n    options: benefitStatus,\n  },\n  {\n    key: COUNTRY_CODE_POOL,\n    text: \"Country Code Pool\",\n    type: fieldTypes.SELECT,\n    options: ms365CountryCodePool,\n  },\n  {\n    key: CLAIMED_FROM,\n    text: \"Claimed From\",\n    type: fieldTypes.DATE_PICKER,\n  },\n  {\n    key: CLAIMED_TO,\n    text: \"Claimed To\",\n    type: fieldTypes.DATE_PICKER,\n  },\n  {\n    key: UPLOADED_FROM,\n    text: \"Uploaded From\",\n    type: fieldTypes.DATE_PICKER,\n  },\n  {\n    key: UPLOADED_TO,\n    text: \"Uploaded To\",\n    type: fieldTypes.DATE_PICKER,\n  },\n  {\n    key: EXPIRATION_START_DATE,\n    text: \"Expiration Start Date\",\n    type: fieldTypes.DATE_PICKER,\n  },\n  {\n    key: EXPIRATION_END_DATE,\n    text: \"Expiration End Date\",\n    type: fieldTypes.DATE_PICKER,\n  },\n];\n\n/**\n * Field constant used for rendering in data-table for SA Swag Kit\n */\nexport const SwagKitColumn = {\n  key: \"levelStatusName\",\n  name: \"Swag Kit\",\n  fieldName: \"levelStatusName\",\n  minWidth: 100,\n  isResizable: true,\n};\n\n/**\n * Drop-down options for SA - Swag Kit type\n */\nexport const swagKitOptions = [\n  {\n    key: \"\",\n    text: \"Any\",\n  },\n  {\n    key: \"Beta\",\n    text: \"Beta\",\n  },\n  {\n    key: \"Gold\",\n    text: \"Gold\",\n  },\n];\n\n/**\n * Sidebar filter constants used for rendering in Swag Kit\n * Additional filter : Swag Kit\n */\nexport const benefitSwagKitFilter: IFilterField[] = [\n  {\n    key: BENEFIT_STATUS,\n    text: \"Benefit Status\",\n    type: fieldTypes.MULTI_SELECT,\n    options: benefitStatus,\n  },\n  {\n    key: SWAG_KIT,\n    text: \"Swag Kit\",\n    type: fieldTypes.SELECT,\n    options: swagKitOptions,\n  },\n  {\n    key: CLAIMED_FROM,\n    text: \"Claimed From\",\n    type: fieldTypes.DATE_PICKER,\n  },\n  {\n    key: CLAIMED_TO,\n    text: \"Claimed To\",\n    type: fieldTypes.DATE_PICKER,\n  },\n  {\n    key: UPLOADED_FROM,\n    text: \"Uploaded From\",\n    type: fieldTypes.DATE_PICKER,\n  },\n  {\n    key: UPLOADED_TO,\n    text: \"Uploaded To\",\n    type: fieldTypes.DATE_PICKER,\n  },\n  {\n    key: EXPIRATION_START_DATE,\n    text: \"Expiration Start Date\",\n    type: fieldTypes.DATE_PICKER,\n  },\n  {\n    key: EXPIRATION_END_DATE,\n    text: \"Expiration End Date\",\n    type: fieldTypes.DATE_PICKER,\n  },\n];\n\n/**\n * Field constant used for rendering in data-table for MVP Award Kit\n */\nexport const SKUColumn = {\n  key: \"sku\",\n  name: \"SKU\",\n  fieldName: \"sku\",\n  minWidth: 160,\n  isResizable: true,\n};\n\n/**\n * Sidebar filter constants used for rendering in Award Kit benefits\n * Additional filter : SKU\n */\nexport const benefitAwardKitFilter: IFilterField[] = [\n  {\n    key: BENEFIT_STATUS,\n    text: \"Benefit Status\",\n    type: fieldTypes.MULTI_SELECT,\n    options: benefitStatus,\n  },\n  {\n    key: SKU,\n    text: \"SKU\",\n    type: fieldTypes.SKU,\n  },\n  {\n    key: CLAIMED_FROM,\n    text: \"Claimed From\",\n    type: fieldTypes.DATE_PICKER,\n  },\n  {\n    key: CLAIMED_TO,\n    text: \"Claimed To\",\n    type: fieldTypes.DATE_PICKER,\n  },\n  {\n    key: UPLOADED_FROM,\n    text: \"Uploaded From\",\n    type: fieldTypes.DATE_PICKER,\n  },\n  {\n    key: UPLOADED_TO,\n    text: \"Uploaded To\",\n    type: fieldTypes.DATE_PICKER,\n  },\n  {\n    key: EXPIRATION_START_DATE,\n    text: \"Expiration Start Date\",\n    type: fieldTypes.DATE_PICKER,\n  },\n  {\n    key: EXPIRATION_END_DATE,\n    text: \"Expiration End Date\",\n    type: fieldTypes.DATE_PICKER,\n  },\n];\n","import React, { useEffect } from \"react\";\n\nimport { delay } from \"lodash\";\n\nimport {\n  DefaultButton,\n  MessageBar,\n  MessageBarType,\n  Panel,\n  PanelType,\n  PrimaryButton,\n  Separator,\n  Stack,\n  StackItem,\n  Text,\n} from \"@fluentui/react\";\n\nimport {\n  benefitLabelStyles,\n  containerStyles,\n  horizontalGapStackTokens,\n  removeButtonStyles,\n} from \"Components/ProfileVisualStudioBenefitDetails/VisualStudioBenefitDetailSidePanel.styles\";\nimport {\n  buttonStyles,\n  messageBarStyles,\n  panelHeaderStyles,\n} from \"Components/SidePanel/SidePanel.styles\";\nimport { BenefitNameEnum } from \"Constants/BenefitConstants\";\nimport { OperationStatus } from \"Constants/OperationStatus\";\n\nimport { IVisualStudioBenefitDetailSidePanelProps } from \"./IVisualStudioBenefitDetailSidePanelProps\";\n\nconst VisualStudioBenefitDetailSidePanel = (\n  props: IVisualStudioBenefitDetailSidePanelProps\n): React.ReactElement => {\n  const {\n    isProvisioned,\n    currentStatus,\n    canEnableBenefits,\n    assignBenefitClicked,\n    extendBenefitClicked,\n    removeBenefitClicked,\n    getProfileBenefits,\n    claimBenefitReset,\n    errorMessage,\n    operationStatus,\n    isPanelOpen,\n    setIsPanelOpen,\n  } = props;\n\n  const dismissPanel = (): void => {\n    setIsPanelOpen(false);\n    claimBenefitReset();\n  };\n\n  useEffect(() => {\n    if (operationStatus === OperationStatus.Succeeded) {\n      // We need to delay here because the VS Partner API does not always immediately reflect the update.\n      delay(getProfileBenefits, 2000);\n      delay(dismissPanel, 2000);\n    }\n  }, [operationStatus === OperationStatus.Succeeded]);\n\n  const isSaving =\n    operationStatus === OperationStatus.Pending || operationStatus === OperationStatus.Succeeded;\n\n  const onRenderHeaderContent = (): React.ReactElement => (\n    <Text styles={panelHeaderStyles}>Manage Benefit</Text>\n  );\n\n  const onRenderFooterContent = (): React.ReactElement => (\n    <>\n      {!!errorMessage ? (\n        <MessageBar messageBarType={MessageBarType.warning} styles={messageBarStyles}>\n          {errorMessage}\n        </MessageBar>\n      ) : null}\n      <div>\n        <Separator />\n        {!isProvisioned && canEnableBenefits && (\n          <PrimaryButton\n            text=\"Enable\"\n            styles={buttonStyles}\n            onClick={assignBenefitClicked}\n            disabled={isSaving}\n          />\n        )}\n        {isProvisioned && (\n          <PrimaryButton\n            styles={{ ...buttonStyles, ...removeButtonStyles }}\n            text=\"Remove\"\n            onClick={removeBenefitClicked}\n            disabled={isSaving}\n            color=\"red\"\n          />\n        )}\n        {isProvisioned && (\n          <PrimaryButton\n            text=\"Extend\"\n            onClick={extendBenefitClicked}\n            styles={buttonStyles}\n            disabled={isSaving}\n          />\n        )}\n        <DefaultButton onClick={dismissPanel} styles={buttonStyles} disabled={isSaving}>\n          Cancel\n        </DefaultButton>\n      </div>\n    </>\n  );\n\n  return (\n    <Panel\n      isOpen={isPanelOpen}\n      title=\"Manage Benefit\"\n      closeButtonAriaLabel=\"Close\"\n      onRenderHeader={onRenderHeaderContent}\n      onRenderFooterContent={onRenderFooterContent}\n      onDismiss={dismissPanel}\n      type={PanelType.medium}\n      isFooterAtBottom={true}\n    >\n      <Stack>\n        <Text>You can claim a benefit and assign to active users</Text>\n      </Stack>\n      <Stack styles={containerStyles}>\n        <Stack horizontal tokens={horizontalGapStackTokens}>\n          <StackItem>\n            <Text styles={benefitLabelStyles}>Benefit:</Text>\n          </StackItem>\n          <StackItem>\n            <Text>{BenefitNameEnum.VisualStudio}</Text>\n          </StackItem>\n        </Stack>\n        <Stack horizontal tokens={horizontalGapStackTokens}>\n          <StackItem>\n            <Text styles={benefitLabelStyles}>Current Status:</Text>\n          </StackItem>\n          <StackItem>\n            <Text>{currentStatus}</Text>\n          </StackItem>\n        </Stack>\n      </Stack>\n    </Panel>\n  );\n};\n\nexport default VisualStudioBenefitDetailSidePanel;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { useState } from \"react\";\n\nimport { Icon, IIconStyles, Link } from \"office-ui-fabric-react\";\n\nimport { ICopyButtonProps } from \"./ICopyButtonProps\";\n\n/**\n * CopyButton component\n * @param {ICopyButtonProps} props the component props\n * @returns {void} rendered void.\n */\nconst CopyButton: React.FunctionComponent<ICopyButtonProps> = ({\n  text,\n  styles,\n  showCopyText,\n}): React.ReactElement => {\n  const [isCopied, setIsCopied] = useState(false);\n\n  /**\n   * CopyToClipboard Function\n   * @returns {void} rendered void.\n   */\n  const copyToClipboard = (): void => {\n    navigator.clipboard.writeText(text);\n    setIsCopied(true);\n    setTimeout(() => setIsCopied(false), 3000);\n  };\n\n  const copyIconStyles: IIconStyles = {\n    root: {\n      paddingRight: 5,\n      verticalAlign: \"bottom\",\n    },\n  };\n\n  return (\n    <Link key={text} styles={styles} onClick={copyToClipboard}>\n      <Icon iconName=\"copy\" styles={copyIconStyles}></Icon>\n      {showCopyText && (isCopied ? \"Copied\" : \"Copy\")}\n    </Link>\n  );\n};\n\nexport default CopyButton;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport styled from \"styled-components\";\n\nimport {\n  getTheme,\n  FontWeights,\n  ICommandBarStyles,\n  IStackStyles,\n  IIconStyles,\n} from \"@fluentui/react\";\n\nconst theme = getTheme();\n\nexport const wrapperStyles: IStackStyles = {\n  root: {\n    border: `1px solid ${theme.palette.neutralTertiaryAlt}`,\n    borderRadius: \"0.5rem\",\n    padding: \"2.25rem 1.5rem\",\n    boxShadow: \"0px 1px 6px rgba(0, 0, 0, 0.2)\",\n    marginTop: \"1.5rem\",\n  },\n};\n\nexport const commandBarStyles: ICommandBarStyles = {\n  root: {\n    borderRadius: \"8px\",\n    boxShadow: \" 0px 1px 4px rgba(0, 0, 0, 0.2)\",\n    margin: \"1rem 0.5rem 1.5rem\",\n    padding: \"0.75rem\",\n    selectors: {\n      [\"button\"]: {\n        marginRight: \"36px\",\n      },\n      [\".ms-Button-label\"]: {\n        fontSize: \"14px\",\n        fontWeight: FontWeights.semibold,\n      },\n      [\"i[data-icon-name='Blocked']\"]: {\n        color: theme.palette.red,\n      },\n    },\n  },\n};\n\nexport const copyIconStyles: IIconStyles = {\n  root: {\n    position: \"absolute\",\n    right: 0,\n    top: \"50%\",\n    transform: \"translateY(-50%)\",\n    color: theme.palette.blue,\n  },\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n/**\n * The TenantTypes enum.\n */\nexport enum ApplicationStatusTypesEnum {\n  /**\n   * Application Form Status Type enum: Invited\n   */\n  INVITED = \"Invited\",\n\n  /**\n   * Application Form Status Type enum: Not Submitted\n   */\n  NOT_SUBMITTED = \"Not Submitted\",\n\n  /**\n   * Application Form Status Type enum: Saved\n   */\n  SAVED = \"Saved\",\n\n  /**\n   * Application Form Status Type enum: Review Eligible\n   */\n  REVIEW_ELIGIBLE = \"Review Eligible\",\n\n  /**\n   * Application Form Status Type enum: Under Review\n   */\n  UNDER_REVIEW = \"Under Review\",\n  Declined = \"Declined\",\n  DeclinePending = \"Declined-Pending\",\n  InvitedPending = \"Invited-Pending\",\n  DecisionPending = \"Decision-Pending\",\n  AutoDeclined = \"Auto Declined\",\n  Submitted = \"Submitted\",\n}\n\nexport const APPLICATION_STATUS_DROPDOWN_OPTIONS = [\n  {\n    key: ApplicationStatusTypesEnum.InvitedPending,\n    text: ApplicationStatusTypesEnum.InvitedPending,\n  },\n  {\n    key: ApplicationStatusTypesEnum.DeclinePending,\n    text: ApplicationStatusTypesEnum.DeclinePending,\n  },\n  {\n    key: ApplicationStatusTypesEnum.DecisionPending,\n    text: ApplicationStatusTypesEnum.DecisionPending,\n  },\n];\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { IFilterField } from \"Interfaces/IFilterField\";\nimport { IKeyText } from \"Interfaces/IKeyText\";\n\nimport { ApplicationStatusTypesEnum } from \"./ApplicationStatusTypes\";\nimport { fieldTypes, FilterValueFieldNames } from \"./FilterFields\";\nimport { RolesEnum, RoleNamesEnum } from \"./RolesPermissionsConstants\";\n\nexport const defaultListingPageSize = 16;\n\nexport enum ApplicationTypeEnum {\n  ANY = \"Any\",\n  NEW = \"New\",\n  RENEW = \"Renew\",\n}\n\nexport enum ApplicationTabs {\n  ProfileInformation = \"profile-information\",\n  ApplicationQuestions = \"application-questions\",\n  HighlightedActivitiesEvents = \"highlighted-activities-events\",\n  AdditionalActivitiesEvents = \"additional-activities-events\",\n  Nomination = \"nomination\",\n  ApplicationFlags = \"application-flags\",\n}\n\n/**\n * The Questions Section StringEnum.\n * @description Section name for application questions.\n * @enum\n */\nexport enum QuestionsFormSectionStringEnum {\n  PROFILE_INFORMATION = \"Profile Information\",\n}\n\n/**\n * field used to sort the profile-section questions\n */\nexport const OrderBy = \"orderBy\";\n\nexport const applicationTypes: IKeyText[] = [\n  {\n    key: ApplicationTypeEnum.ANY,\n    text: ApplicationTypeEnum.ANY,\n  },\n  {\n    key: ApplicationTypeEnum.NEW,\n    text: ApplicationTypeEnum.NEW,\n  },\n  {\n    key: ApplicationTypeEnum.RENEW,\n    text: ApplicationTypeEnum.RENEW,\n  },\n];\n\nexport const applicationTypesWithoutAny: IKeyText[] = [\n  {\n    key: ApplicationTypeEnum.NEW,\n    text: ApplicationTypeEnum.NEW,\n  },\n  {\n    key: ApplicationTypeEnum.RENEW,\n    text: ApplicationTypeEnum.RENEW,\n  },\n];\n\n/**\n * Values for application status\n */\nexport const applicationStatusMLSA: IKeyText[] = [\n  {\n    key: ApplicationStatusTypesEnum.INVITED,\n    text: ApplicationStatusTypesEnum.INVITED,\n  },\n  {\n    key: ApplicationStatusTypesEnum.SAVED,\n    text: ApplicationStatusTypesEnum.SAVED,\n  },\n  {\n    key: ApplicationStatusTypesEnum.UNDER_REVIEW,\n    text: ApplicationStatusTypesEnum.UNDER_REVIEW,\n  },\n  {\n    key: ApplicationStatusTypesEnum.Declined,\n    text: ApplicationStatusTypesEnum.Declined,\n  },\n];\nexport const applicationStatusMvp: IKeyText[] = [\n  {\n    key: ApplicationStatusTypesEnum.INVITED,\n    text: ApplicationStatusTypesEnum.INVITED,\n  },\n  {\n    key: ApplicationStatusTypesEnum.SAVED,\n    text: ApplicationStatusTypesEnum.SAVED,\n  },\n  {\n    key: ApplicationStatusTypesEnum.Submitted,\n    text: ApplicationStatusTypesEnum.Submitted,\n  },\n  {\n    key: ApplicationStatusTypesEnum.REVIEW_ELIGIBLE,\n    text: ApplicationStatusTypesEnum.REVIEW_ELIGIBLE,\n  },\n  {\n    key: ApplicationStatusTypesEnum.UNDER_REVIEW,\n    text: ApplicationStatusTypesEnum.UNDER_REVIEW,\n  },\n  {\n    key: ApplicationStatusTypesEnum.Declined,\n    text: ApplicationStatusTypesEnum.Declined,\n  },\n  {\n    key: ApplicationStatusTypesEnum.NOT_SUBMITTED,\n    text: ApplicationStatusTypesEnum.NOT_SUBMITTED,\n  },\n];\nexport const applicationStatusRd: IKeyText[] = [\n  {\n    key: ApplicationStatusTypesEnum.INVITED,\n    text: ApplicationStatusTypesEnum.INVITED,\n  },\n  {\n    key: ApplicationStatusTypesEnum.SAVED,\n    text: ApplicationStatusTypesEnum.SAVED,\n  },\n  {\n    key: ApplicationStatusTypesEnum.REVIEW_ELIGIBLE,\n    text: ApplicationStatusTypesEnum.REVIEW_ELIGIBLE,\n  },\n  {\n    key: ApplicationStatusTypesEnum.UNDER_REVIEW,\n    text: ApplicationStatusTypesEnum.UNDER_REVIEW,\n  },\n  {\n    key: ApplicationStatusTypesEnum.Declined,\n    text: ApplicationStatusTypesEnum.Declined,\n  },\n];\n\nexport enum TechnologyAreaStatusEnum {\n  DecisionPending = \"Decision-Pending\",\n  InvitedPending = \"Invited-Pending\",\n  DeclinedPending = \"Declined-Pending\",\n}\n\nexport const technologyAreaStatuses = [\n  {\n    key: TechnologyAreaStatusEnum.DecisionPending,\n    text: TechnologyAreaStatusEnum.DecisionPending,\n  },\n  {\n    key: TechnologyAreaStatusEnum.InvitedPending,\n    text: TechnologyAreaStatusEnum.InvitedPending,\n  },\n  {\n    key: TechnologyAreaStatusEnum.DeclinedPending,\n    text: TechnologyAreaStatusEnum.DeclinedPending,\n  },\n];\n\nexport const ANY = \"Any\";\nexport const ME = \"Me\";\n\n/**\n * Any or me options\n */\nexport const anyOrMeOptions: IKeyText[] = [\n  {\n    key: ANY,\n    text: ANY,\n  },\n  {\n    key: ME,\n    text: ME,\n  },\n];\n\nexport const flagRoleOptions: IKeyText[] = [\n  {\n    key: RolesEnum.MVP_REVIEWER,\n    text: RoleNamesEnum.COMMUNITY_MANAGER,\n  },\n];\n\nexport enum technologyAreaStatusReasonEnum {\n  BelowMinScore = \"Below Min Score\",\n  MayWorkForCompetitor = \"May work for a competitor\",\n  NotScored = \"Not Scored\",\n  ManualDecline = \"Manual Decline\",\n  RenewalNotSubmitted = \"Renewal not submitted\",\n  ExceedsCap = \"Exceeds Cap\",\n  NeedManualInput = \"Need manual input\",\n}\n\nexport const technologyAreaStatusReasons = [\n  {\n    key: technologyAreaStatusReasonEnum.BelowMinScore,\n    text: technologyAreaStatusReasonEnum.BelowMinScore,\n  },\n  {\n    key: technologyAreaStatusReasonEnum.ExceedsCap,\n    text: technologyAreaStatusReasonEnum.ExceedsCap,\n  },\n  {\n    key: technologyAreaStatusReasonEnum.MayWorkForCompetitor,\n    text: technologyAreaStatusReasonEnum.MayWorkForCompetitor,\n  },\n  {\n    key: technologyAreaStatusReasonEnum.ManualDecline,\n    text: technologyAreaStatusReasonEnum.ManualDecline,\n  },\n  {\n    key: technologyAreaStatusReasonEnum.NotScored,\n    text: technologyAreaStatusReasonEnum.NotScored,\n  },\n  {\n    key: technologyAreaStatusReasonEnum.RenewalNotSubmitted,\n    text: technologyAreaStatusReasonEnum.RenewalNotSubmitted,\n  },\n  {\n    key: technologyAreaStatusReasonEnum.NeedManualInput,\n    text: technologyAreaStatusReasonEnum.NeedManualInput,\n  },\n];\n\n/**\n * The default error message that is thrown when a call to an external service times out\n */\nexport const GENERIC_API_TIMEOUT_ERROR =\n  \"A timeout error has occurred. Please try again later. If the issue persists, contact support.\";\n\n/**\n * Setting of constants for default field strings\n * we use to set in reducer.\n */\nexport const APPLICATION_STATUS = \"applicationStatus\";\n\nexport const APPLICATION_TYPE = \"applicationType\";\n\nexport const APPLICATION_COUNTRY_REGION = \"country\";\n\nexport const APPLICATION_STATE_PROVINCE = \"applicationStateProvince\";\n\nexport const GRANT_ANNUAL_EXCEPTION = \"grantAnnualException\";\n\nexport const APPLICATION_REGION = \"region\";\n\nexport const AWARD_CATEGORY = \"awardCategory\";\n\nexport const TECHNOLOGY_AREA = \"technologyArea\";\n\nexport const TECHNOLOGY_AREA_GROUP = \"technologyAreaGroup\";\n\nexport const ASSIGNED_TO = \"assignedTo\";\n\nexport const GENDER = \"gender\";\n\nexport const TECHNOLOGY_AREA_STATUS = \"technologyAreaStatus\";\n\nexport const TECHNOLOGY_AREA_STATUS_REASON = \"technologyAreaStatusReason\";\n\nexport const FLAG_REASON = \"flagReason\";\n\nexport const COHORT = \"cohort\";\n\nexport const TECHNOLOGY_AREA_SCORE = \"technologyAreaScore\";\n\nexport const REVIEW_STATUS = \"reviewStatuses\";\n\nexport const AVAILABLE_CPM_LIST = \"availableCpmList\";\n\nexport const GOVERNMENT_EMPLOYEE_MESSAGE = \"Govt. Employee\";\n\nexport const COMPETITOR_MESSAGE = \"May work for a competitor\";\n\n/**\n * Sidebar filter constants used for rendering\n */\nexport const studentsApplicationFilterFields: IFilterField[] = [\n  {\n    key: APPLICATION_STATUS,\n    text: \"Application Status\",\n    type: fieldTypes.MULTI_SELECT,\n    options: applicationStatusMLSA,\n  },\n  {\n    key: APPLICATION_COUNTRY_REGION,\n    text: \"Country/Region\",\n    type: fieldTypes.COUNTRY,\n  },\n  {\n    key: APPLICATION_STATE_PROVINCE,\n    text: \"State/Province\",\n    type: fieldTypes.PROVINCE,\n  },\n];\n\nexport enum ApplicationCohortEnum {\n  Any = \"Any\",\n  Current = \"Current\",\n  Future = \"Current + 1\",\n  Past = \"Current - 1\",\n}\n\nexport const mvpAnnualExceptionOptions: IKeyText[] = [\n  {\n    key: \"Yes\",\n    text: \"Yes\",\n  },\n  {\n    key: \"No\",\n    text: \"No\",\n  },\n];\n\nexport const cohortOptions = [\n  {\n    key: ApplicationCohortEnum.Any,\n    text: ApplicationCohortEnum.Any,\n  },\n  {\n    key: ApplicationCohortEnum.Current,\n    text: ApplicationCohortEnum.Current,\n  },\n  {\n    key: ApplicationCohortEnum.Future,\n    text: ApplicationCohortEnum.Future,\n  },\n  {\n    key: ApplicationCohortEnum.Past,\n    text: ApplicationCohortEnum.Past,\n  },\n];\n\nexport enum FlagReasons {\n  WrongCategoryTechArea = \"Wrong Award Category / Technology area\",\n  Misconduct = \"Misconduct\",\n  MVPRequestedToBeRetired = \"MVP requested to be retired\",\n  NeedsAdditionalReview = \"Needs additional review\",\n  GovernmentOfficial = \"Government official\",\n  VendorAtMicrosoft = \"Vendor at Microsoft\",\n  HiredByMicrosoft = \"Hired by Microsoft\",\n  UnscoredApplication = \"Unscored application\",\n  NotFlagged = \"Not flagged\",\n}\n\nexport const REASON_FOR_FLAG_DROPDOWN_OPTIONS = [\n  { key: \"\", text: \"Any\" },\n  { key: \"1\", text: FlagReasons.WrongCategoryTechArea },\n  { key: \"2\", text: FlagReasons.Misconduct },\n  { key: \"3\", text: FlagReasons.MVPRequestedToBeRetired },\n  { key: \"4\", text: FlagReasons.NeedsAdditionalReview },\n  { key: \"5\", text: FlagReasons.GovernmentOfficial },\n  { key: \"6\", text: FlagReasons.VendorAtMicrosoft },\n  { key: \"7\", text: FlagReasons.HiredByMicrosoft },\n  { key: \"8\", text: FlagReasons.UnscoredApplication },\n];\n\nexport const REASON_FOR_FLAG_DROPDOWN_MULTISELECT_OPTIONS = [\n  {\n    key: FlagReasons.WrongCategoryTechArea,\n    text: FlagReasons.WrongCategoryTechArea,\n  },\n  {\n    key: FlagReasons.Misconduct,\n    text: FlagReasons.Misconduct,\n  },\n  {\n    key: FlagReasons.MVPRequestedToBeRetired,\n    text: FlagReasons.MVPRequestedToBeRetired,\n  },\n  {\n    key: FlagReasons.NeedsAdditionalReview,\n    text: FlagReasons.NeedsAdditionalReview,\n  },\n  {\n    key: FlagReasons.GovernmentOfficial,\n    text: FlagReasons.GovernmentOfficial,\n  },\n  {\n    key: FlagReasons.VendorAtMicrosoft,\n    text: FlagReasons.VendorAtMicrosoft,\n  },\n  {\n    key: FlagReasons.HiredByMicrosoft,\n    text: FlagReasons.HiredByMicrosoft,\n  },\n  {\n    key: FlagReasons.UnscoredApplication,\n    text: FlagReasons.UnscoredApplication,\n  },\n  {\n    key: FlagReasons.NotFlagged,\n    text: FlagReasons.NotFlagged,\n  },\n];\n\n/**\n * Sidebar filter constants used for rendering\n */\nexport const mvpApplicationFilterFields: IFilterField[] = [\n  {\n    key: APPLICATION_TYPE,\n    text: \"Application Type\",\n    type: fieldTypes.SELECT,\n    options: applicationTypes,\n  },\n  {\n    key: APPLICATION_STATUS,\n    text: \"Application Status\",\n    type: fieldTypes.MULTI_SELECT,\n    options: applicationStatusMvp,\n  },\n  {\n    key: FilterValueFieldNames.REVIEW_STATUS,\n    text: \"Review Status\",\n    type: fieldTypes.REVIEW_STATUS,\n    options: anyOrMeOptions,\n  },\n  {\n    key: FilterValueFieldNames.COHORT,\n    text: \"Cohort\",\n    type: fieldTypes.SELECT,\n    options: cohortOptions,\n  },\n  {\n    key: FilterValueFieldNames.ASSIGNED_TO,\n    text: \"Assigned To\",\n    type: fieldTypes.SELECT,\n    options: anyOrMeOptions,\n  },\n  {\n    key: FilterValueFieldNames.TECHNOLOGY_AREA_GROUP,\n    text: \"Award Category\",\n    type: fieldTypes.TECHNOLOGY_AREA_GROUP,\n  },\n  {\n    key: FilterValueFieldNames.TECHNOLOGY_AREA,\n    text: \"Technology Area\",\n    type: fieldTypes.TECHNOLOGY_AREA,\n  },\n  {\n    key: FilterValueFieldNames.TECHNOLOGY_AREA_STATUS,\n    text: \"TA Status\",\n    type: fieldTypes.MULTI_SELECT,\n    options: technologyAreaStatuses,\n  },\n  {\n    key: FilterValueFieldNames.SCORE,\n    text: \"TA Score\",\n    type: fieldTypes.MULTI_SELECT,\n    options: [\n      { key: \"0\", text: \"Not Scored\" },\n      ...[1, 2, 3, 4, 5].map((x) => ({ key: x.toString(), text: x.toString() })),\n    ],\n  },\n  {\n    key: FilterValueFieldNames.TECHNOLOGY_AREA_STATUS_REASON,\n    text: \"TA Reason\",\n    type: fieldTypes.MULTI_SELECT,\n    options: technologyAreaStatusReasons.sort((a, b) => a.text.localeCompare(b.text)),\n  },\n  {\n    key: FilterValueFieldNames.FLAG_REASON,\n    text: \"Reason for Flag\",\n    type: fieldTypes.MULTI_SELECT,\n    options: REASON_FOR_FLAG_DROPDOWN_MULTISELECT_OPTIONS,\n  },\n  {\n    key: FilterValueFieldNames.AVAILABLE_CPM_LIST,\n    text: \"CPM List\",\n    type: fieldTypes.AVAILABLE_CPM_LIST,\n  },\n  {\n    key: FilterValueFieldNames.COUNTRY,\n    text: \"Country\",\n    type: fieldTypes.COUNTRY,\n  },\n  {\n    key: APPLICATION_STATE_PROVINCE,\n    text: \"State/Province\",\n    type: fieldTypes.PROVINCE,\n  },\n  {\n    key: FilterValueFieldNames.GRANT_ANNUAL_EXCEPTION,\n    text: \"Grant Annual Exception\",\n    type: fieldTypes.MULTI_SELECT,\n    options: mvpAnnualExceptionOptions,\n  },\n];\n\n/**\n * Sidebar filter constants used for rendering\n */\nexport const rdApplicationFilterFields: IFilterField[] = [\n  {\n    key: APPLICATION_TYPE,\n    text: \"Application Type\",\n    type: fieldTypes.SELECT,\n    options: applicationTypes,\n  },\n  {\n    key: APPLICATION_STATUS,\n    text: \"Application Status\",\n    type: fieldTypes.MULTI_SELECT,\n    options: applicationStatusRd,\n  },\n\n  {\n    key: APPLICATION_COUNTRY_REGION,\n    text: \"Country/Region\",\n    type: fieldTypes.COUNTRY,\n  },\n  {\n    key: APPLICATION_STATE_PROVINCE,\n    text: \"State/Province\",\n    type: fieldTypes.PROVINCE,\n  },\n];\n\nexport const mvpActivitiesEventsFilterFields: IFilterField[] = [\n  {\n    key: FilterValueFieldNames.ACTIVITY_OR_EVENT,\n    text: \"Type\",\n    type: fieldTypes.MULTI_SELECT,\n    options: [\n      { key: \"Activity\", text: \"Activity\" },\n      { key: \"Event\", text: \"Event\" },\n    ],\n  },\n  {\n    key: FilterValueFieldNames.TECHNOLOGY_AREA_GROUP,\n    text: \"Award Category\",\n    type: fieldTypes.TECHNOLOGY_AREA_GROUP,\n  },\n  {\n    key: FilterValueFieldNames.TECHNOLOGY_AREA,\n    text: \"Primary Technology Area\",\n    type: fieldTypes.TECHNOLOGY_AREA,\n  },\n  {\n    key: FilterValueFieldNames.ACTIVITY_OR_EVENT_TYPE,\n    text: \"Activity/Event Type\",\n    type: fieldTypes.ACTIVITY_OR_EVENT_TYPE,\n  },\n];\n\nexport const defaultFilterValues: {\n  fieldName: string;\n  value: string;\n}[] = [\n  { fieldName: APPLICATION_TYPE, value: ApplicationTypeEnum.ANY },\n  { fieldName: APPLICATION_STATUS, value: ApplicationStatusTypesEnum.REVIEW_ELIGIBLE },\n  { fieldName: APPLICATION_STATUS, value: ApplicationStatusTypesEnum.UNDER_REVIEW },\n  { fieldName: APPLICATION_STATUS, value: ApplicationStatusTypesEnum.Submitted },\n];\n\n/**\n * Default filter values for mvp highlighted and additional activities and events\n */\nexport const defaultActivitiesEventsFilterValues: {\n  fieldName: string;\n  value: string;\n}[] = [];\n\n/**\n * Adding this to show information regarding the assign application side panel functionality\n */\nconst SidePanelInformation =\n  \"Each Technology Area can be assigned to a Product Group Lead to review and score application. You can either assign it to yourself or another PGL in the same Award Category.\";\nconst UpdateTechnologyAreaSidePanelInformation =\n  'Resetting the score will roll it back to \"Unscored\".';\nexport const SidePanelConstants = {\n  SidePanelInformation: SidePanelInformation,\n  UpdateTechnologyAreaSidePanelInformation: UpdateTechnologyAreaSidePanelInformation,\n};\n\n/**\n * Constant for the \"Start Review\" review status of an application.\n */\nexport const APPLICATION_REVIEW_STATUS_START_REVIEW = \"Start Review\";\nexport const APPLICATION_REVIEW_STATUS_NOT_READY = \"Not Ready\";\nexport const APPLICATION_REVIEW_STATUS_UNDER_REVIEW = \"Under Review\";\nexport const APPLICATION_REVIEW_STATUS_REVIEW_COMPLETED = \"Completed\";\n\nexport const ApplicationReviewStatuses = {\n  APPLICATION_REVIEW_STATUS_START_REVIEW: APPLICATION_REVIEW_STATUS_START_REVIEW,\n  APPLICATION_REVIEW_STATUS_NOT_READY: APPLICATION_REVIEW_STATUS_NOT_READY,\n  APPLICATION_REVIEW_STATUS_UNDER_REVIEW: APPLICATION_REVIEW_STATUS_UNDER_REVIEW,\n  APPLICATION_REVIEW_STATUS_REVIEW_COMPLETED: APPLICATION_REVIEW_STATUS_REVIEW_COMPLETED,\n};\n\nexport const ReviewSubSiteUrlPath = Object.freeze({\n  applications: \"applications\",\n  demographics: \"demographics\",\n});\n\n//need this due to circular dependency between application/profile constants\nconst genders: IKeyText[] = [\n  { key: \"Woman\", text: \"Woman\" },\n  { key: \"Man\", text: \"Man\" },\n  { key: \"Non-Binary\", text: \"Non-Binary\" },\n  { key: \"Choose not to answer\", text: \"Choose not to answer\" },\n];\n\n/**\n * Sidebar filter constants used for rendering\n */\nexport const mvpApplicationDemographicsFilterFields: IFilterField[] = [\n  {\n    key: APPLICATION_TYPE,\n    text: \"Application Type\",\n    type: fieldTypes.MULTI_SELECT,\n    options: applicationTypesWithoutAny,\n  },\n  {\n    key: FilterValueFieldNames.COUNTRY,\n    text: \"Country\",\n    type: fieldTypes.COUNTRY,\n  },\n  {\n    key: FilterValueFieldNames.REGION,\n    text: \"Region\",\n    type: fieldTypes.CL_REGION,\n  },\n  {\n    key: FilterValueFieldNames.TECHNOLOGY_AREA_GROUP,\n    text: \"Award Category\",\n    type: fieldTypes.TECHNOLOGY_AREA_GROUP,\n  },\n  {\n    key: FilterValueFieldNames.TECHNOLOGY_AREA,\n    text: \"Technology Area\",\n    type: fieldTypes.TECHNOLOGY_AREA,\n  },\n  {\n    key: FilterValueFieldNames.GENDER,\n    text: \"Gender\",\n    type: fieldTypes.MULTI_SELECT,\n    options: genders,\n  },\n];\n\n/**\n * Default filter values for mvp demographics.\n */\nexport const defaultMvpDemographicsFilterValues: {\n  fieldName: string;\n  value: string;\n}[] = [];\n\n// Threshold for the MVP application URL length\nexport const maxURLLength = 2000;\n\n// Error message for MVP application URL length\nexport const urlLengthError = \"URL too long, please refine your search\";\n\n// Error message for MVP application URL when invalid parameters are passed\nexport const urlInvalidError = \"Invalid URL parameters, resetting to default filters.\";\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { find } from \"lodash\";\n\nimport * as ProgramProfileConstants from \"./ProgramProfileConstants\";\n\nimport { IFilterField } from \"../Interfaces/IFilterField\";\nimport { IKeyText } from \"../Interfaces/IKeyText\";\nimport { applicationStatusMLSA } from \"./ApplicationConstants\";\nimport { ApplicationStatusTypesEnum } from \"./ApplicationStatusTypes\";\nimport { fieldTypes, FilterValueFieldNames } from \"./FilterFields\";\n\nexport const defaultDelay = 1000;\nexport const defaultListingPageSize = 16;\nexport const nonMSPTenantList = [\"MVP\", \"RD\", \"Reconnect\"];\nexport const MSPTenant = \"MSP\";\nexport const studentPartnerEmailDomain = \"studentambassadors.com\";\nexport const placeholderString = \"---\";\nexport const provisionedBenefitName = \"MSP Visual Studio Benefit\";\n\n/**\n * State of Countries where State selection is mandatory.\n */\nexport const STATE_COUNTRIES = [\"Canada\", \"United States\"];\n\nexport enum ProfileTabs {\n  Profile = \"profile\",\n  ProgramInformation = \"program-information\",\n  Benefits = \"benefits\",\n  Comments = \"comments\",\n  DistributionLists = \"DistributionLists\",\n}\n\nexport const milestones: IKeyText[] = [\n  {\n    key: \"New\",\n    text: \"New\",\n  },\n  {\n    key: \"Alpha\",\n    text: \"Alpha\",\n  },\n  {\n    key: \"Beta\",\n    text: \"Beta\",\n  },\n  {\n    key: \"Gold\",\n    text: \"Gold\",\n  },\n];\nexport const newMilestone = find(milestones, { key: \"New\" })?.key;\n\nexport const programStatusTypes = {\n  INPROCESS: ProgramProfileConstants.INPROCESS,\n  ACTIVE: ProgramProfileConstants.ACTIVE,\n  ACTIVE_VENDOR: ProgramProfileConstants.ACTIVE_VENDOR,\n  DECLINED: ProgramProfileConstants.DECLINED,\n  RENEWAL_DECLINED: ProgramProfileConstants.RENEWAL_DECLINED,\n  AWARD_EXPIRED: ProgramProfileConstants.AWARD_EXPIRED,\n  NEW_ONBOARDING: ProgramProfileConstants.NEW_ONBOARDING,\n  RENEWAL_ONBOARDING: ProgramProfileConstants.RENEWAL_DECLINED,\n  REMOVE_CODE_OF_CONDUCT: ProgramProfileConstants.REMOVE_CODE_OF_CONDUCT,\n  REMOVE_NDA_VIOLATION: ProgramProfileConstants.REMOVE_NDA_VIOLATION,\n  REMOVE_CONFLICT_OF_INTEREST: ProgramProfileConstants.REMOVE_CONFLICT_OF_INTEREST,\n  REMOVE_OTHER: ProgramProfileConstants.REMOVE_OTHER,\n  RETIRED_RESIGNED: ProgramProfileConstants.RETIRED_RESIGNED,\n  RETIRED_GRADUATED: ProgramProfileConstants.RETIRED_GRADUATED,\n  RETIRED_AWARD_RENOUNCED: ProgramProfileConstants.RETIRED_AWARD_RENOUNCED,\n  RETIRED_JOINED_MICROSOFT: ProgramProfileConstants.RETIRED_JOINED_MICROSOFT,\n  RETIRED_OTHER: ProgramProfileConstants.RETIRED_OTHER,\n};\n\nexport const acceptedApplicationStatus = applicationStatusMLSA.filter(\n  (item) => item.key === ApplicationStatusTypesEnum.INVITED\n)[0].key;\n\nexport const MlsaProgramProfileStatuses: IKeyText[] = [\n  {\n    key: ProgramProfileConstants.INPROCESS,\n    text: ProgramProfileConstants.INPROCESS,\n  },\n  {\n    key: ProgramProfileConstants.ACTIVE,\n    text: ProgramProfileConstants.ACTIVE,\n  },\n  {\n    key: ProgramProfileConstants.DECLINED,\n    text: ProgramProfileConstants.DECLINED,\n  },\n  {\n    key: ProgramProfileConstants.RENEWAL_DECLINED,\n    text: ProgramProfileConstants.RENEWAL_DECLINED,\n  },\n  {\n    key: ProgramProfileConstants.AWARD_EXPIRED,\n    text: ProgramProfileConstants.AWARD_EXPIRED,\n  },\n  {\n    key: ProgramProfileConstants.NEW_ONBOARDING,\n    text: ProgramProfileConstants.NEW_ONBOARDING,\n  },\n  {\n    key: ProgramProfileConstants.RENEWAL_ONBOARDING,\n    text: ProgramProfileConstants.RENEWAL_ONBOARDING,\n  },\n  {\n    key: ProgramProfileConstants.REMOVE_CODE_OF_CONDUCT,\n    text: ProgramProfileConstants.REMOVE_CODE_OF_CONDUCT,\n  },\n  {\n    key: ProgramProfileConstants.REMOVE_CONFLICT_OF_INTEREST,\n    text: ProgramProfileConstants.REMOVE_CONFLICT_OF_INTEREST,\n  },\n  {\n    key: ProgramProfileConstants.REMOVE_OTHER,\n    text: ProgramProfileConstants.REMOVE_OTHER,\n  },\n  {\n    key: ProgramProfileConstants.RETIRED_JOINED_MICROSOFT,\n    text: ProgramProfileConstants.RETIRED_JOINED_MICROSOFT,\n  },\n  {\n    key: ProgramProfileConstants.RETIRED_AWARD_RENOUNCED,\n    text: ProgramProfileConstants.RETIRED_AWARD_RENOUNCED,\n  },\n  {\n    key: ProgramProfileConstants.RETIRED_GRADUATED,\n    text: ProgramProfileConstants.RETIRED_GRADUATED,\n  },\n  {\n    key: ProgramProfileConstants.RETIRED_RESIGNED,\n    text: ProgramProfileConstants.RETIRED_RESIGNED,\n  },\n  {\n    key: ProgramProfileConstants.RETIRED_OTHER,\n    text: ProgramProfileConstants.RETIRED_OTHER,\n  },\n];\nexport const mvpProgramProfileStatuses: IKeyText[] = [\n  {\n    key: ProgramProfileConstants.INPROCESS,\n    text: ProgramProfileConstants.INPROCESS,\n  },\n  {\n    key: ProgramProfileConstants.ACTIVE,\n    text: ProgramProfileConstants.ACTIVE,\n  },\n  {\n    key: ProgramProfileConstants.ACTIVE_VENDOR,\n    text: ProgramProfileConstants.ACTIVE_VENDOR,\n  },\n  {\n    key: ProgramProfileConstants.DECLINED,\n    text: ProgramProfileConstants.DECLINED,\n  },\n  {\n    key: ProgramProfileConstants.RENEWAL_DECLINED,\n    text: ProgramProfileConstants.RENEWAL_DECLINED,\n  },\n  {\n    key: ProgramProfileConstants.AWARD_EXPIRED,\n    text: ProgramProfileConstants.AWARD_EXPIRED,\n  },\n  {\n    key: ProgramProfileConstants.NEW_ONBOARDING,\n    text: ProgramProfileConstants.NEW_ONBOARDING,\n  },\n  {\n    key: ProgramProfileConstants.RENEWAL_ONBOARDING,\n    text: ProgramProfileConstants.RENEWAL_ONBOARDING,\n  },\n  {\n    key: ProgramProfileConstants.REMOVED_NON_COMPLIANT,\n    text: ProgramProfileConstants.REMOVED_NON_COMPLIANT,\n  },\n];\n\nexport const mvpProgramProfileRetireStatuses: IKeyText[] = [\n  {\n    key: ProgramProfileConstants.REMOVE_CODE_OF_CONDUCT,\n    text: ProgramProfileConstants.REMOVE_CODE_OF_CONDUCT,\n  },\n  {\n    key: ProgramProfileConstants.REMOVE_NDA_VIOLATION,\n    text: ProgramProfileConstants.REMOVE_NDA_VIOLATION,\n  },\n  {\n    key: ProgramProfileConstants.REMOVE_CONFLICT_OF_INTEREST,\n    text: ProgramProfileConstants.REMOVE_CONFLICT_OF_INTEREST,\n  },\n  {\n    key: ProgramProfileConstants.REMOVE_OTHER,\n    text: ProgramProfileConstants.REMOVE_OTHER,\n  },\n  {\n    key: ProgramProfileConstants.RETIRED_JOINED_MICROSOFT,\n    text: ProgramProfileConstants.RETIRED_JOINED_MICROSOFT,\n  },\n  {\n    key: ProgramProfileConstants.RETIRED_AWARD_RENOUNCED,\n    text: ProgramProfileConstants.RETIRED_AWARD_RENOUNCED,\n  },\n  {\n    key: ProgramProfileConstants.RETIRED_RESIGNED,\n    text: ProgramProfileConstants.RETIRED_RESIGNED,\n  },\n  {\n    key: ProgramProfileConstants.RETIRED_OTHER,\n    text: ProgramProfileConstants.RETIRED_OTHER,\n  },\n];\n\nexport const mvpAnnualExceptionOptions: IKeyText[] = [\n  {\n    key: \"Yes\",\n    text: \"Yes\",\n  },\n  {\n    key: \"No\",\n    text: \"No\",\n  },\n];\nexport const AwardkitMilestone: IKeyText[] = [\n  {\n    key: \"MIC150042\",\n    text: \"New\",\n  },\n  {\n    key: \"MIC150041\",\n    text: \"Renew\",\n  },\n  {\n    key: \"MIC150050\",\n    text: \"5-Year Anniversary Disc\",\n  },\n  {\n    key: \"MIC150045\",\n    text: \"10-Year Anniversary Disc\",\n  },\n  {\n    key: \"MIC150046\",\n    text: \"15-Year Anniversary Disc\",\n  },\n  {\n    key: \"MIC150047\",\n    text: \"20-Year Anniversary Disc\",\n  },\n  {\n    key: \"MIC150048\",\n    text: \"25-Year Anniversary Disc\",\n  },\n  {\n    key: \"MIC150049\",\n    text: \"30-Year Anniversary Disc\",\n  },\n  {\n    key: \"MIC150051\",\n    text: \"35-Year Anniversary Disc\",\n  },\n];\n\n//TODO: this will be removed when the endpoint for admin common data is ready.\nexport const rdProgramProfileStatuses: IKeyText[] = [\n  {\n    key: ProgramProfileConstants.INPROCESS,\n    text: ProgramProfileConstants.INPROCESS,\n  },\n  {\n    key: ProgramProfileConstants.ACTIVE,\n    text: ProgramProfileConstants.ACTIVE,\n  },\n  {\n    key: ProgramProfileConstants.ACTIVE_VENDOR,\n    text: ProgramProfileConstants.ACTIVE_VENDOR,\n  },\n  {\n    key: ProgramProfileConstants.DECLINED,\n    text: ProgramProfileConstants.DECLINED,\n  },\n  {\n    key: ProgramProfileConstants.RENEWAL_DECLINED,\n    text: ProgramProfileConstants.RENEWAL_DECLINED,\n  },\n  {\n    key: ProgramProfileConstants.AWARD_EXPIRED,\n    text: ProgramProfileConstants.AWARD_EXPIRED,\n  },\n  {\n    key: ProgramProfileConstants.NEW_ONBOARDING,\n    text: ProgramProfileConstants.NEW_ONBOARDING,\n  },\n  {\n    key: ProgramProfileConstants.RENEWAL_ONBOARDING,\n    text: ProgramProfileConstants.RENEWAL_ONBOARDING,\n  },\n  {\n    key: ProgramProfileConstants.REMOVE_CODE_OF_CONDUCT,\n    text: ProgramProfileConstants.REMOVE_CODE_OF_CONDUCT,\n  },\n  {\n    key: ProgramProfileConstants.REMOVE_NDA_VIOLATION,\n    text: ProgramProfileConstants.REMOVE_NDA_VIOLATION,\n  },\n  {\n    key: ProgramProfileConstants.REMOVE_CONFLICT_OF_INTEREST,\n    text: ProgramProfileConstants.REMOVE_CONFLICT_OF_INTEREST,\n  },\n  {\n    key: ProgramProfileConstants.REMOVE_OTHER,\n    text: ProgramProfileConstants.REMOVE_OTHER,\n  },\n  {\n    key: ProgramProfileConstants.RETIRED_JOINED_MICROSOFT,\n    text: ProgramProfileConstants.RETIRED_JOINED_MICROSOFT,\n  },\n  {\n    key: ProgramProfileConstants.RETIRED_AWARD_RENOUNCED,\n    text: ProgramProfileConstants.RETIRED_AWARD_RENOUNCED,\n  },\n  {\n    key: ProgramProfileConstants.RETIRED_RESIGNED,\n    text: ProgramProfileConstants.RETIRED_RESIGNED,\n  },\n  {\n    key: ProgramProfileConstants.RETIRED_OTHER,\n    text: ProgramProfileConstants.RETIRED_OTHER,\n  },\n  {\n    key: ProgramProfileConstants.REMOVED_NON_COMPLIANT,\n    text: ProgramProfileConstants.REMOVED_NON_COMPLIANT,\n  },\n];\n\nexport const activeProgramProfileStatus = MlsaProgramProfileStatuses.filter(\n  (item) => item.key === \"Active\"\n)[0].key;\n\nexport const renewalStatuses: IKeyText[] = [\n  {\n    key: \"UnderReview\",\n    text: \"Under Review\",\n  },\n  {\n    key: \"RenewalInvited\",\n    text: \"Renewal Invited\",\n  },\n  {\n    key: \"RenewalRejected\",\n    text: \"Renewal Rejected\",\n  },\n  {\n    key: \"RenewalAccepted\",\n    text: \"Renewal Accepted\",\n  },\n];\n\nexport const schoolDegreeLevels: IKeyText[] = [\n  { key: \"Bachelor\", text: \"Bachelor\" },\n  { key: \"Master\", text: \"Master\" },\n  { key: \"PhD\", text: \"PhD\" },\n];\n\nexport const schoolDegreePrograms: IKeyText[] = [\n  { key: \"Computer Science\", text: \"Computer Science\" },\n  { key: \"Electrical Engineering\", text: \"Electrical Engineering\" },\n  { key: \"Software Engineering\", text: \"Software Engineering\" },\n  { key: \"Systems Engineering\", text: \"Systems Engineering\" },\n  { key: \"Engineering - Other\", text: \"Engineering - Other\" },\n  { key: \"Information Systems\", text: \"Information Systems\" },\n  { key: \"Cyber Security\", text: \"Cyber Security\" },\n  { key: \"Business\", text: \"Business\" },\n  { key: \"Other\", text: \"Other\" },\n];\n\nexport const genders: IKeyText[] = [\n  { key: \"Woman\", text: \"Woman\" },\n  { key: \"Man\", text: \"Man\" },\n  { key: \"Non-Binary\", text: \"Non-Binary\" },\n  { key: \"Choose not to answer\", text: \"Choose not to answer\" },\n];\n\nexport const pronounPreferences: IKeyText[] = [\n  { key: \"He/Him/His\", text: \"He/Him/His\" },\n  { key: \"She/Her/Hers\", text: \"She/Her/Hers\" },\n  { key: \"They/Them/Theirs\", text: \"They/Them/Theirs\" },\n  { key: \"Choose not to answer\", text: \"Choose not to answer\" },\n];\n\nexport const titles: IKeyText[] = [\n  { key: \"Mr.\", text: \"Mr.\" },\n  { key: \"Mrs.\", text: \"Mrs.\" },\n  { key: \"Miss\", text: \"Miss\" },\n  { key: \"Ms.\", text: \"Ms.\" },\n  { key: \"Mx\", text: \"Mx\" },\n  { key: \"Dr.\", text: \"Dr.\" },\n  { key: \"Choose not to answer\", text: \"Choose not to answer\" },\n];\n\nexport const shirtFitTypes: IKeyText[] = [\n  { key: \"Man\", text: \"Man\" },\n  { key: \"Woman\", text: \"Woman\" },\n];\n\nexport const shirtSizes: IKeyText[] = [\n  { key: \"XS\", text: \"XS\" },\n  { key: \"S\", text: \"S\" },\n  { key: \"M\", text: \"M\" },\n  { key: \"L\", text: \"L\" },\n  { key: \"XL\", text: \"XL\" },\n  { key: \"XXL\", text: \"XXL\" },\n  { key: \"XXXL\", text: \"XXXL\" },\n];\n\nexport const ndaStatus: IKeyText[] = [\n  { key: \"Compliant\", text: \"Compliant\" },\n  { key: \"Non-compliant\", text: \"Non-compliant\" },\n];\n\nexport const namesLocalized: { key: boolean; text: string }[] = [\n  { key: true, text: \"Localized\" },\n  { key: false, text: \"English\" },\n];\n\nexport const urlPrefix = \"https://\";\n\n/**\n * Dropdown options for the provisioned selector\n */\nexport const provisionedOptions: IKeyText[] = [\n  {\n    key: \"true\",\n    text: \"Yes\",\n  },\n  {\n    key: \"false\",\n    text: \"No\",\n  },\n];\n\nexport const studentOtherProgramMembershipList: IKeyText[] = [\n  {\n    key: \"MVP\",\n    text: \"MVP\",\n  },\n  {\n    key: \"RD\",\n    text: \"RD\",\n  },\n];\n\nexport const mvpOtherProgramMembershipList: IKeyText[] = [\n  {\n    key: \"MSP\",\n    text: \"MLSA\",\n  },\n  {\n    key: \"RD\",\n    text: \"RD\",\n  },\n];\n\nexport const rdOtherProgramMembershipList: IKeyText[] = [\n  {\n    key: \"MSP\",\n    text: \"MLSA\",\n  },\n  {\n    key: \"MVP\",\n    text: \"MVP\",\n  },\n];\n\nexport const ovdfBlockOptions: IKeyText[] = [\n  {\n    key: \"true\",\n    text: \"Yes\",\n  },\n  {\n    key: \"false\",\n    text: \"No\",\n  },\n];\n\n/**\n * Setting of constants for defualt field strings\n * we use to set in reducer.\n */\nexport const APPLICATION_STATUS = \"applicationStatus\";\nexport const PROGRAM_STATUS = \"programStatus\";\nexport const AVAILABLE_CPM_LIST = \"availableCpmList\";\n\n/**\n * Sidebar filter constants used for rendering\n */\nexport const mlsaUserSidebarFilterFields: IFilterField[] = [\n  {\n    key: APPLICATION_STATUS,\n    text: \"Application Status\",\n    type: fieldTypes.MULTI_SELECT,\n    options: applicationStatusMLSA,\n  },\n  {\n    key: PROGRAM_STATUS,\n    text: \"Program Status\",\n    type: fieldTypes.MULTI_SELECT,\n    options: MlsaProgramProfileStatuses,\n  },\n  {\n    key: \"milestone\",\n    text: \"Milestone\",\n    type: fieldTypes.MULTI_SELECT,\n    options: milestones,\n  },\n  {\n    key: \"provisioned\",\n    text: \"Benefits Provisioned?\",\n    type: fieldTypes.MULTI_SELECT,\n    options: provisionedOptions,\n  },\n  {\n    key: FilterValueFieldNames.AVAILABLE_CPM_LIST,\n    text: \"Cpm\",\n    type: fieldTypes.AVAILABLE_CPM_LIST,\n  },\n  {\n    key: \"country\",\n    text: \"Country/Region\",\n    type: fieldTypes.COUNTRY,\n  },\n  {\n    key: \"regionState\",\n    text: \"State/Province\",\n    type: fieldTypes.PROVINCE,\n  },\n  {\n    key: FilterValueFieldNames.OTHER_PROGRAM_MEMBERSHIP,\n    text: \"Other Program Membership\",\n    type: fieldTypes.MULTI_SELECT,\n    options: studentOtherProgramMembershipList,\n  },\n  {\n    key: \"programStartDate\",\n    text: \"Program Start Date\",\n    type: fieldTypes.DATE_PICKER,\n  },\n  {\n    key: \"programEndDate\",\n    text: \"Program End Date\",\n    type: fieldTypes.DATE_PICKER,\n  },\n];\n\n/**\n * Default filter values for MLSA\n */\nexport const defaultMlsaFilterValues: {\n  fieldName: string;\n  value: string;\n}[] = [\n  { fieldName: APPLICATION_STATUS, value: acceptedApplicationStatus },\n  { fieldName: PROGRAM_STATUS, value: activeProgramProfileStatus },\n];\n\n/**\n * Sidebar filter constants used for rendering\n */\nexport const mvpSidebarFilterFields: IFilterField[] = [\n  {\n    key: FilterValueFieldNames.PROGRAM_STATUS,\n    text: \"Program Status\",\n    type: fieldTypes.MULTI_SELECT,\n    options: mvpProgramProfileStatuses,\n  },\n  {\n    key: FilterValueFieldNames.COUNTRY,\n    text: \"Country\",\n    type: fieldTypes.COUNTRY,\n  },\n  {\n    key: FilterValueFieldNames.REGION,\n    text: \"Region\",\n    type: fieldTypes.CL_REGION,\n  },\n  {\n    key: FilterValueFieldNames.STATE_PROVINCE,\n    text: \"State/Province\",\n    type: fieldTypes.PROVINCE,\n  },\n  {\n    key: FilterValueFieldNames.GRANT_ANNUAL_EXCEPTION,\n    text: \"Grant Annual Exception\",\n    type: fieldTypes.MULTI_SELECT,\n    options: mvpAnnualExceptionOptions,\n  },\n  {\n    key: FilterValueFieldNames.TECHNOLOGY_AREA_GROUP,\n    text: \"Award Category\",\n    type: fieldTypes.TECHNOLOGY_AREA_GROUP,\n  },\n  {\n    key: FilterValueFieldNames.TECHNOLOGY_AREA,\n    text: \"Technology Area\",\n    type: fieldTypes.TECHNOLOGY_AREA,\n  },\n  {\n    key: FilterValueFieldNames.OTHER_PROGRAM_MEMBERSHIP,\n    text: \"Other Program Membership\",\n    type: fieldTypes.MULTI_SELECT,\n    options: mvpOtherProgramMembershipList,\n  },\n  {\n    key: FilterValueFieldNames.AWARD_PERIOD_START_DATE,\n    text: \"Award Period Start Date\",\n    type: fieldTypes.DATE_PICKER,\n  },\n  {\n    key: FilterValueFieldNames.AWARD_PERIOD_END_DATE,\n    text: \"Award Period End Date\",\n    type: fieldTypes.DATE_PICKER,\n  },\n  {\n    key: FilterValueFieldNames.NDA_STATUS,\n    text: \"NDA Status\",\n    type: fieldTypes.MULTI_SELECT,\n    options: ndaStatus,\n  },\n  {\n    key: FilterValueFieldNames.AVAILABLE_CPM_LIST,\n    text: \"CPMs\",\n    type: fieldTypes.AVAILABLE_CPM_LIST,\n  },\n  {\n    key: FilterValueFieldNames.OVDF_BLOCK,\n    text: \"OVDF Block\",\n    type: fieldTypes.SELECT,\n    options: ovdfBlockOptions,\n  },\n];\n\n/**\n * Default filter values for MVP\n */\nexport const defaultMvpFilterValues: {\n  fieldName: string;\n  value: string;\n}[] = [];\n\n/**\n * Sidebar filter constants used for rendering\n */\nexport const rdSidebarFilterFields: IFilterField[] = [\n  {\n    key: PROGRAM_STATUS,\n    text: \"Program Status\",\n    type: fieldTypes.MULTI_SELECT,\n    options: rdProgramProfileStatuses,\n  },\n  {\n    key: \"industryFocus\",\n    text: \"Industry Focus\",\n    type: fieldTypes.INDUSTRY_FOCUS,\n  },\n  {\n    key: \"technicalExpertise\",\n    text: \"Technical Expertise\",\n    type: fieldTypes.TECHNICAL_EXPERTISE,\n  },\n  {\n    key: \"clRegion\",\n    text: \"Region\",\n    type: fieldTypes.CL_REGION,\n  },\n  {\n    key: \"country\",\n    text: \"Country\",\n    type: fieldTypes.COUNTRY,\n  },\n  {\n    key: \"stateOrProvince\",\n    text: \"State/Province\",\n    type: fieldTypes.PROVINCE,\n  },\n  {\n    key: FilterValueFieldNames.OTHER_PROGRAM_MEMBERSHIP,\n    text: \"Other Program Membership\",\n    type: fieldTypes.MULTI_SELECT,\n    options: rdOtherProgramMembershipList,\n  },\n  {\n    key: FilterValueFieldNames.AWARD_PERIOD_START_DATE,\n    text: \"Award Period Start Date\",\n    type: fieldTypes.DATE_PICKER,\n  },\n  {\n    key: FilterValueFieldNames.AWARD_PERIOD_END_DATE,\n    text: \"Award Period End Date\",\n    type: fieldTypes.DATE_PICKER,\n  },\n];\n\n/**\n * Default filter values for RD\n */\nexport const defaultRdFilterValues: {\n  fieldName: string;\n  value: string;\n}[] = [\n  {\n    fieldName: \"programStatus\",\n    value: \"Active\",\n  },\n];\n\nexport enum mvpProgramStatusTypes {\n  ACTIVE = \"Active\",\n  COMPLETED = \"Completed\",\n  DENIED = \"Denied\",\n  FUTURE = \"Future\",\n  REMOVED = \"Removed\",\n  RESIGNED = \"Resigned\",\n  RETIRED = \"Retired\",\n  SAVED = \"Saved\",\n}\n\nexport const mvpProgramProfileStrengths: IKeyText[] = [\n  {\n    key: \"Mentor\",\n    text: \"Mentor\",\n  },\n  {\n    key: \"Community Organizer\",\n    text: \"Community Organizer\",\n  },\n  {\n    key: \"Social media influencer\",\n    text: \"Social Media Influencer\",\n  },\n  {\n    key: \"Public Speaker\",\n    text: \"Public Speaker\",\n  },\n  {\n    key: \"Content Creator\",\n    text: \"Content Creator\",\n  },\n  {\n    key: \"Helper\",\n    text: \"Helper\",\n  },\n  {\n    key: \"Open Source and All Code Project Supporter\",\n    text: \"Open Source and All Code Project Supporter\",\n  },\n];\n\n/**\n * the \"missing\" countries list.\n */\nexport const VALIDATE_COUNTRY_NAMES = [\n  \"Armenia\",\n  \"United Arab Emirates\",\n  \"Bahrain\",\n  \"Algeria\",\n  \"Egypt\",\n  \"Iraq\",\n  \"Jordan\",\n  \"Kuwait\",\n  \"Saudi Arabia\",\n  \"Tunisia\",\n  \"Azerbaijan\",\n  \"Bosnia and Herzegovina\",\n  \"Belarus\",\n  \"Bulgaria\",\n  \"Bangladesh\",\n  \"Czechia\",\n  \"Denmark\",\n  \"Germany\",\n  \"Austria\",\n  \"Switzerland\",\n  \"Greece\",\n  \"Australia\",\n  \"Canada\",\n  \"United Kingdom\",\n  \"Guernsey\",\n  \"Ghana\",\n  \"Hong Kong SAR\",\n  \"Macao SAR\",\n  \"Ireland\",\n  \"India\",\n  \"Kenya\",\n  \"Malta\",\n  \"Mauritius\",\n  \"Nigeria\",\n  \"New Zealand\",\n  \"Pakistan\",\n  \"Philippines\",\n  \"Rwanda\",\n  \"Singapore\",\n  \"Sierra Leone\",\n  \"Uganda\",\n  \"United States\",\n  \"Tanzania\",\n  \"South Africa\",\n  \"Zambia\",\n  \"Zimbabwe\",\n  \"Argentina\",\n  \"Chile\",\n  \"Colombia\",\n  \"Costa Rica\",\n  \"Ecuador\",\n  \"Spain\",\n  \"Mexico\",\n  \"Panama\",\n  \"Paraguay\",\n  \"Uruguay\",\n  \"Estonia\",\n  \"Finland\",\n  \"Fiji\",\n  \"Faroe Islands\",\n  \"Belgium\",\n  \"France\",\n  \"French Guiana\",\n  \"Guadeloupe\",\n  \"Martinique\",\n  \"Réunion\",\n  \"Israel\",\n  \"Hungary\",\n  \"Indonesia\",\n  \"Italy\",\n  \"Japan\",\n  \"Kazakhstan\",\n  \"Greenland\",\n  \"Korea\",\n  \"Lithuania\",\n  \"Malaysia\",\n  \"Norway\",\n  \"Nepal\",\n  \"Netherlands\",\n  \"Norway\",\n  \"Poland\",\n  \"Brazil\",\n  \"Portugal\",\n  \"Romania\",\n  \"Russia\",\n  \"Slovenia\",\n  \"Slovakia\",\n  \"Serbia\",\n  \"Sweden\",\n  \"Thailand\",\n  \"Turkey\",\n  \"Ukraine\",\n  \"Vietnam\",\n  \"China\",\n  \"Hong Kong SAR\",\n  \"Macao SAR\",\n  \"Taiwan\",\n  \"Uzbekistan\",\n  \"Georgia\",\n  \"Bolivia\",\n  \"Peru\",\n  \"Lebanon\",\n];\n\n/**\n * Default values for Registration & Program Status for Student Ambassador\n */\nexport const MLSA_APPLICATION_STATUS_TEMPLATE = \"MSPUserProfileKey, ApplicationStatus\";\nexport const MLSA_PROGRAM_STATUS_TEMPLATE = \"MSPUserProfileKey, ProgramStatus\";\nexport const ALLOWED_FILE_SIZE_MB = 0.1; // 100 KB in MB\nexport const VALID_FILE_TYPES = [\"csv\"];\nexport const INVALID_FILE = \"Invalid File\";\nexport const INVALID_FILE_SIZE = \"Invalid File Size\";\n\nexport const SwagKitType: IKeyText[] = [\n  {\n    key: \"SwagKit - Beta\",\n    text: \"Beta Swag Kit\",\n  },\n  {\n    key: \"SwagKit - Gold\",\n    text: \"Gold Swag Kit\",\n  },\n];\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nexport const INPROCESS = \"InProcess\";\nexport const ACTIVE = \"Active\";\nexport const ACTIVE_VENDOR = \"Active-Vendor\";\nexport const DECLINED = \"Declined\";\nexport const RENEWAL_DECLINED = \"Renewal-Declined\";\nexport const AWARD_EXPIRED = \"Award-Expired\";\nexport const NEW_ONBOARDING = \"New-Onboarding\";\nexport const RENEWAL_ONBOARDING = \"Renew-Onboarding\";\nexport const REMOVE_CODE_OF_CONDUCT = \"Removed-Code-Of-Conduct\";\nexport const REMOVE_NDA_VIOLATION = \"Removed-NDA-Violation\";\nexport const REMOVE_CONFLICT_OF_INTEREST = \"Removed-Conflict-of-Interest\";\nexport const REMOVE_OTHER = \"Removed-Other\";\nexport const RETIRED_RESIGNED = \"Retired-Resigned\";\nexport const RETIRED_GRADUATED = \"Retired-Graduated\";\nexport const RETIRED_AWARD_RENOUNCED = \"Retired-Award-Renounced\";\nexport const RETIRED_JOINED_MICROSOFT = \"Retired-Joined-Microsoft\";\nexport const RETIRED_OTHER = \"Retired-Other\";\nexport const REMOVED_NON_COMPLIANT = \"Removed-Non-compliant\";\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React from \"react\";\n\nimport { useParams, Link } from \"react-router-dom\";\n\nimport { TableTextWrapper } from \"Components/Common/SharedTableStyles.styles\";\nimport { ProfileTabs } from \"Constants/ProfileConstants\";\n\nimport { IProfileBenefitOtherTenantProps } from \"./IProfileBenefitOtherTenantProps\";\n\nconst ProfileBenefitOtherTenant = ({\n  tenantName,\n}: IProfileBenefitOtherTenantProps): React.ReactElement => {\n  const { id } = useParams<{ id: string }>();\n\n  return (\n    <TableTextWrapper style={{ marginTop: \"1rem\" }}>\n      This user is dual member and this benefit can be managed from&nbsp;\n      <Link to={`/${tenantName.toLowerCase()}/details/${id}?tab=${ProfileTabs.Benefits}`} replace>\n        here\n      </Link>\n      .\n    </TableTextWrapper>\n  );\n};\n\nexport default ProfileBenefitOtherTenant;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React from \"react\";\n\nimport {\n  CheckboxVisibility,\n  CommandBar,\n  DetailsList,\n  DetailsListLayoutMode,\n  IColumn,\n  ICommandBarItemProps,\n  Stack,\n  StackItem,\n  Text,\n} from \"@fluentui/react\";\n\nimport {\n  headerStackStyles,\n  headerTextStyles,\n  ContainerWrapper,\n  DetailsListWrapper,\n  TableTextWrapper,\n} from \"Components/Common/SharedTableStyles.styles\";\nimport CopyButton from \"Components/CopyButton/CopyButton\";\nimport { copyIconStyles } from \"Components/VisualStudioBenefitDetail/VisualStudioBenefitDetail.styles\";\nimport ProfileBenefitOtherTenant from \"Components/ProfileBenefitOtherTenant/ProfileBenefitOtherTenant\";\nimport { IVisualStudioBenefitDetail } from \"Interfaces/VisualStudioBenefitDetail/IVisualStudioBenefitDetail\";\n\nimport { IVisualStudioBenefitsDetailProps } from \"./IVisualStudioBenefitDetailProps\";\nimport { commandBarStyles } from \"./VisualStudioBenefitDetail.styles\";\n\nconst VisualStudioBenefitDetail: React.FunctionComponent<IVisualStudioBenefitsDetailProps> = (\n  props: IVisualStudioBenefitsDetailProps\n) => {\n  const { benefitType, benefits, assignBenefitClicked, canManageBenefits, benefitOtherTenantName } =\n    props;\n\n  const items: ICommandBarItemProps[] = [\n    {\n      key: \"assignBenefit\",\n      text: \"Manage Benefit\",\n      iconProps: { iconName: \"Add\" },\n      onClick: (): void => {\n        assignBenefitClicked(benefitType);\n      },\n    },\n  ];\n\n  const columns = [\n    {\n      key: \"isProvisioned\",\n      name: \"Is provisioned\",\n      fieldName: \"isProvisioned\",\n      minWidth: 50,\n      maxWidth: 100,\n      isResizable: true,\n    },\n    {\n      key: \"subscriptionGuid\",\n      name: \"Subscription GUID\",\n      fieldName: \"subscriptionGuid\",\n      minWidth: 100,\n      maxWidth: 200,\n      isResizable: true,\n    },\n    {\n      key: \"startDate\",\n      name: \"Start date\",\n      fieldName: \"startDate\",\n      minWidth: 100,\n      maxWidth: 200,\n      isResizable: true,\n    },\n    {\n      key: \"expirationDate\",\n      name: \"Expiration date\",\n      fieldName: \"expirationDate\",\n      minWidth: 100,\n      maxWidth: 200,\n      isResizable: true,\n    },\n    {\n      key: \"lastRenewalDate\",\n      name: \"Last renewal date\",\n      fieldName: \"lastRenewalDate\",\n      minWidth: 100,\n      maxWidth: 250,\n      isResizable: true,\n    },\n    {\n      key: \"claimedBy\",\n      name: \"Claimed by\",\n      fieldName: \"claimedBy\",\n      minWidth: 100,\n      maxWidth: 200,\n      isResizable: true,\n    },\n    {\n      key: \"lastManagedBy\",\n      name: \"Last managed by\",\n      fieldName: \"lastManagedBy\",\n      minWidth: 100,\n      maxWidth: 200,\n      isResizable: true,\n    },\n  ];\n\n  const trimContent = (content: string, maxLength: number): string => {\n    if (content.length > maxLength) {\n      return content.substring(0, maxLength) + \"...\";\n    }\n    return content;\n  };\n\n  const renderItemColumn = (\n    item: IVisualStudioBenefitDetail,\n    index?: number,\n    column?: IColumn\n  ): JSX.Element => {\n    switch (column?.key) {\n      case \"isProvisioned\":\n        return <span>{item.isProvisioned ? \"Yes\" : \"No\"}</span>;\n      case \"startDate\":\n        if (item.startDate === null) {\n          return <span></span>;\n        }\n\n        const startDate = new Date(item.startDate).toDateString();\n        return <span>{startDate}</span>;\n      case \"expirationDate\":\n        if (item.expirationDate === null) {\n          return <span></span>;\n        }\n\n        const expirationDate = new Date(item.expirationDate).toDateString();\n        return <span>{expirationDate}</span>;\n      case \"lastRenewalDate\":\n        if (item.lastRenewalDate === null) {\n          return <span></span>;\n        }\n        const lastRenewalDate = new Date(item.lastRenewalDate).toDateString();\n        return <span>{lastRenewalDate}</span>;\n      case \"subscriptionGuid\":\n        if (item.subscriptionGuid === null) {\n          return <span></span>;\n        }\n        return (\n          <Stack horizontal verticalAlign=\"center\">\n            <span>{trimContent(item.subscriptionGuid, 20)}</span>\n            <CopyButton styles={copyIconStyles} text={item.subscriptionGuid} showCopyText={true} />\n          </Stack>\n        );\n      default:\n        const fieldContent = item[column?.fieldName as keyof IVisualStudioBenefitDetail] as string;\n        return <span>{fieldContent}</span>;\n    }\n  };\n\n  return (\n    <>\n      {canManageBenefits && (\n        <StackItem>\n          <CommandBar styles={commandBarStyles} items={items} ariaLabel=\"Benefit actions\" />\n        </StackItem>\n      )}\n      <ContainerWrapper>\n        <Stack styles={headerStackStyles}>\n          <Text styles={headerTextStyles}>{benefitType}</Text>\n        </Stack>\n        {benefitOtherTenantName ? (\n          <ProfileBenefitOtherTenant tenantName={benefitOtherTenantName} />\n        ) : (\n          <DetailsListWrapper>\n            <DetailsList\n              items={benefits}\n              columns={columns}\n              setKey=\"set\"\n              layoutMode={DetailsListLayoutMode.justified}\n              ariaLabelForSelectionColumn=\"Toggle selection\"\n              ariaLabelForSelectAllCheckbox=\"Toggle selection for all items\"\n              checkButtonAriaLabel=\"select row\"\n              checkboxVisibility={CheckboxVisibility.hidden}\n              onRenderItemColumn={renderItemColumn}\n            />\n            {benefits && benefits.length < 1 && (\n              <TableTextWrapper>No codes for this user.</TableTextWrapper>\n            )}\n          </DetailsListWrapper>\n        )}\n      </ContainerWrapper>\n    </>\n  );\n};\n\nexport default VisualStudioBenefitDetail;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { IComboBoxStyles } from \"office-ui-fabric-react/lib/ComboBox\";\nimport { IIconStyles } from \"office-ui-fabric-react/lib/Icon\";\n\n/**\n * Styling for comboBox.\n * @type {Partial<IComboBoxStyles>}\n */\nexport const comboBoxStyles: Partial<IComboBoxStyles> = {\n  container: { width: \"100%\" },\n};\n\n/**\n * Styling for Icon control.\n * @type {Partial<IIconStyles>}\n * @param {boolean} hasAsterisk The value to determine if control label has required asterisk.\n */\nexport const getIconStyles: (hasAsterisk: boolean) => Partial<IIconStyles> = (hasAsterisk) => {\n  return { root: { paddingLeft: !hasAsterisk ? \"10px\" : \"\", cursor: \"default\" } };\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { useEffect } from \"react\";\n\nimport { Controller } from \"react-hook-form\";\n\nimport { ComboBox, Icon, Label, TooltipHost } from \"@fluentui/react\";\n\nimport { FlexCol, FlexRow } from \"Components/Common/Layout/Layout\";\nimport { HookErrorMessage } from \"Components/ReactHookForm/HookErrorMessage/HookErrorMessage\";\n\nimport { comboBoxStyles, getIconStyles } from \"./ComboBoxController.styles\";\nimport { IComboBoxControllerProps } from \"./IComboBoxControllerProps\";\n\n/**\n * ComboBoxController.\n * @component\n * @param {IComboBoxControllerProps} props The component props.\n * @returns {React.ReactElement} ComboBoxController\n */\nconst ComboBoxController: (props: IComboBoxControllerProps) => React.ReactElement = (\n  props: IComboBoxControllerProps\n): React.ReactElement => {\n  const {\n    autoComplete,\n    control,\n    defaultValue,\n    errors,\n    hasTooltip,\n    inputName,\n    isDisabled,\n    isRequired,\n    labelStyles,\n    labelDisplayName,\n    placeholderText,\n    toolTipDisplayText,\n    onChange,\n    options,\n    defaultSelectedKey,\n  } = props;\n\n  useEffect(() => {\n    /**\n     * Accessibility fix - add aria label to combobox\n     * element of TagPicker component.\n     */\n    const comboboxElement = Array.from(document.getElementsByClassName(\"ms-ComboBox-Input\"));\n\n    const addAriaLabel = document.createAttribute(\"aria-label\");\n    addAriaLabel.value = props.labelDisplayName || props.inputName;\n\n    if (comboboxElement && comboboxElement.length > 0) {\n      comboboxElement[0].setAttributeNode(addAriaLabel);\n    }\n  }, []);\n\n  return (\n    <FlexCol>\n      <FlexRow>\n        <Label htmlFor={inputName} required={isRequired} styles={labelStyles}>\n          {labelDisplayName}\n        </Label>\n        {hasTooltip && (\n          <TooltipHost id={inputName} content={toolTipDisplayText || labelDisplayName}>\n            <Icon\n              aria-label=\"information\"\n              iconName=\"info\"\n              role=\"img\"\n              styles={getIconStyles(!!isRequired)}\n              tabIndex={0}\n            />\n          </TooltipHost>\n        )}\n      </FlexRow>\n      <FlexRow>\n        <Controller\n          aria-label={labelDisplayName}\n          name={inputName}\n          control={control}\n          render={({ field }): React.ReactElement => (\n            <ComboBox\n              aria-label={labelDisplayName}\n              {...props}\n              defaultValue={defaultValue}\n              defaultSelectedKey={defaultSelectedKey}\n              placeholder={placeholderText}\n              styles={comboBoxStyles}\n              useComboBoxAsMenuWidth={true}\n              scrollSelectedToTop={true}\n              autoComplete={autoComplete}\n              selectedKey={field.value}\n              onChange={(_, option, index, value): void => {\n                field.onChange(option?.key);\n                !!onChange && !!option && onChange(option, index, value);\n              }}\n              options={options}\n              disabled={isDisabled}\n            />\n          )}\n        />\n      </FlexRow>\n      <HookErrorMessage errors={errors} inputName={inputName} />\n    </FlexCol>\n  );\n};\n\nexport default ComboBoxController;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport styled from \"styled-components\";\n\nimport {\n  getTheme,\n  FontSizes,\n  FontWeights,\n  ICommandBarStyles,\n  IStackItemStyles,\n  IStackStyles,\n  ITextStyles,\n  IIconStyles,\n} from \"@fluentui/react\";\n\nconst theme = getTheme();\n\nexport const wrapperStyles: IStackStyles = {\n  root: {\n    border: `1px solid ${theme.palette.neutralTertiaryAlt}`,\n    borderRadius: \"0.5rem\",\n    padding: \"2.25rem 1.5rem\",\n    boxShadow: \"0px 1px 6px rgba(0, 0, 0, 0.2)\",\n    marginTop: \"1.5rem\",\n  },\n};\n\nexport const titleStyles: IStackItemStyles = {\n  root: {\n    padding: \"1.5rem\",\n    background: theme.palette.neutralLight,\n    borderRadius: \"0.5rem\",\n  },\n};\n\nexport const titleTextStyles: ITextStyles = {\n  root: {\n    fontSize: FontSizes.size20,\n    fontWeight: 600,\n  },\n};\n\nexport const commandBarStyles: ICommandBarStyles = {\n  root: {\n    marginTop: \"0.5rem\",\n    selectors: {\n      [\"button\"]: {\n        padding: \"0\",\n      },\n    },\n  },\n};\n\nexport const copyIconStyles: IIconStyles = {\n  root: {\n    position: \"absolute\",\n    right: 0,\n    top: \"50%\",\n    transform: \"translateY(-50%)\",\n    color: theme.palette.blue,\n  },\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React from \"react\";\n\nimport {\n  CheckboxVisibility,\n  CommandBar,\n  DetailsList,\n  DetailsListLayoutMode,\n  IColumn,\n  ICommandBarItemProps,\n  Link,\n  Stack,\n  StackItem,\n  Text,\n} from \"@fluentui/react\";\n\nimport {\n  detailsListStyles,\n  headerStackStyles,\n  headerTextStyles,\n  ContainerWrapper,\n  DetailsListWrapper,\n  TableTextWrapper,\n} from \"Components/Common/SharedTableStyles.styles\";\nimport ProfileBenefitOtherTenant from \"Components/ProfileBenefitOtherTenant/ProfileBenefitOtherTenant\";\nimport CopyButton from \"Components/CopyButton/CopyButton\";\nimport { BenefitDisplayNameEnum, BenefitNameEnum } from \"Constants/BenefitConstants\";\nimport { OperationStatus } from \"Constants/OperationStatus\";\nimport { TenantTypesEnum } from \"Constants/TenantTypes\";\nimport { IProfileBenefitKey } from \"Interfaces/Benefits/IProfileBenefitKey\";\n\nimport { IKeyBenefitsListProps } from \"./IKeyBenefitsListProps\";\nimport { commandBarStyles, copyIconStyles } from \"./KeyBenefitsList.styles\";\n\nconst KeyBenefitsList: React.FunctionComponent<IKeyBenefitsListProps> = (\n  props: IKeyBenefitsListProps\n) => {\n  const {\n    benefitType,\n    benefits,\n    assignBenefitClicked,\n    editM365DetailsClicked,\n    editMS365DetailsClicked,\n    userProfileId,\n    canManageBenefits,\n    m365BenefitDetail,\n    m365FetchErrorMessage,\n    m365FetchStatus,\n    ms365BenefitDetail,\n    ms365FetchErrorMessage,\n    ms365FetchStatus,\n    benefitOtherTenantName,\n    tenantName,\n  } = props;\n\n  const editM365Details: ICommandBarItemProps = {\n    key: \"editM365Details\",\n    text: \"Edit Office 365 Details\",\n    iconProps: { iconName: \"Edit\" },\n    onClick: (): void => {\n      if (editM365DetailsClicked) {\n        editM365DetailsClicked(userProfileId);\n      }\n    },\n  };\n\n  const editMS365Details: ICommandBarItemProps = {\n    key: \"editMS365Details\",\n    text: \"Edit Microsoft 365 Details\",\n    iconProps: { iconName: \"Edit\" },\n    onClick: (): void => {\n      if (editMS365DetailsClicked) {\n        editMS365DetailsClicked(userProfileId);\n      }\n    },\n  };\n\n  const benefitActionItems: ICommandBarItemProps[] = [\n    {\n      key: \"assignBenefit\",\n      text: \"Assign a Benefit\",\n      iconProps: { iconName: \"Add\" },\n      onClick: (): void => {\n        assignBenefitClicked(benefitType);\n      },\n    },\n  ];\n\n  const m365TypeColumn = {\n    key: \"m365Type\",\n    name: \"Type\",\n    fieldName: \"m365Type\",\n    minWidth: 100,\n    maxWidth: 200,\n    isResizable: true,\n  };\n\n  const teamsTypeColumn = {\n    key: \"type\",\n    name: \"Type\",\n    fieldName: \"type\",\n    minWidth: 100,\n    maxWidth: 200,\n    isResizable: true,\n  };\n\n  const awardKitsTypeColumn = {\n    key: \"awardType\",\n    name: \"Award Type\",\n    fieldName: \"awardType\",\n    minWidth: 100,\n    maxWidth: 200,\n    isResizable: true,\n  };\n\n  const columns = [\n    {\n      key: \"batchId\",\n      name: \"Batch ID\",\n      fieldName: \"batchId\",\n      minWidth: 50,\n      maxWidth: 100,\n    },\n    {\n      key: \"key\",\n      name: \"key\",\n      fieldName: \"key\",\n      minWidth: 150,\n      maxWidth: 200,\n      isResizable: true,\n    },\n    {\n      key: \"claimedDate\",\n      name: \"Claimed Date\",\n      fieldName: \"claimedDate\",\n      minWidth: 100,\n      maxWidth: 200,\n      isResizable: true,\n    },\n    {\n      key: \"claimedBy\",\n      name: \"Claimed By\",\n      fieldName: \"claimedBy\",\n      minWidth: 100,\n      maxWidth: 200,\n      isResizable: true,\n    },\n    {\n      key: \"awardPeriodName\",\n      name: \"Award Period\",\n      fieldName: \"awardPeriodName\",\n      minWidth: 100,\n      maxWidth: 250,\n      isResizable: true,\n    },\n    {\n      key: \"expirationDate\",\n      name: \"Code Expiration Date\",\n      fieldName: \"expirationDate\",\n      minWidth: 100,\n      maxWidth: 200,\n      isResizable: true,\n    },\n  ];\n\n  const isM365Benefit = benefitType === BenefitNameEnum.M365;\n  const isMS365Benefit = benefitType === BenefitNameEnum.MS365;\n  const isTeamsBenefit = benefitType === BenefitNameEnum.Teams;\n  const isAwardKits = benefitType === BenefitNameEnum.AwardKits;\n\n  if (!!isM365Benefit || !!isMS365Benefit || !!isTeamsBenefit || !!isAwardKits) {\n    isM365Benefit || isMS365Benefit\n      ? columns.splice(0, 0, m365TypeColumn)\n      : isAwardKits\n      ? columns.splice(0, 0, awardKitsTypeColumn)\n      : columns.splice(0, 0, teamsTypeColumn);\n\n    if (benefits.length > 0) {\n      !!isM365Benefit && benefitActionItems.splice(1, 0, editM365Details);\n      !!isMS365Benefit && benefitActionItems.splice(1, 0, editMS365Details);\n    }\n  }\n\n  const trimContent = (content: string, maxLength: number): string => {\n    if (content.length > maxLength) {\n      return content.substring(0, maxLength) + \"...\";\n    }\n    return content;\n  };\n\n  const renderItemColumn = (\n    item: IProfileBenefitKey,\n    index?: number,\n    column?: IColumn\n  ): JSX.Element => {\n    switch (column?.key) {\n      case \"claimedDate\":\n        const claimedDate = new Date(item.claimedDate).toDateString() || \"N/A\";\n        return <span>{claimedDate}</span>;\n      case \"expirationDate\":\n        const expirationDate = new Date(item.expirationDate).toDateString();\n        return <span>{expirationDate}</span>;\n      case \"key\":\n        if (\n          benefitType === BenefitNameEnum.M365 ||\n          benefitType === BenefitNameEnum.MS365 ||\n          benefitType === BenefitNameEnum.Teams\n        ) {\n          const url = item[column?.fieldName as keyof IProfileBenefitKey] as string;\n\n          return (\n            <Stack horizontal verticalAlign=\"center\">\n              <a href={url}> {trimContent(url, 25)}</a>\n              <CopyButton styles={copyIconStyles} text={url} showCopyText={true} />\n            </Stack>\n          );\n        } else {\n          const fieldContent = item[column?.fieldName as keyof IProfileBenefitKey] as string;\n          return (\n            <Stack horizontal verticalAlign=\"center\">\n              <span>{trimContent(fieldContent, 20)}</span>\n              <CopyButton styles={copyIconStyles} text={fieldContent} showCopyText={true} />\n            </Stack>\n          );\n        }\n      default:\n        const fieldContent = item[column?.fieldName as keyof IProfileBenefitKey] as string;\n        return <span>{fieldContent}</span>;\n    }\n  };\n\n  const getBenefitTitle = (): string => {\n    if (tenantName == TenantTypesEnum.MLSA) {\n      switch (benefitType) {\n        case BenefitNameEnum.SwagKit: {\n          return BenefitDisplayNameEnum.SwagKit;\n        }\n        default: {\n          return benefitType;\n        }\n      }\n    } else {\n      switch (benefitType) {\n        case BenefitNameEnum.M365:\n          return BenefitDisplayNameEnum.O365;\n        case BenefitNameEnum.MS365:\n          return BenefitDisplayNameEnum.MS365;\n        default:\n          return benefitType;\n      }\n    }\n  };\n\n  return (\n    <ContainerWrapper>\n      <Stack styles={headerStackStyles}>\n        <Text styles={headerTextStyles}>{getBenefitTitle()}</Text>\n      </Stack>\n      {benefitOtherTenantName ? (\n        <ProfileBenefitOtherTenant tenantName={benefitOtherTenantName} />\n      ) : (\n        <>\n          {canManageBenefits && (\n            <CommandBar\n              styles={commandBarStyles}\n              items={benefitActionItems}\n              ariaLabel=\"Benefit actions\"\n            />\n          )}\n          {!!isM365Benefit && benefits.length > 0 && (\n            <div style={{ paddingLeft: \"28px\" }}>\n              <StackItem style={{ paddingBottom: \"20px\" }}>\n                <strong>Tenant ID:</strong> {m365BenefitDetail?.tenantId || \"\"}\n              </StackItem>\n              <StackItem style={{ paddingBottom: \"20px\" }}>\n                <strong>Tenant Name:</strong> {m365BenefitDetail?.tenantName || \"\"}\n              </StackItem>\n              {m365FetchStatus === OperationStatus.Failed && (\n                <StackItem style={{ paddingBottom: \"20px\" }}>{m365FetchErrorMessage}</StackItem>\n              )}\n            </div>\n          )}\n          {!!isMS365Benefit && benefits.length > 0 && (\n            <div style={{ paddingLeft: \"28px\" }}>\n              <StackItem style={{ paddingBottom: \"20px\" }}>\n                <strong>Subscription ID:</strong> {ms365BenefitDetail?.subscriptionId || \"\"}\n              </StackItem>\n              <StackItem style={{ paddingBottom: \"20px\" }}>\n                <strong>Tenant ID:</strong> {ms365BenefitDetail?.tenantId || \"\"}\n              </StackItem>\n              <StackItem style={{ paddingBottom: \"20px\" }}>\n                <strong>Tenant Name:</strong> {ms365BenefitDetail?.tenantName || \"\"}\n              </StackItem>\n              {ms365FetchStatus === OperationStatus.Failed && (\n                <StackItem style={{ paddingBottom: \"20px\" }}>{ms365FetchErrorMessage}</StackItem>\n              )}\n            </div>\n          )}\n          <DetailsListWrapper>\n            <DetailsList\n              items={benefits}\n              columns={columns}\n              setKey=\"set\"\n              layoutMode={DetailsListLayoutMode.justified}\n              ariaLabelForSelectionColumn=\"Toggle selection\"\n              ariaLabelForSelectAllCheckbox=\"Toggle selection for all items\"\n              checkButtonAriaLabel=\"select row\"\n              checkboxVisibility={CheckboxVisibility.hidden}\n              onRenderItemColumn={renderItemColumn}\n              styles={canManageBenefits ? detailsListStyles : {}}\n            />\n          </DetailsListWrapper>\n          {benefits && benefits.length < 1 && (\n            <TableTextWrapper>No codes for this user.</TableTextWrapper>\n          )}\n        </>\n      )}\n    </ContainerWrapper>\n  );\n};\n\nexport default KeyBenefitsList;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { getTheme, IStackStyles, IStackTokens, ITextStyles, mergeStyleSets } from \"@fluentui/react\";\n\nconst theme = getTheme();\n\nexport const panelHeaderStyles: ITextStyles = {\n  root: {\n    fontWeight: \"600\",\n    fontSize: \"32px\",\n    lineHeight: \"40px\",\n    flexGrow: 1,\n    margin: \"24px\",\n  },\n};\n\nexport const benefitLabelStyles: ITextStyles = {\n  root: {\n    fontWeight: \"600\",\n    fontSize: \"16px\",\n    lineHeight: \"22px\",\n  },\n};\n\nexport const benefitStyles: ITextStyles = {\n  root: {\n    fontWeight: \"400\",\n    fontSize: \"16px\",\n    lineHeight: \"22px\",\n  },\n};\n\n/**\n * The stack containing all of the form elements.\n */\nexport const containerStyles: IStackStyles = {\n  root: {\n    marginBottom: \"1.5rem\",\n    backgroundColor: theme.palette.white,\n    borderRadius: \"8px\",\n    height: \"100%\",\n  },\n};\n\n// Extend containerStyles to include margin-top\nexport const containerStylesWithMarginTop = mergeStyleSets(containerStyles, {\n  root: {\n    marginTop: \"1rem\",\n  },\n});\n\nexport const horizontalGapStackTokens: IStackTokens = {\n  childrenGap: 10,\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { useEffect, useState } from \"react\";\n\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { useParams } from \"react-router\";\nimport { useForm } from \"react-hook-form\";\n\nimport * as Yup from \"yup\";\nimport { yupResolver } from \"@hookform/resolvers/yup\";\n\nimport { Spinner, SpinnerSize, Stack, StackItem, Text } from \"@fluentui/react\";\n\nimport * as MLSAActions from \"Dataflows/UserProfile/UserProfileAction\";\nimport * as MLSABenefitsSelector from \"Dataflows/UserProfile/UserProfileSelector\";\n\nimport { useAuth } from \"Authentication/AuthProvider\";\nimport VisualStudioBenefitDetailSidePanel from \"Components/ProfileVisualStudioBenefitDetails/VisualStudioBenefitDetailSidePanel\";\nimport VisualStudioBenefitDetail from \"Components/VisualStudioBenefitDetail/VisualStudioBenefitDetail\";\nimport ComboBoxController from \"Components/ReactHookForm/ComboBoxController/ComboBoxController\";\nimport {\n  benefitNameToResultMap,\n  BenefitNameEnum,\n  tenantBenefitTypes,\n  BenefitDisplayNameEnum,\n} from \"Constants/BenefitConstants\";\nimport { OperationStatus } from \"Constants/OperationStatus\";\nimport {\n  activeProgramProfileStatus,\n  newMilestone,\n  studentPartnerEmailDomain,\n  SwagKitType,\n} from \"Constants/ProfileConstants\";\nimport { RolesEnum } from \"Constants/RolesPermissionsConstants\";\nimport { TenantTypesEnum } from \"Constants/TenantTypes\";\nimport { AppState } from \"Dataflows/Reducers\";\nimport { IUserProfile } from \"Interfaces/UserProfile/IUserProfile\";\nimport { getTenant } from \"Utility/Utils\";\nimport KeyBenefitsList from \"Components/KeyBenefitsList/KeyBenefitsList\";\nimport { SidePanel } from \"Components/SidePanel/SidePanel\";\nimport {\n  benefitLabelStyles,\n  containerStylesWithMarginTop,\n  horizontalGapStackTokens,\n} from \"Components/ProfileBenefitDetails/ProfileBenefitDetails.styles\";\nimport { IProfileBenefitDetailsProps } from \"Components/ProfileBenefitDetails/IProfileBenefitDetailsProps\";\n\nconst StudentBenefitDetails = (props: IProfileBenefitDetailsProps): React.ReactElement => {\n  const {\n    claimingBenefitError,\n    isClaimingBenefitStatus,\n    claimBenefitReset,\n    claimBenefit,\n    getProfileBenefits,\n    tenantName,\n  } = props;\n  const profileBenefits = useSelector(MLSABenefitsSelector.getProfileBenefits);\n  const profileBenefitsErrorMessage = useSelector(\n    MLSABenefitsSelector.getProfileBenefitsErrorMessage\n  );\n\n  const { id } = useParams<{ id: string }>();\n  const [isPanelOpen, setIsPanelOpen] = useState(false);\n  const [isAssignPanelOpen, setIsAssignPanelOpen] = useState(false);\n  const [benefitToClaim, setBenefitToClaim] = useState(\"\");\n  const isClaimingBenefit = isClaimingBenefitStatus === OperationStatus.Pending;\n\n  const {\n    control,\n    handleSubmit,\n    reset,\n    formState: { errors },\n  } = useForm({\n    resolver: yupResolver(\n      Yup.object().shape({\n        SwagKitType: Yup.string().required(\"Benefit Type is required\"),\n      })\n    ),\n  });\n\n  const { hasRole } = useAuth();\n\n  const dispatch = useDispatch();\n\n  useEffect(() => {\n    dispatch(MLSAActions.getProfileBenefits(parseInt(id)));\n  }, [id]);\n\n  const profileBenefitsStatus = useSelector(MLSABenefitsSelector.getProfileBenefitsStatus);\n\n  const selectedUserProfile = useSelector<AppState, IUserProfile>((state) =>\n    MLSABenefitsSelector.getUserProfile(state.userProfileState)\n  );\n  const visualStudioBenefitOperationStatus = useSelector(\n    MLSABenefitsSelector.getUpdateVSProfileBenefitStatus\n  );\n  const visualStudioBenefitError = useSelector(\n    MLSABenefitsSelector.getUpdateVSProfileBenefitsError\n  );\n\n  const canManageBenefits =\n    hasRole(RolesEnum.MSA_BENEFITS_MANAGER) || hasRole(RolesEnum.MSA_PROGRAM_OWNER);\n\n  const hasStudentPartnerEmail =\n    selectedUserProfile?.studentPartnerEmail?.toLowerCase().includes(studentPartnerEmailDomain) ||\n    selectedUserProfile?.primaryEmail?.toLowerCase().includes(studentPartnerEmailDomain) ||\n    selectedUserProfile?.secondaryEmail?.toLowerCase().includes(studentPartnerEmailDomain);\n  const canEnableBenefits =\n    selectedUserProfile?.levelStatus?.levelName !== newMilestone &&\n    selectedUserProfile?.programProfileStatusName === activeProgramProfileStatus &&\n    selectedUserProfile?.tenants.includes(TenantTypesEnum.MSP) &&\n    hasStudentPartnerEmail;\n\n  const assignBenefitClickedVs = (benefitType: BenefitNameEnum): void => {\n    switch (benefitType) {\n      case BenefitNameEnum.VisualStudio:\n        setIsPanelOpen(true);\n        break;\n      default:\n        break;\n    }\n  };\n\n  const getBenefitOtherTenantName = (benefitType: BenefitNameEnum): string | undefined => {\n    if (!profileBenefits.benefitTenant) return undefined;\n\n    const benefitTenant = getTenant(profileBenefits.benefitTenant[benefitType]);\n\n    if (benefitTenant?.toLowerCase() === TenantTypesEnum.MLSA.toLowerCase()) {\n      return undefined;\n    }\n\n    return benefitTenant;\n  };\n\n  const getAvailableBenefitTypes = (): BenefitNameEnum[] => {\n    return tenantBenefitTypes[TenantTypesEnum.MSP];\n  };\n\n  const getProfileBenefitsMap = (benefitType: BenefitNameEnum) => {\n    return profileBenefits[benefitNameToResultMap[benefitType]];\n  };\n\n  const assignBenefitClicked = (benefitType: string): void => {\n    setIsAssignPanelOpen(true);\n    setBenefitToClaim(benefitType);\n  };\n\n  const dismissAssignPanel = (): void => {\n    setIsAssignPanelOpen(false);\n    dispatch(getProfileBenefits(parseInt(id)));\n    dispatch(claimBenefitReset());\n    reset(); // to reset benefit-type drop-down\n  };\n\n  const claimBenefitDispatch = () =>\n    handleSubmit((formData) => {\n      dispatch(claimBenefit(benefitToClaim, parseInt(id), formData.SwagKitType));\n    });\n\n  useEffect(() => {\n    if (isClaimingBenefitStatus === OperationStatus.Succeeded) {\n      dismissAssignPanel();\n    }\n  }, [isClaimingBenefit, isClaimingBenefitStatus, claimingBenefitError]);\n\n  const benefitLists = getAvailableBenefitTypes().map((benefitType, index) => {\n    if (benefitType === BenefitNameEnum.VisualStudio) {\n      return (\n        <>\n          <VisualStudioBenefitDetail\n            key={index}\n            benefitType={BenefitNameEnum.VisualStudio}\n            benefits={getProfileBenefitsMap(benefitType) ?? []}\n            assignBenefitClicked={assignBenefitClickedVs}\n            canManageBenefits={canManageBenefits && canEnableBenefits}\n            benefitOtherTenantName={getBenefitOtherTenantName(BenefitNameEnum.VisualStudio)}\n          />\n          <VisualStudioBenefitDetailSidePanel\n            isPanelOpen={isPanelOpen}\n            setIsPanelOpen={setIsPanelOpen}\n            canEnableBenefits={canEnableBenefits}\n            isProvisioned={getProfileBenefitsMap(benefitType)?.[0]?.isProvisioned}\n            currentStatus={\n              getProfileBenefitsMap(benefitType)?.[0]?.isProvisioned\n                ? \"Assigned\"\n                : getProfileBenefitsMap(benefitType)?.[0]?.subscriptionGuid\n                ? \"Removed\"\n                : \"Not Assigned\"\n            }\n            operationStatus={visualStudioBenefitOperationStatus}\n            errorMessage={visualStudioBenefitError}\n            assignBenefitClicked={(): MLSAActions.UserProfileActionTypes =>\n              dispatch(MLSAActions.provisionUserProfileVSBenefit(selectedUserProfile.id))\n            }\n            removeBenefitClicked={(): MLSAActions.UserProfileActionTypes =>\n              dispatch(MLSAActions.endUserProfilVSBenefit(selectedUserProfile.id))\n            }\n            extendBenefitClicked={(): MLSAActions.UserProfileActionTypes =>\n              dispatch(MLSAActions.extendUserProfileVSBenefit(selectedUserProfile.id))\n            }\n            getProfileBenefits={(): MLSAActions.UserProfileActionTypes =>\n              dispatch(MLSAActions.getProfileBenefits(selectedUserProfile.id))\n            }\n            claimBenefitReset={(): MLSAActions.UserProfileActionTypes =>\n              dispatch(MLSAActions.userProfileVSBenefitReset())\n            }\n          />\n        </>\n      );\n    } else {\n      return (\n        <KeyBenefitsList\n          key={index}\n          benefitType={benefitType}\n          benefits={getProfileBenefitsMap(benefitType) ?? []}\n          assignBenefitClicked={assignBenefitClicked}\n          canManageBenefits={canManageBenefits}\n          userProfileId={parseInt(id)}\n          benefitOtherTenantName={getBenefitOtherTenantName(benefitType)}\n          tenantName={tenantName}\n        />\n      );\n    }\n  });\n\n  return (\n    <>\n      {profileBenefitsStatus === OperationStatus.Failed ? (\n        <Text>{profileBenefitsErrorMessage}</Text>\n      ) : profileBenefitsStatus === OperationStatus.Pending ? (\n        <Spinner size={SpinnerSize.large} />\n      ) : (\n        <form>\n          <SidePanel\n            isOpen={isAssignPanelOpen}\n            title=\"Add Benefits\"\n            saveButtonLabel=\"Claim\"\n            error={claimingBenefitError}\n            disableActions={isClaimingBenefit}\n            onDismiss={dismissAssignPanel}\n            onSave={claimBenefitDispatch()}\n          >\n            <Stack>\n              <Text>You can claim a benefit and assign to active users</Text>\n            </Stack>\n            <Stack horizontal tokens={horizontalGapStackTokens}>\n              <StackItem>\n                <Text styles={benefitLabelStyles}>Benefit:</Text>\n              </StackItem>\n              <StackItem>\n                <Text>\n                  {benefitToClaim === BenefitNameEnum.SwagKit\n                    ? BenefitDisplayNameEnum.SwagKit\n                    : benefitToClaim}\n                </Text>\n              </StackItem>\n            </Stack>\n            <Stack styles={containerStylesWithMarginTop}>\n              <ComboBoxController\n                isRequired={true}\n                control={control}\n                errors={errors}\n                inputName=\"SwagKitType\"\n                labelDisplayName=\"Benefit Type\"\n                options={SwagKitType}\n                placeholderText=\"Select Benefit Type\"\n              />\n            </Stack>\n            <Stack>\n              <Text>\n                {`Assign a ${\n                  benefitToClaim === BenefitNameEnum.SwagKit\n                    ? BenefitDisplayNameEnum.SwagKit\n                    : benefitToClaim\n                } code to a Community Leader. This code will be available\n                for the user under Account - Benefits - ${\n                  benefitToClaim === BenefitNameEnum.SwagKit\n                    ? BenefitDisplayNameEnum.SwagKit\n                    : benefitToClaim\n                }. You should notify\n                the user that a new code has been assigned.`}\n              </Text>\n            </Stack>\n          </SidePanel>\n          <>{benefitLists}</>\n        </form>\n      )}\n    </>\n  );\n};\n\nexport default StudentBenefitDetails;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport {\n  getTheme,\n  FontSizes,\n  IStackItemStyles,\n  IStackStyles,\n  ITextFieldStyles,\n  ITextStyles,\n} from \"@fluentui/react\";\n\nconst theme = getTheme();\n\nexport const wrapperStyles: IStackStyles = {\n  root: {\n    border: `1px solid ${theme.palette.neutralTertiaryAlt}`,\n    borderRadius: \"0.5rem\",\n    padding: \"2.25rem 1.5rem\",\n    boxShadow: \"0px 1px 6px rgba(0, 0, 0, 0.2)\",\n    marginTop: \"1.5rem\",\n  },\n};\n\nexport const titleStyles: IStackItemStyles = {\n  root: {\n    padding: \"1.5rem\",\n    background: theme.palette.neutralLight,\n    borderRadius: \"0.5rem\",\n  },\n};\n\nexport const titleTextStyles: ITextStyles = {\n  root: {\n    fontSize: FontSizes.size20,\n    fontWeight: 600,\n  },\n};\n\nexport const messageStackStyles: IStackItemStyles = {\n  root: { alignSelf: \"center\" },\n};\n\nexport const formStackStyles: IStackStyles = {\n  root: {\n    padding: \"1rem 1rem 1rem 0\",\n    justifyContent: \"space-between\",\n  },\n};\n\nexport const textFieldStackStyles: IStackStyles = {\n  root: {\n    width: \"70%\",\n  },\n};\n\nexport const textStyles: ITextStyles = {\n  root: {\n    fontSize: FontSizes.size16,\n  },\n};\n\nexport const errorMessageStyles: ITextStyles = {\n  root: {\n    color: theme.palette.red,\n  },\n};\n\nexport const textFieldStyles: Partial<ITextFieldStyles> = {\n  fieldGroup: {\n    borderRadius: \"0.5rem\",\n    borderColor: theme.palette.neutralTertiary,\n    minHeight: \"7rem\",\n  },\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { useEffect, useState, ReactElement } from \"react\";\n\nimport { PrimaryButton } from \"@fluentui/react/lib/Button\";\nimport { Stack, StackItem } from \"@fluentui/react/lib/Stack\";\nimport { Text } from \"@fluentui/react/lib/Text\";\nimport { TextField } from \"@fluentui/react/lib/TextField\";\n\nimport {\n  headerStackStyles,\n  headerTextStyles,\n  ContainerWrapper,\n} from \"Components/Common/SharedTableStyles.styles\";\nimport { OperationStatus } from \"Constants/OperationStatus\";\n\nimport {\n  errorMessageStyles,\n  formStackStyles,\n  textFieldStackStyles,\n  textFieldStyles,\n  textStyles,\n} from \"./AddComment.styles\";\nimport { IAddCommentProps } from \"./IAddCommentProps\";\n\n/**\n * The Add Comment component.\n * @param props {IAddCommentProps}\n */\nexport const AddComment = (props: IAddCommentProps): ReactElement => {\n  const [textValue, setTextValue] = useState(\"\");\n  const { onAddCommentClicked, addCommentStatus } = props;\n\n  useEffect(() => {\n    if (addCommentStatus === OperationStatus.Succeeded) {\n      setTextValue(\"\");\n    }\n  }, [addCommentStatus]);\n\n  return (\n    <ContainerWrapper>\n      <Stack styles={headerStackStyles}>\n        <Text styles={headerTextStyles}>Comments</Text>\n      </Stack>\n      <Stack horizontal styles={formStackStyles}>\n        <Stack tokens={{ padding: \"0 0 0 1.5rem\" }}>\n          <StackItem>\n            <Text styles={textStyles}>{\"New Comment:\"}</Text>\n          </StackItem>\n        </Stack>\n        <Stack tokens={{ childrenGap: \"2.25rem\" }} styles={textFieldStackStyles}>\n          <StackItem>\n            <TextField\n              styles={textFieldStyles}\n              multiline\n              placeholder={\"Enter comment\"}\n              value={textValue}\n              onChange={(_, newValue): void | boolean => setTextValue(newValue || \"\")}\n            />\n            {addCommentStatus === OperationStatus.Failed && (\n              <Text styles={errorMessageStyles}>\n                {\"Could not add comment at this time, please try again\"}\n              </Text>\n            )}\n          </StackItem>\n          <StackItem>\n            <PrimaryButton\n              disabled={!textValue || addCommentStatus === OperationStatus.Pending}\n              text={addCommentStatus === OperationStatus.Pending ? \"Please wait\" : \"Add Comment\"}\n              onClick={(): void => onAddCommentClicked(textValue)}\n            />\n          </StackItem>\n        </Stack>\n      </Stack>\n    </ContainerWrapper>\n  );\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nexport const times = [\n  { key: \"1200AM\", text: \"12:00 AM\", timespan: \"00:00:00\" },\n  { key: \"1215AM\", text: \"12:15 AM\", timespan: \"00:15:00\" },\n  { key: \"1230AM\", text: \"12:30 AM\", timespan: \"00:30:00\" },\n  { key: \"1245AM\", text: \"12:45 AM\", timespan: \"00:45:00\" },\n  { key: \"100AM\", text: \"1:00 AM\", timespan: \"01:00:00\" },\n  { key: \"115AM\", text: \"1:15 AM\", timespan: \"01:15:00\" },\n  { key: \"130AM\", text: \"1:30 AM\", timespan: \"01:30:00\" },\n  { key: \"145AM\", text: \"1:45 AM\", timespan: \"01:45:00\" },\n  { key: \"200AM\", text: \"2:00 AM\", timespan: \"02:00:00\" },\n  { key: \"215AM\", text: \"2:15 AM\", timespan: \"02:15:00\" },\n  { key: \"230AM\", text: \"2:30 AM\", timespan: \"02:30:00\" },\n  { key: \"245AM\", text: \"2:45 AM\", timespan: \"02:45:00\" },\n  { key: \"300AM\", text: \"3:00 AM\", timespan: \"03:00:00\" },\n  { key: \"315AM\", text: \"3:15 AM\", timespan: \"03:15:00\" },\n  { key: \"330AM\", text: \"3:30 AM\", timespan: \"03:30:00\" },\n  { key: \"345AM\", text: \"3:45 AM\", timespan: \"03:45:00\" },\n  { key: \"400AM\", text: \"4:00 AM\", timespan: \"04:00:00\" },\n  { key: \"415AM\", text: \"4:15 AM\", timespan: \"04:15:00\" },\n  { key: \"430AM\", text: \"4:30 AM\", timespan: \"04:30:00\" },\n  { key: \"445AM\", text: \"4:45 AM\", timespan: \"04:45:00\" },\n  { key: \"500AM\", text: \"5:00 AM\", timespan: \"05:00:00\" },\n  { key: \"515AM\", text: \"5:15 AM\", timespan: \"05:15:00\" },\n  { key: \"530AM\", text: \"5:30 AM\", timespan: \"05:30:00\" },\n  { key: \"545AM\", text: \"5:45 AM\", timespan: \"05:45:00\" },\n  { key: \"600AM\", text: \"6:00 AM\", timespan: \"06:00:00\" },\n  { key: \"615AM\", text: \"6:15 AM\", timespan: \"06:15:00\" },\n  { key: \"630AM\", text: \"6:30 AM\", timespan: \"06:30:00\" },\n  { key: \"645AM\", text: \"6:45 AM\", timespan: \"06:45:00\" },\n  { key: \"700AM\", text: \"7:00 AM\", timespan: \"07:00:00\" },\n  { key: \"715AM\", text: \"7:15 AM\", timespan: \"07:15:00\" },\n  { key: \"730AM\", text: \"7:30 AM\", timespan: \"07:30:00\" },\n  { key: \"745AM\", text: \"7:45 AM\", timespan: \"07:45:00\" },\n  { key: \"800AM\", text: \"8:00 AM\", timespan: \"08:00:00\" },\n  { key: \"815AM\", text: \"8:15 AM\", timespan: \"08:15:00\" },\n  { key: \"830AM\", text: \"8:30 AM\", timespan: \"08:30:00\" },\n  { key: \"845AM\", text: \"8:45 AM\", timespan: \"08:45:00\" },\n  { key: \"900AM\", text: \"9:00 AM\", timespan: \"09:00:00\" },\n  { key: \"915AM\", text: \"9:15 AM\", timespan: \"09:15:00\" },\n  { key: \"930AM\", text: \"9:30 AM\", timespan: \"09:30:00\" },\n  { key: \"945AM\", text: \"9:45 AM\", timespan: \"09:45:00\" },\n  { key: \"1000AM\", text: \"10:00 AM\", timespan: \"10:00:00\" },\n  { key: \"1015AM\", text: \"10:15 AM\", timespan: \"10:15:00\" },\n  { key: \"1030AM\", text: \"10:30 AM\", timespan: \"10:30:00\" },\n  { key: \"1045AM\", text: \"10:45 AM\", timespan: \"10:45:00\" },\n  { key: \"1100AM\", text: \"11:00 AM\", timespan: \"11:00:00\" },\n  { key: \"1115AM\", text: \"11:15 AM\", timespan: \"11:15:00\" },\n  { key: \"1130AM\", text: \"11:30 AM\", timespan: \"11:30:00\" },\n  { key: \"1145AM\", text: \"11:45 AM\", timespan: \"11:45:00\" },\n  { key: \"1200PM\", text: \"12:00 PM\", timespan: \"12:00:00\" },\n  { key: \"1215PM\", text: \"12:15 PM\", timespan: \"12:15:00\" },\n  { key: \"1230PM\", text: \"12:30 PM\", timespan: \"12:30:00\" },\n  { key: \"1245PM\", text: \"12:45 PM\", timespan: \"12:45:00\" },\n  { key: \"100PM\", text: \"1:00 PM\", timespan: \"13:00:00\" },\n  { key: \"115PM\", text: \"1:15 PM\", timespan: \"13:15:00\" },\n  { key: \"130PM\", text: \"1:30 PM\", timespan: \"13:30:00\" },\n  { key: \"145PM\", text: \"1:45 PM\", timespan: \"13:45:00\" },\n  { key: \"200PM\", text: \"2:00 PM\", timespan: \"14:00:00\" },\n  { key: \"215PM\", text: \"2:15 PM\", timespan: \"14:15:00\" },\n  { key: \"230PM\", text: \"2:30 PM\", timespan: \"14:30:00\" },\n  { key: \"245PM\", text: \"2:45 PM\", timespan: \"14:45:00\" },\n  { key: \"300PM\", text: \"3:00 PM\", timespan: \"15:00:00\" },\n  { key: \"315PM\", text: \"3:15 PM\", timespan: \"15:15:00\" },\n  { key: \"330PM\", text: \"3:30 PM\", timespan: \"15:30:00\" },\n  { key: \"345PM\", text: \"3:45 PM\", timespan: \"15:45:00\" },\n  { key: \"400PM\", text: \"4:00 PM\", timespan: \"16:00:00\" },\n  { key: \"415PM\", text: \"4:15 PM\", timespan: \"16:15:00\" },\n  { key: \"430PM\", text: \"4:30 PM\", timespan: \"16:30:00\" },\n  { key: \"445PM\", text: \"4:45 PM\", timespan: \"16:45:00\" },\n  { key: \"500PM\", text: \"5:00 PM\", timespan: \"17:00:00\" },\n  { key: \"515PM\", text: \"5:15 PM\", timespan: \"17:15:00\" },\n  { key: \"530PM\", text: \"5:30 PM\", timespan: \"17:30:00\" },\n  { key: \"545PM\", text: \"5:45 PM\", timespan: \"17:45:00\" },\n  { key: \"600PM\", text: \"6:00 PM\", timespan: \"18:00:00\" },\n  { key: \"615PM\", text: \"6:15 PM\", timespan: \"18:15:00\" },\n  { key: \"630PM\", text: \"6:30 PM\", timespan: \"18:30:00\" },\n  { key: \"645PM\", text: \"6:45 PM\", timespan: \"18:45:00\" },\n  { key: \"700PM\", text: \"7:00 PM\", timespan: \"19:00:00\" },\n  { key: \"715PM\", text: \"7:15 PM\", timespan: \"19:15:00\" },\n  { key: \"730PM\", text: \"7:30 PM\", timespan: \"19:30:00\" },\n  { key: \"745PM\", text: \"7:45 PM\", timespan: \"19:45:00\" },\n  { key: \"800PM\", text: \"8:00 PM\", timespan: \"20:00:00\" },\n  { key: \"815PM\", text: \"8:15 PM\", timespan: \"20:15:00\" },\n  { key: \"830PM\", text: \"8:30 PM\", timespan: \"20:30:00\" },\n  { key: \"845PM\", text: \"8:45 PM\", timespan: \"20:45:00\" },\n  { key: \"900PM\", text: \"9:00 PM\", timespan: \"21:00:00\" },\n  { key: \"915PM\", text: \"9:15 PM\", timespan: \"21:15:00\" },\n  { key: \"930PM\", text: \"9:30 PM\", timespan: \"21:30:00\" },\n  { key: \"945PM\", text: \"9:45 PM\", timespan: \"21:45:00\" },\n  { key: \"1000PM\", text: \"10:00 PM\", timespan: \"22:00:00\" },\n  { key: \"1015PM\", text: \"10:15 PM\", timespan: \"22:15:00\" },\n  { key: \"1030PM\", text: \"10:30 PM\", timespan: \"22:30:00\" },\n  { key: \"1045PM\", text: \"10:45 PM\", timespan: \"22:45:00\" },\n  { key: \"1100PM\", text: \"11:00 PM\", timespan: \"23:00:00\" },\n  { key: \"1115PM\", text: \"11:15 PM\", timespan: \"23:15:00\" },\n  { key: \"1130PM\", text: \"11:30 PM\", timespan: \"23:30:00\" },\n  { key: \"1145PM\", text: \"11:45 PM\", timespan: \"23:45:00\" },\n];\nexport const maxDateValue = 8640000000000000;\nexport const minDateValue = -8640000000000000;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport moment from \"moment\";\n\nimport { times } from \"Constants/Time\";\n\nimport { placeholderString } from \"../Constants/ProfileConstants\";\n\nconst emptyDate = moment.utc(\"0001-01-01T00:00:00\").format();\n\n/**\n * Checks if date provided is empty\n * @method\n * @param {Date} dateObject The date object.\n * @returns {boolean} if provided date is empty.\n */\nexport const isDateEmpty = (dateObject: Date): boolean => {\n  return moment.utc(dateObject).format() === emptyDate;\n};\n\n/**\n * Formats the date to string.\n * @method\n * @param {Date} dateObject The date object.\n * @returns {string} The date string.\n */\nexport const formatDate = (dateObject: Date): string => {\n  const options = {\n    year: \"numeric\",\n    month: \"long\",\n    day: \"numeric\",\n  };\n\n  const utcDateStr = moment.utc(dateObject).format();\n  const momentDate = new Date(utcDateStr);\n\n  return utcDateStr === emptyDate\n    ? placeholderString\n    : momentDate.toLocaleDateString(\"en-US\", options as Intl.DateTimeFormatOptions);\n};\n\n/**\n * Formats the date to a short string.\n * @method\n * @param {Date} dateObject The date object.\n * @returns {string} The date string.\n */\nexport const formatDateAsShortString = (dateObject: Date): string => {\n  return dateObject.getFullYear() + \"-\" + (dateObject.getMonth() + 1) + \"-\" + dateObject.getDate();\n};\n\n/**\n * Formats the date to a short string.\n * @method\n * @param {Date} dateObject The date object.\n * @returns {string} The date string.\n */\nexport const formatDateAsString = (dateObject: Date): string => {\n  return new Date(dateObject).toDateString();\n};\n\n/**\n * Converts from date time to date.\n * @method\n * @param {Date} dateTime The date object.\n * @returns {Date} The date string.\n */\nexport const convertFromDateTimeToDate = (dateTime: any): Date => new Date(Date.parse(dateTime));\n\n/**\n * Returns UTC date by local date.\n * @method\n * @param {Date} date local date.\n * @param {number} timeZoneOffset time zone offset.\n * @returns {string} UTC Date.\n */\nexport const getEventDateAsLocalDateString = (date: Date, timeZoneOffset: number): string => {\n  let eventDate = new Date(date);\n  eventDate = new Date(eventDate.setMinutes(eventDate.getMinutes() + timeZoneOffset));\n  return new Date(\n    eventDate.getUTCFullYear(),\n    eventDate.getUTCMonth(),\n    eventDate.getUTCDate()\n  ).toDateString();\n};\n\n/**\n * Returns event time txt.\n * @method\n * @param {Date} date local date.\n * @param {number} timeZoneOffset time zone offset.\n * @returns {string} Event time key.\n */\nexport const getEventTimeText = (date: Date, timeZoneOffset: number): string => {\n  let eventDate = new Date(date);\n  eventDate = new Date(eventDate.setMinutes(eventDate.getMinutes() + timeZoneOffset));\n  const timespan = `${String(eventDate.getUTCHours()).padStart(2, \"0\")}:${String(\n    eventDate.getUTCMinutes()\n  ).padStart(2, \"0\")}:00`;\n  const time = times.filter((time) => time.timespan === timespan);\n  return time.length > 0 ? time[0].text : times[0].text;\n};\n\n/**\n * Formats the Name.\n * @method\n * @param {string} firstName The first name.\n * @param {string} lastName The last name.\n * @returns {string} The formatted name.\n */\nexport const formatName = (firstName: string, lastName: string): string =>\n  firstName + \" \" + lastName;\n\n/**\n * Formats the Address.\n * @method\n * @param {string} address1 The first address line.\n * @param {string} address2 The second address line.\n * @param {string} addressCity The address city line.\n * @param {string} addressStateorProvince The address state/province line.\n * @param {string} addressPostCode The address post code line.\n * @param {string} addressCountryOrRegionName The address country/region line.\n * @returns {string} The formatted name.\n */\nexport const formatAddress = (\n  address1: string,\n  address2: string,\n  addressCity: string,\n  addressStateorProvince: string,\n  addressPostCode: string,\n  addressCountryOrRegionName: string\n): string =>\n  address1 +\n  \" \" +\n  address2 +\n  \" \" +\n  addressCity +\n  \" \" +\n  addressStateorProvince +\n  \" \" +\n  addressPostCode +\n  \" \" +\n  addressCountryOrRegionName;\n\n/**\n * Returns a formatted date and time string.\n * @method\n * @param {Date} date The date to format.\n * @returns {string} The formatted date and time string.\n */\nexport const getFormattedDateTime: (date: Date) => string = (date: Date) => {\n  return moment(new Date(date)).format(\"llll\");\n};\n\nexport const formatDateEu = (dateObject: Date): string => {\n  const options = {\n    year: \"numeric\",\n    month: \"short\",\n    day: \"numeric\",\n  };\n\n  const utcDateStr = moment.utc(dateObject).format();\n  const momentDate = new Date(utcDateStr);\n\n  return utcDateStr === emptyDate\n    ? placeholderString\n    : momentDate.toLocaleDateString(\"en-GB\", options as Intl.DateTimeFormatOptions);\n};\n\n/**\n * Modifies the minutes of the date to minus the time zone offset. This essentially shifts the time back to UTC.\n * It needs to be used in conjunction with {addDateTimeOffset}.\n * @method\n * @param {Date | undefined} date Date.\n * @returns {Date | undefined} Date.\n */\nexport const removeDateTimeOffset = (date: Date | undefined): Date | undefined => {\n  if (!date) return date;\n  let dt = new Date(date);\n  dt = new Date(dt.setMinutes(dt.getMinutes() + dt.getTimezoneOffset()));\n  return dt;\n};\n\n/**\n * Modifies the minutes of the date to add the time zone offset. This essentially shifts the time back to UTC.\n * It needs to be used in conjunction with {removeDateTimeOffset}.\n * @method\n * @param {Date | undefined} date Date.\n * @returns {Date | undefined} Date.\n */\nexport const addDateTimeOffset = (date: Date | undefined): Date | undefined => {\n  if (!date) return date;\n  let dt = new Date(date);\n  dt = new Date(dt.setMinutes(dt.getMinutes() - dt.getTimezoneOffset()));\n  return dt;\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { getTheme, FontSizes, IStackStyles, IStackTokens, ITextStyles } from \"@fluentui/react\";\n\nconst theme = getTheme();\n\nexport const commentStackTokens: IStackTokens = { childrenGap: \"1rem\" };\n\nexport const commentContainerStackStyles: IStackStyles = {\n  root: {\n    padding: \"1rem 0\",\n    justifyContent: \"space-between\",\n  },\n};\n\nexport const commentTextStackStyles: IStackStyles = {\n  root: {\n    border: `1px solid ${theme.palette.neutralTertiary}`,\n    borderRadius: \"0.5rem\",\n    width: \"70%\",\n    padding: \"1.5rem 1rem\",\n  },\n};\n\nexport const createdTextStyles: ITextStyles = {\n  root: {\n    fontSize: FontSizes.size16,\n  },\n};\n\nexport const createdDateTextStyles: ITextStyles = {\n  root: {\n    fontSize: FontSizes.size16,\n    fontWeight: 600,\n  },\n};\n\nexport const commentTextStyles: ITextStyles = {\n  root: {\n    marginBottom: \"1rem\",\n    overflowWrap: \"break-word\",\n    fontSize: FontSizes.size16,\n  },\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React from \"react\";\n\nimport { Stack, StackItem, Text } from \"@fluentui/react\";\n\nimport { getFormattedDateTime } from \"Utility/FormatHelper\";\n\nimport {\n  commentContainerStackStyles,\n  commentStackTokens,\n  commentTextStackStyles,\n  commentTextStyles,\n  createdDateTextStyles,\n  createdTextStyles,\n} from \"./CommentDetail.styles\";\nimport { ICommentDetailProps } from \"./ICommentDetailProps\";\n\nconst CommentDetail = (props: ICommentDetailProps): React.ReactElement => {\n  const { userProfileComment } = props;\n\n  return (\n    <Stack key={userProfileComment.id} horizontal styles={commentContainerStackStyles}>\n      <Stack>\n        <StackItem>\n          <Text styles={createdTextStyles}>Created on:</Text>\n        </StackItem>\n        <StackItem>\n          <Text styles={createdDateTextStyles}>\n            {getFormattedDateTime(userProfileComment.dateCreated)}\n          </Text>\n        </StackItem>\n      </Stack>\n      <Stack styles={commentTextStackStyles} tokens={commentStackTokens}>\n        <StackItem>\n          <Text styles={commentTextStyles}>{userProfileComment.text}</Text>\n        </StackItem>\n        <StackItem>\n          <Text styles={createdTextStyles}>Created by: {userProfileComment.createdBy}</Text>\n        </StackItem>\n      </Stack>\n    </Stack>\n  );\n};\n\nexport default CommentDetail;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { getTheme, FontSizes, IStackItemStyles, IStackStyles, ITextStyles } from \"@fluentui/react\";\n\nconst theme = getTheme();\n\nexport const wrapperStyles: IStackStyles = {\n  root: {\n    border: `1px solid ${theme.palette.neutralTertiaryAlt}`,\n    borderRadius: \"0.5rem\",\n    padding: \"2.25rem 1.5rem\",\n    boxShadow: \"0px 1px 6px rgba(0, 0, 0, 0.2)\",\n    marginTop: \"1.5rem\",\n  },\n};\n\nexport const titleStyles: IStackItemStyles = {\n  root: {\n    padding: \"1.5rem\",\n    background: theme.palette.neutralLight,\n    borderRadius: \"0.5rem\",\n  },\n};\n\nexport const titleTextStyles: ITextStyles = {\n  root: {\n    fontSize: FontSizes.size20,\n    fontWeight: 600,\n  },\n};\n\nexport const messageStackStyles: IStackItemStyles = {\n  root: { alignSelf: \"center\", marginBottom: \"1rem\" },\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { ReactElement } from \"react\";\n\nimport { isEmpty, sortBy } from \"lodash\";\n\nimport { Spinner, SpinnerSize, Stack, StackItem, Text } from \"@fluentui/react\";\n\nimport CommentDetail from \"Components/CommentDetail/CommentDetail\";\nimport {\n  bodyContainerStackStyles,\n  headerStackStyles,\n  headerTextStyles,\n  ContainerWrapper,\n} from \"Components/Common/SharedTableStyles.styles\";\n\nimport { messageStackStyles } from \"./CommentsHistory.styles\";\nimport { ICommentsHistoryProps } from \"./ICommentsHistoryProps\";\n\nexport const CommentsHistory = (props: ICommentsHistoryProps): ReactElement => {\n  const { userProfileComments, errorMessage, isLoading } = props;\n\n  return (\n    <ContainerWrapper>\n      <Stack styles={headerStackStyles}>\n        <Text styles={headerTextStyles}>History</Text>\n      </Stack>\n      <Stack styles={bodyContainerStackStyles}>\n        {!isEmpty(userProfileComments) ? (\n          sortBy(userProfileComments, (comment) => {\n            return new Date(comment.dateCreated);\n          })\n            .reverse()\n            .map((userProfileComment, index) => (\n              <StackItem key={index}>\n                <CommentDetail userProfileComment={userProfileComment} />\n              </StackItem>\n            ))\n        ) : !!errorMessage ? (\n          <StackItem styles={messageStackStyles}>{errorMessage}</StackItem>\n        ) : isLoading ? (\n          <Spinner size={SpinnerSize.large} />\n        ) : (\n          <StackItem styles={messageStackStyles}>No comments to display.</StackItem>\n        )}\n      </Stack>\n    </ContainerWrapper>\n  );\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { useEffect, ReactElement } from \"react\";\n\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { Redirect } from \"react-router\";\n\nimport { useAuth } from \"Authentication/AuthProvider\";\nimport { AddComment } from \"Components/AddComment/AddComment\";\nimport { CommentsHistory } from \"Components/CommentsHistory/CommentsHistory\";\nimport { OperationStatus } from \"Constants/OperationStatus\";\nimport { PermissionsEnum } from \"Constants/RolesPermissionsConstants\";\nimport { TenantTypesEnum } from \"Constants/TenantTypes\";\nimport { DetailWrapper } from \"Containers/Common/CommonContainer.styles\";\nimport { addNewComment, loadUserProfileComments } from \"Dataflows/UserProfile/UserProfileAction\";\nimport {\n  getAddCommentOperationStatus,\n  getAppStateUserProfile,\n  getAppStateUserProfileComments,\n  getLoadCommentsError,\n  isUserProfileCommentsLoading,\n} from \"Dataflows/UserProfile/UserProfileSelector\";\n\n/**\n * Student comments\n * @Component\n * @returns {React.Component<>}\n */\nconst StudentComments = (): ReactElement => {\n  const { isUserLoggedIn, loading, hasAnyRoles, account, hasPermission } = useAuth();\n\n  const userProfileId = useSelector(getAppStateUserProfile)?.id;\n  const loadCommentsError = useSelector(getLoadCommentsError);\n  const isLoading = useSelector(isUserProfileCommentsLoading);\n  const userProfileComments = useSelector(getAppStateUserProfileComments);\n  const addCommentOpStatus = useSelector(getAddCommentOperationStatus);\n  const dispatch = useDispatch();\n\n  if (isUserLoggedIn && !hasAnyRoles && !loading) {\n    return <Redirect to=\"/unauthorized\" />;\n  }\n\n  useEffect(() => {\n    if (!!userProfileId) {\n      dispatch(loadUserProfileComments(userProfileId));\n    }\n  }, [addCommentOpStatus === OperationStatus.Succeeded]);\n\n  const onAddCommentClicked = (newComment): void => {\n    if (!!userProfileId && !!newComment && !!account.userName) {\n      dispatch(addNewComment(userProfileId, newComment, account.userName));\n    }\n  };\n\n  const canAddComments = hasPermission(TenantTypesEnum.MSP, PermissionsEnum.MSA_UPDATE_USERS);\n\n  return (\n    <DetailWrapper>\n      {canAddComments && (\n        <AddComment\n          onAddCommentClicked={onAddCommentClicked}\n          addCommentStatus={addCommentOpStatus}\n        />\n      )}\n      <CommentsHistory\n        userProfileComments={userProfileComments}\n        isLoading={isLoading}\n        errorMessage={loadCommentsError}\n      />\n    </DetailWrapper>\n  );\n};\n\nexport default StudentComments;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React from \"react\";\n\nimport { Stack, StackItem, Text } from \"@fluentui/react\";\n\nimport { bodyContainerStackStyles } from \"Components/Common/SharedTableStyles.styles\";\nimport { SidePanel } from \"Components/SidePanel/SidePanel\";\nimport { ISidePanelProps } from \"Components/SidePanel/SidePanelProps\";\nimport { OperationStatus } from \"Constants/OperationStatus\";\n\nimport ISetProfileToPrivateSidePanelProps from \"./ISetProfileToPrivateSidePanelProps\";\n\nexport const SetProfileToPrivateSidePanel: React.FunctionComponent<\n  ISetProfileToPrivateSidePanelProps\n> = (props: ISetProfileToPrivateSidePanelProps) => {\n  const { isPrivate, isOpen, updateStatus, updateError, onDismiss, onSave } = props;\n\n  const title = `Set Profile to ${isPrivate ? \"Public\" : \"Private\"}`;\n\n  const disableActions = updateStatus === OperationStatus.Pending;\n\n  const panelProps: ISidePanelProps = {\n    isOpen: isOpen,\n    title: title,\n    onDismiss: () => {\n      !!onDismiss && onDismiss();\n    },\n    onSave: () => {\n      !!onSave && onSave();\n    },\n    disableActions: disableActions,\n    error: updateError,\n  };\n\n  const getPublicToPrivateMessage = () => {\n    return (\n      <>\n        <Stack styles={bodyContainerStackStyles} tokens={{ childrenGap: \"1rem\" }}>\n          <StackItem>\n            <Text>\n              By clicking the Save button below, you will set this profile to Private. Once a\n              profile is private:\n            </Text>\n          </StackItem>\n        </Stack>\n        <Stack styles={bodyContainerStackStyles} tokens={{ childrenGap: \"1rem\" }}>\n          <ul>\n            <li>\n              <Text>\n                It will not be returned in the profile search experience (profile page will not be\n                publicly accessible).\n              </Text>\n            </li>\n            <li>\n              <Text>\n                Events this user organized will not be returned in the event search experience.\n              </Text>\n            </li>\n            <li>\n              <Text>This user cannot be added as an event contributor.</Text>\n            </li>\n          </ul>\n        </Stack>\n      </>\n    );\n  };\n\n  const getPrivateToPublicMessage = () => {\n    return (\n      <>\n        <Stack styles={bodyContainerStackStyles} tokens={{ childrenGap: \"1rem\" }}>\n          <StackItem>\n            <Text>\n              By clicking the Save button below, you will set this profile to public. Once a profile\n              is public:\n            </Text>\n          </StackItem>\n        </Stack>\n        <Stack styles={bodyContainerStackStyles} tokens={{ childrenGap: \"1rem\" }}>\n          <ul>\n            <li>\n              <Text>\n                It will be returned in the profile search experience (profile page is accessible\n                publicly).\n              </Text>\n            </li>\n            <li>\n              <Text>\n                Events this user organized will be public and returned in the event search\n                experience.\n              </Text>\n            </li>\n            <li>\n              <Text>This user can be added as an event contributor.</Text>\n            </li>\n          </ul>\n        </Stack>\n      </>\n    );\n  };\n\n  return (\n    <>\n      <SidePanel {...panelProps}>\n        {!isPrivate ? getPublicToPrivateMessage() : getPrivateToPublicMessage()}\n      </SidePanel>\n    </>\n  );\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\nimport {\n  SCHOOLDATA_LOAD,\n  SCHOOLDATA_LOAD_SUCCESS,\n  SCHOOLDATA_LOAD_FAILURE,\n} from \"../../Constants/ActionTypes\";\nimport { ISchoolData } from \"../../Interfaces/SiteContent\";\n\n/**\n *\n */\nexport interface IGetSchools {\n  type: typeof SCHOOLDATA_LOAD;\n  countryRegionName: string;\n}\n\n/**\n *\n */\nexport interface IGetSchoolsSuccess {\n  type: typeof SCHOOLDATA_LOAD_SUCCESS;\n  schools: ISchoolData[];\n}\n\n/**\n *\n */\nexport interface IGetSchoolsFailure {\n  type: typeof SCHOOLDATA_LOAD_FAILURE;\n  schoolDataLoadError: string;\n}\n\n/**\n *\n * @param countryRegionName\n */\nexport const getSchoolData = (countryRegionName: string): SchoolActionTypes => ({\n  type: SCHOOLDATA_LOAD,\n  countryRegionName,\n});\n\n/**\n *\n * @param schoolData\n */\nexport const getSchoolDataSuccess = (schoolData: ISchoolData[]): SchoolActionTypes => ({\n  type: SCHOOLDATA_LOAD_SUCCESS,\n  schools: schoolData,\n});\n\n/**\n *\n * @param errorMessage\n */\nexport const getSchoolDataFailure = (schoolDataLoadError: string): SchoolActionTypes => ({\n  type: SCHOOLDATA_LOAD_FAILURE,\n  schoolDataLoadError,\n});\n\nexport type SchoolActionTypes = IGetSchools | IGetSchoolsSuccess | IGetSchoolsFailure;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nexport const SCHOOLDATA_LOAD = \"SCHOOLDATA_LOAD\";\nexport const SCHOOLDATA_LOAD_SUCCESS = \"SCHOOLDATA_LOAD_SUCCESS\";\nexport const SCHOOLDATA_LOAD_FAILURE = \"SCHOOLDATA_LOAD_FAILURE\";\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\nimport {\n  STATEPROVINCEDATA_LOAD,\n  STATEPROVINCEDATA_LOAD_SUCCESS,\n  STATEPROVINCEDATA_LOAD_FAILURE,\n  STATEPROVINCESHIPPING_LOAD,\n  STATEPROVINCESHIPPING_LOAD_SUCCESS,\n  STATEPROVINCESHIPPING_LOAD_FAILURE,\n  STATEPROVINCESCHOOL_LOAD,\n  STATEPROVINCESCHOOL_LOAD_SUCCESS,\n  STATEPROVINCESCHOOL_LOAD_FAILURE,\n} from \"../../Constants/ActionTypes\";\nimport { IStateProvinceData } from \"../../Interfaces/SiteContent\";\n\n/**\n *\n */\nexport interface IGetStateProvince {\n  type: typeof STATEPROVINCEDATA_LOAD;\n  countryRegionName: string;\n}\n\n/**\n *\n */\nexport interface IGetStateProvinceSuccess {\n  type: typeof STATEPROVINCEDATA_LOAD_SUCCESS;\n  stateProvinces: IStateProvinceData[];\n}\n\n/**\n *\n */\nexport interface IGetStateProvinceFailure {\n  type: typeof STATEPROVINCEDATA_LOAD_FAILURE;\n  stateProvincesLoadError: string;\n}\n\n/**\n *\n */\nexport interface IGetStateProvinceShipping {\n  type: typeof STATEPROVINCESHIPPING_LOAD;\n  countryRegionName: string;\n}\n\nexport interface IGetStateProvinceShippingSuccess {\n  type: typeof STATEPROVINCESHIPPING_LOAD_SUCCESS;\n  stateProvincesShipping: IStateProvinceData[];\n}\n\n/**\n *\n */\nexport interface IGetStateProvinceShippingFailure {\n  type: typeof STATEPROVINCESHIPPING_LOAD_FAILURE;\n  stateProvincesShippingLoadError: string;\n}\n\n/**\n *\n */\nexport interface IGetStateProvinceSchool {\n  type: typeof STATEPROVINCESCHOOL_LOAD;\n  countryRegionName: string;\n}\n\n/**\n *\n */\nexport interface IGetStateProvinceSchoolSuccess {\n  type: typeof STATEPROVINCESCHOOL_LOAD_SUCCESS;\n  stateProvincesSchool: IStateProvinceData[];\n}\n\n/**\n *\n */\nexport interface IGetStateProvinceSchoolFailure {\n  type: typeof STATEPROVINCESCHOOL_LOAD_FAILURE;\n  stateProvincesSchoolLoadError: string;\n}\n\n/**\n *\n * @param countryRegionName\n */\nexport const getStateProvince = (countryRegionName: string): StateProvinceActionTypes => ({\n  type: STATEPROVINCEDATA_LOAD,\n  countryRegionName,\n});\n\n/**\n *\n * @param stateProvinceData\n */\nexport const getStateProvinceSuccess = (\n  stateProvinceData: IStateProvinceData[]\n): StateProvinceActionTypes => ({\n  type: STATEPROVINCEDATA_LOAD_SUCCESS,\n  stateProvinces: stateProvinceData,\n});\n\n/**\n *\n * @param errorMessage\n */\nexport const getStateProvinceFailure = (\n  stateProvincesLoadError: string\n): StateProvinceActionTypes => ({\n  type: STATEPROVINCEDATA_LOAD_FAILURE,\n  stateProvincesLoadError,\n});\n\n/**\n *\n * @param countryRegionName\n */\nexport const getStateProvinceShipping = (countryRegionName: string): StateProvinceActionTypes => ({\n  type: STATEPROVINCESHIPPING_LOAD,\n  countryRegionName,\n});\n\n/**\n *\n * @param stateProvinceData\n */\nexport const getStateProvinceShippingSuccess = (\n  stateProvinceData: IStateProvinceData[]\n): StateProvinceActionTypes => ({\n  type: STATEPROVINCESHIPPING_LOAD_SUCCESS,\n  stateProvincesShipping: stateProvinceData,\n});\n\n/**\n *\n * @param errorMessage\n */\nexport const getStateProvinceShippingFailure = (\n  stateProvincesShippingLoadError: string\n): StateProvinceActionTypes => ({\n  type: STATEPROVINCESHIPPING_LOAD_FAILURE,\n  stateProvincesShippingLoadError,\n});\n\n/**\n *\n * @param countryRegionName\n */\nexport const getStateProvinceSchool = (countryRegionName: string): StateProvinceActionTypes => ({\n  type: STATEPROVINCESCHOOL_LOAD,\n  countryRegionName,\n});\n\n/**\n *\n * @param stateProvinceData\n */\nexport const getStateProvinceSchoolSuccess = (\n  stateProvinceData: IStateProvinceData[]\n): StateProvinceActionTypes => ({\n  type: STATEPROVINCESCHOOL_LOAD_SUCCESS,\n  stateProvincesSchool: stateProvinceData,\n});\n\n/**\n *\n * @param errorMessage\n */\nexport const getStateProvinceSchoolFailure = (\n  stateProvincesSchoolLoadError: string\n): StateProvinceActionTypes => ({\n  type: STATEPROVINCESCHOOL_LOAD_FAILURE,\n  stateProvincesSchoolLoadError,\n});\n\nexport type StateProvinceActionTypes =\n  | IGetStateProvince\n  | IGetStateProvinceSuccess\n  | IGetStateProvinceFailure\n  | IGetStateProvinceShipping\n  | IGetStateProvinceShippingSuccess\n  | IGetStateProvinceShippingFailure\n  | IGetStateProvinceSchool\n  | IGetStateProvinceSchoolSuccess\n  | IGetStateProvinceSchoolFailure;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\nexport const STATEPROVINCEDATA_LOAD = \"STATEPROVINCEDATA_LOAD\";\nexport const STATEPROVINCEDATA_LOAD_SUCCESS = \"STATEPROVINCEDATA_LOAD_SUCCESS\";\nexport const STATEPROVINCEDATA_LOAD_FAILURE = \"STATEPROVINCEDATA_LOAD_FAILURE\";\n\nexport const STATEPROVINCESHIPPING_LOAD = \"STATEPROVINCESHIPPING_LOAD\";\nexport const STATEPROVINCESHIPPING_LOAD_SUCCESS = \"STATEPROVINCESHIPPING_LOAD_SUCCESS\";\nexport const STATEPROVINCESHIPPING_LOAD_FAILURE = \"STATEPROVINCESHIPPING_LOAD_FAILURE\";\n\nexport const STATEPROVINCESCHOOL_LOAD = \"STATEPROVINCESCHOOL_LOAD\";\nexport const STATEPROVINCESCHOOL_LOAD_SUCCESS = \"STATEPROVINCESCHOOL_LOAD_SUCCESS\";\nexport const STATEPROVINCESCHOOL_LOAD_FAILURE = \"STATEPROVINCESCHOOL_LOAD_FAILURE\";\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\nimport { IDatePickerStrings } from \"office-ui-fabric-react\";\n\nexport const DayPickerStrings: IDatePickerStrings = {\n  months: [\n    \"January\",\n    \"February\",\n    \"March\",\n    \"April\",\n    \"May\",\n    \"June\",\n    \"July\",\n    \"August\",\n    \"September\",\n    \"October\",\n    \"November\",\n    \"December\",\n  ],\n\n  shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"],\n\n  days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n\n  shortDays: [\"S\", \"M\", \"T\", \"W\", \"T\", \"F\", \"S\"],\n\n  goToToday: \"Go to today\",\n  prevMonthAriaLabel: \"Go to previous month\",\n  nextMonthAriaLabel: \"Go to next month\",\n  prevYearAriaLabel: \"Go to previous year\",\n  nextYearAriaLabel: \"Go to next year\",\n  closeButtonAriaLabel: \"Close date picker\",\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\nimport React from \"react\";\nimport { DatePicker } from \"office-ui-fabric-react\";\nimport { minDateValue, maxDateValue } from \"../../../Constants/Time\";\nimport FormikErrorMessage from \"../FormikErrorMessage/FormikErrorMessage\";\nimport { DayPickerStrings } from \"../../../Constants/DateConstants\";\n\n/**\n * OfficeUI DatePicker Field for use in Formik Forms\n * @returns {React.ReactElement} formik datepicker compnent.\n */\nconst FormikDatePicker = (props: any): React.ReactElement => {\n  const { field, form, styles } = props;\n  const minDate: Date = props.startDate ? props.startDate : new Date(minDateValue);\n  const maxDate: Date = props.endDate ? props.endDate : new Date(maxDateValue);\n\n  return (\n    <div>\n      <DatePicker\n        strings={DayPickerStrings}\n        onSelectDate={props.onSelectDate}\n        initialPickerDate={form.values[field.name]}\n        label={props.label}\n        value={field.value}\n        placeholder=\"Select a Date\"\n        minDate={minDate}\n        maxDate={maxDate}\n        styles={styles}\n        {...props}\n        isRequired={props.required}\n      />\n      <FormikErrorMessage name={field.name} />\n    </div>\n  );\n};\nexport default FormikDatePicker;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\nimport React from \"react\";\nimport { Dropdown } from \"office-ui-fabric-react\";\nimport FormikErrorMessage from \"../FormikErrorMessage/FormikErrorMessage\";\n\n/**\n * OfficeUI dropdown for use in Formik forms.\n * @param {field} field property.\n * @param {styles} component styles.\n * @returns {React.ReactElement} formik Dropdown component.\n */\nconst FormikDropdown = (props: any): React.ReactElement => {\n  const { field } = props;\n\n  return (\n    <div>\n      <Dropdown\n        selectedKey={field.value}\n        onChange={[field.onChange]}\n        options={[props.options]}\n        styles={props.styles}\n        {...field}\n        {...props}\n      />\n      <FormikErrorMessage name={field.name} />\n    </div>\n  );\n};\n\nexport default FormikDropdown;\n","import React from \"react\";\nimport { Dropdown } from \"office-ui-fabric-react\";\nimport FormikErrorMessage from \"../FormikErrorMessage/FormikErrorMessage\";\n\n/**\n * Office UI dropdown for use in formik forms with multiselect.\n * @param {field} field property.\n * @param {form} form property.\n * @param {props} passed in props from the parent component.\n * @returns {React.ReactElement} Dropdown multi select component.\n */\nconst FormikMultiDropdown = (props: any): React.ReactElement => {\n  const { field } = props;\n\n  return (\n    <div>\n      <Dropdown\n        selectedKeys={field.value}\n        onChange={[field.onChange]}\n        multiSelect\n        options={[props.options]}\n        styles={props.styles}\n        {...field}\n        {...props}\n      />\n      <FormikErrorMessage name={field.name} />\n    </div>\n  );\n};\n\nexport default FormikMultiDropdown;\n","import { mergeStyles } from \"office-ui-fabric-react/lib/Styling\";\nimport styled from \"styled-components\";\n\n/**\n * New item in picker.\n */\nexport const newItem = mergeStyles({\n  color: \"#f00\",\n  background: \"#ddf\",\n  padding: \"10px\",\n});\n\nexport const FullWidth = styled.div`\n  width: 100%;\n\n  input {\n    width: 100%;\n  }\n`;\n\n/**\n * Existing item in picker.\n */\nexport const existingItem = mergeStyles({ color: \"#222\", padding: \"10px\" });\n","import { ITag, TagPicker } from \"office-ui-fabric-react\";\nimport React, { ReactElement } from \"react\";\nimport FormikErrorMessage from \"../FormikErrorMessage/FormikErrorMessage\";\nimport { newItem, existingItem, FullWidth } from \"./FormikPicker.styles\";\n\ninterface ITagExtended {\n  isNewItem: string;\n}\n\ninterface ISuggestedItems {\n  isNewItem: object;\n  existingItem: object;\n  key: string;\n  name: string;\n}\n\n/* TODO - Update styles to work properly or remove\n\nconst baseStyles = {\n  root: {\n    height: 48,\n    marginTop: 7,\n    marginBottom: 20,\n  },\n  input: {\n    fontSize: FontSizes.xLargePlus,\n    lineHeight: FontSizes.xxLargePlus,\n  },\n  text: {\n    padding: \"8px 11px\",\n  },\n};\n\n*/\n\n/**\n * Formik Picker.\n * TODO: Picker does not appear to show initial selected value.\n * @component\n * @returns {ReactElement} - formik picker.\n */\nconst FormikPicker = ({ field, form: { touched, errors }, ...props }): ReactElement => {\n  /**\n   * Checks if the list contains an item in the picker.\n   * @param {ITag} tag - the tag.\n   * @param {ITag[]} tagList  - the tag list.\n   * @returns {boolean} - value indicating true or false.\n   */\n  const _listContains = (tag: ITag, tagList?: ITag[]): boolean => {\n    if (!tagList || !tagList.length || tagList.length === 0) {\n      return false;\n    }\n\n    return tagList.filter((compareTag) => compareTag.key === tag.key).length > 0;\n  };\n\n  /**\n   * Called when the typed in text has changed.\n   * @param {string} filterText - the string to filter on.\n   * @param {ITag[]} tagList - the list to filter against.\n   * @returns {Array} of elements to display.\n   */\n  const _onFilterChanged = (filterText: string, tagList: ITag[]): ITag[] => {\n    const existingMatches = filterText\n      ? props.suggestedItems\n          .filter((tag) => tag.name.toLowerCase().indexOf(filterText.toLowerCase()) === 0)\n          .filter((tag) => !_listContains(tag, tagList))\n      : [];\n\n    if (props.allowTypedInputItemResult) {\n      return existingMatches.some((a) => a.key === filterText)\n        ? existingMatches\n        : [{ key: filterText, name: filterText, isNewItem: true } as ITag].concat(existingMatches);\n    }\n    return existingMatches;\n  };\n\n  /**\n   * Suggestions to render to the user.\n   * @param {ISuggestedItems} props - the list of suggested items.\n   * @returns {ReactElement} the suggestions.\n   */\n  const _onRenderSuggestionsItem = (props: ISuggestedItems): ReactElement => {\n    return (\n      <div className={props.isNewItem ? newItem : existingItem} key={props.key}>\n        {props.name}\n      </div>\n    );\n  };\n\n  /**\n   * When an Itme is selected.\n   * @param {ITag} item - the item selected.\n   * @returns {ITag} the selected Item.\n   */\n  const _onItemSelected = (item: ITag & ITagExtended): ITag | null => {\n    //TODO: look at dispatching action to add new school.\n    return item;\n  };\n\n  return (\n    <FullWidth>\n      <TagPicker\n        onRenderSuggestionsItem={_onRenderSuggestionsItem}\n        onItemSelected={_onItemSelected}\n        removeButtonAriaLabel={props.removeButtonAriaLabel}\n        onResolveSuggestions={_onFilterChanged}\n        getTextFromItem={(item: ITag): string => item.name}\n        pickerSuggestionsProps={props.pickerSuggestionsProps}\n        itemLimit={props.itemLimit}\n        inputProps={props.inputProps}\n        onChange={[field.onChange]}\n        resolveDelay={props.resolveDelay}\n        selectedItems={props.selectedItems}\n        styles={props.styles}\n        {...field}\n        {...props}\n      />\n      <FormikErrorMessage name={field.name} />\n    </FullWidth>\n  );\n};\n\nexport default FormikPicker;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\nimport React from \"react\";\nimport { TextField } from \"office-ui-fabric-react/lib/TextField\";\nimport FormikErrorMessage from \"../FormikErrorMessage/FormikErrorMessage\";\nimport { ColumnContent } from \"../Layout/Layout\";\n\n/**\n * Formik Text Field HoC\n */\nconst FormikTextField = ({\n  field, // { name, value, onChange, onBlur}\n  form, // { touched, errors, values }, also values , setXXX, handleXXX< dirty, isValid, status, etc\n  styles,\n  ...props\n}): React.ReactElement => (\n  <ColumnContent>\n    <TextField\n      disabled={props.isDisabled}\n      onChange={[field.onChange]}\n      styles={styles}\n      {...field}\n      {...props}\n    />\n    <FormikErrorMessage name={field.name} />\n  </ColumnContent>\n);\n\nexport default FormikTextField;\n","import React from \"react\";\nimport { Toggle } from \"office-ui-fabric-react/lib/Toggle\";\nimport { ColumnContent } from \"../Layout/Layout\";\nimport FormikErrorMessage from \"../FormikErrorMessage/FormikErrorMessage\";\n\n/**\n * HoC for Formik Toggle\n * @param param0\n */\nconst FormikToggle = ({\n  field, /// { name, value, onChange, onBlur },\n  form, /// { touched, errors, values }, // also values , setXXX, handleXXX< dirty, isValid, status, etc\n  ...props\n}) => (\n  <ColumnContent>\n    <Toggle\n      label={props.label}\n      styles={props.styles}\n      inlineLabel\n      onChange={props.onChange}\n      checked={field.value}\n      {...field}\n      {...props}\n    />\n    <FormikErrorMessage name={field.name} />\n  </ColumnContent>\n);\nexport default FormikToggle;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\nimport styled from \"styled-components\";\n\nimport { FontSizes, FontWeights, IStackTokens, ITextStyles } from \"@fluentui/react\";\n\n/**\n * Stack tokens for the cancel/save buttons\n */\nexport const buttonStackTokens: IStackTokens = { childrenGap: 40, padding: 30 };\n\n/**\n * FormikDatePicker\n */\nexport const datePickerFieldStyles = {\n  root: {\n    display: \"flex\",\n    flexDirection: \"column\",\n  },\n  textField: {\n    fontSize: FontSizes.xLargePlus,\n    lineHeight: FontSizes.xxLargePlus,\n  },\n};\n\nexport const FieldSet = styled.fieldset`\n  padding: 10px;\n`;\n\n/**\n * Styled div to wrap around label and input fields\n */\nexport const FieldBlock = styled.div`\n  width: 47%;\n\n  input,\n  textarea {\n    width: 100%;\n  }\n`;\n\n/**\n * Section title styles to distinguish each grouping of fields witin form\n */\nexport const formSectionTitleStyles: ITextStyles = {\n  root: {\n    fontSize: FontSizes.medium,\n    fontWeight: FontWeights.semibold,\n    margin: \"1.5rem 0 0.5rem\",\n    width: \"100%\",\n  },\n};\n\n/**\n * Horizontal form field stack tokens\n */\nexport const horizontalFormFieldsStackTokens: IStackTokens = { childrenGap: 15 };\n\n/**\n * Subtitle text used within sections to differentiate arry of items being updated\n */\nexport const sectionSubtitleStyles: ITextStyles = {\n  root: {\n    fontSize: FontSizes.medium,\n    fontWeight: FontWeights.semibold,\n    margin: \"1rem 0 0.5rem\",\n  },\n};\n\nexport const toggleFieldStyles = {\n  root: {\n    marginBottom: 0,\n    display: \"flex\",\n    alignItems: \"center\",\n  },\n};\n\nexport const ShippingSameRow = styled.div`\n  display: flex;\n  flex-direction: row;\n  justify-content: space-between;\n  align-items: center;\n`;\n\n/**\n * Text styles for Shipping address same question\n */\nexport const shippingSameLabelStyles = {\n  root: {\n    fontSize: FontSizes.medium,\n    fontWeight: FontWeights.semibold,\n  },\n};\n\nexport const ShippingSameSwitch = styled.div`\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  grid-template-rows: 1fr;\n  grid-column-gap: 30px;\n`;\n\nexport const IsSocialMediaPrivateRow = styled.div`\n  display: flex;\n  flex-direction: row;\n  justify-content: space-between;\n  align-items: center;\n`;\n\nexport const IsSocialMediaPrivate = styled.div`\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  grid-template-rows: 1fr;\n  grid-column-gap: 30px;\n`;\n\nexport const isSocialMediaPrivateLabelStyles = {\n  root: {\n    fontSize: FontSizes.medium,\n    fontWeight: FontWeights.semibold,\n  },\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\nimport React, { useEffect, useState } from \"react\";\n\nimport { useDispatch } from \"react-redux\";\n\nimport { FastField, Field, FormikProps } from \"formik\";\nimport { addDays, addYears } from \"office-ui-fabric-react/lib/utilities/dateMath/DateMath\";\n\nimport { ITag, Label, Stack, Text } from \"@fluentui/react\";\n\nimport { SidePanel } from \"Components/SidePanel/SidePanel\";\nimport { getSchoolData } from \"Dataflows/School/SchoolDataAction\";\nimport {\n  getStateProvince,\n  getStateProvinceSchool,\n  getStateProvinceShipping,\n} from \"Dataflows/StateProvince/StateProvinceAction\";\n\nimport { languages } from \"../../Constants/Languages\";\nimport {\n  genders,\n  namesLocalized,\n  pronounPreferences,\n  schoolDegreeLevels,\n  schoolDegreePrograms,\n  shirtFitTypes,\n  shirtSizes,\n  titles,\n  urlPrefix,\n} from \"../../Constants/ProfileConstants\";\nimport { IFormField } from \"../../Interfaces/IFormField\";\nimport { IUserProfile } from \"../../Interfaces/UserProfile/IUserProfile\";\nimport { IUserProfileSchool } from \"../../Interfaces/UserProfile/IUserProfileSchool\";\nimport { IUserProfileSocialNetwork } from \"../../Interfaces/UserProfile/IUserProfileSocialNetwork\";\nimport FormikDatePicker from \"../Common/DatePicker/FormikDatePicker\";\nimport FormikDropdown from \"../Common/Dropdown/FormikDropdown\";\nimport FormikMultiDropdown from \"../Common/Dropdown/FormikMultiDropdown\";\nimport FormikErrorMessage from \"../Common/FormikErrorMessage/FormikErrorMessage\";\nimport FormikPicker from \"../Common/Picker\";\nimport FormikTextField from \"../Common/TextField/FormikTextField\";\nimport FormikToggle from \"../Common/Toggle\";\nimport { IStudentEditProfileFormValues } from \"./Interfaces/IStudentEditProfileFormValues\";\nimport { IStudentEditProfileProps } from \"./Interfaces/IStudentEditProfileProps\";\nimport {\n  datePickerFieldStyles,\n  formSectionTitleStyles,\n  horizontalFormFieldsStackTokens,\n  isSocialMediaPrivateLabelStyles,\n  sectionSubtitleStyles,\n  shippingSameLabelStyles,\n  toggleFieldStyles,\n  FieldBlock,\n  FieldSet,\n  IsSocialMediaPrivate,\n  IsSocialMediaPrivateRow,\n  ShippingSameRow,\n  ShippingSameSwitch,\n} from \"./StudentEdit.styles\";\n\nconst MIN_DAYS = 180;\n\nconst formSectionsFields = [\n  {\n    title: \"Personal Information\",\n    fields: [\n      {\n        name: \"firstName\",\n        label: \"First Name\",\n      },\n      {\n        name: \"lastName\",\n        label: \"Last Name\",\n      },\n      {\n        name: \"localizedFirstName\",\n        label: \"Localized First Name\",\n      },\n      {\n        name: \"localizedLastName\",\n        label: \"Localized Last Name\",\n      },\n      {\n        name: \"awardNameLocalized\",\n        label: \"Choose print name as either\",\n        type: \"select\",\n        options: namesLocalized,\n        placeholder: \"Select localization option\",\n      },\n      {\n        name: \"screenNameLocalized\",\n        label: \"Choose display name as either\",\n        type: \"select\",\n        options: namesLocalized,\n        placeholder: \"Select localization option\",\n      },\n      {\n        name: \"genderName\",\n        label: \"Gender\",\n        type: \"select\",\n        options: genders,\n        placeholder: \"Select gender\",\n      },\n      {\n        name: \"genderPronounPreferenceName\",\n        label: \"Pronoun\",\n        type: \"select\",\n        options: pronounPreferences,\n        placeholder: \"Select preferred pronoun\",\n      },\n      {\n        name: \"titleName\",\n        label: \"Title\",\n        type: \"select\",\n        options: titles,\n        placeholder: \"Select preferred title\",\n      },\n      {\n        name: \"dateOfBirth\",\n        label: \"Date of Birth\",\n        type: \"date\",\n      },\n      {\n        name: \"primaryEmail\",\n        label: \"Site Email\",\n        disabled: true,\n      },\n      {\n        name: \"secondaryEmail\",\n        label: \"Preferred Email\",\n      },\n      {\n        name: \"studentPartnerEmail\",\n        label: \"Student Partner Email\",\n        disabled: true,\n      },\n      {\n        name: \"languages\",\n        label: \"Languages\",\n        type: \"multiSelect\",\n        options: languages,\n        placeholder: \"Select languages\",\n      },\n      {\n        name: \"shirtFitType\",\n        label: \"Shirt Fit Type\",\n        type: \"select\",\n        options: shirtFitTypes,\n        placeholder: \"Select shirt fit\",\n      },\n      {\n        name: \"shirtSize\",\n        label: \"Shirt Size\",\n        type: \"select\",\n        options: shirtSizes,\n        placeholder: \"Select shirt size\",\n      },\n      {\n        name: \"userProfileProgramLanguage\",\n        label: \"Preferred Programming Language\",\n        type: \"multiSelect\",\n        placeholder: \"Select Preferred Programming Language\",\n      },\n    ] as IFormField[],\n  },\n  {\n    title: \"Biography\",\n    fields: [\n      {\n        name: \"headline\",\n        label: \"Headline\",\n        type: \"headline\",\n      },\n      {\n        name: \"biography\",\n        label: \"Biography\",\n        type: \"biography\",\n      },\n    ] as IFormField[],\n  },\n  {\n    title: \"Address\",\n    fields: [\n      {\n        name: \"address1\",\n        label: \"Address 1\",\n      },\n      {\n        name: \"address2\",\n        label: \"Address 2\",\n      },\n      {\n        name: \"addressCity\",\n        label: \"City\",\n      },\n      {\n        name: \"addressPostCode\",\n        label: \"Post Code\",\n      },\n      {\n        name: \"addressCountryOrRegionName\",\n        label: \"Country or Region\",\n        type: \"countryRegion\",\n        placeholder: \"Select country or region\",\n      },\n      {\n        name: \"addressStateOrProvince\",\n        label: \"State of Province\",\n        type: \"stateProvince\",\n        placeholder: \"Select state of province\",\n      },\n      {\n        name: \"primaryPhoneCountryOrRegionName\",\n        label: \"Primary Country Code\",\n        type: \"country\",\n        placeholder: \"Select country code\",\n      },\n      {\n        name: \"primaryPhone\",\n        label: \"Primary Phone number\",\n      },\n    ] as IFormField[],\n  },\n  {\n    title: \"Shipping Address\",\n    fields: [\n      {\n        name: \"shippingAddress1\",\n        label: \"Address 1\",\n      },\n      {\n        name: \"shippingAddress2\",\n        label: \"Address 2\",\n      },\n      {\n        name: \"shippingCity\",\n        label: \"City\",\n      },\n      {\n        name: \"shippingPostCode\",\n        label: \"Post Code\",\n      },\n      {\n        name: \"shippingCountryOrRegionName\",\n        label: \"Country or Region\",\n        type: \"shippingCountryRegion\",\n        placeholder: \"Select country or region\",\n      },\n      {\n        name: \"shippingStateOrProvince\",\n        label: \"State of Province\",\n        type: \"shippingStateProvince\",\n        placeholder: \"Select shipping state of province\",\n      },\n      {\n        name: \"shippingPhoneCountryOrRegionName\",\n        label: \"Shipping Country Code\",\n        type: \"shippingcountry\",\n        placeholder: \"Select country code\",\n      },\n      {\n        name: \"shippingPhoneNumber\",\n        label: \"Phone number\",\n      },\n    ] as IFormField[],\n  },\n];\n\n/**\n * Functional component descibing the edit user profile form.\n * @param {FormikProps} props FormikProps.\n * @returns {React.ReactElement} EditUserProfileForm Component.\n */\nconst StudentEditProfile = (\n  props: FormikProps<IStudentEditProfileFormValues> &\n    IStudentEditProfileProps & {\n      selectedUserProfile: IUserProfile;\n    }\n): React.ReactElement => {\n  const [isUpdating, setIsUpdating] = useState(false);\n  const {\n    handleBlur,\n    handleChange,\n    handleSubmit,\n    isSelectedUserProfileUpdating,\n    setFieldValue,\n    stateProvinceOptionList,\n    countryRegionOptionList,\n    countryRegionPhoneOptionList,\n    stateProvinceShippingOptionList,\n    stateProvinceSchoolOptionList,\n    schoolOptionList,\n    socialNetworkOptionList,\n    programLanguageOptionList,\n    values,\n    canEditUser,\n    updateProfileError,\n    handlePanelClose,\n  } = props;\n\n  const dispatch = useDispatch();\n\n  useEffect(() => {\n    if (isSelectedUserProfileUpdating) {\n      setIsUpdating(true);\n    } else {\n      if (isUpdating && updateProfileError === \"\") {\n        // close panel on successful update of profile\n        handlePanelClose();\n        setIsUpdating(false);\n      }\n    }\n  }, [isSelectedUserProfileUpdating]);\n\n  // Shipping fields should be clean it if the toggle is ON\n  if (!!values.shippingSameAsAddress) {\n    values.shippingAddress1 = \"\";\n    values.shippingAddress2 = \"\";\n    values.shippingCity = \"\";\n    values.shippingPostCode = \"\";\n    values.shippingCountryOrRegionName = \"\";\n    values.shippingStateOrProvince = \"\";\n    values.shippingPhoneCountryOrRegionName = \"\";\n    values.shippingPhoneNumber = \"\";\n  }\n\n  // Program language options should be updated from the api\n  if (!!programLanguageOptionList) {\n    const indexPersonalInformation = formSectionsFields.findIndex((obj) => {\n      return obj.title === \"Personal Information\";\n    });\n    const indexUserProfileProgramLanguage = formSectionsFields[\n      indexPersonalInformation\n    ].fields.findIndex((obj) => {\n      return obj.name === \"userProfileProgramLanguage\";\n    });\n    formSectionsFields[indexPersonalInformation].fields[indexUserProfileProgramLanguage].options =\n      programLanguageOptionList;\n  }\n\n  const handleOnSave = () => {\n    handleSubmit();\n  };\n\n  return (\n    <form onSubmit={handleSubmit}>\n      <SidePanel\n        isOpen={props.isPanelOpen}\n        title=\"Edit Profile Details\"\n        saveButtonLabel=\"Save\"\n        error={updateProfileError}\n        disableActions={isSelectedUserProfileUpdating}\n        onDismiss={handlePanelClose}\n        onSave={handleOnSave}\n      >\n        <FieldSet disabled={isSelectedUserProfileUpdating}>\n          {formSectionsFields.map((section) => (\n            <div key={section.title}>\n              <Text block styles={formSectionTitleStyles} key={`${section.title}-title`}>\n                {section.title}\n              </Text>\n              {section.title == \"Shipping Address\" && (\n                <ShippingSameSwitch>\n                  <ShippingSameRow>\n                    <Label styles={shippingSameLabelStyles}>\n                      Shipping Address same as Primary Address?\n                    </Label>\n                    <FastField\n                      name=\"shippingSameAsAddress\"\n                      onChange={(_, checked): void => {\n                        setFieldValue(\"shippingSameAsAddress\", checked);\n                      }}\n                      component={FormikToggle}\n                      stackWidth={40}\n                      styles={toggleFieldStyles}\n                      disabled={!canEditUser}\n                    />\n                  </ShippingSameRow>\n                </ShippingSameSwitch>\n              )}\n              <Stack\n                horizontal\n                wrap\n                tokens={horizontalFormFieldsStackTokens}\n                key={`${section.title}-stack`}\n              >\n                {section.fields.map((field) => (\n                  <FieldBlock key={`${section.title}-${field.name}`}>\n                    <Label key={`${field.label}-label`}>{field.label}</Label>\n                    {field.type === \"date\" && (\n                      <FastField\n                        name={field.name}\n                        onSelectDate={(date: Date): void => {\n                          setFieldValue(field.name, date);\n                        }}\n                        component={FormikDatePicker}\n                        showGoToToday={false}\n                        key={field.name}\n                        disabled={!canEditUser}\n                      />\n                    )}\n                    {field.type === \"multiSelect\" && (\n                      <FastField\n                        name={field.name}\n                        onChange={(_: React.FormEvent<HTMLInputElement>, item: any): void => {\n                          const fieldProps = (values as { [key: string]: any })[field.name];\n                          if (item.selected) {\n                            setFieldValue(field.name, [...fieldProps, item.key]);\n                          } else {\n                            const currIndex = fieldProps.indexOf(item.key);\n                            setFieldValue(field.name, [\n                              ...fieldProps.slice(0, currIndex),\n                              ...fieldProps.slice(currIndex + 1),\n                            ]);\n                          }\n                        }}\n                        options={field.options}\n                        placeholder={field.placeholder}\n                        component={FormikMultiDropdown}\n                        key={field.name}\n                        disabled={!canEditUser}\n                      />\n                    )}\n                    {field.type === \"select\" && (\n                      <FastField\n                        name={field.name}\n                        onChange={(_: React.FormEvent<HTMLInputElement>, value: any): void => {\n                          setFieldValue(field.name, value.key);\n                        }}\n                        options={field.options}\n                        component={FormikDropdown}\n                        key={field.name}\n                        disabled={!canEditUser}\n                      />\n                    )}\n                    {field.type === \"country\" && (\n                      <FastField\n                        name={field.name}\n                        onChange={(_: React.FormEvent<HTMLInputElement>, item: any): void => {\n                          setFieldValue(\"primaryPhoneCountryOrRegionId\", item.id);\n                          setFieldValue(field.name, item.key);\n                          setFieldValue(\"primaryPhoneCountryOrRegionTapiCode\", item.tapi);\n                        }}\n                        placeholder={field.placeholder}\n                        options={countryRegionPhoneOptionList}\n                        component={FormikDropdown}\n                        disabled={!canEditUser}\n                      />\n                    )}\n                    {field.type === \"shippingcountry\" && (\n                      <Field\n                        name={field.name}\n                        onChange={(_: React.FormEvent<HTMLInputElement>, item: any): void => {\n                          setFieldValue(\"shippingPhoneCountryOrRegionId\", item.id);\n                          setFieldValue(field.name, item.key);\n                          setFieldValue(\"shippingPhoneCountryOrRegionTapiCode\", item.tapi);\n                        }}\n                        placeholder={field.placeholder}\n                        options={countryRegionPhoneOptionList}\n                        component={FormikDropdown}\n                        disabled={!!values.shippingSameAsAddress || !canEditUser}\n                      />\n                    )}\n                    {field.type === \"countryRegion\" && (\n                      <FastField\n                        name={field.name}\n                        onChange={(_: React.FormEvent<HTMLInputElement>, item: any): void => {\n                          props.values.addressStateOrProvince = \"\";\n                          setFieldValue(field.name, item.key);\n                          dispatch(getStateProvince(item.key));\n                        }}\n                        placeholder={field.placeholder}\n                        options={countryRegionOptionList}\n                        component={FormikDropdown}\n                        disabled={!canEditUser}\n                      />\n                    )}\n                    {field.type === \"shippingCountryRegion\" && (\n                      <Field\n                        name={field.name}\n                        onChange={(_, item: any): void => {\n                          props.values.shippingStateOrProvince = \"\";\n                          setFieldValue(field.name, item.key);\n                          dispatch(getStateProvinceShipping(item.key));\n                        }}\n                        placeholder={field.placeholder}\n                        options={countryRegionOptionList}\n                        component={FormikDropdown}\n                        disabled={!!values.shippingSameAsAddress || !canEditUser}\n                      />\n                    )}\n                    {field.type === \"stateProvince\" && (\n                      <Field\n                        name={field.name}\n                        onChange={(_: React.FormEvent<HTMLInputElement>, item: any): void => {\n                          setFieldValue(field.name, item.key);\n                        }}\n                        placeholder={field.placeholder}\n                        options={stateProvinceOptionList}\n                        component={FormikDropdown}\n                        disabled={!canEditUser}\n                      />\n                    )}\n                    {field.type === \"shippingStateProvince\" && (\n                      <Field\n                        name={field.name}\n                        onChange={(_: React.FormEvent<HTMLInputElement>, item: any): void => {\n                          setFieldValue(field.name, item.key);\n                        }}\n                        placeholder={field.placeholder}\n                        options={stateProvinceShippingOptionList}\n                        component={FormikDropdown}\n                        disabled={!!values.shippingSameAsAddress || !canEditUser}\n                      />\n                    )}\n                    {![\n                      \"date\",\n                      \"multiSelect\",\n                      \"select\",\n                      \"country\",\n                      \"shippingcountry\",\n                      \"countryRegion\",\n                      \"stateProvince\",\n                      \"shippingCountryRegion\",\n                      \"shippingStateProvince\",\n                      \"headline\",\n                      \"biography\",\n                    ].includes(field.type || \"\") && (\n                      <div>\n                        <Field\n                          type=\"text\"\n                          name={field.name}\n                          onChange={handleChange}\n                          onBlur={handleBlur}\n                          disabled={\n                            (field.disabled ? field.disabled : false) ||\n                            (section.title == \"Shipping Address\" &&\n                              !!values.shippingSameAsAddress) ||\n                            !canEditUser\n                          }\n                          key={field.name}\n                        />\n                        <FormikErrorMessage name={field.name} key={`${field.name}-error`} />\n                      </div>\n                    )}\n                    {[\"headline\"].includes(field.type || \"\") && (\n                      <div>\n                        <Field\n                          as=\"textarea\"\n                          rows={4}\n                          name={field.name}\n                          onChange={handleChange}\n                          onBlur={handleBlur}\n                          key={field.name}\n                          disabled={!canEditUser}\n                        />\n                        <FormikErrorMessage name={field.name} key={`${field.name}-error`} />\n                      </div>\n                    )}\n                    {[\"biography\"].includes(field.type || \"\") && (\n                      <div>\n                        <Field\n                          as=\"textarea\"\n                          rows={4}\n                          name={field.name}\n                          onChange={handleChange}\n                          onBlur={handleBlur}\n                          key={field.name}\n                        />\n                        <FormikErrorMessage name={field.name} key={`${field.name}-error`} />\n                      </div>\n                    )}\n                  </FieldBlock>\n                ))}\n              </Stack>\n            </div>\n          ))}\n\n          <div key=\"userProfileSchool\">\n            <Text block styles={formSectionTitleStyles} key=\"userProfileSchool-title\">\n              School/University\n            </Text>\n            {values.userProfileSchool.map((profileSchool: IUserProfileSchool, index: number) => {\n              const userSchool = values.userProfileSchool[index];\n\n              const emptyCountryName = userSchool && userSchool.SchoolCountryRegionName === \"\";\n              const emptyStateName = userSchool && userSchool.schoolStateProvinceName === \"\";\n              const emptyStateList =\n                Array.isArray(stateProvinceSchoolOptionList) &&\n                stateProvinceSchoolOptionList.length < 1;\n              return (\n                <div key={`userProfileSchool-${profileSchool.id}`}>\n                  <Text\n                    block\n                    styles={sectionSubtitleStyles}\n                    key={`Profile School ID: ${profileSchool.id}`}\n                  >{`Profile School ID: ${profileSchool.id}`}</Text>\n                  <Stack\n                    key=\"profileSchool\"\n                    horizontal\n                    wrap\n                    tokens={horizontalFormFieldsStackTokens}\n                  >\n                    <FieldBlock key=\"userProfileSchool-schoolCountryRegionName\">\n                      <Label>Country or Region</Label>\n                      <FastField\n                        type=\"text\"\n                        name={`userProfileSchool[${index}].schoolCountryRegionName`}\n                        onChange={(_: React.FormEvent<HTMLInputElement>, value: any): void => {\n                          dispatch(getStateProvinceSchool(value.key));\n                          dispatch(getSchoolData(value.key));\n\n                          setFieldValue(\n                            `userProfileSchool[${index}].schoolCountryRegionName`,\n                            value.key\n                          );\n\n                          /**\n                           * TODO: BUG: Need to trigger the SchoolPicker to rerender here so that it can pick up that\n                           * there is not a selected school and clear out the currently selected school.\n                           */\n                          setFieldValue(`userProfileSchool[${index}].schoolStateProvinceName`, \"\");\n                          setFieldValue(`userProfileSchool[${index}].schoolName`, \"\");\n                        }}\n                        options={countryRegionOptionList}\n                        placeholder=\"select school country or region\"\n                        component={FormikDropdown}\n                        disabled={!canEditUser}\n                      />\n                      {props.errors[`userProfileSchool[${index}].schoolCountryRegionName`] && (\n                        <FormikErrorMessage\n                          name={`userProfileSchool[${index}].schoolCountryRegionName`}\n                        />\n                      )}\n                    </FieldBlock>\n                    <FieldBlock key=\"userProfileSchool-schoolStateProvinceName\">\n                      <Label>State or Province</Label>\n                      <Field\n                        type=\"text\"\n                        name={`userProfileSchool[${index}].schoolStateProvinceName`}\n                        onChange={(_: React.FormEvent<HTMLInputElement>, value: any): void => {\n                          setFieldValue(\n                            `userProfileSchool[${index}].schoolStateProvinceName`,\n                            value.key\n                          );\n                        }}\n                        placeholder=\"select state of province\"\n                        options={stateProvinceSchoolOptionList}\n                        component={FormikDropdown}\n                        disabled={!canEditUser}\n                      />\n                    </FieldBlock>\n                    <FieldBlock key=\"userProfileSchool-schoolName\">\n                      <Label>School name</Label>\n                      <Field\n                        disabled={\n                          emptyCountryName || (emptyStateName && !emptyStateList) || !canEditUser\n                        }\n                        name={`userProfileSchool[${index}].schoolName`}\n                        removeButtonAriaLabel=\"Remove\"\n                        pickerSuggestionsProps={{\n                          suggestionHeaderText: \"Suggested Schools\",\n                          noResultFoundText: \"No Schools Found\",\n                        }}\n                        itemLimit={1}\n                        resolveDelay={500}\n                        itemProps={{\n                          onKeyPress: (e): void => {\n                            e.preventIcon();\n                          },\n                        }}\n                        component={FormikPicker}\n                        allowTypedInputItemResult={true}\n                        suggestedItems={schoolOptionList}\n                        placeholder=\"Select Academic Institution\"\n                        onChange={(items?: ITag[] | undefined): void => {\n                          const fieldName = `userProfileSchool[${index}].schoolName`;\n                          if (!items || items.length === 0) {\n                            setFieldValue(fieldName, \"\");\n                            return;\n                          }\n\n                          setFieldValue(fieldName, items[`${index}`].name);\n                        }}\n                        stackWidth=\"auto\"\n                        selectedItems={\n                          values.userProfileSchool[index]?.schoolName === null ||\n                          values.userProfileSchool[index]?.schoolName === \"\"\n                            ? null\n                            : values.userProfileSchool.map((x) => {\n                                return {\n                                  name: x.schoolName,\n                                };\n                              })\n                        }\n                      />\n                      {props.errors[`userProfileSchool[${index}].schoolName`] && (\n                        <FormikErrorMessage name={`userProfileSchool[${index}].schoolName`} />\n                      )}\n                    </FieldBlock>\n                    <FieldBlock key=\"userProfileSchool-schoolDegreeProgramName\">\n                      <Label>Degree program</Label>\n                      <Field\n                        name={`userProfileSchool[${index}].schoolDegreeProgramName`}\n                        onChange={(_: React.FormEvent<HTMLInputElement>, value: any): void => {\n                          setFieldValue(\n                            `userProfileSchool[${index}].schoolDegreeProgramName`,\n                            value.key\n                          );\n                        }}\n                        options={schoolDegreePrograms}\n                        component={FormikDropdown}\n                        disabled={!canEditUser}\n                      />\n                    </FieldBlock>\n                    <FieldBlock key=\"userProfileSchool-schoolDegreeLevelName\">\n                      <Label>Degree level name</Label>\n                      <FastField\n                        name={`userProfileSchool[${index}].schoolDegreeLevelName`}\n                        onChange={(_: React.FormEvent<HTMLInputElement>, value: any): void => {\n                          setFieldValue(\n                            `userProfileSchool[${index}].schoolDegreeLevelName`,\n                            value.key\n                          );\n                        }}\n                        placeholder=\"Select degree level\"\n                        options={schoolDegreeLevels}\n                        component={FormikDropdown}\n                        disabled={!canEditUser}\n                      />\n                    </FieldBlock>\n                    <FieldBlock key=\"userProfileSchool-expectedGraduationDate\">\n                      <Label>Expected graduation date</Label>\n                      <FastField\n                        name={`userProfileSchool[${index}].expectedGraduationDate`}\n                        onSelectDate={(date: Date): void => {\n                          setFieldValue(`userProfileSchool[${index}].expectedGraduationDate`, date);\n                        }}\n                        endDate={addYears(new Date(Date.now()), 5)}\n                        initialPickerDate={addDays(new Date(Date.now()), MIN_DAYS)}\n                        component={FormikDatePicker}\n                        placeholder=\"Select graduation date\"\n                        styles={datePickerFieldStyles}\n                        disabled={!canEditUser}\n                      />\n                    </FieldBlock>\n                  </Stack>\n                </div>\n              );\n            })}\n          </div>\n\n          <div key=\"userProfileSocialNetwork\">\n            <Text block styles={formSectionTitleStyles} key=\"userProfileSocialNetwork-title\">\n              Social Networks\n            </Text>\n            {values.userProfileSocialNetwork.map(\n              (profileSocialNetwork: IUserProfileSocialNetwork, index: number) => {\n                return (\n                  <div key={`userProfileSocialNetwork-${profileSocialNetwork.id}`}>\n                    <Text\n                      block\n                      styles={sectionSubtitleStyles}\n                      key={`Profile Social Network ID: ${profileSocialNetwork.id}`}\n                    >{`Profile Social Network ID: ${profileSocialNetwork.id}`}</Text>\n                    <IsSocialMediaPrivate>\n                      <IsSocialMediaPrivateRow>\n                        <Label styles={isSocialMediaPrivateLabelStyles}>\n                          Make social network private?\n                        </Label>\n                        <FastField\n                          name={`userProfileSocialNetwork[${index}].isPrivate`}\n                          onChange={(_, checked): void => {\n                            setFieldValue(`userProfileSocialNetwork[${index}].isPrivate`, checked);\n                          }}\n                          component={FormikToggle}\n                          stackWidth={40}\n                          styles={toggleFieldStyles}\n                          disabled={!canEditUser}\n                        />\n                      </IsSocialMediaPrivateRow>\n                    </IsSocialMediaPrivate>\n                    <Stack\n                      key=\"profileSocialNetwork\"\n                      horizontal\n                      wrap\n                      tokens={horizontalFormFieldsStackTokens}\n                    >\n                      <FieldBlock key=\"userProfileSocialNetwork-socialNetworkName\">\n                        <Label>Social Network</Label>\n                        <Field\n                          type=\"text\"\n                          name={`userProfileSocialNetwork[${index}].socialNetworkName`}\n                          onChange={(\n                            _: React.FormEvent<HTMLInputElement>,\n                            value: { key: string; text: string; urlPrefix: string }\n                          ): void => {\n                            setFieldValue(\n                              `userProfileSocialNetwork[${index}].socialNetworkName`,\n                              value.key\n                            );\n                            setFieldValue(\n                              `userProfileSocialNetwork[${index}].socialNetworkUrlPrefix`,\n                              value.urlPrefix || urlPrefix\n                            );\n                          }}\n                          placeholder=\"select social network\"\n                          options={socialNetworkOptionList}\n                          component={FormikDropdown}\n                          disabled={!canEditUser}\n                        />\n                      </FieldBlock>\n                      <FieldBlock key=\"userProfileSocialNetwork-handle\">\n                        <Label>URL</Label>\n                        <Field\n                          component={FormikTextField}\n                          name={`userProfileSocialNetwork[${index}].handle`}\n                          prefix={\n                            values.userProfileSocialNetwork[index].socialNetworkUrlPrefix ||\n                            urlPrefix\n                          }\n                          onChange={(_: React.FormEvent<HTMLInputElement>, value: any): void => {\n                            setFieldValue(`userProfileSocialNetwork[${index}].handle`, value);\n                          }}\n                          disabled={!canEditUser}\n                        />\n                      </FieldBlock>\n                    </Stack>\n                  </div>\n                );\n              }\n            )}\n          </div>\n        </FieldSet>\n      </SidePanel>\n    </form>\n  );\n};\n\nexport default StudentEditProfile;\n","import { IKeyText } from \"../Interfaces/IKeyText\";\n\nexport const languages: IKeyText[] = [\n  { key: \"Afar\", text: \"Afar\" },\n  { key: \"Afrikaans\", text: \"Afrikaans\" },\n  { key: \"Aghem\", text: \"Aghem\" },\n  { key: \"Akan\", text: \"Akan\" },\n  { key: \"Albanian\", text: \"Albanian\" },\n  { key: \"Amharic\", text: \"Amharic\" },\n  { key: \"Arabic\", text: \"Arabic\" },\n  { key: \"Arabic, Egyptian\", text: \"Arabic, Egyptian\" },\n  { key: \"Arabic, Gulf\", text: \"Arabic, Gulf\" },\n  { key: \"Arabic, Levantine\", text: \"Arabic, Levantine\" },\n  { key: \"Armenian\", text: \"Armenian\" },\n  { key: \"Assamese\", text: \"Assamese\" },\n  { key: \"Asturian\", text: \"Asturian\" },\n  { key: \"Asu\", text: \"Asu\" },\n  { key: \"Azerbaijani (Cyrillic)\", text: \"Azerbaijani (Cyrillic)\" },\n  { key: \"Azerbaijani (Latin)\", text: \"Azerbaijani (Latin)\" },\n  { key: \"Bafia\", text: \"Bafia\" },\n  { key: \"Bamanankan (Latin)\", text: \"Bamanankan (Latin)\" },\n  { key: \"Bangla\", text: \"Bangla\" },\n  { key: \"Basaa\", text: \"Basaa\" },\n  { key: \"Bashkir\", text: \"Bashkir\" },\n  { key: \"Basque\", text: \"Basque\" },\n  { key: \"Belarusian\", text: \"Belarusian\" },\n  { key: \"Bemba\", text: \"Bemba\" },\n  { key: \"Bena\", text: \"Bena\" },\n  { key: \"Blin\", text: \"Blin\" },\n  { key: \"Bodo\", text: \"Bodo\" },\n  { key: \"Bosnian (Cyrillic)\", text: \"Bosnian (Cyrillic)\" },\n  { key: \"Bosnian (Latin)\", text: \"Bosnian (Latin)\" },\n  { key: \"Breton\", text: \"Breton\" },\n  { key: \"Bulgarian\", text: \"Bulgarian\" },\n  { key: \"Burmese\", text: \"Burmese\" },\n  { key: \"Cantonese (Traditional)\", text: \"Cantonese (Traditional)\" },\n  { key: \"Catalan\", text: \"Catalan\" },\n  { key: \"Cebuano\", text: \"Cebuano\" },\n  {\n    key: \"Central Atlas Tamazight (Arabic)\",\n    text: \"Central Atlas Tamazight (Arabic)\",\n  },\n  {\n    key: \"Central Atlas Tamazight (Latin)\",\n    text: \"Central Atlas Tamazight (Latin)\",\n  },\n  {\n    key: \"Central Atlas Tamazight (Tifinagh)\",\n    text: \"Central Atlas Tamazight (Tifinagh)\",\n  },\n  { key: \"Central Kurdish\", text: \"Central Kurdish\" },\n  { key: \"Chechen\", text: \"Chechen\" },\n  { key: \"Cherokee (Cherokee)\", text: \"Cherokee (Cherokee)\" },\n  { key: \"Chiga\", text: \"Chiga\" },\n  { key: \"Chinese (Simplified)\", text: \"Chinese (Simplified)\" },\n  { key: \"Chinese (Traditional)\", text: \"Chinese (Traditional)\" },\n  { key: \"Church Slavic\", text: \"Church Slavic\" },\n  { key: \"Colognian\", text: \"Colognian\" },\n  { key: \"Congo Swahili\", text: \"Congo Swahili\" },\n  { key: \"Cornish\", text: \"Cornish\" },\n  { key: \"Corsican\", text: \"Corsican\" },\n  { key: \"Croatian\", text: \"Croatian\" },\n  { key: \"Czech\", text: \"Czech\" },\n  { key: \"Danish\", text: \"Danish\" },\n  { key: \"Dari\", text: \"Dari\" },\n  { key: \"Divehi\", text: \"Divehi\" },\n  { key: \"Dogri\", text: \"Dogri\" },\n  { key: \"Duala\", text: \"Duala\" },\n  { key: \"Dutch\", text: \"Dutch\" },\n  { key: \"Dzongkha\", text: \"Dzongkha\" },\n  { key: \"Edo\", text: \"Edo\" },\n  { key: \"Embu\", text: \"Embu\" },\n  { key: \"English\", text: \"English\" },\n  { key: \"Esperanto\", text: \"Esperanto\" },\n  { key: \"Estonian\", text: \"Estonian\" },\n  { key: \"Ewe\", text: \"Ewe\" },\n  { key: \"Ewondo\", text: \"Ewondo\" },\n  { key: \"Faroese\", text: \"Faroese\" },\n  { key: \"Fijian\", text: \"Fijian\" },\n  { key: \"Filipino\", text: \"Filipino\" },\n  { key: \"Finnish\", text: \"Finnish\" },\n  { key: \"French\", text: \"French\" },\n  { key: \"Friulian\", text: \"Friulian\" },\n  { key: \"Fulah\", text: \"Fulah\" },\n  { key: \"Galician\", text: \"Galician\" },\n  { key: \"Ganda\", text: \"Ganda\" },\n  { key: \"Georgian\", text: \"Georgian\" },\n  { key: \"German\", text: \"German\" },\n  { key: \"Greek\", text: \"Greek\" },\n  { key: \"Greenlandic\", text: \"Greenlandic\" },\n  { key: \"Guarani\", text: \"Guarani\" },\n  { key: \"Gujarati\", text: \"Gujarati\" },\n  { key: \"Gusii\", text: \"Gusii\" },\n  { key: \"Haitian\", text: \"Haitian\" },\n  { key: \"Hausa (Latin)\", text: \"Hausa (Latin)\" },\n  { key: \"Hawaiian\", text: \"Hawaiian\" },\n  { key: \"Hebrew\", text: \"Hebrew\" },\n  { key: \"Hindi\", text: \"Hindi\" },\n  { key: \"Hmong Daw\", text: \"Hmong Daw\" },\n  { key: \"Hungarian\", text: \"Hungarian\" },\n  { key: \"Icelandic\", text: \"Icelandic\" },\n  { key: \"Igbo\", text: \"Igbo\" },\n  { key: \"Inari Sami\", text: \"Inari Sami\" },\n  { key: \"Indonesian\", text: \"Indonesian\" },\n  { key: \"Interlingua\", text: \"Interlingua\" },\n  {\n    key: \"Inuktitut (Canadian Aboriginal Syllabics)\",\n    text: \"Inuktitut (Canadian Aboriginal Syllabics)\",\n  },\n  { key: \"Inuktitut (Latin)\", text: \"Inuktitut (Latin)\" },\n  { key: \"Invariant Language\", text: \"Invariant Language\" },\n  { key: \"Irish\", text: \"Irish\" },\n  { key: \"isiXhosa\", text: \"isiXhosa\" },\n  { key: \"isiZulu\", text: \"isiZulu\" },\n  { key: \"Italian\", text: \"Italian\" },\n  { key: \"Japanese\", text: \"Japanese\" },\n  { key: \"Javanese (Latin)\", text: \"Javanese (Latin)\" },\n  { key: \"Jola-Fonyi\", text: \"Jola-Fonyi\" },\n  { key: \"K’iche’\", text: \"K’iche’\" },\n  { key: \"Kabuverdianu\", text: \"Kabuverdianu\" },\n  { key: \"Kabyle\", text: \"Kabyle\" },\n  { key: \"Kako\", text: \"Kako\" },\n  { key: \"Kalenjin\", text: \"Kalenjin\" },\n  { key: \"Kamba\", text: \"Kamba\" },\n  { key: \"Kannada\", text: \"Kannada\" },\n  { key: \"Kanuri\", text: \"Kanuri\" },\n  { key: \"Kanuri\", text: \"Kanuri\" },\n  { key: \"Kashmiri (Devanagari)\", text: \"Kashmiri (Devanagari)\" },\n  { key: \"Kashmiri (Perso-Arabic)\", text: \"Kashmiri (Perso-Arabic)\" },\n  { key: \"Kazakh\", text: \"Kazakh\" },\n  { key: \"Khmer\", text: \"Khmer\" },\n  { key: \"Kikuyu\", text: \"Kikuyu\" },\n  { key: \"Kinyarwanda\", text: \"Kinyarwanda\" },\n  { key: \"Kiswahili\", text: \"Kiswahili\" },\n  { key: \"Konkani\", text: \"Konkani\" },\n  { key: \"Korean\", text: \"Korean\" },\n  { key: \"Koyra Chiini\", text: \"Koyra Chiini\" },\n  { key: \"Koyraboro Senni\", text: \"Koyraboro Senni\" },\n  { key: \"Kutchi\", text: \"Kutchi\" },\n  { key: \"Kwasio\", text: \"Kwasio\" },\n  { key: \"Kyrgyz\", text: \"Kyrgyz\" },\n  { key: \"Lakota\", text: \"Lakota\" },\n  { key: \"Langi\", text: \"Langi\" },\n  { key: \"Lao\", text: \"Lao\" },\n  { key: \"Latvian\", text: \"Latvian\" },\n  { key: \"Lingala\", text: \"Lingala\" },\n  { key: \"Lithuanian\", text: \"Lithuanian\" },\n  { key: \"Low German\", text: \"Low German\" },\n  { key: \"Lower Sorbian\", text: \"Lower Sorbian\" },\n  { key: \"Luba-Katanga\", text: \"Luba-Katanga\" },\n  { key: \"Lule Sami\", text: \"Lule Sami\" },\n  { key: \"Luo\", text: \"Luo\" },\n  { key: \"Luxembourgish\", text: \"Luxembourgish\" },\n  { key: \"Luyia\", text: \"Luyia\" },\n  { key: \"Macedonian\", text: \"Macedonian\" },\n  { key: \"Machame\", text: \"Machame\" },\n  { key: \"Maithili\", text: \"Maithili\" },\n  { key: \"Makhuwa-Meetto\", text: \"Makhuwa-Meetto\" },\n  { key: \"Makonde\", text: \"Makonde\" },\n  { key: \"Malagasy\", text: \"Malagasy\" },\n  { key: \"Malay (Latin)\", text: \"Malay (Latin)\" },\n  { key: \"Malayalam\", text: \"Malayalam\" },\n  { key: \"Maltese\", text: \"Maltese\" },\n  { key: \"Mandarin Chinese\", text: \"Mandarin Chinese\" },\n  { key: \"Manipuri\", text: \"Manipuri\" },\n  { key: \"Manx\", text: \"Manx\" },\n  { key: \"Maori\", text: \"Maori\" },\n  { key: \"Mapudungun\", text: \"Mapudungun\" },\n  { key: \"Marathi\", text: \"Marathi\" },\n  { key: \"Masai\", text: \"Masai\" },\n  { key: \"Mazanderani\", text: \"Mazanderani\" },\n  { key: \"Meru\", text: \"Meru\" },\n  { key: \"Metaʼ\", text: \"Metaʼ\" },\n  { key: \"Mohawk\", text: \"Mohawk\" },\n  { key: \"Mongolian (Cyrillic)\", text: \"Mongolian (Cyrillic)\" },\n  {\n    key: \"Mongolian (Traditional Mongolian)\",\n    text: \"Mongolian (Traditional Mongolian)\",\n  },\n  { key: \"Montenegrin (Cyrillic)\", text: \"Montenegrin (Cyrillic)\" },\n  { key: \"Montenegrin (Latin)\", text: \"Montenegrin (Latin)\" },\n  { key: \"Morisyen\", text: \"Morisyen\" },\n  { key: \"Mundang\", text: \"Mundang\" },\n  { key: \"N’Ko\", text: \"N’Ko\" },\n  { key: \"Nama\", text: \"Nama\" },\n  { key: \"Nepali\", text: \"Nepali\" },\n  { key: \"Ngiemboon\", text: \"Ngiemboon\" },\n  { key: \"Ngomba\", text: \"Ngomba\" },\n  { key: \"North Ndebele\", text: \"North Ndebele\" },\n  { key: \"Northern Kurdish (Arabic)\", text: \"Northern Kurdish (Arabic)\" },\n  { key: \"Northern Luri\", text: \"Northern Luri\" },\n  { key: \"Northern Sami\", text: \"Northern Sami\" },\n  { key: \"Norwegian BokmÃ¥l\", text: \"Norwegian BokmÃ¥l\" },\n  { key: \"Norwegian Nynorsk\", text: \"Norwegian Nynorsk\" },\n  { key: \"Nuer\", text: \"Nuer\" },\n  { key: \"Nyankole\", text: \"Nyankole\" },\n  { key: \"Occitan\", text: \"Occitan\" },\n  { key: \"Odia\", text: \"Odia\" },\n  { key: \"Oromo\", text: \"Oromo\" },\n  { key: \"Osage (Latin)\", text: \"Osage (Latin)\" },\n  { key: \"Osage (Osage)\", text: \"Osage (Osage)\" },\n  { key: \"Ossetic (Cyrillic)\", text: \"Ossetic (Cyrillic)\" },\n  { key: \"Ossetic (Latin)\", text: \"Ossetic (Latin)\" },\n  { key: \"Papiamento\", text: \"Papiamento\" },\n  { key: \"Pashto\", text: \"Pashto\" },\n  { key: \"Persian\", text: \"Persian\" },\n  { key: \"Polish\", text: \"Polish\" },\n  { key: \"Portuguese\", text: \"Portuguese\" },\n  { key: \"Portuguese (Brazil)\", text: \"Portuguese (Brazil)\" },\n  { key: \"Portuguese (Portugal)\", text: \"Portuguese (Portugal)\" },\n  { key: \"Prussian\", text: \"Prussian\" },\n  { key: \"Pseudo\", text: \"Pseudo\" },\n  { key: \"Punjabi (Arabic)\", text: \"Punjabi (Arabic)\" },\n  { key: \"Punjabi (Gurmukhi)\", text: \"Punjabi (Gurmukhi)\" },\n  { key: \"Quechua\", text: \"Quechua\" },\n  { key: \"Querétaro Otomi\", text: \"Querétaro Otomi\" },\n  { key: \"Romanian\", text: \"Romanian\" },\n  { key: \"Romansh\", text: \"Romansh\" },\n  { key: \"Rombo\", text: \"Rombo\" },\n  { key: \"Rundi\", text: \"Rundi\" },\n  { key: \"Russian\", text: \"Russian\" },\n  { key: \"Rwa\", text: \"Rwa\" },\n  { key: \"Saho\", text: \"Saho\" },\n  { key: \"Sakha\", text: \"Sakha\" },\n  { key: \"Samburu\", text: \"Samburu\" },\n  { key: \"Samoan\", text: \"Samoan\" },\n  { key: \"Sango\", text: \"Sango\" },\n  { key: \"Sangu\", text: \"Sangu\" },\n  { key: \"Sanskrit\", text: \"Sanskrit\" },\n  { key: \"Santali (Devanagari)\", text: \"Santali (Devanagari)\" },\n  { key: \"Scottish Gaelic\", text: \"Scottish Gaelic\" },\n  { key: \"Sena\", text: \"Sena\" },\n  { key: \"Serbian (Cyrillic)\", text: \"Serbian (Cyrillic)\" },\n  { key: \"Serbian (Latin)\", text: \"Serbian (Latin)\" },\n  { key: \"Sesotho\", text: \"Sesotho\" },\n  { key: \"Sesotho sa Leboa\", text: \"Sesotho sa Leboa\" },\n  { key: \"Setswana\", text: \"Setswana\" },\n  { key: \"Shambala\", text: \"Shambala\" },\n  { key: \"Shona\", text: \"Shona\" },\n  { key: \"Sindhi (Arabic)\", text: \"Sindhi (Arabic)\" },\n  { key: \"Sindhi (Devanagari)\", text: \"Sindhi (Devanagari)\" },\n  { key: \"Sinhala\", text: \"Sinhala\" },\n  { key: \"siSwati\", text: \"siSwati\" },\n  { key: \"Skolt Sami\", text: \"Skolt Sami\" },\n  { key: \"Slovak\", text: \"Slovak\" },\n  { key: \"Slovenian\", text: \"Slovenian\" },\n  { key: \"Soga\", text: \"Soga\" },\n  { key: \"Somali (Latin)\", text: \"Somali (Latin)\" },\n  { key: \"South Ndebele\", text: \"South Ndebele\" },\n  { key: \"Southern Sami\", text: \"Southern Sami\" },\n  { key: \"Spanish\", text: \"Spanish\" },\n  {\n    key: \"Standard Moroccan Tamazight (Tifinagh)\",\n    text: \"Standard Moroccan Tamazight (Tifinagh)\",\n  },\n  { key: \"Swedish\", text: \"Swedish\" },\n  { key: \"Swiss German\", text: \"Swiss German\" },\n  { key: \"Syriac\", text: \"Syriac\" },\n  { key: \"Tachelhit (Latin)\", text: \"Tachelhit (Latin)\" },\n  { key: \"Tachelhit (Tifinagh)\", text: \"Tachelhit (Tifinagh)\" },\n  { key: \"Tahitian\", text: \"Tahitian\" },\n  { key: \"Taita\", text: \"Taita\" },\n  { key: \"Tajik (Cyrillic)\", text: \"Tajik (Cyrillic)\" },\n  { key: \"Tamil\", text: \"Tamil\" },\n  { key: \"Tasawaq\", text: \"Tasawaq\" },\n  { key: \"Tatar (Cyrillic)\", text: \"Tatar (Cyrillic)\" },\n  { key: \"Telugu\", text: \"Telugu\" },\n  { key: \"Teso\", text: \"Teso\" },\n  { key: \"Thai\", text: \"Thai\" },\n  { key: \"Tibetan\", text: \"Tibetan\" },\n  { key: \"Tigre\", text: \"Tigre\" },\n  { key: \"Tigrinya\", text: \"Tigrinya\" },\n  { key: \"Tongan\", text: \"Tongan\" },\n  { key: \"Turkish\", text: \"Turkish\" },\n  { key: \"Turkmen (Latin)\", text: \"Turkmen (Latin)\" },\n  { key: \"Ukrainian\", text: \"Ukrainian\" },\n  { key: \"Upper Sorbian\", text: \"Upper Sorbian\" },\n  { key: \"Urdu\", text: \"Urdu\" },\n  { key: \"Uyghur (Arabic)\", text: \"Uyghur (Arabic)\" },\n  { key: \"Uzbek (Cyrillic)\", text: \"Uzbek (Cyrillic)\" },\n  { key: \"Uzbek (Latin)\", text: \"Uzbek (Latin)\" },\n  { key: \"Uzbek (Perso-Arabic)\", text: \"Uzbek (Perso-Arabic)\" },\n  { key: \"Vai (Latin)\", text: \"Vai (Latin)\" },\n  { key: \"Vai (Vai)\", text: \"Vai (Vai)\" },\n  { key: \"Valencian\", text: \"Valencian\" },\n  { key: \"Venda\", text: \"Venda\" },\n  { key: \"Vietnamese\", text: \"Vietnamese\" },\n  { key: \"Volapük\", text: \"Volapük\" },\n  { key: \"Vunjo\", text: \"Vunjo\" },\n  { key: \"Walser\", text: \"Walser\" },\n  { key: \"Welsh\", text: \"Welsh\" },\n  { key: \"Western Frisian\", text: \"Western Frisian\" },\n  { key: \"Wolaytta\", text: \"Wolaytta\" },\n  { key: \"Wolof\", text: \"Wolof\" },\n  { key: \"Xitsonga\", text: \"Xitsonga\" },\n  { key: \"Yangben\", text: \"Yangben\" },\n  { key: \"Yi\", text: \"Yi\" },\n  { key: \"Yiddish\", text: \"Yiddish\" },\n  { key: \"Yoruba\", text: \"Yoruba\" },\n  { key: \"Yucatec Maya\", text: \"Yucatec Maya\" },\n  { key: \"Zarma\", text: \"Zarma\" },\n];\n\nexport const localeLanguages: IKeyText[] = [\n  { key: \"en-US\", text: \"English\" },\n  { key: \"ko-KR\", text: \"한국어\" },\n  { key: \"ja-JP\", text: \"日本語\" },\n  { key: \"de-DE\", text: \"Deutsch\" },\n  { key: \"ru-RU\", text: \"Русский\" },\n  { key: \"zh-TW\", text: \"中文 (繁體)\" },\n  { key: \"zh-CN\", text: \"中文 (简体)\" },\n  { key: \"pt-BR\", text: \"Português Brasileiro\" },\n  { key: \"es-ES\", text: \"Español\" },\n  { key: \"fr-FR\", text: \"Français\" },\n  { key: \"it-IT\", text: \"Italiano\" },\n];\n","/**\n * Helper to insert elements into array of error object.\n * @param arr\n * @param index\n * @param newItem\n */\nexport const insert = (arr, index, newItem) => {\n  if (arr == null) {\n    arr = [];\n  }\n  arr[index] = newItem;\n  return arr;\n};\n\nconst phones = {\n  \"ar-LB\": /^(\\+?961)?(3|7\\d|81)\\d{6}$/, //Lebanon\n  \"en-PH\": /^(09|\\+639)\\d{9}$/, //Phillipines\n  \"es-BO\": /^(\\+591)?[67]\\d{7}$/, //Bolivia\n  \"es-PE\": /^(\\+?51)?9\\d{8}$/, //Peru\n  \"ka-GE\": /^(\\+?995)?(5\\d|79)\\d{7}$/, //Georgia\n  \"uz-UZ\": /^(\\+?998)?(6[125-79]|7[1-69]|88|9\\d)\\d{7}$/, //Uzbekistan\n};\n\n/**\n * Helper to validate mobile phone which validator.js is not supported now\n * @param str\n */\nexport const isMobilePhone = (str: string) => {\n  for (const key in phones) {\n    if (phones.hasOwnProperty(key)) {\n      const phone = phones[key];\n      if (phone.test(str)) {\n        return true;\n      }\n    }\n  }\n  return false;\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\nimport { ApplicationInsights } from \"@microsoft/applicationinsights-web\";\n\nlet appInsights: ApplicationInsights;\n\n/**\n * Create the App Insights Telemetry Service\n * @return {{appInsights: Object, initialize: Function}} - Object\n */\nconst createTelemetryService = (): { appInsights: ApplicationInsights; initialize: Function } => {\n  /**\n   * Initialize the Application Insights class\n   * @param {string} instrumentationKey - Application Insights Instrumentation Key\n   * @return {void}\n   */\n  const initialize = (instrumentationKey: string): void => {\n    if (!instrumentationKey) {\n      throw new Error(\"Instrumentation key not provided for app insights\");\n    }\n\n    appInsights = new ApplicationInsights({\n      config: {\n        instrumentationKey: instrumentationKey,\n        disableFetchTracking: false,\n        extensions: [],\n        extensionConfig: {},\n        enableCorsCorrelation: true, // for correlating with backend\n        enableAutoRouteTracking: true,\n      },\n    });\n\n    appInsights.loadAppInsights();\n    appInsights.trackPageView();\n  };\n\n  return { appInsights, initialize };\n};\n\nexport const ai = createTelemetryService();\nexport const getAppInsights = (): ApplicationInsights => appInsights;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport validator from \"validator\";\nimport * as yup from \"yup\";\n\nimport { SeverityLevel } from \"@microsoft/applicationinsights-web\";\n\nimport * as validatorHelper from \"../../Utility/ValidateHelper\";\n\nimport { STATE_COUNTRIES, VALIDATE_COUNTRY_NAMES } from \"../../Constants/ProfileConstants\";\nimport {\n  ADDRESS_ENGLISH_REG_EX,\n  EMAIL_NOT_ALLOWED,\n  INPUT_REQUIRED,\n  INVALID,\n  INVALID_ADDRESS_ENGLISH_CHARS,\n  INVALID_EMAIL_REG_EX,\n  INVALID_PHONE_NUMBER,\n  SELECTION_REQUIRED,\n  TOO_LONG,\n} from \"../../Constants/ValidationMessages\";\nimport { getAppInsights } from \"../../Services/TelemetryService\";\n\nconst StudentProfileValidationSchema = yup.object({\n  titleName: yup.string().required(SELECTION_REQUIRED),\n  firstName: yup.string().trim().required(INPUT_REQUIRED),\n  lastName: yup.string().trim().required(INPUT_REQUIRED),\n  genderName: yup.string().trim().required(SELECTION_REQUIRED),\n  dateOfBirth: yup.date().required(SELECTION_REQUIRED),\n  address1: yup\n    .string()\n    .max(35, TOO_LONG)\n    .trim()\n    .required(INPUT_REQUIRED)\n    .matches(ADDRESS_ENGLISH_REG_EX, INVALID_ADDRESS_ENGLISH_CHARS),\n  address2: yup.string().max(35, TOO_LONG).trim().matches(ADDRESS_ENGLISH_REG_EX, {\n    message: INVALID_ADDRESS_ENGLISH_CHARS,\n    excludeEmptyString: true,\n  }),\n  addressCity: yup\n    .string()\n    .max(35, TOO_LONG)\n    .trim()\n    .required(INPUT_REQUIRED)\n    .matches(ADDRESS_ENGLISH_REG_EX, INVALID_ADDRESS_ENGLISH_CHARS),\n  addressCountryOrRegionName: yup.string().trim().required(SELECTION_REQUIRED),\n  addressStateOrProvince: yup\n    .string()\n    .trim()\n    .when(\"addressCountryOrRegionName\", (val) => {\n      return STATE_COUNTRIES.indexOf(val) !== -1\n        ? yup.string().required(SELECTION_REQUIRED)\n        : yup.string().nullable();\n    }),\n  addressPostCode: yup.string().max(10, TOO_LONG).trim().required(INPUT_REQUIRED),\n\n  shippingAddress1: yup.string().when(\"shippingSameAsAddress\", {\n    is: false,\n    then: yup\n      .string()\n      .max(35, TOO_LONG)\n      .trim()\n      .required(INPUT_REQUIRED)\n      .matches(ADDRESS_ENGLISH_REG_EX, INVALID_ADDRESS_ENGLISH_CHARS),\n    otherwise: yup\n      .string()\n      .max(35, TOO_LONG)\n      .trim()\n      .matches(ADDRESS_ENGLISH_REG_EX, INVALID_ADDRESS_ENGLISH_CHARS),\n  }),\n  shippingAddress2: yup.string().when(\"shippingSameAsAddress\", {\n    is: false,\n    then: yup.string().max(35, TOO_LONG).trim().ensure().matches(ADDRESS_ENGLISH_REG_EX, {\n      message: INVALID_ADDRESS_ENGLISH_CHARS,\n      excludeEmptyString: true,\n    }),\n    otherwise: yup.string().max(35, TOO_LONG).trim().ensure().matches(ADDRESS_ENGLISH_REG_EX, {\n      message: INVALID_ADDRESS_ENGLISH_CHARS,\n      excludeEmptyString: true,\n    }),\n  }),\n  shippingCity: yup.string().when(\"shippingSameAsAddress\", {\n    is: false,\n    then: yup\n      .string()\n      .max(35, TOO_LONG)\n      .trim()\n      .required(INPUT_REQUIRED)\n      .matches(ADDRESS_ENGLISH_REG_EX, INVALID_ADDRESS_ENGLISH_CHARS),\n    otherwise: yup\n      .string()\n      .max(35, TOO_LONG)\n      .trim()\n      .matches(ADDRESS_ENGLISH_REG_EX, INVALID_ADDRESS_ENGLISH_CHARS),\n  }),\n  shippingStateOrProvince: yup\n    .string()\n    .trim()\n    .when(\"shippingCountryOrRegionName\", (val) => {\n      return STATE_COUNTRIES.indexOf(val) !== -1\n        ? yup.string().required(SELECTION_REQUIRED)\n        : yup.string().nullable();\n    }),\n  shippingCountryOrRegionName: yup.string().when(\"shippingSameAsAddress\", {\n    is: false,\n    then: yup.string().required(SELECTION_REQUIRED),\n  }),\n  shippingPostCode: yup.string().when(\"shippingSameAsAddress\", {\n    is: false,\n    then: yup.string().max(10, TOO_LONG).trim().required(INPUT_REQUIRED),\n    otherwise: yup.string().max(10, TOO_LONG).trim(),\n  }),\n\n  primaryEmail: yup.string().email(INVALID).trim().required(INPUT_REQUIRED),\n  secondaryEmail: yup\n    .string()\n    .email(INVALID)\n    .trim()\n    .matches(INVALID_EMAIL_REG_EX, EMAIL_NOT_ALLOWED),\n  primaryPhoneCountryOrRegionTapiCode: yup.string(),\n  primaryPhone: yup\n    .string()\n    .nullable()\n    .test(\"primaryPhoneNumberValidation\", INVALID_PHONE_NUMBER, function (value) {\n      const { path, parent, createError } = this;\n      const tapiCode = parent.primaryPhoneCountryOrRegionTapiCode || \"\";\n      const countryName = parent.primaryPhoneCountryOrRegionName || \"\";\n      const phoneNumber = value || \"\";\n\n      if (phoneNumber.length < 1) {\n        return true;\n      }\n\n      const fullNumber = `+${tapiCode}${phoneNumber}`;\n\n      // /^\\d+$/ validate the phone number  of the \"missing\" countries.\n      if (VALIDATE_COUNTRY_NAMES.indexOf(countryName) !== -1) {\n        return validator.isMobilePhone(fullNumber) || validatorHelper.isMobilePhone(fullNumber);\n      } else {\n        if (/^\\d+$/.test(fullNumber.substring(1))) {\n          getAppInsights()?.trackTrace({\n            message:\n              \"[MSALLogging]: 'missing' country \" + `${countryName}+${tapiCode}+${phoneNumber}`,\n            severityLevel: SeverityLevel.Information,\n            properties: {},\n          });\n          return true;\n        } else {\n          return createError({\n            path,\n            message: `${INVALID_PHONE_NUMBER}${fullNumber}`,\n          });\n        }\n      }\n    })\n    .required(INPUT_REQUIRED),\n  shippingPhoneCountryOrRegionTapiCode: yup.string(),\n  shippingPhoneNumber: yup\n    .string()\n    .nullable()\n    // TODO: figure out how to implement yup.addMethod and still get access to the this context, to remove duplication.\n    .when(\"shippingSameAsAddress\", {\n      is: false,\n      then: yup\n        .string()\n        .nullable()\n        .test(\"shippingPhoneNumberValidation\", INVALID_PHONE_NUMBER, function (value) {\n          const { path, parent, createError } = this;\n          const tapiCode = parent.shippingPhoneCountryOrRegionTapiCode || \"\";\n          const countryName = parent.shippingPhoneCountryOrRegionName || \"\";\n          const phoneNumber = value || \"\";\n\n          if (phoneNumber.length < 1) {\n            return true;\n          }\n\n          const fullNumber = `+${tapiCode}${phoneNumber}`;\n\n          // /^\\d+$/ validate the phone number  of the \"missing\" countries.\n          if (VALIDATE_COUNTRY_NAMES.indexOf(countryName) !== -1) {\n            return validator.isMobilePhone(fullNumber) || validatorHelper.isMobilePhone(fullNumber);\n          } else {\n            if (/^\\d+$/.test(fullNumber.substring(1))) {\n              getAppInsights()?.trackTrace({\n                message:\n                  \"[MSALLogging]: 'missing' country \" + `${countryName}+${tapiCode}+${phoneNumber}`,\n                severityLevel: SeverityLevel.Information,\n                properties: {},\n              });\n              return true;\n            } else {\n              return createError({\n                path,\n                message: `${INVALID_PHONE_NUMBER}${fullNumber}`,\n              });\n            }\n          }\n        })\n        .required(INPUT_REQUIRED),\n    }),\n  userProfileSchool: yup.array().of(\n    yup.object().shape({\n      schoolName: yup.string().ensure().trim().required(INPUT_REQUIRED),\n      schoolDegreeLevelName: yup.string().trim().required(SELECTION_REQUIRED),\n      schoolDegreeProgramName: yup.string().trim().required(SELECTION_REQUIRED),\n      schoolCountryRegionName: yup.string().trim().required(SELECTION_REQUIRED),\n      expectedGraduationDate: yup.date().required(SELECTION_REQUIRED),\n      schoolStateProvinceName: yup\n        .string()\n        .trim()\n        .when(\"schoolCountryRegionName\", (val) => {\n          return STATE_COUNTRIES.indexOf(val) !== -1\n            ? yup.string().required(SELECTION_REQUIRED)\n            : yup.string().nullable();\n        }),\n    })\n  ),\n\n  companyName: yup.string().trim().ensure().trim(),\n  companyRole: yup.string().ensure().trim(),\n});\n\nexport default StudentProfileValidationSchema;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\nimport { withFormik, FormikBag } from \"formik\";\n\nimport { IUserProfile } from \"../../Interfaces/UserProfile/IUserProfile\";\nimport { convertFromDateTimeToDate } from \"../../Utility/FormatHelper\";\nimport { IStudentEditProfileFormValues } from \"./Interfaces/IStudentEditProfileFormValues\";\nimport { IStudentEditProfileProps } from \"./Interfaces/IStudentEditProfileProps\";\nimport StudentEditProfileForm from \"./StudentEditProfileForm\";\nimport StudentProfileValidationSchema from \"./StudentProfileValidationSchema\";\n\nexport const StudentEditProfileEnhancedForm = withFormik<\n  IStudentEditProfileProps,\n  IStudentEditProfileFormValues\n>({\n  // TODO: enable validation\n  validationSchema: StudentProfileValidationSchema,\n  validateOnMount: true,\n  // Set these fields to touched state on initial load to get the validate results\n  mapPropsToTouched: (props) => {\n    const shouldValidate = props.canEditUser;\n    return {\n      titleName: shouldValidate,\n      firstName: shouldValidate,\n      lastName: shouldValidate,\n      localizedFirstName: shouldValidate,\n      localizedLastName: shouldValidate,\n      genderName: shouldValidate,\n      genderPronounPreferenceName: shouldValidate,\n      shirtFitType: shouldValidate,\n      shirtSize: shouldValidate,\n      languages: shouldValidate,\n      dateOfBirth: shouldValidate,\n      biography: shouldValidate,\n      headline: shouldValidate,\n      address1: shouldValidate,\n      address2: shouldValidate,\n      addressCity: shouldValidate,\n      addressPostCode: shouldValidate,\n      addressCountryOrRegionName: shouldValidate,\n      primaryPhoneCountryOrRegionTapiCode: shouldValidate,\n      primaryPhone: shouldValidate,\n      shippingAddress1: shouldValidate,\n      shippingAddress2: shouldValidate,\n      shippingCity: shouldValidate,\n      shippingPostCode: shouldValidate,\n      shippingCountryOrRegionName: shouldValidate,\n      shippingPhoneCountryOrRegionName: shouldValidate,\n      shippingPhoneNumber: shouldValidate,\n      userProfileSchool: [\n        {\n          schoolCountryRegionName: shouldValidate,\n          schoolName: shouldValidate,\n          schoolDegreeLevelName: shouldValidate,\n          schoolDegreeProgramName: shouldValidate,\n          expectedGraduationDate: shouldValidate,\n        },\n      ],\n      userProfileSocialNetwork: [\n        {\n          socialNetworkName: shouldValidate,\n          handle: shouldValidate,\n        },\n      ],\n    };\n  },\n  mapPropsToValues: (props) => ({\n    address1: props.selectedUserProfile.address1 || \"\",\n    address2: props.selectedUserProfile.address2 || \"\",\n    addressCity: props.selectedUserProfile.addressCity || \"\",\n    addressCountryOrRegionName: props.selectedUserProfile.addressCountryOrRegionName || \"\",\n    addresses: props.selectedUserProfile.addresses,\n    addressPostCode: props.selectedUserProfile.addressPostCode || \"\",\n    addressStateOrProvince: props.selectedUserProfile.addressStateOrProvince,\n    awardNameLocalized: props.selectedUserProfile.awardNameLocalized,\n    biography: props.selectedUserProfile.biography,\n    companyName: props.selectedUserProfile.companyName || \"\",\n    companySize: props.selectedUserProfile.companySize || \"\",\n    companyUrl: props.selectedUserProfile.companyUrl || \"\",\n    microsoftReferralId: props.selectedUserProfile.microsoftReferralId || \"\",\n    dateOfBirth:\n      props.selectedUserProfile.dateOfBirth != undefined\n        ? convertFromDateTimeToDate(props.selectedUserProfile.dateOfBirth)\n        : undefined,\n    firstName: props.selectedUserProfile.firstName,\n    genderName: props.selectedUserProfile.genderName || \"\",\n    genderPronounPreferenceName: props.selectedUserProfile.genderPronounPreferenceName,\n    headline: props.selectedUserProfile.headline,\n    id: props.selectedUserProfile.id,\n    isPrivacyAgreed: props.selectedUserProfile.isPrivacyAgreed,\n    isShippingBlocked: props.selectedUserProfile.isShippingBlocked,\n    isTextOptIn: props.selectedUserProfile.isTextOptIn,\n    languages: props.selectedUserProfile.languages,\n    lastName: props.selectedUserProfile.lastName,\n    localizedFirstName: props.selectedUserProfile.localizedFirstName,\n    localizedLastName: props.selectedUserProfile.localizedLastName,\n    onboardingWizardStep: props.selectedUserProfile.onboardingWizardStep,\n    phoneContacts: props.selectedUserProfile.phoneContacts,\n    primaryAddressId: props.selectedUserProfile.primaryAddressId,\n    primaryEmail: props.selectedUserProfile.primaryEmail,\n    primaryPhoneCountryOrRegionTapiCode: props.countryRegionPhoneOptionList.find(\n      (x) => x.id === props.selectedUserProfile.primaryPhoneCountryOrRegionId\n    )?.tapi,\n    primaryPhoneCountryOrRegionName: props.countryRegionPhoneOptionList.find(\n      (x) => x.id === props.selectedUserProfile.primaryPhoneCountryOrRegionId\n    )?.key,\n    primaryPhone: props.selectedUserProfile.primaryPhone,\n    primaryPhoneCountryOrRegionId: props.selectedUserProfile.primaryPhoneCountryOrRegionId,\n    primaryPhoneId: props.selectedUserProfile.primaryPhoneId,\n    profileImageUrl: props.selectedUserProfile.profilePictureUrl,\n    profilePictureBase64: props.selectedUserProfile.profilePictureBase64,\n    programProfileBenefit: props.selectedUserProfile.programProfileBenefit,\n    programProfileStatusId: props.selectedUserProfile.programProfileStatusId,\n    programProfileStatusName: props.selectedUserProfile.programProfileStatusName,\n    screenNameLocalized: props.selectedUserProfile.screenNameLocalized,\n    secondaryEmail: props.selectedUserProfile.secondaryEmail || \"\",\n    shippingAddress1: props.selectedUserProfile.shippingAddress1 || \"\",\n    shippingAddress2: props.selectedUserProfile.shippingAddress2 || \"\",\n    shippingAddressId: props.selectedUserProfile.shippingAddressId,\n    shippingCity: props.selectedUserProfile.shippingCity || \"\",\n    shippingCountryOrRegionName: props.selectedUserProfile.shippingCountryOrRegionName || \"\",\n    shippingName: props.selectedUserProfile.shippingName || \"\",\n    shippingPhoneCountryOrRegionId: props.selectedUserProfile.shippingPhoneCountryOrRegionId,\n    shippingPhoneId: props.selectedUserProfile.shippingPhoneId,\n    shippingPhoneCountryOrRegionTapiCode: props.countryRegionPhoneOptionList.find(\n      (x) => x.id === props.selectedUserProfile.shippingPhoneCountryOrRegionId\n    )?.tapi,\n    shippingPhoneCountryOrRegionName: props.countryRegionPhoneOptionList.find(\n      (x) => x.id === props.selectedUserProfile.shippingPhoneCountryOrRegionId\n    )?.key,\n    shippingPhoneNumber: props.selectedUserProfile.shippingPhoneNumber || \"\",\n    shippingPostCode: props.selectedUserProfile.shippingPostCode || \"\",\n    shippingSameAsAddress: props.selectedUserProfile.shippingSameAsAddress,\n    shippingStateOrProvince: props.selectedUserProfile.shippingStateOrProvince || \"\",\n    shirtFitType: props.selectedUserProfile.shirtFitType || \"\",\n    shirtSize: props.selectedUserProfile.shirtSize || \"\",\n    studentPartnerEmail: props.selectedUserProfile.studentPartnerEmail || \"\",\n    tenants: props.selectedUserProfile.tenants,\n    titleName: props.selectedUserProfile.titleName || \"Choose not to answer\",\n    userProfileSchool: props.selectedUserProfile.userProfileSchool.map((school) => {\n      return {\n        ...school,\n        schoolCountryRegionName: school.schoolCountryRegionName || \"\",\n        schoolDegreeProgramName: school.schoolDegreeProgramName || \"\",\n        schoolDegreeLevelName: school.schoolDegreeLevelName || \"\",\n        expectedGraduationDate:\n          school.expectedGraduationDate != undefined\n            ? convertFromDateTimeToDate(school.expectedGraduationDate)\n            : undefined,\n      };\n    }),\n    userProfileSocialNetwork: props.selectedUserProfile.userProfileSocialNetwork,\n    userProfileProgramLanguage: props.selectedUserProfile.userProfileProgramLanguage,\n    countryRegionOptionList: props.countryRegionOptionList,\n    countryRegionPhoneOptionList: props.countryRegionPhoneOptionList,\n    stateProvinceOptionList: props.stateProvinceOptionList,\n    stateProvinceShippingOptionList: props.stateProvinceShippingOptionList,\n    stateProvinceSchoolOptionList: props.stateProvinceSchoolOptionList,\n    schoolOptionList: props.schoolOptionList,\n    schoolOptionsSelected: props.schoolOptionsSelected,\n    socialNetworkOptionList: props.socialNetworkOptionList,\n    programLanguageOptionList: props.programLanguageOptionList,\n  }),\n  handleSubmit: (\n    values: IStudentEditProfileFormValues,\n    { props, setSubmitting }: FormikBag<IStudentEditProfileProps, IStudentEditProfileFormValues>\n  ) => {\n    setSubmitting(false);\n\n    const userProfile: IUserProfile = {\n      address1: values.address1,\n      address2: values.address2,\n      addressCity: values.addressCity,\n      addressCountryOrRegionName: values.addressCountryOrRegionName,\n      addresses: values.addresses,\n      addressPostCode: values.addressPostCode,\n      addressStateOrProvince: values.addressStateOrProvince,\n      application: props.selectedUserProfile.application,\n      awardNameLocalized: values.awardNameLocalized,\n      biography: values.biography,\n      companyName: values.companyName,\n      companyRole: props.selectedUserProfile.companyRole,\n      companySize: values.companySize,\n      companyUrl: values.companyUrl,\n      microsoftReferralId: values.microsoftReferralId,\n      createdBy: props.selectedUserProfile.createdBy,\n      dateCreated: props.selectedUserProfile.dateCreated,\n      dateDeleted: props.selectedUserProfile.dateDeleted,\n      dateModified: new Date(),\n      dateOfBirth: values.dateOfBirth,\n      deleted: props.selectedUserProfile.deleted,\n      deletedBy: props.selectedUserProfile.deletedBy,\n      firstName: values.firstName,\n      fullPhoneNumber: props.selectedUserProfile.fullPhoneNumber,\n      genderName: values.genderName,\n      genderPronounPreferenceName: values.genderPronounPreferenceName,\n      headline: values.headline,\n      id: props.selectedUserProfile.id,\n      isOnboardingWizardComplete: props.selectedUserProfile.isOnboardingWizardComplete,\n      isPrivacyAgreed: values.isPrivacyAgreed,\n      isShippingBlocked: values.isShippingBlocked,\n      isTextOptIn: values.isTextOptIn,\n      languages: values.languages,\n      lastName: values.lastName,\n      levelStatus: props.selectedUserProfile.levelStatus,\n      localizedFirstName: values.localizedFirstName,\n      localizedLastName: values.localizedLastName,\n      modifiedBy: props.selectedUserProfile.modifiedBy,\n      newSchoolAdded: props.selectedUserProfile.newSchoolAdded,\n      onboardingWizardStep: values.onboardingWizardStep,\n      onboardingWizardStepId: props.selectedUserProfile.onboardingWizardStepId,\n      phoneContacts: values.phoneContacts,\n      pictureLink: props.selectedUserProfile.pictureLink,\n      primaryAddressId: props.selectedUserProfile.primaryAddressId,\n      primaryEmail: values.primaryEmail,\n      primaryPhone: values.primaryPhone,\n      primaryPhoneCountryOrRegionId: values.primaryPhoneCountryOrRegionId,\n      primaryPhoneId: props.selectedUserProfile.primaryPhoneId,\n      profilePictureBase64: values.profilePictureBase64,\n      profilePictureUrl: values.profileImageUrl,\n      programProfileBenefit: props.selectedUserProfile.programProfileBenefit,\n      programProfileStatusId: props.selectedUserProfile.programProfileStatusId,\n      programProfileStatusName: props.selectedUserProfile.programProfileStatusName,\n      programProfileStartDate: props.selectedUserProfile.programProfileStartDate,\n      programProfileEndDate: props.selectedUserProfile.programProfileEndDate,\n      puid: props.selectedUserProfile.puid,\n      renewalStatusName: props.selectedUserProfile.renewalStatusName,\n      screenNameLocalized: values.screenNameLocalized,\n      secondaryEmail: values.secondaryEmail,\n      shippingAddress1: values.shippingAddress1,\n      shippingAddress2: values.shippingAddress2,\n      shippingAddressId: props.selectedUserProfile.shippingAddressId,\n      shippingCity: values.shippingCity,\n      shippingCompany: props.selectedUserProfile.shippingCompany,\n      shippingCountryOrRegionId: props.selectedUserProfile.shippingCountryOrRegionId,\n      shippingCountryOrRegionName: values.shippingCountryOrRegionName,\n      shippingName: values.shippingName,\n      shippingPhoneCountryOrRegionId: values.shippingPhoneCountryOrRegionId,\n      shippingPhoneId: props.selectedUserProfile.shippingPhoneId,\n      shippingPhoneNumber: values.shippingPhoneNumber,\n      shippingPostCode: values.shippingPostCode,\n      shippingSameAsAddress: values.shippingSameAsAddress,\n      shippingStateOrProvince: values.shippingStateOrProvince,\n      shirtFitType: values.shirtFitType,\n      shirtSize: values.shirtSize,\n      studentPartnerEmail: values.studentPartnerEmail,\n      tenants: values.tenants,\n      titleName: values.titleName,\n      userProfileIdentifier: props.selectedUserProfile.userProfileIdentifier,\n      userProfileSchool: values.userProfileSchool,\n      userProfileSocialNetwork: values.userProfileSocialNetwork,\n      userProfileProgramLanguage: values.userProfileProgramLanguage,\n    };\n\n    props.updateUserProfile(userProfile);\n  },\n  displayName: \"Student Profile Form\",\n})(StudentEditProfileForm);\n\nexport default StudentEditProfileEnhancedForm;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\n/**\n * The form status\n */\nexport const SUBMITTED_STATUS = \"Submitted\";\nexport const SAVED_STATUS = \"Saved\";\nexport const DENIED_STATUS = \"Denied\";\nexport const ACCEPTED_STATUS = \"Accepted\";\nexport const INVITED_STATUS = \"Invited\";\nexport const UNDER_REVIEW_STATUS = \"Under Review\";\nexport const NOMINATION_AUTO_DECLINED_STATUS = \"Nomination Auto Declined\";\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\nimport { AppState } from \"Dataflows/Reducers\";\nimport {\n  ICountryRegionDataState,\n  ICountryRegionData,\n  ICountryRegionOptionList,\n} from \"../../Interfaces/SiteContent\";\n\n/**\n * Country Region data selector.\n */\nexport const getCountryRegions = (state: ICountryRegionDataState): ICountryRegionData[] =>\n  state.countryRegions;\n\n/**\n * Country Region option list data selector.\n */\nexport const getCountryRegionsOptionList = (\n  state: ICountryRegionDataState\n): ICountryRegionOptionList[] => state.countryRegionOptionList;\n\n/**\n * Country Region option list data selector.\n */\nexport const getAppStateCountryRegionsOptionList = (state: AppState): ICountryRegionOptionList[] =>\n  state.countryRegionDataState.countryRegionOptionList;\n\nexport const getCountryRegionPhoneOptionList = (\n  state: ICountryRegionDataState\n): ICountryRegionOptionList[] => state.countryRegionPhoneOptionList;\n\nexport const getAppStateCountryRegionPhoneOptionList = (\n  state: AppState\n): ICountryRegionOptionList[] => state.countryRegionDataState.countryRegionPhoneOptionList;\n\n/**\n * Country Region option list data selector.\n */\nexport const getCountryRegionLoadError = (state: ICountryRegionDataState): string =>\n  state.countryRegionLoadError;\n\nexport const getAppStateCountryRegionLoadError = (state: AppState): string =>\n  state.countryRegionDataState.countryRegionLoadError;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { IProgramLanguageData } from \"Interfaces/SiteContent/IProgramLanguageData\";\n\nimport {\n  PROGRAM_LANGUAGE_LOAD,\n  PROGRAM_LANGUAGE_LOAD_FAILURE,\n  PROGRAM_LANGUAGE_LOAD_SUCCESS,\n} from \"./ProgramLanguageActionTypes\";\n\n/**\n * Action for getting the program language\n */\nexport interface IGetProgramLanguage {\n  type: typeof PROGRAM_LANGUAGE_LOAD;\n}\n\n/**\n * Action getting the program language when successful\n */\nexport interface IGetProgramLanguageSuccess {\n  type: typeof PROGRAM_LANGUAGE_LOAD_SUCCESS;\n  programLanguages: IProgramLanguageData[];\n}\n\n/**\n * Action getting the program language when failure\n */\nexport interface IGetProgramLanguageFailure {\n  type: typeof PROGRAM_LANGUAGE_LOAD_FAILURE;\n  programLanguageLoadError: string;\n}\n\n/**\n * Action creator for getting the program language\n */\nexport const getProgramLanguage = (): ProgramLanguageActionTypes => ({\n  type: PROGRAM_LANGUAGE_LOAD,\n});\n\n/**\n * Action creator for getting program language when success\n * @param programLanguages\n */\nexport const getProgramLanguageSuccess = (\n  programLanguages: IProgramLanguageData[]\n): ProgramLanguageActionTypes => ({\n  type: PROGRAM_LANGUAGE_LOAD_SUCCESS,\n  programLanguages,\n});\n\n/**\n * Action creator for getting program language when failure\n * @param ProgramLanguageLoadError\n */\nexport const getProgramLanguageFailure = (\n  programLanguageLoadError: string\n): ProgramLanguageActionTypes => ({\n  type: PROGRAM_LANGUAGE_LOAD_FAILURE,\n  programLanguageLoadError,\n});\n\nexport type ProgramLanguageActionTypes =\n  | IGetProgramLanguage\n  | IGetProgramLanguageSuccess\n  | IGetProgramLanguageFailure;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nexport const PROGRAM_LANGUAGE_LOAD = \"PROGRAM_LANGUAGE_LOAD\";\nexport const PROGRAM_LANGUAGE_LOAD_SUCCESS = \"PROGRAM_LANGUAGE_LOAD_SUCCESS\";\nexport const PROGRAM_LANGUAGE_LOAD_FAILURE = \"PROGRAM_LANGUAGE_LOAD_FAILURE\";\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { AppState } from \"Dataflows/Reducers\";\n\nimport {\n  IProgramLanguageData,\n  IProgramLanguageDataState,\n  IProgramLanguageOptionList,\n} from \"../../Interfaces/SiteContent\";\n\n/**\n * program language data selector.\n */\nexport const getProgramLanguages = (state: IProgramLanguageDataState): IProgramLanguageData[] =>\n  state.programLanguages;\n\n/**\n * program language option list data selector.\n */\nexport const getProgramLanguageOptionList = (\n  state: IProgramLanguageDataState\n): IProgramLanguageOptionList[] => state.programLanguageOptionList;\n\nexport const getAppStateProgramLanguageOptionList = (\n  state: AppState\n): IProgramLanguageOptionList[] => state.programLanguageDataState.programLanguageOptionList;\n\n/**\n * program language data load error selector.\n */\nexport const getProgramLanguageLoadError = (state: IProgramLanguageDataState): string =>\n  state.programLanguageLoadError;\n\nexport const getAppStateProgramLanguageLoadError = (state: AppState): string =>\n  state.programLanguageDataState.programLanguageLoadError;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\nimport { AppState } from \"Dataflows/Reducers\";\nimport { ISchoolDataState, ISchoolData, ISchoolOptionList } from \"../../Interfaces/SiteContent\";\n\n/**\n * Schools data selector.\n */\nexport const getSchools = (state: ISchoolDataState): ISchoolData[] => state.schools;\n\n/**\n * School option list data selector.\n */\nexport const getSchoolOptionList = (state: ISchoolDataState): ISchoolOptionList[] =>\n  state.schoolOptionList;\n\nexport const getAppStateSchoolOptionList = (state: AppState): ISchoolOptionList[] =>\n  state.schoolDataState.schoolOptionList;\n\n/**\n * School data loadError selector.\n */\nexport const getSchoolloadError = (state: ISchoolDataState): string => state.schoolDataLoadError;\n\nexport const getAppStateSchoolLoadError = (state: AppState): string =>\n  state.schoolDataState.schoolDataLoadError;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\nimport {\n  SOCIALNETWORKDATA_LOAD,\n  SOCIALNETWORKDATA_LOAD_SUCCESS,\n  SOCIALNETWORKDATA_LOAD_FAILURE,\n} from \"./SocialNetworkActionTypes\";\nimport { ISocialNetworkData } from \"../../Interfaces/SiteContent\";\n\n/**\n *\n */\nexport interface IGetSocialNetwork {\n  type: typeof SOCIALNETWORKDATA_LOAD;\n}\n\n/**\n *\n */\nexport interface IGetSocialNetworkSuccess {\n  type: typeof SOCIALNETWORKDATA_LOAD_SUCCESS;\n  socialNetworks: ISocialNetworkData[];\n}\n\n/**\n *\n */\nexport interface IGetSocialNetworkFailure {\n  type: typeof SOCIALNETWORKDATA_LOAD_FAILURE;\n  socialNetworkLoadError: string;\n}\n\n/**\n *\n */\nexport const getSocialNetwork = (): SocialNetworkActionTypes => ({\n  type: SOCIALNETWORKDATA_LOAD,\n});\n\n/**\n *\n * @param socialNetworks\n */\nexport const getSocialNetworkSuccess = (\n  socialNetworks: ISocialNetworkData[]\n): SocialNetworkActionTypes => ({\n  type: SOCIALNETWORKDATA_LOAD_SUCCESS,\n  socialNetworks,\n});\n\n/**\n *\n * @param errorMessage\n */\nexport const getSocialNetworkFailure = (\n  socialNetworkLoadError: string\n): SocialNetworkActionTypes => ({\n  type: SOCIALNETWORKDATA_LOAD_FAILURE,\n  socialNetworkLoadError,\n});\n\nexport type SocialNetworkActionTypes =\n  | IGetSocialNetwork\n  | IGetSocialNetworkSuccess\n  | IGetSocialNetworkFailure;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\nexport const SOCIALNETWORKDATA_LOAD = \"SOCIALNETWORKDATA_LOAD\";\nexport const SOCIALNETWORKDATA_LOAD_SUCCESS = \"SOCIALNETWORKDATA_LOAD_SUCCESS\";\nexport const SOCIALNETWORKDATA_LOAD_FAILURE = \"SOCIALNETWORKDATA_LOAD_FAILURE\";\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\nimport { AppState } from \"Dataflows/Reducers\";\nimport {\n  ISocialNetworkDataState,\n  ISocialNetworkData,\n  ISocialNetworkOptionList,\n} from \"../../Interfaces/SiteContent\";\n\n/**\n * Social Network data selector.\n */\nexport const getSocialNetworks = (state: ISocialNetworkDataState): ISocialNetworkData[] =>\n  state.socialNetworks;\n\n/**\n * Social Network option list data selector.\n */\nexport const getSocialNetworkOptionList = (\n  state: ISocialNetworkDataState\n): ISocialNetworkOptionList[] => state.socialNetworkOptionList;\n\nexport const getAppStateSocialNetworkOptionList = (state: AppState): ISocialNetworkOptionList[] =>\n  state.socialNetworkDataState.socialNetworkOptionList;\n\n/**\n * Social Network data load error selector.\n */\nexport const getSocialNetworkLoadError = (state: ISocialNetworkDataState): string =>\n  state.socialNetworkLoadError;\n\nexport const getAppStateSocialNetworkLoadError = (state: AppState): string =>\n  state.socialNetworkDataState.socialNetworkLoadError;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\nimport { AppState } from \"Dataflows/Reducers\";\nimport {\n  IStateProvinceDataState,\n  IStateProvinceData,\n  IStateProvinceOptionList,\n} from \"../../Interfaces/SiteContent\";\n\n/**\n * State Provinces data selector.\n */\nexport const getStateProvinces = (state: IStateProvinceDataState): IStateProvinceData[] =>\n  state.stateProvinces;\n\n/**\n * State Provinces shipping data selector.\n */\nexport const getStateProvinceShipping = (state: IStateProvinceDataState): IStateProvinceData[] =>\n  state.stateProvincesShipping;\n\n/**\n * State Provinces school data selector.\n */\nexport const getStateProvinceSchool = (state: IStateProvinceDataState): IStateProvinceData[] =>\n  state.stateProvincesSchool;\n\n/**\n * State Provinces option list data selector.\n */\nexport const getStateProvincesOptionList = (\n  state: IStateProvinceDataState\n): IStateProvinceOptionList[] => state.stateProvincesOptionList;\n\n/**\n * State Provinces option list data selector.\n */\nexport const getAppStateProvincesOptionList = (state: AppState): IStateProvinceOptionList[] =>\n  state.stateProvinceDataState.stateProvincesOptionList;\n\n/**\n * State Province Shipping option list data selector.\n */\nexport const getstateProvinceShippingOptionList = (\n  state: IStateProvinceDataState\n): IStateProvinceOptionList[] => state.stateProvincesShippingOptionList;\n\nexport const getAppStateStateProvinceShippingOptionList = (\n  state: AppState\n): IStateProvinceOptionList[] => state.stateProvinceDataState.stateProvincesShippingOptionList;\n\n/**\n * State Province School option list data selector.\n */\nexport const getStateProvinceSchoolOptionList = (\n  state: IStateProvinceDataState\n): IStateProvinceOptionList[] => state.stateProvincesSchoolOptionList;\n\nexport const getAppStateStateProvinceSchoolOptionList = (\n  state: AppState\n): IStateProvinceOptionList[] => state.stateProvinceDataState.stateProvincesSchoolOptionList;\n\n/**\n * State Provinces loadError selector.\n */\nexport const getStateProvinceLoadError = (state: IStateProvinceDataState): string =>\n  state.stateProvincesLoadError;\n\nexport const getAppStateStateProvinceLoadError = (state: AppState): string =>\n  state.stateProvinceDataState.stateProvincesLoadError;\n\n/**\n * State Provinces shipping loadError selector.\n */\nexport const getStateProvinceShippingLoadError = (state: IStateProvinceDataState): string =>\n  state.stateProvincesShippingLoadError;\n\nexport const getAppStateStateProvinceShippingLoadError = (state: AppState): string =>\n  state.stateProvinceDataState.stateProvincesShippingLoadError;\n\n/**\n * State Provinces school loadError selector.\n */\nexport const getStateProvinceSchoolLoadError = (state: IStateProvinceDataState): string =>\n  state.stateProvincesSchoolLoadError;\n\nexport const getAppStateStateProvinceSchoolLoadError = (state: AppState): string =>\n  state.stateProvinceDataState.stateProvincesSchoolLoadError;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport {\n  getTheme,\n  FontSizes,\n  FontWeights,\n  ICommandBarStyles,\n  ILabelStyles,\n  IStackItemStyles,\n  IStackStyles,\n  IStackTokens,\n  ITextStyles,\n} from \"@fluentui/react\";\n\nconst theme = getTheme();\n\n/**\n * Token for the body stack\n */\nexport const bodyContainerStackTokens = (): IStackTokens => {\n  return { childrenGap: \"1rem\" };\n};\n\n/**\n * Styling for the body row stack\n */\nexport const bodyRowStackStyles = (): IStackStyles => {\n  return { root: { display: \"flex\", justifyContent: \"space-between\" } };\n};\n\n/**\n * Styling for the body column stack\n */\nexport const bodyColumnStackItemStyles = (): IStackItemStyles => {\n  return { root: { width: \"50%\" } };\n};\n\n/**\n * Styling for the header text\n */\nexport const subHeaderTextStyles = (): ITextStyles => {\n  return {\n    root: {\n      fontWeight: 600,\n      fontSize: FontSizes.size18,\n      padding: \"1rem 1.5rem\",\n    },\n  };\n};\n\n/**\n * Styling for the label\n */\nexport const labelStyles = (): ILabelStyles => {\n  return { root: { fontWeight: 600 } };\n};\n\n/**\n * Success message styling.\n */\nexport const successMessageStyles: ITextStyles = {\n  root: {\n    color: theme.palette.green,\n    margin: \"0 1.5rem\",\n  },\n};\n\nexport const commandBarStyles: ICommandBarStyles = {\n  root: {\n    borderRadius: \"8px\",\n    boxShadow: \" 0px 1px 4px rgba(0, 0, 0, 0.2)\",\n    margin: \"1rem 0.5rem 1.5rem\",\n    padding: \"0.75rem\",\n    selectors: {\n      [\"button\"]: {\n        marginRight: \"36px\",\n      },\n      [\".ms-Button-label\"]: {\n        fontSize: \"14px\",\n        fontWeight: FontWeights.semibold,\n      },\n      [\"i[data-icon-name='Blocked']\"]: {\n        color: theme.palette.red,\n      },\n    },\n  },\n};\n\nexport const commandBarUnblockStyles: ICommandBarStyles = {\n  root: {\n    borderRadius: \"8px\",\n    boxShadow: \" 0px 1px 4px rgba(0, 0, 0, 0.2)\",\n    margin: \"1rem 0.5rem 1.5rem\",\n    padding: \"0.75rem\",\n    selectors: {\n      [\"button\"]: {\n        marginRight: \"36px\",\n      },\n      [\".ms-Button-label\"]: {\n        fontSize: \"14px\",\n        fontWeight: FontWeights.semibold,\n      },\n    },\n  },\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { useEffect, useState, ReactElement } from \"react\";\n\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { Redirect } from \"react-router-dom\";\n\nimport { find } from \"lodash\";\n\nimport { CommandBar, Label, Stack, StackItem, Text } from \"@fluentui/react\";\n\nimport { useAuth } from \"Authentication/AuthProvider\";\nimport {\n  bodyContainerStackStyles,\n  headerStackStyles,\n  headerTextStyles,\n  ContainerWrapper,\n} from \"Components/Common/SharedTableStyles.styles\";\nimport { SetProfileToPrivateSidePanel } from \"Components/SetProfileToPrivateSidePanel/SetProfileToPrivateSidePanel\";\nimport StudentEditProfileEnhancedForm from \"Components/StudentEditProfile/StudentEditProfileEnhancedForm\";\nimport { INVITED_STATUS } from \"Constants/FormStatusConstants\";\nimport { OperationStatus } from \"Constants/OperationStatus\";\nimport { namesLocalized } from \"Constants/ProfileConstants\";\nimport { ACTIVE } from \"Constants/ProgramProfileConstants\";\nimport {\n  getAppStateCountryRegionsOptionList,\n  getAppStateCountryRegionLoadError,\n  getAppStateCountryRegionPhoneOptionList,\n} from \"Dataflows/CountryRegion/CountryRegionSelector\";\nimport { getProgramLanguage } from \"Dataflows/ProgramLanguage/ProgramLanguageAction\";\nimport {\n  getAppStateProgramLanguageLoadError,\n  getAppStateProgramLanguageOptionList,\n} from \"Dataflows/ProgramLanguage/ProgramLanguageSelector\";\nimport {\n  getAppStateSchoolLoadError,\n  getAppStateSchoolOptionList,\n} from \"Dataflows/School/SchoolSelector\";\nimport { getSocialNetwork } from \"Dataflows/SocialNetwork/SocialNetworkAction\";\nimport {\n  getAppStateSocialNetworkLoadError,\n  getAppStateSocialNetworkOptionList,\n} from \"Dataflows/SocialNetwork/SocialNetworkSelector\";\nimport {\n  getAppStateProvincesOptionList,\n  getAppStateStateProvinceLoadError,\n  getAppStateStateProvinceSchoolLoadError,\n  getAppStateStateProvinceSchoolOptionList,\n  getAppStateStateProvinceShippingLoadError,\n  getAppStateStateProvinceShippingOptionList,\n} from \"Dataflows/StateProvince/StateProvinceSelector\";\nimport {\n  loadUserProfile,\n  updateUserProfile,\n  userProfileIsPrivateUpdate,\n} from \"Dataflows/UserProfile/UserProfileAction\";\nimport {\n  getAppStateUpdateUserProfileError,\n  getAppStateUserProfile,\n  getUserProfileUpdateIsPrivateError,\n  getUserProfileUpdateIsPrivateOperationStatus,\n  isAppStateCurrentUserProfileLoading,\n  isAppStateSelectedUserProfileUpdating,\n} from \"Dataflows/UserProfile/UserProfileSelector\";\nimport { IUserProfile } from \"Interfaces/UserProfile/IUserProfile\";\nimport { formatDate } from \"Utility/FormatHelper\";\n\nimport {\n  bodyColumnStackItemStyles,\n  bodyContainerStackTokens,\n  bodyRowStackStyles,\n  commandBarStyles,\n  labelStyles,\n  subHeaderTextStyles,\n} from \"./StudentProfile.styles\";\n\n/**\n * The Most Valuable Professional Profile component\n * @method\n * @returns {ReactElement} The Most Valuable Professional Profile Details component\n */\nconst StudentProfile = (): ReactElement => {\n  const { isUserLoggedIn, loading, hasAnyRoles } = useAuth();\n  const [isPanelOpen, setIsPanelOpen] = useState(false);\n  const [isSetToPrivatePanelOpen, setIsSetToPrivatePanelOpen] = useState(false);\n  const profileInfo = useSelector(getAppStateUserProfile);\n  const dispatch = useDispatch();\n\n  // Below needed for edit profile form\n  const countryRegionOptionList = useSelector(getAppStateCountryRegionsOptionList);\n  const countryRegionPhoneOptionList = useSelector(getAppStateCountryRegionPhoneOptionList);\n  const countryRegionsLoadError = useSelector(getAppStateCountryRegionLoadError);\n  const stateProvinceOptionList = useSelector(getAppStateProvincesOptionList);\n  const stateProvinceShippingOptionList = useSelector(getAppStateStateProvinceShippingOptionList);\n  const stateProvinceSchoolOptionList = useSelector(getAppStateStateProvinceSchoolOptionList);\n  const stateProvincesLoadError = useSelector(getAppStateStateProvinceLoadError);\n  const stateProvincesShippingLoadError = useSelector(getAppStateStateProvinceShippingLoadError);\n  const stateProvincesSchoolLoadError = useSelector(getAppStateStateProvinceSchoolLoadError);\n  const schoolOptionList = useSelector(getAppStateSchoolOptionList);\n  const schoolsDataLoadError = useSelector(getAppStateSchoolLoadError);\n  const socialNetworkOptionList = useSelector(getAppStateSocialNetworkOptionList);\n  const socialNetworksDataLoadError = useSelector(getAppStateSocialNetworkLoadError);\n  const programLanguageOptionList = useSelector(getAppStateProgramLanguageOptionList);\n  const programLanguageDataLoadError = useSelector(getAppStateProgramLanguageLoadError);\n  const isCurrentUserProfileLoading = useSelector(isAppStateCurrentUserProfileLoading);\n  const updateProfileError = useSelector(getAppStateUpdateUserProfileError);\n  const isSelectedUserProfileUpdating = useSelector(isAppStateSelectedUserProfileUpdating);\n  const userProfileIsPrivateUpdateStatus = useSelector(\n    getUserProfileUpdateIsPrivateOperationStatus\n  );\n  const userProfileIsPrivateUpdateError = useSelector(getUserProfileUpdateIsPrivateError);\n\n  useEffect(() => {\n    if (userProfileIsPrivateUpdateStatus === OperationStatus.Succeeded && profileInfo?.id) {\n      setIsSetToPrivatePanelOpen(false);\n      dispatch(loadUserProfile(profileInfo.id));\n    }\n  }, [userProfileIsPrivateUpdateStatus]);\n\n  useEffect(() => {\n    dispatch(getSocialNetwork());\n    dispatch(getProgramLanguage());\n  }, []);\n\n  const canEditUser =\n    profileInfo.programProfileStatusName === ACTIVE &&\n    profileInfo.application?.applicationStatus === INVITED_STATUS;\n\n  if (isUserLoggedIn && !hasAnyRoles && !loading) {\n    return <Redirect to=\"/unauthorized\" />;\n  }\n\n  const editProfileInformationClicked = (): void => {\n    setIsPanelOpen(true);\n  };\n\n  const handleUpdateUserProfile = (userProfile: IUserProfile) => {\n    dispatch(updateUserProfile(userProfile));\n  };\n\n  const handlePanelClose = () => {\n    setIsPanelOpen(false);\n  };\n\n  const handleSetProfileToPrivateTogglePanel = () => {\n    if (profileInfo && profileInfo.id) {\n      setIsSetToPrivatePanelOpen(!isSetToPrivatePanelOpen);\n    }\n  };\n\n  const handleSetProfileToPrivateSave = () => {\n    if (profileInfo && profileInfo.id) {\n      dispatch(userProfileIsPrivateUpdate(!profileInfo.isPrivate, profileInfo.id));\n    }\n  };\n\n  const commandBarItems = [\n    {\n      key: \"editProgramInformation\",\n      text: \"Edit Profile Details\",\n      iconProps: { iconName: \"Edit\" },\n      onClick: (): void => {\n        editProfileInformationClicked();\n      },\n    },\n    {\n      key: \"setProfileToPrivate\",\n      text: `Set Profile to ${profileInfo?.isPrivate ? \"Public\" : \"Private\"}`,\n      iconProps: { iconName: `${profileInfo?.isPrivate ? \"UserFollowed\" : \"UserRemove\"}` },\n      onClick: (): void => {\n        handleSetProfileToPrivateTogglePanel();\n      },\n    },\n  ];\n\n  return (\n    <>\n      <Stack tokens={{ childrenGap: \"1.5rem\" }}>\n        <Stack>\n          {canEditUser && (\n            <CommandBar\n              items={commandBarItems}\n              ariaLabel=\"Edit user actions\"\n              styles={commandBarStyles}\n            />\n          )}\n          <ContainerWrapper>\n            <Stack styles={headerStackStyles}>\n              <Text styles={headerTextStyles}>Personal Information</Text>\n            </Stack>\n            <Stack styles={bodyContainerStackStyles} tokens={bodyContainerStackTokens}>\n              <Stack horizontal styles={bodyRowStackStyles}>\n                <StackItem styles={bodyColumnStackItemStyles}>\n                  <Label styles={labelStyles}>First Name</Label>\n                  <Text>{profileInfo?.firstName}</Text>\n                </StackItem>\n                <StackItem styles={bodyColumnStackItemStyles}>\n                  <Label styles={labelStyles}>Last Name</Label>\n                  <Text>{profileInfo?.lastName}</Text>\n                </StackItem>\n              </Stack>\n              <Stack horizontal styles={bodyRowStackStyles}>\n                <StackItem styles={bodyColumnStackItemStyles}>\n                  <Label styles={labelStyles}>Localized First Name</Label>\n                  <Text>{profileInfo?.localizedFirstName}</Text>\n                </StackItem>\n                <StackItem styles={bodyColumnStackItemStyles}>\n                  <Label styles={labelStyles}>Localized Last Name</Label>\n                  <Text>{profileInfo?.localizedLastName}</Text>\n                </StackItem>\n              </Stack>\n              <Stack horizontal styles={bodyRowStackStyles}>\n                <StackItem styles={bodyColumnStackItemStyles}>\n                  <Label styles={labelStyles}>Print Name</Label>\n                  <Text>\n                    {find(namesLocalized, (o) => o.key === !!profileInfo?.awardNameLocalized)?.text}\n                  </Text>\n                </StackItem>\n                <StackItem styles={bodyColumnStackItemStyles}>\n                  <Label styles={labelStyles}>Display Name</Label>\n                  <Text>\n                    {\n                      find(namesLocalized, (o) => o.key === !!profileInfo?.screenNameLocalized)\n                        ?.text\n                    }\n                  </Text>\n                </StackItem>\n              </Stack>\n              <Stack horizontal styles={bodyRowStackStyles}>\n                <StackItem styles={bodyColumnStackItemStyles}>\n                  <Label styles={labelStyles}>Title</Label>\n                  <Text>{profileInfo?.titleName}</Text>\n                </StackItem>\n                <StackItem styles={bodyColumnStackItemStyles}>\n                  <Label styles={labelStyles}>Date of birth</Label>\n                  {!!profileInfo?.dateOfBirth ? (\n                    <Text>{formatDate(new Date(profileInfo?.dateOfBirth))}</Text>\n                  ) : (\n                    <></>\n                  )}\n                </StackItem>\n              </Stack>\n              <Stack horizontal styles={bodyRowStackStyles}>\n                <StackItem styles={bodyColumnStackItemStyles}>\n                  <Label styles={labelStyles}>Site Email</Label>\n                  <Text>{profileInfo?.primaryEmail}</Text>\n                </StackItem>\n                <StackItem styles={bodyColumnStackItemStyles}>\n                  <Label styles={labelStyles}>Preferred Email</Label>\n                  <Text>{profileInfo?.secondaryEmail}</Text>\n                </StackItem>\n              </Stack>\n              <Stack horizontal styles={bodyRowStackStyles}>\n                <StackItem styles={bodyColumnStackItemStyles}>\n                  <Label styles={labelStyles}>Gender</Label>\n                  <Text>{profileInfo?.genderName}</Text>\n                </StackItem>\n                <StackItem styles={bodyColumnStackItemStyles}>\n                  <Label styles={labelStyles}>Pronoun</Label>\n                  <Text>{profileInfo?.genderPronounPreferenceName}</Text>\n                </StackItem>\n              </Stack>\n              <Stack horizontal styles={bodyRowStackStyles}>\n                <StackItem styles={bodyColumnStackItemStyles}>\n                  <Label styles={labelStyles}>Student Partner Email</Label>\n                  <Text>{profileInfo?.studentPartnerEmail}</Text>\n                </StackItem>\n                <StackItem styles={bodyColumnStackItemStyles}>\n                  <Label styles={labelStyles}>Languages</Label>\n                  <Text>{profileInfo?.languages?.join(\", \")}</Text>\n                </StackItem>\n              </Stack>\n              <Stack horizontal styles={bodyRowStackStyles}>\n                <StackItem styles={bodyColumnStackItemStyles}>\n                  <Label styles={labelStyles}>Shirt Fit Type</Label>\n                  <Text>{profileInfo?.shirtFitType}</Text>\n                </StackItem>\n                <StackItem styles={bodyColumnStackItemStyles}>\n                  <Label styles={labelStyles}>Shirt Size</Label>\n                  <Text>{profileInfo?.shirtSize}</Text>\n                </StackItem>\n              </Stack>\n              <Stack horizontal styles={bodyRowStackStyles}>\n                <StackItem styles={bodyColumnStackItemStyles}>\n                  <Label styles={labelStyles}>Preferred Programming Language</Label>\n                  <Text>{profileInfo?.userProfileProgramLanguage?.join(\", \")}</Text>\n                </StackItem>\n              </Stack>\n            </Stack>\n          </ContainerWrapper>\n        </Stack>\n        <ContainerWrapper>\n          <Stack>\n            <Stack styles={headerStackStyles}>\n              <Text styles={headerTextStyles}>Biography</Text>\n            </Stack>\n            <Stack styles={bodyContainerStackStyles} tokens={bodyContainerStackTokens}>\n              <Stack horizontal styles={bodyRowStackStyles}>\n                <StackItem styles={bodyColumnStackItemStyles}>\n                  <Label styles={labelStyles}>Headline</Label>\n                  <Text>{profileInfo?.headline}</Text>\n                </StackItem>\n                <StackItem styles={bodyColumnStackItemStyles}>\n                  <Label styles={labelStyles}>Biography</Label>\n                  <Text>{profileInfo?.biography}</Text>\n                </StackItem>\n              </Stack>\n            </Stack>\n          </Stack>\n        </ContainerWrapper>\n        <ContainerWrapper>\n          <Stack>\n            <Stack styles={headerStackStyles}>\n              <Text styles={headerTextStyles}>Address</Text>\n            </Stack>\n            <Stack>\n              <Text styles={subHeaderTextStyles}>Primary Address</Text>\n            </Stack>\n            <Stack styles={bodyContainerStackStyles} tokens={bodyContainerStackTokens}>\n              <Stack horizontal styles={bodyRowStackStyles}>\n                <StackItem styles={bodyColumnStackItemStyles}>\n                  <Label styles={labelStyles}>Country Code</Label>\n                  <Text>{profileInfo?.primaryPhoneCountryOrRegionId}</Text>\n                </StackItem>\n                <StackItem styles={bodyColumnStackItemStyles}>\n                  <Label styles={labelStyles}>Phone number</Label>\n                  <Text>{profileInfo?.primaryPhone}</Text>\n                </StackItem>\n              </Stack>\n              <Stack horizontal styles={bodyRowStackStyles}>\n                <StackItem styles={bodyColumnStackItemStyles}>\n                  <Label styles={labelStyles}>Address Line 1</Label>\n                  <Text>{profileInfo?.address1}</Text>\n                </StackItem>\n                <StackItem styles={bodyColumnStackItemStyles}>\n                  <Label styles={labelStyles}>Address Line 2</Label>\n                  <Text>{profileInfo?.address2}</Text>\n                </StackItem>\n              </Stack>\n              <Stack horizontal styles={bodyRowStackStyles}>\n                <StackItem styles={bodyColumnStackItemStyles}>\n                  <Label styles={labelStyles}>City</Label>\n                  <Text>{profileInfo?.addressCity}</Text>\n                </StackItem>\n                <StackItem styles={bodyColumnStackItemStyles}>\n                  <Label styles={labelStyles}>State/Province</Label>\n                  <Text>{profileInfo?.addressStateOrProvince}</Text>\n                </StackItem>\n              </Stack>\n              <Stack horizontal styles={bodyRowStackStyles}>\n                <StackItem styles={bodyColumnStackItemStyles}>\n                  <Label styles={labelStyles}>Post code</Label>\n                  <Text>{profileInfo?.addressPostCode}</Text>\n                </StackItem>\n                <StackItem styles={bodyColumnStackItemStyles}>\n                  <Label styles={labelStyles}>Country Region</Label>\n                  <Text>{profileInfo?.addressCountryOrRegionName}</Text>\n                </StackItem>\n              </Stack>\n            </Stack>\n            {!profileInfo?.shippingSameAsAddress ? (\n              <>\n                <Stack>\n                  <Text styles={subHeaderTextStyles}>Shipping Address</Text>\n                </Stack>\n                <Stack styles={bodyContainerStackStyles} tokens={bodyContainerStackTokens}>\n                  <Stack horizontal styles={bodyRowStackStyles}>\n                    <StackItem styles={bodyColumnStackItemStyles}>\n                      <Label styles={labelStyles}>Phone number</Label>\n                      <Text>{profileInfo?.shippingPhoneNumber}</Text>\n                    </StackItem>\n                  </Stack>\n                  <Stack horizontal styles={bodyRowStackStyles}>\n                    <StackItem styles={bodyColumnStackItemStyles}>\n                      <Label styles={labelStyles}>Address Line 1</Label>\n                      <Text>{profileInfo?.shippingAddress1}</Text>\n                    </StackItem>\n                    <StackItem styles={bodyColumnStackItemStyles}>\n                      <Label styles={labelStyles}>Address Line 2</Label>\n                      <Text>{profileInfo?.shippingAddress2}</Text>\n                    </StackItem>\n                  </Stack>\n                  <Stack horizontal styles={bodyRowStackStyles}>\n                    <StackItem styles={bodyColumnStackItemStyles}>\n                      <Label styles={labelStyles}>City</Label>\n                      <Text>{profileInfo?.shippingCity}</Text>\n                    </StackItem>\n                    <StackItem styles={bodyColumnStackItemStyles}>\n                      <Label styles={labelStyles}>State/Province</Label>\n                      <Text>{profileInfo?.shippingStateOrProvince}</Text>\n                    </StackItem>\n                  </Stack>\n\n                  <Stack horizontal styles={bodyRowStackStyles}>\n                    <StackItem styles={bodyColumnStackItemStyles}>\n                      <Label styles={labelStyles}>Post code</Label>\n                      <Text>{profileInfo?.shippingPostCode}</Text>\n                    </StackItem>\n                    <StackItem styles={bodyColumnStackItemStyles}>\n                      <Label styles={labelStyles}>Country Region</Label>\n                      <Text>{profileInfo?.shippingCountryOrRegionName}</Text>\n                    </StackItem>\n                  </Stack>\n                </Stack>\n              </>\n            ) : (\n              <></>\n            )}\n          </Stack>\n        </ContainerWrapper>\n        <ContainerWrapper>\n          <Stack>\n            <Stack styles={headerStackStyles}>\n              <Text styles={headerTextStyles}>Academic Information</Text>\n            </Stack>\n            <Stack styles={bodyContainerStackStyles} tokens={bodyContainerStackTokens}>\n              {profileInfo?.userProfileSchool.map((school) => (\n                <Stack key={school.id}>\n                  <Stack>\n                    <Text styles={subHeaderTextStyles}>Profile School ID: {school.id}</Text>\n                  </Stack>\n                  <Stack styles={bodyContainerStackStyles} tokens={bodyContainerStackTokens}>\n                    <Stack horizontal styles={bodyRowStackStyles}>\n                      <StackItem styles={bodyColumnStackItemStyles}>\n                        <Label styles={labelStyles}>Country Region</Label>\n                        <Text>{school.schoolCountryRegionName}</Text>\n                      </StackItem>\n                      <StackItem styles={bodyColumnStackItemStyles}>\n                        <Label styles={labelStyles}>State/Province</Label>\n                        <Text>{school.schoolStateProvinceName}</Text>\n                      </StackItem>\n                    </Stack>\n                    <Stack horizontal styles={bodyRowStackStyles}>\n                      <StackItem styles={bodyColumnStackItemStyles}>\n                        <Label styles={labelStyles}>School Name</Label>\n                        <Text>{school.schoolName}</Text>\n                      </StackItem>\n                      <StackItem styles={bodyColumnStackItemStyles}>\n                        <Label styles={labelStyles}>Degree Program</Label>\n                        <Text>{school.schoolDegreeProgramName}</Text>\n                      </StackItem>\n                    </Stack>\n                    <Stack horizontal styles={bodyRowStackStyles}>\n                      <StackItem styles={bodyColumnStackItemStyles}>\n                        <Label styles={labelStyles}>Degree Level Name</Label>\n                        <Text>{school.schoolDegreeLevelName}</Text>\n                      </StackItem>\n                      <StackItem styles={bodyColumnStackItemStyles}>\n                        <Label styles={labelStyles}>Expected Graduation Date</Label>\n                        <Text>\n                          {!!school.expectedGraduationDate\n                            ? formatDate(new Date(school.expectedGraduationDate))\n                            : \"\"}\n                        </Text>\n                      </StackItem>\n                    </Stack>\n                  </Stack>\n                </Stack>\n              ))}\n            </Stack>\n          </Stack>\n        </ContainerWrapper>\n        <ContainerWrapper>\n          <Stack>\n            <Stack styles={headerStackStyles}>\n              <Text styles={headerTextStyles}>Social Media</Text>\n            </Stack>\n            <Stack styles={bodyContainerStackStyles} tokens={bodyContainerStackTokens}>\n              {profileInfo?.userProfileSocialNetwork.map((x) => (\n                <Stack key={x.id} horizontal styles={bodyRowStackStyles}>\n                  <StackItem styles={bodyColumnStackItemStyles}>\n                    <Label styles={labelStyles}>Network</Label>\n                    <Text>{x?.socialNetworkName}</Text>\n                  </StackItem>\n                  <StackItem styles={bodyColumnStackItemStyles}>\n                    <Label styles={labelStyles}>Link/Url</Label>\n                    <Text>{x?.socialNetworkImageLink}</Text>\n                  </StackItem>\n                </Stack>\n              ))}\n            </Stack>\n          </Stack>\n        </ContainerWrapper>\n      </Stack>\n\n      {isPanelOpen && (\n        <StudentEditProfileEnhancedForm\n          selectedUserProfile={profileInfo}\n          isSelectedUserProfileLoading={isCurrentUserProfileLoading}\n          updateUserProfile={(userProfile) => handleUpdateUserProfile(userProfile)}\n          updateProfileError={updateProfileError}\n          isSelectedUserProfileUpdating={isSelectedUserProfileUpdating}\n          countryRegionOptionList={countryRegionOptionList}\n          countryRegionPhoneOptionList={countryRegionPhoneOptionList}\n          stateProvinceOptionList={stateProvinceOptionList}\n          stateProvinceShippingOptionList={stateProvinceShippingOptionList}\n          stateProvinceSchoolOptionList={stateProvinceSchoolOptionList}\n          schoolOptionList={schoolOptionList}\n          schoolOptionsSelected={[]} // schoolOptionsSelected\n          countryRegionsLoadError={countryRegionsLoadError}\n          stateProvincesLoadError={stateProvincesLoadError}\n          stateProvincesShippingLoadError={stateProvincesShippingLoadError}\n          stateProvincesSchoolLoadError={stateProvincesSchoolLoadError}\n          schoolsDataLoadError={schoolsDataLoadError}\n          socialNetworkOptionList={socialNetworkOptionList}\n          programLanguageOptionList={programLanguageOptionList}\n          socialNetworksDataLoadError={socialNetworksDataLoadError}\n          programLanguageDataLoadError={programLanguageDataLoadError}\n          canEditUser={canEditUser}\n          isPanelOpen={isPanelOpen}\n          handlePanelClose={handlePanelClose}\n        />\n      )}\n\n      <SetProfileToPrivateSidePanel\n        userProfileId={profileInfo.id}\n        isPrivate={profileInfo.isPrivate ?? false}\n        isOpen={isSetToPrivatePanelOpen}\n        updateStatus={userProfileIsPrivateUpdateStatus}\n        updateError={userProfileIsPrivateUpdateError}\n        onDismiss={handleSetProfileToPrivateTogglePanel}\n        onSave={handleSetProfileToPrivateSave}\n      />\n    </>\n  );\n};\n\nexport default StudentProfile;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { IDatePickerStyles, IIconStyles } from \"@fluentui/react\";\n\n/**\n * Styling for datePicker.\n * @type {Partial<IDatePickerStyles>}\n */\nexport const datePickerStyles: Partial<IDatePickerStyles> = {\n  root: {\n    width: \"100%\",\n  },\n  textField: {\n    \".ms-TextField-fieldGroup\": {\n      alignItems: \"center\",\n    },\n  },\n};\n\n/**\n * Styling for Icon control.\n * @type {Partial<IIconStyles>}\n * @param {boolean} hasAsterisk The value to determine if control label has required asterisk.\n */\nexport const getIconStyles: (hasAsterisk: boolean) => Partial<IIconStyles> = (hasAsterisk) => {\n  return { root: { paddingLeft: !hasAsterisk ? \"10px\" : \"\", cursor: \"default\" } };\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React from \"react\";\n\nimport { Controller } from \"react-hook-form\";\n\nimport { DatePicker, Icon, Label, TooltipHost } from \"@fluentui/react\";\n\nimport { FlexCol, FlexRow } from \"Components/Common/Layout/Layout\";\nimport { HookErrorMessage } from \"Components/ReactHookForm/HookErrorMessage/HookErrorMessage\";\nimport { DayPickerStrings } from \"Constants/DateConstants\";\nimport { isDateEmpty } from \"Utility/FormatHelper\";\n\nimport { datePickerStyles, getIconStyles } from \"./DatePickerController.styles\";\nimport { IDatePickerControllerProps } from \"./IDatePickerControllerProps\";\n\n/**\n * DatePickerController.\n * @component\n * @param {IDatePickerControllerProps} props The component props.\n * @returns  {React.ReactElement} DatePickerController\n */\nconst DatePickerController: (props: IDatePickerControllerProps) => React.ReactElement = (\n  props: IDatePickerControllerProps\n): React.ReactElement => {\n  const {\n    control,\n    errors,\n    hasTooltip,\n    inputName,\n    isDisabled,\n    isRequired,\n    labelStyles,\n    labelDisplayName,\n    placeholderText,\n    toolTipDisplayText,\n    startDate,\n    minDate,\n    maxDate,\n  } = props;\n\n  const checkedStartDate = !!startDate && isDateEmpty(startDate) ? undefined : startDate;\n\n  return (\n    <FlexCol>\n      <FlexRow>\n        <Label htmlFor={inputName} required={isRequired} styles={labelStyles}>\n          {labelDisplayName}\n        </Label>\n        {hasTooltip && (\n          <TooltipHost id={inputName} content={toolTipDisplayText || labelDisplayName}>\n            <Icon\n              aria-label=\"information\"\n              iconName=\"info\"\n              role=\"img\"\n              styles={getIconStyles(!!isRequired)}\n              tabIndex={0}\n            />\n          </TooltipHost>\n        )}\n      </FlexRow>\n      <FlexRow>\n        <Controller\n          name={inputName}\n          control={control}\n          defaultValue={checkedStartDate} // I had to add this to preserve the default value, the way it is in Maven.Frontend did not work.\n          render={({ field }): React.ReactElement => (\n            <DatePicker\n              placeholder={placeholderText}\n              ariaLabel={labelDisplayName}\n              styles={datePickerStyles}\n              value={isDateEmpty(field.value) ? undefined : field.value}\n              onSelectDate={field.onChange}\n              disabled={isDisabled}\n              minDate={minDate}\n              maxDate={maxDate}\n              strings={DayPickerStrings}\n            />\n          )}\n        />\n      </FlexRow>\n      <HookErrorMessage errors={errors} inputName={inputName} />\n    </FlexCol>\n  );\n};\n\nexport default DatePickerController;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport {\n  getTheme,\n  ILabelStyles,\n  IStackItemStyles,\n  IStackStyles,\n  IStackTokens,\n} from \"@fluentui/react\";\n\nconst theme = getTheme();\n\n/**\n * Token for the body stack\n */\nexport const bodyContainerStackTokens = (): IStackTokens => {\n  return { childrenGap: \"1rem\" };\n};\n\n/**\n * Styling for the body row stack\n */\nexport const bodyRowStackStyles = (): IStackStyles => {\n  return { root: { display: \"flex\", justifyContent: \"space-between\" } };\n};\n\n/**\n * Styling for the body column stack\n */\nexport const bodyColumnStackItemStyles = (): IStackItemStyles => {\n  return { root: { width: \"50%\" } };\n};\n\n/**\n * Styling for the label\n */\nexport const labelStyles = (): ILabelStyles => {\n  return { root: { fontWeight: 600 } };\n};\n\nexport const spanStyles = {\n  color: theme.palette.red,\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport {\n  IBasePickerStyles,\n  IBasePickerStyleProps,\n  IIconStyles,\n  IStyleFunctionOrObject,\n} from \"@fluentui/react\";\n\n/**\n * Styling for text field control.\n * @type {IStyleFunctionOrObject<ITextFieldStyIBasePickerStylePropsleProps, IBasePickerStyles>}\n */\nexport const peoplePickerStyles: IStyleFunctionOrObject<IBasePickerStyleProps, IBasePickerStyles> =\n  {\n    root: { width: \"100%\" },\n  };\n\n/**\n * Styling for Icon control.\n * @type {Partial<IIconStyles>}\n * @param {boolean} hasAsterisk The value to determine if control label has required asterisk.\n */\nexport const getIconStyles: (hasAsterisk: boolean) => Partial<IIconStyles> = (hasAsterisk) => {\n  return { root: { paddingLeft: !hasAsterisk ? \"10px\" : \"\", cursor: \"default\" } };\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { useEffect, useState } from \"react\";\n\nimport { Controller } from \"react-hook-form\";\n\nimport {\n  Icon,\n  IPersonaProps,\n  IPickerItemProps,\n  Label,\n  NormalPeoplePicker,\n  PeoplePickerItem,\n  TooltipHost,\n  ValidationState,\n} from \"@fluentui/react\";\n\nimport { FlexCol, FlexRow } from \"Components/Common/Layout/Layout\";\nimport { HookErrorMessage } from \"Components/ReactHookForm/HookErrorMessage/HookErrorMessage\";\nimport { peoplePickerSuggestionProps } from \"Constants/PeoplePickerConstants\";\n\nimport { IPeoplePickerControllerProps } from \"./IPeoplePickerControllerProps\";\nimport { getIconStyles, peoplePickerStyles } from \"./PeoplePickerController.styles\";\n\n/**\n * PeoplePickerController.\n * @component\n * @param {IPeoplePickerControllerProps} props The component props.\n * @returns {React.ReactElement} PeoplePickerController\n */\nconst PeoplePickerController = (props: IPeoplePickerControllerProps): React.ReactElement => {\n  const {\n    control,\n    defaultSelectedKey = \"\",\n    errors,\n    hasTooltip,\n    inputName,\n    isDisabled,\n    isRequired,\n    labelStyles,\n    labelDisplayName,\n    toolTipDisplayText,\n    options,\n    keyPropertyName,\n  } = props;\n\n  const [suggestedOptions, setSuggestedOptions] = useState<IPersonaProps[]>(options);\n  const [defaultPersonas, setDefaultPersonas] = useState<IPersonaProps[]>([]);\n\n  useEffect(() => {\n    /**\n     * Accessibility fix - add aria label to combobox\n     * element of TagPicker component.\n     */\n    const comboboxElement = Array.from(document.getElementsByClassName(\"ms-ComboBox-Input\"));\n\n    const addAriaLabel = document.createAttribute(\"aria-label\");\n    addAriaLabel.value = props.labelDisplayName || props.inputName;\n\n    if (comboboxElement && comboboxElement.length > 0) {\n      comboboxElement[0].setAttributeNode(addAriaLabel);\n    }\n\n    // Fetch persona for defaultSelectedKey\n    if (defaultSelectedKey?.length) {\n      setDefaultPersonas(\n        options.filter((option) => option[keyPropertyName] === defaultSelectedKey)\n      );\n    }\n  }, []);\n\n  /**\n   * Search AAD User Info by the input user email.\n   * @param {string}  filterText  the user email.\n   * @param {IPersonaProps[] | undefined}  currentPersonas  Already selected persons.\n   * @returns {IPersonaPropsExtend[] | Promise<IPersonaPropsExtend[]>} Selectable persons.\n   */\n  const onFilterChanged = (filterText: string): IPersonaProps[] => {\n    if (filterText) {\n      return options.filter(\n        (option) =>\n          option.text?.toLowerCase().startsWith(filterText.toLowerCase()) ||\n          option.secondaryText?.toLowerCase().startsWith(filterText.toLowerCase())\n      );\n    } else {\n      return options; // Possibly default to []\n    }\n  };\n\n  function onInputChange(input: string): string {\n    const outlookRegEx = /@.*/g;\n    const emailAddress = outlookRegEx.exec(input);\n\n    if (emailAddress && emailAddress[0]) {\n      return `${input.substring(0, input.length - emailAddress[0].length)}@microsoft.com`;\n    }\n\n    return input;\n  }\n\n  /**\n   * Render item with secondary text for the NormalPeoplePicker.\n   */\n  const renderItemWithSecondaryText = (\n    props: IPickerItemProps<IPersonaProps>\n  ): React.ReactElement => {\n    const newProps = {\n      ...props,\n      item: {\n        ...props.item,\n        ValidationState: ValidationState.valid,\n        showSecondaryText: true,\n      },\n    };\n\n    return <PeoplePickerItem {...newProps} />;\n  };\n\n  return (\n    <FlexCol>\n      <FlexRow>\n        <Label htmlFor={inputName} required={isRequired} styles={labelStyles}>\n          {labelDisplayName}\n        </Label>\n        {hasTooltip && (\n          <TooltipHost id={inputName} content={toolTipDisplayText || labelDisplayName}>\n            <Icon\n              aria-label=\"information\"\n              iconName=\"info\"\n              role=\"img\"\n              styles={getIconStyles(!!isRequired)}\n              tabIndex={0}\n            />\n          </TooltipHost>\n        )}\n      </FlexRow>\n      <FlexRow>\n        <Controller\n          key={JSON.stringify(defaultPersonas)} // Hack to have default value render after being fetched\n          aria-label={labelDisplayName}\n          name={inputName}\n          control={control}\n          render={({ field }): React.ReactElement => (\n            <NormalPeoplePicker\n              onResolveSuggestions={onFilterChanged}\n              onRenderItem={renderItemWithSecondaryText}\n              aria-label={labelDisplayName}\n              {...props}\n              defaultSelectedItems={defaultPersonas}\n              onItemSelected={(\n                item: IPersonaProps | undefined\n              ): PromiseLike<IPersonaProps> | null => {\n                // We could set the field to the secondaryText (which is the email address) or the Persona itself.\n                field.onChange(keyPropertyName ? item?.[keyPropertyName] : item);\n                return item as PromiseLike<IPersonaProps> | null;\n              }}\n              onInputChange={onInputChange}\n              disabled={isDisabled}\n              styles={peoplePickerStyles}\n              onChange={(items?: IPersonaProps[] | undefined): void => {\n                if (items?.length === 0) {\n                  field.onChange(\"\");\n                }\n              }}\n              resolveDelay={300}\n              itemLimit={1}\n              pickerSuggestionsProps={peoplePickerSuggestionProps}\n              onEmptyResolveSuggestions={(): IPersonaProps[] => options}\n              onRemoveSuggestion={(item: IPersonaProps): void => {\n                setSuggestedOptions(suggestedOptions.filter((option) => option.id !== item.id));\n              }}\n            />\n          )}\n        />\n      </FlexRow>\n      <HookErrorMessage errors={errors} inputName={inputName} />\n    </FlexCol>\n  );\n};\n\nexport default PeoplePickerController;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { useEffect, ReactElement } from \"react\";\n\nimport { useForm } from \"react-hook-form\";\nimport { useDispatch, useSelector } from \"react-redux\";\n\nimport * as Yup from \"yup\";\n\nimport { IPersonaProps, Stack, StackItem } from \"@fluentui/react\";\nimport { yupResolver } from \"@hookform/resolvers/yup\";\n\nimport ComboBoxController from \"Components/ReactHookForm/ComboBoxController/ComboBoxController\";\nimport DatePickerController from \"Components/ReactHookForm/DatePickerController/DatePickerController\";\nimport { SidePanel } from \"Components/SidePanel/SidePanel\";\nimport { spanStyles } from \"Components/StudentProgramProfile/StudentProgramProfile.styles\";\nimport { OperationStatus } from \"Constants/OperationStatus\";\nimport { milestones, MlsaProgramProfileStatuses } from \"Constants/ProfileConstants\";\nimport { fetchProgramProfile, updateProgramProfile } from \"Dataflows/UserProfile/UserProfileAction\";\nimport {\n  getProgramProfileOperationStatus,\n  getProgramProfileUpdateErrorMessage,\n} from \"Dataflows/UserProfile/UserProfileSelector\";\n\nimport { IStudentProgramProfileEditFormProps } from \"./IStudentProgramProfileEditFormProps\";\nimport PeoplePickerController from \"Components/ReactHookForm/PeoplePickerController/PeoplePickerController\";\nimport { IAssignee } from \"Interfaces/IAssignee\";\nimport { IProgramProfile } from \"Interfaces/ProgramProfile/IProgramProfile\";\n\nexport const StudentProgramProfileEditForm = (\n  props: IStudentProgramProfileEditFormProps\n): ReactElement => {\n  const { isPanelOpen, setIsPanelOpen, defaultValues, shouldAutoAdvanceLevel } = props;\n\n  const {\n    control,\n    handleSubmit,\n    reset,\n    formState: { errors },\n  } = useForm({\n    defaultValues,\n    resolver: yupResolver(\n      Yup.object().shape({\n        programProfileStatusName: Yup.string().required(\"Program Profile Status is required\"),\n        programEndDate: Yup.date().required(\"Program end date is required\"),\n        levelStatusName: Yup.string().required(\"Milestone is required\"),\n        cpm: Yup.string().required(\"CPM is required\").nullable(),\n      })\n    ),\n  });\n\n  const dispatch = useDispatch();\n\n  const dismissPanel = (): void => {\n    setIsPanelOpen(false);\n    reset();\n  };\n\n  // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n  const save = () =>\n    handleSubmit((data) => {\n      return dispatch(updateProgramProfile(data as IProgramProfile));\n    });\n\n  const programProfileOperationStatus = useSelector(getProgramProfileOperationStatus);\n  const programProfileErrorMessage = useSelector(getProgramProfileUpdateErrorMessage);\n\n  useEffect(() => {\n    if (programProfileOperationStatus.update === OperationStatus.Succeeded) {\n      dispatch(fetchProgramProfile(defaultValues.userProfileId as number));\n      dismissPanel();\n    }\n  }, [programProfileOperationStatus.update === OperationStatus.Succeeded]);\n\n  const isSaving = programProfileOperationStatus.update === OperationStatus.Pending;\n\n  const mapAssigneesToOptions = (assignees: IAssignee[]): IPersonaProps[] => {\n    return assignees.map((assignee) => {\n      return {\n        text: `${assignee.firstName} ${assignee.lastName}`,\n        secondaryText: assignee.emailAddress,\n      };\n    });\n  };\n\n  return (\n    <form onSubmit={save()}>\n      <SidePanel\n        isOpen={isPanelOpen}\n        title=\"Edit Program Details\"\n        saveButtonLabel=\"Save\"\n        error={programProfileErrorMessage}\n        disableActions={isSaving}\n        onDismiss={dismissPanel}\n        onSave={save()}\n      >\n        <Stack tokens={{ childrenGap: \"1rem\" }}>\n          <StackItem>\n            <ComboBoxController\n              control={control}\n              errors={errors}\n              inputName=\"programProfileStatusName\"\n              isRequired={true}\n              labelDisplayName=\"Program Profile Status\"\n              options={MlsaProgramProfileStatuses}\n              isDisabled={isSaving}\n            />\n          </StackItem>\n          {defaultValues.availableCommunityProgramManagers && (\n            <StackItem>\n              <PeoplePickerController\n                control={control}\n                inputName=\"cpm\"\n                errors={errors}\n                labelDisplayName=\"CPM\"\n                isDisabled={false}\n                options={mapAssigneesToOptions(defaultValues.availableCommunityProgramManagers)}\n                keyPropertyName=\"secondaryText\"\n                defaultSelectedKey={defaultValues.cpm}\n                isRequired={true}\n                hasTooltip={true}\n                toolTipDisplayText=\"Select the Community Program Manager\"\n              />\n            </StackItem>\n          )}\n          <StackItem>\n            <DatePickerController\n              control={control}\n              errors={errors}\n              inputName=\"programEndDate\"\n              isRequired={true}\n              labelDisplayName=\"Program End Date\"\n              startDate={defaultValues.programEndDate}\n              isDisabled={isSaving}\n            />\n          </StackItem>\n          <StackItem>\n            <ComboBoxController\n              control={control}\n              errors={errors}\n              inputName=\"levelStatusName\"\n              isRequired={true}\n              labelDisplayName=\"Milestone\"\n              options={milestones}\n              isDisabled={isSaving}\n            />\n          </StackItem>\n          {!shouldAutoAdvanceLevel && (\n            <StackItem style={spanStyles}>Auto Advance Disabled</StackItem>\n          )}\n        </Stack>\n      </SidePanel>\n    </form>\n  );\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { useEffect, useState, ReactElement } from \"react\";\n\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { Redirect } from \"react-router-dom\";\n\nimport { CommandBar, Label, Spinner, SpinnerSize, Stack, StackItem, Text } from \"@fluentui/react\";\n\nimport { useAuth } from \"Authentication/AuthProvider\";\nimport { spinnerStyles } from \"Components/Common/SharedListStyles.styles\";\nimport {\n  bodyContainerStackStyles,\n  headerStackStyles,\n  headerTextStyles,\n  ContainerWrapper,\n} from \"Components/Common/SharedTableStyles.styles\";\nimport { commandBarStyles } from \"Components/StudentProfile/StudentProfile.styles\";\nimport { StudentProgramProfileEditForm } from \"Components/StudentProgramProfileEditForm/StudentProgramProfileEditForm\";\nimport { OperationStatus } from \"Constants/OperationStatus\";\nimport { RolesEnum } from \"Constants/RolesPermissionsConstants\";\nimport { fetchProgramProfile } from \"Dataflows/UserProfile/UserProfileAction\";\nimport {\n  getProgramProfile,\n  getProgramProfileErrorMessage,\n  getProgramProfileOperationStatus,\n} from \"Dataflows/UserProfile/UserProfileSelector\";\nimport { formatDate } from \"Utility/FormatHelper\";\n\nimport { IStudentProgramProfileProps } from \"./IStudentProgramProfileProps\";\nimport {\n  bodyColumnStackItemStyles,\n  bodyContainerStackTokens,\n  bodyRowStackStyles,\n  labelStyles,\n  spanStyles,\n} from \"./StudentProgramProfile.styles\";\n\nconst StudentProgramProfile = (props: IStudentProgramProfileProps): ReactElement => {\n  const { microsoftReferralId, userProfileId } = props;\n\n  const { isUserLoggedIn, loading, hasAnyRoles } = useAuth();\n  if (isUserLoggedIn && !hasAnyRoles && !loading) {\n    return <Redirect to=\"/unauthorized\" />;\n  }\n\n  const dispatch = useDispatch();\n  const programProfile = useSelector(getProgramProfile);\n  const programProfileOperationStatus = useSelector(getProgramProfileOperationStatus);\n  const programProfileErrorMessage = useSelector(getProgramProfileErrorMessage);\n\n  const [isPanelOpen, setIsPanelOpen] = useState(false);\n\n  useEffect(() => {\n    if (!!userProfileId) {\n      dispatch(fetchProgramProfile(userProfileId));\n    }\n  }, []);\n\n  const editProgramInformationClicked = (): void => {\n    setIsPanelOpen(true);\n  };\n\n  const formatDateOrUndefined = (date: Date | undefined): string => {\n    if (!!date) {\n      return formatDate(date);\n    } else {\n      return \"\";\n    }\n  };\n\n  const { hasRole } = useAuth();\n  const canEditProgramProfile =\n    hasRole(RolesEnum.MSA_REVIEWER) || hasRole(RolesEnum.MSA_PROGRAM_OWNER);\n\n  if (programProfileOperationStatus?.read === OperationStatus.Pending) {\n    return <Spinner size={SpinnerSize.large} styles={spinnerStyles} />;\n  } else if (\n    programProfileOperationStatus?.read === OperationStatus.Failed &&\n    programProfileErrorMessage\n  ) {\n    return <div>{programProfileErrorMessage}</div>;\n  }\n\n  const commandBarItems = [\n    {\n      key: \"editProgramProfile\",\n      text: \"Edit Program Details\",\n      iconProps: { iconName: \"Edit\" },\n      onClick: (): void => {\n        editProgramInformationClicked();\n      },\n    },\n  ];\n\n  return (\n    <>\n      {!programProfile ? (\n        <Spinner size={SpinnerSize.large} styles={spinnerStyles} />\n      ) : (\n        <Stack>\n          {canEditProgramProfile && (\n            <CommandBar\n              items={commandBarItems}\n              ariaLabel=\"Edit user actions\"\n              styles={commandBarStyles}\n            />\n          )}\n          <ContainerWrapper>\n            <Stack styles={headerStackStyles}>\n              <Text styles={headerTextStyles}>Program Details</Text>\n            </Stack>\n            <Stack styles={bodyContainerStackStyles} tokens={bodyContainerStackTokens}>\n              <Stack horizontal styles={bodyRowStackStyles}>\n                <StackItem styles={bodyColumnStackItemStyles}>\n                  <Label styles={labelStyles}>Application Status</Label>\n                  <Text>{programProfile?.applicationStatus}</Text>\n                </StackItem>\n                <StackItem styles={bodyColumnStackItemStyles}>\n                  <Label styles={labelStyles}>CPM</Label>\n                  <Text>{programProfile?.cpm}</Text>\n                </StackItem>\n              </Stack>\n              <Stack horizontal styles={bodyRowStackStyles}>\n                <StackItem styles={bodyColumnStackItemStyles}>\n                  <Label styles={labelStyles}>Date Last Modified</Label>\n                  <Text>{formatDateOrUndefined(programProfile?.dateLastModified)}</Text>\n                </StackItem>\n                <StackItem styles={bodyColumnStackItemStyles}>\n                  <Label styles={labelStyles}>Date Submitted</Label>\n                  <Text>{formatDateOrUndefined(programProfile?.dateSubmitted)}</Text>\n                </StackItem>\n              </Stack>\n              <Stack horizontal styles={bodyRowStackStyles}>\n                <StackItem styles={bodyColumnStackItemStyles}>\n                  <Label styles={labelStyles}>Program Profile Status</Label>\n                  <Text>{programProfile?.programProfileStatus}</Text>\n                </StackItem>\n                <StackItem styles={bodyColumnStackItemStyles}>\n                  <Label styles={labelStyles}>\n                    Milestone{\" \"}\n                    {!programProfile?.shouldAutoAdvanceLevel && (\n                      <span style={spanStyles}>Auto Advance Disabled</span>\n                    )}\n                  </Label>\n                  <Text>{programProfile?.levelStatusName}</Text>\n                </StackItem>\n              </Stack>\n              <Stack horizontal styles={bodyRowStackStyles}>\n                <StackItem styles={bodyColumnStackItemStyles}>\n                  <Label styles={labelStyles}>Program End Date</Label>\n                  <Text>{formatDateOrUndefined(programProfile?.programEndDate)}</Text>\n                </StackItem>\n                <StackItem styles={bodyColumnStackItemStyles}>\n                  <Label styles={labelStyles}>Sharing ID</Label>\n                  <Text>{microsoftReferralId}</Text>\n                </StackItem>\n              </Stack>\n            </Stack>\n          </ContainerWrapper>\n        </Stack>\n      )}\n      {isPanelOpen && (\n        <StudentProgramProfileEditForm\n          isPanelOpen={isPanelOpen}\n          setIsPanelOpen={setIsPanelOpen}\n          shouldAutoAdvanceLevel={!!programProfile?.shouldAutoAdvanceLevel}\n          defaultValues={{\n            cpm: programProfile?.cpm,\n            userProfileId,\n            programProfileStatusName: programProfile?.programProfileStatus,\n            programEndDate: programProfile?.programEndDate\n              ? new Date(programProfile?.programEndDate as Date)\n              : undefined,\n            levelStatusName: programProfile?.levelStatusName,\n            availableCommunityProgramManagers: programProfile?.availableCommunityProgramManagers,\n          }}\n        />\n      )}\n    </>\n  );\n};\n\nexport default StudentProgramProfile;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { useState } from \"react\";\n\nimport { useHistory } from \"react-router\";\n\nimport { ApplicationTabs } from \"Constants/ApplicationConstants\";\nimport { ProfileTabs } from \"Constants/ProfileConstants\";\n\n/**\n * Hook to manage the selected tab on a profile page.\n */\nexport const useProfileTabs = (): {\n  selectedTab: ProfileTabs;\n  setSelectedTab: (tab: ProfileTabs) => void;\n} => {\n  const history = useHistory();\n  const tab = new URLSearchParams(location.search).get(\"tab\");\n  const [selectedTab, setSelectedTabName] = useState<ProfileTabs>(\n    (tab as ProfileTabs) || ProfileTabs.Profile\n  );\n\n  const setSelectedTab = (tab: ProfileTabs): void => {\n    setSelectedTabName(tab);\n    history.replace({ search: `tab=${tab}` });\n  };\n\n  return { selectedTab, setSelectedTab };\n};\n\n/**\n * Hook to manage the selected tab on a application page.\n */\nexport const useApplicationTabs = (): {\n  selectedTab: ApplicationTabs;\n  setSelectedTab: (tab: ApplicationTabs) => void;\n} => {\n  const history = useHistory();\n  const tab = new URLSearchParams(location.search).get(\"tab\");\n  const [selectedTab, setSelectedTabName] = useState<ApplicationTabs>(\n    (tab as ApplicationTabs) || ApplicationTabs.ProfileInformation\n  );\n\n  const setSelectedTab = (tab: ApplicationTabs): void => {\n    setSelectedTabName(tab);\n    history.replace({ search: `tab=${tab}` });\n  };\n\n  return { selectedTab, setSelectedTab };\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { useEffect } from \"react\";\n\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { useHistory, useParams } from \"react-router-dom\";\n\nimport { ActionButton, Pivot, PivotItem, Spinner, SpinnerSize, Stack } from \"@fluentui/react\";\n\nimport * as UserProfileActions from \"Dataflows/UserProfile/UserProfileAction\";\nimport * as UserProfileSelector from \"Dataflows/UserProfile/UserProfileSelector\";\n\nimport ProfileHeader from \"Components/ProfileHeader/ProfileHeader\";\nimport StudentBenefitDetails from \"Components/StudentBenefitDetails/StudentBenefitDetails\";\nimport StudentComments from \"Components/StudentComments/StudentComments\";\nimport StudentProfile from \"Components/StudentProfile/StudentProfile\";\nimport StudentProgramProfile from \"Components/StudentProgramProfile/StudentProgramProfile\";\nimport { ProfileTabs } from \"Constants/ProfileConstants\";\nimport { TenantTypesEnum } from \"Constants/TenantTypes\";\nimport { DetailWrapper } from \"Containers/Common/CommonContainer.styles\";\nimport { AppState } from \"Dataflows/Reducers\";\nimport { useProfileTabs } from \"Utility/CustomTabHooks\";\nimport * as MLSABenefitsSelector from \"Dataflows/UserProfile/UserProfileSelector\";\n\nimport {\n  containerStackTokens,\n  wrapperStackStyles,\n} from \"../../Containers/MVP/MostValuableProfessionalDetailsContainer/MostValuableProfessionalDetailsContainer.styles\";\nimport { OperationStatus } from \"Constants/OperationStatus\";\n\n/**\n * Student Details functional component\n * @param props {IStudentDetailsProps} Student Details props.\n * @returns {React.ReactElement} Student Details Component.\n */\nconst StudentDetails = (): React.ReactElement => {\n  const history = useHistory();\n  const { id } = useParams<{ id: string }>();\n  const userProfileId = Number.parseInt(id);\n  const dispatch = useDispatch();\n  const { selectedTab, setSelectedTab } = useProfileTabs();\n\n  const claimingBenefitError = useSelector(MLSABenefitsSelector.getIsClaimingBenefitsError);\n  const isClaimingBenefitStatus = useSelector(MLSABenefitsSelector.getIsClaimingBenefitStatus);\n  const profileBenefits = useSelector(MLSABenefitsSelector.getProfileBenefits);\n\n  useEffect(() => {\n    if (userProfileId) {\n      dispatch(UserProfileActions.updateSelectedUserProfileId(userProfileId));\n      dispatch(UserProfileActions.loadUserProfile(userProfileId));\n    }\n  }, [userProfileId]);\n\n  const isCurrentUserProfileLoading = useSelector((state: AppState) =>\n    UserProfileSelector.isCurrentUserProfileLoading(state.userProfileState)\n  );\n  const selectedUserProfile = useSelector((state: AppState) =>\n    UserProfileSelector.getUserProfile(state.userProfileState)\n  );\n\n  /**\n   * Handler for when the back button is clicked.\n   * @returns {void} void no return for function.\n   */\n  const onBackClickEvent = (): void => {\n    history.goBack();\n  };\n\n  return (\n    <>\n      <Stack styles={wrapperStackStyles}>\n        <Stack>\n          <ActionButton\n            iconProps={{ iconName: \"RevToggleKey\" }}\n            ariaLabel=\"Back\"\n            onClick={onBackClickEvent}\n          >\n            Back\n          </ActionButton>\n        </Stack>\n        {isCurrentUserProfileLoading ? (\n          <Spinner size={SpinnerSize.large} />\n        ) : (\n          <Stack tokens={containerStackTokens}>\n            <ProfileHeader\n              userProfileId={selectedUserProfile.id}\n              firstName={selectedUserProfile.firstName}\n              lastName={selectedUserProfile.lastName}\n              primaryEmail={selectedUserProfile.primaryEmail}\n              secondaryEmail={selectedUserProfile.secondaryEmail}\n              tenants={selectedUserProfile.tenants}\n              currentTenant={TenantTypesEnum.MSP}\n              isPrivate={selectedUserProfile?.isPrivate}\n            />\n            <Stack>\n              <DetailWrapper>\n                <Pivot\n                  selectedKey={selectedTab}\n                  onLinkClick={(item: PivotItem | undefined): void => {\n                    setSelectedTab((item?.props.itemKey as ProfileTabs) || ProfileTabs.Profile);\n                  }}\n                >\n                  <PivotItem headerText=\"Profile\" itemKey={ProfileTabs.Profile}>\n                    <StudentProfile />\n                  </PivotItem>\n                  <PivotItem\n                    headerText=\"Program Information\"\n                    itemKey={ProfileTabs.ProgramInformation}\n                  >\n                    <StudentProgramProfile\n                      userProfileId={selectedUserProfile.id}\n                      microsoftReferralId={selectedUserProfile.microsoftReferralId}\n                    />\n                  </PivotItem>\n                  <PivotItem headerText=\"Benefits\" itemKey={ProfileTabs.Benefits}>\n                    <StudentBenefitDetails\n                      profileBenefits={profileBenefits}\n                      claimingBenefitError={claimingBenefitError}\n                      isClaimingBenefitStatus={isClaimingBenefitStatus as OperationStatus}\n                      claimBenefitReset={UserProfileActions.claimBenefitReset}\n                      claimBenefit={UserProfileActions.claimBenefit}\n                      getProfileBenefits={UserProfileActions.getProfileBenefits}\n                      tenantName={TenantTypesEnum.MLSA}\n                    />\n                  </PivotItem>\n                  <PivotItem headerText=\"Comments\" itemKey={ProfileTabs.Comments}>\n                    <StudentComments />\n                  </PivotItem>\n                </Pivot>\n              </DetailWrapper>\n            </Stack>\n          </Stack>\n        )}\n      </Stack>\n    </>\n  );\n};\n\nexport default StudentDetails;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { IFilterField } from \"Interfaces/IFilterField\";\nimport { IKeyText } from \"Interfaces/IKeyText\";\n\nimport { fieldTypes } from \"./FilterFields\";\nimport { RolesEnum, RoleNamesEnum } from \"./RolesPermissionsConstants\";\nimport { TenantTypesEnum } from \"./TenantTypes\";\n\nexport const defaultListingPageSize = 16;\n\nexport const accessControlUserStatusTypes = {\n  ACTIVE: \"Active\",\n  INACTIVE: \"In-Active\",\n};\n\n/**\n * Values for status dropdown\n * in sidebar filtering on access control page.\n */\nexport const accessControlUserStatus: IKeyText[] = [\n  {\n    key: \"true\",\n    text: accessControlUserStatusTypes.ACTIVE,\n  },\n  {\n    key: \"false\",\n    text: accessControlUserStatusTypes.INACTIVE,\n  },\n];\n\nexport const accessControlMultiple = \"Multiple\";\n\n/**\n * Values for role dropdown\n * in sidebar filtering on access control page.\n */\nexport const accessControlUserRole = {\n  MVP: [\n    {\n      key: RolesEnum.MVP_PROGRAM_OWNER,\n      text: RoleNamesEnum.PROGRAM_OWNER,\n      disabled: true,\n    },\n    {\n      key: RolesEnum.MVP_REVIEWER,\n      text: RoleNamesEnum.COMMUNITY_MANAGER,\n    },\n    {\n      key: RolesEnum.MVP_TECH_AREA_VALIDATOR,\n      text: RoleNamesEnum.PRODUCT_GROUP_PARTNER,\n    },\n    {\n      key: RolesEnum.MVP_BENEFITS_MANAGER,\n      text: RoleNamesEnum.BENEFITS_MANAGER,\n    },\n    {\n      key: RolesEnum.MVP_EXECUTIVE,\n      text: RoleNamesEnum.EXECUTIVE,\n    },\n    {\n      key: RolesEnum.MVP_BUSINESS_GROUP,\n      text: RoleNamesEnum.BUSINESS_GROUP,\n    },\n  ],\n  MLSA: [\n    {\n      key: RolesEnum.MSA_PROGRAM_OWNER,\n      text: RoleNamesEnum.PROGRAM_OWNER,\n      disabled: true,\n    },\n    {\n      key: RolesEnum.MSA_REVIEWER,\n      text: RoleNamesEnum.COMMUNITY_MANAGER,\n    },\n    {\n      key: RolesEnum.MSA_GUEST,\n      text: RoleNamesEnum.GUEST,\n    },\n    {\n      key: RolesEnum.MSA_BENEFITS_MANAGER,\n      text: RoleNamesEnum.BENEFITS_MANAGER,\n    },\n  ],\n  RD: [\n    {\n      key: RolesEnum.RD_PROGRAM_OWNER,\n      text: RoleNamesEnum.PROGRAM_OWNER,\n      disabled: true,\n    },\n    {\n      key: RolesEnum.RD_REVIEWER,\n      text: RoleNamesEnum.COMMUNITY_MANAGER,\n    },\n    {\n      key: RolesEnum.RD_GUEST,\n      text: RoleNamesEnum.GUEST,\n    },\n    {\n      key: RolesEnum.RD_BENEFITS_MANAGER,\n      text: RoleNamesEnum.BENEFITS_MANAGER,\n    },\n  ],\n};\n\n/**\n * TODO: This will come from backend.\n * Values for role dropdown\n * in sidebar filtering on access control page.\n */\nexport const accessControlRegions: IKeyText[] = [\n  {\n    key: \"United States\",\n    text: \"United States\",\n  },\n];\n\n/**\n * Default field strings\n * we use to set in reducer.\n * Also used in sidebar filtering.\n */\nexport const USER_STATUS = \"userStatus\";\n\nexport const COUNTRY_REGION = \"country\";\n\nexport const STATE_PROVINCE = \"stateProvince\";\n\nexport const ROLE = \"userRole\";\n\nexport const REGION = \"region\";\n\nexport const TECHNOLOGY_AREA = \"technologyarea\";\n\n/**\n * Constants used in the left side filtering menu\n * on the Access Control page for MLSA program.\n */\nexport const mlsaAccessControlFilterFields: IFilterField[] = [\n  {\n    key: USER_STATUS,\n    text: \"Status\",\n    type: fieldTypes.MULTI_SELECT,\n    options: accessControlUserStatus,\n  },\n  {\n    key: ROLE,\n    text: \"Roles\",\n    type: fieldTypes.MULTI_SELECT,\n    options: accessControlUserRole[TenantTypesEnum.MLSA],\n  },\n  {\n    key: REGION,\n    text: \"Region\",\n    type: fieldTypes.CL_REGION,\n  },\n  {\n    key: COUNTRY_REGION,\n    text: \"Country\",\n    type: fieldTypes.COUNTRY,\n  },\n  {\n    key: STATE_PROVINCE,\n    text: \"State/Province\",\n    type: fieldTypes.PROVINCE,\n  },\n];\n\n/**\n * Constants used in the left side filtering menu\n * on the Access Control page for MVP program.\n */\nexport const mvpAccessControlFilterFields: IFilterField[] = [\n  {\n    key: USER_STATUS,\n    text: \"Status\",\n    type: fieldTypes.MULTI_SELECT,\n    options: accessControlUserStatus,\n  },\n  {\n    key: ROLE,\n    text: \"Roles\",\n    type: fieldTypes.MULTI_SELECT,\n    options: accessControlUserRole[TenantTypesEnum.MVP],\n  },\n  {\n    key: REGION,\n    text: \"Region\",\n    type: fieldTypes.CL_REGION,\n  },\n  {\n    key: COUNTRY_REGION,\n    text: \"Country\",\n    type: fieldTypes.COUNTRY,\n  },\n  {\n    key: STATE_PROVINCE,\n    text: \"State/Province\",\n    type: fieldTypes.PROVINCE,\n  },\n  {\n    key: TECHNOLOGY_AREA,\n    text: \"Technology Areas\",\n    type: fieldTypes.TECHNOLOGY_AREA,\n  },\n];\n\n/**\n * Constants used in the left side filtering menu\n * on the Access Control page for RD program.\n */\nexport const rdAccessControlFilterFields: IFilterField[] = [\n  {\n    key: USER_STATUS,\n    text: \"Status\",\n    type: fieldTypes.MULTI_SELECT,\n    options: accessControlUserStatus,\n  },\n  {\n    key: ROLE,\n    text: \"Roles\",\n    type: fieldTypes.MULTI_SELECT,\n    options: accessControlUserRole[TenantTypesEnum.RD],\n  },\n  {\n    key: REGION,\n    text: \"Region\",\n    type: fieldTypes.CL_REGION,\n  },\n  {\n    key: COUNTRY_REGION,\n    text: \"Country\",\n    type: fieldTypes.COUNTRY,\n  },\n  {\n    key: STATE_PROVINCE,\n    text: \"State/Province\",\n    type: fieldTypes.PROVINCE,\n  },\n];\n\n/**\n * Default filter values.\n */\nexport const defaultFilterValues: {\n  fieldName: string;\n  value: string;\n}[] = [];\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport {\n  CREATE_USER,\n  CREATE_USER_FAIL,\n  CREATE_USER_SUCCESS,\n  UPDATE_SELECTED_USER,\n  UPDATE_SELECTED_USER_ID,\n  UPDATE_USER_LISTING_CURRENT_PAGE,\n  UPDATE_USER_LISTING_PAGE_SIZE,\n  UPDATE_USER_STATUS,\n  UPDATE_USER_STATUS_FAIL,\n  UPDATE_USER_STATUS_SUCCESS,\n  USER_LOAD,\n  USER_LOAD_FAIL,\n  USER_LOAD_SUCCESS,\n  USER_ROLE_CREATE,\n  USER_ROLE_CREATE_FAIL,\n  USER_ROLE_CREATE_SUCCESS,\n  USER_ROLE_DELETE,\n  USER_ROLE_DELETE_FAIL,\n  USER_ROLE_DELETE_SUCCESS,\n  USER_ROLE_UPDATE,\n  USER_ROLE_UPDATE_FAIL,\n  USER_ROLE_UPDATE_SUCCESS,\n  USER_ROLES_LOAD,\n  USER_ROLES_LOAD_FAIL,\n  USER_ROLES_LOAD_SUCCESS,\n  USERS_FILTER_COUNTRY_VALUE_REMOVE,\n  USERS_FILTER_PROVINCE_VALUE_REMOVE,\n  USERS_FILTER_VALUE_ADD,\n  USERS_FILTER_VALUE_REMOVE,\n  USERS_FILTER_VALUE_UPDATE,\n  USERS_RESET_PAGINATION_PROPS,\n  USERS_RESET_PROPS,\n  USERS_SEARCH,\n  USERS_SEARCH_FAIL,\n  USERS_SEARCH_SUCCESS,\n} from \"Constants/ActionTypes\";\nimport { IAccessControlUser } from \"Interfaces/AccessControl/IAccessControlUser\";\nimport { IUserRole } from \"Interfaces/AccessControl/IUserRole\";\nimport { IWriteAccessControlUser } from \"Interfaces/AccessControl/IWriteAccessControlUser\";\nimport { IWriteUpdateUserStatus } from \"Interfaces/AccessControl/IWriteUpdateUserStatus\";\nimport { IFilterValue } from \"Interfaces/IFilterValue\";\n\n/**\n * Action for when loading an user.\n * @interface\n */\nexport interface ILoadUser {\n  type: typeof USER_LOAD;\n  selectedUserId: number;\n}\n\n/**\n * Action for when an user is loaded successfully.\n * @interface\n */\nexport interface ILoadUserSuccess {\n  type: typeof USER_LOAD_SUCCESS;\n  user: IAccessControlUser;\n}\n\n/**\n * Action for when loading an user failed.\n * @interface\n */\nexport interface ILoadUserFail {\n  type: typeof USER_LOAD_FAIL;\n  loadSelectedUserError: string;\n}\n\n/**\n * Action for when adding selected filter value.\n * @interface\n */\nexport interface IAccessControlFilterValueAdd {\n  type: typeof USERS_FILTER_VALUE_ADD;\n  filterValue: IFilterValue;\n}\n\n/**\n * Action for when removing selected filter value.\n * @interface\n */\nexport interface IAccessControlFilterValueRemove {\n  type: typeof USERS_FILTER_VALUE_REMOVE;\n  filterValue: IFilterValue;\n}\n\n/**\n * Action for when removing selected filter province value.\n * @interface\n */\nexport interface IAccessControlFilterProvinceValueRemove {\n  type: typeof USERS_FILTER_PROVINCE_VALUE_REMOVE;\n}\n\n/**\n * Action for when removing selected filter country value.\n * @interface\n */\nexport interface IAccessControlFilterCountryValueRemove {\n  type: typeof USERS_FILTER_COUNTRY_VALUE_REMOVE;\n}\n\n/**\n * Action for when updating selected filter value.\n * @interface\n */\nexport interface IAccessControlFilterValueUpdate {\n  type: typeof USERS_FILTER_VALUE_UPDATE;\n  filterValue: IFilterValue;\n}\n\n/**\n * Action for when searching users.\n * @interface\n */\nexport interface ISearchUsers {\n  type: typeof USERS_SEARCH;\n  searchText: string;\n  tenant: string;\n  selectedAccessControlFilterValues: IFilterValue[];\n  searchPage: number;\n  pageSize: number;\n}\n\n/**\n * Action for when users were searched successfully.\n * @interface\n */\nexport interface ISearchUsersSuccess {\n  type: typeof USERS_SEARCH_SUCCESS;\n  users: IAccessControlUser[];\n  searchPage: number;\n  pageSize: number;\n  filteredCount: number;\n}\n\n/**\n * Action for when loading users failed.\n * @interface\n */\nexport interface ISearchUsersFail {\n  type: typeof USERS_SEARCH_FAIL;\n  error: string;\n}\n\n/**\n * Action for when resting props.\n * @interface\n */\nexport interface IResetProps {\n  type: typeof USERS_RESET_PROPS;\n}\n\n/**\n * Action for when resting pagination props.\n * @interface\n */\nexport interface IResetPaginationProps {\n  type: typeof USERS_RESET_PAGINATION_PROPS;\n}\n\n/**\n * Action to create an new user\n * @interface\n */\nexport interface ICreateUser {\n  type: typeof CREATE_USER;\n  tenant: string;\n  accessUser: IWriteAccessControlUser;\n}\n\n/**\n * Action for when creating user successfully.\n * @interface\n */\nexport interface ICreateUserSuccess {\n  type: typeof CREATE_USER_SUCCESS;\n  accessUser: IWriteAccessControlUser;\n}\n\n/**\n * Action for when creating users failed.\n * @interface\n */\nexport interface ICreateUserFail {\n  type: typeof CREATE_USER_FAIL;\n  errorMessage: string;\n}\n\n/**\n * Action to update the status of an user\n * @interface\n */\nexport interface IUpdateUserStatus {\n  type: typeof UPDATE_USER_STATUS;\n  tenant: string;\n  userId: number;\n  isActive: boolean;\n}\n\n/**\n * Action for when updating user status successfully.\n * @interface\n */\nexport interface IUpdateUserStatusSuccess {\n  type: typeof UPDATE_USER_STATUS_SUCCESS;\n  userStatus: IWriteUpdateUserStatus;\n}\n\n/**\n * Action for when updating user status failed.\n * @interface\n */\nexport interface IUpdateUserStatusFail {\n  type: typeof UPDATE_USER_STATUS_FAIL;\n  updateUserStatusError: string;\n}\n\n/**\n * Action for when updating user profile.\n * @interface\n */\nexport interface IUpdateSelectedUser {\n  type: typeof UPDATE_SELECTED_USER;\n  selectedUser: IAccessControlUser;\n}\n\n/**\n * Action for when setting the selected user id\n * @interface\n */\nexport interface IUpdateSelectedUserId {\n  type: typeof UPDATE_SELECTED_USER_ID;\n  selectedUserId: number;\n}\n\n/**\n * Action for when updating listing current page\n * @interface\n */\nexport interface IUpdateCurrentPage {\n  type: typeof UPDATE_USER_LISTING_CURRENT_PAGE;\n  currentPage: number;\n}\n\n/**\n * Action for when updating listing page size\n * @interface\n */\nexport interface IUpdatePageSize {\n  type: typeof UPDATE_USER_LISTING_PAGE_SIZE;\n  pageSize: number;\n}\n\n/**\n * Action for when loading the user roles.\n * @interface\n */\nexport interface ILoadUserRoles {\n  type: typeof USER_ROLES_LOAD;\n  email: string;\n  tenant: string;\n}\n\n/**\n * Action for when loading the user roles succeed.\n * @interface\n */\nexport interface ILoadUserRolesSuccess {\n  type: typeof USER_ROLES_LOAD_SUCCESS;\n  roles: IUserRole[];\n}\n\n/**\n * Action for when loading the user roles fail.\n * @interface\n */\nexport interface ILoadUserRolesFail {\n  type: typeof USER_ROLES_LOAD_FAIL;\n  message: string;\n}\n\n/**\n * Action for when creating a user role.\n * @interface\n */\nexport interface ICreateUserRole {\n  type: typeof USER_ROLE_CREATE;\n  tenant: string;\n  role: IUserRole;\n}\n\n/**\n * Action for when creating a user role succeed.\n * @interface\n */\nexport interface ICreateUserRoleSuccess {\n  type: typeof USER_ROLE_CREATE_SUCCESS;\n  role: IUserRole;\n}\n\n/**\n * Action for when creating a user role fail.\n * @interface\n */\nexport interface ICreateUserRoleFail {\n  type: typeof USER_ROLE_CREATE_FAIL;\n  message: string;\n}\n\n/**\n * Action for when updating a user role.\n * @interface\n */\nexport interface IUpdateUserRole {\n  type: typeof USER_ROLE_UPDATE;\n  tenant: string;\n  role: IUserRole;\n}\n\n/**\n * Action for when updating a user role succeed.\n * @interface\n */\nexport interface IUpdateUserRoleSuccess {\n  type: typeof USER_ROLE_UPDATE_SUCCESS;\n  role: IUserRole;\n}\n\n/**\n * Action for when updating a user role fail.\n * @interface\n */\nexport interface IUpdateUserRoleFail {\n  type: typeof USER_ROLE_UPDATE_FAIL;\n  message: string;\n}\n\n/**\n * Action for when deleting a user role.\n * @interface\n */\nexport interface IDeleteUserRole {\n  type: typeof USER_ROLE_DELETE;\n  roleId: number;\n}\n\n/**\n * Action for when deleting a user role succeed.\n * @interface\n */\nexport interface IDeleteUserRoleSuccess {\n  type: typeof USER_ROLE_DELETE_SUCCESS;\n  userRoleId: number;\n}\n\n/**\n * Action for when deleting a user role fail.\n * @interface\n */\nexport interface IDeleteUserRoleFail {\n  type: typeof USER_ROLE_DELETE_FAIL;\n  message: string;\n}\n\n/**\n * Action creator for USER_LOAD.\n */\nexport function loadUser(selectedUserId: number): AccessControlActionTypes {\n  return {\n    type: USER_LOAD,\n    selectedUserId,\n  };\n}\n\n/**\n * Action creator for USERS_LOAD_SUCCESS.\n * @param users the user profiles successfully loaded.\n */\nexport function loadUserSuccess(user: IAccessControlUser): AccessControlActionTypes {\n  return {\n    type: USER_LOAD_SUCCESS,\n    user,\n  };\n}\n\n/**\n * Action creator for USERS_LOAD_FAIL.\n * @param error the error message from the API.\n */\nexport function loadUserFail(loadSelectedUserError: string): AccessControlActionTypes {\n  return {\n    type: USER_LOAD_FAIL,\n    loadSelectedUserError,\n  };\n}\n\n/**\n * Action creator for USERS_FILTER_VALUE_ADD.\n * @param error the error message from the API.\n */\nexport function addAccessControlFilterValue(filterValue: IFilterValue): AccessControlActionTypes {\n  return {\n    type: USERS_FILTER_VALUE_ADD,\n    filterValue,\n  };\n}\n\n/**\n * Action creator for USERS_FILTER_VALUE_REMOVE.\n * @param error the error message from the API.\n */\nexport function removeAccessControlFilterValue(\n  filterValue: IFilterValue\n): AccessControlActionTypes {\n  return {\n    type: USERS_FILTER_VALUE_REMOVE,\n    filterValue,\n  };\n}\n\n/**\n * Action creator for USERS_FILTER_PROVINCE_VALUE_REMOVE.\n * @param error the error message from the API.\n */\nexport function removeAccessControlFilterProvinceValue(): AccessControlActionTypes {\n  return {\n    type: USERS_FILTER_PROVINCE_VALUE_REMOVE,\n  };\n}\n\n/**\n * Action creator for USERS_FILTER_COUNTRY_VALUE_REMOVE.\n * @param error the error message from the API.\n */\nexport function removeAccessControlFilterCountryValue(): AccessControlActionTypes {\n  return {\n    type: USERS_FILTER_COUNTRY_VALUE_REMOVE,\n  };\n}\n\n/**\n * Action creator for USERS_FILTER_VALUE_UPDATE.\n * @param error the error message from the API.\n */\nexport function updateAccessControlFilterValue(\n  filterValue: IFilterValue\n): AccessControlActionTypes {\n  return {\n    type: USERS_FILTER_VALUE_UPDATE,\n    filterValue,\n  };\n}\n\n/**\n * Action creator for USERS_SEARCH.\n */\nexport function searchUsers(\n  searchText: string,\n  tenant: string,\n  selectedAccessControlFilterValues: IFilterValue[],\n  searchPage: number,\n  pageSize: number\n): AccessControlActionTypes {\n  return {\n    type: USERS_SEARCH,\n    searchText,\n    tenant,\n    selectedAccessControlFilterValues,\n    searchPage,\n    pageSize,\n  };\n}\n\n/**\n * Action creator for USERS_SEARCH_SUCCESS.\n * @param users the user profiles successfully searched.\n */\nexport function searchUsersSuccess(\n  users: IAccessControlUser[],\n  searchPage: number,\n  pageSize: number,\n  filteredCount: number\n): AccessControlActionTypes {\n  return {\n    type: USERS_SEARCH_SUCCESS,\n    users,\n    searchPage,\n    pageSize,\n    filteredCount,\n  };\n}\n\n/**\n * Action creator for USERS_SEARCH_FAIL.\n * @param error the error message from the API.\n */\nexport function searchUsersFail(error: string): AccessControlActionTypes {\n  return {\n    type: USERS_SEARCH_FAIL,\n    error,\n  };\n}\n\n/**\n * Action creator for ACTIVITY_RESET_PROPS.\n * @returns {AccessControlActionTypes} The action type.\n */\nexport function resetProps(): AccessControlActionTypes {\n  return {\n    type: USERS_RESET_PROPS,\n  };\n}\n\n/**\n * Action creator for ACTIVITY_RESET_PAGINATION_PROPS.\n * @returns {AccessControlActionTypes} The action type.\n */\nexport function resetPaginationProps(): AccessControlActionTypes {\n  return {\n    type: USERS_RESET_PAGINATION_PROPS,\n  };\n}\n\n/**\n * Action creator for CREATE_USER.\n * @param {string} tenant The tenant.\n * @param {IWriteAccessControlUser} accessUser Access user to create.\n * @returns {AccessControlActionTypes} The action type.\n */\nexport function createUser(\n  tenant: string,\n  accessUser: IWriteAccessControlUser\n): AccessControlActionTypes {\n  return {\n    type: CREATE_USER,\n    tenant: tenant,\n    accessUser: accessUser,\n  };\n}\n\n/**\n * Action creator for CREATE_USER_SUCCESS.\n * @param {IWriteAccessControlUser} accessUser Access user created.\n * @returns {AccessControlActionTypes} The action type.\n */\nexport function createUserSuccess(accessUser: IWriteAccessControlUser): AccessControlActionTypes {\n  return {\n    type: CREATE_USER_SUCCESS,\n    accessUser: accessUser,\n  };\n}\n\n/**\n * Action creator for CREATE_USER_FAIL.\n * @param {string} errorMessage The message describing why the status fetch failed.\n * @returns {AccessControlActionTypes} The action type.\n */\nexport function createUserFail(errorMessage: string): AccessControlActionTypes {\n  return {\n    type: CREATE_USER_FAIL,\n    errorMessage: errorMessage,\n  };\n}\n\n/**\n * Action creator for UPDATE_USER_STATUS.\n * @param {string} tenant The tenant.\n * @param {number} userId Access user id to update.\n * @param {boolean} isActive Access user status to update.\n * @returns {AccessControlActionTypes} The action type.\n */\nexport function updateUserStatus(\n  tenant: string,\n  userId: number,\n  isActive: boolean\n): AccessControlActionTypes {\n  return {\n    type: UPDATE_USER_STATUS,\n    tenant,\n    userId,\n    isActive,\n  };\n}\n\n/**\n * Action creator for UPDATE_USER_STATUS_SUCCESS.\n * @param {IWriteUpdateUserStatus} userStatus Updated user status info.\n * @returns {AccessControlActionTypes} The action type.\n */\nexport function updateUserStatusSuccess(\n  userStatus: IWriteUpdateUserStatus\n): AccessControlActionTypes {\n  return {\n    type: UPDATE_USER_STATUS_SUCCESS,\n    userStatus,\n  };\n}\n\n/**\n * Action creator for UPDATE_USER_STATUS_FAIL.\n * @param error the error message from the API.\n */\nexport function updateUserStatusFail(updateUserStatusError: string): AccessControlActionTypes {\n  return {\n    type: UPDATE_USER_STATUS_FAIL,\n    updateUserStatusError,\n  };\n}\n\n/**\n * Action creator for UPDATE_SELECTED_USER.\n */\nexport function updateSelectedUser(selectedUser: IAccessControlUser): AccessControlActionTypes {\n  return {\n    type: UPDATE_SELECTED_USER,\n    selectedUser,\n  };\n}\n\n/**\n * Action creator for UPDATE_SELECTED_USER_ID.\n */\nexport function updateSelectedUserId(selectedUserId: number): AccessControlActionTypes {\n  return {\n    type: UPDATE_SELECTED_USER_ID,\n    selectedUserId,\n  };\n}\n\n/**\n * Action creator for UPDATE_USER_LISTING_CURRENT_PAGE.\n */\nexport function updateCurrentPage(currentPage: number): AccessControlActionTypes {\n  return {\n    type: UPDATE_USER_LISTING_CURRENT_PAGE,\n    currentPage,\n  };\n}\n\n/**\n * Action creator for UPDATE_USER_LISTING_PAGE_SIZE.\n */\nexport function updatePageSize(pageSize: number): AccessControlActionTypes {\n  return {\n    type: UPDATE_USER_LISTING_PAGE_SIZE,\n    pageSize,\n  };\n}\n\n/**\n * Action create for USER_ROLES_LOAD\n */\nexport function loadUserRoles(tenant: string, email: string): AccessControlActionTypes {\n  return {\n    type: USER_ROLES_LOAD,\n    email,\n    tenant,\n  };\n}\n\n/**\n * Action create for USER_ROLES_LOAD_SUCCESS\n */\nexport function loadUserRolesSuccess(roles: IUserRole[]): AccessControlActionTypes {\n  return {\n    type: USER_ROLES_LOAD_SUCCESS,\n    roles,\n  };\n}\n\n/**\n * Action create for USER_ROLES_LOAD_FAIL\n */\nexport function loadUserRolesFail(message: string): AccessControlActionTypes {\n  return {\n    type: USER_ROLES_LOAD_FAIL,\n    message,\n  };\n}\n\n/**\n * Action create for USER_ROLES_LOAD\n */\nexport function deleteUserRole(roleId: number): AccessControlActionTypes {\n  return {\n    type: USER_ROLE_DELETE,\n    roleId,\n  };\n}\n\n/**\n * Action create for USER_ROLE_CREATE\n */\nexport function createUserRole(tenant: string, role: IUserRole): AccessControlActionTypes {\n  return {\n    type: USER_ROLE_CREATE,\n    tenant,\n    role,\n  };\n}\n\n/**\n * Action create for USER_ROLE_CREATE_SUCCESS\n */\nexport function createUserRoleSuccess(role: IUserRole): AccessControlActionTypes {\n  return {\n    type: USER_ROLE_CREATE_SUCCESS,\n    role,\n  };\n}\n\n/**\n * Action create for USER_ROLE_CREATE_FAIL\n */\nexport function createUserRoleFail(message: string): AccessControlActionTypes {\n  return {\n    type: USER_ROLE_CREATE_FAIL,\n    message,\n  };\n}\n\n/**\n * Action create for USER_ROLE_UPDATE\n */\nexport function updateUserRole(tenant: string, role: IUserRole): AccessControlActionTypes {\n  return {\n    type: USER_ROLE_UPDATE,\n    tenant,\n    role,\n  };\n}\n\n/**\n * Action create for USER_ROLE_UPDATE_SUCCESS\n */\nexport function updateUserRoleSuccess(role: IUserRole): AccessControlActionTypes {\n  return {\n    type: USER_ROLE_UPDATE_SUCCESS,\n    role,\n  };\n}\n\n/**\n * Action create for USER_ROLE_UPDATE_FAIL\n */\nexport function updateUserRoleFail(message: string): AccessControlActionTypes {\n  return {\n    type: USER_ROLE_UPDATE_FAIL,\n    message,\n  };\n}\n\n/**\n * Action create for USER_ROLE_DELETE_SUCCESS\n */\nexport function deleteUserRoleSuccess(userRoleId: number): AccessControlActionTypes {\n  return {\n    type: USER_ROLE_DELETE_SUCCESS,\n    userRoleId,\n  };\n}\n\n/**\n * Action create for USER_ROLES_LOAD_FAIL\n */\nexport function deleteUserRoleFail(message: string): AccessControlActionTypes {\n  return {\n    type: USER_ROLE_DELETE_FAIL,\n    message,\n  };\n}\n\nexport type AccessControlActionTypes =\n  | ILoadUser\n  | ILoadUserSuccess\n  | ILoadUserFail\n  | IAccessControlFilterValueAdd\n  | IAccessControlFilterValueRemove\n  | IAccessControlFilterProvinceValueRemove\n  | IAccessControlFilterCountryValueRemove\n  | IAccessControlFilterValueUpdate\n  | ISearchUsers\n  | ISearchUsersSuccess\n  | ISearchUsersFail\n  | IResetProps\n  | IResetPaginationProps\n  | ICreateUser\n  | ICreateUserSuccess\n  | ICreateUserFail\n  | IUpdateUserStatus\n  | IUpdateUserStatusSuccess\n  | IUpdateUserStatusFail\n  | IUpdateSelectedUser\n  | IUpdateSelectedUserId\n  | IUpdateCurrentPage\n  | IUpdatePageSize\n  | ILoadUserRoles\n  | ILoadUserRolesSuccess\n  | ILoadUserRolesFail\n  | ICreateUserRole\n  | ICreateUserRoleSuccess\n  | ICreateUserRoleFail\n  | IUpdateUserRole\n  | IUpdateUserRoleSuccess\n  | IUpdateUserRoleFail\n  | IDeleteUserRole\n  | IDeleteUserRoleSuccess\n  | IDeleteUserRoleFail;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nexport const USER_LOAD = \"USER_LOAD\";\nexport const USER_LOAD_SUCCESS = \"USER_LOAD_SUCCESS\";\nexport const USER_LOAD_FAIL = \"USER_LOAD_FAIL\";\n\nexport const USERS_FILTER_VALUE_ADD = \"USERS_FILTER_VALUE_ADD\";\nexport const USERS_FILTER_VALUE_REMOVE = \"USERS_FILTER_VALUE_REMOVE\";\nexport const USERS_FILTER_PROVINCE_VALUE_REMOVE = \"USERS_FILTER_PROVINCE_VALUE_REMOVE\";\nexport const USERS_FILTER_COUNTRY_VALUE_REMOVE = \"USERS_FILTER_COUNTRY_VALUE_REMOVE\";\nexport const USERS_FILTER_VALUE_UPDATE = \"USERS_FILTER_VALUE_UPDATE\";\n\nexport const USERS_SEARCH = \"USERS_SEARCH\";\nexport const USERS_SEARCH_SUCCESS = \"USERS_SEARCH_SUCCESS\";\nexport const USERS_SEARCH_FAIL = \"USERS_SEARCH_FAIL\";\n\nexport const USERS_RESET_PROPS = \"USERS_RESET_PROPS\";\nexport const USERS_RESET_PAGINATION_PROPS = \"USERS_RESET_PAGINATION_PROPS\";\n\nexport const CREATE_USER = \"CREATE_USER\";\nexport const CREATE_USER_SUCCESS = \"CREATE_USER_SUCCESS\";\nexport const CREATE_USER_FAIL = \"CREATE_USER_FAIL\";\n\nexport const UPDATE_USER_STATUS = \"UPDATE_USER_STATUS\";\nexport const UPDATE_USER_STATUS_SUCCESS = \"UPDATE_USER_STATUS_SUCCESS\";\nexport const UPDATE_USER_STATUS_FAIL = \"UPDATE_USER_STATUS_FAIL\";\n\nexport const UPDATE_SELECTED_USER = \"UPDATE_SELECTED_USER\";\nexport const UPDATE_SELECTED_USER_ID = \"UPDATE_SELECTED_USER_ID\";\n\nexport const UPDATE_USER_LISTING_CURRENT_PAGE = \"UPDATE_USER_LISTING_CURRENT_PAGE\";\nexport const UPDATE_USER_LISTING_PAGE_SIZE = \"UPDATE_USER_LISTING_PAGE_SIZE\";\n\nexport const USER_ROLES_LOAD = \"USER_ROLES_LOAD\";\nexport const USER_ROLES_LOAD_SUCCESS = \"USER_ROLES_LOAD_SUCCESS\";\nexport const USER_ROLES_LOAD_FAIL = \"USER_ROLES_LOAD_FAIL\";\n\nexport const USER_ROLE_DELETE = \"USER_ROLES_DELETE\";\nexport const USER_ROLE_DELETE_SUCCESS = \"USER_ROLE_DELETE_SUCCESS\";\nexport const USER_ROLE_DELETE_FAIL = \"USER_ROLE_DELETE_FAIL\";\n\nexport const USER_ROLE_CREATE = \"USER_ROLES_CREATE\";\nexport const USER_ROLE_CREATE_SUCCESS = \"USER_ROLE_CREATE_SUCCESS\";\nexport const USER_ROLE_CREATE_FAIL = \"USER_ROLE_CREATE_FAIL\";\n\nexport const USER_ROLE_UPDATE = \"USER_ROLES_UPDATE\";\nexport const USER_ROLE_UPDATE_SUCCESS = \"USER_ROLE_UPDATE_SUCCESS\";\nexport const USER_ROLE_UPDATE_FAIL = \"USER_ROLE_UPDATE_FAIL\";\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nexport const TECHAREADATA_LOAD = \"TECHAREADATA_LOAD\";\nexport const TECHAREADATA_LOAD_SUCCESS = \"TECHAREADATA_LOAD_SUCCESS\";\nexport const TECHAREADATA_LOAD_FAILURE = \"TECHAREADATA_LOAD_FAILURE\";\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { ITechnologyAreaModelData } from \"Interfaces/SiteContent/ITechnologyAreaModelData\";\n\nimport {\n  TECHAREADATA_LOAD,\n  TECHAREADATA_LOAD_FAILURE,\n  TECHAREADATA_LOAD_SUCCESS,\n} from \"./TechnologyAreaTypes\";\n\n/**\n *@interface\n */\nexport interface IGetTechnologyAreas {\n  type: typeof TECHAREADATA_LOAD;\n  tenant: string;\n}\n\n/**\n *@interface\n */\nexport interface IGetTechnologyAreaSuccess {\n  type: typeof TECHAREADATA_LOAD_SUCCESS;\n  technologyAreaOptionList: ITechnologyAreaModelData[];\n}\n\n/**\n * @interface\n */\nexport interface IGetTechnologyAreaFailure {\n  type: typeof TECHAREADATA_LOAD_FAILURE;\n  technologyAreaLoadError: string;\n}\n\n/**\n *@function Function to get technology areas\n @param {string} tenant Name of the tenant\n @returns { TechnologyAreaActionTypes }\n */\nexport const getTechnologyAreas = (tenant: string): TechnologyAreaActionTypes => ({\n  type: TECHAREADATA_LOAD,\n  tenant: tenant,\n});\n\n/**\n *\n * @param applicationFormTechnologyFocusArea\n */\nexport const getTechnologyAreaSuccess = (\n  technologyAreaOptionList: ITechnologyAreaModelData[]\n): TechnologyAreaActionTypes => ({\n  type: TECHAREADATA_LOAD_SUCCESS,\n  technologyAreaOptionList,\n});\n\n/**\n *\n * @param errorMessage\n */\nexport const getTechnologyAreaFailure = (\n  technologyAreaLoadError: string\n): TechnologyAreaActionTypes => ({\n  type: TECHAREADATA_LOAD_FAILURE,\n  technologyAreaLoadError,\n});\n\nexport type TechnologyAreaActionTypes =\n  | IGetTechnologyAreas\n  | IGetTechnologyAreaSuccess\n  | IGetTechnologyAreaFailure;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nexport const CL_REGION_LOAD = \"CL_REGION_LOAD\";\nexport const CL_REGION_LOAD_SUCCESS = \"CL_REGION_LOAD_SUCCESS\";\nexport const CL_REGION_LOAD_FAILURE = \"CL_REGION_LOAD_FAILURE\";\n\nexport const GEO_DATA_LOAD = \"GEO_DATA_LOAD\";\nexport const GEO_DATA_LOAD_SUCCESS = \"GEO_DATA_LOAD_SUCCESS\";\nexport const GEO_DATA_LOAD_FAILURE = \"GEO_DATA_LOAD_FAILURE\";\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { IClRegionData } from \"Interfaces/SiteContent/IClRegionData\";\n\nimport {\n  CL_REGION_LOAD,\n  CL_REGION_LOAD_FAILURE,\n  CL_REGION_LOAD_SUCCESS,\n  GEO_DATA_LOAD,\n  GEO_DATA_LOAD_FAILURE,\n  GEO_DATA_LOAD_SUCCESS,\n} from \"./ClRegionActionTypes\";\n\n/**\n * Action for getting the cl regions\n */\nexport interface IGetClRegions {\n  type: typeof CL_REGION_LOAD;\n}\n\n/**\n * Action getting the cl regions when successful\n */\nexport interface IGetClRegionsSuccess {\n  type: typeof CL_REGION_LOAD_SUCCESS;\n  regions: IClRegionData[];\n}\n\n/**\n * Action getting the cl regions when failure\n */\nexport interface IGetClRegionsFailure {\n  type: typeof CL_REGION_LOAD_FAILURE;\n  regionsLoadError: string;\n}\n\n/**\n * Action for getting the geo data.\n */\nexport interface IGetGeoData {\n  type: typeof GEO_DATA_LOAD;\n}\n\n/**\n * Action for getting the geo data success.\n */\nexport interface IGetGeoDataSuccess {\n  type: typeof GEO_DATA_LOAD_SUCCESS;\n  geoData: IClRegionData[];\n}\n\n/**\n * Action for getting the geo data failure.\n */\nexport interface IGetGeoDataFailure {\n  type: typeof GEO_DATA_LOAD_FAILURE;\n  geoDataLoadError: string;\n}\n\n/**\n * Action creator for getting the cl regions\n */\nexport const getClRegions = (): ClRegionsActionTypes => ({\n  type: CL_REGION_LOAD,\n});\n\n/**\n * Action creator for getting cl regions when success\n * @param regions\n */\nexport const getClRegionsSuccess = (regions: IClRegionData[]): ClRegionsActionTypes => ({\n  type: CL_REGION_LOAD_SUCCESS,\n  regions,\n});\n\n/**\n * Action creator for getting cl regions when failure\n * @param regionsLoadError\n */\nexport const getClRegionsFailure = (regionsLoadError: string): ClRegionsActionTypes => ({\n  type: CL_REGION_LOAD_FAILURE,\n  regionsLoadError,\n});\n\n/**\n * Action creator for getting the geo data.\n */\nexport const getGeoData = (): ClRegionsActionTypes => ({\n  type: GEO_DATA_LOAD,\n});\n\n/**\n * Action creator for getting geo data when success\n * @param regions\n */\nexport const getGeoDataSuccess = (geoData: IClRegionData[]): ClRegionsActionTypes => ({\n  type: GEO_DATA_LOAD_SUCCESS,\n  geoData,\n});\n\n/**\n * Action creator for getting geo data when failure\n * @param geoDataLoadError\n */\nexport const getGeoDataFailure = (geoDataLoadError: string): ClRegionsActionTypes => ({\n  type: GEO_DATA_LOAD_FAILURE,\n  geoDataLoadError,\n});\n\nexport type ClRegionsActionTypes =\n  | IGetClRegions\n  | IGetClRegionsSuccess\n  | IGetClRegionsFailure\n  | IGetGeoData\n  | IGetGeoDataSuccess\n  | IGetGeoDataFailure;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React from \"react\";\nimport { IDisplayableField } from \"../../Interfaces/IDisplayableField\";\nimport { IAccessControlDetailProps } from \"./IAccessControlDetailProps\";\n\nconst accessControlFields = [\n  {\n    name: \"id\",\n    label: \"ID\",\n    type: \"number\",\n  },\n  {\n    name: \"firstName\",\n    label: \"First Name\",\n    type: \"text\",\n  },\n  {\n    name: \"lastName\",\n    label: \"Last Name\",\n    type: \"text\",\n  },\n  {\n    name: \"email\",\n    label: \"Email\",\n    text: \"text\",\n  },\n  {\n    name: \"role\",\n    label: \"Role\",\n    type: \"date\",\n  },\n  {\n    name: \"region\",\n    label: \"Region\",\n    type: \"text\",\n  },\n  {\n    name: \"status\",\n    label: \"Status\",\n    type: \"text\",\n  },\n  {\n    name: \"modifiedDate\",\n    label: \"Last Modified\",\n    type: \"date\",\n  },\n] as IDisplayableField[];\n\nclass AccessControlDetails extends React.Component<IAccessControlDetailProps> {\n  render(): React.ReactElement<IAccessControlDetailProps> {\n    return (\n      <>\n        <p>This will be the access control details component.</p>\n      </>\n    );\n  }\n}\n\nexport default AccessControlDetails;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { IKeyText } from \"../Interfaces/IKeyText\";\n\nexport const defaultListingPageSize = 16;\n\n/**\n * TODO: Note that the list of approved by admins is a constant for now until backend work is completed to get up-to-date list.\n * The admin list.\n */\nexport const ADMIN_LIST: IKeyText[] = [\n  {\n    key: \"v-aablum@microsoft.com\",\n    text: \"v-aablum@microsoft.com\",\n  },\n  {\n    key: \"v-duran@microsoft.com\",\n    text: \"v-duran@microsoft.com\",\n  },\n  {\n    key: \"cledev@microsoft.com\",\n    text: \"cledev@microsoft.com\",\n  },\n  {\n    key: \"v-dmares@microsoft.com\",\n    text: \"v-dmares@microsoft.com\",\n  },\n  {\n    key: \"David.Molina@microsoft.com\",\n    text: \"David.Molina@microsoft.com\",\n  },\n  {\n    key: \"mvpprodrobys@microsoft.com\",\n    text: \"mvpprodrobys@microsoft.com\",\n  },\n  {\n    key: \"Eoin.Murphy@microsoft.com\",\n    text: \"Eoin.Murphy@microsoft.com\",\n  },\n  {\n    key: \"v-frankz@microsoft.com\",\n    text: \"v-frankz@microsoft.com\",\n  },\n  {\n    key: \"v-madrsa@microsoft.com\",\n    text: \"v-madrsa@microsoft.com\",\n  },\n  {\n    key: \"Meghana.Garise@microsoft.com\",\n    text: \"Meghana.Garise@microsoft.com\",\n  },\n  {\n    key: \"narayar@microsoft.com\",\n    text: \"narayar@microsoft.com\",\n  },\n  {\n    key: \"v-ncastaneda@microsoft.com\",\n    text: \"v-ncastaneda@microsoft.com\",\n  },\n  {\n    key: \"pablo.veramendi@microsoft.com\",\n    text: \"pablo.veramendi@microsoft.com\",\n  },\n  {\n    key: \"v-wsarah@microsoft.com\",\n    text: \"v-wsarah@microsoft.com\",\n  },\n  {\n    key: \"v-szwu@microsoft.com\",\n    text: \"v-szwu@microsoft.com\",\n  },\n];\n\n/**\n * The list of supported sorting columns.\n * @constant\n */\nexport const SortingColumns = {\n  FirstName: \"firstName\",\n  LastName: \"lastName\",\n  Country: \"countryRegion\",\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\nimport { IFilterField } from \"../Interfaces/IFilterField\";\nimport { IKeyText } from \"../Interfaces/IKeyText\";\nimport { ADMIN_LIST } from \"./AdminConstants\";\nimport { fieldTypes } from \"./FilterFields\";\nimport { milestones } from \"./ProfileConstants\";\n\nexport const defaultListingPageSize = 16;\n\nexport const eventStatusTypes = {\n  APPROVED: \"Approved\",\n  APPROVEDINCENTIVES: \"Approved with Incentives\",\n  ONHOLD: \"On Hold\",\n  DENIED: \"Denied\",\n  SCHEDULED: \"Scheduled\",\n  SUBMITTED: \"Submitted\",\n};\n\n/**\n * Values for event status\n */\nexport const eventStatus: IKeyText[] = [\n  {\n    key: \"Scheduled\",\n    text: eventStatusTypes.SCHEDULED,\n  },\n  {\n    key: \"Approved\",\n    text: eventStatusTypes.APPROVED,\n  },\n  {\n    key: \"ApprovedWithIncentives\",\n    text: eventStatusTypes.APPROVEDINCENTIVES,\n  },\n  { key: \"Returned\", text: eventStatusTypes.ONHOLD },\n  { key: \"Denied\", text: eventStatusTypes.DENIED },\n  { key: \"Submitted\", text: eventStatusTypes.SUBMITTED },\n];\n\n/**\n * Values for event approval type\n */\nexport const approvalTypes: IKeyText[] = [\n  {\n    key: \"Approved\",\n    text: \"Approved\",\n  },\n  {\n    key: \"ApprovedWithIncentives\",\n    text: \"Approved with Incentives\",\n  },\n  {\n    key: \"Returned\",\n    text: \"On Hold\",\n  },\n  {\n    key: \"Denied\",\n    text: \"Denied\",\n  },\n];\n\n/**\n * Values for event type\n */\nexport const eventTypes: IKeyText[] = [\n  {\n    key: \"Conference\",\n    text: \"Conference\",\n  },\n  {\n    key: \"Hackathon\",\n    text: \"Hackathon\",\n  },\n  {\n    key: \"Hands-on-Lab\",\n    text: \"Hands-on-Lab\",\n  },\n  {\n    key: \"Lecture\",\n    text: \"Lecture\",\n  },\n  {\n    key: \"Meetup\",\n    text: \"Meetup\",\n  },\n  {\n    key: \"Roundtable/Panel\",\n    text: \"Roundtable/Panel\",\n  },\n  {\n    key: \"Unconference\",\n    text: \"Unconference\",\n  },\n  {\n    key: \"User Group\",\n    text: \"User Group\",\n  },\n  {\n    key: \"Workshop\",\n    text: \"Workshop\",\n  },\n  {\n    key: \"Other\",\n    text: \"Other\",\n  },\n];\n\n/**\n * Values for event format\n */\nexport const EVENT_FORMAT_ONLINE_TEXT = \"Online\";\nexport const eventFormats: IKeyText[] = [\n  {\n    key: \"Hybrid\",\n    text: \"Hybrid\",\n  },\n  {\n    key: \"Online\",\n    text: EVENT_FORMAT_ONLINE_TEXT,\n  },\n  {\n    key: \"In-Person\",\n    text: \"In-Person\",\n  },\n];\n\nexport const scheduledApprovalStatus = eventStatus.filter((item) => item.key === \"Scheduled\")[0]\n  .key;\nexport const returnedApprovalStatus = eventStatus.filter((item) => item.key === \"Returned\")[0].key;\n\nexport const EVENT_ORGANIZER = \"Organizer\";\n\n/**\n * Setting of constants for default field strings\n * we use to set in reducer.\n */\nexport const EVENT_STATUS = \"eventStatus\";\n\nexport const EVENT_COUNTRY_REGION = \"country\";\n\nexport const EVENT_STATE_PROVINCE = \"eventStateProvince\";\n\nexport const EVENT_TYPE = \"eventType\";\n\nexport const EVENT_FORMAT = \"eventFormat\";\n\nexport const EVENT_START_DATE = \"eventStartDate\";\n\nexport const EVENT_END_DATE = \"eventEndDate\";\n\nexport const EVENT_STUDENT_MILESTONE = \"eventStudentMilestone\";\n\nexport const EVENT_LAST_REVIEWED_BY = \"eventLastReviewedBy\";\n\n/**\n * Sidebar filter constants used for rendering\n */\nexport const eventFilterFields: IFilterField[] = [\n  {\n    key: EVENT_STATUS,\n    text: \"Event Status\",\n    type: fieldTypes.MULTI_SELECT,\n    options: eventStatus,\n  },\n  {\n    key: EVENT_TYPE,\n    text: \"Event Type\",\n    type: fieldTypes.MULTI_SELECT,\n    options: eventTypes,\n  },\n  {\n    key: EVENT_FORMAT,\n    text: \"Event Format\",\n    type: fieldTypes.FORMAT,\n    options: eventFormats,\n  },\n  {\n    key: EVENT_COUNTRY_REGION,\n    text: \"Country/Region\",\n    type: fieldTypes.COUNTRY,\n  },\n  {\n    key: EVENT_STATE_PROVINCE,\n    text: \"State/Province\",\n    type: fieldTypes.PROVINCE,\n  },\n  {\n    key: EVENT_START_DATE,\n    text: \"Event Start Date\",\n    type: fieldTypes.DATE_PICKER,\n  },\n  {\n    key: EVENT_END_DATE,\n    text: \"Event End Date\",\n    type: fieldTypes.DATE_PICKER,\n  },\n  {\n    key: EVENT_LAST_REVIEWED_BY,\n    text: \"Event Last Reviewed By\",\n    type: fieldTypes.MULTI_SELECT,\n    options: ADMIN_LIST,\n  },\n  {\n    key: EVENT_STUDENT_MILESTONE,\n    text: \"Student Milestone\",\n    type: fieldTypes.MULTI_SELECT,\n    options: milestones,\n  },\n];\n\n/**\n * Default filter values for events.\n */\nexport const defaultEventFilterValues: {\n  fieldName: string;\n  value: string;\n}[] = [\n  { fieldName: EVENT_STATUS, value: scheduledApprovalStatus },\n  { fieldName: EVENT_STATUS, value: returnedApprovalStatus },\n];\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { IFilterField } from \"Interfaces/IFilterField\";\nimport { IKeyText } from \"Interfaces/IKeyText\";\n\nimport { fieldTypes } from \"./FilterFields\";\n\nexport const defaultListingPageSize = 16;\n\nexport enum VisualStudioBenefitStatusEnum {\n  Assign = \"Assigned\",\n  Remove = \"Removed\",\n}\n\nconst AWARD_PERIOD = \"awardPeriod\";\nconst BENEFIT_STATUS = \"benefitStatus\";\nconst EXPIRATION_START_DATE = \"expirationStartDate\";\nconst EXPIRATION_END_DATE = \"expirationEndDate\";\n\nexport const visualStudioBenefitStatus: IKeyText[] = [\n  {\n    key: \"assign\",\n    text: VisualStudioBenefitStatusEnum.Assign,\n  },\n  {\n    key: \"remove\",\n    text: VisualStudioBenefitStatusEnum.Remove,\n  },\n];\n\n/**\n * Sidebar filter constants used for\n * visual studio benefits filtering.\n */\nexport const visualStudioBenefitFilterFields: IFilterField[] = [\n  {\n    key: AWARD_PERIOD,\n    text: \"Award Period\",\n    type: fieldTypes.AWARD_PERIOD,\n  },\n  {\n    key: BENEFIT_STATUS,\n    text: \"Benefit Status\",\n    type: fieldTypes.MULTI_SELECT,\n    options: visualStudioBenefitStatus,\n  },\n  {\n    key: EXPIRATION_START_DATE,\n    text: \"Expiration Start Date\",\n    type: fieldTypes.DATE_PICKER,\n  },\n  {\n    key: EXPIRATION_END_DATE,\n    text: \"Expiration End Date\",\n    type: fieldTypes.DATE_PICKER,\n  },\n];\n\n/**\n * Default filter values for visual studio benefits.\n */\nexport const defaultVisualStudioBenefitFilterValues: {\n  fieldName: string;\n  value: string;\n}[] = [];\n","/*!\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n */\r\nimport styled from \"styled-components\";\r\n\r\n/**\r\n * Styles for img element\r\n */\r\nexport const StatusImg = styled.img`\r\n  vertical-align: middle;\r\n`;\r\n\r\n/**\r\n * Styles for span elements\r\n */\r\nexport const StatusSpan = styled.span`\r\n  margin-left: 5px;\r\n  padding: 2px;\r\n  position: absolute;\r\n`;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n */\r\nimport React, { ReactElement } from \"react\";\r\n\r\nimport approved from \"Assets/Icons/Status/approved.png\";\r\nimport denied from \"Assets/Icons/Status/denied.png\";\r\nimport saved from \"Assets/Icons/Status/saved.png\";\r\nimport submitted from \"Assets/Icons/Status/submitted.png\";\r\nimport underReview from \"Assets/Icons/Status/under-review.png\";\r\nimport waiting from \"Assets/Icons/Status/waiting.png\";\r\nimport { accessControlUserStatusTypes } from \"Constants/AccessControlConstants\";\r\nimport { ApplicationStatusTypesEnum } from \"Constants/ApplicationStatusTypes\";\r\nimport { BenefitStatusEnum } from \"Constants/BenefitConstants\";\r\nimport { eventStatusTypes } from \"Constants/EventConstants\";\r\nimport { programStatusTypes } from \"Constants/ProfileConstants\";\r\nimport { VisualStudioBenefitStatusEnum } from \"Constants/VisualStudioBenefitConstants\";\r\n\r\nimport IStatusElementProps from \"./IStatusElementProps\";\r\nimport { StatusImg, StatusSpan } from \"./StatusElement.styles\";\r\n\r\nconst getImgSource = (statusValue: string): string => {\r\n  let imgSource = \"\";\r\n  switch (statusValue) {\r\n    case eventStatusTypes.APPROVED:\r\n    case accessControlUserStatusTypes.ACTIVE:\r\n    case programStatusTypes.ACTIVE_VENDOR:\r\n    case BenefitStatusEnum.Claimed:\r\n      imgSource = approved;\r\n      break;\r\n    case ApplicationStatusTypesEnum.INVITED:\r\n      imgSource = approved;\r\n      break;\r\n    case programStatusTypes.ACTIVE:\r\n      imgSource = approved;\r\n      break;\r\n    case eventStatusTypes.DENIED:\r\n    case ApplicationStatusTypesEnum.Declined:\r\n    case programStatusTypes.DECLINED:\r\n    case BenefitStatusEnum.Expired:\r\n    case accessControlUserStatusTypes.INACTIVE:\r\n      imgSource = denied;\r\n      break;\r\n    case eventStatusTypes.SUBMITTED:\r\n      imgSource = submitted;\r\n      break;\r\n    case eventStatusTypes.ONHOLD:\r\n      imgSource = waiting;\r\n      break;\r\n    case ApplicationStatusTypesEnum.INVITED:\r\n    case ApplicationStatusTypesEnum.REVIEW_ELIGIBLE:\r\n      imgSource = waiting;\r\n      break;\r\n    case eventStatusTypes.SCHEDULED:\r\n      imgSource = underReview;\r\n      break;\r\n    case ApplicationStatusTypesEnum.UNDER_REVIEW:\r\n    case BenefitStatusEnum.Unclaimed:\r\n      imgSource = underReview;\r\n      break;\r\n    case ApplicationStatusTypesEnum.SAVED:\r\n    case programStatusTypes.INPROCESS:\r\n      imgSource = saved;\r\n      break;\r\n    case VisualStudioBenefitStatusEnum.Assign:\r\n      imgSource = approved;\r\n      break;\r\n    case VisualStudioBenefitStatusEnum.Remove:\r\n      imgSource = denied;\r\n      break;\r\n    default:\r\n      break;\r\n  }\r\n  return imgSource;\r\n};\r\n\r\nconst StatusElement = ({ statusValue }: IStatusElementProps): React.ReactElement => {\r\n  return (\r\n    <>\r\n      <StatusImg src={getImgSource(statusValue)} alt=\"\" />\r\n      <StatusSpan>{statusValue}</StatusSpan>\r\n    </>\r\n  );\r\n};\r\n\r\nexport default StatusElement;\r\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { useEffect, useState } from \"react\";\n\nimport { connect } from \"react-redux\";\nimport { useHistory } from \"react-router-dom\";\nimport { bindActionCreators, Dispatch } from \"redux\";\n\nimport invert from \"lodash/invert\";\nimport moment from \"moment\";\nimport Pagination from \"rc-pagination\";\n\nimport {\n  DetailsList,\n  DetailsListLayoutMode,\n  Dropdown,\n  IconButton,\n  IColumn,\n  IDetailsRowProps,\n  Modal,\n  SelectionMode,\n  Text,\n} from \"@fluentui/react\";\n\nimport * as AccessControlActions from \"Dataflows/AccessControl/AccessControlAction\";\nimport * as ClRegionActions from \"Dataflows/ClRegion/ClRegionAction\";\n\nimport AccessControlDetails from \"Components/AccessControlDetails/AccessControlDetails\";\nimport ChevronIcon from \"Components/Common/ChevronIcon/ChevronIcon\";\nimport {\n  detailListStyles,\n  iconButtonStyles,\n  modalHeaderStyles,\n  modalStyles,\n  ModalContent,\n  ModalHeader,\n  StyledSpan,\n} from \"Components/Common/SharedListStyles.styles\";\nimport StatusElement from \"Components/Common/Status/StatusElement\";\nimport {\n  accessControlMultiple,\n  accessControlUserRole,\n  accessControlUserStatusTypes,\n} from \"Constants/AccessControlConstants\";\nimport { SubSiteUrlRootPath, TenantTypesEnum } from \"Constants/TenantTypes\";\nimport { AppState } from \"Dataflows/Reducers\";\nimport { IAccessControlUser } from \"Interfaces/AccessControl/IAccessControlUser\";\n\nimport { PaginationRow } from \"../Common/Pagination/Pagination.styles\";\nimport \"../Common/Pagination/Pagination.styles.css\";\nimport { IAccessControlListProps } from \"./IAccessControlListProps\";\n\n/**\n * List of admin user profiles\n * @Component\n * @returns {React.FunctionComponent<IAccessControlListProps>}\n */\nconst AccessControlList: React.FunctionComponent<IAccessControlListProps> = (\n  props: IAccessControlListProps\n) => {\n  const [isModalOpen, setIsModalOpen] = useState(false);\n  const { actions, data, pageSize, tenant, totalCount, currentPage } = props;\n\n  const history = useHistory();\n\n  useEffect(() => {\n    actions.loadCLRegions();\n  }, []);\n\n  const formatModifiedByDate = (incomingDate: Date): React.ReactElement => {\n    if (incomingDate === null) return <span>{}</span>;\n    const formatedDate = moment(incomingDate).format(\"MM/DD/YYYY\");\n    return <span>{formatedDate}</span>;\n  };\n\n  const formatStatusColumn = (statusKey: string): React.ReactElement => {\n    return <StatusElement statusValue={statusKey} />;\n  };\n\n  const formatRolesColumn = (roles: string[]): React.ReactElement => {\n    const leng = roles.length;\n    if (leng > 1) {\n      const roleNames = roles.join(\", \");\n      return <span title={roleNames}>{accessControlMultiple}</span>;\n    } else if (leng == 1) {\n      const role = accessControlUserRole[tenant].find((x) => x.key === roles[0]);\n      return <span>{role.text}</span>;\n    }\n    return <span>{}</span>;\n  };\n\n  const formatTechAreaColumn = (techAreas: string[]): React.ReactElement => {\n    const leng = techAreas.length;\n    if (leng > 1) {\n      const techAreaNames = techAreas.join(\", \");\n      return <span title={techAreaNames}>{accessControlMultiple}</span>;\n    } else if (leng == 1) {\n      return <span>{techAreas[0]}</span>;\n    }\n    return <span>{}</span>;\n  };\n\n  const columns: IColumn[] = [\n    {\n      key: \"id\",\n      name: \"ID\",\n      ariaLabel: \"Access Control ID\",\n      fieldName: \"id\",\n      minWidth: 10,\n      maxWidth: 20,\n    },\n    {\n      key: \"firstName\",\n      name: \"First Name\",\n      ariaLabel: \"First Name\",\n      fieldName: \"firstName\",\n      minWidth: 80,\n      maxWidth: 100,\n      isResizable: true,\n      isSorted: false,\n    },\n    {\n      key: \"lastName\",\n      name: \"Last Name\",\n      ariaLabel: \"Last Name\",\n      fieldName: \"lastName\",\n      minWidth: 80,\n      maxWidth: 100,\n    },\n    {\n      key: \"email\",\n      name: \"Email\",\n      ariaLabel: \"Email\",\n      fieldName: \"emailAddress\",\n      minWidth: 100,\n      maxWidth: 150,\n      isResizable: true,\n    },\n    {\n      key: \"role\",\n      name: \"Role\",\n      ariaLabel: \"Role\",\n      fieldName: \"roleNames\",\n      minWidth: 100,\n      maxWidth: 110,\n      onRender: (item: IAccessControlUser): React.ReactElement => {\n        const selectedTenant = tenant === TenantTypesEnum.MLSA ? \"msa\" : tenant.toLowerCase();\n        return formatRolesColumn(item.roleNames.filter((r) => r.includes(selectedTenant)));\n      },\n    },\n    {\n      key: \"region\",\n      name: \"Region\",\n      ariaLabel: \"Region\",\n      fieldName: \"countryString\",\n      minWidth: 80,\n      maxWidth: 90,\n    },\n    {\n      key: \"status\",\n      name: \"Status\",\n      ariaLabel: \"Status\",\n      fieldName: \"isActive\",\n      minWidth: 80,\n      maxWidth: 90,\n      onRender: (item: IAccessControlUser): React.ReactElement => {\n        return formatStatusColumn(\n          item.isActive\n            ? accessControlUserStatusTypes.ACTIVE\n            : accessControlUserStatusTypes.INACTIVE\n        );\n      },\n    },\n    {\n      key: \"dateModified\",\n      name: \"Last Modified\",\n      ariaLabel: \"Last Modified\",\n      fieldName: \"dateModified\",\n      minWidth: 100,\n      maxWidth: 150,\n      onRender: (item: IAccessControlUser): React.ReactElement => {\n        return formatModifiedByDate(item.dateModified);\n      },\n    },\n    {\n      key: \"modifiedBy\",\n      name: \"Last Modified By\",\n      ariaLabel: \"Last Modified By\",\n      fieldName: \"modifiedBy\",\n      minWidth: 100,\n      maxWidth: 150,\n    },\n  ];\n\n  const mvpColumns: IColumn[] = [\n    ...columns,\n    {\n      key: \"technologyFocusArea\",\n      name: \"Tech Area\",\n      ariaLabel: \"Technology Focus Area\",\n      fieldName: \"technologyFocusAreas\",\n      minWidth: 100,\n      maxWidth: 150,\n      onRender: (item: IAccessControlUser): React.ReactElement => {\n        return formatTechAreaColumn(item.technologyFocusAreas);\n      },\n    },\n  ];\n\n  const onClickEvent = (userId: number, selectedUser: IAccessControlUser): void => {\n    actions.updateSelectedUserId(userId);\n    actions.updateSelectedUser(selectedUser);\n    history.push(`/${invert(SubSiteUrlRootPath)[tenant]}/access/${userId}/edit`);\n  };\n\n  const onModalClose = (): void => {\n    setIsModalOpen(false);\n  };\n\n  const onRenderColumn = (\n    item: IAccessControlUser,\n    index?: number,\n    column?: IColumn\n  ): React.ReactElement => {\n    const fieldContent = item[column?.fieldName as keyof IAccessControlUser] as string;\n    if (column?.key == \"id\") {\n      return <StyledSpan>{fieldContent}</StyledSpan>;\n    }\n\n    return <span>{fieldContent}</span>;\n  };\n\n  const onRenderRow = (props?: IDetailsRowProps, defaultRender?: any): React.ReactElement => {\n    const selectedUser = props!.item as IAccessControlUser;\n\n    return defaultRender!({\n      ...props,\n      item: selectedUser,\n      onClick: () => onClickEvent(selectedUser.id, selectedUser),\n    });\n  };\n\n  return (\n    <>\n      <DetailsList\n        items={data}\n        columns={tenant === TenantTypesEnum.MVP ? mvpColumns : columns}\n        selectionMode={SelectionMode.none}\n        getKey={(item: any): string => `${(item as IAccessControlUser).id}`}\n        setKey=\"none\"\n        layoutMode={DetailsListLayoutMode.fixedColumns}\n        isHeaderVisible={true}\n        onRenderRow={onRenderRow}\n        onRenderItemColumn={onRenderColumn}\n        enterModalSelectionOnTouch={true}\n        styles={detailListStyles}\n      />\n      <PaginationRow>\n        <Pagination\n          total={totalCount}\n          onChange={(page) => actions.updateCurrentPage(page)}\n          showTitle={false}\n          current={currentPage}\n          prevIcon={ChevronIcon(\"ChevronLeft\")}\n          nextIcon={ChevronIcon(\"ChevronRight\")}\n          pageSize={pageSize}\n          showSizeChanger\n        />\n        <Dropdown\n          options={[\n            { key: 16, text: \"Show 16 results\" },\n            { key: 32, text: \"Show 32 results\" },\n            { key: 48, text: \"Show 48 results\" },\n          ]}\n          onChange={(_e, op): void => {\n            actions.updatePageSize(op?.key as number);\n          }}\n          selectedKey={pageSize}\n          className=\"pagination-dropdown\"\n          title=\"Page Size Dropdown\"\n        />\n      </PaginationRow>\n      <Modal\n        titleAriaId=\"Access Control User Details\"\n        isOpen={isModalOpen}\n        isBlocking={false}\n        containerClassName={modalStyles}\n        topOffsetFixed\n      >\n        <ModalHeader>\n          <Text block styles={modalHeaderStyles}>\n            Admin User Details\n          </Text>\n          <IconButton\n            styles={iconButtonStyles}\n            iconProps={{ iconName: \"Cancel\" }}\n            ariaLabel=\"Close popup modal\"\n            onClick={onModalClose}\n          />\n        </ModalHeader>\n        <ModalContent>\n          <AccessControlDetails />\n        </ModalContent>\n      </Modal>\n    </>\n  );\n};\n\n/**\n * Maps AccessList to redux state\n * @param {AppState} state The App state.\n */\nconst mapStateToProps = (state: AppState, ownProps: IAccessControlListProps) => ({\n  data: ownProps.data,\n});\n\n/**\n * Maps Component's dispatch/handler props to redux state\n * @param {Dispatch} dispatch The dispatch.\n */\nconst mapDispatchToProps = (dispatch: Dispatch<AccessControlActions.AccessControlActionTypes>) => ({\n  actions: {\n    loadCLRegions: bindActionCreators(ClRegionActions.getClRegions, dispatch),\n    updateCurrentPage: bindActionCreators(AccessControlActions.updateCurrentPage, dispatch),\n    updatePageSize: bindActionCreators(AccessControlActions.updatePageSize, dispatch),\n    updateSelectedUserId: bindActionCreators(AccessControlActions.updateSelectedUserId, dispatch),\n    updateSelectedUser: bindActionCreators(AccessControlActions.updateSelectedUser, dispatch),\n  },\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(AccessControlList);\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { getTheme, FontSizes, FontWeights } from \"office-ui-fabric-react\";\nimport styled from \"styled-components\";\n\nconst theme = getTheme();\n\n/**\n * Styles for result counts text\n */\nexport const ResultCount = styled.p`\n  font-size: ${FontSizes.size14};\n  font-weight: ${FontWeights.regular};\n  color: ${theme.palette.black};\n  text-align: right;\n  line-height: 20px;\n  margin-top: 10px;\n`;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React from \"react\";\n\nimport { IListCountsProps } from \"./IListCountsProps\";\nimport { ResultCount } from \"./ListCounts.styles\";\n\n/**\n * Renders count for the number of currently records in list\n * in list to total number\n */\nexport const ListCounts = ({ loading, total }: IListCountsProps): React.ReactElement => {\n  if (loading) return <ResultCount />;\n\n  return <ResultCount>Results: {total}</ResultCount>;\n};\n\nexport default ListCounts;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { ReactElement } from \"react\";\n\nimport { DetailsList, DetailsListLayoutMode, IColumn, SelectionMode } from \"@fluentui/react\";\n\nimport { detailListStyles } from \"Components/Common/SharedListStyles.styles\";\n\nimport { IRoleGuideListProps } from \"./IRoleGuideListProps\";\n\n/**\n * Role Guide component.\n * @param {IRoleGuideListProps} props the component props.\n * @returns {ReactElement} the component element.\n */\nexport const RoleGuideList = (props: IRoleGuideListProps): ReactElement => {\n  const { roles, items } = props;\n\n  const columns: IColumn[] = [\n    {\n      key: \"permission\",\n      fieldName: \"permission\",\n      name: \"Role\",\n      minWidth: 200,\n      maxWidth: 250,\n      isResizable: true,\n      isSorted: false,\n    },\n    ...roles.map((role) => {\n      return {\n        key: role.id,\n        fieldName: role.id,\n        name: role.name,\n        minWidth: 140,\n        maxWidth: 160,\n        isResizable: false,\n        isSorted: false,\n      };\n    }),\n  ];\n\n  return (\n    <>\n      <DetailsList\n        items={items}\n        columns={columns}\n        selectionMode={SelectionMode.none}\n        setKey=\"none\"\n        layoutMode={DetailsListLayoutMode.fixedColumns}\n        isHeaderVisible={true}\n        enterModalSelectionOnTouch={true}\n        styles={detailListStyles}\n      />\n    </>\n  );\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { OperationStatus } from \"Constants/OperationStatus\";\nimport { IAccessControlUser } from \"Interfaces/AccessControl/IAccessControlUser\";\nimport { IUserRole } from \"Interfaces/AccessControl/IUserRole\";\nimport { IFilterValue } from \"Interfaces/IFilterValue\";\n\nimport { IAccessControlState } from \"./IAccessControlState\";\n\n/**\n * Returns current value from state for: users\n * @param accessControlState\n */\nexport const getUsers = (accessControlState: IAccessControlState): IAccessControlUser[] =>\n  accessControlState.users;\n\n/**\n * Returns current value from state for: eventsFilterValues\n * @param userProfileState\n */\nexport const getAccessControlFilterValues = (\n  accessControlState: IAccessControlState\n): IFilterValue[] => accessControlState.accessControlFilterValues;\n\n/**\n * Returns current value from state for: currentPage\n * @param accessControlState\n */\nexport const getCurrentPage = (accessControlState: IAccessControlState): number =>\n  accessControlState.currentPage;\n\n/**\n * Returns current value from state for: pageSize\n * @param accessControlState\n */\nexport const getPageSize = (accessControlState: IAccessControlState): number =>\n  accessControlState.pageSize;\n\n/**\n * Returns current value from state for: searchText\n * @param accessControlState\n */\nexport const getSearchText = (accessControlState: IAccessControlState): string =>\n  accessControlState.searchText;\n\n/**\n * Returns the filtered count.\n * @param accessControlState\n */\nexport const getFilteredCount = (accessControlState: IAccessControlState): number =>\n  accessControlState.filteredCount;\n\n/**\n * Returns selected user profile.\n * @param userProfileState\n */\nexport const getSelectedUser = (\n  accessControlState: IAccessControlState\n): IAccessControlUser | undefined => accessControlState.selectedUser;\n\n/**\n * Returns selected user profile.\n * @param userProfileState\n */\nexport const getSelectedUserId = (accessControlState: IAccessControlState): number | undefined =>\n  accessControlState.selectedUserId;\n\n/**\n * Returns new user id.\n * @param userProfileState\n */\nexport const getNewUserId = (accessControlState: IAccessControlState): number | undefined =>\n  accessControlState.newUserId;\n\n/**\n * Returns the user roles.\n * @param accessControlState\n */\nexport const getUserRoles = (accessControlState: IAccessControlState): IUserRole[] =>\n  accessControlState.userRoles;\n\n/**\n * Returns the network operation status.\n * @type {OperationStatus}\n */\nexport const getNetworkOperationStatus = (\n  accessControlState: IAccessControlState\n): OperationStatus => accessControlState.networkOperationStatus;\n\n/**\n * Returns the network operation error.\n * @returns {OperationStatus}\n */\nexport const getNetworkOperationError = (\n  accessControlState: IAccessControlState\n): string | undefined => accessControlState.networkOperationError;\n\n/**\n * Returns the current tenant.\n * @returns {string}\n */\nexport const getCurrentTenant = (accessControlState: IAccessControlState): string | undefined =>\n  accessControlState.tenant;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport flatten from \"lodash/flatten\";\nimport groupBy from \"lodash/groupBy\";\nimport map from \"lodash/map\";\n\nimport { IComboBoxOption, SelectableOptionMenuItemType } from \"@fluentui/react\";\n\nimport { IActivityEventTypesDataState } from \"Interfaces/SiteContent/IActivityEventTypesDataState\";\n\nexport const getActivityEventTypesOptionsList = (\n  state: IActivityEventTypesDataState\n): IComboBoxOption[] => {\n  const activityEventTypes = map(\n    groupBy(state.activityEventTypesData, \"activityOrEvent\"),\n    (value, key) => {\n      const header = {\n        text: key,\n        key: key,\n        itemType: SelectableOptionMenuItemType.Header,\n      };\n\n      const group = value.map((at) => {\n        return {\n          text: at.name,\n          key: at.name,\n          itemType: SelectableOptionMenuItemType.Normal,\n        };\n      });\n\n      const divider = {\n        key: \"divider\",\n        text: \"-\",\n        itemType: SelectableOptionMenuItemType.Divider,\n      };\n      return [header, ...group, divider];\n    }\n  );\n\n  return flatten(activityEventTypes);\n};\n\nexport const getActivityEventTypesLoadError = (\n  state: IActivityEventTypesDataState\n): string | undefined => state.errorMessage;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { IAwardKitSkuDataState } from \"Interfaces/SiteContent/IAwardKitSkuDataState\";\nimport { IAwardKitSkuOption } from \"Interfaces/SiteContent/IAwardKitSkuOption\";\n\n/**\n * Returns the Award Kit SKU option list.\n * @param awardKitSkuState\n */\nexport const getAwardKitSkuOptionList = (\n  awardKitSkuState: IAwardKitSkuDataState\n): IAwardKitSkuOption[] => awardKitSkuState.awardKitSkuOptionList;\n\n/**\n * Returns the Award Kit SKU error.\n * @param awardKitSkuState\n */\nexport const getAwardKitSkuLoadError = (awardKitSkuState: IAwardKitSkuDataState): string =>\n  awardKitSkuState.awardKitSkuLoadError;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport {\n  IClRegionData,\n  IClRegionDataState,\n  IClRegionOptionList,\n} from \"../../Interfaces/SiteContent\";\n\n/**\n * Cl Regions data selector.\n */\nexport const getClRegions = (state: IClRegionDataState): IClRegionData[] => state.clRegions;\n\n/**\n * CL Regions option list data selector.\n */\nexport const getClRegionsOptionList = (state: IClRegionDataState): IClRegionOptionList[] =>\n  state.clRegionsOptionList;\n\n/**\n * CL Regions data load error selector.\n */\nexport const getClRegionsLoadError = (state: IClRegionDataState): string =>\n  state.clRegionsLoadError;\n\n/**\n * Geo data selector.\n */\nexport const getGeoData = (state: IClRegionDataState): IClRegionData[] => state.geoData;\n\n/**\n * Geo data load error selector.\n */\nexport const getGeoDataLoadError = (state: IClRegionDataState): string => state.geoDataLoadError;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { OperationStatus } from \"Constants/OperationStatus\";\nimport { IAvailableCpmData } from \"Interfaces/SiteContent/IAvailableCpmData\";\nimport { IAvaiableCpmOptionList } from \"Interfaces/SiteContent/IAvailableCpmOptionList\";\nimport { ICommonDataState } from \"Interfaces/SiteContent/ICommonDataState\";\nimport { IReviewStatusData } from \"Interfaces/SiteContent/IReviewStatusData\";\nimport { IReviewStatusOptionList } from \"Interfaces/SiteContent/IReviewStatusOptionList\";\n\n/**\n * Selector for mvp review statuses.\n */\nexport const getMvpReviewStatuses = (state: ICommonDataState): IReviewStatusData[] =>\n  state.mvp.reviewStatuses;\n\n/**\n * Selector for mvp review statuses option list.\n */\nexport const getMvpReviewStatusOptionList = (state: ICommonDataState): IReviewStatusOptionList[] =>\n  state.mvp.reviewStatusOptionList;\n\n/**\n * Selector for common data operation status.\n */\nexport const getCommonDataLoadStatus = (state: ICommonDataState): OperationStatus =>\n  state.commonDataOperationStatus;\n\n/**\n * Selector for common data load error.\n */\nexport const getCommonDataLoadError = (state: ICommonDataState): string =>\n  state.commonDataLoadError;\n\n/**\n * Selector for available Mvp Cpm list.\n */\nexport const getMvpAvailableCpms = (state: ICommonDataState): IAvailableCpmData[] =>\n  state.mvp.availableCpms;\n\n/**\n * Selector for available Mvp Cpm option list.\n */\nexport const getMvpAvailableCpmOptionList = (state: ICommonDataState): IAvaiableCpmOptionList[] =>\n  state.mvp.availableCpmOptionList;\n\n/**\n * Selector for available Msa Cpm list.\n */\nexport const getMlsaAvailableCpms = (state: ICommonDataState): IAvailableCpmData[] =>\n  state.mlsa.availableCpms;\n\n/**\n * Selector for available Msa Cpm option list.\n */\nexport const getMlsaAvailableCpmOptionList = (state: ICommonDataState): IAvaiableCpmOptionList[] =>\n  state.mlsa.availableCpmOptionList;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport {\n  IIndustryFocusData,\n  IIndustryFocusDataState,\n  IIndustryFocusOptionList,\n} from \"../../Interfaces/SiteContent\";\n\n/**\n * Industry Focus data selector.\n */\nexport const getIndustryFocus = (state: IIndustryFocusDataState): IIndustryFocusData[] =>\n  state.industryFocuses;\n\n/**\n * Industry Focus option list data selector.\n */\nexport const getIndustryFocusOptionList = (\n  state: IIndustryFocusDataState\n): IIndustryFocusOptionList[] => state.industryFocusesOptionList;\n\n/**\n * Industry Focus data load error selector.\n */\nexport const getIndustryFocusLoadError = (state: IIndustryFocusDataState): string =>\n  state.industryFocusLoadError;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { IRegionData, IRegionDataState, IRegionOptionList } from \"Interfaces/SiteContent\";\n\n/**\n * Region data selector.\n */\nexport const getRegions = (state: IRegionDataState): IRegionData[] => state.regions;\n\n/**\n * Region option list data selector.\n */\nexport const getRegionsOptionList = (state: IRegionDataState): IRegionOptionList[] =>\n  state.regionOptionList;\n\n/**\n * Region option list data selector.\n */\nexport const getRegionLoadError = (state: IRegionDataState): string => state.regionLoadError;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport {\n  ITechnicalExpertiseData,\n  ITechnicalExpertiseDataState,\n  ITechnicalExpertiseOptionList,\n} from \"../../Interfaces/SiteContent\";\n\n/**\n * Technical Expertise data selector.\n */\nexport const getTechnicalExpertise = (\n  state: ITechnicalExpertiseDataState\n): ITechnicalExpertiseData[] => state.technicalExpertise;\n\n/**\n * Technical Expertise option list data selector.\n */\nexport const getTechnicalExpertiseOptionList = (\n  state: ITechnicalExpertiseDataState\n): ITechnicalExpertiseOptionList[] => state.technicalExpertiseOptionList;\n\n/**\n * Technical Expertise data load error selector.\n */\nexport const getTechnicalExpertiseLoadError = (state: ITechnicalExpertiseDataState): string =>\n  state.technicalExpertiseLoadError;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport flatten from \"lodash/flatten\";\nimport groupBy from \"lodash/groupBy\";\nimport map from \"lodash/map\";\nimport { SelectableOptionMenuItemType } from \"office-ui-fabric-react/lib/SelectableOption\";\n\nimport { AppState } from \"Dataflows/Reducers\";\nimport { ITechnologyAreaDataState } from \"Interfaces/SiteContent/ITechnologyAreaDataState\";\nimport { ITechnologyAreaModelData } from \"Interfaces/SiteContent/ITechnologyAreaModelData\";\nimport { ITechnologyAreaOptionList } from \"Interfaces/SiteContent/ITechnologyAreaOptionList\";\n\nconst getTechAreas = (data: ITechnologyAreaModelData[]): ITechnologyAreaOptionList[] => {\n  const techAreas = map(groupBy(data, \"technologyFocusAreaGroupName\"), (value, key) => {\n    const header = {\n      text: key,\n      key: key + \"-header\",\n      itemType: SelectableOptionMenuItemType.Header,\n    };\n\n    const group = value.map((ta) => {\n      return {\n        text: ta.technologyName,\n        key: ta.technologyName,\n        itemType: SelectableOptionMenuItemType.Normal,\n      };\n    });\n\n    const divider = {\n      key: key + \"-divider\",\n      text: \"-\",\n      itemType: SelectableOptionMenuItemType.Divider,\n    };\n\n    return [header, ...group, divider];\n  });\n\n  return flatten(techAreas);\n};\n\n/**\n * Technology area option list data selector.\n */\nexport const getAllTechnologyAreaOptionList = (state: AppState): ITechnologyAreaOptionList[] => {\n  return getTechAreas(state.technologyAreaDataState.technologyAreaData);\n};\n\n/**\n * Technology area option list data selector.\n */\nexport const getTechnologyAreaOptionList = (\n  state: ITechnologyAreaDataState\n): ITechnologyAreaOptionList[] => {\n  return getTechAreas(state.technologyAreaData);\n};\n\n/**\n * Technology area data load error selector.\n */\nexport const getTechnologyAreaLoadError = (state: ITechnologyAreaDataState): string =>\n  state.technologyAreaLoadError;\n\n/**\n * Technology area group option list data selector.\n */\nexport const getTechnologyAreaGroupOptionList = (\n  state: ITechnologyAreaDataState\n): ITechnologyAreaOptionList[] =>\n  map(groupBy(state.technologyAreaData, \"technologyFocusAreaGroupName\"), (value, key) => {\n    const groups = {\n      text: key,\n      key: key,\n      itemType: SelectableOptionMenuItemType.Normal,\n    };\n\n    return groups;\n  });\n\nexport const selectTechnologyAreaBySelectedGroups = (\n  state: ITechnologyAreaDataState,\n  selectedGroups: string[]\n): ITechnologyAreaOptionList[] => {\n  let techAreas: ITechnologyAreaOptionList[] = [];\n  if (selectedGroups.length > 0) {\n    techAreas = getTechAreas(\n      state.technologyAreaData.filter((ta) => {\n        return selectedGroups.includes(ta.technologyFocusAreaGroupName);\n      })\n    );\n  } else {\n    techAreas = getTechAreas(state.technologyAreaData);\n  }\n  return techAreas;\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport {\n  getTheme,\n  FontSizes,\n  FontWeights,\n  IButtonStyles,\n  IDatePickerStyles,\n  IStackTokens,\n  ITextStyles,\n} from \"office-ui-fabric-react\";\nimport styled from \"styled-components\";\n\nimport { IComboBoxStyles, IDropdownStyles } from \"@fluentui/react\";\n\nconst theme = getTheme();\n\n/**\n * Div containing all of the sidebar components.\n */\nexport const SideBarDiv = styled.div`\n  width:20rem\n  max-width: 20rem\n  padding-right: 1rem;\n  margin-right: 1rem;\n  position: relative;\n  .content {\n    display: \"block\", \n  }\n`;\n\n/**\n * Styles for title at top of sidebar.\n */\nexport const titleStyles: ITextStyles = {\n  root: {\n    fontSize: FontSizes.xLarge,\n    lineHeight: FontSizes.xxLarge,\n    color: theme.palette.blue,\n    fontWeight: FontWeights.semibold,\n    display: \"block\",\n  },\n};\n\n/**\n * Token settings for vertical stack of filters\n */\nexport const filterStackTokens: IStackTokens = { childrenGap: 20 };\n\n/**\n * Styles for the expand/collapse icon\n */\nexport const expandCollapseIconStyles: IButtonStyles = {\n  root: {\n    position: \"absolute\",\n    right: 10,\n    top: 10,\n  },\n  icon: {\n    fontSize: FontSizes.small,\n    fontWeight: FontWeights.semibold,\n    color: theme.palette.blue,\n  },\n};\n\n/**\n * Text to be clicked that trigger clearing of field's value\n */\nexport const ClearDateText = styled.p`\n  font-size: ${FontSizes.small};\n  font-weight: ${FontWeights.regular};\n  color: ${theme.palette.blue};\n  margin-top: 2px !important;\n  margin-bottom: 1px !important;\n  text-align: right;\n  position: relative;\n  &:hover {\n    cursor: pointer;\n  }\n`;\n\n/**\n * Styles for each combobox in the sidebar\n */\nexport const comboStyles: Partial<IComboBoxStyles> = {\n  container: {\n    marginTop: \"6px !important\",\n    width: \"11rem\",\n  },\n};\n\n/**\n * Styles for each dropdown in the sidebar\n */\nexport const dropdownStyles: Partial<IDropdownStyles> = {\n  root: {\n    marginTop: \"6px !important\",\n  },\n  dropdown: {\n    border: \"0.4px\",\n    borderRadius: \"2px\",\n    width: \"11rem\",\n  },\n};\n\n/**\n * Styles for each date picker in the sidebar\n */\nexport const datePickerStyles: Partial<IDatePickerStyles> = {\n  root: {\n    marginTop: \"5px !important\",\n    width: \"11rem\",\n  },\n  callout: {\n    selectors: {\n      [\".js-goToday\"]: { position: \"fixed\", right: 10 },\n    },\n  },\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { ReactElement, useEffect } from \"react\";\n\nimport compact from \"lodash/compact\";\nimport filter from \"lodash/filter\";\nimport map from \"lodash/map\";\nimport some from \"lodash/some\";\n\nimport {\n  ComboBox,\n  DatePicker,\n  Dropdown,\n  IComboBoxOption,\n  IDropdownOption,\n  Stack,\n  Text,\n} from \"@fluentui/react\";\n\nimport * as EventConstants from \"Constants/EventConstants\";\n\nimport { DayPickerStrings } from \"Constants/DateConstants\";\nimport { fieldTypes, FilterValueFieldNames } from \"Constants/FilterFields\";\nimport { IKeyText } from \"Interfaces/IKeyText\";\n\nimport ISideBarProps from \"./ISideBarProps\";\nimport {\n  comboStyles,\n  datePickerStyles,\n  dropdownStyles,\n  filterStackTokens,\n  titleStyles,\n  ClearDateText,\n  SideBarDiv,\n} from \"./SideBar.styles\";\n\n/**\n * Sidebar displays filter search and listing.\n * @FunctionComponent\n * @param {ISideBarProps} props The side bar props.\n * @returns {React.FunctionComponent<ISidebarProps>} The side bar component.\n */\nconst SideBar: React.FunctionComponent<ISideBarProps> = (props: ISideBarProps): ReactElement => {\n  const {\n    awardPeriodOptionList,\n    awardPeriodLoadError,\n    awardKitSkuOptionList,\n    awardKitSkuLoadError,\n    countryRegionOptionList,\n    countryRegionsLoadError,\n    filterFields,\n    regionsLoadError,\n    regionOptionList,\n    selectedFilterValues,\n    stateProvinceOptionList,\n    stateProvincesLoadError,\n    industryFocusOptionList,\n    industryFocusLoadError,\n    technicalExpertiseOptionList,\n    technicalExpertiseLoadError,\n    technologyAreaOptionList,\n    technologyAreaGroupOptionList,\n    technologyAreaLoadError,\n    clRegionsOptionList,\n    activityEventTypesOptionList,\n    reviewStatusOptionList,\n    activityEventTypesError,\n    clRegionsLoadError,\n    availableCpmOptionList,\n    title,\n    urlWithParam,\n    addFilterValue,\n    removeFilterValue,\n    removeFilterProvinceValue,\n    removeFilterCountryValue,\n    onTechAreaGroupFilterValueChanged,\n    updateFilterValue,\n    loadStateProvince,\n  } = props;\n\n  /**\n   * Event triggered with a filter dropdown is changed\n   * @param item the item in dropdown selected\n   * @param field selected field\n   */\n  const onChange = ({ item, field }): void => {\n    if (item.selected) {\n      addFilterValue({ fieldName: field, value: item.key });\n      if (\n        !!onTechAreaGroupFilterValueChanged &&\n        field === FilterValueFieldNames.TECHNOLOGY_AREA_GROUP\n      ) {\n        // these are the other tech area groups not selected or already selected.\n        const otherTechAreaGroupsNotSelected = filter(\n          compact(\n            map(technologyAreaGroupOptionList, (option) => {\n              {\n                if (option.key !== item.key) {\n                  return { fieldName: field, value: option.key };\n                }\n              }\n            })\n          ),\n          (y) => !some(selectedFilterValues, (x) => x.value === y.value)\n        );\n        onTechAreaGroupFilterValueChanged(otherTechAreaGroupsNotSelected);\n      }\n    } else {\n      removeFilterValue({ fieldName: field, value: item.key });\n      if (\n        !!onTechAreaGroupFilterValueChanged &&\n        field === FilterValueFieldNames.TECHNOLOGY_AREA_GROUP\n      ) {\n        onTechAreaGroupFilterValueChanged([{ fieldName: field, value: item.key }]);\n      }\n    }\n  };\n\n  /**\n   * Returns any selected filter value keys for field (if any)\n   * @param fieldName field to fetch currently selected values for\n   */\n  const getSelectedKeys = (fieldName: string): string[] => {\n    return filter(selectedFilterValues, (item) => item.fieldName === fieldName).map(\n      (item) => item.value\n    );\n  };\n\n  const getSelectedKey = (fieldName: string): string => {\n    if (!!selectedFilterValues?.length) {\n      return selectedFilterValues.find((item) => item.fieldName === fieldName)?.value || \"\";\n    }\n    return \"\";\n  };\n\n  const onSelectChange = ({ item, field }): void => {\n    const selectedKeys = getSelectedKeys(field);\n    selectedKeys.forEach((key) => removeFilterValue({ fieldName: field, value: key }));\n    if (!!item) {\n      addFilterValue({ fieldName: field, value: item.key });\n    }\n  };\n\n  const datePickerProps = (field: IKeyText): {} => {\n    const defaultProps = {\n      strings: DayPickerStrings,\n      label: field.text,\n      placeholder: \"Select a Date\",\n      onSelectDate: (selectedDate): void => {\n        updateFilterValue({ fieldName: field.key, value: selectedDate.toString() });\n      },\n    };\n    const selectedKeys = getSelectedKeys(field.key);\n\n    if (selectedKeys.length > 0) defaultProps[\"value\"] = new Date(selectedKeys[0]);\n    return defaultProps;\n  };\n\n  /**\n   * If the user selects “Online” as the only filter under Event Format\n   * For pages that do not have an eventformat filter, it should always return false\n   * For pages that have an eventformat filter, check whether only the online option was checked\n   */\n  const whetherOnlineOnlyOnSelected = (): boolean => {\n    const formatField = filterFields.filter((item) => item.key === fieldTypes.FORMAT)[0];\n    return (\n      formatField &&\n      getSelectedKeys(formatField.key).includes(EventConstants.EVENT_FORMAT_ONLINE_TEXT) &&\n      getSelectedKeys(formatField.key).length === 1\n    );\n  };\n\n  /**\n   * If the user selects “Online” as the only filter under Event Format on change\n   */\n  const whetherOnlineOnlyOnSelecting = (selectedText?: string, selected?: boolean): boolean => {\n    const fieldKey = filterFields.filter((item) => item.key === fieldTypes.FORMAT)[0].key;\n\n    // Whether only the online option remains checked when the options change from checked to unchecked.\n    const whetherOnlineLeftOnly =\n      !selected &&\n      selectedText !== EventConstants.EVENT_FORMAT_ONLINE_TEXT &&\n      getSelectedKeys(fieldKey).includes(EventConstants.EVENT_FORMAT_ONLINE_TEXT) &&\n      getSelectedKeys(fieldKey).length === 2;\n\n    // Whether only the online option was checked when the options change from unchecked to checked.\n    const whetherOnlineSelectOnly =\n      selectedText === EventConstants.EVENT_FORMAT_ONLINE_TEXT &&\n      getSelectedKeys(fieldKey).length === 0;\n\n    return whetherOnlineLeftOnly || whetherOnlineSelectOnly;\n  };\n\n  /**\n   * Loads the state/province options based on the singular selected country.\n   * @method\n   * @param {string[]} selectedCountries The list of previously selected countries.\n   * @param {IComboBoxOption} option The combo box option clicked.\n   */\n  const loadStateProvinceOptionsBySingularSelectedCountry = (\n    selectedCountries: string[],\n    option?: IComboBoxOption\n  ): void => {\n    let countryToFetch = \"\";\n    if (option?.selected && selectedCountries.length === 0) {\n      countryToFetch = option.text;\n    } else {\n      const otherCountriesInList = filter(selectedCountries, (sc) => sc !== option?.text);\n      countryToFetch =\n        !!otherCountriesInList &&\n        otherCountriesInList.length === 1 &&\n        some(selectedCountries, (sc) => sc === option?.text) // if selected combobox option is the sole member of previously selected countries.\n          ? otherCountriesInList[0]\n          : \"\";\n    }\n\n    !!countryToFetch && loadStateProvince(countryToFetch);\n  };\n\n  /**\n   * Add default option and format SKU options\n   * @returns options for SKU\n   */\n  const formatSkuOptions = (): IDropdownOption[] => {\n    const skuList: IDropdownOption[] = [];\n    const defaultOption = { key: \"\", text: \"Any\" };\n    skuList.push(defaultOption);\n\n    if (awardKitSkuOptionList && awardKitSkuOptionList.length > 0) {\n      awardKitSkuOptionList.map((option: any) => {\n        skuList.push({ key: option.sku, text: option.sku });\n      });\n    }\n    return skuList;\n  };\n\n  /**\n   * MVP Applications can include query parameters.\n   * Load state/province options based on the selected country\n   * when the page is loaded with a country filter in query parameter.\n   */\n  useEffect(() => {\n    if (urlWithParam) {\n      const selectedCountryFilters = selectedFilterValues.filter(\n        (item: any) => item.fieldName === fieldTypes.COUNTRY\n      );\n      if (selectedCountryFilters.length === 1) {\n        const selectedCountry = {\n          key: selectedCountryFilters[0].value,\n          text: selectedCountryFilters[0].value,\n          selected: true,\n        };\n        loadStateProvinceOptionsBySingularSelectedCountry([], selectedCountry);\n      }\n    }\n  }, [urlWithParam, selectedFilterValues]);\n\n  return (\n    <SideBarDiv>\n      <div className=\"content\">\n        <Text styles={titleStyles}>{title || \"Filter\"}</Text>\n        <Stack tokens={filterStackTokens}>\n          {filterFields.map((filterField) => {\n            const selectedCountries = getSelectedKeys(fieldTypes.COUNTRY);\n\n            switch (filterField.type) {\n              case fieldTypes.SELECT:\n                const selectOptions: IDropdownOption[] = filterField.options?.map((option) => ({\n                  key: option.key,\n                  text: option.text,\n                })) as IDropdownOption[];\n\n                return (\n                  <React.Fragment key={filterField.key}>\n                    <Dropdown\n                      placeholder=\"Any\"\n                      label={filterField.text}\n                      selectedKey={getSelectedKey(filterField.key)}\n                      onChange={(_, item): void =>\n                        onSelectChange({\n                          item,\n                          field: filterField.key,\n                        })\n                      }\n                      options={selectOptions}\n                      styles={dropdownStyles}\n                    />\n                  </React.Fragment>\n                );\n              case fieldTypes.MULTI_SELECT:\n                const options: IDropdownOption[] = filterField.options?.map((option) => ({\n                  key: option.key,\n                  text: option.text,\n                })) as IDropdownOption[];\n\n                return (\n                  <React.Fragment key={filterField.key}>\n                    <Dropdown\n                      placeholder=\"Any\"\n                      label={filterField.text}\n                      selectedKeys={getSelectedKeys(filterField.key)}\n                      onChange={(_, item): void => onChange({ item, field: filterField.key })}\n                      multiSelect\n                      options={options}\n                      styles={dropdownStyles}\n                    />\n                  </React.Fragment>\n                );\n              case fieldTypes.FORMAT:\n                const eventFormatOptions: IDropdownOption[] = filterField.options?.map(\n                  (option) => ({\n                    key: option.key,\n                    text: option.text,\n                  })\n                ) as IDropdownOption[];\n\n                return (\n                  <React.Fragment key={filterField.key}>\n                    <Dropdown\n                      placeholder=\"Any\"\n                      label={filterField.text}\n                      selectedKeys={getSelectedKeys(filterField.key)}\n                      onChange={(_, item): void => {\n                        onChange({ item, field: filterField.key });\n                        if (whetherOnlineOnlyOnSelecting(item?.text, item?.selected)) {\n                          if (removeFilterCountryValue) {\n                            removeFilterCountryValue();\n                          }\n                          if (removeFilterProvinceValue) {\n                            removeFilterProvinceValue();\n                          }\n                        }\n                      }}\n                      multiSelect\n                      options={eventFormatOptions}\n                      styles={dropdownStyles}\n                    />\n                  </React.Fragment>\n                );\n              case fieldTypes.EXPEDITED:\n                const expeditedOptions: IDropdownOption[] = filterField.options?.map((option) => ({\n                  key: option.key,\n                  text: option.text,\n                })) as IDropdownOption[];\n\n                return (\n                  <React.Fragment key={filterField.key}>\n                    <Dropdown\n                      placeholder=\"Any\"\n                      label={filterField.text}\n                      selectedKeys={getSelectedKeys(filterField.key)}\n                      onChange={(_, item): void => {\n                        onChange({ item, field: filterField.key });\n                      }}\n                      multiSelect\n                      options={expeditedOptions}\n                      styles={dropdownStyles}\n                    />\n                  </React.Fragment>\n                );\n              case fieldTypes.SKU:\n                return (\n                  <React.Fragment key={filterField.key}>\n                    <Dropdown\n                      placeholder=\"Any\"\n                      label={filterField.text}\n                      selectedKey={getSelectedKey(filterField.key)}\n                      onChange={(_, item): void =>\n                        onSelectChange({\n                          item,\n                          field: filterField.key,\n                        })\n                      }\n                      options={formatSkuOptions()}\n                      styles={dropdownStyles}\n                      disabled={!!awardKitSkuLoadError && awardKitSkuLoadError.length > 0}\n                    />\n                  </React.Fragment>\n                );\n              case fieldTypes.AWARD_PERIOD:\n                return (\n                  <React.Fragment key={filterField.key}>\n                    <ComboBox\n                      placeholder=\"Any\"\n                      label={filterField.text}\n                      selectedKey={getSelectedKeys(filterField.key)}\n                      onChange={(_, item): void => {\n                        onChange({ item, field: filterField.key });\n                      }}\n                      multiSelect\n                      disabled={!!awardPeriodLoadError && awardPeriodLoadError.length > 0}\n                      autoComplete=\"on\"\n                      options={awardPeriodOptionList?.map((item) => ({\n                        key: item.awardPeriodName,\n                        text: item.awardPeriodName,\n                      }))}\n                      styles={comboStyles}\n                    />\n                  </React.Fragment>\n                );\n              // TODO: load countries based on selected region\n              case fieldTypes.REGION:\n                return (\n                  <React.Fragment key={filterField.key}>\n                    <ComboBox\n                      placeholder=\"Any\"\n                      label={filterField.text}\n                      selectedKey={getSelectedKeys(filterField.key)}\n                      onChange={(_, item): void => {\n                        onChange({ item, field: filterField.key });\n                      }}\n                      multiSelect\n                      disabled={regionsLoadError.length > 0 || whetherOnlineOnlyOnSelected()}\n                      autoComplete=\"on\"\n                      options={regionOptionList?.map((item) => ({\n                        key: item.key,\n                        text: item.text,\n                      }))}\n                      styles={comboStyles}\n                    />\n                  </React.Fragment>\n                );\n              case fieldTypes.COUNTRY:\n                return (\n                  <React.Fragment key={filterField.key}>\n                    <ComboBox\n                      placeholder=\"Any\"\n                      label={filterField.text}\n                      selectedKey={getSelectedKeys(filterField.key)}\n                      onChange={(_, item): void => {\n                        onChange({ item, field: filterField.key });\n                        if (removeFilterProvinceValue) {\n                          removeFilterProvinceValue();\n                        }\n                        loadStateProvinceOptionsBySingularSelectedCountry(selectedCountries, item);\n                      }}\n                      multiSelect\n                      disabled={countryRegionsLoadError.length > 0 || whetherOnlineOnlyOnSelected()}\n                      autoComplete=\"on\"\n                      options={countryRegionOptionList?.map((item) => ({\n                        key: item.key,\n                        text: item.text,\n                      }))}\n                      styles={comboStyles}\n                    />\n                  </React.Fragment>\n                );\n              case fieldTypes.PROVINCE:\n                return (\n                  <React.Fragment key={filterField.key}>\n                    <ComboBox\n                      placeholder=\"Any\"\n                      label={filterField.text}\n                      selectedKey={getSelectedKeys(filterField.key)}\n                      onChange={(_, item): void => {\n                        onChange({ item, field: filterField.key });\n                      }}\n                      multiSelect\n                      disabled={\n                        stateProvincesLoadError.length > 0 || selectedCountries.length !== 1\n                      }\n                      autoComplete=\"on\"\n                      options={stateProvinceOptionList?.map((item) => ({\n                        key: item.key,\n                        text: item.text,\n                      }))}\n                      styles={comboStyles}\n                    />\n                  </React.Fragment>\n                );\n              case fieldTypes.INDUSTRY_FOCUS:\n                return (\n                  <React.Fragment key={filterField.key}>\n                    <ComboBox\n                      placeholder=\"Any\"\n                      label={filterField.text}\n                      selectedKey={getSelectedKeys(filterField.key)}\n                      onChange={(_, item): void => {\n                        onChange({ item, field: filterField.key });\n                      }}\n                      multiSelect\n                      disabled={!!industryFocusLoadError && industryFocusLoadError.length > 0}\n                      autoComplete=\"on\"\n                      options={industryFocusOptionList?.map((item) => ({\n                        key: item.key,\n                        text: item.key,\n                      }))}\n                      styles={comboStyles}\n                    />\n                  </React.Fragment>\n                );\n              case fieldTypes.TECHNICAL_EXPERTISE:\n                return (\n                  <React.Fragment key={filterField.key}>\n                    <ComboBox\n                      placeholder=\"Any\"\n                      label={filterField.text}\n                      selectedKey={getSelectedKeys(filterField.key)}\n                      onChange={(_, item): void => {\n                        onChange({ item, field: filterField.key });\n                      }}\n                      multiSelect\n                      disabled={\n                        !!technicalExpertiseLoadError && technicalExpertiseLoadError.length > 0\n                      }\n                      autoComplete=\"on\"\n                      options={technicalExpertiseOptionList?.map((item) => ({\n                        key: item.key,\n                        text: item.key,\n                      }))}\n                      styles={comboStyles}\n                    />\n                  </React.Fragment>\n                );\n              case fieldTypes.TECHNOLOGY_AREA:\n                return (\n                  <React.Fragment key={filterField.key}>\n                    <ComboBox\n                      placeholder=\"Any\"\n                      label={filterField.text}\n                      selectedKey={getSelectedKeys(filterField.key)}\n                      onChange={(_, item): void => {\n                        onChange({ item, field: filterField.key });\n                      }}\n                      multiSelect\n                      disabled={!!technologyAreaLoadError && technologyAreaLoadError.length > 0}\n                      autoComplete=\"on\"\n                      options={technologyAreaOptionList}\n                      styles={comboStyles}\n                    />\n                  </React.Fragment>\n                );\n              case fieldTypes.REVIEW_STATUS:\n                const reviewStatusOptions: IDropdownOption[] = reviewStatusOptionList?.map(\n                  (option) => ({\n                    key: option.key,\n                    text: option.text,\n                  })\n                ) as IDropdownOption[];\n\n                return (\n                  <React.Fragment key={filterField.key}>\n                    <Dropdown\n                      placeholder=\"Any\"\n                      label={filterField.text}\n                      selectedKeys={getSelectedKeys(filterField.key)}\n                      onChange={(_, item): void => {\n                        onChange({ item, field: filterField.key });\n                      }}\n                      multiSelect\n                      options={reviewStatusOptions}\n                      styles={dropdownStyles}\n                    />\n                  </React.Fragment>\n                );\n              case fieldTypes.ACTIVITY_OR_EVENT_TYPE:\n                return (\n                  <React.Fragment key={filterField.key}>\n                    <ComboBox\n                      placeholder=\"Any\"\n                      label={filterField.text}\n                      selectedKey={getSelectedKeys(filterField.key)}\n                      onChange={(_, item): void => {\n                        onChange({ item, field: filterField.key });\n                      }}\n                      multiSelect\n                      disabled={!!activityEventTypesError}\n                      autoComplete=\"on\"\n                      options={activityEventTypesOptionList}\n                      styles={comboStyles}\n                    />\n                  </React.Fragment>\n                );\n              case fieldTypes.CL_REGION:\n                return (\n                  <React.Fragment key={filterField.key}>\n                    <ComboBox\n                      placeholder=\"Any\"\n                      label={filterField.text}\n                      selectedKey={getSelectedKeys(filterField.key)}\n                      onChange={(_, item): void => {\n                        onChange({ item, field: filterField.key });\n                      }}\n                      multiSelect\n                      disabled={!!clRegionsLoadError && clRegionsLoadError?.length > 0}\n                      autoComplete=\"on\"\n                      options={clRegionsOptionList?.map((item) => ({\n                        key: item.key,\n                        text: item.key,\n                      }))}\n                      styles={comboStyles}\n                    />\n                  </React.Fragment>\n                );\n              case fieldTypes.DATE_PICKER:\n                return (\n                  <React.Fragment key={filterField.key}>\n                    <DatePicker {...datePickerProps(filterField)} styles={datePickerStyles} />\n                    <ClearDateText\n                      onClick={(): void => {\n                        removeFilterValue({\n                          fieldName: filterField.key,\n                          value: getSelectedKeys(filterField.key)[0],\n                        });\n                      }}\n                    >\n                      Clear\n                    </ClearDateText>\n                  </React.Fragment>\n                );\n              case fieldTypes.TECHNOLOGY_AREA_GROUP:\n                return (\n                  <React.Fragment key={filterField.key}>\n                    <ComboBox\n                      placeholder=\"Any\"\n                      label={filterField.text}\n                      selectedKey={getSelectedKeys(filterField.key)}\n                      onChange={(_, item): void => {\n                        onChange({ item, field: filterField.key });\n                      }}\n                      multiSelect\n                      disabled={false}\n                      autoComplete=\"on\"\n                      options={technologyAreaGroupOptionList}\n                      styles={comboStyles}\n                    />\n                  </React.Fragment>\n                );\n              case fieldTypes.AVAILABLE_CPM_LIST:\n                return (\n                  <React.Fragment key={filterField.key}>\n                    <ComboBox\n                      placeholder=\"Any\"\n                      label={filterField.text}\n                      selectedKey={getSelectedKeys(filterField.key)}\n                      onChange={(_, item): void => {\n                        onChange({ item, field: filterField.key });\n                      }}\n                      multiSelect\n                      disabled={false}\n                      autoComplete=\"on\"\n                      options={availableCpmOptionList}\n                      styles={comboStyles}\n                    />\n                  </React.Fragment>\n                );\n              default:\n                return (\n                  <React.Fragment key={filterField.key}>\n                    <p>Field not yet defined</p>{\" \"}\n                  </React.Fragment>\n                );\n            }\n          })}\n        </Stack>\n      </div>\n    </SideBarDiv>\n  );\n};\n\nexport default SideBar;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { ReactElement } from \"react\";\n\nimport { connect } from \"react-redux\";\nimport { Dispatch } from \"redux\";\n\nimport filter from \"lodash/filter\";\n\nimport * as ActivityEventTypesSelectors from \"Dataflows/ActivityEventTypes/ActivityEventTypesSelector\";\nimport * as AwardPeriodSelectors from \"Dataflows/AwardPeriod/AwardPeriodSelector\";\nimport * as AwardKitSkuSelectors from \"Dataflows/AwardKitSku/AwardKitSkuSelector\";\nimport * as ClRegionsSelectors from \"Dataflows/ClRegion/ClRegionSelector\";\nimport * as CommonDataActionTypes from \"Dataflows/CommonData/CommonDataAction\";\nimport * as CommonDataSelectors from \"Dataflows/CommonData/CommonDataSelector\";\nimport * as CountryRegionSelectors from \"Dataflows/CountryRegion/CountryRegionSelector\";\nimport * as IndustryFocusSelectors from \"Dataflows/IndustryFocus/IndustryFocusSelector\";\nimport * as RegionSelectors from \"Dataflows/Region/RegionSelector\";\nimport * as StateProvinceActions from \"Dataflows/StateProvince/StateProvinceAction\";\nimport * as StateProvinceSelectors from \"Dataflows/StateProvince/StateProvinceSelector\";\nimport * as TechnicalExpertiseSelectors from \"Dataflows/TechnicalExpertise/TechnicalExpertiseSelector\";\nimport * as TechnologyAreaSelectors from \"Dataflows/TechnologyArea/TechnologyAreaSelector\";\n\nimport SideBar from \"Components/SideBar/SideBar\";\nimport { FilterValueFieldNames } from \"Constants/FilterFields\";\nimport { TenantTypesEnum } from \"Constants/TenantTypes\";\nimport { AppState } from \"Dataflows/Reducers\";\nimport { TechnologyAreaActionTypes } from \"Dataflows/TechnologyArea/TechnologyAreaAction\";\nimport { IFilterValue } from \"Interfaces/IFilterValue\";\n\nimport { ISideBarContainerProps } from \"./ISideBarContainerProps\";\n\n/**\n * Get the selected technology area group names.\n */\nexport const getSelectedTechAreaGroupNames = (selectedFilterValues: IFilterValue[]): string[] => {\n  return filter(\n    selectedFilterValues,\n    (item) => item.fieldName === FilterValueFieldNames.TECHNOLOGY_AREA_GROUP\n  ).map((item) => item.value);\n};\n\n/**\n * Sidebar displays filter search and listing.\n * @FunctionComponent\n * @param {ISideBarProps} props The side bar props.\n * @returns {React.FunctionComponent<ISideBarContainerProps>} The side bar component.\n */\nconst SideBarContainer: React.FunctionComponent<ISideBarContainerProps> = (\n  props: ISideBarContainerProps\n): ReactElement => {\n  const {\n    actions: { loadStateProvince },\n    awardPeriodOptionList,\n    awardKitSkuOptionList,\n    awardKitSkuLoadError,\n    countryRegionOptionList,\n    countryRegionsLoadError,\n    filterFields,\n    selectedFilterValues,\n    stateProvinceOptionList,\n    stateProvincesLoadError,\n    industryFocusOptionList,\n    industryFocusLoadError,\n    technicalExpertiseOptionList,\n    technicalExpertiseLoadError,\n    technologyAreaOptionList,\n    technologyAreaGroupOptionList,\n    technologyAreaLoadError,\n    clRegionsOptionList,\n    activityEventTypesOptionList,\n    activityEventTypesError,\n    clRegionsLoadError,\n    reviewStatusOptionList,\n    availableCpmOptionList,\n    title,\n    tenant,\n    urlWithParam,\n    addFilterValue,\n    removeFilterCountryValue,\n    removeFilterProvinceValue,\n    onTechAreaGroupFilterValueChanged,\n    removeFilterValue,\n    updateFilterValue,\n  } = props;\n\n  return (\n    <SideBar\n      addFilterValue={addFilterValue}\n      removeFilterValue={removeFilterValue}\n      updateFilterValue={updateFilterValue}\n      removeFilterProvinceValue={removeFilterProvinceValue}\n      removeFilterCountryValue={removeFilterCountryValue}\n      onTechAreaGroupFilterValueChanged={onTechAreaGroupFilterValueChanged}\n      selectedFilterValues={selectedFilterValues}\n      awardPeriodOptionList={awardPeriodOptionList}\n      awardKitSkuOptionList={awardKitSkuOptionList}\n      awardKitSkuLoadError={awardKitSkuLoadError}\n      countryRegionOptionList={countryRegionOptionList}\n      countryRegionsLoadError={countryRegionsLoadError}\n      regionOptionList={countryRegionOptionList}\n      regionsLoadError={countryRegionsLoadError}\n      stateProvinceOptionList={stateProvinceOptionList}\n      stateProvincesLoadError={stateProvincesLoadError}\n      industryFocusOptionList={industryFocusOptionList}\n      industryFocusLoadError={industryFocusLoadError}\n      technicalExpertiseOptionList={technicalExpertiseOptionList}\n      technicalExpertiseLoadError={technicalExpertiseLoadError}\n      technologyAreaOptionList={technologyAreaOptionList}\n      technologyAreaGroupOptionList={technologyAreaGroupOptionList}\n      technologyAreaLoadError={technologyAreaLoadError}\n      clRegionsOptionList={clRegionsOptionList}\n      activityEventTypesOptionList={activityEventTypesOptionList}\n      activityEventTypesError={activityEventTypesError}\n      clRegionsLoadError={clRegionsLoadError}\n      loadStateProvince={loadStateProvince}\n      reviewStatusOptionList={reviewStatusOptionList}\n      availableCpmOptionList={availableCpmOptionList}\n      title={title}\n      filterFields={filterFields}\n      urlWithParam={urlWithParam}\n    />\n  );\n};\n\n/**\n * Maps SideBar to redux state\n * @param {AppState} state The App state.\n * @param {Partial<ISideBarContainerProps>} props The side bar container props.\n */\nconst mapStateToProps = (state: AppState, props: Partial<ISideBarContainerProps>) => {\n  const selectedTechAreaGroups = !!props.selectedFilterValues\n    ? getSelectedTechAreaGroupNames(props.selectedFilterValues)\n    : [];\n  return {\n    awardPeriodOptionList: AwardPeriodSelectors.getAwardPeriodOptionList(\n      state.awardPeriodDataState\n    ),\n    awardKitSkuOptionList: AwardKitSkuSelectors.getAwardKitSkuOptionList(\n      state.awardKitSkuDataState\n    ),\n    awardKitSkuLoadError: AwardKitSkuSelectors.getAwardKitSkuLoadError(state.awardKitSkuDataState),\n    countryRegionOptionList: CountryRegionSelectors.getCountryRegionsOptionList(\n      state.countryRegionDataState\n    ),\n    countryRegionsLoadError: CountryRegionSelectors.getCountryRegionLoadError(\n      state.countryRegionDataState\n    ),\n    regionsLoadError: RegionSelectors.getRegionLoadError(state.regionDataState),\n    regionOptionList: RegionSelectors.getRegionsOptionList(state.regionDataState),\n    stateProvinceOptionList: StateProvinceSelectors.getStateProvincesOptionList(\n      state.stateProvinceDataState\n    ),\n    stateProvincesLoadError: StateProvinceSelectors.getStateProvinceLoadError(\n      state.stateProvinceDataState\n    ),\n    industryFocusOptionList: IndustryFocusSelectors.getIndustryFocusOptionList(\n      state.industryFocusDataState\n    ),\n    industryFocusLoadError: IndustryFocusSelectors.getIndustryFocusLoadError(\n      state.industryFocusDataState\n    ),\n    technicalExpertiseOptionList: TechnicalExpertiseSelectors.getTechnicalExpertiseOptionList(\n      state.technicalExpertiseDataState\n    ),\n    technicalExpertiseLoadError: TechnicalExpertiseSelectors.getTechnicalExpertiseLoadError(\n      state.technicalExpertiseDataState\n    ),\n    technologyAreaOptionList: TechnologyAreaSelectors.selectTechnologyAreaBySelectedGroups(\n      state.technologyAreaDataState,\n      selectedTechAreaGroups\n    ),\n    activityEventTypesOptionList: ActivityEventTypesSelectors.getActivityEventTypesOptionsList(\n      state.activityEventTypesState\n    ),\n    activityEventTypesError: ActivityEventTypesSelectors.getActivityEventTypesLoadError(\n      state.activityEventTypesState\n    ),\n    technologyAreaGroupOptionList: TechnologyAreaSelectors.getTechnologyAreaGroupOptionList(\n      state.technologyAreaDataState\n    ),\n    technologyAreaLoadError: TechnologyAreaSelectors.getTechnologyAreaLoadError(\n      state.technologyAreaDataState\n    ),\n    clRegionsOptionList: ClRegionsSelectors.getClRegionsOptionList(state.clRegionsDataState),\n    clRegionsLoadError: ClRegionsSelectors.getClRegionsLoadError(state.clRegionsDataState),\n    reviewStatusOptionList: CommonDataSelectors.getMvpReviewStatusOptionList(state.commonDataState),\n    availableCpmOptionList:\n      props.tenant == TenantTypesEnum.MSP\n        ? CommonDataSelectors.getMlsaAvailableCpmOptionList(state.commonDataState)\n        : CommonDataSelectors.getMvpAvailableCpmOptionList(state.commonDataState),\n  };\n};\n\n/**\n * Maps Component's dispatch/handler props to redux state\n * @param {Dispatch} dispatch The dispatch.\n */\nconst mapDispatchToProps = (\n  dispatch: Dispatch<\n    | StateProvinceActions.StateProvinceActionTypes\n    | TechnologyAreaActionTypes\n    | CommonDataActionTypes.CommonDataActionTypes\n  >\n) => ({\n  actions: {\n    loadStateProvince: (countryRegionName: string): StateProvinceActions.StateProvinceActionTypes =>\n      dispatch(StateProvinceActions.getStateProvince(countryRegionName)),\n  },\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(SideBarContainer);\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { IAwardPeriodDataState } from \"Interfaces/SiteContent/IAwardPeriodDataState\";\nimport { IAwardPeriodOption } from \"Interfaces/SiteContent/IAwardPeriodOption\";\n\n/**\n * Returns the award period option list.\n * @param awardPeriodState\n */\nexport const getAwardPeriodOptionList = (\n  awardPeriodState: IAwardPeriodDataState\n): IAwardPeriodOption[] => awardPeriodState.awardPeriodOptionList;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { useEffect, useState, ReactElement } from \"react\";\n\nimport { connect, useDispatch } from \"react-redux\";\nimport { withRouter } from \"react-router-dom\";\nimport { bindActionCreators, compose, Dispatch } from \"redux\";\n\nimport invert from \"lodash/invert\";\nimport { ActionButton, FontIcon, SearchBox, Stack } from \"office-ui-fabric-react/lib\";\n\nimport { PrimaryButton } from \"@fluentui/react\";\n\nimport * as AccessControlConstants from \"Constants/AccessControlConstants\";\nimport * as AccessControlActions from \"Dataflows/AccessControl/AccessControlAction\";\nimport * as TechnologyAreaActions from \"Dataflows/TechnologyArea/TechnologyAreaAction\";\n\nimport AccessControlList from \"Components/AccessControlList/AccessControlList\";\nimport ListCounts from \"Components/Common/ListCounts/ListCounts\";\nimport { Title } from \"Components/Common/Results/Result.styles\";\nimport { iconButtonStyles } from \"Components/Common/SharedListStyles.styles\";\nimport { RoleGuideList } from \"Components/RoleGuideList/RoleGuideList\";\nimport { OperationStatus } from \"Constants/OperationStatus\";\nimport { RoleNamesEnum } from \"Constants/RolesPermissionsConstants\";\nimport { SubSiteUrlRootPath, TenantTypesEnum } from \"Constants/TenantTypes\";\nimport {\n  getAccessControlFilterValues,\n  getCurrentPage,\n  getCurrentTenant,\n  getFilteredCount,\n  getNetworkOperationStatus,\n  getPageSize,\n  getSearchText,\n  getUsers,\n} from \"Dataflows/AccessControl/AccessControlSelector\";\nimport { AppState } from \"Dataflows/Reducers\";\nimport { IFilterField } from \"Interfaces/IFilterField\";\nimport { IFilterValue } from \"Interfaces/IFilterValue\";\nimport { getTenant } from \"Utility/Utils\";\n\nimport {\n  buttonStackTokens,\n  containerStackStyles,\n  filterButtonStyles,\n  listStackStyles,\n  searchBoxStyles,\n  tableStackStyles,\n  PaddedFlexRow,\n} from \"../Common/CommonContainer.styles\";\nimport SideBarContainer from \"../SideBarContainer/SideBarContainer\";\nimport { IAccessControlContainerProps } from \"./IAccessControlContainerProps\";\n\nconst fakeRoleGuideMspItems = {\n  roles: [\n    {\n      id: \"programOwner\",\n      name: RoleNamesEnum.PROGRAM_OWNER,\n    },\n    {\n      id: \"reviewer\",\n      name: RoleNamesEnum.COMMUNITY_MANAGER,\n    },\n    {\n      id: \"guest\",\n      name: RoleNamesEnum.GUEST,\n    },\n    {\n      id: \"benefitsManager\",\n      name: RoleNamesEnum.BENEFITS_MANAGER,\n    },\n  ],\n  permissions: [\n    {\n      id: \"viewUsers\",\n      name: \"View Users\",\n      roles: [\"programOwner\", \"benefitsManager\", \"reviewer\"],\n    },\n    {\n      id: \"updateUsers\",\n      name: \"Update Users\",\n      roles: [\"programOwner\", \"reviewer\"],\n    },\n    {\n      id: \"viewEvents\",\n      name: \"View Events\",\n      roles: [\"programOwner\", \"reviewer\"],\n    },\n    {\n      id: \"reviewEvents\",\n      name: \"Review Events\",\n      roles: [\"programOwner\", \"reviewer\"],\n    },\n    {\n      id: \"viewApplications\",\n      name: \"View Applications\",\n      roles: [\"programOwner\", \"reviewer\", \"guest\"],\n    },\n    {\n      id: \"scoreReviewApplications\",\n      name: \"Score/Review Applications\",\n      roles: [\"programOwner\", \"reviewer\", \"guest\"],\n    },\n    {\n      id: \"assignUpdateOwner\",\n      name: \"Assign/Update Owner\",\n      roles: [],\n    },\n    {\n      id: \"assignUpdateMVPReviewers\",\n      name: \"Assign/Update MVP Reviewers\",\n      roles: [\"programOwner\"],\n    },\n    {\n      id: \"assignUpdateGuest\",\n      name: \"Assign/Update Guest\",\n      roles: [\"programOwner\", \"reviewer\"],\n    },\n    {\n      id: \"ManuallyAssignApplications\",\n      name: \"Manually Assign Applications\",\n      roles: [\"programOwner\"],\n    },\n    {\n      id: \"viewBenefits\",\n      name: \"View Benefits\",\n      roles: [\"programOwner\", \"benefitsManager\", \"reviewer\"],\n    },\n    {\n      id: \"updateBenefits\",\n      name: \"Update Benefits\",\n      roles: [\"programOwner\", \"benefitsManager\"],\n    },\n  ],\n};\n\nconst fakeRoleGuideRdItems = {\n  roles: [\n    {\n      id: \"programOwner\",\n      name: RoleNamesEnum.PROGRAM_OWNER,\n    },\n    {\n      id: \"benefitsManager\",\n      name: RoleNamesEnum.BENEFITS_MANAGER,\n    },\n    {\n      id: \"reviewer\",\n      name: RoleNamesEnum.COMMUNITY_MANAGER,\n    },\n    {\n      id: \"guest\",\n      name: RoleNamesEnum.GUEST,\n    },\n  ],\n  permissions: [\n    {\n      id: \"viewUsers\",\n      name: \"View Users\",\n      roles: [\"programOwner\", \"benefitsManager\", \"reviewer\"],\n    },\n    {\n      id: \"updateUsers\",\n      name: \"Update Users\",\n      roles: [\"programOwner\", \"reviewer\"],\n    },\n    {\n      id: \"viewEvents\",\n      name: \"View Events\",\n      roles: [\"programOwner\", \"reviewer\"],\n    },\n    {\n      id: \"reviewEvents\",\n      name: \"Review Events\",\n      roles: [\"programOwner\", \"reviewer\"],\n    },\n    {\n      id: \"viewApplications\",\n      name: \"View Applications\",\n      roles: [\"programOwner\", \"reviewer\", \"guest\"],\n    },\n    {\n      id: \"scoreReviewApplications\",\n      name: \"Score/Review Applications\",\n      roles: [\"programOwner\", \"reviewer\", \"guest\"],\n    },\n    {\n      id: \"assignUpdateOwner\",\n      name: \"Assign/Update Owner\",\n      roles: [],\n    },\n    {\n      id: \"assignUpdateMVPReviewers\",\n      name: \"Assign/Update MVP Reviewers\",\n      roles: [\"programOwner\"],\n    },\n    {\n      id: \"assignUpdateGuest\",\n      name: \"Assign/Update Guest\",\n      roles: [\"programOwner\", \"reviewer\"],\n    },\n    {\n      id: \"ManuallyAssignApplications\",\n      name: \"Manually Assign Applications\",\n      roles: [\"programOwner\"],\n    },\n    {\n      id: \"viewBenefits\",\n      name: \"View Benefits\",\n      roles: [\"programOwner\", \"benefitsManager\", \"reviewer\"],\n    },\n    {\n      id: \"updateBenefits\",\n      name: \"Update Benefits\",\n      roles: [\"programOwner\", \"benefitsManager\"],\n    },\n    {\n      id: \"viewDistributionLists\",\n      name: \"View Distribution Lists\",\n      roles: [\"programOwner\", \"benefitsManager\", \"reviewer\"],\n    },\n    {\n      id: \"updateDistributionLists\",\n      name: \"Update Distribution Lists\",\n      roles: [\"programOwner\", \"benefitsManager\"],\n    },\n    {\n      id: \"updateLoginEmail\",\n      name: \"Update Login Email\",\n      roles: [\"programOwner\", \"benefitsManager\"],\n    },\n  ],\n};\n\nconst fakeRoleGuideMvpItems = {\n  roles: [\n    {\n      id: \"businessGroup\",\n      name: RoleNamesEnum.BUSINESS_GROUP,\n    },\n    {\n      id: \"executive\",\n      name: RoleNamesEnum.EXECUTIVE,\n    },\n    {\n      id: \"productGroupPartner\",\n      name: RoleNamesEnum.PRODUCT_GROUP_PARTNER,\n    },\n    {\n      id: \"communityManager\",\n      name: RoleNamesEnum.COMMUNITY_MANAGER,\n    },\n    {\n      id: \"benefitsManager\",\n      name: RoleNamesEnum.BENEFITS_MANAGER,\n    },\n    {\n      id: \"programOwner\",\n      name: RoleNamesEnum.PROGRAM_OWNER,\n    },\n  ],\n  permissions: [\n    {\n      id: \"viewUsers\",\n      name: \"View Users\",\n      roles: [\n        \"programOwner\",\n        \"benefitsManager\",\n        \"communityManager\",\n        \"productGroupPartner\",\n        \"businessGroup\",\n      ],\n    },\n    {\n      id: \"updateUsers\",\n      name: \"Update Users\",\n      roles: [\"programOwner\", \"communityManager\", \"businessGroup\"],\n    },\n    {\n      id: \"viewAccessControl\",\n      name: \"View Access Control\",\n      roles: [\"programOwner\", \"communityManager\", \"businessGroup\"],\n    },\n    {\n      id: \"editAccessControl\",\n      name: \"Edit Access Control\",\n      roles: [\"programOwner\"],\n    },\n    {\n      id: \"viewDistributionLists\",\n      name: \"View Distribution Lists\",\n      roles: [\n        \"programOwner\",\n        \"benefitsManager\",\n        \"communityManager\",\n        \"productGroupPartner\",\n        \"businessGroup\",\n      ],\n    },\n    {\n      id: \"updateDistributionLists\",\n      name: \"Edit Distribution Lists\",\n      roles: [\n        \"programOwner\",\n        \"benefitsManager\",\n        \"communityManager\",\n        \"productGroupPartner\",\n        \"businessGroup\",\n      ],\n    },\n    {\n      id: \"viewBenefits\",\n      name: \"View Benefit codes\",\n      roles: [\n        \"programOwner\",\n        \"benefitsManager\",\n        \"communityManager\",\n        \"productGroupPartner\",\n        \"businessGroup\",\n      ],\n    },\n    {\n      id: \"updateBenefits\",\n      name: \"Claim benefits on behalf of user\",\n      roles: [\"programOwner\", \"benefitsManager\"],\n    },\n    {\n      id: \"viewApplications\",\n      name: \"View Applications\",\n      roles: [\n        \"programOwner\",\n        \"executive\",\n        \"communityManager\",\n        \"productGroupPartner\",\n        \"businessGroup\",\n        \"benefitsManager\",\n      ],\n    },\n    {\n      id: \"viewDemographics\",\n      name: \"View Demographics\",\n      roles: [\"programOwner\", \"communityManager\", \"businessGroup\", \"benefitsManager\"],\n    },\n    {\n      id: \"assignScoreApplications\",\n      name: \"Assign/Score Applications\",\n      roles: [\"programOwner\", \"productGroupPartner\"],\n    },\n    {\n      id: \"adjustApplications\",\n      name: \"Adjust application status and resolve flags\",\n      roles: [\"programOwner\", \"businessGroup\"],\n    },\n    {\n      id: \"flagApplications\",\n      name: \"Flag applications\",\n      roles: [\"executive\", \"communityManager\"],\n    },\n    {\n      id: \"updateLoginEmail\",\n      name: \"Update Login Email\",\n      roles: [\"programOwner\", \"benefitsManager\"],\n    },\n    {\n      id: \"grantAnnualException\",\n      name: \"Grant Annual Exception\",\n      roles: [\"programOwner\", \"businessGroup\"],\n    },\n    {\n      id: \"updateApplicationTechnologyArea\",\n      name: \"Update the TA and Reset the score\",\n      roles: [\"programOwner\", \"businessGroup\"],\n    },\n  ],\n};\n\n/**\n *\n * @param tenant Tenant string param.\n * @returns Fake (for now) role guide items.\n * TODO: The return will need to be typed once we have the real data.\n */\nconst roleGuideItems = (tenant: string) => {\n  if (tenant === TenantTypesEnum.MLSA) {\n    return fakeRoleGuideMspItems;\n  } else if (tenant === TenantTypesEnum.RD) {\n    return fakeRoleGuideRdItems;\n  } else {\n    return fakeRoleGuideMvpItems;\n  }\n};\n\n/**\n *\n * @param tenant Tenant string param.\n * @returns Access control filter fields.\n */\nconst getAccessControlFilterFields = (tenant: string): IFilterField[] => {\n  const tenantType = getTenant(tenant as TenantTypesEnum);\n\n  if (tenantType === TenantTypesEnum.MLSA) {\n    return AccessControlConstants.mlsaAccessControlFilterFields;\n  } else if (tenantType === TenantTypesEnum.RD) {\n    return AccessControlConstants.rdAccessControlFilterFields;\n  } else {\n    return AccessControlConstants.mvpAccessControlFilterFields;\n  }\n};\n\n/**\n * Access Control Container element that displays side bar filtering and result listing.\n * @FunctionComponent\n * @param {IAccessControlContainerProps} props The side bar props.\n * @returns {React.FunctionComponent<IAccessControlContainerProps>} The side bar component.\n */\nconst AccessControlContainer: React.FunctionComponent<IAccessControlContainerProps> = (\n  props: IAccessControlContainerProps\n): ReactElement => {\n  const dispatch = useDispatch();\n  const {\n    actions: {\n      addAccessControlFilterValue,\n      removeAccessControlFilterValue,\n      removeAccessControlProvinceFilterValue,\n      removeAccessControlCountryFilterValue,\n      searchUsers,\n      updateAccessControlFilterValue,\n      resetPagination,\n    },\n    filteredCount,\n    history,\n    currentPage,\n    pageSize,\n    selectedUsersFilterValues,\n    users,\n    tenant,\n    activeTenant,\n    networkStatus,\n    match: { params },\n  } = props;\n\n  const [showRoleGuide, setShowRoleGuide] = useState(false);\n  const [searchText, setSearchText] = useState(props.searchText);\n\n  if (!tenant) {\n    history.push(\"/notFound\");\n  }\n\n  useEffect(() => {\n    if (tenant === TenantTypesEnum.MVP) {\n      dispatch(TechnologyAreaActions.getTechnologyAreas(tenant));\n    }\n  }, []);\n\n  // TODO: Get this from Saga API Call once backend is ready.\n  const [roleAndPermissions, setRoleAndPermissions] = useState(roleGuideItems(tenant));\n\n  const hasPermission = (roleId: string, permissionId: string): boolean => {\n    const permission = roleAndPermissions.permissions.find((p) => p.id === permissionId);\n    if (permission) {\n      return permission.roles.includes(roleId);\n    } else {\n      return false;\n    }\n  };\n\n  const items = roleAndPermissions.permissions.map((permission) => {\n    const row = {\n      permission: permission.name,\n    };\n    roleAndPermissions.roles.map((role) => {\n      row[role.id] = (\n        <FontIcon iconName={hasPermission(role.id, permission.id) ? \"Accept\" : \"Cancel\"} />\n      );\n    });\n    return row;\n  });\n\n  /**\n   * Call search function for entered text.\n   * @method\n   * @returns {void}\n   */\n  const handleSearch = (\n    searchValue: string,\n    selectedUsersFilterValues: IFilterValue[],\n    page: number,\n    pageSize: number\n  ): void => {\n    searchUsers(\n      searchValue,\n      getTenant(TenantTypesEnum[tenant]),\n      selectedUsersFilterValues,\n      page,\n      pageSize\n    );\n  };\n\n  /**\n   * Call to reset filter values.\n   * @method\n   */\n  const resetFilterValues = (): void => {\n    resetPagination();\n\n    setSearchText(\"\");\n    handleSearch(\n      \"\",\n      AccessControlConstants.defaultFilterValues,\n      1,\n      AccessControlConstants.defaultListingPageSize\n    );\n  };\n\n  useEffect(() => {\n    if (networkStatus === OperationStatus.Pending) return;\n\n    if (tenant !== activeTenant) {\n      resetFilterValues();\n      return;\n    }\n\n    handleSearch(searchText, selectedUsersFilterValues, currentPage, pageSize);\n  }, [currentPage, pageSize]);\n\n  /**\n   * Function triggered when search box is cleared\n   * @param ev clear event that was trigger\n   */\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  const onClear = (ev: any): void => {\n    handleSearch(\"\", selectedUsersFilterValues, 1, pageSize);\n  };\n\n  return (\n    <Stack horizontal styles={containerStackStyles}>\n      {!showRoleGuide && (\n        <Stack.Item disableShrink>\n          <SideBarContainer\n            addFilterValue={addAccessControlFilterValue}\n            removeFilterValue={removeAccessControlFilterValue}\n            removeFilterProvinceValue={removeAccessControlProvinceFilterValue}\n            removeFilterCountryValue={removeAccessControlCountryFilterValue}\n            updateFilterValue={updateAccessControlFilterValue}\n            selectedFilterValues={selectedUsersFilterValues}\n            filterFields={getAccessControlFilterFields(TenantTypesEnum[tenant])}\n          />\n          <Stack horizontal tokens={buttonStackTokens}>\n            <PrimaryButton\n              styles={filterButtonStyles()}\n              text=\"Apply\"\n              onClick={(): void => handleSearch(searchText, selectedUsersFilterValues, 1, pageSize)}\n            />\n            <PrimaryButton styles={filterButtonStyles()} text=\"Reset\" onClick={resetFilterValues} />\n          </Stack>\n        </Stack.Item>\n      )}\n      <Stack.Item grow styles={listStackStyles()}>\n        <Stack styles={tableStackStyles}>\n          <PaddedFlexRow>\n            <Title>\n              {showRoleGuide ? \"Access Control - Role and Permissions table\" : \"Access Control\"}\n            </Title>\n            {showRoleGuide ? (\n              <ActionButton\n                iconProps={{ iconName: \"RevToggleKey\" }}\n                ariaLabel=\"Back to Access Control\"\n                onClick={(): void => setShowRoleGuide(false)}\n              >\n                Back to Access Control\n              </ActionButton>\n            ) : (\n              <ActionButton\n                iconProps={{ iconName: \"TextDocumentShared\" }}\n                ariaLabel=\"Back to Access Control\"\n                styles={iconButtonStyles}\n                onClick={(): void => setShowRoleGuide(true)}\n              >\n                Role Guide\n              </ActionButton>\n            )}\n            <ActionButton\n              iconProps={{ iconName: \"Add\" }}\n              ariaLabel=\"Add User\"\n              styles={iconButtonStyles}\n              onClick={(): void =>\n                history.push(`/${invert(SubSiteUrlRootPath)[tenant]}/access/addUser`)\n              }\n            >\n              Add User\n            </ActionButton>\n            <ListCounts total={filteredCount} loading={false} />\n          </PaddedFlexRow>\n          {!showRoleGuide && (\n            <SearchBox\n              placeholder=\"Search users\"\n              value={searchText}\n              onSearch={(searchValue: string): void =>\n                handleSearch(searchValue, selectedUsersFilterValues, 1, pageSize)\n              }\n              onChange={(event?: React.ChangeEvent<HTMLInputElement>, newValue?: string): void =>\n                setSearchText(newValue || \"\")\n              }\n              onClear={onClear}\n              styles={searchBoxStyles}\n            />\n          )}\n\n          {showRoleGuide ? (\n            <RoleGuideList items={items} roles={roleAndPermissions.roles} />\n          ) : (\n            /** @ts-ignore*/\n            <AccessControlList\n              data={users}\n              pageSize={pageSize}\n              tenant={tenant}\n              totalCount={filteredCount}\n              currentPage={currentPage}\n            />\n          )}\n        </Stack>\n      </Stack.Item>\n    </Stack>\n  );\n};\n\n/**\n * Maps AccessControlContainer to redux state\n * @param {AppState} state The App state.\n * @param {IAccessControlContainerProps} ownProps the component props.\n */\nconst mapStateToProps = (state: AppState) => ({\n  currentPage: getCurrentPage(state.accessControlState),\n  networkStatus: getNetworkOperationStatus(state.accessControlState),\n  pageSize: getPageSize(state.accessControlState),\n  searchText: getSearchText(state.accessControlState),\n  selectedUsersFilterValues: getAccessControlFilterValues(state.accessControlState),\n  filteredCount: getFilteredCount(state.accessControlState),\n  users: getUsers(state.accessControlState),\n  activeTenant: getCurrentTenant(state.accessControlState),\n});\n\n/**\n * Maps Component's dispatch/handler props to redux state\n * @param {Dispatch} dispatch The dispatch.\n */\nconst mapDispatchToProps = (dispatch: Dispatch<AccessControlActions.AccessControlActionTypes>) => ({\n  actions: {\n    searchUsers: bindActionCreators(AccessControlActions.searchUsers, dispatch),\n    resetPagination: bindActionCreators(AccessControlActions.resetPaginationProps, dispatch),\n    addAccessControlFilterValue: bindActionCreators(\n      AccessControlActions.addAccessControlFilterValue,\n      dispatch\n    ),\n    removeAccessControlFilterValue: bindActionCreators(\n      AccessControlActions.removeAccessControlFilterValue,\n      dispatch\n    ),\n    removeAccessControlProvinceFilterValue: bindActionCreators(\n      AccessControlActions.removeAccessControlFilterProvinceValue,\n      dispatch\n    ),\n    removeAccessControlCountryFilterValue: bindActionCreators(\n      AccessControlActions.removeAccessControlFilterCountryValue,\n      dispatch\n    ),\n    updateAccessControlFilterValue: bindActionCreators(\n      AccessControlActions.updateAccessControlFilterValue,\n      dispatch\n    ),\n  },\n});\n\nconst withConnect = connect(mapStateToProps, mapDispatchToProps);\nexport default compose(withRouter, withConnect)(AccessControlContainer) as React.FC<any>;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport {\n  getTheme,\n  IButtonStyles,\n  IStackItemStyles,\n  IStackStyles,\n  IStackTokens,\n  ITextStyles,\n} from \"@fluentui/react\";\n\nconst theme = getTheme();\n\n/**\n * The stack containing all of the form elements.\n */\nexport const containerStyles: IStackStyles = {\n  root: {\n    alignItems: \"center\",\n    marginBottom: \"1rem\",\n    padding: \"1.5rem\",\n    backgroundColor: theme.semanticColors.listItemBackgroundHovered,\n    borderRadius: \"8px\",\n    height: \"100%\",\n  },\n};\n\nexport const stackRoleStyles: IStackItemStyles = {\n  root: {\n    alignItems: \"left\",\n    display: \"flex\",\n    justifyContent: \"left\",\n    textTransform: \"capitalize\",\n    width: \"20%\",\n  },\n};\n\nexport const stackRoleDetailsStyles: IStackItemStyles = {\n  root: {\n    alignItems: \"left\",\n    display: \"flex\",\n    justifyContent: \"left\",\n    textTransform: \"capitalize\",\n    width: \"50%\",\n  },\n};\n\nexport const horizontalGapStackTokens: IStackTokens = {\n  childrenGap: 10,\n  padding: 10,\n};\n\nexport const buttonStyles: IButtonStyles = {\n  root: {\n    marginRight: 8,\n  },\n};\n\n/**\n * Delete button styles\n */\nexport const deleteButtonStyles: IButtonStyles = {\n  root: {\n    border: `1px solid ${theme.palette.red}`,\n    backgroundColor: theme.palette.red,\n    color: theme.palette.white,\n  },\n  rootHovered: {\n    backgroundColor: theme.palette.redDark,\n    color: theme.palette.white,\n  },\n  rootPressed: {\n    backgroundColor: theme.palette.red,\n    color: theme.palette.white,\n  },\n};\n\nexport const textStyles: ITextStyles = {\n  root: {\n    fontWeight: \"600\",\n    fontSize: \"16px\",\n    lineHeight: \"22px\",\n  },\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React from \"react\";\n\nimport { DefaultButton, IIconProps, PrimaryButton, Stack, Text } from \"@fluentui/react\";\n\nimport { RoleNamesEnum, RolesEnum } from \"Constants/RolesPermissionsConstants\";\nimport { IUserRole } from \"Interfaces/AccessControl/IUserRole\";\n\nimport {\n  buttonStyles,\n  containerStyles,\n  deleteButtonStyles,\n  horizontalGapStackTokens,\n  stackRoleDetailsStyles,\n  stackRoleStyles,\n  textStyles,\n} from \"./AccessControlRole.styles\";\nimport { IAccessControlRoleProps } from \"./AccessControlRoleProps\";\n\nconst editIcon: IIconProps = { iconName: \"Edit\" };\nconst deleteIcon: IIconProps = { iconName: \"Delete\" };\n\nexport const AccessControlRole = (props: IAccessControlRoleProps): React.ReactElement => {\n  const { role, actions } = props;\n\n  const canEdit = !role.userRoleName.includes(\"program-owner\");\n  const roleName = role.userRoleName\n    .substring(role.userRoleName.indexOf(\"-\"))\n    .replace(/-/g, \" \")\n    .trim()\n    // Workaround for rename of Tech Area Validator to Product Group Partner, ideally we should map the DB Role Names to the Display Names.\n    .replace(\"tech area validator\", RoleNamesEnum.PRODUCT_GROUP_PARTNER)\n    // Workaround for rename of MVP Reviewer to Community Manager\n    .replace(\n      \"reviewer\",\n      role.userRoleName == RolesEnum.MVP_REVIEWER ? RoleNamesEnum.COMMUNITY_MANAGER : \"reviewer\"\n    );\n\n  const roleDetails = (role: IUserRole) => {\n    if (role.technologyAreas?.length > 0) {\n      const technologyAreas = role.technologyAreas.map((ta) => ta.split(\"__\")[0]);\n      return technologyAreas.join(\", \");\n    }\n\n    if (role.awardCategories?.length > 0) {\n      const awardCategories = role.awardCategories.map((ac) => ac.split(\"__\")[0]);\n      return awardCategories.join(\", \");\n    }\n\n    if (role.userRegions?.length > 0) {\n      return role.userRegions\n        .map((ur) => {\n          if (ur.stateOrProvinceName && ur.stateOrProvinceName !== \"\")\n            return ur.stateOrProvinceName;\n          if (ur.countryOrRegionName && ur.countryOrRegionName !== \"\")\n            return ur.countryOrRegionName;\n          if (ur.clRegionName && ur.clRegionName !== \"\") return ur.clRegionName;\n        })\n        .join(\", \");\n    }\n\n    return \"\";\n  };\n\n  const confirmDeletingRole = () => {\n    actions.confirmDeletingRole(role.id);\n  };\n\n  return (\n    <>\n      <Stack\n        styles={containerStyles}\n        horizontalAlign=\"space-between\"\n        tokens={horizontalGapStackTokens}\n        horizontal\n      >\n        <Stack.Item grow={2} styles={stackRoleStyles}>\n          <Text styles={textStyles}>{roleName}</Text>\n        </Stack.Item>\n        <Stack.Item grow={2} styles={stackRoleDetailsStyles}>\n          <Text styles={textStyles}>{roleDetails(role)}</Text>\n        </Stack.Item>\n        <Stack.Item grow={3}>\n          <PrimaryButton\n            iconProps={editIcon}\n            styles={buttonStyles}\n            disabled={!canEdit}\n            onClick={(): void => {\n              actions.editRole(role);\n            }}\n          >\n            Edit\n          </PrimaryButton>\n          <DefaultButton\n            iconProps={deleteIcon}\n            styles={deleteButtonStyles}\n            onClick={confirmDeletingRole}\n            disabled={!canEdit}\n          >\n            Delete\n          </DefaultButton>\n        </Stack.Item>\n      </Stack>\n    </>\n  );\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport {\n  getTheme,\n  mergeStyleSets,\n  IButtonStyles,\n  IStackStyles,\n  IStackTokens,\n  ITextStyles,\n  FontWeights,\n  ICommandBarStyles,\n} from \"@fluentui/react\";\n\nconst theme = getTheme();\n\n/**\n * The stack containing all of the form elements.\n */\nexport const containerStyles: IStackStyles = {\n  root: {\n    marginBottom: \"0\",\n    padding: \"0.5rem\",\n    backgroundColor: theme.palette.white,\n    borderRadius: \"8px\",\n    height: \"100%\",\n  },\n};\n\nexport const buttonStyles: IButtonStyles = {\n  root: { marginRight: 8 },\n};\n\nexport const deleteButtonStyles: IButtonStyles = {\n  root: {\n    marginRight: 8,\n    border: `1px solid ${theme.palette.blue}`,\n    color: theme.palette.blue,\n  },\n  rootHovered: {\n    backgroundColor: theme.palette.white,\n    color: theme.palette.blue,\n  },\n  rootPressed: {\n    backgroundColor: theme.palette.blue,\n    color: theme.palette.blue,\n  },\n};\n\nexport const panelHeaderStyles: ITextStyles = {\n  root: {\n    fontWeight: \"600\",\n    fontSize: \"32px\",\n    lineHeight: \"40px\",\n    flexGrow: 1,\n    margin: \"24px\",\n  },\n};\n\nexport const popupTitleStyles: ITextStyles = {\n  root: {\n    color: theme.palette.blue,\n    fontWeight: \"600\",\n    fontSize: \"20px\",\n    lineHeight: \"28px\",\n  },\n};\n\nexport const popupContentStyles: ITextStyles = {\n  root: {\n    color: theme.palette.neutralPrimary,\n    fontWeight: \"400\",\n    fontSize: \"16px\",\n    lineHeight: \"22px\",\n  },\n};\n\nexport const popupStyles = mergeStyleSets({\n  root: {\n    background: \"rgba(0, 0, 0, 0.2)\",\n    bottom: \"0\",\n    left: \"0\",\n    position: \"fixed\",\n    right: \"0\",\n    top: \"0\",\n  },\n  content: {\n    borderTopStyle: \"solid\",\n    borderTopColor: theme.palette.blue,\n    background: \"white\",\n    left: \"50%\",\n    maxWidth: \"300px\",\n    padding: \"0 1em 1em\",\n    position: \"absolute\",\n    top: \"50%\",\n    transform: \"translate(-50%, -50%)\",\n  },\n});\n\nexport const popupHorizontalGapStackTokens: IStackTokens = {\n  childrenGap: 10,\n  padding: 10,\n};\n\nexport const commandBarStyles: ICommandBarStyles = {\n  root: {\n    borderRadius: \"8px\",\n    boxShadow: \" 0px 1px 4px rgba(0, 0, 0, 0.2)\",\n    margin: \"1rem 0.5rem 1.5rem\",\n    marginTop: \"0\",\n    padding: \"0.75rem\",\n    selectors: {\n      [\"button\"]: {\n        marginRight: \"36px\",\n      },\n      [\".ms-Button-label\"]: {\n        fontSize: \"14px\",\n        fontWeight: FontWeights.semibold,\n      },\n      [\"i[data-icon-name='Blocked']\"]: {\n        color: theme.palette.red,\n      },\n    },\n  },\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React from \"react\";\n\nimport { flattenDeep } from \"lodash\";\n\nimport { IListProps } from \"@fluentui/react\";\nimport { useConst } from \"@fluentui/react-hooks\";\nimport { DetailsRow, IGroup } from \"@fluentui/react/lib/DetailsList\";\nimport { GroupedList } from \"@fluentui/react/lib/GroupedList\";\nimport { Selection, SelectionMode, SelectionZone } from \"@fluentui/react/lib/Selection\";\n\nimport { IGroupItem } from \"./IGroupItem\";\nimport { IRegionalGroupedListProps } from \"./RegionalGroupedListProps\";\n\nexport const RegionalGroupedList: React.FunctionComponent<IRegionalGroupedListProps> = (\n  props: IRegionalGroupedListProps\n) => {\n  const { geoData, selectedData, onSelectionChanged } = props;\n\n  const buildGroups = (): IGroup[] => {\n    let startIndex = 0;\n    const groups = geoData.map((clRegion, _) => {\n      const hasStates = clRegion.countryRegions?.some((cr) => cr.stateProvinces.length > 0);\n      const group = {\n        count: clRegion.countryRegions?.length,\n        key: `group-${clRegion.clRegionId}`,\n        name: clRegion.clRegionName,\n        startIndex: startIndex,\n        level: 1,\n        children: hasStates\n          ? clRegion.countryRegions\n              ?.map((cr) => {\n                if (cr.stateProvinces.length === 0) {\n                  const groupLevel2WithoutStates = {\n                    count: 1,\n                    key: `group-${clRegion.clRegionId}-${cr.isoShort}`,\n                    name: cr.countryRegionName,\n                    startIndex: startIndex,\n                    level: 2,\n                  } as IGroup;\n                  startIndex = startIndex + 1;\n                  return groupLevel2WithoutStates;\n                }\n                const groupLevel2 = {\n                  count: cr.stateProvinces.length,\n                  key: `group-${clRegion.clRegionId}-${cr.isoShort}`,\n                  name: cr.countryRegionName,\n                  startIndex: startIndex,\n                  level: 2,\n                } as IGroup;\n\n                startIndex = startIndex + cr.stateProvinces.length;\n\n                return groupLevel2;\n              })\n              .filter((cr) => cr !== null)\n          : [],\n      } as IGroup;\n\n      if (!hasStates) {\n        startIndex = startIndex + (clRegion.countryRegions?.length ?? 0);\n      }\n\n      return group;\n    });\n\n    const global = {\n      count: startIndex,\n      key: \"group-global\",\n      name: \"Global\",\n      startIndex: 0,\n      level: 0,\n      children: groups,\n    };\n\n    return [global];\n  };\n\n  const buildItems = (): IGroupItem[] => {\n    const itemGroups: any = geoData.map((clr) => {\n      return clr.countryRegions?.map((cr) => {\n        if (cr.stateProvinces !== undefined && cr.stateProvinces?.length > 0) {\n          return cr.stateProvinces?.map((sp) => {\n            return {\n              key: `clRegion-${clr.clRegionName}-countryRegionName-${cr.countryRegionName}-stateProvinceName-${sp.stateProvinceName}`,\n              clRegionName: clr.clRegionName,\n              clRegionId: clr.clRegionId,\n              regionName: cr.countryRegionName,\n              regionIsoCode: cr.isoShort,\n              stateProvinceName: sp.stateProvinceName,\n              stateProvinceId: sp.stateProvinceId,\n            };\n          });\n        }\n\n        return [\n          {\n            key: `clRegion-${clr.clRegionName}-countryRegionName-${cr.countryRegionName}-stateProvinceName-null`,\n            clRegionName: clr.clRegionName,\n            clRegionId: clr.clRegionId,\n            regionName: cr.countryRegionName,\n            regionIsoCode: cr.isoShort,\n            stateProvinceName: cr.countryRegionName,\n            stateProvinceId: cr.isoShort,\n          },\n        ];\n      });\n    });\n\n    return flattenDeep<IGroupItem[]>(itemGroups);\n  };\n\n  const groups = buildGroups();\n  const items = buildItems();\n\n  const selection = useConst(() => {\n    const s = new Selection({\n      onSelectionChanged: (): void => {\n        if (onSelectionChanged) {\n          onSelectionChanged(s.getSelection() as IGroupItem[]);\n        }\n      },\n    });\n    s.setItems(items, true);\n\n    if (!!selectedData) {\n      selectedData.forEach((element) => {\n        s.setKeySelected(\n          `clRegion-${element.clRegionName}-countryRegionName-${element.countryOrRegionName}-stateProvinceName-${element.stateOrProvinceName}`,\n          true,\n          true\n        );\n      });\n    }\n\n    return s;\n  });\n\n  const onRenderCell = (\n    nestingDepth?: number,\n    item?: IGroupItem,\n    itemIndex?: number\n  ): React.ReactNode => {\n    return item && typeof itemIndex === \"number\" && itemIndex > -1 ? (\n      <DetailsRow\n        columns={[\n          {\n            key: \"stateProvinceName\",\n            name: \"stateProvinceName\",\n            fieldName: \"stateProvinceName\",\n            minWidth: 400,\n          },\n        ]}\n        groupNestingDepth={nestingDepth}\n        item={item}\n        itemIndex={itemIndex}\n        selection={selection}\n        selectionMode={SelectionMode.multiple}\n      />\n    ) : null;\n  };\n\n  return (\n    <div>\n      <SelectionZone selection={selection} selectionMode={SelectionMode.multiple}>\n        <GroupedList\n          items={items}\n          onRenderCell={onRenderCell}\n          selection={selection}\n          selectionMode={SelectionMode.multiple}\n          groups={groups}\n          onShouldVirtualize={(props: IListProps) => false}\n        />\n      </SelectionZone>\n    </div>\n  );\n};\n\nexport default RegionalGroupedList;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport styled from \"styled-components\";\n\nimport { getTheme, ISpinnerStyles, IStackStyles, IStackTokens } from \"@fluentui/react\";\n\nconst theme = getTheme();\n\nexport const Error = styled.div`\n  color: red;\n  margin-top: 5px;\n`;\n\n/**\n * The stack containing all of the form elements.\n */\nexport const containerStyles: IStackStyles = {\n  root: {\n    padding: \"1.5rem\",\n    borderRadius: \"8px\",\n    height: \"90vh\",\n  },\n};\n\n/**\n * The horizontal gap stack tokens\n */\nexport const horizontalGapStackTokens: IStackTokens = {\n  childrenGap: 10,\n  padding: 10,\n};\n\n/**\n * The vertical gap stack tokens\n */\nexport const verticalGapStackTokens: IStackTokens = {\n  childrenGap: 36,\n  padding: 10,\n};\n\n/**\n * Styles for the loading spinner\n */\nexport const spinnerStyles: ISpinnerStyles = {\n  root: {\n    marginTop: 32,\n  },\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { useState, ReactElement } from \"react\";\n\nimport { useSelector } from \"react-redux\";\n\nimport { Field, Form, Formik } from \"formik\";\nimport * as Yup from \"yup\";\n\nimport { DefaultButton, PrimaryButton } from \"@fluentui/react\";\nimport { Stack } from \"@fluentui/react/lib/Stack\";\n\nimport * as TechnologyAreaSelectors from \"Dataflows/TechnologyArea/TechnologyAreaSelector\";\n\nimport FormikDropdown from \"Components/Common/Dropdown/FormikDropdown\";\nimport FormikMultiDropdown from \"Components/Common/Dropdown/FormikMultiDropdown\";\nimport { IGroupItem } from \"Components/RegionalGroupedList/IGroupItem\";\nimport RegionalGroupedList from \"Components/RegionalGroupedList/RegionalGroupedList\";\nimport { accessControlUserRole } from \"Constants/AccessControlConstants\";\nimport { RolesEnum } from \"Constants/RolesPermissionsConstants\";\nimport { AppState } from \"Dataflows/Reducers\";\nimport { IUserRole } from \"Interfaces/AccessControl/IUserRole\";\nimport { IUserRoleRegion } from \"Interfaces/AccessControl/IUserRoleRegion\";\nimport { getTenant } from \"Utility/Utils\";\n\nimport {\n  containerStyles,\n  horizontalGapStackTokens,\n  verticalGapStackTokens,\n  Error,\n} from \"./AccessControlRolesForm.styles\";\nimport { IAccessControlRolesFormProps } from \"./AccessControlRolesFormProps\";\n\n/**\n * The Access Control Role Validation Schema.\n */\nconst validationSchema = Yup.object().shape({\n  userRoleName: Yup.string().trim().required(),\n  technologyAreas: Yup.array().when(\"userRoleName\", {\n    is: (userRoleName: string) => userRoleName.includes(RolesEnum.MVP_TECH_AREA_VALIDATOR),\n    then: Yup.array().min(1, \"Please select at least 1 Technology Focus Area.\").required(),\n    otherwise: Yup.array().notRequired(),\n  }),\n  awardCategories: Yup.array().when(\"userRoleName\", {\n    is: (userRoleName: string) => userRoleName.includes(RolesEnum.MVP_EXECUTIVE),\n    then: Yup.array().min(1, \"Please select at least 1 Award Category.\").required(),\n    otherwise: Yup.array().notRequired(),\n  }),\n  userRegions: Yup.array().when(\"userRoleName\", {\n    is: (userRoleName: string) => userRoleName.includes(\"reviewer\"),\n    then: Yup.array().min(1, \"Please select at least 1 Region, Country or State.\").required(),\n    otherwise: Yup.array().notRequired(),\n  }),\n});\n\nconst AccessControlRolesForm = (props: IAccessControlRolesFormProps): React.ReactElement => {\n  const { tenant, actions, selectedUserId, selectedUserRole, technologyFocusAreas, geoData } =\n    props;\n\n  const awardCategories = useSelector((state: AppState) =>\n    TechnologyAreaSelectors.getTechnologyAreaGroupOptionList(state.technologyAreaDataState)\n  );\n\n  let initValues: IUserRole = {\n    id: 0,\n    technologyAreas: [],\n    userRegions: [],\n    userRoleName: \"\",\n    adminUserId: selectedUserId,\n    awardCategories: [],\n  };\n\n  const isEditing = !!selectedUserRole;\n\n  if (isEditing) {\n    initValues = selectedUserRole;\n    if (initValues.technologyAreas.length > 0) {\n      initValues.technologyAreas = initValues.technologyAreas.map((x) => {\n        return technologyFocusAreas.find((y) => y.key.includes(`${x}__`))?.key ?? x;\n      });\n    }\n  }\n\n  const role = accessControlUserRole[getTenant(tenant)].find(\n    (x) => x.key === initValues.userRoleName\n  );\n  const [selectedRole, setSelectedRole] = useState<RolesEnum>(role?.key);\n  const dismissPanel = (): void => {\n    actions.setIsPanelOpen(false);\n  };\n\n  const roleFieldMap = [\n    {\n      roles: [RolesEnum.MVP_TECH_AREA_VALIDATOR],\n      field: \"technologyAreas\",\n    },\n    {\n      roles: [RolesEnum.MVP_REVIEWER, RolesEnum.MSA_REVIEWER, RolesEnum.RD_REVIEWER],\n      field: \"userRegions\",\n    },\n    {\n      roles: [RolesEnum.MVP_EXECUTIVE],\n      field: \"awardCategories\",\n    },\n  ];\n\n  const shouldRenderField = (selectedRole: RolesEnum | undefined, field: string): boolean => {\n    return roleFieldMap.find((x) => x.roles.includes(selectedRole as RolesEnum))?.field === field;\n  };\n\n  return (\n    <Formik\n      initialValues={initValues}\n      validationSchema={validationSchema}\n      onSubmit={(values, { setSubmitting }): void => {\n        actions.saveRole(values);\n        setSubmitting(true);\n        dismissPanel();\n      }}\n    >\n      {({ values, setFieldValue, isValid, touched, errors }): React.ReactNode => (\n        <Form>\n          <Stack\n            verticalAlign=\"space-between\"\n            styles={containerStyles}\n            tokens={horizontalGapStackTokens}\n          >\n            <Stack tokens={verticalGapStackTokens}>\n              <Stack.Item>\n                <Field\n                  component={FormikDropdown}\n                  options={accessControlUserRole[tenant]}\n                  disabled={isEditing}\n                  onChange={(_, value): void => {\n                    setFieldValue(\"technologyAreas\", []);\n                    setFieldValue(\"userRegions\", []);\n                    setFieldValue(\"userRoleName\", value.key);\n                    setSelectedRole(value.key);\n                  }}\n                  label=\"Role\"\n                  name=\"userRoleName\"\n                  placeholder=\"Select Role\"\n                />\n              </Stack.Item>\n              <Stack.Item>\n                {shouldRenderField(selectedRole, \"technologyAreas\") && (\n                  <>\n                    <Field\n                      component={FormikMultiDropdown}\n                      options={technologyFocusAreas}\n                      onChange={(_, value): void => {\n                        let techAreas: string[] = [];\n                        if (values.technologyAreas.includes(value.key)) {\n                          techAreas = values.technologyAreas.filter((x) => x !== value.key);\n                        } else {\n                          techAreas = [...values.technologyAreas, value.key];\n                        }\n                        setFieldValue(\"technologyAreas\", techAreas);\n                      }}\n                      label=\"Technology Areas\"\n                      name=\"technologyAreas\"\n                      placeholder=\"Select Technology Area\"\n                      required\n                    />\n                  </>\n                )}\n\n                {shouldRenderField(selectedRole, \"userRegions\") && (\n                  <>\n                    <RegionalGroupedList\n                      geoData={geoData}\n                      selectedData={initValues.userRegions}\n                      onSelectionChanged={(selection: IGroupItem[]): void => {\n                        const userRegions = selection.map((s) => {\n                          return {\n                            clRegionName: s.clRegionName,\n                            countryOrRegionName: s.regionName,\n                            stateOrProvinceName:\n                              s.regionName === s.stateProvinceName ? \"\" : s.stateProvinceName,\n                          } as IUserRoleRegion;\n                        });\n                        setFieldValue(\"userRegions\", userRegions);\n                      }}\n                    />\n                    {errors.userRegions && touched.userRegions ? (\n                      <Error>{errors.userRegions}</Error>\n                    ) : null}\n                  </>\n                )}\n\n                {shouldRenderField(selectedRole, \"awardCategories\") && (\n                  <>\n                    <Field\n                      component={FormikMultiDropdown}\n                      options={awardCategories}\n                      onChange={(_, value): void => {\n                        let awardCategories: string[] = [];\n                        if (values.awardCategories.includes(value.key)) {\n                          awardCategories = values.awardCategories.filter((x) => x !== value.key);\n                        } else {\n                          awardCategories = [...values.awardCategories, value.key];\n                        }\n                        setFieldValue(\"awardCategories\", awardCategories);\n                      }}\n                      label=\"Award Categories\"\n                      name=\"awardCategories\"\n                      placeholder=\"Select Award Category\"\n                      required\n                    />\n                  </>\n                )}\n              </Stack.Item>\n            </Stack>\n            <Stack.Item>\n              <Stack horizontal tokens={horizontalGapStackTokens}>\n                <PrimaryButton text=\"Save\" type=\"submit\" />\n                <DefaultButton text=\"Cancel\" onClick={dismissPanel} />\n              </Stack>\n            </Stack.Item>\n          </Stack>\n        </Form>\n      )}\n    </Formik>\n  );\n};\n\nexport default AccessControlRolesForm;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { useCallback, useState } from \"react\";\n\nimport {\n  CommandBar,\n  DefaultButton,\n  FocusTrapZone,\n  Layer,\n  Overlay,\n  Panel,\n  PanelType,\n  Popup,\n  PrimaryButton,\n  Spinner,\n  SpinnerSize,\n  Stack,\n  Text,\n} from \"@fluentui/react\";\n\nimport { OperationStatus } from \"Constants/OperationStatus\";\nimport { IUserRole } from \"Interfaces/AccessControl/IUserRole\";\n\nimport { AccessControlRole } from \"./AccessControlRole\";\nimport {\n  commandBarStyles,\n  containerStyles,\n  deleteButtonStyles,\n  panelHeaderStyles,\n  popupContentStyles,\n  popupHorizontalGapStackTokens,\n  popupStyles,\n  popupTitleStyles,\n} from \"./AccessControlRoles.styles\";\nimport AccessControlRolesForm from \"./AccessControlRolesForm\";\nimport { spinnerStyles } from \"./AccessControlRolesForm.styles\";\nimport { IAccessControlRolesProps } from \"./AccessControlRolesProps\";\n\nconst AccessControlRoles = (props: IAccessControlRolesProps): React.ReactElement => {\n  const { isLoadingStatus, selectedUser, roles, tenant, actions, technologyFocusAreas, geoData } =\n    props;\n\n  const isLoading = isLoadingStatus === OperationStatus.Pending;\n\n  const [isPanelOpen, setIsPanelOpen] = useState(false);\n  const [isConfirmationOpen, setIsConfirmationOpen] = useState(false);\n  const [selectedRoleId, setSelectedRoleId] = useState(0);\n  const [editingUserRole, setEditingUserRole] = useState<IUserRole>();\n\n  const openPanel = () => {\n    setEditingUserRole(undefined);\n    setIsPanelOpen(true);\n  };\n\n  const dismissPanel = () => {\n    setIsPanelOpen(false);\n  };\n\n  const openConfirmationModal = (roleId: number) => {\n    setIsConfirmationOpen(true);\n    setSelectedRoleId(roleId);\n  };\n\n  const dismissConfirmationModal = () => {\n    setIsConfirmationOpen(false);\n  };\n\n  const saveRole = (role: IUserRole): void => {\n    role.technologyAreas = role.technologyAreas.map((x) => {\n      return x.split(\"__\")[0];\n    });\n\n    if (!editingUserRole) {\n      actions.onCreateUserRole(tenant, role);\n    } else {\n      actions.onUpdateUserRole(tenant, role);\n    }\n\n    dismissPanel();\n  };\n\n  const editRole = (role: IUserRole): void => {\n    setIsPanelOpen(true);\n    setEditingUserRole(role);\n  };\n\n  const deleteRole = () => {\n    actions.onDeleteUserRole(selectedRoleId);\n    setIsConfirmationOpen(false);\n  };\n\n  const onRenderHeaderContent = useCallback(\n    () => <Text styles={panelHeaderStyles}>Choose Role</Text>,\n    []\n  );\n\n  if (isLoading) {\n    return <Spinner size={SpinnerSize.large} styles={spinnerStyles} />;\n  }\n\n  const commandBarItems = [\n    {\n      key: \"addNewRole\",\n      text: \"Add New Role\",\n      iconProps: { iconName: \"Add\" },\n      onClick: (): void => {\n        openPanel();\n      },\n    },\n  ];\n\n  return (\n    <>\n      <CommandBar items={commandBarItems} ariaLabel=\"Add New Role\" styles={commandBarStyles} />\n      {roles.length > 0 ? (\n        <Stack styles={containerStyles}>\n          {roles.map((r) => {\n            return (\n              <AccessControlRole\n                key={r.id}\n                role={r}\n                actions={{\n                  editRole: editRole,\n                  confirmDeletingRole: openConfirmationModal,\n                }}\n              />\n            );\n          })}\n        </Stack>\n      ) : null}\n\n      <Panel\n        isOpen={isPanelOpen}\n        onDismiss={dismissPanel}\n        type={PanelType.medium}\n        closeButtonAriaLabel=\"Close\"\n        onRenderHeader={onRenderHeaderContent}\n        isFooterAtBottom={true}\n      >\n        <AccessControlRolesForm\n          tenant={tenant}\n          selectedUserId={selectedUser?.id}\n          selectedUserRole={editingUserRole}\n          technologyFocusAreas={technologyFocusAreas}\n          geoData={geoData}\n          actions={{\n            saveRole,\n            setIsPanelOpen: dismissPanel,\n          }}\n        />\n      </Panel>\n\n      {isConfirmationOpen && (\n        <Layer>\n          <Popup\n            className={popupStyles.root}\n            role=\"dialog\"\n            aria-modal=\"true\"\n            onDismiss={dismissConfirmationModal}\n          >\n            <Overlay onClick={dismissConfirmationModal} />\n            <FocusTrapZone>\n              <div role=\"document\" className={popupStyles.content}>\n                <Stack tokens={popupHorizontalGapStackTokens}>\n                  <Stack.Item>\n                    <Text styles={popupTitleStyles}>Delete Role</Text>\n                  </Stack.Item>\n                  <Stack.Item>\n                    <Text styles={popupContentStyles}>\n                      This action in irreversible. Are you sure?\n                    </Text>\n                  </Stack.Item>\n                  <Stack horizontal horizontalAlign=\"end\">\n                    <DefaultButton onClick={deleteRole} styles={deleteButtonStyles}>\n                      Delete\n                    </DefaultButton>\n                    <PrimaryButton onClick={dismissConfirmationModal}>Cancel</PrimaryButton>\n                  </Stack>\n                </Stack>\n              </div>\n            </FocusTrapZone>\n          </Popup>\n        </Layer>\n      )}\n    </>\n  );\n};\n\nexport default AccessControlRoles;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { IStackItemStyles, IStackStyles, IStackTokens } from \"office-ui-fabric-react/lib/Stack\";\nimport { getTheme } from \"office-ui-fabric-react/lib/Styling\";\nimport styled from \"styled-components\";\n\nimport { IButtonStyles, IDropdownStyles, ITextStyles } from \"@fluentui/react\";\n\nconst theme = getTheme();\n\nexport const Main = styled.div`\n  background-color: white;\n  overflow-y: hidden;\n  padding: 2.5rem;\n  margin-top: 0.625rem;\n  border-radius: 0.5rem;\n  width: 100%;\n`;\n\n/**\n * The stack containing all of the form elements.\n */\nexport const formStackStyles: IStackStyles = {\n  root: {\n    margin: \"1.5rem\",\n    marginBottom: \"0\",\n  },\n};\n\n/**\n * Styles for stack item wrapping field.\n */\nexport const fieldItemStyles: IStackItemStyles = {\n  root: { height: \"35px\", width: \"47%\" },\n};\n\nexport const verticalStackTokens: IStackTokens = { childrenGap: 20 };\nexport const horizontalStackTokens: IStackTokens = { childrenGap: 40 };\nexport const buttonStackTokens: IStackTokens = { childrenGap: 16 };\n\nexport const buttonStyles: IButtonStyles = {\n  root: {\n    margin: \"0px 2px 20px auto\",\n    width: \"7.5rem\",\n  },\n};\n\n/**\n * Styles to highlight important text for the admin\n */\nexport const highlightTextStyles: ITextStyles = {\n  root: {\n    color: theme.palette.red,\n  },\n};\n\nexport const dropdownStyles: Partial<IDropdownStyles> = {\n  root: {\n    height: \"37px\",\n    display: \"flex\",\n    alignItems: \"flex-start\",\n    flexDirection: \"column\",\n    width: \"100%\",\n  },\n  label: {\n    width: \"100%\",\n  },\n  dropdown: {\n    width: \"100%\",\n    height: \"100%\",\n  },\n  title: {\n    height: \"37px\",\n    display: \"flex\",\n    alignItems: \"center\",\n  },\n  caretDownWrapper: {\n    display: \"flex\",\n    alignItems: \"center\",\n    height: \"100%\",\n  },\n};\n\nexport const flexStackStyles: IStackStyles = {\n  root: {\n    display: \"flex\",\n    flexWrap: \"wrap\",\n    marginBottom: \"1.5rem\",\n  },\n};\n\nexport const SolidDivider = styled.hr`\n  border-top: 1px solid ${theme.palette.neutralTertiaryAlt};\n  width: 100%;\n  width: calc(100% + 3rem);\n  align-self: center;\n  margin-left: -1.5rem; // negative margin needed to offset padding within container\n`;\n","/*!\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n */\r\n\r\nimport React, { ReactElement } from \"react\";\r\n\r\nimport { connect } from \"react-redux\";\r\nimport { withRouter } from \"react-router-dom\";\r\nimport { bindActionCreators, compose, Dispatch } from \"redux\";\r\n\r\nimport { FastField, Field, Form, Formik } from \"formik\";\r\nimport * as Yup from \"yup\";\r\n\r\nimport {\r\n  IPersonaProps,\r\n  IPickerItemProps,\r\n  Label,\r\n  NormalPeoplePicker,\r\n  PeoplePickerItem,\r\n  PersonaPresence,\r\n  PrimaryButton,\r\n  Text,\r\n  ValidationState,\r\n} from \"@fluentui/react\";\r\nimport { Stack } from \"@fluentui/react/lib/Stack\";\r\n\r\nimport * as AccessControlActions from \"Dataflows/AccessControl/AccessControlAction\";\r\n\r\nimport FormikDropdown from \"Components/Common/Dropdown/FormikDropdown\";\r\nimport FormikErrorMessage from \"Components/Common/FormikErrorMessage/FormikErrorMessage\";\r\nimport { accessControlUserStatus } from \"Constants/AccessControlConstants\";\r\nimport { OperationStatus } from \"Constants/OperationStatus\";\r\nimport { peoplePickerSuggestionProps } from \"Constants/PeoplePickerConstants\";\r\nimport { INPUT_REQUIRED } from \"Constants/ValidationMessages\";\r\nimport { IAccessControlCreateEditContainerProps } from \"Containers/AccessControl/AccessControlCreateEditContainer/IAccessControlCreateEditContainerProps\";\r\nimport { getNetworkOperationError } from \"Dataflows/AccessControl/AccessControlSelector\";\r\nimport { AppState } from \"Dataflows/Reducers\";\r\nimport { IWriteAccessControlUser } from \"Interfaces/AccessControl/IWriteAccessControlUser\";\r\nimport { callMsGraphGetUserByEmail } from \"Utility/MsGraphApiCall\";\r\nimport { onInputChange } from \"Utility/Utils\";\r\n\r\nimport {\r\n  buttonStackTokens,\r\n  buttonStyles,\r\n  dropdownStyles,\r\n  fieldItemStyles,\r\n  flexStackStyles,\r\n  formStackStyles,\r\n  highlightTextStyles,\r\n  horizontalStackTokens,\r\n  verticalStackTokens,\r\n  SolidDivider,\r\n} from \"./AccessControlUserForm.styles\";\r\nimport { IAccessControlUserFormProps } from \"./IAccessControlUserFormProps\";\r\nimport { IPersonaPropsExtend } from \"./IPersonaPropsExtend\";\r\n\r\n/**\r\n * Functional component to render the edit access user form.\r\n * @function\r\n * @param  {IAccessControlUserFormProps} props The props for the access user form component.\r\n * @returns {React.ReactElement} The react element.\r\n */\r\nconst AccessControlUserForm = (\r\n  props: IAccessControlUserFormProps & Partial<IAccessControlCreateEditContainerProps>\r\n): React.ReactElement => {\r\n  const {\r\n    actions,\r\n    selectedUser,\r\n    selectedUserId,\r\n    tenant,\r\n    isEditing,\r\n    newUserId,\r\n    networkOperationStatus,\r\n    networkOperationError,\r\n  } = props;\r\n\r\n  /**\r\n   * The Validation for the access user form.\r\n   */\r\n  const accessUserSchema = Yup.object().shape({\r\n    pickerUser: Yup.array()\r\n      .required(INPUT_REQUIRED)\r\n      .test(\"pickerUser\", INPUT_REQUIRED, function (value) {\r\n        if (!value || value.length <= 0) {\r\n          return false;\r\n        }\r\n        return true;\r\n      }),\r\n  });\r\n\r\n  const picker = React.useRef(null);\r\n  const isFormSubmitting = networkOperationStatus === OperationStatus.Pending;\r\n\r\n  /**\r\n   * Search AAD User Info by the input user email.\r\n   * @param {string}  filterText  the user email.\r\n   * @param {IPersonaProps[] | undefined}  currentPersonas  Already selected persons.\r\n   * @returns {IPersonaPropsExtend[] | Promise<IPersonaPropsExtend[]>} Selectable persons.\r\n   */\r\n  const onFilterChanged = (\r\n    filterText: string,\r\n    currentPersonas: IPersonaProps[] | undefined\r\n  ): IPersonaPropsExtend[] | Promise<IPersonaPropsExtend[]> => {\r\n    if (filterText && filterText.endsWith(\"@microsoft.com\")) {\r\n      return callMsGraphGetUserByEmail(filterText).then((value) => {\r\n        if (!value.error && !currentPersonas?.find((p) => p.id === value.id)) {\r\n          return [\r\n            {\r\n              id: value.id,\r\n              imageInitials: `${value.givenName[0]}${value.surname[0]}`,\r\n              text: value.displayName,\r\n              secondaryText: value.userPrincipalName,\r\n              presence: PersonaPresence.none,\r\n              firstName: value.givenName,\r\n              lastName: value.surname,\r\n              emailAddress: value.userPrincipalName,\r\n            },\r\n          ];\r\n        }\r\n      }) as Promise<IPersonaPropsExtend[]>;\r\n    } else {\r\n      return [];\r\n    }\r\n  };\r\n\r\n  /**\r\n   * Render item with secondary text for the NormalPeoplePicker.\r\n   */\r\n  const renderItemWithSecondaryText = (props: IPickerItemProps<IPersonaProps>) => {\r\n    const newProps = {\r\n      ...props,\r\n      item: {\r\n        ...props.item,\r\n        ValidationState: ValidationState.valid,\r\n        showSecondaryText: true,\r\n      },\r\n    };\r\n\r\n    return <PeoplePickerItem {...newProps} />;\r\n  };\r\n\r\n  const defaultSelect = [] as Array<IPersonaPropsExtend>;\r\n\r\n  if (isEditing) {\r\n    defaultSelect.push({\r\n      id: selectedUser?.id.toString(),\r\n      imageInitials: `${selectedUser?.firstName[0]}${selectedUser?.lastName[0]}`,\r\n      text: selectedUser?.emailAddress,\r\n      secondaryText: `${selectedUser?.firstName} ${selectedUser?.lastName}`,\r\n      presence: PersonaPresence.none,\r\n      firstName: selectedUser?.firstName as string,\r\n      lastName: selectedUser?.lastName as string,\r\n      emailAddress: selectedUser?.emailAddress as string,\r\n    });\r\n  }\r\n\r\n  const canOnlyUpdateStatus = isEditing || (newUserId !== 0 && newUserId !== undefined);\r\n\r\n  const showError = (error: string): React.ReactElement => {\r\n    return (\r\n      <>\r\n        <Stack.Item>\r\n          <Text styles={highlightTextStyles}>{error}</Text>\r\n        </Stack.Item>\r\n      </>\r\n    );\r\n  };\r\n\r\n  return (\r\n    <Formik\r\n      initialValues={{\r\n        email: selectedUser?.emailAddress,\r\n        pickerUser: defaultSelect,\r\n        status: !isEditing || selectedUser?.isActive ? \"true\" : \"false\",\r\n      }}\r\n      validationSchema={accessUserSchema}\r\n      onSubmit={(values, { setSubmitting }): void => {\r\n        setSubmitting(false);\r\n        const isActive = values.status === \"true\" ? true : false;\r\n\r\n        if (!canOnlyUpdateStatus) {\r\n          const user: IWriteAccessControlUser = {\r\n            id: 0,\r\n            firstName: values.pickerUser[0].firstName,\r\n            lastName: values.pickerUser[0].lastName,\r\n            emailAddress: values.pickerUser[0].emailAddress,\r\n            isActive: isActive,\r\n          };\r\n          actions.createUser(tenant, user);\r\n        } else {\r\n          const userId = isEditing ? selectedUserId : newUserId;\r\n          actions.updateUserStatus(tenant, userId as number, isActive);\r\n        }\r\n      }}\r\n    >\r\n      {({ isSubmitting, setFieldValue, isValid }): React.ReactNode => (\r\n        <Form>\r\n          <Stack tokens={verticalStackTokens} styles={formStackStyles}>\r\n            <Stack horizontal wrap={true} tokens={horizontalStackTokens} styles={flexStackStyles}>\r\n              <Stack.Item styles={fieldItemStyles}>\r\n                <Label>Email Address</Label>\r\n                <Field\r\n                  disabled={canOnlyUpdateStatus}\r\n                  component={NormalPeoplePicker}\r\n                  id=\"email\"\r\n                  label=\"Email Address\"\r\n                  name=\"email\"\r\n                  placeholder=\"Enter Email Address\"\r\n                  defaultSelectedItems={defaultSelect}\r\n                  onChange={(emailUser: IPersonaPropsExtend[] | undefined): void => {\r\n                    setFieldValue(\"pickerUser\", emailUser);\r\n                  }}\r\n                  onResolveSuggestions={onFilterChanged}\r\n                  pickerSuggestionsProps={peoplePickerSuggestionProps}\r\n                  className={\"ms-PeoplePicker\"}\r\n                  key={\"normal\"}\r\n                  onRenderItem={renderItemWithSecondaryText}\r\n                  removeButtonAriaLabel={\"Remove\"}\r\n                  inputProps={{\r\n                    \"aria-label\": \"People Picker\",\r\n                  }}\r\n                  componentRef={picker}\r\n                  onInputChange={onInputChange}\r\n                  resolveDelay={300}\r\n                  itemLimit={1}\r\n                />\r\n                <FormikErrorMessage name=\"pickerUser\" />\r\n              </Stack.Item>\r\n              {canOnlyUpdateStatus && (\r\n                <Stack.Item styles={fieldItemStyles}>\r\n                  <FastField\r\n                    component={FormikDropdown}\r\n                    options={accessControlUserStatus}\r\n                    onChange={(_, value): void => {\r\n                      setFieldValue(\"status\", value.key);\r\n                    }}\r\n                    label=\"Status\"\r\n                    name=\"status\"\r\n                    placeholder=\"Select Status\"\r\n                    styles={dropdownStyles}\r\n                  />\r\n                </Stack.Item>\r\n              )}\r\n            </Stack>\r\n            <Stack tokens={verticalStackTokens} styles={formStackStyles}>\r\n              {networkOperationError?.length > 0 && showError(networkOperationError)}\r\n            </Stack>\r\n            <SolidDivider />\r\n            <Stack horizontal tokens={buttonStackTokens}>\r\n              <Stack.Item>\r\n                <PrimaryButton\r\n                  text=\"Save\"\r\n                  styles={buttonStyles}\r\n                  disabled={isSubmitting || isFormSubmitting || !isValid}\r\n                  type=\"submit\"\r\n                />\r\n              </Stack.Item>\r\n            </Stack>\r\n          </Stack>\r\n        </Form>\r\n      )}\r\n    </Formik>\r\n  );\r\n};\r\n\r\n/**\r\n * Maps AccessControlUserForm to redux state\r\n * @param {AppState} state The App state.\r\n * @returns {Partial<IAccessControlUserFormProps>} AccessControlUserForm state mapped to props\r\n */\r\nconst mapStateToProps = (state: AppState): Partial<IAccessControlUserFormProps> => {\r\n  return {\r\n    networkOperationError: getNetworkOperationError(state.accessControlState),\r\n  };\r\n};\r\n\r\n/**\r\n * Maps Component's dispatch/handler props to redux state\r\n * @param {Dispatch<AccessControlActions.AccessControlActionTypes>} dispatch map dispatch to props\r\n * @returns {Partial<IAccessControlUserFormProps>} map dispatch to props\r\n */\r\nconst mapDispatchToProps = (\r\n  dispatch: Dispatch<AccessControlActions.AccessControlActionTypes>\r\n): Partial<IAccessControlUserFormProps> => {\r\n  return {\r\n    actions: {\r\n      createUser: bindActionCreators(AccessControlActions.createUser, dispatch),\r\n      updateUserStatus: bindActionCreators(AccessControlActions.updateUserStatus, dispatch),\r\n    },\r\n  };\r\n};\r\n\r\nconst withConnect = connect(mapStateToProps, mapDispatchToProps);\r\n\r\nexport default compose(withRouter, withConnect)(AccessControlUserForm) as React.FC<any>;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n */\r\n\r\nimport { getTheme } from \"office-ui-fabric-react/lib/Styling\";\r\nimport styled from \"styled-components\";\r\n\r\nimport { FontSizes, FontWeights, IMessageBarStyles, IStackStyles } from \"@fluentui/react\";\r\n\r\nconst theme = getTheme();\r\n\r\n/**\r\n * Message Bar Error Styles.\r\n */\r\nexport const errorStyles: IMessageBarStyles = {\r\n  root: {\r\n    marginBottom: \"0.5rem\",\r\n    marginTop: \"0.5rem\",\r\n  },\r\n};\r\n\r\n/**\r\n * Styling for container wrapping inner detail contents (i.e. user's access control)\r\n */\r\nexport const DetailWrapper = styled.div`\r\n  padding: 10px;\r\n  height: 100%;\r\n  width: 100%;\r\n  border-radius: 0.5rem;\r\n`;\r\n\r\nexport const listStyles = (): IStackStyles => {\r\n  return {\r\n    root: {\r\n      backgroundColor: theme.palette.white,\r\n    },\r\n  };\r\n};\r\n\r\nexport const innerStackStyles = (): IStackStyles => {\r\n  return {\r\n    root: {\r\n      padding: \"1rem\",\r\n      paddingTop: \"0.5rem\",\r\n    },\r\n  };\r\n};\r\n","/*!\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n */\r\n\r\nimport React, { useEffect } from \"react\";\r\n\r\nimport { connect } from \"react-redux\";\r\nimport { withRouter } from \"react-router-dom\";\r\nimport { bindActionCreators, compose, Dispatch } from \"redux\";\r\n\r\nimport { Stack } from \"office-ui-fabric-react/lib\";\r\n\r\nimport { ActionButton, Text } from \"@fluentui/react\";\r\n\r\nimport * as AccessControlActions from \"Dataflows/AccessControl/AccessControlAction\";\r\nimport * as AccessControlSelectors from \"Dataflows/AccessControl/AccessControlSelector\";\r\nimport * as ClRegionActions from \"Dataflows/ClRegion/ClRegionAction\";\r\nimport * as ClRegionSelector from \"Dataflows/ClRegion/ClRegionSelector\";\r\nimport * as TechnologyFocusAreaActions from \"Dataflows/TechnologyArea/TechnologyAreaAction\";\r\nimport * as TechnologyFocusAreaSelectors from \"Dataflows/TechnologyArea/TechnologyAreaSelector\";\r\n\r\nimport AccessControlRoles from \"Components/AccessControlRoles/AccessControlRoles\";\r\nimport AccessControlUserForm from \"Components/AccessControlUserForm/AccessControlUserForm\";\r\nimport { SubSiteUrlRootPath, TenantTypesEnum } from \"Constants/TenantTypes\";\r\nimport {\r\n  listStackStyles,\r\n  tableStackStyles,\r\n  Divider,\r\n} from \"Containers/Common/CommonContainer.styles\";\r\nimport { AppState } from \"Dataflows/Reducers\";\r\n\r\nimport { innerStackStyles } from \"./AccessControlCreateEditContainer.styles\";\r\nimport { IAccessControlCreateEditContainerProps } from \"./IAccessControlCreateEditContainerProps\";\r\nimport {\r\n  ContainerWrapper,\r\n  headerStackStyles,\r\n  headerTextStyles,\r\n} from \"Components/Common/SharedTableStyles.styles\";\r\n\r\n/**\r\n * AccessControl Create Edit Container\r\n * @returns {React.ReactElement} rendered create edit access container for user\r\n */\r\nconst AccessControlCreateEditContainer: React.FunctionComponent<\r\n  IAccessControlCreateEditContainerProps\r\n> = (props: IAccessControlCreateEditContainerProps): React.ReactElement => {\r\n  const {\r\n    history,\r\n    match: { params },\r\n    selectedUser,\r\n    selectedUserId,\r\n    actions,\r\n    roles,\r\n    technologyFocusAreas,\r\n    geoData,\r\n    networkOperationStatus,\r\n    networkOperationError,\r\n  } = props;\r\n\r\n  const tenant = SubSiteUrlRootPath[params.tenant];\r\n  const isEditing = selectedUserId !== 0;\r\n  if (!tenant) {\r\n    history.push(\"/notFound\");\r\n  }\r\n\r\n  /**\r\n   * Handler for when the back button is clicked.\r\n   * @returns {void} void no return for function.\r\n   */\r\n  const onBackClickEvent = (): void => {\r\n    actions.resetProps();\r\n    actions.updateSelectedUserId(0);\r\n    history.goBack();\r\n  };\r\n\r\n  useEffect(() => {\r\n    if ([TenantTypesEnum.MVP, TenantTypesEnum.RD].includes(tenant)) {\r\n      actions.loadTechFocusAreas(tenant);\r\n    }\r\n\r\n    actions.loadGeoData();\r\n\r\n    if (isEditing) {\r\n      const adminUserEmail = selectedUser?.emailAddress ?? \"\";\r\n      actions.loadUserRoles(tenant, adminUserEmail);\r\n    }\r\n\r\n    return (): void => {\r\n      actions.resetProps();\r\n    };\r\n  }, []);\r\n\r\n  return (\r\n    <Stack>\r\n      <ActionButton\r\n        iconProps={{ iconName: \"RevToggleKey\" }}\r\n        ariaLabel=\"Back to Access Control\"\r\n        onClick={onBackClickEvent}\r\n      >\r\n        Back to Access Control\r\n      </ActionButton>\r\n\r\n      <ContainerWrapper>\r\n        <Stack styles={innerStackStyles}>\r\n          <ContainerWrapper>\r\n            <Stack styles={headerStackStyles}>\r\n              <Text styles={headerTextStyles}>{isEditing ? \"Edit User\" : \"Add new user\"}</Text>\r\n            </Stack>\r\n            <AccessControlUserForm tenant={tenant} isEditing={isEditing} {...props} />\r\n          </ContainerWrapper>\r\n          {isEditing ? (\r\n            <Stack.Item grow>\r\n              <Stack styles={tableStackStyles}>\r\n                <AccessControlRoles\r\n                  isLoadingStatus={networkOperationStatus}\r\n                  roles={roles}\r\n                  tenant={tenant}\r\n                  selectedUser={selectedUser}\r\n                  technologyFocusAreas={technologyFocusAreas}\r\n                  geoData={geoData}\r\n                  actions={{\r\n                    onCreateUserRole: actions.createUserRole,\r\n                    onUpdateUserRole: actions.updateUserRole,\r\n                    onDeleteUserRole: actions.deleteUserRole,\r\n                  }}\r\n                />\r\n              </Stack>\r\n            </Stack.Item>\r\n          ) : null}\r\n        </Stack>\r\n      </ContainerWrapper>\r\n    </Stack>\r\n  );\r\n};\r\n\r\n/**\r\n * Maps AccessControlCreateEditContainer to redux state\r\n * @param {AppState} state The App state.\r\n * @returns {Partial<IAccessControlCreateEditContainerProps>} AccessControlCreateEdit container state mapped to props\r\n */\r\nconst mapStateToProps = (state: AppState): Partial<IAccessControlCreateEditContainerProps> => ({\r\n  selectedUserId: AccessControlSelectors.getSelectedUserId(state.accessControlState),\r\n  selectedUser: AccessControlSelectors.getSelectedUser(state.accessControlState),\r\n  newUserId: AccessControlSelectors.getNewUserId(state.accessControlState),\r\n  roles: AccessControlSelectors.getUserRoles(state.accessControlState),\r\n  networkOperationStatus: AccessControlSelectors.getNetworkOperationStatus(\r\n    state.accessControlState\r\n  ),\r\n  networkOperationError: AccessControlSelectors.getNetworkOperationError(state.accessControlState),\r\n  technologyFocusAreas: TechnologyFocusAreaSelectors.getTechnologyAreaOptionList(\r\n    state.technologyAreaDataState\r\n  ),\r\n  geoData: ClRegionSelector.getGeoData(state.clRegionsDataState),\r\n});\r\n\r\n/**\r\n * Maps Component's dispatch/handler props to redux state\r\n * @param {Dispatch<AccessControlActions.AccessControlActionTypes>} dispatch map dispatch to props\r\n * @returns {Partial<IAccessControlCreateEditContainerProps>} map dispatch to props\r\n */\r\nconst mapDispatchToProps = (\r\n  dispatch: Dispatch<AccessControlActions.AccessControlActionTypes>\r\n): Partial<IAccessControlCreateEditContainerProps> => ({\r\n  actions: {\r\n    resetProps: bindActionCreators(AccessControlActions.resetProps, dispatch),\r\n    updateSelectedUserId: bindActionCreators(AccessControlActions.updateSelectedUserId, dispatch),\r\n    updateSelectedUser: bindActionCreators(AccessControlActions.updateSelectedUser, dispatch),\r\n    loadUserRoles: bindActionCreators(AccessControlActions.loadUserRoles, dispatch),\r\n    createUserRole: bindActionCreators(AccessControlActions.createUserRole, dispatch),\r\n    updateUserRole: bindActionCreators(AccessControlActions.updateUserRole, dispatch),\r\n    deleteUserRole: bindActionCreators(AccessControlActions.deleteUserRole, dispatch),\r\n    loadTechFocusAreas: bindActionCreators(TechnologyFocusAreaActions.getTechnologyAreas, dispatch),\r\n    loadGeoData: bindActionCreators(ClRegionActions.getGeoData, dispatch),\r\n  },\r\n});\r\n\r\nconst withConnect = connect(mapStateToProps, mapDispatchToProps);\r\nexport default compose(withRouter, withConnect)(AccessControlCreateEditContainer) as React.FC<any>;\r\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport {\n  APPLICATION_LOAD,\n  APPLICATION_LOAD_FAIL,\n  APPLICATION_LOAD_SUCCESS,\n  APPLICATION_SEARCH_SORTING_UPDATE,\n  APPLICATIONS_FILTER_COUNTRY_VALUE_REMOVE,\n  APPLICATIONS_FILTER_PROVINCE_VALUE_REMOVE,\n  APPLICATIONS_FILTER_VALUE_ADD,\n  APPLICATIONS_FILTER_VALUE_REMOVE,\n  APPLICATIONS_FILTER_VALUE_UPDATE,\n  APPLICATIONS_RESET,\n  APPLICATIONS_SEARCH,\n  APPLICATIONS_SEARCH_FAIL,\n  APPLICATIONS_SEARCH_SUCCESS,\n  ASSIGN_APPLICATION,\n  ASSIGN_APPLICATION_FAIL,\n  ASSIGN_APPLICATION_RESET,\n  ASSIGN_APPLICATION_SUCCESS,\n  DOWNLOAD_APPLICATIONS_TO_CSV,\n  DOWNLOAD_APPLICATIONS_TO_CSV_CLEAN,\n  DOWNLOAD_APPLICATIONS_TO_CSV_FAIL,\n  DOWNLOAD_APPLICATIONS_TO_CSV_SUCCESS,\n  FLAG_APPLICATION,\n  FLAG_APPLICATION_FAIL,\n  FLAG_APPLICATION_RESET,\n  FLAG_APPLICATION_SUCCESS,\n  GET_ASSIGN_APPLICATION,\n  GET_ASSIGN_APPLICATION_FAIL,\n  GET_ASSIGN_APPLICATION_SUCCESS,\n  SCORE_APPLICATION,\n  SCORE_APPLICATION_FAIL,\n  SCORE_APPLICATION_RESET,\n  SCORE_APPLICATION_SUCCESS,\n  UPDATE_APPLICATION_LISTING_CURRENT_PAGE,\n  UPDATE_APPLICATION_LISTING_PAGE_SIZE,\n  UPDATE_SELECTED_APPLICATION,\n  UPDATE_SELECTED_APPLICATION_EMAIL,\n} from \"Constants/ActionTypes\";\nimport { TenantTypesEnum } from \"Constants/TenantTypes\";\nimport { IApplication } from \"Interfaces/Application/IApplication\";\nimport { IApplicationAssignTechnologyAssignment } from \"Interfaces/Application/IApplicationAssign\";\nimport { IApplicationGetAssign } from \"Interfaces/Application/IApplicationGetAssign\";\nimport { IApplicationListRowData } from \"Interfaces/Application/IApplicationListRowData\";\nimport { IFilterValue } from \"Interfaces/IFilterValue\";\n\n/**\n * Action for when loading an application.\n * @interface\n */\nexport interface ILoadApplication {\n  type: typeof APPLICATION_LOAD;\n  selectedApplicationEmail: string;\n}\n\n/**\n * Action for when an application is loaded successfully.\n * @interface\n */\nexport interface ILoadApplicationSuccess {\n  type: typeof APPLICATION_LOAD_SUCCESS;\n  application: IApplication;\n}\n\n/**\n * Action for when loading an application failed.\n * @interface\n */\nexport interface ILoadApplicationFail {\n  type: typeof APPLICATION_LOAD_FAIL;\n  loadSelectedApplicationError: string;\n}\n\n/**\n * Action for when adding selected filter value.\n * @interface\n */\nexport interface IApplicationsFilterValueAdd {\n  type: typeof APPLICATIONS_FILTER_VALUE_ADD;\n  filterValue: IFilterValue;\n}\n\n/**\n * Action for when removing selected filter value.\n * @interface\n */\nexport interface IApplicationsFilterValueRemove {\n  type: typeof APPLICATIONS_FILTER_VALUE_REMOVE;\n  filterValue: IFilterValue;\n}\n\n/**\n * Action for when removing selected filter province value.\n * @interface\n */\nexport interface IApplicationsFilterProvinceValueRemove {\n  type: typeof APPLICATIONS_FILTER_PROVINCE_VALUE_REMOVE;\n}\n\n/**\n * Action for when removing selected filter country value.\n * @interface\n */\nexport interface IApplicationsFilterCountryValueRemove {\n  type: typeof APPLICATIONS_FILTER_COUNTRY_VALUE_REMOVE;\n}\n\n/**\n * Action for when updating selected filter value.\n * @interface\n */\nexport interface IApplicationsFilterValueUpdate {\n  type: typeof APPLICATIONS_FILTER_VALUE_UPDATE;\n  filterValue: IFilterValue;\n}\n\n/**\n * Action for when searching Applications.\n * @interface\n */\nexport interface ISearchApplications {\n  type: typeof APPLICATIONS_SEARCH;\n  requestorEmailAddress: string;\n  applicationType: string;\n  searchText: string;\n  selectedApplicationsFilterValues: IFilterValue[];\n  searchPage: number;\n  pageSize: number;\n  tenant: TenantTypesEnum;\n  sortColumn?: string;\n  sortDescending?: boolean;\n}\n\n/**\n * Action for when Applications were searched successfully.\n * @interface\n */\nexport interface ISearchApplicationsSuccess {\n  type: typeof APPLICATIONS_SEARCH_SUCCESS;\n  applications: IApplicationListRowData[];\n  searchPage: number;\n  pageSize: number;\n  filteredCount: number;\n}\n\n/**\n * Action for when loading Applications failed.\n * @interface\n */\nexport interface ISearchApplicationsFail {\n  type: typeof APPLICATIONS_SEARCH_FAIL;\n  error: string;\n}\n\nexport interface IResetApplications {\n  type: typeof APPLICATIONS_RESET;\n}\n\n/**\n * Action for when setting the selected application email\n * @interface\n */\nexport interface IUpdateSelectedApplicationEmail {\n  type: typeof UPDATE_SELECTED_APPLICATION_EMAIL;\n  selectedApplicationEmail: string;\n}\n\nexport interface IGetAssignApplication {\n  type: typeof GET_ASSIGN_APPLICATION;\n  tenant: TenantTypesEnum;\n  applicationFormId: number;\n}\n\nexport interface IGetAssignApplicationSuccess {\n  type: typeof GET_ASSIGN_APPLICATION_SUCCESS;\n  assignApplicationInfo: IApplicationGetAssign;\n}\n\nexport interface IGetAssignApplicationFail {\n  type: typeof GET_ASSIGN_APPLICATION_FAIL;\n  errorMessage: string;\n}\n\n/**\n * Action for assigning an application.\n * @interface\n */\nexport interface IAssignApplication {\n  type: typeof ASSIGN_APPLICATION;\n  tenant: TenantTypesEnum;\n  applicationFormId: number;\n  technologyAssignments: IApplicationAssignTechnologyAssignment[];\n}\n\n/**\n * Action for success when assigning an application.\n * @interface\n */\nexport interface IAssignApplicationSuccess {\n  type: typeof ASSIGN_APPLICATION_SUCCESS;\n}\n\n/**\n * Action for failure when assigning an application.\n * @interface\n */\nexport interface IAssignApplicationFail {\n  type: typeof ASSIGN_APPLICATION_FAIL;\n  errorMessage: string;\n}\n\nexport interface IAssignApplicationReset {\n  type: typeof ASSIGN_APPLICATION_RESET;\n}\n\n/**\n * Action for scoring an application.\n * @interface\n */\nexport interface IScoreApplication {\n  type: typeof SCORE_APPLICATION;\n  tenant: TenantTypesEnum;\n  applicationFormId: number;\n  technologyFocusArea: string;\n  score: number;\n  justification: string;\n}\n\n/**\n * Action for success when scoiring an application.\n * @interface\n */\nexport interface IScoreApplicationSuccess {\n  type: typeof SCORE_APPLICATION_SUCCESS;\n}\n\n/**\n * Action for failure when scoring an application.\n * @interface\n */\nexport interface IScoreApplicationFail {\n  type: typeof SCORE_APPLICATION_FAIL;\n  errorMessage: string;\n}\n\nexport interface IScoreApplicationReset {\n  type: typeof SCORE_APPLICATION_RESET;\n}\n\n/**\n * Action for flagging an application.\n * @interface\n */\nexport interface IFlagApplication {\n  type: typeof FLAG_APPLICATION;\n  applicationFormId: number;\n  justification: string;\n  flagReasonId: string[];\n}\n\n/**\n * Action for success when flagging an application.\n * @interface\n */\nexport interface IFlagApplicationSuccess {\n  type: typeof FLAG_APPLICATION_SUCCESS;\n}\n\n/**\n * Action for failure when flagging an application.\n * @interface\n */\nexport interface IFlagApplicationFail {\n  type: typeof FLAG_APPLICATION_FAIL;\n  errorMessage: string;\n}\n\n/**\n * Action for resetting after flagging an application.\n */\nexport interface IFlagApplicationReset {\n  type: typeof FLAG_APPLICATION_RESET;\n}\n\n/**\n * Action for when updating application form id.\n * @interface\n */\nexport interface IUpdateSelectedApplication {\n  type: typeof UPDATE_SELECTED_APPLICATION;\n  selectedApplication: IApplication;\n}\n\n/**\n * Action for when updating listing current page\n * @interface\n */\nexport interface IUpdateCurrentPage {\n  type: typeof UPDATE_APPLICATION_LISTING_CURRENT_PAGE;\n  currentPage: number;\n}\n\n/**\n * Action for when updating listing page size\n * @interface\n */\nexport interface IUpdatePageSize {\n  type: typeof UPDATE_APPLICATION_LISTING_PAGE_SIZE;\n  pageSize: number;\n}\n\n/**\n * Action for when downloading results to CSV\n * @interface\n */\nexport interface IDownloadApplicationsToCSV {\n  type: typeof DOWNLOAD_APPLICATIONS_TO_CSV;\n  searchText: string;\n  selectedApplicationsFilterValues: IFilterValue[];\n  tenant: TenantTypesEnum;\n}\n\n/**\n * Action for when downloading results to CSV success\n * @interface\n */\nexport interface IDownloadApplicationsToCSVSuccess {\n  type: typeof DOWNLOAD_APPLICATIONS_TO_CSV_SUCCESS;\n  csvFile: string;\n}\n\n/**\n * Action for when downloading results to CSV failed\n * @interface\n */\nexport interface IDownloadApplicationsToCSVFail {\n  type: typeof DOWNLOAD_APPLICATIONS_TO_CSV_FAIL;\n  errorMessage: string;\n}\n\n/**\n * Action for when after download clean the download state.\n * @interface\n */\nexport interface IDownloadApplicationsToCSVClean {\n  type: typeof DOWNLOAD_APPLICATIONS_TO_CSV_CLEAN;\n}\n\n/**\n * Action: update user's profile is private flag fail.\n * @interface\n */\nexport interface IApplicationSearchSortingChange {\n  type: typeof APPLICATION_SEARCH_SORTING_UPDATE;\n  sortColumn?: string;\n  sortDescending?: boolean;\n}\n\n/**\n * Action creator for APPLICATION_SEARCH_SORTING_UPDATE.\n * @returns {IApplicationSearchSortingChange}\n */\nexport function applicationSearchSortingUpdate(\n  sortColumn?: string,\n  sortDescending?: boolean\n): IApplicationSearchSortingChange {\n  return {\n    type: APPLICATION_SEARCH_SORTING_UPDATE,\n    sortColumn,\n    sortDescending,\n  };\n}\n\n/**\n * Action creator for APPLICATION_LOAD.\n */\nexport function loadApplication(selectedApplicationEmail: string): ApplicationActionTypes {\n  return {\n    type: APPLICATION_LOAD,\n    selectedApplicationEmail,\n  };\n}\n\n/**\n * Action creator for APPLICATIONS_LOAD_SUCCESS.\n * @param Applications the user profiles successfully loaded.\n */\nexport function loadApplicationSuccess(application: IApplication): ApplicationActionTypes {\n  return {\n    type: APPLICATION_LOAD_SUCCESS,\n    application,\n  };\n}\n\n/**\n * Action creator for APPLICATIONS_LOAD_FAIL.\n * @param error the error message from the API.\n */\nexport function loadApplicationFail(loadSelectedApplicationError: string): ApplicationActionTypes {\n  return {\n    type: APPLICATION_LOAD_FAIL,\n    loadSelectedApplicationError,\n  };\n}\n\n/**\n * Action creator for APPLICATIONS_FILTER_VALUE_ADD.\n * @param error the error message from the API.\n */\nexport function addApplicationsFilterValue(filterValue: IFilterValue): ApplicationActionTypes {\n  return {\n    type: APPLICATIONS_FILTER_VALUE_ADD,\n    filterValue,\n  };\n}\n\n/**\n * Action creator for DOWNLOAD_APPLICATIONS_TO_CSV.\n * @param searchText the search text.\n * @param selectedApplicationsFilterValues selected applications current filter values.\n * @param tenant download tenant.\n */\nexport function downloadApplicationsToCSV(\n  searchText: string,\n  selectedApplicationsFilterValues: IFilterValue[],\n  tenant: TenantTypesEnum\n): ApplicationActionTypes {\n  return {\n    type: DOWNLOAD_APPLICATIONS_TO_CSV,\n    searchText,\n    selectedApplicationsFilterValues,\n    tenant,\n  };\n}\n\n/**\n * Action creator for DOWNLOAD_APPLICATIONS_TO_CSV_FAIL.\n * @param errorMessage the error message from the API.\n */\nexport function downloadApplicationsToCSVFail(errorMessage: string): ApplicationActionTypes {\n  return {\n    type: DOWNLOAD_APPLICATIONS_TO_CSV_FAIL,\n    errorMessage,\n  };\n}\n\n/**\n * Action creator for DOWNLOAD_APPLICATIONS_TO_CSV_SUCCESS.\n * @param csvFile the csv file from the API.\n */\nexport function downloadApplicationsToCSVSuccess(csvFile: string): ApplicationActionTypes {\n  return {\n    type: DOWNLOAD_APPLICATIONS_TO_CSV_SUCCESS,\n    csvFile,\n  };\n}\n\n/**\n * Action creator for DOWNLOAD_APPLICATIONS_TO_CSV_CLEAN.\n * @param csvFile the csv file from the API.\n */\nexport function downloadApplicationsToCSVClean(): ApplicationActionTypes {\n  return {\n    type: \"DOWNLOAD_APPLICATIONS_TO_CSV_CLEAN\",\n  };\n}\n\n/**\n * Action creator for APPLICATIONS_FILTER_VALUE_REMOVE.\n * @param error the error message from the API.\n */\nexport function removeApplicationsFilterValue(filterValue: IFilterValue): ApplicationActionTypes {\n  return {\n    type: APPLICATIONS_FILTER_VALUE_REMOVE,\n    filterValue,\n  };\n}\n\n/**\n * Action creator for APPLICATIONS_FILTER_PROVINCE_VALUE_REMOVE.\n * @param error the error message from the API.\n */\nexport function removeApplicationsFilterProvinceValue(): ApplicationActionTypes {\n  return {\n    type: APPLICATIONS_FILTER_PROVINCE_VALUE_REMOVE,\n  };\n}\n\n/**\n * Action creator for APPLICATIONS_FILTER_COUNTRY_VALUE_REMOVE.\n * @param error the error message from the API.\n */\nexport function removeApplicationsFilterCountryValue(): ApplicationActionTypes {\n  return {\n    type: APPLICATIONS_FILTER_COUNTRY_VALUE_REMOVE,\n  };\n}\n\n/**\n * Action creator for APPLICATIONS_FILTER_VALUE_UPDATE.\n * @param error the error message from the API.\n */\nexport function updateApplicationsFilterValue(filterValue: IFilterValue): ApplicationActionTypes {\n  return {\n    type: APPLICATIONS_FILTER_VALUE_UPDATE,\n    filterValue,\n  };\n}\n\n/**\n * Action creator for APPLICATIONS_SEARCH.\n */\nexport function searchApplications(\n  searchText: string,\n  selectedApplicationsFilterValues: IFilterValue[],\n  searchPage: number,\n  pageSize: number,\n  requestorEmailAddress: string,\n  applicationType: string,\n  tenant: TenantTypesEnum,\n  sortColumn?: string,\n  sortDescending?: boolean\n): ApplicationActionTypes {\n  return {\n    type: APPLICATIONS_SEARCH,\n    searchText,\n    selectedApplicationsFilterValues,\n    searchPage,\n    pageSize,\n    requestorEmailAddress,\n    applicationType,\n    tenant,\n    sortColumn,\n    sortDescending,\n  };\n}\n\n/**\n * Action creator for APPLICATIONS_SEARCH_SUCCESS.\n * @param Applications the applications successfully searched.\n */\nexport function searchApplicationsSuccess(\n  applications: IApplicationListRowData[],\n  searchPage: number,\n  pageSize: number,\n  filteredCount: number\n): ApplicationActionTypes {\n  return {\n    type: APPLICATIONS_SEARCH_SUCCESS,\n    applications,\n    searchPage,\n    pageSize,\n    filteredCount,\n  };\n}\n\n/**\n * Action creator for APPLICATIONS_SEARCH_FAIL.\n * @param error the error message from the API.\n */\nexport function searchApplicationsFail(error: string): ApplicationActionTypes {\n  return {\n    type: APPLICATIONS_SEARCH_FAIL,\n    error,\n  };\n}\n\nexport function resetApplications(): IResetApplications {\n  return {\n    type: APPLICATIONS_RESET,\n  };\n}\n\n/**\n * Action creator for UPDATE_SELECTED_APPLICATION.\n */\nexport function updateSelectedApplication(\n  selectedApplication: IApplication\n): ApplicationActionTypes {\n  return {\n    type: UPDATE_SELECTED_APPLICATION,\n    selectedApplication,\n  };\n}\n\n/**\n * Action creator for UPDATE_SELECTED_APPLICATION_EMAIL.\n */\nexport function updateSelectedApplicationEmail(\n  selectedApplicationEmail: string\n): ApplicationActionTypes {\n  return {\n    type: UPDATE_SELECTED_APPLICATION_EMAIL,\n    selectedApplicationEmail,\n  };\n}\n\n/**\n * Action creator for GET_ASSIGN_APPLICATION.\n * @param applicationFormId the application form id.\n */\nexport function getAssignApplication(\n  applicationFormId: number,\n  tenant: TenantTypesEnum\n): IGetAssignApplication {\n  return {\n    type: GET_ASSIGN_APPLICATION,\n    applicationFormId,\n    tenant,\n  };\n}\n\n/**\n * Action creator for GET_ASSIGN_APPLICATION_SUCCESS.\n */\nexport function getAssignApplicationSuccess(\n  assignApplicationInfo: IApplicationGetAssign\n): IGetAssignApplicationSuccess {\n  return {\n    type: GET_ASSIGN_APPLICATION_SUCCESS,\n    assignApplicationInfo,\n  };\n}\n\n/**\n * Action creator for GET_ASSIGN_APPLICATION_FAIL.\n */\nexport function getAssignApplicationFail(errorMessage: string): IGetAssignApplicationFail {\n  return {\n    type: GET_ASSIGN_APPLICATION_FAIL,\n    errorMessage,\n  };\n}\n\n/**\n * Action creator for ASSIGN_APPLICATION.\n */\nexport function assignApplication(\n  applicationFormId: number,\n  technologyAssignments: IApplicationAssignTechnologyAssignment[],\n  tenant: TenantTypesEnum\n): IAssignApplication {\n  return {\n    type: ASSIGN_APPLICATION,\n    tenant,\n    applicationFormId,\n    technologyAssignments,\n  };\n}\n\n/**\n * Action creator for ASSIGN_APPLICATION_SUCCESS.\n */\nexport function assignApplicationSuccess(): IAssignApplicationSuccess {\n  return {\n    type: ASSIGN_APPLICATION_SUCCESS,\n  };\n}\n\n/**\n * Action creator for ASSIGN_APPLICATION_FAIL.\n */\nexport function assignApplicationFail(errorMessage: string): IAssignApplicationFail {\n  return {\n    type: ASSIGN_APPLICATION_FAIL,\n    errorMessage,\n  };\n}\n\n/**\n * Action creator for ASSIGN_APPLICATION_RESET.\n */\nexport function assignApplicationReset(): IAssignApplicationReset {\n  return {\n    type: ASSIGN_APPLICATION_RESET,\n  };\n}\n\n/**\n * Action creator for SCORE_APPLICATION.\n */\nexport function scoreApplication(\n  applicationFormId: number,\n  technologyFocusAreaName: string,\n  score: number,\n  justification: string,\n  tenant: TenantTypesEnum\n): IScoreApplication {\n  return {\n    type: SCORE_APPLICATION,\n    applicationFormId,\n    technologyFocusArea: technologyFocusAreaName,\n    score,\n    justification,\n    tenant,\n  };\n}\n\n/**\n * Action creator for SCORE_APPLICATION_SUCCESS.\n */\nexport function scoreApplicationSuccess(): IScoreApplicationSuccess {\n  return {\n    type: SCORE_APPLICATION_SUCCESS,\n  };\n}\n\n/**\n * Action creator for SCORE_APPLICATION_FAIL.\n */\nexport function scoreApplicationFail(errorMessage: string): IScoreApplicationFail {\n  return {\n    type: SCORE_APPLICATION_FAIL,\n    errorMessage,\n  };\n}\n\nexport function scoreApplicationReset(): IScoreApplicationReset {\n  return {\n    type: SCORE_APPLICATION_RESET,\n  };\n}\n\n/**\n * Action creator for FLAG_APPLICATION.\n */\nexport function flagApplication(\n  applicationFormId: number,\n  justification: string,\n  flagReasonId: string[]\n): IFlagApplication {\n  return {\n    type: FLAG_APPLICATION,\n    applicationFormId,\n    justification,\n    flagReasonId,\n  };\n}\n\n/**\n * Action creator for FLAG_APPLICATION_SUCCESS.\n */\nexport function flagApplicationSuccess(): IFlagApplicationSuccess {\n  return {\n    type: FLAG_APPLICATION_SUCCESS,\n  };\n}\n\n/**\n * Action creator for FLAG_APPLICATION_FAIL.\n */\nexport function flagApplicationFail(errorMessage: string): IFlagApplicationFail {\n  return {\n    type: FLAG_APPLICATION_FAIL,\n    errorMessage,\n  };\n}\n\n/**\n * Action creator for FLAG_APPLICATION_RESET\n */\nexport function flagApplicationReset(): IFlagApplicationReset {\n  return {\n    type: FLAG_APPLICATION_RESET,\n  };\n}\n\n/**\n * Action creator for UPDATE_APPLICATION_LISTING_CURRENT_PAGE.\n */\nexport function updateCurrentPage(currentPage: number): ApplicationActionTypes {\n  return {\n    type: UPDATE_APPLICATION_LISTING_CURRENT_PAGE,\n    currentPage,\n  };\n}\n\n/**\n * Action creator for UPDATE_APPLICATION_LISTING_PAGE_SIZE.\n */\nexport function updatePageSize(pageSize: number): ApplicationActionTypes {\n  return {\n    type: UPDATE_APPLICATION_LISTING_PAGE_SIZE,\n    pageSize,\n  };\n}\n\nexport type ApplicationActionTypes =\n  | IApplicationsFilterCountryValueRemove\n  | IApplicationsFilterProvinceValueRemove\n  | IApplicationsFilterValueAdd\n  | IApplicationsFilterValueRemove\n  | IApplicationsFilterValueUpdate\n  | IDownloadApplicationsToCSV\n  | IDownloadApplicationsToCSVClean\n  | IDownloadApplicationsToCSVFail\n  | IDownloadApplicationsToCSVSuccess\n  | ILoadApplication\n  | ILoadApplicationFail\n  | ILoadApplicationSuccess\n  | IResetApplications\n  | ISearchApplications\n  | ISearchApplicationsFail\n  | ISearchApplicationsSuccess\n  | IUpdateCurrentPage\n  | IFlagApplication\n  | IFlagApplicationSuccess\n  | IFlagApplicationFail\n  | IFlagApplicationReset\n  | IGetAssignApplication\n  | IGetAssignApplicationSuccess\n  | IGetAssignApplicationFail\n  | IAssignApplication\n  | IAssignApplicationSuccess\n  | IAssignApplicationFail\n  | IAssignApplicationReset\n  | IScoreApplication\n  | IScoreApplicationSuccess\n  | IScoreApplicationFail\n  | IScoreApplicationReset\n  | IUpdatePageSize\n  | IUpdateSelectedApplication\n  | IUpdateSelectedApplicationEmail\n  | IApplicationSearchSortingChange;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nexport const APPLICATION_LOAD = \"APPLICATION_LOAD\";\nexport const APPLICATION_LOAD_SUCCESS = \"APPLICATION_LOAD_SUCCESS\";\nexport const APPLICATION_LOAD_FAIL = \"APPLICATION_LOAD_FAIL\";\n\nexport const APPLICATIONS_FILTER_VALUE_ADD = \"APPLICATIONS_FILTER_VALUE_ADD\";\nexport const APPLICATIONS_FILTER_VALUE_REMOVE = \"APPLICATIONS_FILTER_VALUE_REMOVE\";\nexport const APPLICATIONS_FILTER_PROVINCE_VALUE_REMOVE =\n  \"APPLICATIONS_FILTER_PROVINCE_VALUE_REMOVE\";\nexport const APPLICATIONS_FILTER_COUNTRY_VALUE_REMOVE = \"APPLICATIONS_FILTER_COUNTRY_VALUE_REMOVE\";\nexport const APPLICATIONS_FILTER_VALUE_UPDATE = \"APPLICATIONS_FILTER_VALUE_UPDATE\";\n\nexport const APPLICATIONS_SEARCH = \"APPLICATIONS_SEARCH\";\nexport const APPLICATIONS_SEARCH_SUCCESS = \"APPLICATIONS_SEARCH_SUCCESS\";\nexport const APPLICATIONS_SEARCH_FAIL = \"APPLICATIONS_SEARCH_FAIL\";\nexport const APPLICATIONS_RESET = \"APPLICATIONS_RESET\";\n\nexport const DOWNLOAD_APPLICATIONS_TO_CSV = \"DOWNLOAD_APPLICATIONS_TO_CSV\";\nexport const DOWNLOAD_APPLICATIONS_TO_CSV_FAIL = \"DOWNLOAD_APPLICATIONS_TO_CSV_FAIL\";\nexport const DOWNLOAD_APPLICATIONS_TO_CSV_SUCCESS = \"DOWNLOAD_APPLICATIONS_TO_CSV_SUCCESS\";\nexport const DOWNLOAD_APPLICATIONS_TO_CSV_CLEAN = \"DOWNLOAD_APPLICATIONS_TO_CSV_CLEAN\";\n\nexport const UPDATE_APPLICATION_STATUS = \"UPDATE_APPLICATION_STATUS\";\nexport const UPDATE_APPLICATION_STATUS_SUCCESS = \"UPDATE_APPLICATION_STATUS_SUCCESS\";\nexport const UPDATE_APPLICATION_STATUS_FAIL = \"UPDATE_APPLICATION_STATUS_FAIL\";\n\nexport const UPDATE_SELECTED_APPLICATION = \"UPDATE_SELECTED_APPLICATION\";\nexport const UPDATE_SELECTED_APPLICATION_EMAIL = \"UPDATE_SELECTED_APPLICATION_EMAIL\";\n\nexport const GET_ASSIGN_APPLICATION = \"GET_ASSIGN_APPLICATION\";\nexport const GET_ASSIGN_APPLICATION_SUCCESS = \"GET_ASSIGN_APPLICATION_SUCCESS\";\nexport const GET_ASSIGN_APPLICATION_FAIL = \"GET_ASSIGN_APPLICATION_FAIL\";\n\nexport const ASSIGN_APPLICATION = \"ASSIGN_APPLICATION\";\nexport const ASSIGN_APPLICATION_SUCCESS = \"ASSIGN_APPLICATION_SUCCESS\";\nexport const ASSIGN_APPLICATION_FAIL = \"ASSIGN_APPLICATION_FAIL\";\nexport const ASSIGN_APPLICATION_RESET = \"ASSIGN_APPLICATION_RESET\";\n\nexport const FLAG_APPLICATION = \"FLAG_APPLICATION\";\nexport const FLAG_APPLICATION_SUCCESS = \"FLAG_APPLICATION_SUCCESS\";\nexport const FLAG_APPLICATION_FAIL = \"FLAG_APPLICATION_FAIL\";\nexport const FLAG_APPLICATION_RESET = \"FLAG_APPLICATION_RESET\";\n\nexport const SCORE_APPLICATION = \"SCORE_APPLICATION\";\nexport const SCORE_APPLICATION_SUCCESS = \"SCORE_APPLICATION_SUCCESS\";\nexport const SCORE_APPLICATION_FAIL = \"SCORE_APPLICATION_FAIL\";\nexport const SCORE_APPLICATION_RESET = \"SCORE_APPLICATION_RESET\";\n\nexport const UPDATE_APPLICATION_LISTING_CURRENT_PAGE = \"UPDATE_APPLICATION_LISTING_CURRENT_PAGE\";\nexport const UPDATE_APPLICATION_LISTING_PAGE_SIZE = \"UPDATE_APPLICATION_LISTING_PAGE_SIZE\";\n\nexport const APPLICATION_SEARCH_SORTING_UPDATE = \"APPLICATION_SEARCH_SORTING_UPDATE\";\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nexport const COMMON_DATA_LOAD = \"COMMON_DATA_LOAD\";\nexport const COMMON_DATA_LOAD_SUCCESS = \"COMMON_DATA_LOAD_SUCCESS\";\nexport const COMMON_DATA_LOAD_FAIL = \"COMMON_DATA_LOAD_FAIL\";\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { ICommonData } from \"Interfaces/SiteContent/ICommonData\";\n\nimport {\n  COMMON_DATA_LOAD,\n  COMMON_DATA_LOAD_FAIL,\n  COMMON_DATA_LOAD_SUCCESS,\n} from \"./CommonDataActionTypes\";\n\n/**\n * Action for getting the common data.\n */\nexport interface ICommonDataLoad {\n  type: typeof COMMON_DATA_LOAD;\n}\n\n/**\n * Action when common data is loaded successfully.\n */\nexport interface ICommonDataLoadSuccess {\n  type: typeof COMMON_DATA_LOAD_SUCCESS;\n  commonData: ICommonData;\n}\n\n/**\n * Action when common data load fails.\n */\nexport interface ICommonDataLoadFail {\n  type: typeof COMMON_DATA_LOAD_FAIL;\n  commonDataLoadError: string;\n}\n\n/**\n * Action for loading the common data.\n * @returns {ICommonDataLoad}\n */\nexport const loadCommonData = (): ICommonDataLoad => ({\n  type: COMMON_DATA_LOAD,\n});\n\n/**\n * Action for getting the common data success.\n * @returns {ICommonDataLoad}\n */\nexport const getCommonDataSuccess = (commonData: ICommonData): ICommonDataLoadSuccess => ({\n  type: COMMON_DATA_LOAD_SUCCESS,\n  commonData,\n});\n\n/**\n * Action when common data fails to load.\n * @returns {ICommonDataLoadFail}\n */\nexport const getCommonDataFailure = (commonDataLoadError: string): ICommonDataLoadFail => ({\n  type: \"COMMON_DATA_LOAD_FAIL\",\n  commonDataLoadError,\n});\n\nexport type CommonDataActionTypes = ICommonDataLoad | ICommonDataLoadSuccess | ICommonDataLoadFail;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport {\n  ACTIVITIES_EVENTS_FILTER_VALUE_ADD,\n  ACTIVITIES_EVENTS_FILTER_VALUE_BULK_REMOVE,\n  ACTIVITIES_EVENTS_FILTER_VALUE_REMOVE,\n  ACTIVITIES_EVENTS_FILTER_VALUE_RESET,\n  CLEAR_APPLICATION_DETAILS_STATE,\n  GET_ACTIVITY_EVENT_BY_ID,\n  GET_ACTIVITY_EVENT_BY_ID_FAIL,\n  GET_ACTIVITY_EVENT_BY_ID_SUCCESS,\n  GET_ADDITIONAL_ACTIVITIES_EVENTS_BY_SELECTED_USERPROFILE_ID,\n  GET_ADDITIONAL_ACTIVITIES_EVENTS_BY_SELECTED_USERPROFILE_ID_FAIL,\n  GET_ADDITIONAL_ACTIVITIES_EVENTS_BY_SELECTED_USERPROFILE_ID_SUCCESS,\n  GET_APPLICATION_FLAGS_BY_SELECTED_APPLICATION_ID,\n  GET_APPLICATION_FLAGS_BY_SELECTED_APPLICATION_ID_FAIL,\n  GET_APPLICATION_FLAGS_BY_SELECTED_APPLICATION_ID_SUCCESS,\n  GET_APPLICATION_QUESTIONS_BY_SELECTED_APPLICATION_ID,\n  GET_APPLICATION_QUESTIONS_BY_SELECTED_APPLICATION_ID_FAIL,\n  GET_APPLICATION_QUESTIONS_BY_SELECTED_APPLICATION_ID_SUCCESS,\n  GET_HIGHLIGHTED_ACTIVITIES_EVENTS_BY_SELECTED_APPLICATION_ID,\n  GET_HIGHLIGHTED_ACTIVITIES_EVENTS_BY_SELECTED_APPLICATION_ID_FAIL,\n  GET_HIGHLIGHTED_ACTIVITIES_EVENTS_BY_SELECTED_APPLICATION_ID_SUCCESS,\n  GET_USER_PROFILE_BY_SELECTED_APPLICATION_ID,\n  GET_USER_PROFILE_BY_SELECTED_APPLICATION_ID_FAIL,\n  GET_USER_PROFILE_BY_SELECTED_APPLICATION_ID_SUCCESS,\n  UPDATE_ACTIVITIES_EVENTS_CURRENT_PAGE,\n  UPDATE_ACTIVITIES_EVENTS_PAGE_SIZE,\n  UPDATE_APPLICATION_STATUSES_AND_REMOVE_FLAGS,\n  UPDATE_APPLICATION_STATUSES_AND_REMOVE_FLAGS_FAIL,\n  UPDATE_APPLICATION_STATUSES_AND_REMOVE_FLAGS_RESET,\n  UPDATE_APPLICATION_STATUSES_AND_REMOVE_FLAGS_SUCCESS,\n  UPDATE_APPLICATION_TECHNOLOGY_AREA_AND_RESET_SCORES,\n  UPDATE_APPLICATION_TECHNOLOGY_AREA_AND_RESET_SCORES_FAIL,\n  UPDATE_APPLICATION_TECHNOLOGY_AREA_AND_RESET_SCORES_RESET,\n  UPDATE_APPLICATION_TECHNOLOGY_AREA_AND_RESET_SCORES_SUCCESS,\n} from \"Dataflows/ApplicationDetails/ApplicationDetailsActionTypes\";\nimport { IApplicationFlagResponse } from \"Interfaces/Application/IApplicationFlagResponse\";\nimport { IApplicationFormActivityEvent } from \"Interfaces/Application/IApplicationFormActivityEvent\";\nimport { IApplicationFormActivityEventList } from \"Interfaces/Application/IApplicationFormActivityEventList\";\nimport { IApplicationFormTechnologyFocusAreaStatusUpdateData } from \"Interfaces/Application/IApplicationFormTechnologyFocusAreaStatusUpdateData\";\nimport { IApplicationFormTechnologyFocusAreaUpdateData } from \"Interfaces/Application/IApplicationFormTechnologyFocusAreaUpdateData\";\nimport { IApplicationQuestionResponse } from \"Interfaces/Application/IApplicationQuestionResponse\";\nimport { IApplicationUserProfileInformation } from \"Interfaces/Application/IApplicationUserProfileInformation\";\nimport { IFilterValue } from \"Interfaces/IFilterValue\";\n\n/**\n * Action for when adding selected filter value.\n * @interface\n */\nexport interface IActivitiesEventsFilterValueAdd {\n  type: typeof ACTIVITIES_EVENTS_FILTER_VALUE_ADD;\n  filterValue: IFilterValue;\n  isHighlighted: boolean;\n}\n\n/**\n * Action for when removing selected filter value.\n * @interface\n */\nexport interface IActivitiesEventsFilterValueRemove {\n  type: typeof ACTIVITIES_EVENTS_FILTER_VALUE_REMOVE;\n  filterValue: IFilterValue;\n  isHighlighted: boolean;\n}\n\n/**\n * Action for when removing selected filter value.\n * @interface\n */\nexport interface IActivitiesEventsFilterValueBulkRemove {\n  type: typeof ACTIVITIES_EVENTS_FILTER_VALUE_BULK_REMOVE;\n  filterValues: IFilterValue[];\n  isHighlighted: boolean;\n}\n\nexport interface IUpdateActivitiesEventsCurrentPage {\n  type: typeof UPDATE_ACTIVITIES_EVENTS_CURRENT_PAGE;\n  currentPage: number;\n  isHighlighted: boolean;\n}\n\nexport interface IUpdateActivitiesEventsPageSize {\n  type: typeof UPDATE_ACTIVITIES_EVENTS_PAGE_SIZE;\n  pageSize: number;\n  isHighlighted: boolean;\n}\n\n/**\n * Action for when resetting selected filter value.\n * @interface\n */\nexport interface IActivitiesEventsFilterValueReset {\n  type: typeof ACTIVITIES_EVENTS_FILTER_VALUE_RESET;\n  isHighlighted: boolean;\n}\n\n/**\n * Action for when getting the selected application by id.\n * @interface\n */\nexport interface IGetUserProfileBySelectedApplicationId {\n  type: typeof GET_USER_PROFILE_BY_SELECTED_APPLICATION_ID;\n  selectedApplicationId: number;\n  tenant: string;\n}\n\n/**\n * Action for when getting the selected application by id success.\n * @interface\n */\nexport interface IGetUserProfileBySelectedApplicationIdSuccess {\n  type: typeof GET_USER_PROFILE_BY_SELECTED_APPLICATION_ID_SUCCESS;\n  userProfileInfo: IApplicationUserProfileInformation;\n}\n\n/**\n * Action for when getting the selected application by id fail.\n * @interface\n */\nexport interface IGetUserProfileBySelectedApplicationIdFail {\n  type: typeof GET_USER_PROFILE_BY_SELECTED_APPLICATION_ID_FAIL;\n  errorMessage: string;\n}\n\nexport interface IGetApplicationFlagsBySelectedApplicationId {\n  type: typeof GET_APPLICATION_FLAGS_BY_SELECTED_APPLICATION_ID;\n  selectedApplicationId: number;\n}\n\nexport interface IGetApplicationFlagsBySelectedApplicationIdSuccess {\n  type: typeof GET_APPLICATION_FLAGS_BY_SELECTED_APPLICATION_ID_SUCCESS;\n  applicationFlags: IApplicationFlagResponse[];\n}\n\nexport interface IGetApplicationFlagsBySelectedApplicationIdFail {\n  type: typeof GET_APPLICATION_FLAGS_BY_SELECTED_APPLICATION_ID_FAIL;\n  errorMessage: string;\n}\n\nexport interface IGetApplicationQuestionsBySelectedApplicationId {\n  type: typeof GET_APPLICATION_QUESTIONS_BY_SELECTED_APPLICATION_ID;\n  selectedApplicationId: number;\n  tenant: string;\n}\n\nexport interface IGetApplicationQuestionsBySelectedApplicationIdSuccess {\n  type: typeof GET_APPLICATION_QUESTIONS_BY_SELECTED_APPLICATION_ID_SUCCESS;\n  applicationQuestions: IApplicationQuestionResponse[];\n}\n\nexport interface IGetApplicationQuestionsBySelectedApplicationIdFail {\n  type: typeof GET_APPLICATION_QUESTIONS_BY_SELECTED_APPLICATION_ID_FAIL;\n  errorMessage: string;\n}\n\nexport interface IGetHighlightedActivitiesEventsBySelectedApplicationId {\n  type: typeof GET_HIGHLIGHTED_ACTIVITIES_EVENTS_BY_SELECTED_APPLICATION_ID;\n  applicationId: number;\n  pageIndex: string;\n  pageSize: string;\n  selectedFilterValues: IFilterValue[];\n  tenant: string;\n  sortFieldName?: string;\n  isDescendingSort?: boolean;\n}\n\nexport interface IGetHighlightedActivitiesEventsBySelectedApplicationIdSuccess {\n  type: typeof GET_HIGHLIGHTED_ACTIVITIES_EVENTS_BY_SELECTED_APPLICATION_ID_SUCCESS;\n  highlightedActivitiesEvents: IApplicationFormActivityEventList;\n}\n\nexport interface IGetHighlightedActivitiesEventsBySelectedApplicationIdFail {\n  type: typeof GET_HIGHLIGHTED_ACTIVITIES_EVENTS_BY_SELECTED_APPLICATION_ID_FAIL;\n  errorMessage: string;\n}\n\nexport interface IGetAdditionalActivitiesEventsBySelectedUserprofileId {\n  type: typeof GET_ADDITIONAL_ACTIVITIES_EVENTS_BY_SELECTED_USERPROFILE_ID;\n  userprofileId: number;\n  pageIndex: string;\n  pageSize: string;\n  selectedFilterValues: IFilterValue[];\n  tenant: string;\n  sortFieldName?: string;\n  isDescendingSort?: boolean;\n}\n\nexport interface IGetAdditionalActivitiesEventsBySelectedUserprofileIdFail {\n  type: typeof GET_ADDITIONAL_ACTIVITIES_EVENTS_BY_SELECTED_USERPROFILE_ID_FAIL;\n  errorMessage: string;\n}\n\nexport interface IGetAdditionalActivitiesEventsBySelectedUserprofileIdSuccess {\n  type: typeof GET_ADDITIONAL_ACTIVITIES_EVENTS_BY_SELECTED_USERPROFILE_ID_SUCCESS;\n  additionalActivitiesEvents: IApplicationFormActivityEventList;\n}\n\nexport interface IClearApplicationDetailsState {\n  type: typeof CLEAR_APPLICATION_DETAILS_STATE;\n}\n\nexport interface IGetActivityEvent {\n  type: typeof GET_ACTIVITY_EVENT_BY_ID;\n  activityEventId: number;\n  contributionType: string;\n}\n\nexport interface IGetActivityEventSuccess {\n  type: typeof GET_ACTIVITY_EVENT_BY_ID_SUCCESS;\n  activityEvent: IApplicationFormActivityEvent;\n}\n\nexport interface IGetActivityEventFail {\n  type: typeof GET_ACTIVITY_EVENT_BY_ID_FAIL;\n  errorMessage: string;\n}\n\nexport interface IUpdateApplicationStatusesAndRemoveFlags {\n  type: typeof UPDATE_APPLICATION_STATUSES_AND_REMOVE_FLAGS;\n  applicationFormId: number;\n  technologyFocusAreaStatuses: IApplicationFormTechnologyFocusAreaStatusUpdateData[];\n  removeFlags: boolean;\n  justification: string;\n}\n\nexport interface IUpdateApplicationStatusesAndRemoveFlagsFail {\n  type: typeof UPDATE_APPLICATION_STATUSES_AND_REMOVE_FLAGS_FAIL;\n  errorMessage: string;\n}\n\nexport interface IUpdateApplicationStatusesAndRemoveFlagsSuccess {\n  type: typeof UPDATE_APPLICATION_STATUSES_AND_REMOVE_FLAGS_SUCCESS;\n}\n\nexport interface IUpdateApplicationStatusesAndRemoveFlagsReset {\n  type: typeof UPDATE_APPLICATION_STATUSES_AND_REMOVE_FLAGS_RESET;\n}\n\nexport interface IUpdateApplicationTechnologyAreaAndResetScores {\n  type: typeof UPDATE_APPLICATION_TECHNOLOGY_AREA_AND_RESET_SCORES;\n  applicationFormId: number;\n  technologyFocusAreas: IApplicationFormTechnologyFocusAreaUpdateData[];\n  justification: string;\n}\n\nexport interface IUpdateApplicationTechnologyAreaAndResetScoresFail {\n  type: typeof UPDATE_APPLICATION_TECHNOLOGY_AREA_AND_RESET_SCORES_FAIL;\n  errorMessage: string;\n}\n\nexport interface IUpdateApplicationTechnologyAreaAndResetScoresSuccess {\n  type: typeof UPDATE_APPLICATION_TECHNOLOGY_AREA_AND_RESET_SCORES_SUCCESS;\n}\n\nexport interface IUpdateApplicationTechnologyAreaAndResetScoresReset {\n  type: typeof UPDATE_APPLICATION_TECHNOLOGY_AREA_AND_RESET_SCORES_RESET;\n}\n\nexport function addActivitiesEventsFilterValue(\n  filterValue: IFilterValue,\n  isHighlighted: boolean\n): IActivitiesEventsFilterValueAdd {\n  return {\n    type: ACTIVITIES_EVENTS_FILTER_VALUE_ADD,\n    filterValue,\n    isHighlighted,\n  };\n}\n\nexport function removeActivitiesEventsFilterValue(\n  filterValue: IFilterValue,\n  isHighlighted: boolean\n): IActivitiesEventsFilterValueRemove {\n  return {\n    type: ACTIVITIES_EVENTS_FILTER_VALUE_REMOVE,\n    filterValue,\n    isHighlighted,\n  };\n}\n\nexport function removeMultipleActivitiesEventsFilterValues(\n  filterValues: IFilterValue[],\n  isHighlighted: boolean\n): IActivitiesEventsFilterValueBulkRemove {\n  return {\n    type: ACTIVITIES_EVENTS_FILTER_VALUE_BULK_REMOVE,\n    filterValues,\n    isHighlighted,\n  };\n}\n\nexport function updateActivitiesEventsCurrentPage(\n  currentPage: number,\n  isHighlighted: boolean\n): IUpdateActivitiesEventsCurrentPage {\n  return {\n    type: UPDATE_ACTIVITIES_EVENTS_CURRENT_PAGE,\n    currentPage,\n    isHighlighted,\n  };\n}\n\nexport function updateActivitiesEventsPageSize(\n  pageSize: number,\n  isHighlighted: boolean\n): IUpdateActivitiesEventsPageSize {\n  return {\n    type: UPDATE_ACTIVITIES_EVENTS_PAGE_SIZE,\n    pageSize,\n    isHighlighted,\n  };\n}\n\n/**\n * Action creator for reseting selected filter value.\n * @param isHighlighted\n * @returns {IActivitiesEventsFilterValueReset}\n */\nexport function resetActivitiesEventsFilterValues(\n  isHighlighted: boolean\n): IActivitiesEventsFilterValueReset {\n  return {\n    type: ACTIVITIES_EVENTS_FILTER_VALUE_RESET,\n    isHighlighted,\n  };\n}\n\n/**\n * Action creator for GET_SELECTED_APPLICATION_BY_ID.\n */\nexport function getUserProfileBySelectedApplicationId(\n  selectedApplicationId: number,\n  tenant: string\n): ActivitiesEventsActionTypes {\n  return {\n    type: GET_USER_PROFILE_BY_SELECTED_APPLICATION_ID,\n    selectedApplicationId,\n    tenant,\n  };\n}\n\n/**\n * Action creator for GET_SELECTED_APPLICATION_BY_ID_SUCCESS.\n */\nexport function getUserProfileBySelectedApplicationIdSuccess(\n  userProfileInfo: IApplicationUserProfileInformation\n): ActivitiesEventsActionTypes {\n  return {\n    type: GET_USER_PROFILE_BY_SELECTED_APPLICATION_ID_SUCCESS,\n    userProfileInfo,\n  };\n}\n/**\n * Action creator for GET_SELECTED_APPLICATION_BY_ID_FAIL.\n */\nexport function getUserProfileBySelectedApplicationIdFail(\n  errorMessage: string\n): ActivitiesEventsActionTypes {\n  return {\n    type: GET_USER_PROFILE_BY_SELECTED_APPLICATION_ID_FAIL,\n    errorMessage,\n  };\n}\n\nexport function fetchApplicationQuestionsBySelectedApplicationId(\n  selectedApplicationId: number,\n  tenant: string\n): ActivitiesEventsActionTypes {\n  return {\n    type: GET_APPLICATION_QUESTIONS_BY_SELECTED_APPLICATION_ID,\n    selectedApplicationId,\n    tenant,\n  };\n}\n\nexport function getApplicationQuestionsBySelectedApplicationIdSuccess(\n  applicationQuestions: IApplicationQuestionResponse[]\n): ActivitiesEventsActionTypes {\n  return {\n    type: GET_APPLICATION_QUESTIONS_BY_SELECTED_APPLICATION_ID_SUCCESS,\n    applicationQuestions,\n  };\n}\n\nexport function getApplicationQuestionsBySelectedApplicationIdFail(\n  errorMessage: string\n): ActivitiesEventsActionTypes {\n  return {\n    type: GET_APPLICATION_QUESTIONS_BY_SELECTED_APPLICATION_ID_FAIL,\n    errorMessage,\n  };\n}\n\nexport function fetchHighlightedActivitiesEventsBySelectedApplicationId(\n  applicationId: number,\n  pageIndex: string,\n  pageSize: string,\n  selectedFilterValues: IFilterValue[],\n  tenant: string,\n  sortFieldName?: string,\n  isDescendingSort?: boolean\n): ActivitiesEventsActionTypes {\n  return {\n    type: GET_HIGHLIGHTED_ACTIVITIES_EVENTS_BY_SELECTED_APPLICATION_ID,\n    applicationId,\n    pageIndex,\n    pageSize,\n    selectedFilterValues,\n    tenant,\n    sortFieldName,\n    isDescendingSort,\n  };\n}\n\nexport function getHighlightedActivitiesEventsBySelectedApplicationIdSuccess(\n  highlightedActivitiesEvents: IApplicationFormActivityEventList\n): ActivitiesEventsActionTypes {\n  return {\n    type: GET_HIGHLIGHTED_ACTIVITIES_EVENTS_BY_SELECTED_APPLICATION_ID_SUCCESS,\n    highlightedActivitiesEvents,\n  };\n}\n\nexport function getHighlightedActivitiesEventsBySelectedApplicationIdFail(\n  errorMessage: string\n): ActivitiesEventsActionTypes {\n  return {\n    type: GET_HIGHLIGHTED_ACTIVITIES_EVENTS_BY_SELECTED_APPLICATION_ID_FAIL,\n    errorMessage,\n  };\n}\n\nexport function getAdditionalActivitiesEventsBySelectedUserProfileIdSuccess(\n  additionalActivitiesEvents: IApplicationFormActivityEventList\n): ActivitiesEventsActionTypes {\n  return {\n    type: GET_ADDITIONAL_ACTIVITIES_EVENTS_BY_SELECTED_USERPROFILE_ID_SUCCESS,\n    additionalActivitiesEvents,\n  };\n}\n\nexport function getAdditionalActivitiesEventsBySelectedUserProfileIdFail(\n  errorMessage: string\n): ActivitiesEventsActionTypes {\n  return {\n    type: GET_ADDITIONAL_ACTIVITIES_EVENTS_BY_SELECTED_USERPROFILE_ID_FAIL,\n    errorMessage,\n  };\n}\n\nexport function fetchAdditionalActivitiesEventsBySelectedUserprofileId(\n  userprofileId: number,\n  pageIndex: string,\n  pageSize: string,\n  selectedFilterValues: IFilterValue[],\n  tenant: string,\n  sortFieldName?: string,\n  isDescendingSort?: boolean\n): ActivitiesEventsActionTypes {\n  return {\n    type: GET_ADDITIONAL_ACTIVITIES_EVENTS_BY_SELECTED_USERPROFILE_ID,\n    userprofileId,\n    pageIndex,\n    pageSize,\n    selectedFilterValues,\n    tenant,\n    sortFieldName,\n    isDescendingSort,\n  };\n}\n\nexport function fetchActivityEventById(\n  activityEventId: number,\n  contributionType: string\n): ActivitiesEventsActionTypes {\n  return {\n    type: GET_ACTIVITY_EVENT_BY_ID,\n    activityEventId,\n    contributionType,\n  };\n}\n\nexport function getActivityEventByIdSuccess(\n  activityEvent: IApplicationFormActivityEvent\n): ActivitiesEventsActionTypes {\n  return {\n    type: GET_ACTIVITY_EVENT_BY_ID_SUCCESS,\n    activityEvent,\n  };\n}\n\nexport function getActivityEventByIdFail(errorMessage: string): ActivitiesEventsActionTypes {\n  return {\n    type: GET_ACTIVITY_EVENT_BY_ID_FAIL,\n    errorMessage,\n  };\n}\n\nexport function clearApplicationDetailsState(): ActivitiesEventsActionTypes {\n  return {\n    type: CLEAR_APPLICATION_DETAILS_STATE,\n  };\n}\n\nexport function fetchApplicationFlagsBySelectedApplicationId(\n  selectedApplicationId: number\n): ActivitiesEventsActionTypes {\n  return {\n    type: GET_APPLICATION_FLAGS_BY_SELECTED_APPLICATION_ID,\n    selectedApplicationId,\n  };\n}\n\nexport function fetchApplicationFlagsBySelectedApplicationIdSuccess(\n  applicationFlags: IApplicationFlagResponse[]\n): ActivitiesEventsActionTypes {\n  return {\n    type: GET_APPLICATION_FLAGS_BY_SELECTED_APPLICATION_ID_SUCCESS,\n    applicationFlags,\n  };\n}\n\nexport function fetchApplicationFlagsBySelectedApplicationIdFail(\n  errorMessage: string\n): ActivitiesEventsActionTypes {\n  return {\n    type: GET_APPLICATION_FLAGS_BY_SELECTED_APPLICATION_ID_FAIL,\n    errorMessage,\n  };\n}\n\nexport function updateApplicationStatusesAndRemoveFlags(\n  applicationFormId: number,\n  technologyFocusAreaStatuses: IApplicationFormTechnologyFocusAreaStatusUpdateData[],\n  removeFlags: boolean,\n  justification: string\n): ActivitiesEventsActionTypes {\n  return {\n    type: UPDATE_APPLICATION_STATUSES_AND_REMOVE_FLAGS,\n    applicationFormId,\n    technologyFocusAreaStatuses,\n    removeFlags,\n    justification,\n  };\n}\n\nexport function updateApplicationStatusesAndRemoveFlagsFail(\n  errorMessage: string\n): ActivitiesEventsActionTypes {\n  return {\n    type: UPDATE_APPLICATION_STATUSES_AND_REMOVE_FLAGS_FAIL,\n    errorMessage,\n  };\n}\n\nexport function updateApplicationStatusesAndRemoveFlagsSuccess(): ActivitiesEventsActionTypes {\n  return {\n    type: UPDATE_APPLICATION_STATUSES_AND_REMOVE_FLAGS_SUCCESS,\n  };\n}\n\nexport function updateApplicationStatusesAndRemoveFlagsReset(): ActivitiesEventsActionTypes {\n  return {\n    type: UPDATE_APPLICATION_STATUSES_AND_REMOVE_FLAGS_RESET,\n  };\n}\n\nexport function updateApplicationTechnologyAreaAndResetScores(\n  applicationFormId: number,\n  technologyFocusAreas: IApplicationFormTechnologyFocusAreaUpdateData[],\n  justification: string\n): ActivitiesEventsActionTypes {\n  return {\n    type: UPDATE_APPLICATION_TECHNOLOGY_AREA_AND_RESET_SCORES,\n    applicationFormId,\n    technologyFocusAreas,\n    justification,\n  };\n}\n\nexport function updateApplicationTechnologyAreaAndResetScoresFail(\n  errorMessage: string\n): ActivitiesEventsActionTypes {\n  return {\n    type: UPDATE_APPLICATION_TECHNOLOGY_AREA_AND_RESET_SCORES_FAIL,\n    errorMessage,\n  };\n}\n\nexport function updateApplicationTechnologyAreaAndResetScoresSuccess(): ActivitiesEventsActionTypes {\n  return {\n    type: UPDATE_APPLICATION_TECHNOLOGY_AREA_AND_RESET_SCORES_SUCCESS,\n  };\n}\n\nexport function updateApplicationTechnologyAreaAndResetScoresReset(): ActivitiesEventsActionTypes {\n  return {\n    type: UPDATE_APPLICATION_TECHNOLOGY_AREA_AND_RESET_SCORES_RESET,\n  };\n}\n\nexport type ActivitiesEventsActionTypes =\n  | IGetUserProfileBySelectedApplicationId\n  | IGetUserProfileBySelectedApplicationIdFail\n  | IGetUserProfileBySelectedApplicationIdSuccess\n  | IGetApplicationFlagsBySelectedApplicationId\n  | IGetApplicationFlagsBySelectedApplicationIdFail\n  | IGetApplicationFlagsBySelectedApplicationIdSuccess\n  | IGetApplicationQuestionsBySelectedApplicationId\n  | IGetApplicationQuestionsBySelectedApplicationIdFail\n  | IGetApplicationQuestionsBySelectedApplicationIdSuccess\n  | IGetAdditionalActivitiesEventsBySelectedUserprofileId\n  | IGetAdditionalActivitiesEventsBySelectedUserprofileIdFail\n  | IGetAdditionalActivitiesEventsBySelectedUserprofileIdSuccess\n  | IGetHighlightedActivitiesEventsBySelectedApplicationId\n  | IGetHighlightedActivitiesEventsBySelectedApplicationIdFail\n  | IGetHighlightedActivitiesEventsBySelectedApplicationIdSuccess\n  | IGetActivityEvent\n  | IGetActivityEventFail\n  | IGetActivityEventSuccess\n  | IActivitiesEventsFilterValueAdd\n  | IActivitiesEventsFilterValueRemove\n  | IActivitiesEventsFilterValueBulkRemove\n  | IUpdateActivitiesEventsCurrentPage\n  | IUpdateActivitiesEventsPageSize\n  | IClearApplicationDetailsState\n  | IUpdateApplicationStatusesAndRemoveFlags\n  | IUpdateApplicationStatusesAndRemoveFlagsFail\n  | IUpdateApplicationStatusesAndRemoveFlagsSuccess\n  | IUpdateApplicationStatusesAndRemoveFlagsReset\n  | IUpdateApplicationTechnologyAreaAndResetScores\n  | IUpdateApplicationTechnologyAreaAndResetScoresFail\n  | IUpdateApplicationTechnologyAreaAndResetScoresSuccess\n  | IUpdateApplicationTechnologyAreaAndResetScoresReset\n  | IActivitiesEventsFilterValueReset;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nexport const ACTIVITIES_EVENTS_FILTER_VALUE_ADD = \"ACTIVITIES_EVENTS_FILTER_VALUE_ADD\";\nexport const ACTIVITIES_EVENTS_FILTER_VALUE_REMOVE = \"ACTIVITIES_EVENTS_FILTER_VALUE_REMOVE\";\nexport const ACTIVITIES_EVENTS_FILTER_VALUE_BULK_REMOVE =\n  \"ACTIVITIES_EVENTS_FILTER_VALUE_BULK_REMOVE\";\nexport const ACTIVITIES_EVENTS_FILTER_VALUE_RESET = \"ACTIVITIES_EVENTS_FILTER_VALUE_RESET\";\n\nexport const UPDATE_ACTIVITIES_EVENTS_CURRENT_PAGE = \"UPDATE_ACTIVITIES_EVENTS_CURRENT_PAGE\";\nexport const UPDATE_ACTIVITIES_EVENTS_PAGE_SIZE = \"UPDATE_ACTIVITIES_EVENTS_PAGE_SIZE\";\n\nexport const GET_USER_PROFILE_BY_SELECTED_APPLICATION_ID =\n  \"GET_USER_PROFILE_BY_SELECTED_APPLICATION_ID\";\nexport const GET_USER_PROFILE_BY_SELECTED_APPLICATION_ID_SUCCESS =\n  \"GET_USER_PROFILE_BY_SELECTED_APPLICATION_ID_SUCCESS\";\nexport const GET_USER_PROFILE_BY_SELECTED_APPLICATION_ID_FAIL =\n  \"GET_USER_PROFILE_BY_SELECTED_APPLICATION_ID_FAIL\";\n\nexport const GET_APPLICATION_FLAGS_BY_SELECTED_APPLICATION_ID =\n  \"GET_APPLICATION_FLAGS_BY_SELECTED_APPLICATION_ID\";\nexport const GET_APPLICATION_FLAGS_BY_SELECTED_APPLICATION_ID_FAIL =\n  \"GET_APPLICATION_FLAGS_BY_SELECTED_APPLICATION_ID_FAIL\";\nexport const GET_APPLICATION_FLAGS_BY_SELECTED_APPLICATION_ID_SUCCESS =\n  \"GET_APPLICATION_FLAGS_BY_SELECTED_APPLICATION_ID_SUCCESS\";\n\nexport const GET_APPLICATION_QUESTIONS_BY_SELECTED_APPLICATION_ID =\n  \"GET_APPLICATION_QUESTIONS_BY_SELECTED_APPLICATION_ID\";\nexport const GET_APPLICATION_QUESTIONS_BY_SELECTED_APPLICATION_ID_SUCCESS =\n  \"GET_APPLICATION_QUESTIONS_BY_SELECTED_APPLICATION_ID_SUCCESS\";\nexport const GET_APPLICATION_QUESTIONS_BY_SELECTED_APPLICATION_ID_FAIL =\n  \"GET_APPLICATION_QUESTIONS_BY_SELECTED_APPLICATION_ID_FAIL\";\n\nexport const GET_HIGHLIGHTED_ACTIVITIES_EVENTS_BY_SELECTED_APPLICATION_ID =\n  \"GET_HIGHLIGHTED_ACTIVITIES_EVENTS_BY_SELECTED_APPLICATION_ID\";\nexport const GET_HIGHLIGHTED_ACTIVITIES_EVENTS_BY_SELECTED_APPLICATION_ID_SUCCESS =\n  \"GET_HIGHLIGHTED_ACTIVITIES_EVENTS_BY_SELECTED_APPLICATION_ID_SUCCESS\";\nexport const GET_HIGHLIGHTED_ACTIVITIES_EVENTS_BY_SELECTED_APPLICATION_ID_FAIL =\n  \"GET_HIGHLIGHTED_ACTIVITIES_EVENTS_BY_SELECTED_APPLICATION_ID_FAIL\";\n\nexport const GET_ADDITIONAL_ACTIVITIES_EVENTS_BY_SELECTED_USERPROFILE_ID =\n  \"GET_ADDITIONAL_ACTIVITIES_EVENTS_BY_SELECTED_USERPROFILE_ID\";\nexport const GET_ADDITIONAL_ACTIVITIES_EVENTS_BY_SELECTED_USERPROFILE_ID_SUCCESS =\n  \"GET_ADDITIONAL_ACTIVITIES_EVENTS_BY_SELECTED_USERPROFILE_ID_SUCCESS\";\nexport const GET_ADDITIONAL_ACTIVITIES_EVENTS_BY_SELECTED_USERPROFILE_ID_FAIL =\n  \"GET_ADDITIONAL_ACTIVITIES_EVENTS_BY_SELECTED_USERPROFILE_ID_FAIL\";\n\nexport const GET_ACTIVITY_EVENT_BY_ID = \"GET_ACTIVITY_EVENT_BY_ID\";\nexport const GET_ACTIVITY_EVENT_BY_ID_SUCCESS = \"GET_ACTIVITY_EVENT_BY_ID_SUCCESS\";\nexport const GET_ACTIVITY_EVENT_BY_ID_FAIL = \"GET_ACTIVITY_EVENT_BY_ID_FAIL\";\n\nexport const CLEAR_APPLICATION_DETAILS_STATE = \"CLEAR_APPLICATION_DETAILS_STATE\";\n\nexport const UPDATE_APPLICATION_STATUSES_AND_REMOVE_FLAGS =\n  \"UPDATE_APPLICATION_STATUSES_AND_REMOVE_FLAGS\";\nexport const UPDATE_APPLICATION_STATUSES_AND_REMOVE_FLAGS_FAIL =\n  \"UPDATE_APPLICATION_STATUSES_AND_REMOVE_FLAGS_FAIL\";\nexport const UPDATE_APPLICATION_STATUSES_AND_REMOVE_FLAGS_SUCCESS =\n  \"UPDATE_APPLICATION_STATUSES_AND_REMOVE_FLAGS_SUCCESS\";\nexport const UPDATE_APPLICATION_STATUSES_AND_REMOVE_FLAGS_RESET =\n  \"UPDATE_APPLICATION_STATUSES_AND_REMOVE_FLAGS_RESET\";\n\nexport const UPDATE_APPLICATION_TECHNOLOGY_AREA_AND_RESET_SCORES =\n  \"UPDATE_APPLICATION_TECHNOLOGY_AREA_AND_RESET_SCORES\";\nexport const UPDATE_APPLICATION_TECHNOLOGY_AREA_AND_RESET_SCORES_FAIL =\n  \"UPDATE_APPLICATION_TECHNOLOGY_AREA_AND_RESET_SCORES_FAIL\";\nexport const UPDATE_APPLICATION_TECHNOLOGY_AREA_AND_RESET_SCORES_SUCCESS =\n  \"UPDATE_APPLICATION_TECHNOLOGY_AREA_AND_RESET_SCORES_SUCCESS\";\nexport const UPDATE_APPLICATION_TECHNOLOGY_AREA_AND_RESET_SCORES_RESET =\n  \"UPDATE_APPLICATION_TECHNOLOGY_AREA_AND_RESET_SCORES_RESET\";\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { OperationStatus } from \"Constants/OperationStatus\";\nimport { AppState } from \"Dataflows/Reducers\";\nimport { IApplicationGetAssign } from \"Interfaces/Application/IApplicationGetAssign\";\nimport { IApplicationListRowData } from \"Interfaces/Application/IApplicationListRowData\";\nimport { IFilterValue } from \"Interfaces/IFilterValue\";\n\nimport { IApplicationState } from \"./IApplicationState\";\n\n/**\n * Returns the application data.\n * @param applicationState\n */\nexport const getApplications = (applicationState: IApplicationState): IApplicationListRowData[] =>\n  applicationState.applications;\n\n/**\n * Returns current value from state for: applicationsFilterValues\n * @param applicationState\n */\nexport const getApplicationsFilterValues = (applicationState: IApplicationState): IFilterValue[] =>\n  applicationState.applicationsFilterValues;\n\n/**\n * Returns current value from state for: currentPage\n * @param applicationState\n */\nexport const getCurrentPage = (applicationState: IApplicationState): number =>\n  applicationState.currentPage;\n\n/**\n * Returns the filtered count.\n * @param applicationState\n */\nexport const getFilteredCount = (applicationState: IApplicationState): number =>\n  applicationState.filteredCount;\n\n/**\n * Returns the application load error.\n * @param applicationState\n */\nexport const getLoadApplicationsError = (applicationState: IApplicationState) =>\n  applicationState.loadApplicationsError;\n\n/**\n * Returns current value from state for: pageSize\n * @param applicationState\n */\nexport const getPageSize = (applicationState: IApplicationState): number =>\n  applicationState.pageSize;\n\n/**\n * Returns current value from state for: searchText\n * @param applicationState\n */\nexport const getSearchText = (applicationState: IApplicationState): string =>\n  applicationState.searchText;\n\n/**\n * Returns current value from state for: selectedApplication\n * @param applicationState\n */\nexport const getSelectedApplication = (applicationState: IApplicationState) =>\n  applicationState.selectedApplication;\n\n/**\n * Returns current value from state for: selectedApplicationEmail\n * @param applicationState\n */\nexport const getSelectedApplicationEmail = (applicationState: IApplicationState) =>\n  applicationState.selectedApplicationEmail;\n\n/**\n * Returns current value from state for: loadSelectedApplicationError\n * @param applicationState\n */\nexport const getLoadSelectedApplicationError = (applicationState: IApplicationState) =>\n  applicationState.loadSelectedApplicationError;\n\n/**\n * Returns the boolean value for whether or not\n * application data is still being loaded.\n * @param applicationState\n */\nexport const isLoadingApplications = (applicationState: IApplicationState) =>\n  applicationState.isLoadingApplications;\n\n/**\n * Returns the boolean value for whether or not\n * the selected application data is still being loaded.\n * @param {AppState} state The application state.\n * @returns {boolean} True if the selected application data is still being loaded.\n */\nexport const isLoadingSelectedApplication = (applicationState: IApplicationState): boolean =>\n  applicationState.isLoadingSelectedApplication;\n\n/**\n * Returns file down load data.\n * @param {AppState} state\n */\nexport const getFileDownloadData = (applicationState: IApplicationState): string | undefined =>\n  applicationState.fileDownloadData;\n\n/**\n * Returns file down load status.\n * @param {AppState} state\n */\nexport const getFileDownloadStatus = (applicationState: IApplicationState): OperationStatus =>\n  applicationState.fileDownloadStatus;\n\nexport const getCurrentTenant = (applicationState: IApplicationState): string =>\n  applicationState.tenant;\n\nexport const getAssignApplicationInfoStatus = (state: AppState): OperationStatus =>\n  state.applicationState.assignApplicationInfoStatus;\n\nexport const getAssignApplicationInfoErrorMessage = (state: AppState): string =>\n  state.applicationState.assignApplicationInfoErrorMessage;\n\nexport const getAssignApplicationInfo = (state: AppState): IApplicationGetAssign | undefined =>\n  state.applicationState.assignApplicationInfo;\n\nexport const getSortColumn = (state: AppState): string | undefined =>\n  state.applicationState.sortColumn;\n\nexport const getSortDescending = (state: AppState): boolean | undefined =>\n  state.applicationState.sortDescending;\n\n/**\n * Gets the status for AssignApplication.\n * @param {AppState} state\n */\nexport const getAssignApplicationStatus = (state: AppState): OperationStatus =>\n  state.applicationState.assignApplicationStatus;\n\n/**\n * Gets the error message for AssignApplication.\n * @param {AppState} state\n */\nexport const getAssignApplicationErrorMessage = (state: AppState): string =>\n  state.applicationState.assignApplicationErrorMessage;\n\n/**\n * Gets the status for ScoreApplication.\n * @param {AppState} state\n */\nexport const getScoreApplicationStatus = (state: AppState): OperationStatus =>\n  state.applicationState.scoreApplicationStatus;\n\n/**\n * Gets the error message for ScoreApplication.\n * @param {AppState} state\n */\nexport const getScoreApplicationErrorMessage = (state: AppState): string =>\n  state.applicationState.scoreApplicationErrorMessage;\n\n/**\n * Gets the status for flaggin an application.\n * @param {AppState} state\n */\nexport const getFlagApplicationStatus = (state: AppState): OperationStatus =>\n  state.applicationState.flagApplicationStatus;\n\n/**\n * Gets the error message for flagging an application.\n * @param {AppState} state\n */\nexport const getFlagApplicationErrorMessage = (state: AppState): string =>\n  state.applicationState.flagApplicationErrorMessage;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\nimport styled from \"styled-components\";\n\nimport {\n  getTheme,\n  FontSizes,\n  ISpinnerStyles,\n  IStackStyles,\n  IStackTokens,\n  ITextStyles,\n} from \"@fluentui/react\";\n\nconst theme = getTheme();\n\n/**\n * Tokens for stack of event data elements\n */\nexport const eventStackTokens: IStackTokens = { childrenGap: 5 };\n\n/**\n * Styles for stack of event data elements\n */\nexport const eventStackStyles: IStackStyles = {\n  root: {\n    marginTop: 10,\n  },\n};\n\n/**\n * Styling for the data and form labels\n */\nexport const labelTextStyles: ITextStyles = {\n  root: {\n    minWidth: 200,\n  },\n};\n\n/**\n * Styles for title at top of modal\n */\nexport const titleStyles: ITextStyles = {\n  root: {\n    fontSize: FontSizes.xLarge,\n    marginBottom: 20,\n  },\n};\n\n/**\n * Element at top of modal to display title\n */\nexport const TitleContainer = styled.div`\n  width: 100%;\n  padding-bottom: 0.5rem;\n  border-bottom: 1px solid ${theme.palette.neutralLight};\n`;\n\n/**\n * Styles for section within the detail (to separate sections of event data)\n */\nexport const sectionTitleStyles: ITextStyles = {\n  root: {\n    fontSize: FontSizes.large,\n    paddingTop: 20,\n  },\n};\n\n/**\n * Styles for the loading spinner\n */\nexport const spinnerStyles: ISpinnerStyles = {\n  root: {\n    marginTop: 32,\n  },\n};\n\nexport const detailsHeaderTextStyles: ITextStyles = { root: { fontSize: 24, fontWeight: 600 } };\nexport const detailsStackItemStyles: IStackStyles = { root: { flex: \"1 1\" } };\nexport const detailsTextStyles: ITextStyles = { root: { display: \"flex\", flexWrap: \"wrap\" } };\nexport const detailsStackTokens: IStackTokens = { childrenGap: 10 };\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\nimport React from \"react\";\n\nimport { connect } from \"react-redux\";\nimport { bindActionCreators, Dispatch } from \"redux\";\n\nimport { isEmpty } from \"lodash\";\n\nimport { Pivot, PivotItem, Spinner, SpinnerSize, Stack, Text } from \"@fluentui/react\";\n\nimport * as ApplicationActions from \"../../Dataflows/Application/ApplicationAction\";\n\nimport {\n  getLoadSelectedApplicationError,\n  getSelectedApplication,\n  getSelectedApplicationEmail,\n  isLoadingSelectedApplication,\n} from \"../../Dataflows/Application/ApplicationSelector\";\nimport { AppState } from \"../../Dataflows/Reducers\";\nimport { IDisplayableField } from \"../../Interfaces/IDisplayableField\";\nimport {\n  eventStackStyles,\n  eventStackTokens,\n  labelTextStyles,\n  spinnerStyles,\n} from \"./ApplicationDetails.styles\";\nimport { IApplicationDetailProps } from \"./IApplicationDetailProps\";\n\nconst applicationFields = [\n  {\n    name: \"id\",\n    label: \"ID\",\n    type: \"number\",\n  },\n  {\n    name: \"firstName\",\n    label: \"First Name\",\n    type: \"string\",\n  },\n  {\n    name: \"lastName\",\n    label: \"Last Name\",\n    type: \"string\",\n  },\n  {\n    name: \"primaryEmail\",\n    label: \"Email Address\",\n    type: \"string\",\n  },\n  {\n    name: \"formStatusName\",\n    label: \"Application Status\",\n    type: \"string\",\n  },\n] as IDisplayableField[];\n\nclass ApplicationDetails extends React.Component<IApplicationDetailProps> {\n  componentDidMount(): void {\n    const { selectedApplicationEmail, actions } = this.props;\n    selectedApplicationEmail && actions.loadSelectedApplication(selectedApplicationEmail);\n  }\n\n  render(): React.ReactElement<IApplicationDetailProps> {\n    const { selectedApplication, isLoadingSelectedApplication, loadSelectedApplicationError } =\n      this.props;\n\n    const getFieldValue = (field: IDisplayableField): any => {\n      const fieldValue = (selectedApplication as any)[field.name];\n\n      if (isEmpty(String(fieldValue)) || fieldValue === null) return \"---\";\n\n      return fieldValue;\n    };\n\n    if (selectedApplication.email == \"\") {\n      return <p>There is no information associated with this application.</p>;\n    }\n\n    if (isLoadingSelectedApplication) {\n      return <Spinner size={SpinnerSize.large} styles={spinnerStyles} />;\n    } else if (loadSelectedApplicationError !== \"\") {\n      return <div>{loadSelectedApplicationError}</div>;\n    }\n\n    return (\n      <>\n        <Pivot aria-label=\"Application details\">\n          <PivotItem headerText=\"Details\">\n            <Stack tokens={eventStackTokens} styles={eventStackStyles}>\n              {applicationFields.map((field) => {\n                return (\n                  <Stack horizontal key={field.name}>\n                    <Text styles={labelTextStyles}>{field.label}:</Text>\n                    <Text>{getFieldValue(field)}</Text>\n                  </Stack>\n                );\n              })}\n            </Stack>\n          </PivotItem>\n        </Pivot>\n      </>\n    );\n  }\n}\n\n/**\n * Maps StudentsContainer to redux state\n * @param {AppState} state The App state.\n */\nconst mapStateToProps = (state: AppState, ownProps: IApplicationDetailProps & any) => ({\n  isLoadingSelectedApplication: isLoadingSelectedApplication(state.applicationState),\n  loadSelectedApplicationError: getLoadSelectedApplicationError(state.applicationState),\n  selectedApplicationEmail: getSelectedApplicationEmail(state.applicationState),\n  selectedApplication: getSelectedApplication(state.applicationState),\n});\n\n/**\n * Maps Component's dispatch/handler props to redux state\n * @param {Dispatch} dispatch The dispatch.\n */\nconst mapDispatchToProps = (dispatch: Dispatch<ApplicationActions.ApplicationActionTypes>) => ({\n  actions: {\n    loadSelectedApplication: bindActionCreators(ApplicationActions.loadApplication, dispatch),\n  },\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(ApplicationDetails);\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { getTheme, IButtonStyles } from \"@fluentui/react\";\n\nconst theme = getTheme();\n\n/**\n * Styles for the icon button used within the modal\n */\nexport const reviewStatusButtonStyles: IButtonStyles = {\n  root: {\n    backgroundColor: theme.palette.neutralSecondaryAlt,\n    border: \"none\",\n    borderRadius: \"4px\",\n    color: theme.palette.white,\n    fontSize: \"12px\",\n    padding: \"4px 6px\",\n  },\n  rootDisabled: {\n    backgroundColor: theme.palette.neutralSecondaryAlt,\n    color: theme.palette.white,\n  },\n};\n\nexport const activeReviewStatusButtonStyles: IButtonStyles = {\n  root: {\n    backgroundColor: theme.palette.themePrimary,\n    border: \"none\",\n    borderRadius: \"4px\",\n    color: theme.palette.white,\n    fontSize: \"12px\",\n    padding: \"4px 6px\",\n  },\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { useEffect, useState } from \"react\";\n\nimport { connect } from \"react-redux\";\nimport { useHistory } from \"react-router-dom\";\nimport { bindActionCreators, Dispatch } from \"redux\";\n\nimport Pagination from \"rc-pagination\";\n\nimport {\n  DefaultButton,\n  DetailsList,\n  DetailsListLayoutMode,\n  Dropdown,\n  IconButton,\n  IColumn,\n  IDetailsRowProps,\n  Modal,\n  SelectionMode,\n  Spinner,\n  SpinnerSize,\n  Text,\n} from \"@fluentui/react\";\n\nimport * as ApplicationActions from \"Dataflows/Application/ApplicationAction\";\nimport * as ActivitiesEventsActions from \"Dataflows/ApplicationDetails/ApplicationDetailsAction\";\n\nimport ChevronIcon from \"Components/Common/ChevronIcon/ChevronIcon\";\nimport {\n  detailListStyles,\n  iconButtonStyles,\n  modalHeaderStyles,\n  modalStyles,\n  spinnerStyles,\n  ModalContent,\n  ModalHeader,\n  StyledSpan,\n} from \"Components/Common/SharedListStyles.styles\";\nimport StatusElement from \"Components/Common/Status/StatusElement\";\nimport { SortingColumns } from \"Constants/AdminConstants\";\nimport {\n  APPLICATION_REVIEW_STATUS_START_REVIEW,\n  REASON_FOR_FLAG_DROPDOWN_OPTIONS,\n} from \"Constants/ApplicationConstants\";\nimport { TenantTypesEnum } from \"Constants/TenantTypes\";\nimport {\n  getCurrentPage,\n  getLoadApplicationsError,\n  getPageSize,\n  getSearchText,\n  isLoadingApplications,\n} from \"Dataflows/Application/ApplicationSelector\";\nimport { AppState } from \"Dataflows/Reducers\";\nimport { IApplication } from \"Interfaces/Application/IApplication\";\nimport { IApplicationListRowData } from \"Interfaces/Application/IApplicationListRowData\";\nimport { formatDateEu } from \"Utility/FormatHelper\";\n\nimport ApplicationDetails from \"../ApplicationDetails/ApplicationDetails\";\nimport { PaginationRow } from \"../Common/Pagination/Pagination.styles\";\nimport \"../Common/Pagination/Pagination.styles.css\";\nimport { activeReviewStatusButtonStyles, reviewStatusButtonStyles } from \"./ApplicationList.styles\";\nimport { IApplicationsListProps } from \"./IApplicationsListProps\";\n\ntype ApplicationColumn = Partial<IColumn & { tenants: string[] }>;\n\n/**\n * List of applications\n * @Component\n * @returns {React.FunctionComponent<IApplicationsListProps>}\n */\nconst ApplicationsList: React.FunctionComponent<IApplicationsListProps> = (\n  props: IApplicationsListProps\n) => {\n  const history = useHistory();\n  const [isModalOpen, setIsModalOpen] = useState(false);\n\n  const {\n    actions,\n    data,\n    isLoadingApplications,\n    loadApplicationsError,\n    pageSize,\n    filteredCount,\n    currentPage,\n    tenant,\n  } = props;\n  /**\n   * A function that renders a button element for the\n   * review status of the application.\n   * @param {string} reviewStatus The review status of the application\n   * @returns {React.ReactElement} A button element that renders the current application status\n   */\n  const formatReviewStatus = (reviewStatus: string): React.ReactElement => (\n    <DefaultButton\n      disabled={reviewStatus !== APPLICATION_REVIEW_STATUS_START_REVIEW}\n      styles={\n        reviewStatus === APPLICATION_REVIEW_STATUS_START_REVIEW\n          ? activeReviewStatusButtonStyles\n          : reviewStatusButtonStyles\n      }\n      text={reviewStatus}\n    />\n  );\n\n  const formatStatusColumn = (statusKey: string): React.ReactElement => {\n    return <StatusElement statusValue={statusKey} />;\n  };\n\n  const formatScoreColumn = (technologyArea, score): React.ReactElement => {\n    return <span>{technologyArea ? (score ? score : \"Not scored\") : \"\"}</span>;\n  };\n\n  const applicationColumn = [\n    {\n      key: \"id\",\n      name: \"ID\",\n      ariaLabel: \"Application ID\",\n      fieldName: \"id\",\n      minWidth: 20,\n      maxWidth: 30,\n      isResizable: true,\n      tenants: [TenantTypesEnum.MLSA, TenantTypesEnum.MVP, TenantTypesEnum.RD],\n    },\n    {\n      key: \"firstName\",\n      name: \"First Name\",\n      ariaLabel: \"Applicant's first name\",\n      fieldName: \"firstName\",\n      isResizable: true,\n      minWidth: 70,\n      maxWidth: 100,\n      tenants: [TenantTypesEnum.MLSA, TenantTypesEnum.MVP, TenantTypesEnum.RD],\n    },\n    {\n      key: \"lastName\",\n      name: \"Last Name\",\n      ariaLabel: \"Applicant's last name\",\n      fieldName: \"lastName\",\n      isResizable: true,\n      minWidth: 70,\n      maxWidth: 100,\n      tenants: [TenantTypesEnum.MLSA, TenantTypesEnum.MVP, TenantTypesEnum.RD],\n    },\n    {\n      key: \"technologyArea1\",\n      name: \"Technology Area 1\",\n      ariaLabel: \"Technology Area 1\",\n      fieldName: \"technologyArea1\",\n      minWidth: 180,\n      isResizable: true,\n      tenants: [TenantTypesEnum.MVP],\n    },\n    {\n      key: \"technologyArea1Status\",\n      name: \"Status (TA1)\",\n      ariaLabel: \"Status of Technology Area 1\",\n      fieldName: \"technologyArea1Status\",\n      isResizable: true,\n      minWidth: 80,\n      tenants: [TenantTypesEnum.MVP],\n    },\n    {\n      key: \"score1\",\n      name: \"Score (TA1)\",\n      ariaLabel: \"Score of user who is assigned to review this application\",\n      fieldName: \"score1\",\n      isResizable: true,\n      minWidth: 80,\n      tenants: [TenantTypesEnum.MVP],\n      onRender: (item: IApplicationListRowData): React.ReactElement => {\n        return formatScoreColumn(item.technologyArea1, item.score1);\n      },\n    },\n    {\n      key: \"technologyArea1StatusReason\",\n      name: \"Reason (TA1)\",\n      ariaLabel: \"Reason of Technology Area 1\",\n      fieldName: \"technologyArea1StatusReason\",\n      isResizable: true,\n      minWidth: 90,\n      tenants: [TenantTypesEnum.MVP],\n    },\n    {\n      key: \"assignedTo1\",\n      name: \"Assigned To (TA1)\",\n      ariaLabel: \"Email of user who is assigned to review this application\",\n      fieldName: \"assignedTo1\",\n      isResizable: true,\n      minWidth: 150,\n      tenants: [TenantTypesEnum.MVP],\n    },\n    {\n      key: \"awardCategory1\",\n      name: \"Award Category 1\",\n      ariaLabel: \"Award Category 1\",\n      fieldName: \"awardCategory1\",\n      minWidth: 200,\n      isResizable: true,\n      tenants: [TenantTypesEnum.MVP],\n    },\n    {\n      key: \"technologyArea2\",\n      name: \"Technology Area 2\",\n      ariaLabel: \"Technology Area 2\",\n      fieldName: \"technologyArea2\",\n      minWidth: 180,\n      isResizable: true,\n      tenants: [TenantTypesEnum.MVP],\n    },\n    {\n      key: \"technologyArea2Status\",\n      name: \"Status (TA2)\",\n      ariaLabel: \"Status of Technology Area 2\",\n      fieldName: \"technologyArea2Status\",\n      isResizable: true,\n      minWidth: 80,\n      tenants: [TenantTypesEnum.MVP],\n    },\n    {\n      key: \"score2\",\n      name: \"Score (TA2)\",\n      ariaLabel: \"Score of user who is assigned to review this application\",\n      fieldName: \"score2\",\n      isResizable: true,\n      minWidth: 80,\n      tenants: [TenantTypesEnum.MVP],\n      onRender: (item: IApplicationListRowData): React.ReactElement => {\n        return formatScoreColumn(item.technologyArea2, item.score2);\n      },\n    },\n    {\n      key: \"technologyArea2StatusReason\",\n      name: \"Reason (TA2)\",\n      ariaLabel: \"Reason of Technology Area 2\",\n      fieldName: \"technologyArea2StatusReason\",\n      isResizable: true,\n      minWidth: 90,\n      tenants: [TenantTypesEnum.MVP],\n    },\n    {\n      key: \"assignedTo2\",\n      name: \"Assigned To (TA2)\",\n      ariaLabel: \"Email of user who is assigned to review this application\",\n      fieldName: \"assignedTo2\",\n      isResizable: true,\n      minWidth: 150,\n      tenants: [TenantTypesEnum.MVP],\n    },\n    {\n      key: \"awardCategory2\",\n      name: \"Award Category 2\",\n      ariaLabel: \"Award Category 2\",\n      fieldName: \"awardCategory2\",\n      minWidth: 200,\n      isResizable: true,\n      tenants: [TenantTypesEnum.MVP],\n    },\n    {\n      key: \"flagReason\",\n      name: \"Reason for Flag\",\n      ariaLabel: \"Reason for Flag\",\n      fieldName: \"flagReason\",\n      isResizable: true,\n      minWidth: 150,\n      tenants: [TenantTypesEnum.MVP],\n    },\n    {\n      key: \"countryRegion\",\n      name: \"Country\",\n      ariaLabel: \"Country\",\n      fieldName: \"countryRegion\",\n      isResizable: true,\n      minWidth: 70,\n      maxWidth: 100,\n      tenants: [TenantTypesEnum.MLSA, TenantTypesEnum.RD],\n    },\n    {\n      key: \"countryRegion\",\n      name: \"Country\",\n      ariaLabel: \"Country\",\n      fieldName: \"countryRegion\",\n      isResizable: true,\n      minWidth: 70,\n      maxWidth: 100,\n      tenants: [TenantTypesEnum.MVP],\n    },\n    {\n      key: \"applicationType\",\n      name: \"Application Type\",\n      ariaLabel: \"Applicant's application type\",\n      fieldName: \"applicationType\",\n      isResizable: true,\n      minWidth: 100,\n      maxWidth: 120,\n      tenants: [TenantTypesEnum.MVP],\n    },\n    {\n      key: \"cohort\",\n      name: \"Cohort\",\n      ariaLabel: \"Cohort\",\n      fieldName: \"cohort\",\n      isResizable: true,\n      minWidth: 55,\n      maxWidth: 100,\n      tenants: [TenantTypesEnum.MVP],\n    },\n    {\n      key: \"scoreDueInDays\",\n      name: \"Score Due in (days)\",\n      ariaLabel: \"Score Due in (days)\",\n      fieldName: \"scoreDueInDays\",\n      isResizable: true,\n      minWidth: 70,\n      maxWidth: 100,\n      tenants: [TenantTypesEnum.MVP],\n    },\n    {\n      key: \"submittedOn\",\n      name: \"Submitted on\",\n      ariaLabel: \"The date application was submitted for review\",\n      fieldName: \"submittedOn\",\n      isResizable: true,\n      minWidth: 70,\n      maxWidth: 100,\n      tenants: [TenantTypesEnum.MLSA, TenantTypesEnum.MVP, TenantTypesEnum.RD],\n      onRender: function formattedDate(item: IApplicationListRowData): React.ReactElement {\n        // If DateSubmitted is null, will get empty string from backend.\n        // In this case, we just leave it as blank.\n        return <>{item.submittedOn === \"\" ? \"\" : formatDateEu(new Date(item.submittedOn))}</>;\n      },\n    },\n    {\n      key: \"industryFocus\",\n      name: \"Industry Focus\",\n      ariaLabel: \"Industry Focus\",\n      fieldName: \"industryFocus\",\n      isResizable: true,\n      minWidth: 70,\n      maxWidth: 150,\n      tenants: [TenantTypesEnum.RD],\n    },\n    {\n      key: \"technicalExpertise\",\n      name: \"Technology Expertise\",\n      ariaLabel: \"Technology Expertise\",\n      fieldName: \"technicalExpertise\",\n      isResizable: true,\n      minWidth: 70,\n      maxWidth: 150,\n      tenants: [TenantTypesEnum.RD],\n    },\n    {\n      key: \"applicationStatus\",\n      name: \"Application Status\",\n      ariaLabel: \"Applicant's application status\",\n      fieldName: \"applicationStatus\",\n      isResizable: true,\n      minWidth: 110,\n      maxWidth: 130,\n      tenants: [TenantTypesEnum.MLSA, TenantTypesEnum.RD],\n      onRender: (item: IApplicationListRowData): React.ReactElement => {\n        return formatStatusColumn(item.applicationStatus);\n      },\n    },\n    {\n      key: \"reviewStatus\",\n      name: \"Review\",\n      ariaLabel: \"Applicant's review status\",\n      fieldName: \"reviewStatus\",\n      isResizable: true,\n      minWidth: 80,\n      maxWidth: 100,\n      tenants: [TenantTypesEnum.MLSA, TenantTypesEnum.RD],\n      onRender: (item: IApplicationListRowData): React.ReactElement => {\n        return formatReviewStatus(item.reviewStatus);\n      },\n    },\n    {\n      key: \"modifiedDate\",\n      name: \"Modified Date\",\n      ariaLabel: \"The date on which the application was last modified or reviewed\",\n      fieldName: \"modifiedDate\",\n      isResizable: true,\n      minWidth: 80,\n      maxWidth: 100,\n      tenants: [TenantTypesEnum.MLSA, TenantTypesEnum.RD],\n      onRender: function formattedDate(item: IApplicationListRowData): React.ReactElement {\n        const date = new Date(item.submittedOn);\n        return <>{formatDateEu(date)}</>;\n      },\n    },\n    {\n      key: \"modifiedBy\",\n      name: \"Modified By\",\n      ariaLabel: \"Email of user who last modified this application\",\n      fieldName: \"modifiedBy\",\n      isResizable: true,\n      minWidth: 80,\n      maxWidth: 100,\n      tenants: [TenantTypesEnum.MLSA, TenantTypesEnum.RD],\n    },\n  ];\n\n  const [columns, setColumns] = useState<IColumn[]>([]);\n\n  const onApplicationSelected = (applicationId: number): void => {\n    /**\n     * Open application links in new tab with respective Application Id\n     */\n    window.open(`/mvp/applications/${applicationId}`, \"_blank\");\n  };\n\n  const onClickEvent = (application: IApplicationListRowData): void => {\n    switch (tenant) {\n      case TenantTypesEnum.MVP:\n        actions.getSelectedApplicationById(application.id, tenant);\n        onApplicationSelected(application.id);\n        break;\n      case TenantTypesEnum.MLSA:\n      case TenantTypesEnum.RD:\n      default:\n        actions.updateSelectedApplicationEmail(application.email);\n        setIsModalOpen(true);\n        break;\n    }\n  };\n\n  const onModalClose = (): void => {\n    setIsModalOpen(false);\n  };\n\n  const onRenderColumn = (\n    item: IApplicationListRowData,\n    index?: number,\n    column?: IColumn\n  ): React.ReactElement => {\n    const fieldContent = item[column?.fieldName as keyof IApplicationListRowData];\n    switch (column?.key) {\n      case \"id\":\n        return <StyledSpan>{fieldContent}</StyledSpan>;\n      case \"industryFocus\":\n        return <span>{(fieldContent as string[]).join(\", \")}</span>;\n      case \"technicalExpertise\":\n        return <span>{(fieldContent as string[]).join(\", \")}</span>;\n      default:\n        return <span>{fieldContent}</span>;\n    }\n  };\n\n  const onRenderRow = (props?: IDetailsRowProps, defaultRender?: any): React.ReactElement => {\n    const selectedApplication = props && (props.item as IApplicationListRowData);\n\n    // Allows for calculated values to be included in the item data rendered by list\n    const calculatedItemProps = {\n      ...selectedApplication,\n      ...{},\n    };\n\n    return defaultRender({\n      ...props,\n      item: { ...calculatedItemProps },\n      onClick: () => !!selectedApplication && onClickEvent(selectedApplication),\n    });\n  };\n\n  const onSortingUpdate = (sortColumn?: string, sortDescending?: boolean): void => {\n    actions.applicationSearchSortingUpdate(sortColumn, sortDescending);\n  };\n\n  const onColumnClickHandler = (ev: React.MouseEvent<HTMLElement>, column: IColumn): void => {\n    applicationColumn.forEach((col: IColumn) => {\n      if (col.key == column.key) {\n        const isSortedDescending = !col.isSortedDescending;\n        col.isSortedDescending = isSortedDescending;\n        col.isSorted = true;\n        onSortingUpdate(col.fieldName, isSortedDescending);\n      } else {\n        col.isSorted = false;\n        col.isSortedDescending = true;\n      }\n    });\n  };\n\n  useEffect(() => {\n    const newColumns: IColumn[] = [];\n    const sortingColumns = [\n      SortingColumns.FirstName,\n      SortingColumns.LastName,\n      SortingColumns.Country,\n      \"awardCategory1\",\n      \"technologyArea1\",\n      \"awardCategory2\",\n      \"technologyArea2\",\n      \"score1\",\n      \"score2\",\n    ];\n    applicationColumn?.forEach((col: IColumn) => {\n      if (sortingColumns.filter((c) => c === col.fieldName).length > 0) {\n        col.onColumnClick = onColumnClickHandler;\n      }\n      newColumns.push(col as IColumn);\n    });\n    setColumns(\n      newColumns\n        .filter((x: ApplicationColumn) => x.tenants?.includes(tenant))\n        .map((x) => x as IColumn)\n    );\n  }, []);\n\n  if (isLoadingApplications) {\n    return <Spinner size={SpinnerSize.large} styles={spinnerStyles} />;\n  } else if (loadApplicationsError !== \"\") {\n    return <div>{loadApplicationsError}</div>;\n  }\n\n  return (\n    <>\n      <DetailsList\n        items={data}\n        columns={columns}\n        selectionMode={SelectionMode.none}\n        getKey={(item: any): string => `${(item as IApplication).id}`}\n        setKey=\"none\"\n        layoutMode={DetailsListLayoutMode.fixedColumns}\n        isHeaderVisible={true}\n        onRenderRow={onRenderRow}\n        onRenderItemColumn={onRenderColumn}\n        enterModalSelectionOnTouch={true}\n        styles={detailListStyles}\n      />\n      <PaginationRow>\n        <Pagination\n          total={filteredCount}\n          onChange={(page) => actions.updateCurrentPage(page)}\n          showTitle={false}\n          current={currentPage}\n          prevIcon={ChevronIcon(\"ChevronLeft\")}\n          nextIcon={ChevronIcon(\"ChevronRight\")}\n          pageSize={pageSize}\n          showSizeChanger\n        />\n        <Dropdown\n          options={[\n            { key: 16, text: \"Show 16 results\" },\n            { key: 32, text: \"Show 32 results\" },\n            { key: 48, text: \"Show 48 results\" },\n          ]}\n          onChange={(_e, op): void => {\n            actions.updatePageSize(op?.key as number);\n          }}\n          selectedKey={pageSize}\n          className=\"pagination-dropdown\"\n          title=\"Page Size Dropdown\"\n        />\n      </PaginationRow>\n      <Modal\n        titleAriaId=\"title\"\n        isOpen={isModalOpen}\n        isBlocking={false}\n        containerClassName={modalStyles}\n        topOffsetFixed\n      >\n        <ModalHeader>\n          <Text block styles={modalHeaderStyles}>\n            Application Details\n          </Text>\n          <IconButton\n            styles={iconButtonStyles}\n            iconProps={{ iconName: \"Cancel\" }}\n            ariaLabel=\"Close popup modal\"\n            onClick={onModalClose}\n          />\n        </ModalHeader>\n        <ModalContent>\n          <ApplicationDetails closeModal={onModalClose} />\n        </ModalContent>\n      </Modal>\n    </>\n  );\n};\n\n/**\n * Maps StudentsContainer to redux state\n * @param {AppState} state The App state.\n */\nconst mapStateToProps = (state: AppState, ownProps: IApplicationsListProps & any) => ({\n  data: ownProps.data,\n  isLoadingApplications: isLoadingApplications(state.applicationState),\n  loadApplicationsError: getLoadApplicationsError(state.applicationState),\n  formSubmittingComplete: false,\n  currentPage: getCurrentPage(state.applicationState),\n  pageSize: getPageSize(state.applicationState),\n  searchText: getSearchText(state.applicationState),\n});\n\n/**\n * Maps Component's dispatch/handler props to redux state\n * @param {Dispatch} dispatch The dispatch.\n */\nconst mapDispatchToProps = (\n  dispatch: Dispatch<\n    ApplicationActions.ApplicationActionTypes | ActivitiesEventsActions.ActivitiesEventsActionTypes\n  >\n) => ({\n  actions: {\n    updateCurrentPage: bindActionCreators(ApplicationActions.updateCurrentPage, dispatch),\n    updatePageSize: bindActionCreators(ApplicationActions.updatePageSize, dispatch), //Create new application action and bind new application\n    updateSelectedApplicationEmail: bindActionCreators(\n      ApplicationActions.updateSelectedApplicationEmail,\n      dispatch\n    ),\n    getSelectedApplicationById: bindActionCreators(\n      ActivitiesEventsActions.getUserProfileBySelectedApplicationId,\n      dispatch\n    ),\n    applicationSearchSortingUpdate: bindActionCreators(\n      ApplicationActions.applicationSearchSortingUpdate,\n      dispatch\n    ),\n  },\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(ApplicationsList);\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { blobTypeStream, download, href } from \"../Constants/DownloadConstants\";\n\nexport function constructCsvDownload(file: string, fileName: string): void {\n  const blob = new Blob([file], { type: blobTypeStream });\n  const url = URL.createObjectURL(blob);\n  const downloadLink = document.createElement(\"a\");\n\n  downloadLink.setAttribute(href, url);\n  downloadLink.setAttribute(download, fileName);\n  document.body.appendChild(downloadLink);\n\n  downloadLink.click();\n}\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\nexport const blobTypeStream = \"application/octet-stream\";\nexport const blobTypeCsv = \"text/csv\";\nexport const download = \"download\";\nexport const href = \"href\";\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { useCallback } from \"react\";\nimport LZString from \"lz-string\";\nimport { IFilterValue } from \"Interfaces/IFilterValue\";\nimport * as ApplicationConstants from \"Constants/ApplicationConstants\";\n\n/**\n * Hook to compress and decompress the data using LZString.\n * @returns encode and decode functions to compress and decompress the data\n */\nexport const useLZString = () => {\n  const encode = useCallback((data: any): string => {\n    return LZString.compressToEncodedURIComponent(JSON.stringify(data));\n  }, []);\n\n  const decode = useCallback((encodedData: string): any => {\n    const decompressedText = LZString.decompressFromEncodedURIComponent(encodedData);\n    return decompressedText ? JSON.parse(decompressedText) : null;\n  }, []);\n\n  return { encode, decode };\n};\n\n/**\n * Check the length of the query parameter\n * @param queryParam string to validate\n * @returns boolean value\n */\nexport const validUrlLength = (queryParam: string): boolean => {\n  const isValid =\n    queryParam && queryParam.length <= ApplicationConstants.maxURLLength ? true : false;\n  return isValid;\n};\n\n/**\n * Remove the query parameter from the MVP application URL.\n * Replace the URL with the new URL without the query parameter.\n * @param param to remove from the URL\n */\nexport const removeQueryParams = (param: string) => {\n  const urlSearchParams = new URLSearchParams(window.location.search);\n  urlSearchParams.delete(param);\n  window.history.replaceState({}, \"\", window.location.pathname);\n};\n\n/**\n * Helper function to add filter values to the array\n * @param urlFilterValues the array to add filter values to\n * @param fieldName the field name of the filter\n * @param values the values to add\n */\nconst addFilterValues = (urlFilterValues: IFilterValue[], fieldName: string, values: any[]) => {\n  values.forEach((value: any) => {\n    urlFilterValues.push({ fieldName, value });\n  });\n};\n\n/**\n * Only for MVPs\n * Create the filter values from the query parameters.\n * @param request the query parameters\n * @returns the filter values\n */\nexport const getFiltersFromQueryParams = (request: any): IFilterValue[] => {\n  const urlFilterValues: IFilterValue[] = [];\n\n  // Application Type\n  if (request.applicationType) {\n    urlFilterValues.push({\n      fieldName: ApplicationConstants.APPLICATION_TYPE,\n      value: request.applicationType,\n    });\n  }\n\n  // Application Status\n  if (request.applicationStatusList?.length) {\n    addFilterValues(\n      urlFilterValues,\n      ApplicationConstants.APPLICATION_STATUS,\n      request.applicationStatusList\n    );\n  }\n\n  // Review Status\n  if (request.reviewStatusList?.length) {\n    addFilterValues(urlFilterValues, ApplicationConstants.REVIEW_STATUS, request.reviewStatusList);\n  }\n\n  // Cohort\n  if (request.cohort) {\n    urlFilterValues.push({\n      fieldName: ApplicationConstants.COHORT,\n      value: request.cohort,\n    });\n  } else {\n    urlFilterValues.push({\n      fieldName: ApplicationConstants.COHORT,\n      value: ApplicationConstants.ANY,\n    });\n  }\n\n  // Assigned To\n  if (request.assignedToMe) {\n    urlFilterValues.push({\n      fieldName: ApplicationConstants.ASSIGNED_TO,\n      value: request.assignedToMe ? ApplicationConstants.ME : ApplicationConstants.ANY,\n    });\n  }\n\n  // Award Category\n  if (request.technologyAreaGroupList?.length) {\n    addFilterValues(\n      urlFilterValues,\n      ApplicationConstants.TECHNOLOGY_AREA_GROUP,\n      request.technologyAreaGroupList\n    );\n  }\n\n  // Technology Area\n  if (request.technologyAreaList?.length) {\n    addFilterValues(\n      urlFilterValues,\n      ApplicationConstants.TECHNOLOGY_AREA,\n      request.technologyAreaList\n    );\n  }\n\n  // TA Status\n  if (request.technologyAreaStatusList?.length) {\n    addFilterValues(\n      urlFilterValues,\n      ApplicationConstants.TECHNOLOGY_AREA_STATUS,\n      request.technologyAreaStatusList\n    );\n  }\n\n  // TA Score\n  if (request.technologyAreaScoreList?.length) {\n    addFilterValues(\n      urlFilterValues,\n      ApplicationConstants.TECHNOLOGY_AREA_SCORE,\n      request.technologyAreaScoreList\n    );\n  }\n\n  // TA Reason\n  if (request.technologyAreaStatusReasonList?.length) {\n    addFilterValues(\n      urlFilterValues,\n      ApplicationConstants.TECHNOLOGY_AREA_STATUS_REASON,\n      request.technologyAreaStatusReasonList\n    );\n  }\n\n  // Reason for Flag\n  if (request.flagReason?.length) {\n    addFilterValues(urlFilterValues, ApplicationConstants.FLAG_REASON, request.flagReason);\n  }\n\n  // CPM List\n  if (request.availableCpmList?.length) {\n    addFilterValues(\n      urlFilterValues,\n      ApplicationConstants.AVAILABLE_CPM_LIST,\n      request.availableCpmList\n    );\n  }\n\n  // Country\n  if (request.countryRegionList?.length) {\n    addFilterValues(\n      urlFilterValues,\n      ApplicationConstants.APPLICATION_COUNTRY_REGION,\n      request.countryRegionList\n    );\n  }\n\n  // State/Province\n  if (request.stateProvinceList?.length) {\n    addFilterValues(\n      urlFilterValues,\n      ApplicationConstants.APPLICATION_STATE_PROVINCE,\n      request.stateProvinceList\n    );\n  }\n\n  // Grant Annual Exception\n  if (request.annualExceptionList?.length) {\n    addFilterValues(\n      urlFilterValues,\n      ApplicationConstants.GRANT_ANNUAL_EXCEPTION,\n      request.annualExceptionList\n    );\n  }\n\n  return urlFilterValues;\n};\n\n/**\n * Only for MVPs\n * Create the request from selected filters to append in query parameters.\n * @param searchValue the search value, empty by default\n * @param selectedApplicationsFilterValues the selected filter values\n * @param page the page number by default 1\n * @param pageSize the page size by default 16\n * @param adminEmail the admin email\n * @param applicationType the application type\n * @param sortColumn the sort column by default empty\n * @param sortDescending  the sort descending by default false\n * @returns\n */\nexport const setFilterToQueryParams = (\n  searchValue,\n  selectedApplicationsFilterValues,\n  page,\n  pageSize,\n  adminEmail,\n  applicationType,\n  sortColumn,\n  sortDescending\n): {} => {\n  const requestBody = {\n    applicationStatusList: [],\n    countryRegionList: [],\n    pageIndex: page,\n    pageSize: pageSize,\n    searchKey: searchValue,\n    stateProvinceList: [],\n    annualExceptionList: [],\n    applicationType: applicationType,\n    requestorEmailAddress: adminEmail,\n    technologyAreaList: [],\n    technologyAreaGroupList: [],\n    assignedToMe: false,\n    technologyAreaScoreList: [],\n    technologyAreaStatusList: [],\n    technologyAreaStatusReasonList: [],\n    flagReason: [],\n    cohort: undefined,\n    reviewStatusList: [],\n    availableCpmList: [],\n    sortColumn: sortColumn,\n    sortDescending: sortDescending,\n  } as any;\n\n  selectedApplicationsFilterValues.forEach(function (item) {\n    switch (item.fieldName) {\n      case ApplicationConstants.APPLICATION_STATUS:\n        requestBody.applicationStatusList.push(item.value);\n        break;\n      case ApplicationConstants.APPLICATION_COUNTRY_REGION:\n        requestBody.countryRegionList.push(item.value);\n        break;\n      case ApplicationConstants.APPLICATION_STATE_PROVINCE:\n        requestBody.stateProvinceList.push(item.value);\n        break;\n      case ApplicationConstants.GRANT_ANNUAL_EXCEPTION:\n        requestBody.annualExceptionList.push(item.value);\n        break;\n      case ApplicationConstants.TECHNOLOGY_AREA_GROUP:\n        requestBody.technologyAreaGroupList.push(item.value);\n        break;\n      case ApplicationConstants.TECHNOLOGY_AREA:\n        requestBody.technologyAreaList.push(item.value);\n        break;\n      case ApplicationConstants.ASSIGNED_TO:\n        requestBody.assignedToMe = item.value === ApplicationConstants.ME;\n        break;\n      case ApplicationConstants.TECHNOLOGY_AREA_SCORE:\n        requestBody.technologyAreaScoreList.push(item.value);\n        break;\n      case ApplicationConstants.TECHNOLOGY_AREA_STATUS:\n        requestBody.technologyAreaStatusList.push(item.value);\n        break;\n      case ApplicationConstants.TECHNOLOGY_AREA_STATUS_REASON:\n        requestBody.technologyAreaStatusReasonList.push(item.value);\n        break;\n      case ApplicationConstants.FLAG_REASON:\n        requestBody.flagReason.push(item.value);\n        break;\n      case ApplicationConstants.COHORT:\n        if (item.value !== ApplicationConstants.ANY) {\n          requestBody.cohort = item.value;\n        }\n        break;\n      case ApplicationConstants.REVIEW_STATUS:\n        if (item.value !== ApplicationConstants.ANY) {\n          requestBody.reviewStatusList.push(item.value);\n        }\n        break;\n      case ApplicationConstants.AVAILABLE_CPM_LIST:\n        if (item.value !== ApplicationConstants.ANY) {\n          requestBody.availableCpmList.push(item.value);\n        }\n      default:\n        return;\n    }\n  });\n\n  return requestBody;\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport styled from \"styled-components\";\n\n/**\n * Flex Row styling\n */\nexport const FlexWrapper = styled.div`\n  display: flex;\n  align-items: center;\n\n  button {\n    margin: 0;\n  }\n\n  p {\n    margin: 0;\n    margin-right: 20px;\n  }\n`;\n\n/**\n * Error styling\n */\nexport const ErrorWrapper = styled.span`\n  margin-left: 20px;\n  color: red;\n  font-size: 14px;\n`;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { useEffect, useState, ReactElement } from \"react\";\n\nimport { connect, useDispatch } from \"react-redux\";\nimport { bindActionCreators, Dispatch } from \"redux\";\n\nimport { SearchBox, Stack } from \"office-ui-fabric-react/lib\";\n\nimport { PrimaryButton } from \"@fluentui/react/lib/Button\";\n\nimport * as ApplicationActions from \"Dataflows/Application/ApplicationAction\";\nimport * as CommonDataActions from \"Dataflows/CommonData/CommonDataAction\";\n\nimport { useAuth } from \"Authentication/AuthProvider\";\nimport ApplicationsList from \"Components/ApplicationsList/ApplicationsList\";\nimport ListCounts from \"Components/Common/ListCounts/ListCounts\";\nimport { Title } from \"Components/Common/Results/Result.styles\";\nimport {\n  defaultFilterValues,\n  defaultListingPageSize,\n  mvpApplicationFilterFields,\n  rdApplicationFilterFields,\n  studentsApplicationFilterFields,\n  ApplicationCohortEnum,\n  ApplicationTypeEnum,\n  APPLICATION_TYPE,\n  TechnologyAreaStatusEnum,\n  urlLengthError,\n  urlInvalidError,\n} from \"Constants/ApplicationConstants\";\nimport { FilterValueFieldNames } from \"Constants/FilterFields\";\nimport { OperationStatus } from \"Constants/OperationStatus\";\nimport { RolesEnum } from \"Constants/RolesPermissionsConstants\";\nimport { TenantTypesEnum } from \"Constants/TenantTypes\";\nimport {\n  getApplications,\n  getApplicationsFilterValues,\n  getCurrentPage,\n  getCurrentTenant,\n  getFileDownloadData,\n  getFileDownloadStatus,\n  getFilteredCount,\n  getPageSize,\n  getSearchText,\n  getSortColumn,\n  getSortDescending,\n  isLoadingApplications,\n} from \"Dataflows/Application/ApplicationSelector\";\nimport { AppState } from \"Dataflows/Reducers\";\nimport { getTechnologyAreas } from \"Dataflows/TechnologyArea/TechnologyAreaAction\";\nimport { IFilterField } from \"Interfaces/IFilterField\";\nimport { IFilterValue } from \"Interfaces/IFilterValue\";\nimport { constructCsvDownload } from \"Utility/DownloadHelper\";\nimport { getTenant } from \"Utility/Utils\";\nimport {\n  setFilterToQueryParams,\n  getFiltersFromQueryParams,\n  removeQueryParams,\n  useLZString,\n  validUrlLength,\n} from \"Utility/QueryParamHelper\";\nimport {\n  buttonStackTokens,\n  containerStackStyles,\n  filterButtonStyles,\n  listStackStyles,\n  searchBoxStyles,\n  tableStackStyles,\n  PaddedFlexRow,\n} from \"../Common/CommonContainer.styles\";\nimport SideBarContainer from \"../SideBarContainer/SideBarContainer\";\nimport { FlexWrapper, ErrorWrapper } from \"./ApplicationsContainer.styles\";\nimport { IApplicationsContainerProps } from \"./IApplicationsContainerProps\";\n\n/**\n * Applications Container element that displays side bar filtering and result listing.\n * @FunctionComponent\n * @param {IApplicationsContainerProps} props The applications container props.\n * @returns {ReactElement<IApplicationsContainerProps>} The applications component.\n */\nconst ApplicationsContainer = (props: IApplicationsContainerProps): ReactElement => {\n  const {\n    selectedApplicationsFilterValues,\n    applications,\n    isLoadingApplications,\n    fileDownloadStatus,\n    fileDownloadData,\n    currentPage,\n    pageSize,\n    filteredCount,\n    tenant,\n    currentTenant,\n    sortColumn,\n    sortDescending,\n    actions: {\n      addApplicationsFilterValue,\n      downloadApplicationsToCSV,\n      cleanDownloadCSV,\n      removeApplicationsFilterValue,\n      removeApplicationsProvinceFilterValue,\n      searchApplications,\n      updateApplicationsFilterValue,\n      resetApplications,\n    },\n  } = props;\n\n  const [searchText, setSearchText] = useState(props.searchText);\n\n  const { account, hasRole, adminPermissions } = useAuth();\n  const adminEmail = account?.userName;\n  const dispatch = useDispatch();\n  const canDownload = tenant === TenantTypesEnum.MLSA || tenant === TenantTypesEnum.MVP;\n\n  const { encode, decode } = useLZString();\n  const [urlError, setUrlError] = useState(\"\");\n  const getQueryParam = new URLSearchParams(window.location.search);\n  const queryParamValue = getQueryParam.get(\"search\");\n\n  // Reset URL with error message\n  const resetUrlWithError = (showError = false) => {\n    setUrlError(\"\");\n    removeQueryParams(\"search\");\n    if (showError) setUrlError(urlLengthError);\n  };\n\n  // Get Query Params from URL, check aginst max-limit and decode\n  const getQueryParamsRequest = (): any => {\n    const response: any = { validUrl: true, request: null };\n    if (queryParamValue && !validUrlLength(queryParamValue)) {\n      response.validUrl = false;\n    } else {\n      response.request = decode(queryParamValue || \"\");\n    }\n    return response;\n  };\n\n  //Set the valid Query Params to URL and return true if successful.\n  const setQueryParamsRequest = (requestBody: any): boolean => {\n    const compressedText = encode(requestBody);\n    if (compressedText && !validUrlLength(compressedText)) {\n      resetUrlWithError(true);\n      return false;\n    }\n    getQueryParam.set(\"search\", compressedText);\n    window.history.replaceState({}, \"\", `${window.location.pathname}?${getQueryParam}`);\n    return true;\n  };\n\n  // Role based default filters only for MVP\n  const addRoleBasedDefaultFilters = (defaultFilters: IFilterValue[]) => {\n    const cohortFilter = {\n      fieldName: FilterValueFieldNames.COHORT,\n      value: ApplicationCohortEnum.Current,\n    };\n\n    addApplicationsFilterValue(cohortFilter);\n    defaultFilters.push(cohortFilter);\n\n    if (hasRole(RolesEnum.MVP_BUSINESS_GROUP)) {\n      const technologyAreaStatusInvitedPending = {\n        fieldName: FilterValueFieldNames.TECHNOLOGY_AREA_STATUS,\n        value: TechnologyAreaStatusEnum.InvitedPending,\n      };\n      addApplicationsFilterValue(technologyAreaStatusInvitedPending);\n      defaultFilters.push(technologyAreaStatusInvitedPending);\n\n      const technologyAreaStatusDeclinedPending = {\n        fieldName: FilterValueFieldNames.TECHNOLOGY_AREA_STATUS,\n        value: TechnologyAreaStatusEnum.DeclinedPending,\n      };\n      addApplicationsFilterValue(technologyAreaStatusDeclinedPending);\n      defaultFilters.push(technologyAreaStatusDeclinedPending);\n    }\n\n    if (hasRole(RolesEnum.MVP_EXECUTIVE) || hasRole(RolesEnum.MVP_TECH_AREA_VALIDATOR)) {\n      adminPermissions?.adminRolePermissions\n        .find((arp) => arp.tenant === TenantTypesEnum.MVP && arp.awardCategories?.length > 0)\n        ?.awardCategories.forEach((ac) => {\n          const awardCategoryFilter = {\n            fieldName: FilterValueFieldNames.TECHNOLOGY_AREA_GROUP,\n            value: ac,\n          };\n\n          addApplicationsFilterValue(awardCategoryFilter);\n          defaultFilters.push(awardCategoryFilter);\n        });\n    }\n  };\n\n  /**\n   * Call search function for entered text.\n   * @method\n   * @param {string} searchValue The search text.\n   * @param {IFilterValue[]} selectedApplicationsFilterValues The filter values.\n   * @param {number} page The page number.\n   * @returns {void}\n   */\n  const handleSearch = (\n    createQueryParams: boolean,\n    searchValue: string,\n    selectedApplicationsFilterValues: IFilterValue[],\n    page: number,\n    pageSize: number,\n    sortColumn?: string,\n    sortDescending?: boolean\n  ): void => {\n    let applicationType = ApplicationTypeEnum.ANY;\n    let isValidRequestURL = true;\n\n    // Don't filter by application type for MLSA\n    if (tenant === TenantTypesEnum.MLSA) {\n      applicationType = ApplicationTypeEnum.ANY;\n    } else {\n      const selectedApplicationTypeFilter = selectedApplicationsFilterValues.find(\n        (value) => value.fieldName === APPLICATION_TYPE\n      )?.value as ApplicationTypeEnum | undefined;\n      applicationType = selectedApplicationTypeFilter || ApplicationTypeEnum.ANY;\n    }\n\n    // Add query parameters to the URL, specifically for the MVP tenant\n    if (tenant === TenantTypesEnum.MVP && createQueryParams) {\n      setUrlError(\"\");\n      const requestBody = setFilterToQueryParams(\n        searchValue,\n        selectedApplicationsFilterValues,\n        page,\n        pageSize,\n        adminEmail,\n        applicationType,\n        sortColumn,\n        sortDescending\n      );\n      isValidRequestURL = setQueryParamsRequest(requestBody);\n    }\n\n    if (isValidRequestURL) {\n      searchApplications(\n        searchValue,\n        selectedApplicationsFilterValues,\n        page,\n        pageSize,\n        adminEmail,\n        applicationType,\n        tenant,\n        sortColumn,\n        sortDescending\n      );\n    }\n  };\n\n  /**\n   * Call to reset the filter values.\n   * @method\n   */\n  const resetFilterValues = (isResetButtonClicked = false): void => {\n    resetApplications();\n    let defaultFilters = [...defaultFilterValues];\n\n    // Set Conditional Default filters based on the current tenant and user roles\n    if (tenant === TenantTypesEnum.MVP) {\n      if (queryParamValue) {\n        if (isResetButtonClicked) {\n          resetUrlWithError();\n          addRoleBasedDefaultFilters(defaultFilters);\n        } else {\n          const requestPayload = getQueryParamsRequest();\n          if (requestPayload.validUrl && requestPayload.request) {\n            defaultFilters = getFiltersFromQueryParams(requestPayload.request);\n          } else {\n            // when query params are invalid, reset to default filters\n            resetUrlWithError();\n            alert(urlInvalidError);\n          }\n        }\n      } else {\n        resetUrlWithError();\n        addRoleBasedDefaultFilters(defaultFilters);\n      }\n    }\n\n    setSearchText(\"\");\n    handleSearch(false, \"\", defaultFilters, 1, defaultListingPageSize);\n  };\n\n  useEffect(() => {\n    if (isLoadingApplications) return;\n\n    if (tenant !== currentTenant) {\n      resetFilterValues();\n      return;\n    }\n\n    handleSearch(\n      false,\n      searchText,\n      selectedApplicationsFilterValues,\n      currentPage,\n      pageSize,\n      sortColumn,\n      sortDescending\n    );\n  }, [currentPage, pageSize, sortColumn, sortDescending]);\n\n  const downloadCSVFile = (file: string): void => {\n    constructCsvDownload(\n      file,\n      `${getTenant(tenant).toLowerCase()}_applications_${new Date().toLocaleString()}.csv`\n    );\n  };\n\n  useEffect(() => {\n    if (fileDownloadStatus === OperationStatus.Succeeded && !!fileDownloadData) {\n      downloadCSVFile(fileDownloadData);\n      cleanDownloadCSV();\n    }\n  }, [fileDownloadStatus, fileDownloadData]);\n\n  /**\n   * Call to handle the download to csv action.\n   */\n  const handleDownloadToCSV = (): void => {\n    downloadApplicationsToCSV(searchText, selectedApplicationsFilterValues, tenant);\n  };\n\n  const onClear = (_: any): void => {\n    handleSearch(false, \"\", selectedApplicationsFilterValues, 1, pageSize);\n  };\n\n  useEffect(() => {\n    if (tenant === TenantTypesEnum.MVP) {\n      dispatch(getTechnologyAreas(TenantTypesEnum.MVP));\n      dispatch(CommonDataActions.loadCommonData());\n    }\n  }, []);\n\n  const getApplicationsFilterValues = (): IFilterField[] => {\n    switch (tenant) {\n      case TenantTypesEnum.MLSA:\n        return studentsApplicationFilterFields;\n      case TenantTypesEnum.MVP:\n        // If the admin only has the Executive role for the MVP Tenant, don't let them change their tech area groups / award cateogires\n        if (\n          hasRole(RolesEnum.MVP_EXECUTIVE) &&\n          adminPermissions?.adminRolePermissions\n            .filter((p) => p.tenant === TenantTypesEnum.MVP)\n            .every((arp) => arp.role === RolesEnum.MVP_EXECUTIVE)\n        ) {\n          return mvpApplicationFilterFields.filter(\n            (x) => x.key !== FilterValueFieldNames.TECHNOLOGY_AREA_GROUP\n          );\n        }\n        return mvpApplicationFilterFields;\n      case TenantTypesEnum.RD:\n        return rdApplicationFilterFields;\n      default:\n        return [];\n    }\n  };\n\n  return (\n    <Stack horizontal styles={containerStackStyles}>\n      <Stack.Item disableShrink>\n        <SideBarContainer\n          addFilterValue={addApplicationsFilterValue}\n          removeFilterValue={removeApplicationsFilterValue}\n          updateFilterValue={updateApplicationsFilterValue}\n          removeFilterProvinceValue={removeApplicationsProvinceFilterValue}\n          selectedFilterValues={selectedApplicationsFilterValues}\n          filterFields={getApplicationsFilterValues()}\n          urlWithParam={queryParamValue && !validUrlLength(queryParamValue) ? false : true}\n        />\n        <Stack horizontal tokens={buttonStackTokens}>\n          <PrimaryButton\n            styles={filterButtonStyles()}\n            text=\"Apply\"\n            onClick={(): void => {\n              handleSearch(true, searchText, selectedApplicationsFilterValues, 1, pageSize);\n            }}\n          />\n          <PrimaryButton\n            styles={filterButtonStyles()}\n            text=\"Reset\"\n            onClick={(): void => resetFilterValues(true)}\n          />\n        </Stack>\n      </Stack.Item>\n      <Stack.Item grow styles={listStackStyles()}>\n        <Stack styles={tableStackStyles}>\n          <PaddedFlexRow>\n            <Title>\n              Applications{\" \"}\n              {tenant === TenantTypesEnum.MVP && <ErrorWrapper>{urlError}</ErrorWrapper>}\n            </Title>\n            <FlexWrapper>\n              <ListCounts total={filteredCount} loading={isLoadingApplications} />\n              {!!canDownload && (\n                <PrimaryButton\n                  text=\"Download to CSV\"\n                  styles={filterButtonStyles()}\n                  iconProps={{ iconName: \"download\" }}\n                  onClick={handleDownloadToCSV}\n                />\n              )}\n            </FlexWrapper>\n          </PaddedFlexRow>\n          <SearchBox\n            placeholder=\"Search applications\"\n            value={searchText}\n            onSearch={(searchValue: string): void =>\n              handleSearch(false, searchValue, selectedApplicationsFilterValues, 1, pageSize)\n            }\n            onChange={(event?: React.ChangeEvent<HTMLInputElement>, newValue?: string): void =>\n              setSearchText(newValue || \"\")\n            }\n            onClear={onClear}\n            styles={searchBoxStyles}\n          />\n          <ApplicationsList\n            data={applications}\n            filteredCount={filteredCount}\n            pageSize={pageSize}\n            tenant={tenant}\n          />\n        </Stack>\n      </Stack.Item>\n    </Stack>\n  );\n};\n\n/**\n * Maps ApplicationsContainer to redux state\n * @param {AppState} state The App state.\n */\nconst mapStateToProps = (state: AppState): Partial<IApplicationsContainerProps & any> => ({\n  applications: getApplications(state.applicationState),\n  fileDownloadData: getFileDownloadData(state.applicationState),\n  fileDownloadStatus: getFileDownloadStatus(state.applicationState),\n  currentPage: getCurrentPage(state.applicationState),\n  searchText: getSearchText(state.applicationState),\n  filteredCount: getFilteredCount(state.applicationState),\n  isLoadingApplications: isLoadingApplications(state.applicationState),\n  pageSize: getPageSize(state.applicationState),\n  selectedApplicationsFilterValues: getApplicationsFilterValues(state.applicationState),\n  currentTenant: getCurrentTenant(state.applicationState),\n  sortColumn: getSortColumn(state),\n  sortDescending: getSortDescending(state),\n});\n\n/**\n * Maps Component's dispatch/handler props to redux state\n * @param {Dispatch} dispatch The dispatch.\n */\nconst mapDispatchToProps = (\n  dispatch: Dispatch<ApplicationActions.ApplicationActionTypes>\n): Partial<IApplicationsContainerProps & any> => ({\n  actions: {\n    loadCommonData: bindActionCreators(CommonDataActions.loadCommonData, dispatch),\n    addApplicationsFilterValue: bindActionCreators(\n      ApplicationActions.addApplicationsFilterValue,\n      dispatch\n    ),\n    downloadApplicationsToCSV: bindActionCreators(\n      ApplicationActions.downloadApplicationsToCSV,\n      dispatch\n    ),\n    cleanDownloadCSV: bindActionCreators(\n      ApplicationActions.downloadApplicationsToCSVClean,\n      dispatch\n    ),\n    removeApplicationsFilterValue: bindActionCreators(\n      ApplicationActions.removeApplicationsFilterValue,\n      dispatch\n    ),\n    removeApplicationsProvinceFilterValue: bindActionCreators(\n      ApplicationActions.removeApplicationsFilterProvinceValue,\n      dispatch\n    ),\n    removeApplicationsCountryFilterValue: bindActionCreators(\n      ApplicationActions.removeApplicationsFilterCountryValue,\n      dispatch\n    ),\n    searchApplications: bindActionCreators(ApplicationActions.searchApplications, dispatch),\n    updateApplicationsFilterValue: bindActionCreators(\n      ApplicationActions.updateApplicationsFilterValue,\n      dispatch\n    ),\n    resetApplications: bindActionCreators(ApplicationActions.resetApplications, dispatch),\n  },\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(ApplicationsContainer);\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { IKeyText } from \"Interfaces/IKeyText\";\n\n/**\n * The award category statuses.\n * @type {IKeyText[]}\n */\nexport const awardCategoryStatuses: IKeyText[] = [\n  {\n    key: \"Active\",\n    text: \"Active\",\n  },\n  {\n    key: \"Inactive\",\n    text: \"Inactive\",\n  },\n];\n\n/**\n * The award categories load failure message.\n * @type {string}\n */\nexport const loadingErrorMessage = \"Failed to load award categories\";\n\n/**\n * The award category update panel error message.\n * @type {string}\n */\nexport const updatePanelErrorMessage = \"Failed to update award category status\";\n\n/**\n * The strings to display impact of changing the award category status to inactive.\n * @type {string[]}\n */\nexport const inactiveImpactList = [\n  \"Remove the AC and associated Technology Areas (TA) from the Program Structure FAQ Page.\",\n  \"Hide the TAs from the MVP Application and candidates can no longer apply to these TAs.\",\n  \"Hide the TAs from Event and Activity form dropdowns.\",\n  \"Remove the Distribution Lists (DLs) associated with the inactive AC from the DLs displayed on the website.\",\n];\n\n/**\n * The strings to display unaffected areas when changing the award category status to inactive.\n * @type {string[]}\n */\nexport const unaffectedList = [\n  \"Historical Data and Data Warehouse\",\n  \"ACs/TAs listed on MVP public profiles\",\n  \"ACs/TAs in Admin Center filters and other areas\",\n  \"DLs on the M365 Exchange Admin\",\n];\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { createSlice, PayloadAction } from \"@reduxjs/toolkit\";\n\nimport { IAwardCategoryData } from \"Interfaces/AwardCategories/IAwardCategoriesResult\";\n\n// Define the initial state for the award categories slice\nconst initialState = {\n  // Set the list of award categories\n  awardCategories: [],\n  // Set the selected award category\n  selectedAwardCategory: {} as IAwardCategoryData,\n  // Set the error message when fetching award categories\n  fetchAwardCategoriesError: \"\",\n  // Set the error message when updating award categories\n  updateACErrorMessage: \"\",\n  // Set true if award category is updated from side panel\n  isAwardCategoryUpdated: false,\n};\n\n// Create the award categories slice to hold state, reducers and selectors for award categories\nexport const awardCategoriesSlice = createSlice({\n  name: \"awardCategories\",\n  initialState,\n  reducers: {\n    selectAwardCategory: (state, action: PayloadAction<IAwardCategoryData>) => {\n      state.selectedAwardCategory = action.payload;\n    },\n    updateACErrorMessage: (state, action: PayloadAction<string>) => {\n      state.updateACErrorMessage = action.payload;\n    },\n    setIsAwardCategoryUpdated: (state, action: PayloadAction<boolean>) => {\n      state.isAwardCategoryUpdated = action.payload;\n    },\n  },\n  selectors: {\n    getSelectedAwardCategory: (state) => state.selectedAwardCategory, // Get the selected award category\n    getUpdateACErrorMessage: (state) => state.updateACErrorMessage, // Get the error message when updating award categories\n    getIsAwardCategoryUpdated: (state) => state.isAwardCategoryUpdated, // Get the status of award category update\n  },\n});\n\nexport const { selectAwardCategory, updateACErrorMessage, setIsAwardCategoryUpdated } = awardCategoriesSlice.actions;\nexport const { getSelectedAwardCategory, getUpdateACErrorMessage, getIsAwardCategoryUpdated } =\n  awardCategoriesSlice.selectors;\nexport default awardCategoriesSlice.reducer;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { createApi, fetchBaseQuery } from \"@reduxjs/toolkit/query/react\";\n\nimport { IAwardCategoriesRequest } from \"Interfaces/AwardCategories/IAwardCategoriesRequest\";\n\nimport { AWARDCATEGORIES_BASE_URL } from \"../Constants/SagaConstants\";\nimport { getAuthToken } from \"./ApiUtils\";\n\n/**\n * AwardCategoriesApi to create endpoints for award categories to api service calls. Authenticating with the token and appending in headers for all calls.\n */\nexport const awardCategoriesApi = createApi({\n  reducerPath: \"awardCategoriesApi\",\n  baseQuery: fetchBaseQuery({ baseUrl: AWARDCATEGORIES_BASE_URL,\n    prepareHeaders: async (headers) => {\n      // Use the getAuthToken utility to fetch and add the token\n      return await getAuthToken(headers);\n    },\n  }),\n  endpoints: (builder) => ({\n    getAwardCategories: builder.query({\n      query: (tenant: string) => `AwardCategories?tenant=${tenant}`,\n    }),\n    updateAwardCategory: builder.mutation<null, IAwardCategoriesRequest>({\n      query: (awardCategory) => ({\n        url: \"AwardCategories/\",\n        method: \"POST\",\n        body: awardCategory,\n      }),\n    }),\n  }),\n});\n\nexport const { useGetAwardCategoriesQuery, useUpdateAwardCategoryMutation } = awardCategoriesApi;\nexport const { getAwardCategories, updateAwardCategory } = awardCategoriesApi.endpoints;\nexport default awardCategoriesApi.reducer;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { useEffect } from \"react\";\n\nimport { useForm } from \"react-hook-form\";\nimport { useDispatch, useSelector } from \"react-redux\";\n\nimport { Label, Stack, StackItem, Text } from \"@fluentui/react\";\n\nimport ComboBoxController from \"Components/ReactHookForm/ComboBoxController/ComboBoxController\";\nimport { SidePanel } from \"Components/SidePanel/SidePanel\";\nimport {\n  awardCategoryStatuses,\n  inactiveImpactList,\n  unaffectedList,\n  updatePanelErrorMessage,\n} from \"Constants/AwardCategoriesConstants\";\nimport {\n  getSelectedAwardCategory,\n  getUpdateACErrorMessage,\n  selectAwardCategory,\n  setIsAwardCategoryUpdated,\n  updateACErrorMessage,\n} from \"Dataflows/AwardCategories/AwardCategoriesSlice\";\nimport { useUpdateAwardCategoryMutation } from \"Services/AwardCategoriesApi\";\n\nimport IAwardCategoriesUpdatePanelProps from \"./IAwardCategoriesUpdatePanelProps\";\n\nexport const AwardCategoriesUpdatePanel: React.FunctionComponent<\n  IAwardCategoriesUpdatePanelProps\n> = (props: IAwardCategoriesUpdatePanelProps) => {\n  const { isOpen, setIsOpen } = props;\n  const selectedAwardCategory = useSelector(getSelectedAwardCategory);\n  const errorMessage = useSelector(getUpdateACErrorMessage);\n  const [updateAwardCategory, { isLoading: isSaving, error: mutationError }] =\n    useUpdateAwardCategoryMutation(); // Destructure mutation\n  const dispatch = useDispatch();\n\n  // Default values for status dropdown\n  const defaultValues = {\n    Status: selectedAwardCategory?.isActive ? \"Active\" : \"Inactive\", // Use current status or default to \"Active\"\n  };\n\n  // Effect to sync error state between mutation and Redux\n  useEffect(() => {\n    if (mutationError) {\n      // If mutation fails, set the error message\n      dispatch(updateACErrorMessage(updatePanelErrorMessage));\n    } else {\n      // Clear error message if no errors\n      dispatch(updateACErrorMessage(\"\"));\n    }\n  }, [mutationError]);\n\n  const {\n    control,\n    handleSubmit,\n    reset,\n    formState: { errors },\n  } = useForm({\n    defaultValues,\n  });\n\n  const dismissPanel = (): void => {\n    setIsOpen(false);\n    reset(); // Reset form when the panel is closed\n  };\n\n  // Save function to handle form submission\n  const onSave = async (data: { Status: string }) => {\n    if (data.Status === \"Active\") {\n      dispatch(updateACErrorMessage(\"Status update is required\"));\n    } else {\n      try {\n        const isActive = data.Status === \"Active\" ? true : false;\n        await updateAwardCategory({\n          ...selectedAwardCategory,\n          IsActive: isActive,\n        }).unwrap();\n        if (!mutationError) {\n          dismissPanel();\n          dispatch(setIsAwardCategoryUpdated(true)); // Set flag to indicate award category update\n          dispatch(\n            selectAwardCategory({\n              ...selectedAwardCategory,\n              isActive: false,\n            })\n          ); // update status of selected award category\n          dispatch(updateACErrorMessage(\"\")); // Clear error message\n        }\n      } catch (error) {\n        dispatch(updateACErrorMessage(updatePanelErrorMessage));\n      }\n    }\n  };\n\n  return (\n    <form onSubmit={handleSubmit(onSave)}>\n      <SidePanel\n        isOpen={isOpen}\n        title={selectedAwardCategory.technologyFocusAreaGroupName}\n        saveButtonLabel=\"Save\"\n        error={errorMessage}\n        disableActions={isSaving || !selectedAwardCategory?.isActive} // Disable actions if saving\n        onDismiss={dismissPanel}\n        onSave={handleSubmit(onSave)} // Trigger form submission on save\n      >\n        <StackItem align=\"start\">\n          <Text>Making an Award Category (AC) as Inactive will:</Text>\n          <ul>\n            {inactiveImpactList.map((item, index) => (\n              <li key={`inactive-impact-${index}`}>\n                <Text>{item}</Text>\n              </li>\n            ))}\n          </ul>\n          <Text>It will not affect:</Text>\n          <ul>\n            {unaffectedList.map((item, index) => (\n              <li key={`unaffected-impact-${index}`}>\n                <Text>{item}</Text>\n              </li>\n            ))}\n          </ul>\n        </StackItem>\n        <StackItem>\n          <Stack tokens={{ childrenGap: \"1rem\" }} horizontal={true} horizontalAlign=\"space-evenly\">\n            <StackItem align=\"center\" grow={100}>\n              <Label htmlFor=\"Status\">Status</Label>\n            </StackItem>\n            <StackItem align=\"start\" grow={100}>\n              <ComboBoxController\n                errors={errors}\n                control={control}\n                inputName=\"Status\"\n                options={awardCategoryStatuses}\n                isDisabled={isSaving || !selectedAwardCategory?.isActive} // Disable ComboBox if saving\n              />\n            </StackItem>\n          </Stack>\n        </StackItem>\n      </SidePanel>\n    </form>\n  );\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { useEffect } from \"react\";\n\nimport { useDispatch, useSelector } from \"react-redux\";\n\nimport {\n  CheckboxVisibility,\n  DetailsList,\n  DetailsListLayoutMode,\n  IColumn,\n  IDetailsRowProps,\n  SelectionMode,\n  Spinner,\n  SpinnerSize,\n} from \"@fluentui/react\";\nimport { Text } from \"@fluentui/react/lib/Text\";\n\nimport { errorMessageStyles } from \"Components/AddComment/AddComment.styles\";\nimport { detailListStyles, spinnerStyles } from \"Components/Common/SharedListStyles.styles\";\nimport { loadingErrorMessage } from \"Constants/AwardCategoriesConstants\";\nimport {\n  getIsAwardCategoryUpdated,\n  getSelectedAwardCategory,\n  selectAwardCategory,\n} from \"Dataflows/AwardCategories/AwardCategoriesSlice\";\nimport { IAwardCategoryData } from \"Interfaces/AwardCategories/IAwardCategoriesResult\";\nimport { useGetAwardCategoriesQuery } from \"Services/AwardCategoriesApi\";\n\nimport { IAwardCategoriesProps } from \"./IAwardCategoriesProps\";\n\nconst AwardCategories: React.FunctionComponent<IAwardCategoriesProps> = (\n  props: IAwardCategoriesProps\n) => {\n  const { tenant } = props;\n  const dispatch = useDispatch();\n  const { data, error, isLoading, refetch } = useGetAwardCategoriesQuery(tenant);\n  const isAwardCategoryUpdated = useSelector(getIsAwardCategoryUpdated);\n  const selectedAwardCategory = useSelector(getSelectedAwardCategory);\n\n  useEffect(() => {\n    if (isAwardCategoryUpdated) {\n      refetch(); // Refetch the data when the award category is updated\n    }\n  }, [isAwardCategoryUpdated]);\n\n  const columns: IColumn[] = [\n    {\n      key: \"technologyFocusAreaGroupId\",\n      name: \"Award Category\",\n      ariaLabel: \"Award Category Name\",\n      fieldName: \"technologyFocusAreaGroupName\",\n      minWidth: 240,\n      isResizable: true,\n    },\n    {\n      key: \"isActive\",\n      name: \"Status\",\n      ariaLabel: \"Status\",\n      fieldName: \"isActive\",\n      minWidth: 120,\n      onRender: (item: IAwardCategoryData): React.ReactElement => {\n        if (item.isActive) {\n          return <span>{\"Active\"}</span>;\n        } else {\n          return <span>{\"Inactive\"}</span>;\n        }\n      },\n    },\n  ];\n\n  // Handle click event for selecting an award category\n  const handleClick = (awardCategory: IAwardCategoryData): void => {\n    const selectedCategoryID = selectedAwardCategory?.technologyFocusAreaGroupId;\n    if (selectedCategoryID === awardCategory.technologyFocusAreaGroupId) {\n      dispatch(selectAwardCategory({} as IAwardCategoryData));\n    } else {\n      dispatch(selectAwardCategory(awardCategory));\n    }\n  };\n\n  const onRenderRow = (props?: IDetailsRowProps, defaultRender?: any): any => {\n    const selectedAwardCategory = props!.item as any;\n    return defaultRender!({\n      ...props,\n      onClick: () => handleClick(selectedAwardCategory),\n    });\n  };\n\n  if (isLoading) {\n    return <Spinner size={SpinnerSize.large} styles={spinnerStyles} />;\n  }\n\n  if (error) {\n    return <Text styles={errorMessageStyles}>{loadingErrorMessage}</Text>;\n  }\n\n  return (\n    <DetailsList\n      items={data.awardCategoryData}\n      columns={columns}\n      selectionMode={SelectionMode.single}\n      getKey={(item: IAwardCategoryData): string => item.technologyFocusAreaGroupId}\n      setKey=\"set\"\n      ariaLabelForListHeader=\"Award Categories\"\n      ariaLabelForSelectionColumn=\"Toggle selection\"\n      checkButtonAriaLabel=\"select award category\"\n      checkboxVisibility={CheckboxVisibility.always}\n      layoutMode={DetailsListLayoutMode.fixedColumns}\n      styles={detailListStyles}\n      isHeaderVisible={true}\n      selectionPreservedOnEmptyClick={true}\n      onRenderRow={onRenderRow}\n      enterModalSelectionOnTouch={true}\n    />\n  );\n};\n\nexport default AwardCategories;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { useEffect, useState } from \"react\";\n\nimport { useSelector } from \"react-redux\";\nimport { useParams } from \"react-router\";\n\nimport { CommandBar, ICommandBarItemProps, Stack } from \"@fluentui/react\";\nimport { Text } from \"@fluentui/react/lib/Text\";\n\nimport { errorMessageStyles } from \"Components/AddComment/AddComment.styles\";\nimport { AwardCategoriesUpdatePanel } from \"Components/AwardCategoriesStatusUpdatePanel/AwardCategoriesUpdatePanel\";\nimport { Title } from \"Components/Common/Results/Result.styles\";\nimport { SubSiteUrlRootPath } from \"Constants/TenantTypes\";\nimport {\n  commandBarStyles,\n  containerStackStyles,\n  listStackStyles,\n  tableStackStyles,\n  PaddedFlexRow,\n} from \"Containers/Common/CommonContainer.styles\";\nimport { getSelectedAwardCategory } from \"Dataflows/AwardCategories/AwardCategoriesSlice\";\n\nimport AwardCategories from \"../../Components/AwardCategories/AwardCategories\";\nimport { IAwardCategoriesContainerMatchProps } from \"./IAwardCategoriesContainerMatchProps\";\n\nconst AwardCategoriesContainer = () => {\n  const [isStatusUpdatePanelOpen, setStatusUpdatePanelOpen] = useState(false);\n  const routeParams = useParams<IAwardCategoriesContainerMatchProps>(); // Update interface\n  const tenant = SubSiteUrlRootPath[routeParams.tenant];\n  const selectedAwardCategory = useSelector(getSelectedAwardCategory);\n\n  const [selectCategoryMessage, setSelectCategoryMessage] = useState<string>(\"\");\n\n  //To reset the error message when the selected award category is changed\n  useEffect(() => {\n    if (selectedAwardCategory) {\n      setSelectCategoryMessage(\"\");\n    }\n  }, [selectedAwardCategory]);\n\n  const commandBarItems: ICommandBarItemProps[] = [];\n\n  // Check if the selected award category is valid\n  const isCategorySelected = (): boolean => {\n    // Check if it's non-null and has a valid technologyFocusAreaGroupId\n    return selectedAwardCategory != null && !!selectedAwardCategory.technologyFocusAreaGroupId;\n  };\n\n  const onModifyClick = () => {\n    if (isCategorySelected()) {\n      setStatusUpdatePanelOpen(true);\n    } else {\n      setSelectCategoryMessage(\"Please select an award category to modify\");\n    }\n  };\n\n  commandBarItems.push({\n    key: \"updateStatus\",\n    text: \"Modify\",\n    iconProps: { iconName: \"Edit\" },\n    onClick: (_, item) => onModifyClick(),\n  });\n\n  return (\n    <>\n      <Stack horizontal styles={containerStackStyles}>\n        <Stack.Item grow styles={listStackStyles()}>\n          <Stack styles={tableStackStyles} tokens={{ childrenGap: \"1.5rem\" }}>\n            <PaddedFlexRow>\n              <Title>Program Technology Structure</Title>\n            </PaddedFlexRow>\n\n            <CommandBar\n              items={commandBarItems}\n              ariaLabel=\"Award Categories actions\"\n              styles={commandBarStyles}\n            />\n            {selectCategoryMessage && (\n              <Text styles={errorMessageStyles}>{selectCategoryMessage}</Text>\n            )}\n\n            <AwardCategories tenant={tenant} />\n          </Stack>\n        </Stack.Item>\n      </Stack>\n      {isStatusUpdatePanelOpen && (\n        <AwardCategoriesUpdatePanel\n          isOpen={isStatusUpdatePanelOpen}\n          setIsOpen={setStatusUpdatePanelOpen}\n        />\n      )}\n    </>\n  );\n};\n\nexport default AwardCategoriesContainer;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { IAzureBenefitRequest } from \"Interfaces/AzureBenefitRequests/IAzureBenefitRequest\";\nimport { IFilterValue } from \"Interfaces/IFilterValue\";\n\nimport {\n  AZURE_BENEFIT_REQUEST_APPROVE_OR_DECLINE,\n  AZURE_BENEFIT_REQUEST_APPROVE_OR_DECLINE_FAILURE,\n  AZURE_BENEFIT_REQUEST_APPROVE_OR_DECLINE_SUCCESS,\n  AZURE_BENEFIT_REQUESTS_FILTER_VALUE_ADD,\n  AZURE_BENEFIT_REQUESTS_FILTER_VALUE_CLEAR,\n  AZURE_BENEFIT_REQUESTS_FILTER_VALUE_REMOVE,\n  AZURE_BENEFIT_REQUESTS_FILTER_VALUE_UPDATE,\n  AZURE_BENEFIT_REQUESTS_SEARCH,\n  AZURE_BENEFIT_REQUESTS_SEARCH_FAIL,\n  AZURE_BENEFIT_REQUESTS_SEARCH_SUCCESS,\n  GET_AZURE_BENEFIT_REQUEST_DETAILS,\n  GET_AZURE_BENEFIT_REQUEST_DETAILS_FAIL,\n  GET_AZURE_BENEFIT_REQUEST_DETAILS_SUCCESS,\n} from \"./AzureBenefitRequestsActionTypes\";\n\n/**\n * Action for when searching azure benefit requests.\n * @interface\n */\nexport interface ISearchAzureBenefitRequests {\n  type: typeof AZURE_BENEFIT_REQUESTS_SEARCH;\n  searchText: string;\n  selectedRequestsFilterValues: IFilterValue[];\n  pageSize: number;\n  pageIndex: number;\n  tenant: string;\n}\n\n/**\n * Action for when requests were searched successfully.\n * @interface\n */\nexport interface ISearchAzureBenefitRequestsSuccess {\n  type: typeof AZURE_BENEFIT_REQUESTS_SEARCH_SUCCESS;\n  requests: IAzureBenefitRequest[];\n  pageIndex: number;\n  pageSize: number;\n  filteredCount: number;\n}\n\n/**\n * Action for when loading requests failed.\n * @interface\n */\nexport interface ISearchAzureBenefitRequestsFail {\n  type: typeof AZURE_BENEFIT_REQUESTS_SEARCH_FAIL;\n  error: string;\n}\n\n/**\n * Action for when adding selected filter value.\n * @interface\n */\nexport interface IAzureBenefitRequestsFilterValueAdd {\n  type: typeof AZURE_BENEFIT_REQUESTS_FILTER_VALUE_ADD;\n  filterValue: IFilterValue;\n}\n\n/**\n * Action for when removing selected filter value.\n * @interface\n */\nexport interface IAzureBenefitRequestsFilterValueRemove {\n  type: typeof AZURE_BENEFIT_REQUESTS_FILTER_VALUE_REMOVE;\n  filterValue: IFilterValue;\n}\n\n/**\n * Action for when updating selected filter value.\n * @interface\n */\nexport interface IAzureBenefitRequestsFilterValueUpdate {\n  type: typeof AZURE_BENEFIT_REQUESTS_FILTER_VALUE_UPDATE;\n  filterValue: IFilterValue;\n}\n\n/**\n * Action for when clearing selected filter values.\n * @interface\n */\nexport interface IAzureBenefitRequestsFilterValueClear {\n  type: typeof AZURE_BENEFIT_REQUESTS_FILTER_VALUE_CLEAR;\n}\n\n/**\n * Action for getting the details of an individual azure\n * benefit request.\n */\nexport interface IGetAzureBenefitRequestDetails {\n  type: typeof GET_AZURE_BENEFIT_REQUEST_DETAILS;\n  userProfileId: number;\n  tenant: string;\n}\n\n/**\n * Action for getting the details of an individual azure\n * benefit request.\n */\nexport interface IGetAzureBenefitRequestDetailsSuccess {\n  type: typeof GET_AZURE_BENEFIT_REQUEST_DETAILS_SUCCESS;\n  questionAnswerMap: { [key: string]: string };\n  expedited: boolean;\n  expeditedDate?: Date;\n}\n\n/**\n * Action for getting the details of an individual azure\n * benefit request.\n */\nexport interface IGetAzureBenefitRequestDetailsFail {\n  type: typeof GET_AZURE_BENEFIT_REQUEST_DETAILS_FAIL;\n  error: string;\n}\n\n/**\n * Action for approving or declining an azure benefit request.\n */\nexport interface IApproveOrDeclineAzureBenefitRequest {\n  type: typeof AZURE_BENEFIT_REQUEST_APPROVE_OR_DECLINE;\n  approveOrDecline: boolean;\n  requestId: number;\n  tenant: string;\n}\n\n/**\n * Action for approving or declining an azure benefit request failure.\n */\nexport interface IApproveOrDeclineAzureBenefitRequestFailure {\n  type: typeof AZURE_BENEFIT_REQUEST_APPROVE_OR_DECLINE_FAILURE;\n  errorMessage: string;\n}\n\n/**\n * Action for approving or declining an azure benefit request success.\n */\nexport interface IApproveOrDeclineAzureBenefitRequestSuccess {\n  type: typeof AZURE_BENEFIT_REQUEST_APPROVE_OR_DECLINE_SUCCESS;\n  updated: boolean;\n}\n\n/**\n * Action creator for AZURE_BENEFIT_REQUESTS_FILTER_VALUE_ADD.\n * @param error the error message from the API.\n */\nexport function addAzureBenefitRequestsFilterValue(\n  filterValue: IFilterValue\n): IAzureBenefitRequestsFilterValueAdd {\n  return {\n    type: AZURE_BENEFIT_REQUESTS_FILTER_VALUE_ADD,\n    filterValue,\n  };\n}\n\n/**\n * Action creator for AZURE_BENEFIT_REQUESTS_FILTER_VALUE_REMOVE.\n * @param error the error message from the API.\n */\nexport function removeAzureBenefitRequestsFilterValue(\n  filterValue: IFilterValue\n): IAzureBenefitRequestsFilterValueRemove {\n  return {\n    type: AZURE_BENEFIT_REQUESTS_FILTER_VALUE_REMOVE,\n    filterValue,\n  };\n}\n\n/**\n * Action creator for AZURE_BENEFIT_REQUESTS_FILTER_VALUE_UPDATE.\n * @param error the error message from the API.\n */\nexport function updateAzureBenefitRequestsFilterValue(\n  filterValue: IFilterValue\n): IAzureBenefitRequestsFilterValueUpdate {\n  return {\n    type: AZURE_BENEFIT_REQUESTS_FILTER_VALUE_UPDATE,\n    filterValue,\n  };\n}\n\n/**\n * Action creator for AZURE_BENEFIT_REQUESTS_SEARCH.\n */\nexport function searchAzureBenefitRequests(\n  searchText: string,\n  selectedRequestsFilterValues: IFilterValue[],\n  pageIndex: number,\n  pageSize: number,\n  tenant: string\n): ISearchAzureBenefitRequests {\n  return {\n    type: AZURE_BENEFIT_REQUESTS_SEARCH,\n    searchText,\n    selectedRequestsFilterValues,\n    pageSize,\n    pageIndex,\n    tenant,\n  };\n}\n\n/**\n * Action creator for AZURE_BENEFIT_REQUESTS_SEARCH_SUCCESS.\n * @param requests the azure benefit requests successfully searched.\n */\nexport function searchAzureBenefitRequestsSuccess(\n  requests: IAzureBenefitRequest[],\n  pageIndex: number,\n  pageSize: number,\n  filteredCount: number\n): ISearchAzureBenefitRequestsSuccess {\n  return {\n    type: AZURE_BENEFIT_REQUESTS_SEARCH_SUCCESS,\n    requests,\n    pageIndex,\n    pageSize,\n    filteredCount,\n  };\n}\n\n/**\n * Action creator for AZURE_BENEFIT_REQUESTS_SEARCH_FAIL.\n * @param error the error message from the API.\n */\nexport function searchAzureBenefitRequestsFail(error: string): ISearchAzureBenefitRequestsFail {\n  return {\n    type: AZURE_BENEFIT_REQUESTS_SEARCH_FAIL,\n    error,\n  };\n}\n\n/**\n * Action creator for GET_AZURE_BENEFIT_REQUEST_DETAILS.\n */\nexport function getAzureBenefitRequestDetails(\n  userProfileId: number,\n  tenant: string\n): IGetAzureBenefitRequestDetails {\n  return {\n    type: GET_AZURE_BENEFIT_REQUEST_DETAILS,\n    userProfileId,\n    tenant,\n  };\n}\n\n/**\n * Action creator for GET_AZURE_BENEFIT_REQUEST_DETAILS_SUCCESS.\n */\nexport function getAzureBenefitRequestDetailsSuccess(\n  questionAnswerMap: { [key: string]: string },\n  expedited: boolean,\n  expeditedDate?: Date\n): IGetAzureBenefitRequestDetailsSuccess {\n  return {\n    type: GET_AZURE_BENEFIT_REQUEST_DETAILS_SUCCESS,\n    questionAnswerMap,\n    expedited,\n    expeditedDate,\n  };\n}\n\n/**\n * Action creator for GET_AZURE_BENEFIT_REQUEST_DETAILS_FAIL.\n * @param error the error message from the API.\n */\nexport function getAzureBenefitRequestDetailsFail(\n  error: string\n): IGetAzureBenefitRequestDetailsFail {\n  return {\n    type: GET_AZURE_BENEFIT_REQUEST_DETAILS_FAIL,\n    error,\n  };\n}\n\n/**\n * Action creator for AZURE_BENEFIT_REQUEST_APPROVE_OR_DECLINE.\n */\nexport function approveOrDeclineAzureBenefitRequest(\n  approveOrDecline: boolean,\n  requestId: number,\n  tenant: string\n): IApproveOrDeclineAzureBenefitRequest {\n  return {\n    type: AZURE_BENEFIT_REQUEST_APPROVE_OR_DECLINE,\n    approveOrDecline,\n    requestId,\n    tenant,\n  };\n}\n\n/**\n * Action creator for AZURE_BENEFIT_REQUEST_APPROVE_OR_DECLINE_SUCCESS.\n */\nexport function approveOrDeclineAzureBenefitRequestSuccess(\n  updated: boolean\n): IApproveOrDeclineAzureBenefitRequestSuccess {\n  return {\n    type: AZURE_BENEFIT_REQUEST_APPROVE_OR_DECLINE_SUCCESS,\n    updated,\n  };\n}\n\n/**\n * Action creator for AZURE_BENEFIT_REQUEST_APPROVE_OR_DECLINE_FAILURE.\n * @param errorMessage the error message from the API.\n */\nexport function approveOrDeclineAzureBenefitRequestFailure(\n  errorMessage: string\n): IApproveOrDeclineAzureBenefitRequestFailure {\n  return {\n    type: AZURE_BENEFIT_REQUEST_APPROVE_OR_DECLINE_FAILURE,\n    errorMessage,\n  };\n}\n\n/**\n * Action creator for AZURE_BENEFIT_REQUESTS_FILTER_VALUE_CLEAR.\n * @returns {IAzureBenefitRequestsFilterValueClear}\n */\nexport function clearAzureBenefitRequestsFilterValues(): IAzureBenefitRequestsFilterValueClear {\n  return {\n    type: AZURE_BENEFIT_REQUESTS_FILTER_VALUE_CLEAR,\n  };\n}\n\nexport type AzureBenefitRequestsActionTypes =\n  | ISearchAzureBenefitRequests\n  | ISearchAzureBenefitRequestsSuccess\n  | ISearchAzureBenefitRequestsFail\n  | IAzureBenefitRequestsFilterValueAdd\n  | IAzureBenefitRequestsFilterValueRemove\n  | IAzureBenefitRequestsFilterValueClear\n  | IAzureBenefitRequestsFilterValueUpdate\n  | IGetAzureBenefitRequestDetails\n  | IGetAzureBenefitRequestDetailsFail\n  | IGetAzureBenefitRequestDetailsSuccess\n  | IApproveOrDeclineAzureBenefitRequest\n  | IApproveOrDeclineAzureBenefitRequestFailure\n  | IApproveOrDeclineAzureBenefitRequestSuccess;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\n// Search\nexport const AZURE_BENEFIT_REQUESTS_SEARCH = \"AZURE_BENEFIT_REQUESTS_SEARCH\";\nexport const AZURE_BENEFIT_REQUESTS_SEARCH_SUCCESS = \"AZURE_BENEFIT_REQUESTS_SEARCH_SUCCESS\";\nexport const AZURE_BENEFIT_REQUESTS_SEARCH_FAIL = \"AZURE_BENEFIT_REQUESTS_SEARCH_FAIL\";\n\n// Filters\nexport const AZURE_BENEFIT_REQUESTS_FILTER_VALUE_ADD = \"AZURE_BENEFIT_REQUESTS_FILTER_VALUE_ADD\";\nexport const AZURE_BENEFIT_REQUESTS_FILTER_VALUE_CLEAR =\n  \"AZURE_BENEFIT_REQUESTS_FILTER_VALUE_CLEAR\";\nexport const AZURE_BENEFIT_REQUESTS_FILTER_VALUE_REMOVE =\n  \"AZURE_BENEFIT_REQUESTS_FILTER_VALUE_REMOVE\";\nexport const AZURE_BENEFIT_REQUESTS_FILTER_VALUE_UPDATE =\n  \"AZURE_BENEFIT_REQUESTS_FILTER_VALUE_UPDATE\";\n\n// Individual request details\nexport const GET_AZURE_BENEFIT_REQUEST_DETAILS = \"GET_AZURE_BENEFIT_REQUEST_DETAILS\";\nexport const GET_AZURE_BENEFIT_REQUEST_DETAILS_SUCCESS =\n  \"GET_AZURE_BENEFIT_REQUEST_DETAILS_SUCCESS\";\nexport const GET_AZURE_BENEFIT_REQUEST_DETAILS_FAIL = \"GET_AZURE_BENEFIT_REQUEST_DETAILS_FAIL\";\n\n// Approve or Decline\nexport const AZURE_BENEFIT_REQUEST_APPROVE_OR_DECLINE = \"AZURE_BENEFIT_REQUEST_APPROVE_OR_DECLINE\";\nexport const AZURE_BENEFIT_REQUEST_APPROVE_OR_DECLINE_FAILURE =\n  \"AZURE_BENEFIT_REQUEST_APPROVE_OR_DECLINE_FAILURE\";\nexport const AZURE_BENEFIT_REQUEST_APPROVE_OR_DECLINE_SUCCESS =\n  \"AZURE_BENEFIT_REQUEST_APPROVE_OR_DECLINE_SUCCESS\";\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { AppState } from \"Dataflows/Reducers\";\nimport { IAzureBenefitRequest } from \"Interfaces/AzureBenefitRequests/IAzureBenefitRequest\";\nimport { IFilterValue } from \"Interfaces/IFilterValue\";\n\n/**\n * Returns the list of azure benefit requests\n * in the current azure benefit requests state.\n * @param azureBenefitRequestsState\n */\nexport const getAzureBenefitRequests = (state: AppState): IAzureBenefitRequest[] =>\n  state.azureBenefitRequestsState.requests;\n\n/**\n * Returns a boolean value for whether\n * or not the azure benefit requests are still loading.\n * @param azureBenefitRequestsState\n */\nexport const isLoadingAzureBenefitRequests = (state: AppState): boolean =>\n  state.azureBenefitRequestsState.isLoadingAzureBenefitRequests;\n\n/**\n * Returns an error message if there's an\n * issue loading the azure benefit requests.\n * @param visualStudioBenefitState\n */\nexport const getLoadAzureBenefitRequestsError = (state: AppState): string =>\n  state.azureBenefitRequestsState.loadAzureBenefitRequestsError;\n\n/**\n * Returns the current page.\n * @param azureBenefitRequestsState\n */\nexport const getCurrentPage = (state: AppState): number =>\n  state.azureBenefitRequestsState.currentPage;\n\n/**\n * Returns the filtered count.\n * @param azureBenefitRequestsState\n */\nexport const getFilteredCount = (state: AppState): number =>\n  state.azureBenefitRequestsState.filteredCount;\n\n/**\n * Returns the page size.\n * @param azureBenefitRequestsState\n */\nexport const getPageSize = (state: AppState): number => state.azureBenefitRequestsState.pageSize;\n\n/**\n * Returns the search text.\n * @param azureBenefitRequestsState\n */\nexport const getSearchText = (state: AppState): string =>\n  state.azureBenefitRequestsState.searchText;\n\n/**\n * Returns the list of filter values for\n * azure benefit requests.\n * @param azureBenefitRequestsState\n */\nexport const getAzureBenefitRequestsFilterValues = (state: AppState): IFilterValue[] =>\n  state.azureBenefitRequestsState.azureBenefitRequestsFilterValues;\n\n/**\n * Returns the list of filter values for\n * azure benefit requests.\n * @param azureBenefitRequestsState\n */\nexport const getSelectedAzureBenefitRequestDetails = (\n  state: AppState\n): { [key: string]: string } | undefined =>\n  state.azureBenefitRequestsState.selectedAzureBenefitRequest;\n\n/**\n * Returns the is expedited value for the selected\n * azure benefit request.\n * @param azureBenefitRequestsState\n */\nexport const getSelectedAzureBenefitRequestIsExpedited = (state: AppState): boolean =>\n  state.azureBenefitRequestsState.selectedAzureBenefitRequestIsExpedited;\n\n/**\n * Returns the expedited by date for the selected\n * azure benefit request.\n * @param azureBenefitRequestsState\n */\nexport const getSelectedAzureBenefitRequestExpeditedByDate = (state: AppState): Date | undefined =>\n  state.azureBenefitRequestsState.selectedAzureBenefitRequestExpeditedByDate;\n\n/**\n * Gets the error message when fetching azure\n * request details fails.\n * @param azureBenefitRequestsState\n */\nexport const getFetchAzureBenefitRequestDetailsErrorMessage = (state: AppState): string =>\n  state.azureBenefitRequestsState.fetchAzureBenefitRequestDetailsErrorMessage;\n\n/**\n * Gets the operation status for approving\n * or declining an azure benefit request.\n * @param azureBenefitRequestsState\n */\nexport const getApproveOrDeclineRequestOperationStatus = (state: AppState): string =>\n  state.azureBenefitRequestsState.azureBenefitApproveOrDeclineOperationStatus;\n\n/**\n * Gets the error message for when approving\n * denying an azure benefit request fails.\n * @param azureBenefitRequestsState\n */\nexport const getApproveOrDeclineRequestErrorMessage = (state: AppState): string =>\n  state.azureBenefitRequestsState.azureBenefitApproveOrDeclineErrorMessage;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport {\n  getTheme,\n  FontSizes,\n  ICommandBarStyles,\n  IStackStyles,\n  IStackTokens,\n  ITextStyles,\n} from \"@fluentui/react\";\n\nconst theme = getTheme();\n\n/**\n * Styling for the wrapper stack\n */\nexport const wrapperStackStyles = (): IStackStyles => {\n  return {\n    root: {\n      padding: \"0 3.25rem 0 1.25rem\",\n    },\n  };\n};\n\n/**\n * Styling for the body stack\n */\nexport const bodyContainerExpeditedStackStyles = (): IStackStyles => {\n  return {\n    root: {\n      margin: \"0\",\n      borderRadius: \" 8px\",\n      backgroundColor: theme.palette.white,\n      padding: \"0px 24px 24px 24px\",\n    },\n  };\n};\n\n/**\n * Token for the body stack\n */\nexport const bodyContainerStackTokens = (): IStackTokens => {\n  return { childrenGap: \"1rem\" };\n};\n\n/**\n * Styling for the question text\n */\nexport const questionTextStyles = (): ITextStyles => {\n  return {\n    root: {\n      color: \"#333333\",\n      fontSize: FontSizes.size16,\n      fontWeight: 600,\n      margin: \"0 0 12px 0\",\n      display: \"block\",\n    },\n  };\n};\n\n/**\n * Styling for the question text\n */\nexport const answerTextStyles = (): ITextStyles => {\n  return {\n    root: {\n      color: \"#333333\",\n      fontSize: FontSizes.size16,\n      fontWeight: 400,\n      margin: \"0 0 24px 0\",\n      display: \"block\",\n    },\n  };\n};\n\n/**\n * Styling for the command bar\n */\nexport const commandBarStyles = (): ICommandBarStyles => {\n  return {\n    root: {\n      backgroundColor: theme.palette.white,\n      borderRadius: \"8px\",\n      boxShadow: \"0 1px 4px rgba(0, 0, 0, 0.2)\",\n      margin: \"0 0.5rem 1.5rem 0.5rem\",\n    },\n  };\n};\n\n/**\n * Questionnaire container styles\n */\nexport const questionnaireContainerStyles = (): IStackStyles => {\n  return {\n    root: {\n      margin: \"24px\",\n    },\n  };\n};\n\n/**\n * Styling for the name text\n */\nexport const nameTextStyles = (): ITextStyles => {\n  return { root: { fontSize: FontSizes.size20, fontWeight: 600 } };\n};\n\n/**\n * Styling for the email text\n */\nexport const emailTextStyles = (): ITextStyles => {\n  return { root: { fontSize: FontSizes.size16, fontWeight: 400 } };\n};\n\n/**\n * Styling for the container stack\n */\nexport const containerStackTokens = (): IStackTokens => {\n  return {\n    childrenGap: 36,\n  };\n};\n\n/**\n * Styling for the email stack\n */\nexport const emailStackTokens = (): IStackTokens => {\n  return { childrenGap: 24, padding: \"0.5rem 0 0 0\" };\n};\n\n/**\n * Styling for the name info stack\n */\nexport const nameInfoStackStyles = (): IStackStyles => {\n  return {\n    root: {\n      padding: \"1.5rem\",\n      backgroundColor: theme.palette.white,\n      borderRadius: \"0.5rem\",\n    },\n  };\n};\n\nexport const mainContainerStyles = (): IStackStyles => {\n  return {\n    root: {\n      backgroundColor: theme.palette.white,\n      borderRadius: \"8px\",\n      boxShadow: \"0 1px 4px rgba(0,0,0,0.2)\",\n      padding: \"1.5rem\",\n    },\n  };\n};\n\nexport const errorMessageStyles = (): IStackStyles => {\n  return {\n    root: {\n      margin: \"0 24px\",\n    },\n  };\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { useEffect, useState, ReactElement } from \"react\";\n\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { useHistory, useParams, Redirect } from \"react-router-dom\";\n\nimport {\n  ActionButton,\n  CommandBar,\n  ICommandBarItemProps,\n  Stack,\n  StackItem,\n  Text,\n} from \"@fluentui/react\";\n\nimport { useAuth } from \"Authentication/AuthProvider\";\nimport {\n  bodyContainerStackStyles,\n  headerStackStyles,\n  headerTextStyles,\n  ContainerWrapper,\n} from \"Components/Common/SharedTableStyles.styles\";\nimport { OperationStatus } from \"Constants/OperationStatus\";\nimport { PermissionsEnum } from \"Constants/RolesPermissionsConstants\";\nimport { TenantTypesEnum } from \"Constants/TenantTypes\";\nimport { approveOrDeclineAzureBenefitRequest } from \"Dataflows/AzureBenefitRequests/AzureBenefitRequestsAction\";\nimport {\n  getApproveOrDeclineRequestErrorMessage,\n  getApproveOrDeclineRequestOperationStatus,\n  getAzureBenefitRequests,\n  getFetchAzureBenefitRequestDetailsErrorMessage,\n  getSelectedAzureBenefitRequestDetails,\n  getSelectedAzureBenefitRequestExpeditedByDate,\n  getSelectedAzureBenefitRequestIsExpedited,\n} from \"Dataflows/AzureBenefitRequests/AzureBenefitRequestsSelector\";\nimport { formatDate } from \"Utility/FormatHelper\";\n\nimport {\n  answerTextStyles,\n  bodyContainerExpeditedStackStyles,\n  bodyContainerStackTokens,\n  commandBarStyles,\n  containerStackTokens,\n  emailStackTokens,\n  emailTextStyles,\n  errorMessageStyles,\n  mainContainerStyles,\n  nameInfoStackStyles,\n  nameTextStyles,\n  questionTextStyles,\n  wrapperStackStyles,\n} from \"./AzureBenefitRequestDetailsContainer.styles\";\n\n/**\n * The Azure Benefit Request Details Container component\n * @method\n * @returns {ReactElement} The Azure Benefit Request Details Container component\n */\nconst AzureBenefitRequestDetailsContainer = (): ReactElement => {\n  const { isUserLoggedIn, loading, hasAnyRoles, hasPermission } = useAuth();\n  const dispatch = useDispatch();\n  const history = useHistory();\n  const { id, tenant } = useParams<{ id: string; tenant: string }>();\n  const [selectedUser, setSelectedUser] = useState({\n    firstName: \"\",\n    lastName: \"\",\n    siteEmail: \"\",\n    id: 0,\n  });\n\n  const azureBenefitRequestDetails = useSelector(getSelectedAzureBenefitRequestDetails);\n  const azureBenefitRequests = useSelector(getAzureBenefitRequests);\n  const azureBenefitRequestDetailsError = useSelector(\n    getFetchAzureBenefitRequestDetailsErrorMessage\n  );\n  const approveOrDeclineOperationStatus = useSelector(getApproveOrDeclineRequestOperationStatus);\n  const approveOrDeclineError = useSelector(getApproveOrDeclineRequestErrorMessage);\n  const azureBenefitRequestExpeditedByDate = useSelector(\n    getSelectedAzureBenefitRequestExpeditedByDate\n  );\n  const azureBenefitRequestIsExpedited = useSelector(getSelectedAzureBenefitRequestIsExpedited);\n  const canUpdateBenefit =\n    (tenant.toLowerCase() === TenantTypesEnum.MVP.toLowerCase() &&\n      hasPermission(TenantTypesEnum.MVP, PermissionsEnum.MVP_UPDATE_BENEFITS)) ||\n    (tenant.toLowerCase() === TenantTypesEnum.RD.toLowerCase() &&\n      hasPermission(TenantTypesEnum.RD, PermissionsEnum.RD_UPDATE_BENEFITS));\n\n  if (isUserLoggedIn && !hasAnyRoles && !loading) {\n    return <Redirect to=\"/unauthorized\" />;\n  }\n\n  useEffect(() => {\n    if (azureBenefitRequests.length > 0 && id) {\n      const user = azureBenefitRequests.filter((req) => req.userProfileId === Number(id))[0];\n      setSelectedUser(user);\n    }\n  }, [azureBenefitRequests]);\n\n  useEffect(() => {\n    if (approveOrDeclineOperationStatus === OperationStatus.Succeeded) {\n      history.push(`/${tenant}/benefits/azureRequests`);\n    }\n  }, [approveOrDeclineOperationStatus]);\n\n  /**\n   * Handler for when the back button is clicked.\n   * @returns {void} void no return for function.\n   */\n  const onBackClickEvent = (): void => {\n    history.goBack();\n  };\n\n  const onApproveClicked = (): void => {\n    dispatch(approveOrDeclineAzureBenefitRequest(true, selectedUser.id, tenant));\n  };\n\n  const onDeclineClicked = (): void => {\n    dispatch(approveOrDeclineAzureBenefitRequest(false, selectedUser.id, tenant));\n  };\n\n  const items: ICommandBarItemProps[] = [\n    {\n      key: \"approveRequest\",\n      text: \"Approve\",\n      iconProps: { iconName: \"Accept\" },\n      onClick: (): void => {\n        onApproveClicked();\n      },\n    },\n    {\n      key: \"declineRequest\",\n      text: \"Decline\",\n      iconProps: { iconName: \"Cancel\" },\n      onClick: (): void => {\n        onDeclineClicked();\n      },\n    },\n  ];\n\n  if (azureBenefitRequestDetailsError !== \"\") {\n    return <div>{azureBenefitRequestDetailsError}</div>;\n  }\n\n  return (\n    <Stack styles={wrapperStackStyles}>\n      <Stack>\n        <ActionButton\n          iconProps={{ iconName: \"RevToggleKey\" }}\n          ariaLabel=\"Back to Search Items\"\n          onClick={onBackClickEvent}\n        >\n          Back to Search Items\n        </ActionButton>\n        <Stack tokens={containerStackTokens}>\n          <Stack styles={nameInfoStackStyles}>\n            <StackItem>\n              <Text styles={nameTextStyles}>\n                {`${selectedUser?.firstName} ${selectedUser?.lastName}`}\n              </Text>\n            </StackItem>\n            <Stack horizontal tokens={emailStackTokens}>\n              <StackItem>\n                <Text styles={emailTextStyles}>{`${selectedUser?.siteEmail}`}</Text>\n              </StackItem>\n            </Stack>\n          </Stack>\n          <Stack styles={mainContainerStyles}>\n            {canUpdateBenefit && (\n              <StackItem>\n                <CommandBar\n                  items={items}\n                  ariaLabel=\"Azure Benefit Request actions\"\n                  styles={commandBarStyles}\n                />\n              </StackItem>\n            )}\n            {approveOrDeclineError !== \"\" && (\n              <StackItem styles={errorMessageStyles}>\n                <p>Failed to approve or decline user.</p>\n              </StackItem>\n            )}\n            <ContainerWrapper>\n              <Stack styles={headerStackStyles}>\n                <Text styles={headerTextStyles}>Azure Offer Questionnaire</Text>\n              </Stack>\n              <Stack styles={bodyContainerStackStyles} tokens={bodyContainerStackTokens}>\n                {azureBenefitRequestDetails &&\n                  Object.keys(azureBenefitRequestDetails).map((q) => (\n                    <>\n                      <div\n                        key={`questionnaire-question-${Object.keys(\n                          azureBenefitRequestDetails\n                        ).indexOf(q)}`}\n                        style={{ margin: 0 }}\n                      >\n                        <Text styles={questionTextStyles}>{q}</Text>\n                        <Text styles={answerTextStyles}>{azureBenefitRequestDetails[q]}</Text>\n                      </div>\n                    </>\n                  ))}\n              </Stack>\n              <Stack styles={bodyContainerExpeditedStackStyles} tokens={bodyContainerStackTokens}>\n                <div>\n                  <Text styles={questionTextStyles}>Do you need this request expedited?</Text>\n                  <Text styles={answerTextStyles}>\n                    {azureBenefitRequestIsExpedited ? \"Yes\" : \"No\"}\n                  </Text>\n                  {azureBenefitRequestExpeditedByDate && (\n                    <Text styles={answerTextStyles}>\n                      {formatDate(azureBenefitRequestExpeditedByDate)}\n                    </Text>\n                  )}\n                </div>\n              </Stack>\n            </ContainerWrapper>\n          </Stack>\n        </Stack>\n      </Stack>\n    </Stack>\n  );\n};\n\nexport default AzureBenefitRequestDetailsContainer;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { TenantTypesEnum } from \"Constants/TenantTypes\";\nimport { IFilterValue } from \"Interfaces/IFilterValue\";\nimport { IVisualStudioBenefit } from \"Interfaces/VisualStudioBenefits/IVisualStudioBenefit\";\n\nimport {\n  DOWNLOAD_REQUESTS_TO_CSV,\n  DOWNLOAD_REQUESTS_TO_CSV_CLEAN,\n  DOWNLOAD_REQUESTS_TO_CSV_FAIL,\n  DOWNLOAD_REQUESTS_TO_CSV_SUCCESS,\n  UPDATE_VISUAL_STUDIO_BENEFIT_LISTING_CURRENT_PAGE,\n  UPDATE_VISUAL_STUDIO_BENEFIT_LISTING_PAGE_SIZE,\n  VISUAL_STUDIO_BENEFITS_FILTER_VALUE_ADD,\n  VISUAL_STUDIO_BENEFITS_FILTER_VALUE_CLEAR,\n  VISUAL_STUDIO_BENEFITS_FILTER_VALUE_REMOVE,\n  VISUAL_STUDIO_BENEFITS_FILTER_VALUE_UPDATE,\n  VISUAL_STUDIO_BENEFITS_SEARCH,\n  VISUAL_STUDIO_BENEFITS_SEARCH_FAIL,\n  VISUAL_STUDIO_BENEFITS_SEARCH_SUCCESS,\n} from \"./VisualStudioBenefitActionTypes\";\n\n/**\n * Action for when downloading visual studio\n * benefit requests.\n * @interface\n */\nexport interface IDownloadRequests {\n  type: typeof DOWNLOAD_REQUESTS_TO_CSV;\n  tenant: TenantTypesEnum;\n}\n\n/**\n * Action for when downloading visual studio\n * benefit requests.\n * @interface\n */\nexport interface IDownloadRequestsSuccess {\n  type: typeof DOWNLOAD_REQUESTS_TO_CSV_SUCCESS;\n  csvFile: any;\n}\n\n/**\n * Action for when downloading visual studio\n * benefit requests.\n * @interface\n */\nexport interface IDownloadRequestsFail {\n  type: typeof DOWNLOAD_REQUESTS_TO_CSV_FAIL;\n  errorMessage: string;\n}\n\n/**\n * Action for when after download clean the download state.\n * @interface\n */\nexport interface IDownloadRequestsToCSVClean {\n  type: typeof DOWNLOAD_REQUESTS_TO_CSV_CLEAN;\n}\n\n/**\n * Action for when searching visual studio benefits.\n * @interface\n */\nexport interface ISearchVisualStudioBenefits {\n  type: typeof VISUAL_STUDIO_BENEFITS_SEARCH;\n  tenant: TenantTypesEnum;\n  searchText: string;\n  selectedBenefitsFilterValues: IFilterValue[];\n  searchPage: number;\n  pageSize: number;\n}\n\n/**\n * Action for when benefits were searched successfully.\n * @interface\n */\nexport interface ISearchVisualStudioBenefitsSuccess {\n  type: typeof VISUAL_STUDIO_BENEFITS_SEARCH_SUCCESS;\n  benefits: IVisualStudioBenefit[];\n  searchPage: number;\n  pageSize: number;\n  filteredCount: number;\n}\n\n/**\n * Action for when loading benefits failed.\n * @interface\n */\nexport interface ISearchVisualStudioBenefitsFail {\n  type: typeof VISUAL_STUDIO_BENEFITS_SEARCH_FAIL;\n  error: string;\n}\n\n/**\n * Action for when updating listing current page\n * @interface\n */\nexport interface IUpdateCurrentPage {\n  type: typeof UPDATE_VISUAL_STUDIO_BENEFIT_LISTING_CURRENT_PAGE;\n  currentPage: number;\n}\n\n/**\n * Action for when updating listing page size\n * @interface\n */\nexport interface IUpdatePageSize {\n  type: typeof UPDATE_VISUAL_STUDIO_BENEFIT_LISTING_PAGE_SIZE;\n  pageSize: number;\n}\n\n/**\n * Action for when adding selected filter value.\n * @interface\n */\nexport interface IVisualStudioBenefitsFilterValueAdd {\n  type: typeof VISUAL_STUDIO_BENEFITS_FILTER_VALUE_ADD;\n  filterValue: IFilterValue;\n}\n\n/**\n * Action for when removing selected filter value.\n * @interface\n */\nexport interface IVisualStudioBenefitsFilterValueRemove {\n  type: typeof VISUAL_STUDIO_BENEFITS_FILTER_VALUE_REMOVE;\n  filterValue: IFilterValue;\n}\n\n/**\n * Action for when updating selected filter value.\n * @interface\n */\nexport interface IVisualStudioBenefitsFilterValueUpdate {\n  type: typeof VISUAL_STUDIO_BENEFITS_FILTER_VALUE_UPDATE;\n  filterValue: IFilterValue;\n}\n\n/**\n * Action for when clearing selected filter values.\n * @interface\n */\nexport interface IVisualStudioBenefitsFilterValueClear {\n  type: typeof VISUAL_STUDIO_BENEFITS_FILTER_VALUE_CLEAR;\n}\n\n/**\n * Action creator for VISUAL_STUDIO_BENEFITS_SEARCH.\n */\nexport function searchVisualStudioBenefits(\n  tenant: TenantTypesEnum,\n  searchText: string,\n  selectedBenefitsFilterValues: IFilterValue[],\n  searchPage: number,\n  pageSize: number\n): VisualStudioBenefitActionTypes {\n  return {\n    type: VISUAL_STUDIO_BENEFITS_SEARCH,\n    tenant,\n    searchText,\n    selectedBenefitsFilterValues,\n    searchPage,\n    pageSize,\n  };\n}\n\n/**\n * Action creator for VISUAL_STUDIO_BENEFITS_SEARCH_SUCCESS.\n * @param benefits the user profiles successfully searched.\n */\nexport function searchVisualStudioBenefitsSuccess(\n  benefits: IVisualStudioBenefit[],\n  searchPage: number,\n  pageSize: number,\n  filteredCount: number\n): ISearchVisualStudioBenefitsSuccess {\n  return {\n    type: VISUAL_STUDIO_BENEFITS_SEARCH_SUCCESS,\n    benefits,\n    searchPage,\n    pageSize,\n    filteredCount,\n  };\n}\n\n/**\n * Action creator for VISUAL_STUDIO_BENEFITS_SEARCH_FAIL.\n * @param error the error message from the API.\n */\nexport function searchVisualStudioBenefitsFail(error: string): ISearchVisualStudioBenefitsFail {\n  return {\n    type: VISUAL_STUDIO_BENEFITS_SEARCH_FAIL,\n    error,\n  };\n}\n\n/**\n * Action creator for UPDATE_VISUAL_STUDIO_BENEFIT_LISTING_CURRENT_PAGE.\n */\nexport function updateCurrentPage(currentPage: number): IUpdateCurrentPage {\n  return {\n    type: UPDATE_VISUAL_STUDIO_BENEFIT_LISTING_CURRENT_PAGE,\n    currentPage,\n  };\n}\n\n/**\n * Action creator for UPDATE_VISUAL_STUDIO_BENEFIT_LISTING_PAGE_SIZE.\n */\nexport function updatePageSize(pageSize: number): IUpdatePageSize {\n  return {\n    type: UPDATE_VISUAL_STUDIO_BENEFIT_LISTING_PAGE_SIZE,\n    pageSize,\n  };\n}\n\n/**\n * Action creator for VISUAL_STUDIO_BENEFITS_FILTER_VALUE_ADD.\n * @param error the error message from the API.\n */\nexport function addVisualStudioBenefitsFilterValue(\n  filterValue: IFilterValue\n): IVisualStudioBenefitsFilterValueAdd {\n  return {\n    type: VISUAL_STUDIO_BENEFITS_FILTER_VALUE_ADD,\n    filterValue,\n  };\n}\n\n/**\n * Action creator for VISUAL_STUDIO_BENEFITS_FILTER_VALUE_REMOVE.\n * @param error the error message from the API.\n */\nexport function removeVisualStudioBenefitsFilterValue(\n  filterValue: IFilterValue\n): IVisualStudioBenefitsFilterValueRemove {\n  return {\n    type: VISUAL_STUDIO_BENEFITS_FILTER_VALUE_REMOVE,\n    filterValue,\n  };\n}\n\n/**\n * Action creator for VISUAL_STUDIO_BENEFITS_FILTER_VALUE_UPDATE.\n * @param error the error message from the API.\n */\nexport function updateVisualStudioBenefitsFilterValue(\n  filterValue: IFilterValue\n): IVisualStudioBenefitsFilterValueUpdate {\n  return {\n    type: VISUAL_STUDIO_BENEFITS_FILTER_VALUE_UPDATE,\n    filterValue,\n  };\n}\n\n/**\n * Action creator for DOWNLOAD_REQUESTS_TO_CSV.\n * @param searchText the search text.\n * @param selectedApplicationsFilterValues selected applications current filter values.\n * @param tenant download tenant.\n */\nexport function downloadRequestsToCSV(tenant: TenantTypesEnum): IDownloadRequests {\n  return {\n    type: DOWNLOAD_REQUESTS_TO_CSV,\n    tenant,\n  };\n}\n\n/**\n * Action creator for DOWNLOAD_REQUESTS_TO_CSV_FAIL.\n * @param errorMessage the error message from the API.\n */\nexport function downloadRequestsToCSVFail(errorMessage: string): IDownloadRequestsFail {\n  return {\n    type: DOWNLOAD_REQUESTS_TO_CSV_FAIL,\n    errorMessage,\n  };\n}\n\n/**\n * Action creator for DOWNLOAD_REQUESTS_TO_CSV_SUCCESS.\n * @param csvFile the csv file from the API.\n */\nexport function downloadRequestsToCSVSuccess(csvFile: string): IDownloadRequestsSuccess {\n  return {\n    type: DOWNLOAD_REQUESTS_TO_CSV_SUCCESS,\n    csvFile,\n  };\n}\n\n/**\n * Action creator for DOWNLOAD_REQUESTS_TO_CSV_CLEAN.\n * @param csvFile the csv file from the API.\n */\nexport function downloadRequestsToCSVClean(): IDownloadRequestsToCSVClean {\n  return {\n    type: \"DOWNLOAD_REQUESTS_TO_CSV_CLEAN\",\n  };\n}\n\nexport function clearVisualStudioBenefitsFilterValue(): IVisualStudioBenefitsFilterValueClear {\n  return {\n    type: VISUAL_STUDIO_BENEFITS_FILTER_VALUE_CLEAR,\n  };\n}\n\nexport type VisualStudioBenefitActionTypes =\n  | IDownloadRequests\n  | IDownloadRequestsSuccess\n  | IDownloadRequestsFail\n  | IDownloadRequestsToCSVClean\n  | ISearchVisualStudioBenefits\n  | ISearchVisualStudioBenefitsSuccess\n  | ISearchVisualStudioBenefitsFail\n  | IUpdateCurrentPage\n  | IUpdatePageSize\n  | IVisualStudioBenefitsFilterValueAdd\n  | IVisualStudioBenefitsFilterValueClear\n  | IVisualStudioBenefitsFilterValueRemove\n  | IVisualStudioBenefitsFilterValueUpdate;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nexport const DOWNLOAD_REQUESTS_TO_CSV = \"DOWNLOAD_REQUESTS_TO_CSV\";\nexport const DOWNLOAD_REQUESTS_TO_CSV_FAIL = \"DOWNLOAD_REQUESTS_TO_CSV_FAIL\";\nexport const DOWNLOAD_REQUESTS_TO_CSV_SUCCESS = \"DOWNLOAD_REQUESTS_TO_CSV_SUCCESS\";\nexport const DOWNLOAD_REQUESTS_TO_CSV_CLEAN = \"DOWNLOAD_REQUESTS_TO_CSV_CLEAN\";\n\nexport const VISUAL_STUDIO_BENEFITS_SEARCH = \"VISUAL_STUDIO_BENEFITS_SEARCH\";\nexport const VISUAL_STUDIO_BENEFITS_SEARCH_SUCCESS = \"VISUAL_STUDIO_BENEFITS_SEARCH_SUCCESS\";\nexport const VISUAL_STUDIO_BENEFITS_SEARCH_FAIL = \"VISUAL_STUDIO_BENEFITS_SEARCH_FAIL\";\n\nexport const UPDATE_VISUAL_STUDIO_BENEFIT_LISTING_CURRENT_PAGE =\n  \"UPDATE_VISUAL_STUDIO_BENEFIT_LISTING_CURRENT_PAGE\";\nexport const UPDATE_VISUAL_STUDIO_BENEFIT_LISTING_PAGE_SIZE =\n  \"UPDATE_VISUAL_STUDIO_BENEFIT_LISTING_PAGE_SIZE\";\n\nexport const VISUAL_STUDIO_BENEFITS_FILTER_VALUE_ADD = \"VISUAL_STUDIO_BENEFITS_FILTER_VALUE_ADD\";\nexport const VISUAL_STUDIO_BENEFITS_FILTER_VALUE_CLEAR =\n  \"VISUAL_STUDIO_BENEFITS_FILTER_VALUE_CLEAR\";\nexport const VISUAL_STUDIO_BENEFITS_FILTER_VALUE_REMOVE =\n  \"VISUAL_STUDIO_BENEFITS_FILTER_VALUE_REMOVE\";\nexport const VISUAL_STUDIO_BENEFITS_FILTER_VALUE_UPDATE =\n  \"VISUAL_STUDIO_BENEFITS_FILTER_VALUE_UPDATE\";\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React from \"react\";\n\nimport { useDispatch } from \"react-redux\";\nimport { useHistory } from \"react-router\";\n\nimport Pagination from \"rc-pagination\";\n\nimport {\n  DetailsList,\n  DetailsListLayoutMode,\n  Dropdown,\n  IColumn,\n  IDetailsRowProps,\n  Link,\n  SelectionMode,\n  Spinner,\n  SpinnerSize,\n} from \"@fluentui/react\";\n\nimport * as VisualStudioBenefitActions from \"Dataflows/VisualStudioBenefit/VisualStudioBenefitAction\";\n\nimport ChevronIcon from \"Components/Common/ChevronIcon/ChevronIcon\";\nimport { PaginationRow } from \"Components/Common/Pagination/Pagination.styles\";\nimport { detailListStyles, spinnerStyles } from \"Components/Common/SharedListStyles.styles\";\nimport { getAzureBenefitRequestDetails } from \"Dataflows/AzureBenefitRequests/AzureBenefitRequestsAction\";\nimport { IAzureBenefitRequest } from \"Interfaces/AzureBenefitRequests/IAzureBenefitRequest\";\nimport { formatDate } from \"Utility/FormatHelper\";\n\nimport { IAzureRequestsListProps } from \"./IAzureRequestsListProps\";\n\nconst AzureRequestsList = (props: IAzureRequestsListProps) => {\n  const dispatch = useDispatch();\n  const history = useHistory();\n\n  const {\n    data,\n    loadAzureRequestsError,\n    isLoadingAzureRequests,\n    filteredCount,\n    currentPage,\n    pageSize,\n    tenant,\n  } = props;\n\n  const idLink = (id: number): React.ReactElement => {\n    return <Link>{id}</Link>;\n  };\n\n  const formatExpeditedField = (expedited: boolean): React.ReactElement =>\n    expedited ? <span>Yes</span> : <span>No</span>;\n\n  const columns: IColumn[] = [\n    {\n      key: \"id\",\n      name: \"ID\",\n      ariaLabel: \"Azure request ID\",\n      fieldName: \"id\",\n      minWidth: 160,\n      isResizable: true,\n      onRender: (item, _index, _column): React.ReactElement => idLink(item.id),\n    },\n    {\n      key: \"firstName\",\n      name: \"First Name\",\n      ariaLabel: \"First name\",\n      fieldName: \"firstName\",\n      minWidth: 160,\n      isResizable: true,\n    },\n    {\n      key: \"lastName\",\n      name: \"Last Name\",\n      ariaLabel: \"Last name\",\n      fieldName: \"lastName\",\n      minWidth: 160,\n      isResizable: true,\n    },\n    {\n      key: \"requestedDate\",\n      name: \"Date Requested\",\n      ariaLabel: \"Date Requested\",\n      fieldName: \"requestedDate\",\n      minWidth: 160,\n      isResizable: true,\n      onRender: (item) => formatDate(item.requestedDate),\n    },\n    {\n      key: \"expedited\",\n      name: \"Expedited\",\n      ariaLabel: \"Expedited\",\n      fieldName: \"expedited\",\n      minWidth: 160,\n      isResizable: true,\n      onRender: (item, _index, _column): React.ReactElement => formatExpeditedField(item.expedited),\n    },\n  ];\n\n  if (isLoadingAzureRequests) {\n    return <Spinner size={SpinnerSize.large} styles={spinnerStyles} />;\n  } else if (loadAzureRequestsError !== \"\") {\n    return <div>{loadAzureRequestsError}</div>;\n  }\n\n  const onClickAzureBenefitRequest = (userProfileId: number): void => {\n    dispatch(getAzureBenefitRequestDetails(userProfileId, tenant));\n    history.push(`/${tenant}/benefits/azureRequests/details/${userProfileId}`);\n  };\n\n  const onRenderRow = (props?: IDetailsRowProps, defaultRender?: any): React.ReactElement => {\n    const userProfileId = props?.item.userProfileId;\n    return defaultRender({\n      ...props,\n      onClick: () => onClickAzureBenefitRequest(userProfileId),\n    });\n  };\n\n  return (\n    <>\n      <DetailsList\n        items={data}\n        columns={columns}\n        selectionMode={SelectionMode.none}\n        getKey={(item: IAzureBenefitRequest): string => `${item.firstName}${item.requestedDate}`}\n        setKey=\"none\"\n        layoutMode={DetailsListLayoutMode.fixedColumns}\n        isHeaderVisible={true}\n        enterModalSelectionOnTouch={true}\n        onRenderRow={onRenderRow}\n        styles={detailListStyles}\n      />\n      <PaginationRow>\n        <Pagination\n          total={filteredCount}\n          onChange={(page) => dispatch(VisualStudioBenefitActions.updateCurrentPage(page))}\n          showTitle={false}\n          current={currentPage}\n          prevIcon={ChevronIcon(\"ChevronLeft\")}\n          nextIcon={ChevronIcon(\"ChevronRight\")}\n          pageSize={pageSize}\n          showSizeChanger\n        />\n        <Dropdown\n          options={[\n            { key: 16, text: \"Show 16 results\" },\n            { key: 32, text: \"Show 32 results\" },\n            { key: 48, text: \"Show 48 results\" },\n          ]}\n          onChange={(_e, op): void => {\n            dispatch(VisualStudioBenefitActions.updatePageSize(op?.key as number));\n          }}\n          selectedKey={pageSize}\n          className=\"pagination-dropdown\"\n          title=\"Page Size Dropdown\"\n        />\n      </PaginationRow>\n    </>\n  );\n};\n\nexport default AzureRequestsList;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { IFilterField } from \"Interfaces/IFilterField\";\nimport { IKeyText } from \"Interfaces/IKeyText\";\n\nimport { fieldTypes } from \"./FilterFields\";\n\nexport const defaultListingPageSize = 16;\n\nconst EXPEDITED = \"expedited\";\n\n/**\n * Dropdown options for the provisioned selector\n */\nexport const expeditedOptions: IKeyText[] = [\n  {\n    key: \"true\",\n    text: \"Yes\",\n  },\n  {\n    key: \"false\",\n    text: \"No\",\n  },\n];\n\n/**\n * Sidebar filter constants used for\n * visual studio benefits filtering.\n */\nexport const azureBenefitRequestsFilterFields: IFilterField[] = [\n  {\n    key: EXPEDITED,\n    text: \"Expedited\",\n    type: fieldTypes.EXPEDITED,\n    options: expeditedOptions,\n  },\n];\n\n/**\n * Default filter values for the azure benefit requests.\n */\nexport const defaultFilterValues: {\n  fieldName: string;\n  value: string;\n}[] = [];\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { useEffect, useState, ReactElement } from \"react\";\n\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { useParams } from \"react-router\";\n\nimport { PrimaryButton, SearchBox, Stack } from \"@fluentui/react\";\n\nimport * as AzureBenefitRequestsActions from \"Dataflows/AzureBenefitRequests/AzureBenefitRequestsAction\";\n\nimport AzureRequestsList from \"Components/AzureRequestsList/AzureRequestsList\";\nimport ListCounts from \"Components/Common/ListCounts/ListCounts\";\nimport { Title } from \"Components/Common/Results/Result.styles\";\nimport {\n  azureBenefitRequestsFilterFields,\n  defaultFilterValues,\n  defaultListingPageSize,\n} from \"Constants/AzureBenefitConstants\";\nimport {\n  buttonStackTokens,\n  containerStackStyles,\n  filterButtonStyles,\n  listStackStyles,\n  searchBoxStyles,\n  PaddedFlexRow,\n} from \"Containers/Common/CommonContainer.styles\";\nimport SideBarContainer from \"Containers/SideBarContainer/SideBarContainer\";\nimport {\n  getAzureBenefitRequests,\n  getAzureBenefitRequestsFilterValues,\n  getCurrentPage,\n  getFilteredCount,\n  getLoadAzureBenefitRequestsError,\n  getPageSize,\n  getSearchText,\n  isLoadingAzureBenefitRequests,\n} from \"Dataflows/AzureBenefitRequests/AzureBenefitRequestsSelector\";\nimport { IFilterValue } from \"Interfaces/IFilterValue\";\n\n/**\n * The Azure Benefit Requests Container.\n */\nconst AzureBenefitRequestsContainer: React.FunctionComponent = (): ReactElement => {\n  const dispatch = useDispatch();\n  const { tenant } = useParams<{ tenant: string }>();\n\n  const requests = useSelector(getAzureBenefitRequests);\n  const currentPage = useSelector(getCurrentPage);\n  const filteredCount = useSelector(getFilteredCount);\n  const isLoading = useSelector(isLoadingAzureBenefitRequests);\n  const loadAzureBenefitRequestsError = useSelector(getLoadAzureBenefitRequestsError);\n  const pageSize = useSelector(getPageSize);\n  const searchText = useSelector(getSearchText);\n  const azureBenefitRequestsFilterValues = useSelector(getAzureBenefitRequestsFilterValues);\n\n  const [searchTextState, setSearchTextState] = useState(searchText);\n\n  const handleSearch = (\n    searchValue: string,\n    selectedAzureBenefitRequestsFilterValues: IFilterValue[],\n    page: number,\n    pageSizeLocal: number\n  ): void => {\n    dispatch(\n      AzureBenefitRequestsActions.searchAzureBenefitRequests(\n        searchValue,\n        selectedAzureBenefitRequestsFilterValues,\n        page,\n        pageSizeLocal,\n        tenant\n      )\n    );\n  };\n\n  /**\n   * Call to reset the filter values.\n   * @method\n   */\n  const resetFilterValues = (): void => {\n    dispatch(AzureBenefitRequestsActions.clearAzureBenefitRequestsFilterValues());\n\n    setSearchTextState(\"\");\n    handleSearch(\"\", defaultFilterValues, 1, defaultListingPageSize);\n  };\n\n  useEffect(() => {\n    handleSearch(searchTextState, azureBenefitRequestsFilterValues, currentPage, pageSize);\n  }, [currentPage, pageSize, tenant]);\n\n  const onClear = (): void => {\n    handleSearch(\"\", azureBenefitRequestsFilterValues, 1, pageSize);\n  };\n\n  return (\n    <Stack horizontal styles={containerStackStyles}>\n      <Stack.Item disableShrink>\n        <SideBarContainer\n          addFilterValue={(filterValue) =>\n            dispatch(AzureBenefitRequestsActions.addAzureBenefitRequestsFilterValue(filterValue))\n          }\n          removeFilterValue={(filterValue) =>\n            dispatch(AzureBenefitRequestsActions.removeAzureBenefitRequestsFilterValue(filterValue))\n          }\n          updateFilterValue={(filterValue) =>\n            dispatch(AzureBenefitRequestsActions.updateAzureBenefitRequestsFilterValue(filterValue))\n          }\n          selectedFilterValues={azureBenefitRequestsFilterValues}\n          filterFields={azureBenefitRequestsFilterFields}\n        />\n        <Stack horizontal tokens={buttonStackTokens}>\n          <PrimaryButton\n            styles={filterButtonStyles()}\n            text=\"Apply\"\n            onClick={(): void =>\n              handleSearch(searchTextState, azureBenefitRequestsFilterValues, 1, pageSize)\n            }\n          />\n          <PrimaryButton styles={filterButtonStyles()} text=\"Reset\" onClick={resetFilterValues} />\n        </Stack>\n      </Stack.Item>\n      <Stack.Item grow styles={listStackStyles()}>\n        <PaddedFlexRow>\n          <Title>Azure Requests</Title>\n          <ListCounts total={filteredCount} loading={isLoading} />\n        </PaddedFlexRow>\n        <SearchBox\n          placeholder=\"Search requests\"\n          value={searchTextState}\n          onSearch={(searchValue: string): void =>\n            handleSearch(searchValue, azureBenefitRequestsFilterValues, 1, pageSize)\n          }\n          onChange={(event?: React.ChangeEvent<HTMLInputElement>, newValue?: string): void =>\n            setSearchTextState(newValue || \"\")\n          }\n          onClear={onClear}\n          styles={searchBoxStyles}\n        />\n        <AzureRequestsList\n          data={requests}\n          filteredCount={filteredCount}\n          pageSize={pageSize}\n          isLoadingAzureRequests={isLoading}\n          currentPage={currentPage}\n          loadAzureRequestsError={loadAzureBenefitRequestsError}\n          tenant={tenant}\n        />\n      </Stack.Item>\n    </Stack>\n  );\n};\n\nexport default AzureBenefitRequestsContainer;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { BenefitNameEnum } from \"Constants/BenefitConstants\";\nimport { TenantTypesEnum } from \"Constants/TenantTypes\";\nimport { IBenefit } from \"Interfaces/Benefits/IBenefit\";\nimport { IFilterValue } from \"Interfaces/IFilterValue\";\n\nimport {\n  BENEFITS_FILTER_VALUE_ADD,\n  BENEFITS_FILTER_VALUE_REMOVE,\n  BENEFITS_FILTER_VALUE_UPDATE,\n  BENEFITS_RESET,\n  BENEFITS_SEARCH,\n  BENEFITS_SEARCH_FAIL,\n  BENEFITS_SEARCH_SUCCESS,\n  UPDATE_BENEFIT_LISTING_CURRENT_PAGE,\n  UPDATE_BENEFIT_LISTING_PAGE_SIZE,\n} from \"./BenefitActionTypes\";\n\n/**\n * Action for when searching benefits.\n * @interface\n */\nexport interface ISearchBenefits {\n  type: typeof BENEFITS_SEARCH;\n  tenant: TenantTypesEnum;\n  benefitName: BenefitNameEnum;\n  searchText: string;\n  selectedBenefitsFilterValues: IFilterValue[];\n  searchPage: number;\n  pageSize: number;\n}\n\n/**\n * Action for when benefits were searched successfully.\n * @interface\n */\nexport interface ISearchBenefitsSuccess {\n  type: typeof BENEFITS_SEARCH_SUCCESS;\n  benefits: IBenefit[];\n  searchPage: number;\n  pageSize: number;\n  filteredCount: number;\n  unclaimedCount: number;\n}\n\n/**\n * Action for when loading benefits failed.\n * @interface\n */\nexport interface ISearchBenefitsFail {\n  type: typeof BENEFITS_SEARCH_FAIL;\n  error: string;\n}\n\nexport interface IResetBenefits {\n  type: typeof BENEFITS_RESET;\n}\n\n/**\n * Action for when updating listing current page\n * @interface\n */\nexport interface IUpdateCurrentPage {\n  type: typeof UPDATE_BENEFIT_LISTING_CURRENT_PAGE;\n  currentPage: number;\n}\n\n/**\n * Action for when updating listing page size\n * @interface\n */\nexport interface IUpdatePageSize {\n  type: typeof UPDATE_BENEFIT_LISTING_PAGE_SIZE;\n  pageSize: number;\n}\n\n/**\n * Action for when adding selected filter value.\n * @interface\n */\nexport interface IBenefitsFilterValueAdd {\n  type: typeof BENEFITS_FILTER_VALUE_ADD;\n  filterValue: IFilterValue;\n}\n\n/**\n * Action for when removing selected filter value.\n * @interface\n */\nexport interface IBenefitsFilterValueRemove {\n  type: typeof BENEFITS_FILTER_VALUE_REMOVE;\n  filterValue: IFilterValue;\n}\n\n/**\n * Action for when updating selected filter value.\n * @interface\n */\nexport interface IBenefitsFilterValueUpdate {\n  type: typeof BENEFITS_FILTER_VALUE_UPDATE;\n  filterValue: IFilterValue;\n}\n\n/**\n * Action creator for BENEFITS_SEARCH.\n */\nexport function searchBenefits(\n  tenant: TenantTypesEnum,\n  benefitName: BenefitNameEnum,\n  searchText: string,\n  selectedBenefitsFilterValues: IFilterValue[],\n  searchPage: number,\n  pageSize: number\n): BenefitActionTypes {\n  return {\n    type: BENEFITS_SEARCH,\n    tenant,\n    benefitName,\n    searchText,\n    selectedBenefitsFilterValues,\n    searchPage,\n    pageSize,\n  };\n}\n\n/**\n * Action creator for BENEFITS_SEARCH_SUCCESS.\n * @param benefits the user profiles successfully searched.\n */\nexport function searchBenefitsSuccess(\n  benefits: IBenefit[],\n  searchPage: number,\n  pageSize: number,\n  filteredCount: number,\n  unclaimedCount: number\n): BenefitActionTypes {\n  return {\n    type: BENEFITS_SEARCH_SUCCESS,\n    benefits,\n    searchPage,\n    pageSize,\n    filteredCount,\n    unclaimedCount,\n  };\n}\n\n/**\n * Action creator for BENEFITS_SEARCH_FAIL.\n * @param error the error message from the API.\n */\nexport function searchBenefitsFail(error: string): BenefitActionTypes {\n  return {\n    type: BENEFITS_SEARCH_FAIL,\n    error,\n  };\n}\n\nexport function resetBenefits(): IResetBenefits {\n  return {\n    type: BENEFITS_RESET,\n  };\n}\n\n/**\n * Action creator for UPDATE_BENEFIT_LISTING_CURRENT_PAGE.\n */\nexport function updateCurrentPage(currentPage: number): BenefitActionTypes {\n  return {\n    type: UPDATE_BENEFIT_LISTING_CURRENT_PAGE,\n    currentPage,\n  };\n}\n\n/**\n * Action creator for UPDATE_BENEFIT_LISTING_PAGE_SIZE.\n */\nexport function updatePageSize(pageSize: number): BenefitActionTypes {\n  return {\n    type: UPDATE_BENEFIT_LISTING_PAGE_SIZE,\n    pageSize,\n  };\n}\n\n/**\n * Action creator for BENEFITS_FILTER_VALUE_ADD.\n * @param error the error message from the API.\n */\nexport function addBenefitsFilterValue(filterValue: IFilterValue): BenefitActionTypes {\n  return {\n    type: BENEFITS_FILTER_VALUE_ADD,\n    filterValue,\n  };\n}\n\n/**\n * Action creator for BENEFITS_FILTER_VALUE_REMOVE.\n * @param error the error message from the API.\n */\nexport function removeBenefitsFilterValue(filterValue: IFilterValue): BenefitActionTypes {\n  return {\n    type: BENEFITS_FILTER_VALUE_REMOVE,\n    filterValue,\n  };\n}\n\n/**\n * Action creator for BENEFITS_FILTER_VALUE_UPDATE.\n * @param error the error message from the API.\n */\nexport function updateBenefitsFilterValue(filterValue: IFilterValue): BenefitActionTypes {\n  return {\n    type: BENEFITS_FILTER_VALUE_UPDATE,\n    filterValue,\n  };\n}\n\nexport type BenefitActionTypes =\n  | ISearchBenefits\n  | ISearchBenefitsSuccess\n  | ISearchBenefitsFail\n  | IResetBenefits\n  | IUpdateCurrentPage\n  | IUpdatePageSize\n  | IBenefitsFilterValueAdd\n  | IBenefitsFilterValueRemove\n  | IBenefitsFilterValueUpdate;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nexport const BENEFITS_SEARCH = \"BENEFITS_SEARCH\";\nexport const BENEFITS_SEARCH_SUCCESS = \"BENEFITS_SEARCH_SUCCESS\";\nexport const BENEFITS_SEARCH_FAIL = \"BENEFITS_SEARCH_FAIL\";\n\nexport const BENEFITS_RESET = \"BENEFITS_RESET\";\n\nexport const UPDATE_BENEFIT_LISTING_CURRENT_PAGE = \"UPDATE_BENEFIT_LISTING_CURRENT_PAGE\";\nexport const UPDATE_BENEFIT_LISTING_PAGE_SIZE = \"UPDATE_BENEFIT_LISTING_PAGE_SIZE\";\n\nexport const BENEFITS_FILTER_VALUE_ADD = \"BENEFITS_FILTER_VALUE_ADD\";\nexport const BENEFITS_FILTER_VALUE_REMOVE = \"BENEFITS_FILTER_VALUE_REMOVE\";\nexport const BENEFITS_FILTER_VALUE_UPDATE = \"BENEFITS_FILTER_VALUE_UPDATE\";\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nexport const AWARD_KIT_SKU_LOAD = \"AWARD_KIT_SKU_LOAD\";\nexport const AWARD_KIT_SKU_LOAD_SUCCESS = \"AWARD_KIT_SKU_LOAD_SUCCESS\";\nexport const AWARD_KIT_SKU_LOAD_FAILURE = \"AWARD_KIT_SKU_LOAD_FAILURE\";\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\nimport { IAwardKitSkuOption } from \"Interfaces/SiteContent/IAwardKitSkuOption\";\n\nimport {\n  AWARD_KIT_SKU_LOAD,\n  AWARD_KIT_SKU_LOAD_FAILURE,\n  AWARD_KIT_SKU_LOAD_SUCCESS,\n} from \"./AwardKitSkuActionTypes\";\n\n/**\n * Action for getting the SKU\n */\nexport interface IGetAwardKitSku {\n  type: typeof AWARD_KIT_SKU_LOAD;\n}\n\n/**\n * Action getting the SKU when successful\n */\nexport interface IGetAwardKitSkuSuccess {\n  type: typeof AWARD_KIT_SKU_LOAD_SUCCESS;\n  awardKitSku: IAwardKitSkuOption[];\n}\n\n/**\n * Action getting the SKU when failure\n */\nexport interface IGetAwardKitSkuFailure {\n  type: typeof AWARD_KIT_SKU_LOAD_FAILURE;\n  awardKitSkuLoadError: string;\n}\n\n/**\n * Action creator for getting the SKU\n */\nexport const getAwardKitSku = (): IGetAwardKitSku => ({\n  type: AWARD_KIT_SKU_LOAD,\n});\n\n/**\n * Action creator for getting SKU when success\n * @param awardKitSku\n */\nexport const getAwardKitSkuSuccess = (\n  awardKitSku: IAwardKitSkuOption[]\n): IGetAwardKitSkuSuccess => ({\n  type: AWARD_KIT_SKU_LOAD_SUCCESS,\n  awardKitSku,\n});\n\n/**\n * Action creator for getting SKU when failure\n * @param awardKitSkuLoadError\n */\nexport const getAwardKitSkuFailure = (awardKitSkuLoadError: string): IGetAwardKitSkuFailure => ({\n  type: AWARD_KIT_SKU_LOAD_FAILURE,\n  awardKitSkuLoadError,\n});\n\nexport type AwardKitSkuAction = IGetAwardKitSku | IGetAwardKitSkuSuccess | IGetAwardKitSkuFailure;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React from \"react\";\n\nimport Pagination from \"rc-pagination\";\n\nimport {\n  DetailsList,\n  DetailsListLayoutMode,\n  Dropdown,\n  IColumn,\n  SelectionMode,\n  Spinner,\n  SpinnerSize,\n} from \"@fluentui/react\";\n\nimport * as BenefitConstants from \"Constants/BenefitConstants\";\n\nimport ChevronIcon from \"Components/Common/ChevronIcon/ChevronIcon\";\nimport { PaginationRow } from \"Components/Common/Pagination/Pagination.styles\";\nimport { detailListStyles, spinnerStyles } from \"Components/Common/SharedListStyles.styles\";\nimport StatusElement from \"Components/Common/Status/StatusElement\";\nimport { IBenefit } from \"Interfaces/Benefits/IBenefit\";\nimport { formatDate } from \"Utility/FormatHelper\";\nimport { IBenefitsListProps } from \"./IBenefitsListProps\";\n\nconst BenefitsList: React.FunctionComponent<IBenefitsListProps> = (props) => {\n  const {\n    data,\n    actions,\n    loadBenefitsError,\n    isLoadingBenefits,\n    filteredCount,\n    currentPage,\n    pageSize,\n    hasSwagKitCol,\n    hasCountryCodePoolCol,\n    hasSkuCol,\n    benefitName,\n  } = props;\n\n  const formatDisplayDate = (incomingDate: Date | undefined): React.ReactElement => {\n    if (incomingDate) {\n      return <span>{formatDate(incomingDate)}</span>;\n    } else {\n      return <></>;\n    }\n  };\n\n  const formatStatusColumn = (statusKey: string): React.ReactElement => {\n    return <StatusElement statusValue={statusKey} />;\n  };\n\n  /**\n   * Handle display of country-code based on EEA/ROW\n   * @param poolType type of code\n   * @returns\n   */\n  const formatCountryCodeColumn = (poolType): React.ReactElement => {\n    if (poolType) {\n      let labelText = \"\";\n      if (benefitName == BenefitConstants.BenefitNameEnum.O365) {\n        const getLabel = BenefitConstants.o365CountryCodePool.find((x) =>\n          x.values?.includes(poolType)\n        );\n        labelText = getLabel && getLabel.text ? getLabel.text : \"\";\n      } else if (benefitName == BenefitConstants.BenefitNameEnum.MS365) {\n        const getLabel = BenefitConstants.ms365CountryCodePool.find((x) => x.key == poolType);\n        labelText = getLabel && getLabel.text ? getLabel.text : \"\";\n      } else {\n        const getLabel = BenefitConstants.teamsCountryCodePool.find((x) => x.key == poolType);\n        labelText = getLabel && getLabel.text ? getLabel.text : \"\";\n      }\n      return <span>{labelText}</span>;\n    } else {\n      return <></>;\n    }\n  };\n\n  const columns: IColumn[] = [\n    {\n      key: \"batchId\",\n      name: \"Batch ID\",\n      ariaLabel: \"Batch ID\",\n      fieldName: \"batchId\",\n      minWidth: 80,\n      isResizable: true,\n    },\n    {\n      key: \"key\",\n      name: \"Code\",\n      ariaLabel: \"Code\",\n      fieldName: \"key\",\n      minWidth: 100,\n      isResizable: true,\n      isSorted: false,\n    },\n    {\n      key: \"status\",\n      name: \"Status\",\n      ariaLabel: \"Status\",\n      fieldName: \"status\",\n      minWidth: 100,\n      onRender: (item: IBenefit): React.ReactElement => {\n        return formatStatusColumn(item.status);\n      },\n      isResizable: true,\n    },\n    {\n      key: \"uploadDate\",\n      name: \"Code Uploaded Date\",\n      ariaLabel: \"Date code was uploaded\",\n      fieldName: \"uploadDate\",\n      minWidth: 160,\n      onRender: (item: IBenefit): React.ReactElement => {\n        return formatDisplayDate(item.dateUploaded);\n      },\n      isResizable: true,\n    },\n    {\n      key: \"expirationDate\",\n      name: \"Code Expiration Date\",\n      ariaLabel: \"Date code expires\",\n      fieldName: \"expirationDate\",\n      minWidth: 160,\n      onRender: (item: IBenefit): React.ReactElement => {\n        return formatDisplayDate(item.keyExpirationDate);\n      },\n    },\n    {\n      key: \"claimedDate\",\n      name: \"Code Claimed Date\",\n      ariaLabel: \"Date code was claimed\",\n      fieldName: \"claimedDate\",\n      minWidth: 160,\n      onRender: (item: IBenefit): React.ReactElement => {\n        return formatDisplayDate(item.dateClaimed);\n      },\n      isResizable: true,\n    },\n    {\n      key: \"awardPeriodName\",\n      name: \"Award Period\",\n      ariaLabel: \"Name of Award Period code was claimed during\",\n      fieldName: \"awardPeriodName\",\n      minWidth: 160,\n      isResizable: true,\n    },\n    {\n      key: \"userProfileId\",\n      name: \"User ID\",\n      ariaLabel: \"User ID of the assigned user\",\n      fieldName: \"userProfileId\",\n      minWidth: 80,\n      isResizable: true,\n    },\n    {\n      key: \"assignedTo\",\n      name: \"Assigned to (User Email)\",\n      ariaLabel: \"Assigned to (User Email)\",\n      fieldName: \"assignedTo\",\n      minWidth: 160,\n      isResizable: true,\n    },\n    {\n      key: \"claimedBy\",\n      name: \"Claimed by (User Email)\",\n      ariaLabel: \"Claimed by (User Email)\",\n      fieldName: \"claimedBy\",\n      minWidth: 160,\n      isResizable: true,\n    },\n  ];\n\n  /**\n   * Add field in table-column for Benefits : Teams and O365\n   */\n  if (hasCountryCodePoolCol) {\n    const copyObject = Object.assign(BenefitConstants.CountryCodePoolColumn);\n    (copyObject.onRender = (item: IBenefit): React.ReactElement => {\n      return formatCountryCodeColumn(item.countryCodePoolName);\n    }),\n      columns.splice(1, 0, copyObject);\n  }\n\n  /**\n   * Add field in table-column for Benefits : MVP Award Kit\n   */\n  if (hasSkuCol) {\n    const copyObject = Object.assign(BenefitConstants.SKUColumn);\n    columns.splice(1, 0, copyObject);\n  }\n\n  /**\n   * Add field in table-column for Benefits : Swag Kit\n   */\n  if (hasSwagKitCol) {\n    const copyObject = Object.assign(BenefitConstants.SwagKitColumn);\n    columns.splice(1, 0, copyObject);\n  }\n\n  if (isLoadingBenefits) {\n    return <Spinner size={SpinnerSize.large} styles={spinnerStyles} />;\n  } else if (loadBenefitsError !== \"\") {\n    return <div>{loadBenefitsError}</div>;\n  }\n\n  return (\n    <>\n      <DetailsList\n        items={data}\n        columns={columns}\n        selectionMode={SelectionMode.none}\n        getKey={(item: IBenefit): string => `${item.batchId}${item.key}`}\n        setKey=\"none\"\n        layoutMode={DetailsListLayoutMode.fixedColumns}\n        isHeaderVisible={true}\n        //onRenderRow={onRenderRow}\n        //onRenderItemColumn={onRenderColumn}\n        enterModalSelectionOnTouch={true}\n        styles={detailListStyles}\n      />\n      <PaginationRow>\n        <Pagination\n          total={filteredCount}\n          onChange={(page) => actions.updateCurrentPage(page)}\n          showTitle={false}\n          current={currentPage}\n          prevIcon={ChevronIcon(\"ChevronLeft\")}\n          nextIcon={ChevronIcon(\"ChevronRight\")}\n          pageSize={pageSize}\n          showSizeChanger\n        />\n        <Dropdown\n          options={[\n            { key: 16, text: \"Show 16 results\" },\n            { key: 32, text: \"Show 32 results\" },\n            { key: 48, text: \"Show 48 results\" },\n          ]}\n          onChange={(_e, op): void => {\n            actions.updatePageSize(op?.key as number);\n          }}\n          selectedKey={pageSize}\n          className=\"pagination-dropdown\"\n          title=\"Page Size Dropdown\"\n        />\n      </PaginationRow>\n    </>\n  );\n};\n\nexport default BenefitsList;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { BenefitNameEnum } from \"Constants/BenefitConstants\";\nimport { TenantTypesEnum } from \"Constants/TenantTypes\";\nimport { IBenefit } from \"Interfaces/Benefits/IBenefit\";\nimport { IFilterValue } from \"Interfaces/IFilterValue\";\n\nimport { IBenefitState } from \"./IBenefitState\";\n\nexport const getBenefits = (benefitState: IBenefitState): IBenefit[] => benefitState.benefits;\nexport const isLoadingBenefits = (benefitState: IBenefitState): boolean =>\n  benefitState.isLoadingBenefits;\nexport const getLoadBenefitsError = (benefitState: IBenefitState): string =>\n  benefitState.loadBenefitsError;\nexport const getCurrentPage = (benefitState: IBenefitState): number => benefitState.currentPage;\nexport const getPageSize = (benefitState: IBenefitState): number => benefitState.pageSize;\nexport const getSearchText = (benefitState: IBenefitState): string => benefitState.searchText;\nexport const getFilteredCount = (benefitState: IBenefitState): number => benefitState.filteredCount;\nexport const getUnclaimedCount = (benefitState: IBenefitState): number =>\n  benefitState.unclaimedCount;\nexport const getBenefitsFilterValues = (benefitState: IBenefitState): IFilterValue[] =>\n  benefitState.benefitsFilterValues;\nexport const getCurrentTenant = (benefitState: IBenefitState): TenantTypesEnum | undefined =>\n  benefitState.currentTenant;\nexport const getCurrentBenefitName = (benefitState: IBenefitState): BenefitNameEnum | undefined =>\n  benefitState.currentBenefitName;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { useEffect, useState, ReactElement } from \"react\";\n\nimport { connect, useDispatch } from \"react-redux\";\nimport { useHistory, useParams } from \"react-router\";\nimport { bindActionCreators, Dispatch } from \"redux\";\n\nimport { PrimaryButton, SearchBox, Stack } from \"@fluentui/react\";\n\nimport * as BenefitConstants from \"Constants/BenefitConstants\";\nimport * as BenefitActions from \"Dataflows/Benefit/BenefitAction\";\nimport * as AwardKitSkuAction from \"Dataflows/AwardKitSku/AwardKitSkuAction\";\n\nimport BenefitsList from \"Components/BenefitsList/BenefitsList\";\nimport ListCounts from \"Components/Common/ListCounts/ListCounts\";\nimport { ResultCount } from \"Components/Common/ListCounts/ListCounts.styles\";\nimport { Title } from \"Components/Common/Results/Result.styles\";\nimport { SubSiteUrlRootPath } from \"Constants/TenantTypes\";\nimport {\n  buttonStackTokens,\n  containerStackStyles,\n  filterButtonStyles,\n  listStackStyles,\n  searchBoxStyles,\n  tableStackStyles,\n  PaddedFlexRow,\n} from \"Containers/Common/CommonContainer.styles\";\nimport SideBarContainer from \"Containers/SideBarContainer/SideBarContainer\";\nimport {\n  getBenefits,\n  getBenefitsFilterValues,\n  getCurrentBenefitName,\n  getCurrentPage,\n  getCurrentTenant,\n  getFilteredCount,\n  getLoadBenefitsError,\n  getPageSize,\n  getSearchText,\n  getUnclaimedCount,\n  isLoadingBenefits,\n} from \"Dataflows/Benefit/BenefitSelector\";\nimport { AppState } from \"Dataflows/Reducers\";\n\nimport { IFilterValue } from \"Interfaces/IFilterValue\";\nimport { IFilterField } from \"Interfaces/IFilterField\";\n\nimport { IBenefitsContainerMatchProps, IBenefitsContainerProps } from \"./IBenefitsContainerProps\";\n\nconst BenefitsContainer: React.FunctionComponent<IBenefitsContainerProps> = (\n  props: IBenefitsContainerProps\n): ReactElement => {\n  const {\n    benefits,\n    isLoadingBenefits,\n    loadBenefitsError,\n    currentPage,\n    pageSize,\n    filteredCount,\n    unclaimedCount,\n    benefitsFilterValues,\n    currentTenant,\n    currentBenefitName,\n    actions: {\n      searchBenefits,\n      updateCurrentPage,\n      updatePageSize,\n      addBenefitsFilterValue,\n      updateBenefitsFilterValue,\n      removeBenefitsFilterValue,\n      resetBenefits,\n    },\n  } = props;\n\n  const [searchText, setSearchText] = useState(props.searchText);\n\n  const dispatch = useDispatch();\n  const history = useHistory();\n  const routeParams = useParams<IBenefitsContainerMatchProps>();\n  const tenant = SubSiteUrlRootPath[routeParams.tenant];\n\n  //Map Route Param to BenefitNameEnum\n  const benefitNameKey = Object.keys(BenefitConstants.BenefitNameEnum).find(\n    (x) => x.toLowerCase() == routeParams.benefitType?.toLowerCase()\n  ) as BenefitConstants.BenefitNameEnum;\n\n  if (!tenant || !benefitNameKey) {\n    history.push(\"/notFound\");\n  }\n\n  const benefitName =\n    benefitNameKey == BenefitConstants.BenefitNameEnum.O365\n      ? BenefitConstants.BenefitNameEnum.M365\n      : BenefitConstants.BenefitNameEnum[benefitNameKey];\n  const benefitDisplayName = BenefitConstants.BenefitDisplayNameEnum[benefitNameKey];\n\n  const handleSearch = (\n    searchValue: string,\n    selectedBenefitsFilterValues: IFilterValue[],\n    page: number,\n    pageSizeLocal: number\n  ): void => {\n    searchBenefits(\n      tenant,\n      benefitName,\n      searchValue,\n      selectedBenefitsFilterValues,\n      page,\n      pageSizeLocal\n    );\n  };\n\n  /**\n   * Call to reset filter values.\n   * @method\n   */\n  const resetFilterValues = (): void => {\n    resetBenefits();\n\n    setSearchText(\"\");\n    handleSearch(\n      \"\",\n      BenefitConstants.defaultFilterValues,\n      1,\n      BenefitConstants.defaultListingPageSize\n    );\n\n    // Get list of SKU for Award Kit benefit\n    if (routeParams.benefitType === BenefitConstants.BenefitsSubSiteUrlPath.awardKit) {\n      dispatch(AwardKitSkuAction.getAwardKitSku());\n    }\n  };\n\n  useEffect(() => {\n    if (isLoadingBenefits) return;\n\n    if (tenant !== currentTenant || benefitName !== currentBenefitName) {\n      resetFilterValues();\n      return;\n    }\n\n    handleSearch(searchText, benefitsFilterValues, currentPage, pageSize);\n  }, [currentPage, pageSize, tenant, benefitName]);\n\n  const onClear = (): void => {\n    handleSearch(\"\", benefitsFilterValues, 1, pageSize);\n  };\n\n  const renderUnclaimedCount = (): React.ReactElement => {\n    if (isLoadingBenefits) return <ResultCount />;\n\n    return <ResultCount>Unclaimed: {unclaimedCount}</ResultCount>;\n  };\n\n  /**\n   * Get additional filters for Benefit.\n   * O365, Teams and Award Kit\n   * @returns Filters based on Benefit\n   */\n  const getFilterFields = (): IFilterField[] => {\n    switch (routeParams.benefitType) {\n      case BenefitConstants.BenefitsSubSiteUrlPath.O365:\n        return BenefitConstants.benefitO365FilterWithCountryCodePool;\n      case BenefitConstants.BenefitsSubSiteUrlPath.MS365:\n          return BenefitConstants.benefitMS365FilterWithCountryCodePool;  \n      case BenefitConstants.BenefitsSubSiteUrlPath.teams:\n        return BenefitConstants.benefitTeamsFilterWithCountryCodePool;\n      case BenefitConstants.BenefitsSubSiteUrlPath.awardKit:\n        return BenefitConstants.benefitAwardKitFilter;\n      case BenefitConstants.BenefitsSubSiteUrlPath.swagKit:\n        return BenefitConstants.benefitSwagKitFilter;\n      default:\n        return BenefitConstants.benefitFilterFields;\n    }\n  };\n\n  return (\n    <Stack horizontal styles={containerStackStyles}>\n      <Stack.Item disableShrink>\n        <SideBarContainer\n          addFilterValue={addBenefitsFilterValue}\n          removeFilterValue={removeBenefitsFilterValue}\n          updateFilterValue={updateBenefitsFilterValue}\n          selectedFilterValues={benefitsFilterValues}\n          filterFields={getFilterFields()}\n        />\n        <Stack horizontal tokens={buttonStackTokens}>\n          <PrimaryButton\n            styles={filterButtonStyles()}\n            text=\"Apply\"\n            onClick={(): void => handleSearch(searchText, benefitsFilterValues, 1, pageSize)}\n          />\n          <PrimaryButton styles={filterButtonStyles()} text=\"Reset\" onClick={resetFilterValues} />\n        </Stack>\n      </Stack.Item>\n      <Stack.Item grow styles={listStackStyles()}>\n        <Stack styles={tableStackStyles}>\n          <PaddedFlexRow>\n            <Title>Benefits - {benefitDisplayName}</Title>\n            <ListCounts total={filteredCount} loading={isLoadingBenefits} />\n            &nbsp; &nbsp; &nbsp;\n            {renderUnclaimedCount()}\n          </PaddedFlexRow>\n          <SearchBox\n            placeholder=\"Search benefits\"\n            value={searchText}\n            onSearch={(searchValue: string): void =>\n              handleSearch(searchValue, benefitsFilterValues, 1, pageSize)\n            }\n            onChange={(event?: React.ChangeEvent<HTMLInputElement>, newValue?: string): void =>\n              setSearchText(newValue || \"\")\n            }\n            onClear={onClear}\n            styles={searchBoxStyles}\n          />\n          <BenefitsList\n            data={benefits}\n            filteredCount={filteredCount}\n            pageSize={pageSize}\n            isLoadingBenefits={isLoadingBenefits}\n            currentPage={currentPage}\n            loadBenefitsError={loadBenefitsError}\n            hasSwagKitCol={BenefitConstants.additionalFilter.swagKit.includes(\n              routeParams.benefitType\n            )}\n            hasCountryCodePoolCol={BenefitConstants.additionalFilter.countryCodePool.includes(\n              routeParams.benefitType\n            )}\n            hasSkuCol={BenefitConstants.additionalFilter.sku.includes(routeParams.benefitType)}\n            benefitName={routeParams.benefitType}\n            actions={{ updateCurrentPage, updatePageSize }}\n          />\n        </Stack>\n      </Stack.Item>\n    </Stack>\n  );\n};\n\nconst mapStateToProps = (state: AppState) => ({\n  benefits: getBenefits(state.benefitState),\n  isLoadingBenefits: isLoadingBenefits(state.benefitState),\n  loadBenefitsError: getLoadBenefitsError(state.benefitState),\n  currentPage: getCurrentPage(state.benefitState),\n  pageSize: getPageSize(state.benefitState),\n  searchText: getSearchText(state.benefitState),\n  filteredCount: getFilteredCount(state.benefitState),\n  unclaimedCount: getUnclaimedCount(state.benefitState),\n  benefitsFilterValues: getBenefitsFilterValues(state.benefitState),\n  currentTenant: getCurrentTenant(state.benefitState),\n  currentBenefitName: getCurrentBenefitName(state.benefitState),\n});\n\n/**\n * Maps Component's dispatch/handler props to redux state\n * @param {Dispatch} dispatch The dispatch.\n */\nconst mapDispatchToProps = (dispatch: Dispatch<BenefitActions.BenefitActionTypes>) => ({\n  actions: {\n    searchBenefits: bindActionCreators(BenefitActions.searchBenefits, dispatch),\n    updateCurrentPage: bindActionCreators(BenefitActions.updateCurrentPage, dispatch),\n    updatePageSize: bindActionCreators(BenefitActions.updatePageSize, dispatch),\n    addBenefitsFilterValue: bindActionCreators(BenefitActions.addBenefitsFilterValue, dispatch),\n    updateBenefitsFilterValue: bindActionCreators(\n      BenefitActions.updateBenefitsFilterValue,\n      dispatch\n    ),\n    removeBenefitsFilterValue: bindActionCreators(\n      BenefitActions.removeBenefitsFilterValue,\n      dispatch\n    ),\n    resetBenefits: bindActionCreators(BenefitActions.resetBenefits, dispatch),\n  },\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(BenefitsContainer);\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { ReactElement } from \"react\";\n\nimport Pagination from \"rc-pagination\";\n\nimport {\n  DetailsList,\n  DetailsListLayoutMode,\n  Dropdown,\n  IColumn,\n  SelectionMode,\n  Spinner,\n  SpinnerSize,\n} from \"@fluentui/react\";\n\nimport ChevronIcon from \"Components/Common/ChevronIcon/ChevronIcon\";\nimport { PaginationRow } from \"Components/Common/Pagination/Pagination.styles\";\nimport { detailListStyles, spinnerStyles } from \"Components/Common/SharedListStyles.styles\";\nimport StatusElement from \"Components/Common/Status/StatusElement\";\nimport { M365CopilotBenefitActionTypes } from \"Dataflows/M365CopilotBenefit/M365CopilotBenefitAction\";\nimport { IM365CopilotBenefit } from \"Interfaces/Benefits/IM365CopilotBenefit\";\nimport { formatDate } from \"Utility/FormatHelper\";\n\nimport { IM365CopilotBenefitListProps } from \"./IM365CopilotBenefitListProps\";\n\n/**\n * M365CopilotBenefitList component\n * @param props - the props for the component\n * @returns the element\n */\nconst M365CopilotBenefitList = (props: IM365CopilotBenefitListProps): ReactElement => {\n  const {\n    data,\n    loadM365CopilotBenefitError,\n    isLoadingM365CopilotBenefit,\n    filteredCount,\n    currentPage,\n    pageSize,\n    actions: { updateCurrentPage, updatePageSize },\n  } = props;\n\n  const formatDisplayDate = (incomingDate: Date | undefined): React.ReactElement => {\n    if (incomingDate) {\n      return <span>{formatDate(incomingDate)}</span>;\n    } else {\n      return <></>;\n    }\n  };\n\n  const formatStatusColumn = (statusKey: string): React.ReactElement => {\n    return <StatusElement statusValue={statusKey} />;\n  };\n\n  const columns: IColumn[] = [\n    {\n      key: \"userId\",\n      name: \"User ID\",\n      ariaLabel: \"User ID\",\n      fieldName: \"userId\",\n      minWidth: 70,\n      isResizable: true,\n    },\n    {\n      key: \"copilotTenantId\",\n      name: \"Tenant Id\",\n      ariaLabel: \"The copilot tenant id\",\n      fieldName: \"copilotTenantId\",\n      minWidth: 240,\n      isResizable: true,\n    },\n    {\n      key: \"claimedDate\",\n      name: \"Claimed Date\",\n      ariaLabel: \"Date user claim copilot tenant successfully\",\n      fieldName: \"claimedDate\",\n      minWidth: 150,\n      onRender: (item: IM365CopilotBenefit): React.ReactElement => {\n        return formatDisplayDate(item.claimedDate);\n      },\n      isResizable: true,\n    },\n    {\n      key: \"claimedBy\",\n      name: \"Claimed by (User Email)\",\n      ariaLabel: \"Claimed by (User Email)\",\n      fieldName: \"claimedBy\",\n      minWidth: 180,\n      isResizable: true,\n    },\n    {\n      key: \"assignedTo\",\n      name: \"Assigned to (User Email)\",\n      ariaLabel: \"Assigned to (User Email)\",\n      fieldName: \"assignedTo\",\n      minWidth: 180,\n      isResizable: true,\n    },\n    {\n      key: \"awardPeriod\",\n      name: \"Award Period\",\n      ariaLabel: \"Name of Award Period code was claimed during\",\n      fieldName: \"awardPeriod\",\n      minWidth: 160,\n      isResizable: true,\n    },\n  ];\n\n  if (isLoadingM365CopilotBenefit) {\n    return <Spinner size={SpinnerSize.large} styles={spinnerStyles} />;\n  } else if (loadM365CopilotBenefitError !== \"\") {\n    return <div>{loadM365CopilotBenefitError}</div>;\n  }\n\n  return (\n    <>\n      <DetailsList\n        items={data}\n        columns={columns}\n        selectionMode={SelectionMode.none}\n        getKey={(item: IM365CopilotBenefit): string => `${item.userId}${item.copilotTenantId}`}\n        setKey=\"none\"\n        layoutMode={DetailsListLayoutMode.fixedColumns}\n        isHeaderVisible={true}\n        enterModalSelectionOnTouch={true}\n        styles={detailListStyles}\n      />\n      <PaginationRow>\n        <Pagination\n          total={filteredCount}\n          onChange={(page): M365CopilotBenefitActionTypes => updateCurrentPage(page)}\n          showTitle={false}\n          current={currentPage}\n          prevIcon={ChevronIcon(\"ChevronLeft\")}\n          nextIcon={ChevronIcon(\"ChevronRight\")}\n          pageSize={pageSize}\n          showSizeChanger\n        />\n        <Dropdown\n          options={[\n            { key: 16, text: \"Show 16 results\" },\n            { key: 32, text: \"Show 32 results\" },\n            { key: 48, text: \"Show 48 results\" },\n          ]}\n          onChange={(_e, op): void => {\n            updatePageSize(op?.key as number);\n          }}\n          selectedKey={pageSize}\n          className=\"pagination-dropdown\"\n          title=\"Page Size Dropdown\"\n        />\n      </PaginationRow>\n    </>\n  );\n};\n\nexport default M365CopilotBenefitList;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { IFilterField } from \"Interfaces/IFilterField\";\n\nimport { fieldTypes } from \"./FilterFields\";\n\nexport const CLAIMED_FROM = \"claimedFrom\";\nexport const CLAIMED_TO = \"claimedTo\";\n\nexport const defaultListingPageSize = 16;\n\nexport const m365CopilotFilterFields: IFilterField[] = [\n  {\n    key: CLAIMED_FROM,\n    text: \"Claimed From\",\n    type: fieldTypes.DATE_PICKER,\n  },\n  {\n    key: CLAIMED_TO,\n    text: \"Claimed To\",\n    type: fieldTypes.DATE_PICKER,\n  },\n];\n\nexport const defaultFilterValues: {\n  fieldName: string;\n  value: string;\n}[] = [];\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { TenantTypesEnum } from \"Constants/TenantTypes\";\nimport { IM365CopilotBenefit } from \"Interfaces/Benefits/IM365CopilotBenefit\";\nimport { IFilterValue } from \"Interfaces/IFilterValue\";\n\nimport {\n  M365_COPILOT_BENEFITS_SEARCH,\n  M365_COPILOT_BENEFITS_SEARCH_FAILURE,\n  M365_COPILOT_BENEFITS_SEARCH_RESET,\n  M365_COPILOT_BENEFITS_SEARCH_SUCCESS,\n  M365_COPILOT_FILTER_VALUE_ADD,\n  M365_COPILOT_FILTER_VALUE_REMOVE,\n  M365_COPILOT_FILTER_VALUE_UPDATE,\n  UPDATE_M365_COPILOT_LISTING_CURRENT_PAGE,\n  UPDATE_M365_COPILOT_LISTING_PAGE_SIZE,\n} from \"./M365CopilotBenefitActionType\";\n\n/**\n * Interface for searching M365 Copilot Benefit\n */\nexport interface ISearchM365CopilotBenefit {\n  type: typeof M365_COPILOT_BENEFITS_SEARCH;\n  tenant: TenantTypesEnum;\n  searchText: string;\n  selectedBenefitsFilterValues: IFilterValue[];\n  searchPage: number;\n  pageSize: number;\n}\n\n/**\n * Interface for searching M365 Copilot Benefit Success\n */\nexport interface ISearchM365CopilotBenefitSuccess {\n  type: typeof M365_COPILOT_BENEFITS_SEARCH_SUCCESS;\n  benefits: IM365CopilotBenefit[];\n  filteredCount: number;\n}\n\n/**\n * Interface for searching M365 Copilot Benefit Fail\n */\nexport interface ISearchM365CopilotBenefitFail {\n  type: typeof M365_COPILOT_BENEFITS_SEARCH_FAILURE;\n  error: string;\n}\n\n/**\n * Interface for resetting M365 Copilot Benefit State\n */\nexport interface IResetM365CopilotBenefit {\n  type: typeof M365_COPILOT_BENEFITS_SEARCH_RESET;\n}\n\n/**\n * Interface for adding M365 Copilot Filter Value\n */\nexport interface IAddM365CopilotFilterValue {\n  type: typeof M365_COPILOT_FILTER_VALUE_ADD;\n  filterValue: IFilterValue;\n}\n\n/**\n * Interface for removing M365 Copilot Filter Value\n */\nexport interface IRemoveM365CopilotFilterValue {\n  type: typeof M365_COPILOT_FILTER_VALUE_REMOVE;\n  filterValue: IFilterValue;\n}\n\n/**\n * Interface for updating M365 Copilot Filter Value\n */\nexport interface IUpdateM365CopilotFilterValue {\n  type: typeof M365_COPILOT_FILTER_VALUE_UPDATE;\n  filterValue: IFilterValue;\n}\n\n/**\n * Interface for updating M365 Copilot Current Page\n */\nexport interface IUpdateM365CopilotCurrentPage {\n  type: typeof UPDATE_M365_COPILOT_LISTING_CURRENT_PAGE;\n  currentPage: number;\n}\n\n/**\n * Interface for updating M365 Copilot Page Size\n */\nexport interface IUpdateM365CopilotPageSize {\n  type: typeof UPDATE_M365_COPILOT_LISTING_PAGE_SIZE;\n  pageSize: number;\n}\n\n/**\n * Action creator for M365_COPILOT_BENEFITS_SEARCH\n */\nexport function searchM365CopilotBenefit(\n  tenant: TenantTypesEnum,\n  searchText: string,\n  selectedBenefitsFilterValues: IFilterValue[],\n  searchPage: number,\n  pageSize: number\n): ISearchM365CopilotBenefit {\n  return {\n    type: M365_COPILOT_BENEFITS_SEARCH,\n    tenant,\n    searchText,\n    selectedBenefitsFilterValues,\n    searchPage,\n    pageSize,\n  };\n}\n\n/**\n * Action creator for M365_COPILOT_BENEFITS_SEARCH_SUCCESS\n */\nexport function searchM365CopilotBenefitSuccess(\n  benefits: IM365CopilotBenefit[],\n  filteredCount: number\n): ISearchM365CopilotBenefitSuccess {\n  return {\n    type: M365_COPILOT_BENEFITS_SEARCH_SUCCESS,\n    benefits,\n    filteredCount,\n  };\n}\n\n/**\n * Action creator for M365_COPILOT_BENEFITS_SEARCH_FAILURE\n */\nexport function searchM365CopilotBenefitFail(error: string): ISearchM365CopilotBenefitFail {\n  return {\n    type: M365_COPILOT_BENEFITS_SEARCH_FAILURE,\n    error,\n  };\n}\n\n/**\n * Action creator for M365_COPILOT_BENEFITS_SEARCH_RESET\n */\nexport function resetM365CopilotBenefit(): IResetM365CopilotBenefit {\n  return {\n    type: M365_COPILOT_BENEFITS_SEARCH_RESET,\n  };\n}\n\n/**\n * Action creator for M365_COPILOT_FILTER_VALUE_ADD\n */\nexport function addM365CopilotFilterValue(filterValue: IFilterValue): IAddM365CopilotFilterValue {\n  return {\n    type: M365_COPILOT_FILTER_VALUE_ADD,\n    filterValue,\n  };\n}\n\n/**\n * Action creator for M365_COPILOT_FILTER_VALUE_REMOVE\n */\nexport function removeM365CopilotFilterValue(\n  filterValue: IFilterValue\n): IRemoveM365CopilotFilterValue {\n  return {\n    type: M365_COPILOT_FILTER_VALUE_REMOVE,\n    filterValue,\n  };\n}\n\n/**\n * Action creator for M365_COPILOT_FILTER_VALUE_UPDATE\n */\nexport function updateM365CopilotFilterValue(\n  filterValue: IFilterValue\n): IUpdateM365CopilotFilterValue {\n  return {\n    type: M365_COPILOT_FILTER_VALUE_UPDATE,\n    filterValue,\n  };\n}\n\n/**\n * Action creator for UPDATE_M365_COPILOT_LISTING_CURRENT_PAGE\n */\nexport function updateM365CopilotCurrentPage(currentPage: number): IUpdateM365CopilotCurrentPage {\n  return {\n    type: UPDATE_M365_COPILOT_LISTING_CURRENT_PAGE,\n    currentPage,\n  };\n}\n\n/**\n * Action creator for UPDATE_M365_COPILOT_LISTING_PAGE_SIZE\n */\nexport function updateM365CopilotPageSize(pageSize: number): IUpdateM365CopilotPageSize {\n  return {\n    type: UPDATE_M365_COPILOT_LISTING_PAGE_SIZE,\n    pageSize,\n  };\n}\n\nexport type M365CopilotBenefitActionTypes =\n  | ISearchM365CopilotBenefit\n  | ISearchM365CopilotBenefitSuccess\n  | ISearchM365CopilotBenefitFail\n  | IResetM365CopilotBenefit\n  | IAddM365CopilotFilterValue\n  | IRemoveM365CopilotFilterValue\n  | IUpdateM365CopilotFilterValue\n  | IUpdateM365CopilotCurrentPage\n  | IUpdateM365CopilotPageSize;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nexport const M365_COPILOT_BENEFITS_SEARCH = \"M365_COPILOT_BENEFITS_SEARCH\";\nexport const M365_COPILOT_BENEFITS_SEARCH_SUCCESS = \"M365_COPILOT_BENEFITS_SEARCH_SUCCESS\";\nexport const M365_COPILOT_BENEFITS_SEARCH_FAILURE = \"M365_COPILOT_BENEFITS_SEARCH_FAILURE\";\nexport const M365_COPILOT_BENEFITS_SEARCH_RESET = \"M365_COPILOT_BENEFITS_SEARCH_RESET\";\n\nexport const M365_COPILOT_FILTER_VALUE_ADD = \"M365_COPILOT_FILTER_VALUE_ADD\";\nexport const M365_COPILOT_FILTER_VALUE_CLEAR = \"M365_COPILOT_FILTER_VALUE_CLEAR\";\nexport const M365_COPILOT_FILTER_VALUE_REMOVE = \"M365_COPILOT_FILTER_VALUE_REMOVE\";\nexport const M365_COPILOT_FILTER_VALUE_UPDATE = \"M365_COPILOT_FILTER_VALUE_UPDATE\";\n\nexport const UPDATE_M365_COPILOT_LISTING_CURRENT_PAGE = \"UPDATE_M365_COPILOT_LISTING_CURRENT_PAGE\";\nexport const UPDATE_M365_COPILOT_LISTING_PAGE_SIZE = \"UPDATE_M365_COPILOT_LISTING_PAGE_SIZE\";\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { TenantTypesEnum } from \"Constants/TenantTypes\";\nimport { IM365CopilotBenefit } from \"Interfaces/Benefits/IM365CopilotBenefit\";\nimport { IFilterValue } from \"Interfaces/IFilterValue\";\n\nimport { IM365CopilotBenefitState } from \"./IM365CopilotBenefitState\";\n\nexport const getM365CopilotBenefits = (state: IM365CopilotBenefitState): IM365CopilotBenefit[] =>\n  state.benefits;\n\nexport const getM365CopilotBenefitsIsLoading = (state: IM365CopilotBenefitState): boolean =>\n  state.isLoading;\n\nexport const getM365CopilotBenefitsLoadError = (state: IM365CopilotBenefitState): string =>\n  state.loadBenefitsError;\n\nexport const getM365CopilotBenefitsSearchKey = (state: IM365CopilotBenefitState): string =>\n  state.searchText;\n\nexport const getM365CopilotBenefitsFilteredCount = (state: IM365CopilotBenefitState): number =>\n  state.filteredCount;\n\nexport const getM365CopilotBenefitsCurrentPage = (state: IM365CopilotBenefitState): number =>\n  state.currentPage;\n\nexport const getM365CopilotBenefitsPageSize = (state: IM365CopilotBenefitState): number =>\n  state.pageSize;\n\nexport const getM365CopilotBenefitsFilterValues = (\n  state: IM365CopilotBenefitState\n): IFilterValue[] => state.m365CopilotFilterValues;\n\nexport const getM365CopilotBenefitsCurrentTenant = (\n  state: IM365CopilotBenefitState\n): TenantTypesEnum | undefined => state.currentTenant;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { useEffect, useState, ReactElement } from \"react\";\n\nimport { connect } from \"react-redux\";\nimport { useParams } from \"react-router\";\nimport { bindActionCreators, Dispatch } from \"redux\";\n\nimport { PrimaryButton, SearchBox, Stack } from \"@fluentui/react\";\n\nimport ListCounts from \"Components/Common/ListCounts/ListCounts\";\nimport { Title } from \"Components/Common/Results/Result.styles\";\nimport M365CopilotBenefitList from \"Components/M365CopilotBenefitList/M365CopilotBenefitList\";\nimport {\n  defaultFilterValues,\n  defaultListingPageSize,\n  m365CopilotFilterFields,\n} from \"Constants/M365CopilotBenefitConstants\";\nimport { SubSiteUrlRootPath } from \"Constants/TenantTypes\";\nimport {\n  buttonStackTokens,\n  containerStackStyles,\n  filterButtonStyles,\n  listStackStyles,\n  searchBoxStyles,\n  tableStackStyles,\n  PaddedFlexRow,\n} from \"Containers/Common/CommonContainer.styles\";\nimport SideBarContainer from \"Containers/SideBarContainer/SideBarContainer\";\nimport {\n  addM365CopilotFilterValue,\n  removeM365CopilotFilterValue,\n  resetM365CopilotBenefit,\n  searchM365CopilotBenefit,\n  updateM365CopilotCurrentPage,\n  updateM365CopilotFilterValue,\n  updateM365CopilotPageSize,\n  M365CopilotBenefitActionTypes,\n} from \"Dataflows/M365CopilotBenefit/M365CopilotBenefitAction\";\nimport {\n  getM365CopilotBenefits,\n  getM365CopilotBenefitsCurrentPage,\n  getM365CopilotBenefitsCurrentTenant,\n  getM365CopilotBenefitsFilteredCount,\n  getM365CopilotBenefitsFilterValues,\n  getM365CopilotBenefitsIsLoading,\n  getM365CopilotBenefitsLoadError,\n  getM365CopilotBenefitsPageSize,\n  getM365CopilotBenefitsSearchKey,\n} from \"Dataflows/M365CopilotBenefit/M365CopilotBenefitSelector\";\nimport { AppState } from \"Dataflows/Reducers\";\nimport { IFilterValue } from \"Interfaces/IFilterValue\";\n\nimport {\n  IM365CopilotBenefitContainerProps,\n  IM365CopilotBenefitContainerRouterParams,\n} from \"./IM365CopilotBenefitContainerProps\";\n\n/**\n * M365CopilotBenefitContainer. Display M365 Copilot Benefits and filter them.\n * @param props - the props for the component\n * @returns the element\n */\nconst M365CopilotBenefitContainer: React.FunctionComponent<IM365CopilotBenefitContainerProps> = (\n  props: IM365CopilotBenefitContainerProps\n): ReactElement => {\n  const {\n    benefits,\n    isLoading,\n    loadM365CopilotBenefitsError,\n    searchText,\n    filteredCount,\n    pageSize,\n    currentPage,\n    m365CopilotFilterValues,\n    currentTenant,\n    actions: {\n      loadBenefits,\n      updateM365CopilotCurrentPage,\n      updateM365CopilotPageSize,\n      addM365CopilotFilterValue,\n      updateM365CopilotFilterValue,\n      removeM365CopilotFilterValue,\n      resetM365CopilotBenefits,\n    },\n  } = props;\n\n  const routeParams = useParams<IM365CopilotBenefitContainerRouterParams>();\n  const tenant = SubSiteUrlRootPath[routeParams.tenant];\n\n  const [searchTextState, setSearchTextState] = useState(searchText);\n\n  const handleSearch = (\n    searchText: string,\n    selectedBenefitsFilterValues: IFilterValue[],\n    searchPage: number,\n    pageSize: number\n  ): void => {\n    loadBenefits(tenant, searchText, selectedBenefitsFilterValues, searchPage, pageSize);\n  };\n\n  const onSearchTextClear = (): void => {\n    setSearchTextState(\"\");\n    handleSearch(\"\", m365CopilotFilterValues, 1, pageSize);\n  };\n\n  const onReset = (): void => {\n    resetM365CopilotBenefits();\n    setSearchTextState(\"\");\n    handleSearch(\"\", defaultFilterValues, 1, defaultListingPageSize);\n  };\n\n  useEffect(() => {\n    if (isLoading) return;\n\n    if (tenant !== currentTenant) {\n      onReset();\n      return;\n    }\n\n    handleSearch(searchText, m365CopilotFilterValues, currentPage, pageSize);\n  }, [currentPage, pageSize, tenant]);\n\n  return (\n    <Stack horizontal styles={containerStackStyles}>\n      <Stack.Item disableShrink>\n        <SideBarContainer\n          addFilterValue={addM365CopilotFilterValue}\n          removeFilterValue={removeM365CopilotFilterValue}\n          updateFilterValue={updateM365CopilotFilterValue}\n          selectedFilterValues={m365CopilotFilterValues}\n          filterFields={m365CopilotFilterFields}\n        />\n        <Stack horizontal tokens={buttonStackTokens}>\n          <PrimaryButton\n            styles={filterButtonStyles()}\n            text=\"Apply\"\n            onClick={(): void =>\n              handleSearch(searchText, m365CopilotFilterValues, currentPage, pageSize)\n            }\n          />\n          <PrimaryButton styles={filterButtonStyles()} text=\"Reset\" onClick={onReset} />\n        </Stack>\n      </Stack.Item>\n      <Stack.Item grow styles={listStackStyles()}>\n        <Stack styles={tableStackStyles}>\n          <PaddedFlexRow>\n            <Title>Benefits - M365 Copilot</Title>\n            <ListCounts total={filteredCount} loading={isLoading} />\n          </PaddedFlexRow>\n          <SearchBox\n            placeholder=\"Search benefits\"\n            value={searchTextState}\n            onSearch={(searchValue: string): void =>\n              handleSearch(searchValue, m365CopilotFilterValues, 1, pageSize)\n            }\n            onChange={(event?: React.ChangeEvent<HTMLInputElement>, newValue?: string): void =>\n              setSearchTextState(newValue || \"\")\n            }\n            onClear={onSearchTextClear}\n            styles={searchBoxStyles}\n          />\n          <M365CopilotBenefitList\n            data={benefits}\n            filteredCount={filteredCount}\n            pageSize={pageSize}\n            isLoadingM365CopilotBenefit={isLoading}\n            currentPage={currentPage}\n            loadM365CopilotBenefitError={loadM365CopilotBenefitsError}\n            tenant={tenant}\n            actions={{\n              updateCurrentPage: updateM365CopilotCurrentPage,\n              updatePageSize: updateM365CopilotPageSize,\n            }}\n          />\n        </Stack>\n      </Stack.Item>\n    </Stack>\n  );\n};\n\nconst mapStateToProps = (state: AppState) => ({\n  benefits: getM365CopilotBenefits(state.m365CopilotBenefitState),\n  isLoading: getM365CopilotBenefitsIsLoading(state.m365CopilotBenefitState),\n  loadM365CopilotBenefitsError: getM365CopilotBenefitsLoadError(state.m365CopilotBenefitState),\n  searchText: getM365CopilotBenefitsSearchKey(state.m365CopilotBenefitState),\n  filteredCount: getM365CopilotBenefitsFilteredCount(state.m365CopilotBenefitState),\n  pageSize: getM365CopilotBenefitsPageSize(state.m365CopilotBenefitState),\n  currentPage: getM365CopilotBenefitsCurrentPage(state.m365CopilotBenefitState),\n  m365CopilotFilterValues: getM365CopilotBenefitsFilterValues(state.m365CopilotBenefitState),\n  currentTenant: getM365CopilotBenefitsCurrentTenant(state.m365CopilotBenefitState),\n});\n\nconst mapDispatchToProps = (dispatch: Dispatch<M365CopilotBenefitActionTypes>) => ({\n  actions: {\n    loadBenefits: bindActionCreators(searchM365CopilotBenefit, dispatch),\n    updateM365CopilotCurrentPage: bindActionCreators(updateM365CopilotCurrentPage, dispatch),\n    updateM365CopilotPageSize: bindActionCreators(updateM365CopilotPageSize, dispatch),\n    addM365CopilotFilterValue: bindActionCreators(addM365CopilotFilterValue, dispatch),\n    updateM365CopilotFilterValue: bindActionCreators(updateM365CopilotFilterValue, dispatch),\n    removeM365CopilotFilterValue: bindActionCreators(removeM365CopilotFilterValue, dispatch),\n    resetM365CopilotBenefits: bindActionCreators(resetM365CopilotBenefit, dispatch),\n  },\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(M365CopilotBenefitContainer);\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nexport const AWARD_PERIOD_LOAD = \"AWARD_PERIOD_LOAD\";\nexport const AWARD_PERIOD_LOAD_SUCCESS = \"AWARD_PERIOD_LOAD_SUCCESS\";\nexport const AWARD_PERIOD_LOAD_FAILURE = \"AWARD_PERIOD_LOAD_FAILURE\";\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { IAwardPeriodOption } from \"Interfaces/SiteContent/IAwardPeriodOption\";\n\nimport {\n  AWARD_PERIOD_LOAD,\n  AWARD_PERIOD_LOAD_FAILURE,\n  AWARD_PERIOD_LOAD_SUCCESS,\n} from \"./AwardPeriodActionTypes\";\n\n/**\n * Action for getting the cl regions\n */\nexport interface IGetAwardPeriods {\n  type: typeof AWARD_PERIOD_LOAD;\n  tenant: string;\n}\n\n/**\n * Action getting the cl regions when successful\n */\nexport interface IGetAwardPeriodsSuccess {\n  type: typeof AWARD_PERIOD_LOAD_SUCCESS;\n  awardPeriods: IAwardPeriodOption[];\n}\n\n/**\n * Action getting the cl regions when failure\n */\nexport interface IGetAwardPeriodsFailure {\n  type: typeof AWARD_PERIOD_LOAD_FAILURE;\n  awardPeriodLoadError: string;\n}\n\n/**\n * Action creator for getting the cl regions\n */\nexport const getAwardPeriods = (tenant: string): IGetAwardPeriods => ({\n  type: AWARD_PERIOD_LOAD,\n  tenant,\n});\n\n/**\n * Action creator for getting cl regions when success\n * @param regions\n */\nexport const getAwardPeriodsSuccess = (\n  awardPeriods: IAwardPeriodOption[]\n): IGetAwardPeriodsSuccess => ({\n  type: AWARD_PERIOD_LOAD_SUCCESS,\n  awardPeriods,\n});\n\n/**\n * Action creator for getting cl regions when failure\n * @param regionsLoadError\n */\nexport const getAwardPeriodsFailure = (awardPeriodLoadError: string): IGetAwardPeriodsFailure => ({\n  type: AWARD_PERIOD_LOAD_FAILURE,\n  awardPeriodLoadError,\n});\n\nexport type AwardPeriodActionTypes =\n  | IGetAwardPeriods\n  | IGetAwardPeriodsSuccess\n  | IGetAwardPeriodsFailure;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React from \"react\";\n\nimport { useDispatch } from \"react-redux\";\n\nimport Pagination from \"rc-pagination\";\n\nimport {\n  DetailsList,\n  DetailsListLayoutMode,\n  Dropdown,\n  IColumn,\n  SelectionMode,\n  Spinner,\n  SpinnerSize,\n} from \"@fluentui/react\";\n\nimport * as VisualStudioBenefitActions from \"Dataflows/VisualStudioBenefit/VisualStudioBenefitAction\";\n\nimport ChevronIcon from \"Components/Common/ChevronIcon/ChevronIcon\";\nimport { PaginationRow } from \"Components/Common/Pagination/Pagination.styles\";\nimport { detailListStyles, spinnerStyles } from \"Components/Common/SharedListStyles.styles\";\nimport StatusElement from \"Components/Common/Status/StatusElement\";\nimport { VisualStudioBenefitStatusEnum } from \"Constants/VisualStudioBenefitConstants\";\nimport { IBenefit } from \"Interfaces/Benefits/IBenefit\";\nimport { IVisualStudioBenefit } from \"Interfaces/VisualStudioBenefits/IVisualStudioBenefit\";\nimport { formatDate } from \"Utility/FormatHelper\";\n\nimport { IVisualStudioBenefitsListProps } from \"./IVisualStudioBenefitsListProps\";\n\nconst VisualStudioBenefitsList: React.FunctionComponent<IVisualStudioBenefitsListProps> = (\n  props\n) => {\n  const dispatch = useDispatch();\n\n  const { data, loadBenefitsError, isLoadingBenefits, filteredCount, currentPage, pageSize } =\n    props;\n\n  const formatDisplayDate = (incomingDate: Date | undefined): React.ReactElement => {\n    if (incomingDate) {\n      return <span>{formatDate(incomingDate)}</span>;\n    } else {\n      return <></>;\n    }\n  };\n\n  const formatStatusColumn = (statusKey: string): React.ReactElement => {\n    return <StatusElement statusValue={VisualStudioBenefitStatusEnum[statusKey]} />;\n  };\n\n  const columns: IColumn[] = [\n    {\n      key: \"userId\",\n      name: \"User ID\",\n      ariaLabel: \"User ID\",\n      fieldName: \"userId\",\n      minWidth: 80,\n      isResizable: true,\n    },\n    {\n      key: \"assignedTo\",\n      name: \"Assigned to\",\n      ariaLabel: \"Assigned to\",\n      fieldName: \"assignedTo\",\n      minWidth: 160,\n      isResizable: true,\n    },\n    {\n      key: \"claimedBy\",\n      name: \"Claimed by\",\n      ariaLabel: \"Claimed by\",\n      fieldName: \"claimedBy\",\n      minWidth: 160,\n      isResizable: true,\n    },\n    {\n      key: \"status\",\n      name: \"Status\",\n      ariaLabel: \"Status\",\n      fieldName: \"status\",\n      minWidth: 100,\n      onRender: (item: IBenefit): React.ReactElement => {\n        return formatStatusColumn(item.status);\n      },\n      isResizable: true,\n    },\n    {\n      key: \"subscriptionGuid\",\n      name: \"Code\",\n      ariaLabel: \"Code\",\n      fieldName: \"subscriptionGuid\",\n      minWidth: 100,\n      isResizable: true,\n      isSorted: false,\n    },\n    {\n      key: \"expirationDate\",\n      name: \"Code Expiration Date\",\n      ariaLabel: \"Date code expires\",\n      fieldName: \"expirationDate\",\n      minWidth: 160,\n      onRender: (item: IVisualStudioBenefit): React.ReactElement => {\n        return formatDisplayDate(item.expirationDate);\n      },\n    },\n    {\n      key: \"lastManagedBy\",\n      name: \"Last Managed By\",\n      ariaLabel: \"Last managed by\",\n      fieldName: \"lastManagedBy\",\n      minWidth: 160,\n      isResizable: true,\n    },\n  ];\n\n  if (isLoadingBenefits) {\n    return <Spinner size={SpinnerSize.large} styles={spinnerStyles} />;\n  } else if (loadBenefitsError !== \"\") {\n    return <div>{loadBenefitsError}</div>;\n  }\n\n  return (\n    <>\n      <DetailsList\n        items={data}\n        columns={columns}\n        selectionMode={SelectionMode.none}\n        getKey={(item: IVisualStudioBenefit): string => `${item.assignedTo}${item.createdDate}`}\n        setKey=\"none\"\n        layoutMode={DetailsListLayoutMode.fixedColumns}\n        isHeaderVisible={true}\n        enterModalSelectionOnTouch={true}\n        styles={detailListStyles}\n      />\n      <PaginationRow>\n        <Pagination\n          total={filteredCount}\n          onChange={(page) => dispatch(VisualStudioBenefitActions.updateCurrentPage(page))}\n          showTitle={false}\n          current={currentPage}\n          prevIcon={ChevronIcon(\"ChevronLeft\")}\n          nextIcon={ChevronIcon(\"ChevronRight\")}\n          pageSize={pageSize}\n          showSizeChanger\n        />\n        <Dropdown\n          options={[\n            { key: 16, text: \"Show 16 results\" },\n            { key: 32, text: \"Show 32 results\" },\n            { key: 48, text: \"Show 48 results\" },\n          ]}\n          onChange={(_e, op): void => {\n            dispatch(VisualStudioBenefitActions.updatePageSize(op?.key as number));\n          }}\n          selectedKey={pageSize}\n          className=\"pagination-dropdown\"\n          title=\"Page Size Dropdown\"\n        />\n      </PaginationRow>\n    </>\n  );\n};\n\nexport default VisualStudioBenefitsList;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { AppState } from \"Dataflows/Reducers\";\nimport { IFilterValue } from \"Interfaces/IFilterValue\";\nimport { IVisualStudioBenefit } from \"Interfaces/VisualStudioBenefits/IVisualStudioBenefit\";\n\n/**\n * Returns the list of visual studio benefits\n * in the current visual studio benefits state.\n * @param visualStudioBenefitState\n */\nexport const getVisualStudioBenefits = (state: AppState): IVisualStudioBenefit[] =>\n  state.visualStudioBenefitState.visualStudioBenefits;\n\n/**\n * Returns a boolean value for whether\n * or not the visual studio benefits are still loading.\n * @param visualStudioBenefitState\n */\nexport const isLoadingVisualStudioBenefits = (state: AppState): boolean =>\n  state.visualStudioBenefitState.isLoadingVisualStudioBenefits;\n\n/**\n * Returns an error message if there's an\n * issue loading the visual studio benefits.\n * @param visualStudioBenefitState\n */\nexport const getLoadVisualStudioBenefitsError = (state: AppState): string =>\n  state.visualStudioBenefitState.loadVisualStudioBenefitsError;\n\n/**\n * Returns the current page.\n * @param visualStudioBenefitState\n */\nexport const getCurrentPage = (state: AppState): number =>\n  state.visualStudioBenefitState.currentPage;\n\n/**\n * Returns the page size.\n * @param visualStudioBenefitState\n */\nexport const getPageSize = (state: AppState): number => state.visualStudioBenefitState.pageSize;\n\n/**\n * Returns the search text.\n * @param visualStudioBenefitState\n */\nexport const getSearchText = (state: AppState): string => state.visualStudioBenefitState.searchText;\n\n/**\n * Returns the filtered count.\n * @param visualStudioBenefitState\n */\nexport const getFilteredCount = (state: AppState): number =>\n  state.visualStudioBenefitState.filteredCount;\n\n/**\n * Returns the list of filter values for\n * visual studio benefits.\n * @param visualStudioBenefitState\n */\nexport const getVisualStudioBenefitsFilterValues = (state: AppState): IFilterValue[] =>\n  state.visualStudioBenefitState.visualStudioBenefitsFilterValues;\n\n/**\n * Returns the file download status.\n * @param state\n * @returns {string} file download status\n */\nexport const getFileDownloadStatus = (state: AppState): string =>\n  state.visualStudioBenefitState.fileDownloadStatus;\n\n/**\n * Returns the file download data.\n * @param state App state.\n * @returns {string} downloaded data\n */\nexport const getFileDownloadData = (state: AppState): string =>\n  state.visualStudioBenefitState.fileDownloadData;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { useEffect, useState, ReactElement } from \"react\";\n\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { useParams } from \"react-router\";\n\nimport { PrimaryButton, SearchBox, Stack } from \"@fluentui/react\";\n\nimport * as AwardPeriodActions from \"Dataflows/AwardPeriod/AwardPeriodAction\";\nimport * as VisualStudioBenefitActions from \"Dataflows/VisualStudioBenefit/VisualStudioBenefitAction\";\n\nimport ListCounts from \"Components/Common/ListCounts/ListCounts\";\nimport { Title } from \"Components/Common/Results/Result.styles\";\nimport VisualStudioBenefitsList from \"Components/VisualStudioBenefitsList/VisualStudioBenefitsList\";\nimport { OperationStatus } from \"Constants/OperationStatus\";\nimport { SubSiteUrlRootPath, TenantTypesEnum } from \"Constants/TenantTypes\";\nimport {\n  defaultListingPageSize,\n  defaultVisualStudioBenefitFilterValues,\n  visualStudioBenefitFilterFields,\n} from \"Constants/VisualStudioBenefitConstants\";\nimport {\n  buttonStackTokens,\n  containerStackStyles,\n  filterButtonStyles,\n  listStackStyles,\n  searchBoxStyles,\n  tableStackStyles,\n  FlexRowAlignedCenter,\n  PaddedFlexRow,\n} from \"Containers/Common/CommonContainer.styles\";\nimport SideBarContainer from \"Containers/SideBarContainer/SideBarContainer\";\nimport {\n  getCurrentPage,\n  getFileDownloadData,\n  getFileDownloadStatus,\n  getFilteredCount,\n  getLoadVisualStudioBenefitsError,\n  getPageSize,\n  getSearchText,\n  getVisualStudioBenefits,\n  getVisualStudioBenefitsFilterValues,\n  isLoadingVisualStudioBenefits,\n} from \"Dataflows/VisualStudioBenefit/VisualStudioBenefitSelector\";\nimport { IFilterValue } from \"Interfaces/IFilterValue\";\nimport { constructCsvDownload } from \"Utility/DownloadHelper\";\n\nimport { IVisualStudioBenefitsContainerMatchProps } from \"./IVisualStudioBenefitsContainerMatchProps\";\n\nconst VisualStudioBenefitContainer: React.FunctionComponent = (): ReactElement => {\n  const dispatch = useDispatch();\n\n  const benefits = useSelector(getVisualStudioBenefits);\n  const currentPage = useSelector(getCurrentPage);\n  const filteredCount = useSelector(getFilteredCount);\n  const fileDownloadData = useSelector(getFileDownloadData);\n  const fileDownloadStatus = useSelector(getFileDownloadStatus);\n  const isLoading = useSelector(isLoadingVisualStudioBenefits);\n  const loadVisualStudioBenefitsError = useSelector(getLoadVisualStudioBenefitsError);\n  const pageSize = useSelector(getPageSize);\n  const searchText = useSelector(getSearchText);\n  const visualStudioBenefitsFilterValues = useSelector(getVisualStudioBenefitsFilterValues);\n\n  const [searchTextState, setSearchTextState] = useState(searchText);\n\n  const routeParams = useParams<IVisualStudioBenefitsContainerMatchProps>();\n\n  const tenant =\n    SubSiteUrlRootPath[routeParams.tenant] === TenantTypesEnum.MSP\n      ? TenantTypesEnum.MLSA\n      : SubSiteUrlRootPath[routeParams.tenant];\n\n  const handleSearch = (\n    searchValue: string,\n    selectedvisualStudioBenefitsFilterValues: IFilterValue[],\n    page: number,\n    pageSizeLocal: number\n  ): void => {\n    dispatch(\n      VisualStudioBenefitActions.searchVisualStudioBenefits(\n        tenant,\n        searchValue,\n        selectedvisualStudioBenefitsFilterValues,\n        page,\n        pageSizeLocal\n      )\n    );\n  };\n\n  /**\n   * Call to reset filter values.\n   * @method\n   */\n  const resetFilterValues = (): void => {\n    /**\n     * NOTE: The award period endpoints expect \"MSP\" as the\n     * student ambassadors tenant; the visual studio benefits endpoint\n     * expects \"MLSA\" as the student ambassadors tenant. We need both\n     * of these in this file but this is the only spot that needs to\n     * send \"MSP\".\n     */\n    if (tenant === TenantTypesEnum.MLSA) {\n      dispatch(AwardPeriodActions.getAwardPeriods(TenantTypesEnum.MSP));\n    } else {\n      dispatch(AwardPeriodActions.getAwardPeriods(tenant));\n    }\n\n    /**\n     * Set currentPage and pageSize back to default\n     * values when switching between tenants.\n     */\n    dispatch(VisualStudioBenefitActions.updateCurrentPage(1));\n    dispatch(VisualStudioBenefitActions.updatePageSize(16));\n\n    /**\n     * Clear filter values when we switch between tenants.\n     */\n    dispatch(VisualStudioBenefitActions.clearVisualStudioBenefitsFilterValue());\n\n    /**\n     * Reset search text when we switch between tenants\n     */\n    setSearchTextState(\"\");\n\n    /**\n     * Trigger search with default values\n     */\n    handleSearch(\"\", defaultVisualStudioBenefitFilterValues, 1, defaultListingPageSize);\n  };\n\n  useEffect(() => {\n    resetFilterValues();\n  }, [tenant]);\n\n  useEffect(() => {\n    handleSearch(searchTextState, visualStudioBenefitsFilterValues, currentPage, pageSize);\n  }, [currentPage, pageSize]);\n\n  const onClear = (): void => {\n    handleSearch(\"\", visualStudioBenefitsFilterValues, 1, pageSize);\n  };\n\n  const downloadCSVFile = (file: string): void => {\n    constructCsvDownload(\n      file,\n      `${tenant.toLowerCase()}_visual_studio_benefit_requests_${new Date().toLocaleString()}.csv`\n    );\n  };\n\n  useEffect(() => {\n    if (fileDownloadStatus === OperationStatus.Succeeded && !!fileDownloadData) {\n      downloadCSVFile(fileDownloadData);\n      dispatch(VisualStudioBenefitActions.downloadRequestsToCSVClean());\n    }\n  }, [fileDownloadStatus, fileDownloadData]);\n\n  const handleDownloadRequests = () => {\n    dispatch(VisualStudioBenefitActions.downloadRequestsToCSV(tenant));\n  };\n\n  return (\n    <Stack horizontal styles={containerStackStyles}>\n      <Stack.Item disableShrink>\n        <SideBarContainer\n          addFilterValue={(filterValue) =>\n            dispatch(VisualStudioBenefitActions.addVisualStudioBenefitsFilterValue(filterValue))\n          }\n          removeFilterValue={(filterValue) =>\n            dispatch(VisualStudioBenefitActions.removeVisualStudioBenefitsFilterValue(filterValue))\n          }\n          updateFilterValue={(filterValue) =>\n            dispatch(VisualStudioBenefitActions.updateVisualStudioBenefitsFilterValue(filterValue))\n          }\n          selectedFilterValues={visualStudioBenefitsFilterValues}\n          filterFields={visualStudioBenefitFilterFields}\n        />\n        <Stack horizontal tokens={buttonStackTokens}>\n          <PrimaryButton\n            styles={filterButtonStyles()}\n            text=\"Apply\"\n            onClick={(): void =>\n              handleSearch(searchTextState, visualStudioBenefitsFilterValues, 1, pageSize)\n            }\n          />\n          <PrimaryButton\n            styles={filterButtonStyles()}\n            text=\"Reset\"\n            onClick={(): void => resetFilterValues()}\n          />\n        </Stack>\n      </Stack.Item>\n      <Stack.Item grow styles={listStackStyles()}>\n        <Stack styles={tableStackStyles}>\n          <PaddedFlexRow>\n            <Title>Benefits - Visual Studio</Title>\n            <FlexRowAlignedCenter>\n              <ListCounts total={filteredCount} loading={isLoading} />\n              {tenant !== TenantTypesEnum.MLSA && (\n                <PrimaryButton\n                  text=\"Requests\"\n                  iconProps={{ iconName: \"download\" }}\n                  onClick={handleDownloadRequests}\n                />\n              )}\n            </FlexRowAlignedCenter>\n          </PaddedFlexRow>\n          <SearchBox\n            placeholder=\"Search benefits\"\n            value={searchTextState}\n            onSearch={(searchValue: string): void =>\n              handleSearch(searchValue, visualStudioBenefitsFilterValues, 1, pageSize)\n            }\n            onChange={(event?: React.ChangeEvent<HTMLInputElement>, newValue?: string): void =>\n              setSearchTextState(newValue || \"\")\n            }\n            onClear={onClear}\n            styles={searchBoxStyles}\n          />\n          <VisualStudioBenefitsList\n            data={benefits}\n            filteredCount={filteredCount}\n            pageSize={pageSize}\n            isLoadingBenefits={isLoading}\n            currentPage={currentPage}\n            loadBenefitsError={loadVisualStudioBenefitsError}\n          />\n        </Stack>\n      </Stack.Item>\n    </Stack>\n  );\n};\n\nexport default VisualStudioBenefitContainer;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport {\n  CAPACITY_DATA_LOAD,\n  CAPACITY_DATA_LOAD_FAIL,\n  CAPACITY_DATA_LOAD_SUCCESS,\n  DEMOGRAPHICS_FILTER,\n  DEMOGRAPHICS_FILTER_COUNTRY_VALUE_REMOVE,\n  DEMOGRAPHICS_FILTER_FAIL,\n  DEMOGRAPHICS_FILTER_REGION_VALUE_REMOVE,\n  DEMOGRAPHICS_FILTER_RESET,\n  DEMOGRAPHICS_FILTER_SUCCESS,\n  DEMOGRAPHICS_FILTER_VALUE_ADD,\n  DEMOGRAPHICS_FILTER_VALUE_REMOVE,\n  DEMOGRAPHICS_FILTER_VALUE_UPDATE,\n} from \"Constants/ActionTypes\";\nimport { TenantTypesEnum } from \"Constants/TenantTypes\";\nimport { ICapDataResult } from \"Interfaces/Demographics/ICapDataResult\";\nimport { IDemographicsResult } from \"Interfaces/Demographics/IDemographicsResult\";\nimport { IFilterValue } from \"Interfaces/IFilterValue\";\n\n/**\n * Action for when adding selected filter value.\n * @interface\n */\nexport interface IDemographicsFilterValueAdd {\n  type: typeof DEMOGRAPHICS_FILTER_VALUE_ADD;\n  filterValue: IFilterValue;\n}\n\n/**\n * Action for when removing selected filter value.\n * @interface\n */\nexport interface IDemographicsFilterValueRemove {\n  type: typeof DEMOGRAPHICS_FILTER_VALUE_REMOVE;\n  filterValue: IFilterValue;\n}\n\n/**\n * Action for when removing selected filter cl region value.\n * @interface\n */\nexport interface IDemographicsFilterRegionValueRemove {\n  type: typeof DEMOGRAPHICS_FILTER_REGION_VALUE_REMOVE;\n}\n\n/**\n * Action for when removing selected filter country value.\n * @interface\n */\nexport interface IDemographicsFilterCountryValueRemove {\n  type: typeof DEMOGRAPHICS_FILTER_COUNTRY_VALUE_REMOVE;\n}\n\n/**\n * Action for when updating selected filter value.\n * @interface\n */\nexport interface IDemographicsFilterValueUpdate {\n  type: typeof DEMOGRAPHICS_FILTER_VALUE_UPDATE;\n  filterValue: IFilterValue;\n}\n\n/**\n * Action for when filtering demographics.\n * @interface\n */\nexport interface IFilterDemographics {\n  type: typeof DEMOGRAPHICS_FILTER;\n  applicationType: string;\n  selectedDemographicsFilterValues: IFilterValue[];\n  tenant: TenantTypesEnum;\n}\n\n/**\n * Action for when filter demographics succeeds.\n * @interface\n */\nexport interface IFilterDemographicsSuccess {\n  type: typeof DEMOGRAPHICS_FILTER_SUCCESS;\n  demographics: IDemographicsResult;\n}\n\n/**\n * Action for when filter demographics failed.\n * @interface\n */\nexport interface IFilterDemographicsFail {\n  type: typeof DEMOGRAPHICS_FILTER_FAIL;\n  error: string;\n}\n\n/**\n * Action for when we reset the demographics filter.\n */\nexport interface IResetDemographicsFilter {\n  type: typeof DEMOGRAPHICS_FILTER_RESET;\n}\n\n/**\n * Action for loading capacity data.\n */\nexport interface ICapDataLoad {\n  type: typeof CAPACITY_DATA_LOAD;\n}\n\n/**\n * Action for when loading capacity data succeeds.\n * @interface\n */\nexport interface ICapDataLoadSuccess {\n  type: typeof CAPACITY_DATA_LOAD_SUCCESS;\n  capData: ICapDataResult;\n}\n\n/**\n * Action for when loading capacity data fails.\n * @interface\n */\nexport interface ICapDataLoadFail {\n  type: typeof CAPACITY_DATA_LOAD_FAIL;\n  error: string;\n}\n\n/**\n * Action creator for DEMOGRAPHICS_FILTER_VALUE_ADD.\n * @param filterValue filter value to add.\n */\nexport function addDemographicsFilterValue(filterValue: IFilterValue): DemographicActionTypes {\n  return {\n    type: DEMOGRAPHICS_FILTER_VALUE_ADD,\n    filterValue,\n  };\n}\n\n/**\n * Action creator for DEMOGRAPHICS_FILTER_VALUE_REMOVE.\n * @param filterValue filter value to remove.\n */\nexport function removeDemographicsFilterValue(filterValue: IFilterValue): DemographicActionTypes {\n  return {\n    type: DEMOGRAPHICS_FILTER_VALUE_REMOVE,\n    filterValue,\n  };\n}\n\n/**\n * Action creator for DEMOGRAPHICS_FILTER_REGION_VALUE_REMOVE.\n */\nexport function removeDemographicsFilterRegionValue(): DemographicActionTypes {\n  return {\n    type: DEMOGRAPHICS_FILTER_REGION_VALUE_REMOVE,\n  };\n}\n\n/**\n * Action creator for DEMOGRAPHICS_FILTER_COUNTRY_VALUE_REMOVE.\n */\nexport function removeDemographicsFilterCountryValue(): DemographicActionTypes {\n  return {\n    type: DEMOGRAPHICS_FILTER_COUNTRY_VALUE_REMOVE,\n  };\n}\n\n/**\n * Action creator for DEMOGRAPHICS_FILTER_VALUE_UPDATE.\n * @param filterValue filter value to update.\n */\nexport function updateDemographicsFilterValue(filterValue: IFilterValue): DemographicActionTypes {\n  return {\n    type: DEMOGRAPHICS_FILTER_VALUE_UPDATE,\n    filterValue,\n  };\n}\n\n/**\n * Action creator for DEMOGRAPHICS_FILTER.\n */\nexport function filterDemographics(\n  selectedDemographicsFilterValues: IFilterValue[],\n  applicationType: string,\n  tenant: TenantTypesEnum\n): DemographicActionTypes {\n  return {\n    type: DEMOGRAPHICS_FILTER,\n    selectedDemographicsFilterValues,\n    applicationType,\n    tenant,\n  };\n}\n\n/**\n * Action creator for DEMOGRAPHICS_FILTER_SUCCESS.\n * @param demographics the successful filtered demographics.\n */\nexport function filterDemographicsSuccess(\n  demographics: IDemographicsResult\n): DemographicActionTypes {\n  return {\n    type: DEMOGRAPHICS_FILTER_SUCCESS,\n    demographics,\n  };\n}\n\n/**\n * Action creator for DEMOGRAPHICS_FILTER_FAIL.\n * @param error the error message from the API.\n */\nexport function filterDemographicsFail(error: string): DemographicActionTypes {\n  return {\n    type: DEMOGRAPHICS_FILTER_FAIL,\n    error,\n  };\n}\n\n/**\n * Action creator for DEMOGRAPHICS_FILTER_RESET.\n */\nexport function resetDemographics(): IResetDemographicsFilter {\n  return {\n    type: DEMOGRAPHICS_FILTER_RESET,\n  };\n}\n\n/**\n * Action creator for CAPACITY_DATA_LOAD.\n */\nexport function capDataLoad(): DemographicActionTypes {\n  return {\n    type: CAPACITY_DATA_LOAD,\n  };\n}\n\n/**\n * Action creator for CAPACITY_DATA_LOAD_SUCCESS.\n * @param capData the capacity data successfully returned.\n */\nexport function capDataLoadSuccess(capData: ICapDataResult): DemographicActionTypes {\n  return {\n    type: CAPACITY_DATA_LOAD_SUCCESS,\n    capData,\n  };\n}\n\n/**\n * Action creator for CAPACITY_LOAD_FAIL.\n * @param error the error message from the API.\n */\nexport function capDataLoadFail(error: string): DemographicActionTypes {\n  return {\n    type: CAPACITY_DATA_LOAD_FAIL,\n    error,\n  };\n}\n\nexport type DemographicActionTypes =\n  | IDemographicsFilterCountryValueRemove\n  | IDemographicsFilterRegionValueRemove\n  | IDemographicsFilterValueAdd\n  | IDemographicsFilterValueRemove\n  | IDemographicsFilterValueUpdate\n  | IResetDemographicsFilter\n  | IFilterDemographics\n  | IFilterDemographicsFail\n  | IFilterDemographicsSuccess\n  | ICapDataLoad\n  | ICapDataLoadSuccess\n  | ICapDataLoadFail;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nexport const DEMOGRAPHICS_FILTER_VALUE_ADD = \"DEMOGRAPHICS_FILTER_VALUE_ADD\";\nexport const DEMOGRAPHICS_FILTER_VALUE_REMOVE = \"DEMOGRAPHICS_FILTER_VALUE_REMOVE\";\nexport const DEMOGRAPHICS_FILTER_REGION_VALUE_REMOVE = \"DEMOGRAPHICS_FILTER_REGION_VALUE_REMOVE\";\nexport const DEMOGRAPHICS_FILTER_COUNTRY_VALUE_REMOVE = \"DEMOGRAPHICS_FILTER_COUNTRY_VALUE_REMOVE\";\nexport const DEMOGRAPHICS_FILTER_VALUE_UPDATE = \"DEMOGRAPHICS_FILTER_VALUE_UPDATE\";\n\nexport const DEMOGRAPHICS_FILTER = \"DEMOGRAPHICS_FILTER\";\nexport const DEMOGRAPHICS_FILTER_SUCCESS = \"DEMOGRAPHICS_FILTER_SUCCESS\";\nexport const DEMOGRAPHICS_FILTER_FAIL = \"DEMOGRAPHICS_FILTER_FAIL\";\nexport const DEMOGRAPHICS_FILTER_RESET = \"DEMOGRAPHICS_FILTER_RESET\";\n\nexport const CAPACITY_DATA_LOAD = \"CAPACITY_DATA_LOAD\";\nexport const CAPACITY_DATA_LOAD_SUCCESS = \"CAPACITY_DATA_LOAD_SUCCESS\";\nexport const CAPACITY_DATA_LOAD_FAIL = \"CAPACITY_DATA_LOAD_FAIL\";\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { AppState } from \"Dataflows/Reducers\";\nimport { ICapDataResult } from \"Interfaces/Demographics/ICapDataResult\";\nimport { IDemographicsResult } from \"Interfaces/Demographics/IDemographicsResult\";\nimport { IFilterValue } from \"Interfaces/IFilterValue\";\n\nexport const getDemographics = (state: AppState): IDemographicsResult =>\n  state.demographicsState.demographicsData;\n\nexport const getCapData = (state: AppState): ICapDataResult => state.demographicsState.capData;\n\nexport const getDemographicsFilterValues = (state: AppState): IFilterValue[] =>\n  state.demographicsState.demographicsFilterValues;\n\nexport const getLoadDemographicsError = (state: AppState) =>\n  state.demographicsState.loadDemographicsError;\n\nexport const getLoadCapDataError = (state: AppState) => state.demographicsState.loadCapDataError;\n\nexport const isLoadingDemographics = (state: AppState) =>\n  state.demographicsState.isLoadingDemographics;\n\nexport const isLoadingCapData = (state: AppState): boolean =>\n  state.demographicsState.isLoadingCapData;\n\nexport const getCurrentTenant = (state: AppState): string => state.demographicsState.tenant;\n","/*!\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n */\r\n\r\nexport const barCharStyle = { background: \"#ebebeb\", padding: \"20px\" };\r\n\r\nexport const COLORS = [\r\n  \"#0088FE\",\r\n  \"#00C49F\",\r\n  \"#FFBB28\",\r\n  \"#FF8042\",\r\n  \"#FF0000\",\r\n  \"#8C00AE\",\r\n  \"#4D2517\",\r\n  \"#000468\",\r\n  \"#0B4000\",\r\n  \"#820002\",\r\n];\r\n","/*!\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n */\r\n\r\nimport React from \"react\";\r\n\r\nimport { Bar, BarChart, Cell, Legend, Surface, Symbols, Tooltip, XAxis, YAxis } from \"recharts\";\r\n\r\nimport { IDemographicsChartProps } from \"../IDemographicsChartProps\";\r\nimport { barCharStyle, COLORS } from \"./DemographicsBarChart.styles\";\r\n\r\nexport function DemographicsBarChart(props: IDemographicsChartProps) {\r\n  const { data, title } = props;\r\n\r\n  const renderCustomLegend = () => {\r\n    return (\r\n      <>\r\n        {data.map((entry, index) => (\r\n          <div key={`item-${index}`}>\r\n            <Surface width={10} height={10}>\r\n              <Symbols cx={5} cy={5} type=\"circle\" size={50} fill={COLORS[index % COLORS.length]} />\r\n            </Surface>\r\n            <span key={`item-${index}`}>{entry.name}</span>\r\n            <br />\r\n          </div>\r\n        ))}\r\n      </>\r\n    );\r\n  };\r\n\r\n  return (\r\n    <div style={barCharStyle}>\r\n      <h5>{title}</h5>\r\n      {data && data.length > 0 ? (\r\n        <BarChart width={800} height={400} data={data} barCategoryGap={10} margin={{ top: 20 }}>\r\n          <XAxis tick={false} />\r\n          <YAxis />\r\n          <Tooltip />\r\n          <Bar dataKey=\"value\" label={{ position: \"top\" }}>\r\n            {data.map((_, index) => (\r\n              <Cell key={`cell-${index}`} fill={COLORS[index % COLORS.length]} />\r\n            ))}\r\n          </Bar>\r\n          <Legend\r\n            layout=\"vertical\"\r\n            align=\"right\"\r\n            verticalAlign=\"top\"\r\n            content={renderCustomLegend}\r\n          />\r\n        </BarChart>\r\n      ) : (\r\n        <>No Data</>\r\n      )}\r\n    </div>\r\n  );\r\n}\r\n","/*!\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n */\r\n\r\nexport const COLORS = [\r\n  \"#0088FE\",\r\n  \"#00C49F\",\r\n  \"#FFBB28\",\r\n  \"#FF8042\",\r\n  \"#FF0000\",\r\n  \"#8C00AE\",\r\n  \"#4D2517\",\r\n  \"#000468\",\r\n  \"#0B4000\",\r\n  \"#820002\",\r\n];\r\n\r\nexport const pieChartStyle = { background: \"#ebebeb\", padding: \"20px\" };\r\n\r\nexport const noDataStyle = { width: \"400px\", height: \"300px\" };\r\n","/*!\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n */\r\n\r\nimport React from \"react\";\r\n\r\nimport { Cell, Legend, Pie, PieChart, Tooltip } from \"recharts\";\r\n\r\nimport { IDemographicsChartProps } from \"../IDemographicsChartProps\";\r\nimport { noDataStyle, pieChartStyle, COLORS } from \"./DemographicsPieChart.styles\";\r\n\r\nexport function DemographicsPieChart(props: IDemographicsChartProps) {\r\n  const { data, title } = props;\r\n\r\n  const RADIAN = Math.PI / 180;\r\n  const renderCustomizedLabel = ({\r\n    cx,\r\n    cy,\r\n    midAngle,\r\n    innerRadius,\r\n    outerRadius,\r\n    percent,\r\n    _,\r\n    payload,\r\n  }) => {\r\n    const radius = innerRadius + (outerRadius - innerRadius + 15) * 0.5;\r\n    const x = cx + radius * Math.cos(-midAngle * RADIAN);\r\n    const y = cy + radius * Math.sin(-midAngle * RADIAN);\r\n\r\n    // If slice is too small, don't render label. User can still hover for tooltip.\r\n    return percent < 0.05 ? (\r\n      <></>\r\n    ) : (\r\n      <text x={x} y={y} fill=\"white\" textAnchor={\"middle\"} dominantBaseline=\"middle\" fontSize={20}>\r\n        {payload.value}\r\n      </text>\r\n    );\r\n  };\r\n\r\n  return (\r\n    <div style={pieChartStyle}>\r\n      <h5>{title}</h5>\r\n      {data && data.length > 0 ? (\r\n        <PieChart width={400} height={300}>\r\n          <Pie\r\n            data={data}\r\n            dataKey=\"value\"\r\n            nameKey=\"name\"\r\n            cx=\"50%\"\r\n            cy=\"50%\"\r\n            outerRadius={100}\r\n            fill=\"#8884d8\"\r\n            label={renderCustomizedLabel}\r\n            labelLine={false}\r\n          >\r\n            {data.map((_, index) => (\r\n              <Cell key={`cell-${index}`} fill={COLORS[index % COLORS.length]} />\r\n            ))}\r\n          </Pie>\r\n          <Legend verticalAlign=\"bottom\" width={350} />\r\n          <Tooltip />\r\n        </PieChart>\r\n      ) : (\r\n        <div style={noDataStyle}>No Data</div>\r\n      )}\r\n    </div>\r\n  );\r\n}\r\n","/*!\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n */\r\n\r\nimport styled from \"styled-components\";\r\n\r\nimport { IStackItemStyles } from \"@fluentui/react\";\r\n\r\nexport const cardStyle: IStackItemStyles = {\r\n  root: {\r\n    background: \"#ebebeb\",\r\n    textAlign: \"center\",\r\n    height: \"48%\",\r\n    justifyContent: \"center\",\r\n    display: \"flex\",\r\n    flexDirection: \"column\",\r\n  },\r\n};\r\n\r\nexport const cardTextStyle = { fontSize: \"2em\", fontWeight: 400 };\r\n\r\nexport const demographicsStackItemStyle = {\r\n  padding: \"20px\",\r\n};\r\n\r\nexport const splitStackStyle = {\r\n  width: \"440px\",\r\n  height: \"372px\",\r\n};\r\n\r\nexport const Line = styled.hr`\r\n  border: 1px solid #ebebeb;\r\n  margin: 0px 20px 0px 20px;\r\n`;\r\n\r\nexport const InfoText = styled.span`\r\n  color: red;\r\n`;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n */\r\n\r\nimport React, { useEffect } from \"react\";\r\n\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\n\r\nimport {\r\n  DetailsList,\r\n  DetailsListLayoutMode,\r\n  IColumn,\r\n  PrimaryButton,\r\n  SelectionMode,\r\n  Stack,\r\n} from \"@fluentui/react\";\r\n\r\nimport * as ClRegionActions from \"Dataflows/ClRegion/ClRegionAction\";\r\nimport * as DemographicsActions from \"Dataflows/Demographics/DemographicsAction\";\r\nimport * as DemographicsSelectors from \"Dataflows/Demographics/DemographicsSelector\";\r\nimport * as TechnologyAreaActions from \"Dataflows/TechnologyArea/TechnologyAreaAction\";\r\n\r\nimport { Title } from \"Components/Common/Results/Result.styles\";\r\nimport { detailListStyles, filterButtonStyles } from \"Components/Common/SharedListStyles.styles\";\r\nimport { DemographicsBarChart } from \"Components/Demographics/DemographicsBarChart/DemographicsBarChart\";\r\nimport { DemographicsPieChart } from \"Components/Demographics/DemographicsPieChart/DemographicsPieChart\";\r\nimport {\r\n  defaultMvpDemographicsFilterValues,\r\n  mvpApplicationDemographicsFilterFields,\r\n  ApplicationTypeEnum,\r\n  APPLICATION_TYPE,\r\n} from \"Constants/ApplicationConstants\";\r\nimport { TenantTypesEnum } from \"Constants/TenantTypes\";\r\nimport {\r\n  buttonStackTokens,\r\n  containerStackStyles,\r\n  listStackStyles,\r\n  tableStackStyles,\r\n  PaddedFlexRow,\r\n} from \"Containers/Common/CommonContainer.styles\";\r\nimport SideBarContainer from \"Containers/SideBarContainer/SideBarContainer\";\r\nimport { ICapDataRow } from \"Interfaces/Demographics/ICapDataRow\";\r\nimport { IFilterValue } from \"Interfaces/IFilterValue\";\r\n\r\nimport {\r\n  cardStyle,\r\n  cardTextStyle,\r\n  demographicsStackItemStyle,\r\n  splitStackStyle,\r\n  InfoText,\r\n  Line,\r\n} from \"./DemographicsController.styles\";\r\n\r\nconst DemographicsContainer: React.FunctionComponent = () => {\r\n  const dispatch = useDispatch();\r\n  const filterDemographics = (\r\n    selectedDemographicsFilterValues: IFilterValue[],\r\n    applicationType: string,\r\n    tenant: TenantTypesEnum\r\n  ) =>\r\n    dispatch(\r\n      DemographicsActions.filterDemographics(\r\n        selectedDemographicsFilterValues,\r\n        applicationType,\r\n        tenant\r\n      )\r\n    );\r\n\r\n  const loadCapData = () => dispatch(DemographicsActions.capDataLoad());\r\n\r\n  const addDemographicsFilterValue = (filterValue: IFilterValue) =>\r\n    dispatch(DemographicsActions.addDemographicsFilterValue(filterValue));\r\n  const removeDemographicsFilterValue = (filterValue: IFilterValue) =>\r\n    dispatch(DemographicsActions.removeDemographicsFilterValue(filterValue));\r\n  const updateDemographicsFilterValue = (filterValue: IFilterValue) =>\r\n    dispatch(DemographicsActions.updateDemographicsFilterValue(filterValue));\r\n\r\n  const loadCLRegions = () => dispatch(ClRegionActions.getClRegions());\r\n  const loadTechnologyAreas = () =>\r\n    dispatch(TechnologyAreaActions.getTechnologyAreas(TenantTypesEnum.MVP));\r\n\r\n  const selectedDemographicsFilterValues = useSelector(\r\n    DemographicsSelectors.getDemographicsFilterValues\r\n  );\r\n  const filteredDemographics = useSelector(DemographicsSelectors.getDemographics);\r\n  const capData = useSelector(DemographicsSelectors.getCapData);\r\n\r\n  useEffect(() => {\r\n    loadCLRegions();\r\n    loadTechnologyAreas();\r\n    filterDemographics([], ApplicationTypeEnum.ANY, TenantTypesEnum.MVP);\r\n    loadCapData();\r\n  }, []);\r\n\r\n  const handleFilter = (selectedDemographicsFilterValues: IFilterValue[]): void => {\r\n    filterDemographics(\r\n      selectedDemographicsFilterValues,\r\n      selectedDemographicsFilterValues.find((v) => v.fieldName === APPLICATION_TYPE)?.value ??\r\n        ApplicationTypeEnum.ANY,\r\n      TenantTypesEnum.MVP\r\n    );\r\n  };\r\n\r\n  /**\r\n   * Call to reset filter values.\r\n   * @method\r\n   */\r\n  const resetFilterValues = (): void => {\r\n    dispatch(DemographicsActions.resetDemographics());\r\n\r\n    handleFilter(defaultMvpDemographicsFilterValues);\r\n  };\r\n\r\n  const renderProjectedPopulationColumn = (item: ICapDataRow): React.ReactElement => (\r\n    <>{item.incomingCohort + item.activeUsers}</>\r\n  );\r\n  const renderCapacityColumn = (item: ICapDataRow): React.ReactElement => {\r\n    const isOverCapacity = item.incomingCohort + item.activeUsers >= item.capacity;\r\n    const capStyle: React.CSSProperties = {\r\n      background: isOverCapacity ? \"yellow\" : undefined,\r\n      fontWeight: isOverCapacity ? \"bold\" : undefined,\r\n      textAlign: \"center\",\r\n    };\r\n    return <div style={capStyle}>{item.capacity}</div>;\r\n  };\r\n\r\n  const capTableColumns: IColumn[] = [\r\n    {\r\n      key: \"awardCategoryName\",\r\n      name: \"Award Category\",\r\n      ariaLabel: \"Award Category\",\r\n      fieldName: \"awardCategoryName\",\r\n      minWidth: 160,\r\n      isResizable: true,\r\n    },\r\n    {\r\n      key: \"activeUsers\",\r\n      name: \"Active Users\",\r\n      ariaLabel: \"Active Users\",\r\n      fieldName: \"activeUsers\",\r\n      minWidth: 100,\r\n      maxWidth: 100,\r\n      isResizable: true,\r\n    },\r\n    {\r\n      key: \"incomingCohort\",\r\n      name: \"Incoming Cohort\",\r\n      ariaLabel: \"Incoming Cohort\",\r\n      fieldName: \"incomingCohort\",\r\n      minWidth: 160,\r\n      isResizable: true,\r\n    },\r\n    {\r\n      key: \"projectedPopulation\",\r\n      name: \"Projected Population\",\r\n      ariaLabel: \"Projected Population\",\r\n      fieldName: \"projectedPopulation\",\r\n      minWidth: 160,\r\n      isResizable: true,\r\n      onRender: (item: ICapDataRow): React.ReactElement => {\r\n        return renderProjectedPopulationColumn(item);\r\n      },\r\n    },\r\n    {\r\n      key: \"capacity\",\r\n      name: \"Capacity\",\r\n      ariaLabel: \"Capacity\",\r\n      fieldName: \"capacity\",\r\n      minWidth: 100,\r\n      isResizable: true,\r\n      onRender: (item: ICapDataRow): React.ReactElement => {\r\n        return renderCapacityColumn(item);\r\n      },\r\n    },\r\n  ];\r\n\r\n  return (\r\n    <Stack horizontal styles={containerStackStyles}>\r\n      <Stack.Item disableShrink>\r\n        <SideBarContainer\r\n          addFilterValue={addDemographicsFilterValue}\r\n          removeFilterValue={removeDemographicsFilterValue}\r\n          updateFilterValue={updateDemographicsFilterValue}\r\n          selectedFilterValues={selectedDemographicsFilterValues}\r\n          filterFields={mvpApplicationDemographicsFilterFields}\r\n        />\r\n        <Stack horizontal tokens={buttonStackTokens}>\r\n          <PrimaryButton\r\n            styles={filterButtonStyles}\r\n            text=\"Apply\"\r\n            onClick={(): void => {\r\n              handleFilter(selectedDemographicsFilterValues);\r\n            }}\r\n          />\r\n          <PrimaryButton\r\n            styles={filterButtonStyles}\r\n            text=\"Reset\"\r\n            onClick={(): void => resetFilterValues()}\r\n          />\r\n        </Stack>\r\n      </Stack.Item>\r\n      <Stack>\r\n        <Stack.Item grow styles={listStackStyles()}>\r\n          <Stack styles={tableStackStyles}>\r\n            <PaddedFlexRow>\r\n              <Title>Demographics</Title>\r\n            </PaddedFlexRow>\r\n            {filteredDemographics && (\r\n              <Stack>\r\n                <Stack horizontal horizontalAlign=\"space-around\">\r\n                  <Stack style={splitStackStyle} verticalAlign=\"space-between\">\r\n                    <Stack.Item styles={cardStyle}>\r\n                      <h5>Average Score for Cohort</h5>\r\n                      <span style={cardTextStyle}>\r\n                        {filteredDemographics.averageApplicationScore}\r\n                      </span>\r\n                    </Stack.Item>\r\n                    <Stack.Item styles={cardStyle}>\r\n                      <h5>Number of Applications</h5>\r\n                      <span style={cardTextStyle}>{filteredDemographics.numberOfApplications}</span>\r\n                    </Stack.Item>\r\n                  </Stack>\r\n\r\n                  <Stack.Item>\r\n                    <DemographicsPieChart data={filteredDemographics.genderData} title=\"Gender\" />\r\n                  </Stack.Item>\r\n                </Stack>\r\n\r\n                <Stack horizontal horizontalAlign=\"space-around\">\r\n                  <Stack.Item style={demographicsStackItemStyle}>\r\n                    <DemographicsPieChart\r\n                      data={filteredDemographics.declineReasonData}\r\n                      title=\"Decline Reason Data\"\r\n                    />\r\n                  </Stack.Item>\r\n                  <Stack.Item style={demographicsStackItemStyle}>\r\n                    <DemographicsPieChart\r\n                      data={filteredDemographics.statusData}\r\n                      title=\"Pending Status Breakdown\"\r\n                    />\r\n                  </Stack.Item>\r\n                </Stack>\r\n\r\n                <Stack.Item style={demographicsStackItemStyle}>\r\n                  <DemographicsBarChart data={filteredDemographics.regionBarData} title=\"Region\" />\r\n                </Stack.Item>\r\n\r\n                <Stack.Item style={demographicsStackItemStyle}>\r\n                  <DemographicsBarChart\r\n                    data={filteredDemographics.awardCategoryBarData}\r\n                    title=\"Award Category\"\r\n                  />\r\n                </Stack.Item>\r\n              </Stack>\r\n            )}\r\n\r\n            <Line />\r\n\r\n            <Stack.Item>\r\n              <PaddedFlexRow>\r\n                <Title>Capacity</Title>\r\n                <InfoText>* This table is unaffected by the filters</InfoText>\r\n              </PaddedFlexRow>\r\n              <DetailsList\r\n                items={capData.capacityData}\r\n                columns={capTableColumns}\r\n                selectionMode={SelectionMode.none}\r\n                layoutMode={DetailsListLayoutMode.fixedColumns}\r\n                isHeaderVisible={true}\r\n                styles={detailListStyles}\r\n              />\r\n            </Stack.Item>\r\n          </Stack>\r\n        </Stack.Item>\r\n      </Stack>\r\n    </Stack>\r\n  );\r\n};\r\n\r\nexport default DemographicsContainer;\r\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React from \"react\";\n\nimport Pagination from \"rc-pagination\";\n\nimport {\n  DetailsList,\n  DetailsListLayoutMode,\n  Dropdown,\n  IColumn,\n  IDetailsRowProps,\n  SelectionMode,\n  Spinner,\n  SpinnerSize,\n} from \"@fluentui/react\";\n\nimport ChevronIcon from \"Components/Common/ChevronIcon/ChevronIcon\";\nimport { PaginationRow } from \"Components/Common/Pagination/Pagination.styles\";\nimport { detailListStyles, spinnerStyles } from \"Components/Common/SharedListStyles.styles\";\nimport { IDistributionListsJoinRequest } from \"Interfaces/DistributionLists/IDistributionListsJoinRequest\";\nimport { formatDate } from \"Utility/FormatHelper\";\n\nimport { IDistributionListPendingRequestsProps } from \"./IDistributionListPendingRequestsProps\";\n\nconst DistributionListPendingRequestsList: React.FunctionComponent<\n  IDistributionListPendingRequestsProps\n> = (props) => {\n  const {\n    data,\n    isLoadingDlJoinRequest,\n    loadDlJoinRequestError,\n    filteredCount,\n    currentPage,\n    pageSize,\n    actions,\n  } = props;\n\n  const formatDisplayDate = (incomingDate: Date | undefined): React.ReactElement => {\n    if (incomingDate) {\n      return <span>{formatDate(incomingDate)}</span>;\n    } else {\n      return <></>;\n    }\n  };\n\n  const columns: IColumn[] = [\n    {\n      key: \"firstName\",\n      name: \"First Name\",\n      ariaLabel: \"First Name\",\n      fieldName: \"firstName\",\n      minWidth: 160,\n      isResizable: true,\n    },\n    {\n      key: \"lastName\",\n      name: \"Last Name\",\n      ariaLabel: \"Last Name\",\n      fieldName: \"lastName\",\n      minWidth: 160,\n      isResizable: true,\n      isSorted: false,\n    },\n    {\n      key: \"emailAddress\",\n      name: \"Email\",\n      ariaLabel: \"Email\",\n      fieldName: \"emailAddress\",\n      minWidth: 200,\n      isResizable: true,\n    },\n    {\n      key: \"technologyAreas\",\n      name: \"Technology Areas\",\n      ariaLabel: \"Technology Areas\",\n      fieldName: \"technologyAreas\",\n      minWidth: 300,\n      isResizable: true,\n    },\n    {\n      key: \"distributionListName\",\n      name: \"DL Name\",\n      ariaLabel: \"DL Name\",\n      fieldName: \"distributionListName\",\n      minWidth: 210,\n    },\n    {\n      key: \"dlTechnologyCategory\",\n      name: \"DL Award Category\",\n      ariaLabel: \"DL Award Category\",\n      fieldName: \"distributionListTechCategory\",\n      minWidth: 240,\n      isResizable: true,\n    },\n    {\n      key: \"dateRequested\",\n      name: \"Date Requested\",\n      ariaLabel: \"Date Requested\",\n      fieldName: \"dateRequested\",\n      minWidth: 160,\n      isResizable: true,\n      onRender: (item: IDistributionListsJoinRequest): React.ReactElement => {\n        return formatDisplayDate(item.dateRequested);\n      },\n    },\n  ];\n\n  if (isLoadingDlJoinRequest) {\n    return <Spinner size={SpinnerSize.large} styles={spinnerStyles} />;\n  } else if (loadDlJoinRequestError !== \"\") {\n    return <div>{loadDlJoinRequestError}</div>;\n  }\n\n  const handleClick = (distributionListRequest: IDistributionListsJoinRequest): void => {\n    actions.onRowClick(distributionListRequest);\n  };\n\n  const onRenderRow = (props?: IDetailsRowProps, defaultRender?: any): React.ReactElement => {\n    const selectedJoinRequest = props!.item as IDistributionListsJoinRequest;\n\n    return defaultRender!({\n      ...props,\n      item: selectedJoinRequest,\n      onClick: () => handleClick(selectedJoinRequest),\n    });\n  };\n\n  return (\n    <>\n      <DetailsList\n        items={data}\n        columns={columns}\n        selectionMode={SelectionMode.none}\n        getKey={(item: IDistributionListsJoinRequest): string => `${item.requestId}`}\n        setKey=\"none\"\n        layoutMode={DetailsListLayoutMode.fixedColumns}\n        isHeaderVisible={true}\n        onRenderRow={onRenderRow}\n        enterModalSelectionOnTouch={true}\n        styles={detailListStyles}\n      />\n      <PaginationRow>\n        <Pagination\n          total={filteredCount}\n          onChange={(page) => actions.updateCurrentPage(page)}\n          showTitle={false}\n          current={currentPage}\n          prevIcon={ChevronIcon(\"ChevronLeft\")}\n          nextIcon={ChevronIcon(\"ChevronRight\")}\n          pageSize={pageSize}\n          showSizeChanger\n        />\n        <Dropdown\n          options={[\n            { key: 16, text: \"Show 16 results\" },\n            { key: 32, text: \"Show 32 results\" },\n            { key: 48, text: \"Show 48 results\" },\n          ]}\n          onChange={(_e, op): void => {\n            actions.updatePageSize(op?.key as number);\n          }}\n          selectedKey={pageSize}\n          className=\"pagination-dropdown\"\n          title=\"Page Size Dropdown\"\n        />\n      </PaginationRow>\n    </>\n  );\n};\n\nexport default DistributionListPendingRequestsList;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { IStackItemStyles, ITextStyles } from \"@fluentui/react\";\n\nexport const dlFormJoinRequestLabelStyles: ITextStyles = {\n  root: {\n    fontWeight: \"600\",\n    fontSize: \"20px\",\n    lineHeight: \"28px\",\n  },\n};\n\nexport const dlStackItemStyles: IStackItemStyles = {\n  root: {\n    marginTop: \"36px\",\n  },\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\nimport React from \"react\";\n\nimport { Stack, StackItem, Text } from \"@fluentui/react\";\n\nimport { SidePanel } from \"Components/SidePanel/SidePanel\";\n\nimport { IDistributionListsJoinRequestFormProps } from \"./DistributionListsJoinRequestFormProps\";\nimport {\n  dlFormJoinRequestLabelStyles,\n  dlStackItemStyles,\n} from \"./DistributionListsJoinRequestFormProps.styles\";\n\nconst DistributionListsJoinRequestForm: React.FunctionComponent<\n  IDistributionListsJoinRequestFormProps\n> = (props) => {\n  const { isOpen, error, disableActions, dlJoinRequest, onSave, onDismiss, onCancel } = props;\n  return (\n    <SidePanel\n      isOpen={isOpen}\n      title=\"DL Join Request\"\n      disableActions={disableActions}\n      error={error}\n      onSave={onSave}\n      onDismiss={onDismiss}\n      onCancel={onCancel}\n      saveButtonLabel={\"Approve\"}\n      cancelButtonLabel={\"Decline\"}\n    >\n      <Stack styles={dlStackItemStyles} tokens={{ childrenGap: \"1rem\" }}>\n        <StackItem>\n          <Text styles={dlFormJoinRequestLabelStyles}>DL Name:</Text>\n        </StackItem>\n        <StackItem>{dlJoinRequest?.distributionListName}</StackItem>\n      </Stack>\n      <Stack styles={dlStackItemStyles} tokens={{ childrenGap: \"1rem\" }}>\n        <StackItem>\n          <Text styles={dlFormJoinRequestLabelStyles}>DL Technology Category:</Text>\n        </StackItem>\n        <StackItem>{dlJoinRequest?.distributionListTechCategory}</StackItem>\n      </Stack>\n      <Stack styles={dlStackItemStyles} tokens={{ childrenGap: \"1rem\" }}>\n        <StackItem>\n          <Text styles={dlFormJoinRequestLabelStyles}>Reason to join:</Text>\n        </StackItem>\n        <StackItem>{dlJoinRequest?.justificationToJoin}</StackItem>\n      </Stack>\n      <Stack styles={dlStackItemStyles} tokens={{ childrenGap: \"1rem\" }}>\n        <StackItem>\n          <Text styles={dlFormJoinRequestLabelStyles}>Name:</Text>\n        </StackItem>\n        <StackItem>\n          {dlJoinRequest?.firstName} {dlJoinRequest?.lastName}\n        </StackItem>\n      </Stack>\n      <Stack styles={dlStackItemStyles} tokens={{ childrenGap: \"1rem\" }}>\n        <StackItem>\n          <Text styles={dlFormJoinRequestLabelStyles}>Email:</Text>\n        </StackItem>\n        <StackItem>{dlJoinRequest?.emailAddress}</StackItem>\n      </Stack>\n      <Stack styles={dlStackItemStyles} tokens={{ childrenGap: \"1rem\" }}>\n        <StackItem>\n          <Text styles={dlFormJoinRequestLabelStyles}>Technology Areas:</Text>\n        </StackItem>\n        <StackItem>{dlJoinRequest?.technologyAreas}</StackItem>\n      </Stack>\n    </SidePanel>\n  );\n};\n\nexport default DistributionListsJoinRequestForm;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { useEffect, useState } from \"react\";\n\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { useParams } from \"react-router\";\n\nimport { Stack } from \"@fluentui/react\";\n\nimport * as distributionListsActions from \"Dataflows/DistributionLists/DistributionListsAction\";\nimport * as distributionListsSelectors from \"Dataflows/DistributionLists/DistributionListsSelector\";\n\nimport { useAuth } from \"Authentication/AuthProvider\";\nimport ListCounts from \"Components/Common/ListCounts/ListCounts\";\nimport { Title } from \"Components/Common/Results/Result.styles\";\nimport DistributionListPendingRequestsList from \"Components/DistributionLists/DistributionListPendingRequestsList\";\nimport DistributionListsJoinRequestForm from \"Components/DistributionListsJoinRequestForm/DistributionListsJoinRequestForm\";\nimport { defaultListingPageSize } from \"Constants/AdminConstants\";\nimport { OperationStatus } from \"Constants/OperationStatus\";\nimport { PermissionsEnum } from \"Constants/RolesPermissionsConstants\";\nimport { SubSiteUrlRootPath, TenantTypesEnum } from \"Constants/TenantTypes\";\nimport {\n  containerStackStyles,\n  listStackStyles,\n  tableStackStyles,\n  PaddedFlexRow,\n} from \"Containers/Common/CommonContainer.styles\";\nimport { IDistributionListsJoinRequest } from \"Interfaces/DistributionLists/IDistributionListsJoinRequest\";\n\nimport { IDistributionListsContainerMatchProps } from \"./IDistributionListRequestsContainerProps\";\n\nconst DistributionListRequestsContainer: React.FunctionComponent = () => {\n  const dispatch = useDispatch();\n  const routeParams = useParams<IDistributionListsContainerMatchProps>();\n  const tenant = SubSiteUrlRootPath[routeParams.tenant];\n\n  const [isSidePanelOpen, setIsSidePanelOpen] = useState<boolean>(false);\n  const [selectedJoinRequest, setSelectedJoinRequest] = useState<IDistributionListsJoinRequest>();\n\n  const networkOperationStatus = useSelector(distributionListsSelectors.getNetworkOperationStatus);\n  const networkOperationStatusApprove = useSelector(\n    distributionListsSelectors.getNetworkOperationStatusApprove\n  );\n  const networkOperationStatusError = useSelector(\n    distributionListsSelectors.getNetworkOperationStatusError\n  );\n  const networkOperationStatusApproveError = useSelector(\n    distributionListsSelectors.getNetworkOperationStatusApproveError\n  );\n  const pageSize = useSelector(distributionListsSelectors.getPageSize);\n  const currentPage = useSelector(distributionListsSelectors.getCurrentPage);\n  const distributionLists = useSelector(distributionListsSelectors.getDistributionLists);\n  const filteredCount = useSelector(distributionListsSelectors.getFilteredCount);\n  const currentTenant = useSelector(distributionListsSelectors.getCurrentTenant);\n\n  const searchDistributionLists = (tenant, page, pageSize): void => {\n    dispatch(distributionListsActions.searchDistributionLists(tenant, page, pageSize));\n  };\n\n  const updateCurrentPage = (currentPage: number): void => {\n    dispatch(distributionListsActions.updateCurrentPage(currentPage));\n  };\n\n  const updatePageSize = (pageSize: number): void => {\n    dispatch(distributionListsActions.updatePageSize(pageSize));\n  };\n\n  const resetDistributionLists = (): void => {\n    dispatch(distributionListsActions.resetDistributionLists());\n  };\n\n  const approveOrDeclineJoinRequest = (\n    joinRequestId: number,\n    tenant: string,\n    approved: boolean\n  ): void => {\n    dispatch(distributionListsActions.approveOrDeclineJoinRequest(joinRequestId, tenant, approved));\n  };\n\n  const handleSearch = (page: number, pageSize: number): void => {\n    searchDistributionLists(tenant, page, pageSize);\n  };\n\n  const handleDismiss = () => {\n    setIsSidePanelOpen(false);\n    setSelectedJoinRequest(undefined);\n  };\n\n  const onRowClick = (dlJoinRequest: IDistributionListsJoinRequest): void => {\n    setSelectedJoinRequest(dlJoinRequest);\n    setIsSidePanelOpen(true);\n  };\n\n  const isLoadingDlJoinRequest = networkOperationStatus === OperationStatus.Pending;\n  const isApprovingDlJoinRequest = networkOperationStatusApprove == OperationStatus.Pending;\n\n  useEffect(() => {\n    if (isLoadingDlJoinRequest) return;\n\n    if (tenant !== currentTenant) {\n      resetDistributionLists();\n      handleSearch(1, defaultListingPageSize);\n      return;\n    }\n\n    handleSearch(currentPage, pageSize);\n  }, [currentPage, pageSize, tenant]);\n\n  useEffect(() => {\n    if (networkOperationStatusApprove === OperationStatus.Succeeded) {\n      handleSearch(currentPage, pageSize);\n      setSelectedJoinRequest(undefined);\n      setIsSidePanelOpen(false);\n    }\n  }, [networkOperationStatusApprove]);\n\n  const { hasPermission } = useAuth();\n  const canUpdateDistributionList =\n    (tenant.toLowerCase() === TenantTypesEnum.MVP.toLowerCase() &&\n      hasPermission(TenantTypesEnum.MVP, PermissionsEnum.MVP_UPDATE_DISTRIBUTIONS_LIST)) ||\n    (tenant.toLowerCase() === TenantTypesEnum.RD.toLowerCase() &&\n      hasPermission(TenantTypesEnum.RD, PermissionsEnum.RD_UPDATE_BENEFITS));\n\n  return (\n    <Stack horizontal styles={containerStackStyles}>\n      <Stack.Item grow styles={listStackStyles()}>\n        <Stack styles={tableStackStyles}>\n          <PaddedFlexRow>\n            <Title>Pending Request</Title>\n            <ListCounts total={filteredCount} loading={isLoadingDlJoinRequest} />\n          </PaddedFlexRow>\n          <DistributionListPendingRequestsList\n            data={distributionLists}\n            filteredCount={filteredCount}\n            pageSize={pageSize}\n            isLoadingDlJoinRequest={isLoadingDlJoinRequest}\n            currentPage={currentPage}\n            loadDlJoinRequestError={networkOperationStatusError}\n            actions={{\n              onRowClick,\n              updatePageSize,\n              updateCurrentPage,\n              approveOrDeclineJoinRequest: (dlJoinRequestId: number, approved: boolean): void => {\n                approveOrDeclineJoinRequest(dlJoinRequestId, tenant, approved);\n              },\n            }}\n          />\n          <DistributionListsJoinRequestForm\n            isOpen={isSidePanelOpen}\n            dlJoinRequest={selectedJoinRequest}\n            disableActions={isApprovingDlJoinRequest || !canUpdateDistributionList}\n            error={networkOperationStatusApproveError}\n            onSave={(): void => {\n              if (!!selectedJoinRequest) {\n                approveOrDeclineJoinRequest(selectedJoinRequest.requestId, tenant, true);\n              }\n            }}\n            onCancel={(): void => {\n              if (!!selectedJoinRequest) {\n                approveOrDeclineJoinRequest(selectedJoinRequest.requestId, tenant, false);\n              }\n            }}\n            onDismiss={handleDismiss}\n          />\n        </Stack>\n      </Stack.Item>\n    </Stack>\n  );\n};\n\nexport default DistributionListRequestsContainer;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\nimport React from \"react\";\n\nimport { useDispatch } from \"react-redux\";\nimport { useHistory } from \"react-router\";\n\nimport Pagination from \"rc-pagination\";\n\nimport {\n  DetailsList,\n  DetailsListLayoutMode,\n  Dropdown,\n  IColumn,\n  IDetailsRowProps,\n  SelectionMode,\n  Spinner,\n  SpinnerSize,\n} from \"@fluentui/react\";\n\nimport ChevronIcon from \"Components/Common/ChevronIcon/ChevronIcon\";\nimport { PaginationRow } from \"Components/Common/Pagination/Pagination.styles\";\nimport { detailListStyles, spinnerStyles } from \"Components/Common/SharedListStyles.styles\";\nimport { TenantTypesEnum } from \"Constants/TenantTypes\";\nimport {\n  updateCurrentPage,\n  updatePageSize,\n  updateSelectedDistributionList,\n} from \"Dataflows/DistributionLists/DistributionListsAction\";\nimport { IDistributionListResult } from \"Interfaces/DistributionLists/IDistributionListResult\";\n\nimport { IDistributionListsProps } from \"./IDistributionListsProps\";\n\nconst DistributionLists: React.FunctionComponent<IDistributionListsProps> = (\n  props: IDistributionListsProps\n) => {\n  const dispatch = useDispatch();\n  const history = useHistory();\n  const { currentPage, data, filteredCount, isLoadingDLs, loadDLsError, pageSize, tenant } = props;\n\n  const columns: IColumn[] = [\n    {\n      key: \"distributionGroupDisplayName\",\n      name: \"Name\",\n      ariaLabel: \"Name\",\n      fieldName: \"distributionGroupDisplayName\",\n      minWidth: 240,\n      isResizable: true,\n    },\n    {\n      key: \"distributionListEmail\",\n      name: \"DL Email\",\n      ariaLabel: \"DL Email\",\n      fieldName: \"distributionListEmail\",\n      minWidth: 240,\n      isResizable: true,\n      isSorted: false,\n    },\n    {\n      key: \"technologyCategories\",\n      name: \"Award Category\",\n      ariaLabel: \"Award Category\",\n      fieldName: \"technologyCategories\",\n      minWidth: 240,\n      isResizable: true,\n    },\n    {\n      key: \"distributionListOwner\",\n      name: \"Owner\",\n      ariaLabel: \"Owner\",\n      fieldName: \"distributionListOwner\",\n      minWidth: 100,\n      isResizable: true,\n    },\n  ];\n\n  // Remove award category column for RD\n  const rdColumns = columns.filter(function (obj) {\n    return obj.key !== \"technologyCategories\";\n  });\n\n  const handleClick = (distributionListEmail: string): void => {\n    dispatch(updateSelectedDistributionList(distributionListEmail));\n    const emailAlias = distributionListEmail.split(\"@\")[0];\n    history.push(`/${tenant}/distributionLists/${emailAlias}`);\n  };\n\n  const onRenderRow = (props?: IDetailsRowProps, defaultRender?: any): any => {\n    const selectedJoinRequest = props!.item as any;\n\n    return defaultRender!({\n      ...props,\n      item: selectedJoinRequest,\n      onClick: () => handleClick(selectedJoinRequest.distributionListEmail),\n    });\n  };\n\n  if (isLoadingDLs) {\n    return <Spinner size={SpinnerSize.large} styles={spinnerStyles} />;\n  }\n\n  if (loadDLsError && loadDLsError !== \"\") {\n    return <p>{loadDLsError}</p>;\n  }\n\n  return (\n    <>\n      <DetailsList\n        items={data}\n        columns={tenant === TenantTypesEnum.MVP ? columns : rdColumns}\n        selectionMode={SelectionMode.none}\n        getKey={(item: IDistributionListResult): string => item.distributionListEmail}\n        setKey=\"none\"\n        layoutMode={DetailsListLayoutMode.fixedColumns}\n        isHeaderVisible={true}\n        onRenderRow={onRenderRow}\n        enterModalSelectionOnTouch={true}\n        styles={detailListStyles}\n      />\n      <PaginationRow>\n        <Pagination\n          total={filteredCount}\n          onChange={(page) => dispatch(updateCurrentPage(page))}\n          showTitle={false}\n          current={currentPage}\n          prevIcon={ChevronIcon(\"ChevronLeft\")}\n          nextIcon={ChevronIcon(\"ChevronRight\")}\n          pageSize={pageSize}\n          showSizeChanger\n        />\n        <Dropdown\n          options={[\n            { key: 16, text: \"Show 16 results\" },\n            { key: 32, text: \"Show 32 results\" },\n            { key: 48, text: \"Show 48 results\" },\n          ]}\n          onChange={(_e, op): void => {\n            dispatch(updatePageSize(op?.key as number));\n          }}\n          selectedKey={pageSize}\n          className=\"pagination-dropdown\"\n          title=\"Page Size Dropdown\"\n        />\n      </PaginationRow>\n    </>\n  );\n};\n\nexport default DistributionLists;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { useEffect } from \"react\";\n\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { useParams } from \"react-router\";\n\nimport { Stack } from \"@fluentui/react\";\n\nimport * as distributionListsActions from \"Dataflows/DistributionLists/DistributionListsAction\";\n\nimport ListCounts from \"Components/Common/ListCounts/ListCounts\";\nimport { Title } from \"Components/Common/Results/Result.styles\";\nimport DistributionLists from \"Components/DistributionLists/DistributionLists\";\nimport { OperationStatus } from \"Constants/OperationStatus\";\nimport { SubSiteUrlRootPath } from \"Constants/TenantTypes\";\nimport {\n  containerStackStyles,\n  listStackStyles,\n  tableStackStyles,\n  PaddedFlexRow,\n} from \"Containers/Common/CommonContainer.styles\";\nimport {\n  getCurrentPage,\n  getDistributionListsByTenant,\n  getDistributionListsByTenantCount,\n  getFetchDistributionListsByTenantError,\n  getNetworkOperationStatusFetchByTenant,\n  getPageSize,\n} from \"Dataflows/DistributionLists/DistributionListsSelector\";\n\nimport { IDistributionListsContainerMatchProps } from \"./IDistributionListRequestsContainerProps\";\n\nconst DistributionListsContainer = () => {\n  const dispatch = useDispatch();\n  const routeParams = useParams<IDistributionListsContainerMatchProps>(); // TODO: Update interface\n  const tenant = SubSiteUrlRootPath[routeParams.tenant];\n  const distributionLists = useSelector(getDistributionListsByTenant);\n  const distributionListCount = useSelector(getDistributionListsByTenantCount);\n  const networkOperationStatusFetchByTenant = useSelector(getNetworkOperationStatusFetchByTenant);\n  const fetchDistributionListsByTenantError = useSelector(getFetchDistributionListsByTenantError);\n  const pageSize = useSelector(getPageSize);\n  const currentPage = useSelector(getCurrentPage);\n\n  useEffect(() => {\n    dispatch(\n      distributionListsActions.fetchDistributionListsByTenant(tenant, pageSize, currentPage)\n    );\n  }, [tenant, currentPage, pageSize]);\n\n  return (\n    <Stack horizontal styles={containerStackStyles}>\n      <Stack.Item grow styles={listStackStyles()}>\n        <Stack styles={tableStackStyles}>\n          <PaddedFlexRow>\n            <Title>Distribution Lists</Title>\n            <ListCounts\n              total={distributionListCount}\n              loading={networkOperationStatusFetchByTenant === OperationStatus.Pending}\n            />\n          </PaddedFlexRow>\n          <DistributionLists\n            data={distributionLists}\n            tenant={tenant}\n            filteredCount={distributionListCount}\n            pageSize={pageSize}\n            isLoadingDLs={networkOperationStatusFetchByTenant === OperationStatus.Pending}\n            currentPage={currentPage}\n            loadDLsError={fetchDistributionListsByTenantError}\n          />\n        </Stack>\n      </Stack.Item>\n    </Stack>\n  );\n};\n\nexport default DistributionListsContainer;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport {\n  EVENT_LOAD,\n  EVENT_LOAD_FAIL,\n  EVENT_LOAD_SUCCESS,\n  EVENTS_FILTER_COUNTRY_VALUE_REMOVE,\n  EVENTS_FILTER_PROVINCE_VALUE_REMOVE,\n  EVENTS_FILTER_VALUE_ADD,\n  EVENTS_FILTER_VALUE_REMOVE,\n  EVENTS_FILTER_VALUE_UPDATE,\n  EVENTS_RESET,\n  EVENTS_SEARCH,\n  EVENTS_SEARCH_FAIL,\n  EVENTS_SEARCH_SUCCESS,\n  UPDATE_EVENT_LISTING_CURRENT_PAGE,\n  UPDATE_EVENT_LISTING_PAGE_SIZE,\n  UPDATE_EVENT_STATUS,\n  UPDATE_EVENT_STATUS_FAIL,\n  UPDATE_EVENT_STATUS_SUCCESS,\n  UPDATE_SELECTED_EVENT,\n  UPDATE_SELECTED_EVENT_ID,\n} from \"../../Constants/ActionTypes\";\nimport { IEvent } from \"../../Interfaces/Event/IEvent\";\nimport { IEventStatus } from \"../../Interfaces/Event/IEventStatus\";\nimport { IFilterValue } from \"../../Interfaces/IFilterValue\";\n\n/**\n * Action for when loading an event.\n * @interface\n */\nexport interface ILoadEvent {\n  type: typeof EVENT_LOAD;\n  selectedEventId: string;\n}\n\n/**\n * Action for when an event is loaded successfully.\n * @interface\n */\nexport interface ILoadEventSuccess {\n  type: typeof EVENT_LOAD_SUCCESS;\n  event: IEvent;\n}\n\n/**\n * Action for when loading an event failed.\n * @interface\n */\nexport interface ILoadEventFail {\n  type: typeof EVENT_LOAD_FAIL;\n  loadSelectedEventError: string;\n}\n\n/**\n * Action for when adding selected filter value.\n * @interface\n */\nexport interface IEventsFilterValueAdd {\n  type: typeof EVENTS_FILTER_VALUE_ADD;\n  filterValue: IFilterValue;\n}\n\n/**\n * Action for when removing selected filter value.\n * @interface\n */\nexport interface IEventsFilterValueRemove {\n  type: typeof EVENTS_FILTER_VALUE_REMOVE;\n  filterValue: IFilterValue;\n}\n\n/**\n * Action for when removing selected filter province value.\n * @interface\n */\nexport interface IEventsFilterProvinceValueRemove {\n  type: typeof EVENTS_FILTER_PROVINCE_VALUE_REMOVE;\n}\n\n/**\n * Action for when removing selected filter country value.\n * @interface\n */\nexport interface IEventsFilterCountryValueRemove {\n  type: typeof EVENTS_FILTER_COUNTRY_VALUE_REMOVE;\n}\n\n/**\n * Action for when updating selected filter value.\n * @interface\n */\nexport interface IEventsFilterValueUpdate {\n  type: typeof EVENTS_FILTER_VALUE_UPDATE;\n  filterValue: IFilterValue;\n}\n\n/**\n * Action for when searching events.\n * @interface\n */\nexport interface ISearchEvents {\n  type: typeof EVENTS_SEARCH;\n  searchText: string;\n  selectedEventsFilterValues: IFilterValue[];\n  searchPage: number;\n  pageSize: number;\n}\n\n/**\n * Action for when events were searched successfully.\n * @interface\n */\nexport interface ISearchEventsSuccess {\n  type: typeof EVENTS_SEARCH_SUCCESS;\n  events: IEvent[];\n  searchPage: number;\n  pageSize: number;\n  filteredCount: number;\n}\n\n/**\n * Action for when loading events failed.\n * @interface\n */\nexport interface ISearchEventsFail {\n  type: typeof EVENTS_SEARCH_FAIL;\n  error: string;\n}\n\n/**\n * Action to update the status of an event\n * @interface\n */\nexport interface IUpdateEventStatus {\n  type: typeof UPDATE_EVENT_STATUS;\n  eventStatus: IEventStatus;\n}\n\n/**\n * Action for when events were loaded successfully.\n * @interface\n */\nexport interface IUpdateEventStatusSuccess {\n  type: typeof UPDATE_EVENT_STATUS_SUCCESS;\n  event: IEvent;\n}\n\n/**\n * Action for when loading events failed.\n * @interface\n */\nexport interface IUpdateEventStatusFail {\n  type: typeof UPDATE_EVENT_STATUS_FAIL;\n  updateEventStatusError: string;\n}\n\n/**\n * Action for when updating user profile ID.\n * @interface\n */\nexport interface IUpdateSelectedEvent {\n  type: typeof UPDATE_SELECTED_EVENT;\n  selectedEvent: IEvent;\n}\n\n/**\n * Action for when setting the selected event id\n * @interface\n */\nexport interface IUpdateSelectedEventId {\n  type: typeof UPDATE_SELECTED_EVENT_ID;\n  selectedEventId: string;\n}\n\n/**\n * Action for when updating listing current page\n * @interface\n */\nexport interface IUpdateCurrentPage {\n  type: typeof UPDATE_EVENT_LISTING_CURRENT_PAGE;\n  currentPage: number;\n}\n\n/**\n * Action for when updating listing page size\n * @interface\n */\nexport interface IUpdatePageSize {\n  type: typeof UPDATE_EVENT_LISTING_PAGE_SIZE;\n  pageSize: number;\n}\n\n/**\n * Action for when resetting events\n * @interface\n */\nexport interface IEventsReset {\n  type: typeof EVENTS_RESET;\n}\n\n/**\n * Action creator for EVENT_LOAD.\n */\nexport function loadEvent(selectedEventId: string): EventActionTypes {\n  return {\n    type: EVENT_LOAD,\n    selectedEventId,\n  };\n}\n\n/**\n * Action creator for EVENTS_LOAD_SUCCESS.\n * @param events the user profiles successfully loaded.\n */\nexport function loadEventSuccess(event: IEvent): EventActionTypes {\n  return {\n    type: EVENT_LOAD_SUCCESS,\n    event,\n  };\n}\n\n/**\n * Action creator for EVENTS_LOAD_FAIL.\n * @param error the error message from the API.\n */\nexport function loadEventFail(loadSelectedEventError: string): EventActionTypes {\n  return {\n    type: EVENT_LOAD_FAIL,\n    loadSelectedEventError,\n  };\n}\n\n/**\n * Action creator for EVENTS_FILTER_VALUE_ADD.\n * @param error the error message from the API.\n */\nexport function addEventsFilterValue(filterValue: IFilterValue): EventActionTypes {\n  return {\n    type: EVENTS_FILTER_VALUE_ADD,\n    filterValue,\n  };\n}\n\n/**\n * Action creator for EVENTS_FILTER_VALUE_REMOVE.\n * @param error the error message from the API.\n */\nexport function removeEventsFilterValue(filterValue: IFilterValue): EventActionTypes {\n  return {\n    type: EVENTS_FILTER_VALUE_REMOVE,\n    filterValue,\n  };\n}\n\n/**\n * Action creator for EVENTS_FILTER_PROVINCE_VALUE_REMOVE.\n * @param error the error message from the API.\n */\nexport function removeEventsFilterProvinceValue(): EventActionTypes {\n  return {\n    type: EVENTS_FILTER_PROVINCE_VALUE_REMOVE,\n  };\n}\n\n/**\n * Action creator for EVENTS_FILTER_COUNTRY_VALUE_REMOVE.\n * @param error the error message from the API.\n */\nexport function removeEventsFilterCountryValue(): EventActionTypes {\n  return {\n    type: EVENTS_FILTER_COUNTRY_VALUE_REMOVE,\n  };\n}\n\n/**\n * Action creator for EVENTS_FILTER_VALUE_UPDATE.\n * @param error the error message from the API.\n */\nexport function updateEventsFilterValue(filterValue: IFilterValue): EventActionTypes {\n  return {\n    type: EVENTS_FILTER_VALUE_UPDATE,\n    filterValue,\n  };\n}\n\n/**\n * Action creator for EVENTS_SEARCH.\n */\nexport function searchEvents(\n  searchText: string,\n  selectedEventsFilterValues: IFilterValue[],\n  searchPage: number,\n  pageSize: number\n): EventActionTypes {\n  return {\n    type: EVENTS_SEARCH,\n    searchText,\n    selectedEventsFilterValues,\n    searchPage,\n    pageSize,\n  };\n}\n\n/**\n * Action creator for EVENTS_SEARCH_SUCCESS.\n * @param events the user profiles successfully searched.\n */\nexport function searchEventsSuccess(\n  events: IEvent[],\n  searchPage: number,\n  pageSize: number,\n  filteredCount: number\n): EventActionTypes {\n  return {\n    type: EVENTS_SEARCH_SUCCESS,\n    events,\n    searchPage,\n    pageSize,\n    filteredCount,\n  };\n}\n\n/**\n * Action creator for EVENTS_SEARCH_FAIL.\n * @param error the error message from the API.\n */\nexport function searchEventsFail(error: string): EventActionTypes {\n  return {\n    type: EVENTS_SEARCH_FAIL,\n    error,\n  };\n}\n\n/**\n * Action creator for UPDATE_EVENT_STATUS.\n */\nexport function updateEventStatus(eventStatus: IEventStatus): EventActionTypes {\n  return {\n    type: UPDATE_EVENT_STATUS,\n    eventStatus,\n  };\n}\n\n/**\n * Action creator for UPDATE_EVENT_STATUS_SUCCESS.\n * @param events the user profiles successfully loaded.\n */\nexport function updateEventStatusSuccess(event: IEvent): EventActionTypes {\n  return {\n    type: UPDATE_EVENT_STATUS_SUCCESS,\n    event,\n  };\n}\n\n/**\n * Action creator for UPDATE_EVENT_STATUS_FAIL.\n * @param error the error message from the API.\n */\nexport function updateEventStatusFail(updateEventStatusError: string): EventActionTypes {\n  return {\n    type: UPDATE_EVENT_STATUS_FAIL,\n    updateEventStatusError,\n  };\n}\n\n/**\n * Action creator for UPDATE_SELECTED_EVENT.\n */\nexport function updateSelectedEvent(selectedEvent: IEvent): EventActionTypes {\n  return {\n    type: UPDATE_SELECTED_EVENT,\n    selectedEvent,\n  };\n}\n\n/**\n * Action creator for UPDATE_SELECTED_EVENT_ID.\n */\nexport function updateSelectedEventId(selectedEventId: string): EventActionTypes {\n  return {\n    type: UPDATE_SELECTED_EVENT_ID,\n    selectedEventId,\n  };\n}\n\n/**\n * Action creator for UPDATE_EVENT_LISTING_CURRENT_PAGE.\n */\nexport function updateCurrentPage(currentPage: number): EventActionTypes {\n  return {\n    type: UPDATE_EVENT_LISTING_CURRENT_PAGE,\n    currentPage,\n  };\n}\n\n/**\n * Action creator for UPDATE_EVENT_LISTING_PAGE_SIZE.\n */\nexport function updatePageSize(pageSize: number): EventActionTypes {\n  return {\n    type: UPDATE_EVENT_LISTING_PAGE_SIZE,\n    pageSize,\n  };\n}\n\n/**\n * Action creator for EVENTS_RESET.\n * @returns {EventActionTypes}\n */\nexport function resetEvents(): EventActionTypes {\n  return {\n    type: EVENTS_RESET,\n  };\n}\n\nexport type EventActionTypes =\n  | ILoadEvent\n  | ILoadEventSuccess\n  | ILoadEventFail\n  | IEventsFilterValueAdd\n  | IEventsFilterValueRemove\n  | IEventsFilterProvinceValueRemove\n  | IEventsFilterCountryValueRemove\n  | IEventsFilterValueUpdate\n  | ISearchEvents\n  | ISearchEventsSuccess\n  | ISearchEventsFail\n  | IUpdateEventStatus\n  | IUpdateEventStatusSuccess\n  | IUpdateEventStatusFail\n  | IUpdateSelectedEvent\n  | IUpdateSelectedEventId\n  | IUpdateCurrentPage\n  | IUpdatePageSize\n  | IEventsReset;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\nexport const EVENT_LOAD = \"EVENT_LOAD\";\nexport const EVENT_LOAD_SUCCESS = \"EVENT_LOAD_SUCCESS\";\nexport const EVENT_LOAD_FAIL = \"EVENT_LOAD_FAIL\";\nexport const EVENTS_RESET = \"EVENTS_RESET\";\n\nexport const EVENTS_FILTER_VALUE_ADD = \"EVENTS_FILTER_VALUE_ADD\";\nexport const EVENTS_FILTER_VALUE_REMOVE = \"EVENTS_FILTER_VALUE_REMOVE\";\nexport const EVENTS_FILTER_PROVINCE_VALUE_REMOVE = \"EVENTS_FILTER_PROVINCE_VALUE_REMOVE\";\nexport const EVENTS_FILTER_COUNTRY_VALUE_REMOVE = \"EVENTS_FILTER_COUNTRY_VALUE_REMOVE\";\nexport const EVENTS_FILTER_VALUE_UPDATE = \"EVENTS_FILTER_VALUE_UPDATE\";\n\nexport const EVENTS_SEARCH = \"EVENTS_SEARCH\";\nexport const EVENTS_SEARCH_SUCCESS = \"EVENTS_SEARCH_SUCCESS\";\nexport const EVENTS_SEARCH_FAIL = \"EVENTS_SEARCH_FAIL\";\n\nexport const UPDATE_EVENT_STATUS = \"UPDATE_EVENT_STATUS\";\nexport const UPDATE_EVENT_STATUS_SUCCESS = \"UPDATE_EVENT_STATUS_SUCCESS\";\nexport const UPDATE_EVENT_STATUS_FAIL = \"UPDATE_EVENT_STATUS_FAIL\";\n\nexport const UPDATE_SELECTED_EVENT = \"UPDATE_SELECTED_EVENT\";\nexport const UPDATE_SELECTED_EVENT_ID = \"UPDATE_SELECTED_EVENT_ID\";\n\nexport const UPDATE_EVENT_LISTING_CURRENT_PAGE = \"UPDATE_EVENT_LISTING_CURRENT_PAGE\";\nexport const UPDATE_EVENT_LISTING_PAGE_SIZE = \"UPDATE_EVENT_LISTING_PAGE_SIZE\";\n","import { IEvent } from \"../../Interfaces/Event/IEvent\";\nimport { IFilterValue } from \"../../Interfaces/IFilterValue\";\n/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\nimport { IEventState } from \"./IEventState\";\n\nexport const getEvents = (eventState: IEventState): IEvent[] => eventState.events;\nexport const isLoadingEvents = (eventState: IEventState) => eventState.isLoadingEvents;\nexport const getLoadEventsError = (eventState: IEventState) => eventState.loadEventsError;\n\n/**\n * Returns current value from state for: eventsFilterValues\n * @param userProfileState\n */\nexport const getEventsFilterValues = (eventState: IEventState): IFilterValue[] =>\n  eventState.eventsFilterValues;\n\nexport const isLoadingSelectedEvent = (eventState: IEventState) =>\n  eventState.isLoadingSelectedEvent;\nexport const getLoadSelectedEventError = (eventState: IEventState) =>\n  eventState.loadSelectedEventError;\n\nexport const isUpdatingStatus = (userProfileState: IEventState) =>\n  userProfileState.isUpdatingStatus;\n\nexport const getSelectedEvent = (eventState: IEventState) => eventState.selectedEvent;\nexport const getSelectedEventId = (eventState: IEventState) => eventState.selectedEventId;\nexport const getUpdateEventStatusError = (eventState: IEventState) =>\n  eventState.updateEventStatusError;\n\n/**\n * Returns current value from state for: currentPage\n * @param eventState\n */\nexport const getCurrentPage = (eventState: IEventState): number => eventState.currentPage;\n\n/**\n * Returns current value from state for: pageSize\n * @param eventState\n */\nexport const getPageSize = (eventState: IEventState): number => eventState.pageSize;\n\n/**\n * Returns current value from state for: searchText\n * @param eventState\n */\nexport const getSearchText = (eventState: IEventState): string => eventState.searchText;\n\n/**\n * Returns the filtered count.\n * @param eventState\n */\nexport const getFilteredCount = (eventState: IEventState): number => eventState.filteredCount;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { IDropdownStyles, IStackTokens, ITextStyles } from \"@fluentui/react\";\n\n/**\n * Tokens for the approval form/data stack\n */\nexport const approvalFromStackTokens: IStackTokens = { childrenGap: 5 };\n\n/**\n * Styling for the data and form labels\n */\nexport const labelTextStyles: ITextStyles = {\n  root: {\n    minWidth: 200,\n  },\n};\n\n/**\n * Styling for the approval drop down selector\n */\nexport const dropdownStyles: Partial<IDropdownStyles> = {\n  root: {\n    width: 200,\n    marginLeft: 0,\n    marginRight: 10,\n  },\n};\n\n/**\n * Styling for the comment textarea\n */\nexport const commentStyles = {\n  flexGrow: 2,\n  marginRight: 16,\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React from \"react\";\n\nimport { connect } from \"react-redux\";\nimport { Dispatch } from \"redux\";\n\nimport { ErrorMessage, FastField, Form, Formik } from \"formik\";\nimport * as Yup from \"yup\";\n\nimport { IDropdownOption, PrimaryButton, Spinner, SpinnerSize, Stack, Text } from \"@fluentui/react\";\n\nimport * as EventActions from \"../../Dataflows/Event/EventAction\";\n\nimport { withAuthProvider } from \"Authentication/AuthProvider\";\nimport { RedText } from \"Components/Common/FormikErrorMessage/FormikErrorMessage.styles\";\nimport { RedTextDiv } from \"Components/ReactHookForm/HookErrorMessage/HookErrorMessage.styles\";\n\nimport { approvalTypes } from \"../../Constants/EventConstants\";\nimport {\n  getSelectedEventId,\n  getUpdateEventStatusError,\n  isUpdatingStatus,\n} from \"../../Dataflows/Event/EventSelector\";\nimport { AppState } from \"../../Dataflows/Reducers\";\nimport { IEventStatus } from \"../../Interfaces/Event/IEventStatus\";\nimport FormikDropdown from \"../Common/Dropdown/FormikDropdown\";\nimport {\n  approvalFromStackTokens,\n  commentStyles,\n  dropdownStyles,\n  labelTextStyles,\n} from \"./EventApprovalForm.styles\";\nimport { IEventApprovalFormProps } from \"./IEventApprovalFormProps\";\n\nconst approvalOptions: IDropdownOption[] = approvalTypes.map((approvalType) => ({\n  key: approvalType.key,\n  text: approvalType.text,\n}));\n\nclass EventApprovalForm extends React.Component<IEventApprovalFormProps> {\n  render(): React.ReactElement<IEventApprovalFormProps> {\n    const {\n      isUpdatingStatus,\n      selectedEventId,\n      updateEventStatusError,\n      authProvider,\n      eventStatusName,\n      eventFormatName,\n      inPersonAttendees,\n      onDemandViews,\n      liveOnlineViews,\n      actions: { updateEventStatus },\n    } = this.props;\n\n    const { account } = authProvider;\n\n    const EventApprovalSchema = Yup.object().shape({\n      approvalType: Yup.string().required(\"Status is required.\"),\n      inPersonAttendees: Yup.number().test({\n        name: \"inPersonAttendees-validation\",\n        message: \"In Person Attendees cannot be negative.\",\n        test: (value) =>\n          eventStatusName === \"Submitted\" &&\n          (eventFormatName === \"Hybrid\" || eventFormatName === \"In-Person\")\n            ? value >= 0\n            : true,\n      }),\n      onDemandViews: Yup.number().test({\n        name: \"onDemandViews-validation\",\n        message: \"On Demand Views cannot be negative.\",\n        test: (value) =>\n          eventStatusName === \"Submitted\" &&\n          (eventFormatName === \"Hybrid\" || eventFormatName === \"Online\")\n            ? value >= 0\n            : true,\n      }),\n      liveOnlineViews: Yup.number().test({\n        name: \"liveOnlineViews-validation\",\n        message: \"Live Online Views cannot be negative.\",\n        test: (value) =>\n          eventStatusName === \"Submitted\" &&\n          (eventFormatName === \"Hybrid\" || eventFormatName === \"Online\")\n            ? value >= 0\n            : true,\n      }),\n      comment: Yup.string().when(\"approvalType\", {\n        is: (value) => value === \"Returned\" || value === \"Denied\",\n        then: Yup.string().required(\"Feedback is required\"),\n        otherwise: Yup.string(),\n      }),\n    });\n\n    if (isUpdatingStatus) {\n      return <Spinner size={SpinnerSize.large} />;\n    } else if (updateEventStatusError !== \"\") {\n      return (\n        <div>\n          <Text>{updateEventStatusError.toString()}</Text>\n        </div>\n      );\n    }\n\n    const renderField = (name: string, label: string): React.ReactElement => (\n      <Stack horizontal key={`${name}Stack`}>\n        <Text styles={labelTextStyles}>{label}:</Text>\n        <FastField\n          name={name}\n          as=\"input\"\n          type=\"number\"\n          className=\"form-input\"\n          placeholder={label}\n          style={commentStyles}\n        />\n        <ErrorMessage\n          className=\"error\"\n          name={name}\n          component=\"div\"\n          render={(message) => (\n            <RedTextDiv role=\"alert\" aria-relevant=\"all\">\n              <RedText className=\"error\">{message}</RedText>\n            </RedTextDiv>\n          )}\n        />\n      </Stack>\n    );\n\n    const renderReachFields = (): React.ReactElement | null => {\n      if (eventStatusName === \"Submitted\") {\n        switch (eventFormatName) {\n          case \"Hybrid\":\n            return (\n              <>\n                {renderField(\"liveOnlineViews\", \"Live Online Views\")}\n                {renderField(\"onDemandViews\", \"On-Demand Views\")}\n                {renderField(\"inPersonAttendees\", \"In-Person Attendees\")}\n              </>\n            );\n          case \"In-Person\":\n            return renderField(\"inPersonAttendees\", \"In-Person Attendees\");\n          case \"Online\":\n            return (\n              <>\n                {renderField(\"liveOnlineViews\", \"Live Online Views\")}\n                {renderField(\"onDemandViews\", \"On-Demand Views\")}\n              </>\n            );\n          default:\n            return null;\n        }\n      }\n      return null;\n    };\n\n    return (\n      <Formik\n        initialValues={{\n          eventIdentifier: selectedEventId,\n          approvalType: \"\",\n          comment: \"\",\n          inPersonAttendees: eventStatusName === \"Submitted\" ? 0 : inPersonAttendees,\n          onDemandViews: eventStatusName === \"Submitted\" ? 0 : onDemandViews,\n          liveOnlineViews: eventStatusName === \"Submitted\" ? 0 : liveOnlineViews,\n          createdBy: account.userName,\n        }}\n        validationSchema={EventApprovalSchema}\n        onSubmit={(values, { setSubmitting, resetForm }): void => {\n          setSubmitting(false);\n          const eventStatus: IEventStatus = {\n            eventIdentifier: values.eventIdentifier,\n            approvalType: values.approvalType,\n            comment: values.comment,\n            inPersonAttendees: values.inPersonAttendees,\n            onDemandViews: values.onDemandViews,\n            liveOnlineViews: values.liveOnlineViews,\n            createdBy: values.createdBy,\n          };\n          updateEventStatus(eventStatus);\n          resetForm();\n        }}\n      >\n        {({ isSubmitting, setFieldValue, values }): React.ReactNode => (\n          <Form>\n            <Stack tokens={approvalFromStackTokens}>\n              <Stack horizontal key=\"approvalTypeStack\">\n                <Text styles={labelTextStyles}>Approval type:</Text>\n                <FastField\n                  name=\"approvalType\"\n                  value={values.approvalType}\n                  placeholder=\"Select approval type\"\n                  onChange={(_: React.MouseEvent<HTMLElement>, value: any): void => {\n                    setFieldValue(\"approvalType\", value.key);\n                  }}\n                  options={approvalOptions}\n                  component={FormikDropdown}\n                  styles={dropdownStyles}\n                />\n              </Stack>\n              <>{renderReachFields()}</>\n              <Stack horizontal key=\"approvalFeedbackStack\">\n                <Text styles={labelTextStyles}>Feedback:</Text>\n                <FastField\n                  name=\"comment\"\n                  as=\"textarea\"\n                  rows={4}\n                  className=\"form-input\"\n                  placeholder=\"Feedback\"\n                  style={commentStyles}\n                />\n                <ErrorMessage name=\"comment\" component=\"div\" />\n              </Stack>\n              <Stack horizontal key=\"approvalButtonStack\">\n                <Stack.Item>\n                  <Text />\n                </Stack.Item>\n                <PrimaryButton text=\"Assign Status\" disabled={isSubmitting} type=\"submit\" />\n              </Stack>\n            </Stack>\n          </Form>\n        )}\n      </Formik>\n    );\n  }\n}\n\n/**\n * Maps StudentsContainer to redux state\n * @param {AppState} state The App state.\n */\nconst mapStateToProps = (state: AppState, ownProps: IEventApprovalFormProps & any) => ({\n  isUpdatingStatus: isUpdatingStatus(state.eventState),\n  selectedEventId: getSelectedEventId(state.eventState),\n  updateEventStatusError: getUpdateEventStatusError(state.eventState),\n});\n\n/**\n * Maps Component's dispatch/handler props to redux state\n * @param {Dispatch} dispatch The dispatch.\n */\nconst mapDispatchToProps = (dispatch: Dispatch<EventActions.EventActionTypes>) => ({\n  actions: {\n    updateEventStatus: (eventStatus: IEventStatus): EventActions.EventActionTypes =>\n      dispatch(EventActions.updateEventStatus(eventStatus)),\n  },\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(withAuthProvider(EventApprovalForm));\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\nimport React from \"react\";\n\nimport { connect } from \"react-redux\";\nimport { Dispatch } from \"redux\";\n\nimport {\n  DetailsList,\n  DetailsListLayoutMode,\n  IColumn,\n  SelectionMode,\n} from \"@fluentui/react/lib/DetailsList\";\nimport { Text } from \"@fluentui/react/lib/Text\";\n\nimport * as EventActions from \"../../Dataflows/Event/EventAction\";\n\nimport { getSelectedEvent } from \"../../Dataflows/Event/EventSelector\";\nimport { AppState } from \"../../Dataflows/Reducers\";\nimport { IEventUserProfileRole } from \"../../Interfaces/Event/IEventUserProfileRole\";\nimport { IEventStudentListProps } from \"./IEventStudentListProps\";\n\nconst columns: IColumn[] = [\n  {\n    key: \"userProfileId\",\n    name: \"ID\",\n    ariaLabel: \"Student ID\",\n    fieldName: \"userProfileId\",\n    minWidth: 20,\n    maxWidth: 36,\n  },\n  {\n    key: \"userProfileFirstName\",\n    name: \"First Name\",\n    ariaLabel: \"First name of student\",\n    fieldName: \"userProfileFirstName\",\n    minWidth: 100,\n    maxWidth: 150,\n  },\n  {\n    key: \"userProfileLastName\",\n    name: \"Last Name\",\n    ariaLabel: \"Last name of student\",\n    fieldName: \"userProfileLastName\",\n    minWidth: 100,\n    maxWidth: 150,\n  },\n  {\n    key: \"userProfilePrimaryEmail\",\n    name: \"Primary Email\",\n    ariaLabel: \"Primary Email of student\",\n    fieldName: \"userProfilePrimaryEmail\",\n    minWidth: 100,\n    maxWidth: 150,\n  },\n  {\n    key: \"userProfileStudentPartnerEmail\",\n    name: \"Student Ambassadors Email\",\n    ariaLabel: \"Student Ambassadors Email\",\n    fieldName: \"userProfileStudentPartnerEmail\",\n    minWidth: 100,\n    maxWidth: 150,\n  },\n  {\n    key: \"userProfileLevelStatus\",\n    name: \"Milestone\",\n    ariaLabel: \"Student's milestone\",\n    fieldName: \"userProfileLevelStatus\",\n    minWidth: 150,\n    maxWidth: 200,\n  },\n  {\n    key: \"eventRoleName\",\n    name: \"Event Role Name\",\n    ariaLabel: \"Event role of student\",\n    fieldName: \"eventRoleName\",\n    minWidth: 100,\n    maxWidth: 120,\n  },\n];\n\nconst EventStudentList: React.FunctionComponent<IEventStudentListProps> = (\n  props: IEventStudentListProps\n) => {\n  const { selectedEvent } = props;\n  const students = [...selectedEvent.eventUserProfileContributorRole];\n\n  if (selectedEvent.eventOrganizerUserProfileRole) {\n    students.push(selectedEvent.eventOrganizerUserProfileRole);\n  }\n\n  if (students.length === 0) {\n    return <Text>No students connected to event.</Text>;\n  }\n\n  return (\n    <DetailsList\n      items={students}\n      columns={columns}\n      selectionMode={SelectionMode.none}\n      getKey={(item: any): string => `${(item as IEventUserProfileRole).userProfileId}`}\n      setKey=\"none\"\n      layoutMode={DetailsListLayoutMode.fixedColumns}\n      isHeaderVisible={true}\n      enterModalSelectionOnTouch={false}\n    />\n  );\n};\n\n/**\n * Maps StudentsContainer to redux state\n * @param {AppState} state The App state.\n */\nconst mapStateToProps = (state: AppState, ownProps: IEventStudentListProps & any) => ({\n  selectedEvent: getSelectedEvent(state.eventState),\n});\n\n/**\n * Maps Component's dispatch/handler props to redux state\n * @param {Dispatch} dispatch The dispatch.\n */\nconst mapDispatchToProps = (dispatch: Dispatch<EventActions.EventActionTypes>) => ({});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(EventStudentList);\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\nimport styled from \"styled-components\";\nimport {\n  FontSizes,\n  getTheme,\n  ISpinnerStyles,\n  IStackStyles,\n  IStackTokens,\n  ITextStyles,\n} from \"@fluentui/react\";\n\nconst theme = getTheme();\n\n/**\n * Tokens for stack of event data elements\n */\nexport const eventStackTokens: IStackTokens = { childrenGap: 5 };\n\n/**\n * Styles for stack of event data elements\n */\nexport const eventStackStyles: IStackStyles = {\n  root: {\n    marginTop: 10,\n  },\n};\n\n/**\n * Styling for the data and form labels\n */\nexport const labelTextStyles: ITextStyles = {\n  root: {\n    minWidth: 200,\n  },\n};\n\n/**\n * Styles for title at top of modal\n */\nexport const titleStyles: ITextStyles = {\n  root: {\n    fontSize: FontSizes.xLarge,\n    marginBottom: 20,\n  },\n};\n\n/**\n * Element at top of modal to display title\n */\nexport const TitleContainer = styled.div`\n  width: 100%;\n  padding-bottom: 0.5rem;\n  border-bottom: 1px solid ${theme.palette.neutralLight};\n`;\n\n/**\n * Styles for section within the detail (to separate sections of event data)\n */\nexport const sectionTitleStyles: ITextStyles = {\n  root: {\n    fontSize: FontSizes.large,\n    paddingTop: 20,\n  },\n};\n\n/**\n * Styles for the loading spinner\n */\nexport const spinnerStyles: ISpinnerStyles = {\n  root: {\n    marginTop: 32,\n  },\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\nimport React from \"react\";\n\nimport { connect } from \"react-redux\";\nimport { bindActionCreators, Dispatch } from \"redux\";\n\nimport { isEmpty } from \"lodash\";\n\nimport { Pivot, PivotItem, Spinner, SpinnerSize, Stack, Text } from \"@fluentui/react\";\n\nimport * as EventActions from \"../../Dataflows/Event/EventAction\";\n\nimport { placeholderString } from \"../../Constants/ProfileConstants\";\nimport {\n  getLoadSelectedEventError,\n  getSelectedEvent,\n  getSelectedEventId,\n  isLoadingSelectedEvent,\n} from \"../../Dataflows/Event/EventSelector\";\nimport { AppState } from \"../../Dataflows/Reducers\";\nimport { IDisplayableField } from \"../../Interfaces/IDisplayableField\";\nimport { formatDate, getFormattedDateTime, isDateEmpty } from \"../../Utility/FormatHelper\";\nimport EventApprovalForm from \"../EventApprovalForm/EventApprovalForm\";\nimport EventStudentList from \"../EventStudentList/EventStudentList\";\nimport {\n  eventStackStyles,\n  eventStackTokens,\n  labelTextStyles,\n  sectionTitleStyles,\n  spinnerStyles,\n  titleStyles,\n  TitleContainer,\n} from \"./EventDetails.styles\";\nimport { IEventDetailProps } from \"./IEventDetailProps\";\n\nconst eventFields = [\n  {\n    name: \"id\",\n    label: \"ID\",\n    type: \"number\",\n  },\n  {\n    name: \"description\",\n    label: \"Description\",\n    type: \"text\",\n  },\n  {\n    name: \"eventTypeName\",\n    label: \"Event Type\",\n    type: \"text\",\n  },\n  {\n    name: \"eventFormatName\",\n    label: \"Event Format\",\n    text: \"text\",\n  },\n  {\n    name: \"dateStart\",\n    label: \"Start date\",\n    type: \"date\",\n  },\n  {\n    name: \"dateEnd\",\n    label: \"End date\",\n    type: \"date\",\n  },\n  {\n    name: \"timeZoneStandardName\",\n    label: \"Time Zone\",\n    type: \"text\",\n  },\n  {\n    name: \"expectedAttendance\",\n    label: \"Expected attendance\",\n    type: \"number\",\n  },\n  {\n    name: \"actualAttendance\",\n    label: \"Actual attendance\",\n    type: \"number\",\n  },\n  {\n    name: \"city\",\n    label: \"City\",\n    type: \"text\",\n  },\n  {\n    name: \"stateOrProvince\",\n    label: \"State or province\",\n    type: \"text\",\n  },\n  {\n    name: \"eventCountryOrRegionNames\",\n    label: \"Country or Region\",\n    type: \"text\",\n  },\n  {\n    name: \"streetAddress\",\n    label: \"Street address\",\n    type: \"text\",\n  },\n  {\n    name: \"buildingName\",\n    label: \"Building name\",\n    type: \"text\",\n  },\n  {\n    name: \"roomNo\",\n    label: \"Room Number\",\n    type: \"text\",\n  },\n  {\n    name: \"eventUri\",\n    label: \"Event Link\",\n    type: \"href\",\n  },\n  {\n    name: \"photosUrl\",\n    label: \"Photo URL\",\n    type: \"href\",\n  },\n  {\n    name: \"isHighImpact\",\n    label: \"High impact?\",\n    type: \"boolean\",\n  },\n  {\n    name: \"isPrivate\",\n    label: \"Private?\",\n    type: \"boolean\",\n  },\n  {\n    name: \"isCateringRequested\",\n    label: \"Catering Requested?\",\n    type: \"boolean\",\n  },\n  {\n    name: \"isReimbursementRequested\",\n    label: \"Reimbursement Requested?\",\n    type: \"boolean\",\n  },\n  {\n    name: \"technologyFocusAreaName\",\n    label: \"Technology Area\",\n    type: \"string\",\n  },\n  {\n    name: \"eventSkillNames\",\n    label: \"Skills\",\n    type: \"array\",\n  },\n  {\n    name: \"liveOnlineViews\",\n    label: \"Live Online Views\",\n    type: \"number\",\n  },\n  {\n    name: \"onDemandViews\",\n    label: \"On Demand Views\",\n    type: \"number\",\n  },\n  {\n    name: \"inPersonAttendees\",\n    label: \"In Person Attendees\",\n    type: \"number\",\n  },\n  {\n    name: \"eventTargetAudienceNames\",\n    label: \"Target Audience\",\n    type: \"array\",\n  },\n] as IDisplayableField[];\n\nclass EventDetails extends React.Component<IEventDetailProps> {\n  componentDidMount(): void {\n    const { selectedEventId, actions } = this.props;\n    selectedEventId && actions.loadSelectedEvent(selectedEventId);\n  }\n\n  render(): React.ReactElement<IEventDetailProps> {\n    const { selectedEvent, isLoadingSelectedEvent, loadSelectedEventError } = this.props;\n\n    const getEventFormatName = (field: string): any => {\n      return selectedEvent[field];\n    };\n\n    const getFieldValue = (field: IDisplayableField): any => {\n      const fieldValue = (selectedEvent as any)[field.name];\n\n      if (isEmpty(String(fieldValue)) || fieldValue === null) return \"---\";\n\n      switch (field.type) {\n        case \"array\":\n          return fieldValue?.map((item: string) => <li key={item}>{item}</li>);\n        case \"boolean\":\n          return fieldValue ? \"Yes\" : \"No\";\n        case \"date\":\n          return formatDate(fieldValue);\n        case \"href\":\n          return (\n            <a href={fieldValue} target=\"_blank\" rel=\"noopener noreferrer\">\n              {fieldValue}\n            </a>\n          );\n        default:\n          return fieldValue;\n      }\n    };\n\n    if (isLoadingSelectedEvent) {\n      return <Spinner size={SpinnerSize.large} styles={spinnerStyles} />;\n    } else if (loadSelectedEventError !== \"\") {\n      return <div>{loadSelectedEventError}</div>;\n    }\n\n    const eventCreatedBy = selectedEvent.createdBy ? selectedEvent.createdBy : placeholderString;\n\n    const eventFormat = getEventFormatName(\"eventFormatName\"); // Ensure the property name is correct\n\n    return (\n      <>\n        <TitleContainer>\n          <Text styles={titleStyles}>{selectedEvent.title}</Text>\n        </TitleContainer>\n        <Pivot aria-label=\"Event details\">\n          <PivotItem headerText=\"Details\">\n            <Stack tokens={eventStackTokens} styles={eventStackStyles}>\n              {eventFields\n                .filter((field) => {\n                  if (eventFormat === \"Hybrid\") {\n                    return true; // Show all fields for Hybrid format\n                  } else if (eventFormat === \"In-Person\") {\n                    return (\n                      field.name === \"inPersonAttendees\" ||\n                      (field.name !== \"liveOnlineViews\" && field.name !== \"onDemandViews\")\n                    );\n                  } else if (eventFormat === \"Online\") {\n                    return (\n                      field.name === \"liveOnlineViews\" ||\n                      field.name === \"onDemandViews\" ||\n                      field.name !== \"inPersonAttendees\"\n                    );\n                  }\n                  return field.name !== \"inPersonAttendees\"; // Exclude inPersonAttendees for other formats\n                })\n                .map((field) => (\n                  <Stack horizontal key={field.name}>\n                    <Text styles={labelTextStyles}>{field.label}:</Text>\n                    <Text>{getFieldValue(field)}</Text>\n                  </Stack>\n                ))}\n              <Text styles={sectionTitleStyles}>Event Status</Text>\n              <Stack horizontal key=\"eventCreatedBy\">\n                <Text styles={labelTextStyles}>Created by:</Text>\n                <Text>{eventCreatedBy}</Text>\n              </Stack>\n              <Stack horizontal key=\"eventDateCreated\">\n                <Text styles={labelTextStyles}>Created on:</Text>\n                {!isDateEmpty(selectedEvent.dateCreated) && (\n                  <Text>{getFormattedDateTime(selectedEvent.dateCreated)}</Text>\n                )}\n              </Stack>\n              {/* Displaying this as separate field as event may be in status that is not selectable for approval */}\n              <Stack horizontal key=\"eventStatusName\">\n                <Text styles={labelTextStyles}>Current status:</Text>\n                <Text>{selectedEvent.eventStatusName}</Text>\n              </Stack>\n              {selectedEvent.lastReviewedBy && (\n                <>\n                  <Stack horizontal key=\"eventLastReviewedBy\">\n                    <Text styles={labelTextStyles}>Last Reviewed by:</Text>\n                    <Text>\n                      {selectedEvent.lastReviewedBy}\n                      {!isDateEmpty(selectedEvent.dateLastReviewed) &&\n                        ` (${getFormattedDateTime(selectedEvent.dateLastReviewed)})`}\n                    </Text>\n                  </Stack>\n                </>\n              )}\n              <EventApprovalForm {...selectedEvent} />\n            </Stack>\n          </PivotItem>\n          <PivotItem headerText=\"Students\">\n            <EventStudentList />\n          </PivotItem>\n        </Pivot>\n      </>\n    );\n  }\n}\n\n/**\n * Maps StudentsContainer to redux state\n * @param {AppState} state The App state.\n */\nconst mapStateToProps = (state: AppState, ownProps: IEventDetailProps & any) => ({\n  isLoadingSelectedEvent: isLoadingSelectedEvent(state.eventState),\n  loadSelectedEventError: getLoadSelectedEventError(state.eventState),\n  selectedEventId: getSelectedEventId(state.eventState),\n  selectedEvent: getSelectedEvent(state.eventState),\n});\n\n/**\n * Maps Component's dispatch/handler props to redux state\n * @param {Dispatch} dispatch The dispatch.\n */\nconst mapDispatchToProps = (dispatch: Dispatch<EventActions.EventActionTypes>) => ({\n  actions: {\n    loadSelectedEvent: bindActionCreators(EventActions.loadEvent, dispatch),\n  },\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(EventDetails);\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\nimport React, { useState } from \"react\";\n\nimport { connect } from \"react-redux\";\nimport { bindActionCreators, Dispatch } from \"redux\";\n\nimport Pagination from \"rc-pagination\";\n\nimport {\n  DetailsList,\n  DetailsListLayoutMode,\n  Dropdown,\n  IconButton,\n  IColumn,\n  IDetailsRowProps,\n  Modal,\n  SelectionMode,\n  Spinner,\n  SpinnerSize,\n  Text,\n} from \"@fluentui/react\";\n\nimport * as EventActions from \"Dataflows/Event/EventAction\";\n\nimport ChevronIcon from \"Components/Common/ChevronIcon/ChevronIcon\";\nimport {\n  detailListStyles,\n  iconButtonStyles,\n  modalHeaderStyles,\n  modalStyles,\n  spinnerStyles,\n  ModalContent,\n  ModalHeader,\n  StyledSpan,\n} from \"Components/Common/SharedListStyles.styles\";\nimport StatusElement from \"Components/Common/Status/StatusElement\";\nimport {\n  getCurrentPage,\n  getLoadEventsError,\n  getPageSize,\n  getSearchText,\n  isLoadingEvents,\n} from \"Dataflows/Event/EventSelector\";\nimport { AppState } from \"Dataflows/Reducers\";\nimport { IEvent } from \"Interfaces/Event/IEvent\";\nimport { formatDate } from \"Utility/FormatHelper\";\n\nimport { PaginationRow } from \"../Common/Pagination/Pagination.styles\";\nimport \"../Common/Pagination/Pagination.styles.css\";\nimport EventDetails from \"../EventDetails/EventDetails\";\nimport { IEventsListProps } from \"./IEventsListProps\";\n\n/**\n * List of student profiles\n * @Component\n * @returns {React.FunctionComponent<IEventsListProps>}\n */\nconst EventsList: React.FunctionComponent<IEventsListProps> = (props: IEventsListProps) => {\n  const [isModalOpen, setIsModalOpen] = useState(false);\n  const { data, actions, loadEventsError, isLoadingEvents, filteredCount, currentPage, pageSize } =\n    props;\n\n  const eventsToRender = data.slice(0, pageSize);\n\n  const formatEventDate = (incomingDate: Date): React.ReactElement => {\n    return <span>{formatDate(incomingDate)}</span>;\n  };\n\n  const formatStatusColumn = (statusKey: string): React.ReactElement => {\n    return <StatusElement statusValue={statusKey} />;\n  };\n\n  const columns: IColumn[] = [\n    {\n      key: \"id\",\n      name: \"ID\",\n      ariaLabel: \"Event ID\",\n      fieldName: \"id\",\n      minWidth: 40,\n      maxWidth: 50,\n      isResizable: true,\n    },\n    {\n      key: \"title\",\n      name: \"Title\",\n      ariaLabel: \"Title of event\",\n      fieldName: \"title\",\n      minWidth: 100,\n      maxWidth: 120,\n      isResizable: true,\n      isSorted: false,\n    },\n    {\n      key: \"createdBy\",\n      name: \"Created By\",\n      ariaLabel: \"Who created of event\",\n      fieldName: \"createdBy\",\n      minWidth: 80,\n      maxWidth: 100,\n      isResizable: true,\n    },\n    {\n      key: \"eventType\",\n      name: \"Event Type\",\n      ariaLabel: \"Type of event\",\n      fieldName: \"eventType\",\n      minWidth: 100,\n      maxWidth: 150,\n      isResizable: true,\n    },\n    {\n      key: \"dateStart\",\n      name: \"Start Date\",\n      ariaLabel: \"Start date of event\",\n      fieldName: \"dateStart\",\n      minWidth: 100,\n      maxWidth: 110,\n      onRender: (item: IEvent): React.ReactElement => {\n        return formatEventDate(item.dateStart);\n      },\n      isResizable: true,\n    },\n    {\n      key: \"dateEnd\",\n      name: \"End Date\",\n      ariaLabel: \"End date of event\",\n      fieldName: \"dateEnd\",\n      minWidth: 100,\n      maxWidth: 110,\n      onRender: (item: IEvent): React.ReactElement => {\n        return formatEventDate(item.dateEnd);\n      },\n      isResizable: true,\n    },\n    {\n      key: \"eventStatus\",\n      name: \"Event Status\",\n      ariaLabel: \"Status\",\n      fieldName: \"eventStatusName\",\n      minWidth: 100,\n      maxWidth: 150,\n      onRender: (item: IEvent): React.ReactElement => {\n        return formatStatusColumn(item.eventStatusName);\n      },\n      isResizable: true,\n    },\n    {\n      key: \"lastReviewedBy\",\n      name: \"Last Reviewed By\",\n      ariaLabel: \"Who reviewed the event\",\n      fieldName: \"lastReviewedBy\",\n      minWidth: 100,\n      maxWidth: 150,\n      isResizable: true,\n    },\n  ];\n\n  const onClickEvent = (eventId: string): void => {\n    actions.updateSelectedEventId(eventId);\n    setIsModalOpen(true);\n  };\n\n  const onModalClose = (): void => {\n    setIsModalOpen(false);\n  };\n\n  const onRenderColumn = (item: IEvent, index?: number, column?: IColumn): React.ReactElement => {\n    const fieldContent = item[column?.fieldName as keyof IEvent] as string;\n    if (column?.key == \"id\") {\n      return <StyledSpan>{fieldContent}</StyledSpan>;\n    }\n    return <span>{fieldContent}</span>;\n  };\n\n  const onRenderRow = (props?: IDetailsRowProps, defaultRender?: any): React.ReactElement => {\n    const selectedEvent = props!.item as IEvent;\n\n    // Allows for calculated values to be included in the item data rendered by list\n    const calculatedItemProps = {\n      ...selectedEvent,\n      ...{ createdBy: selectedEvent.createdBy },\n    };\n\n    return defaultRender!({\n      ...props,\n      item: { ...calculatedItemProps },\n      onClick: () => onClickEvent(selectedEvent.eventIdentifier),\n    });\n  };\n\n  if (isLoadingEvents) {\n    return <Spinner size={SpinnerSize.large} styles={spinnerStyles} />;\n  } else if (loadEventsError !== \"\") {\n    return <div>{loadEventsError}</div>;\n  }\n\n  return (\n    <>\n      <DetailsList\n        items={eventsToRender}\n        columns={columns}\n        selectionMode={SelectionMode.none}\n        getKey={(item: any): string => `${(item as IEvent).id}`}\n        setKey=\"none\"\n        layoutMode={DetailsListLayoutMode.fixedColumns}\n        isHeaderVisible={true}\n        onRenderRow={onRenderRow}\n        onRenderItemColumn={onRenderColumn}\n        enterModalSelectionOnTouch={true}\n        styles={detailListStyles}\n      />\n      <PaginationRow>\n        <Pagination\n          total={filteredCount}\n          onChange={(page) => actions.updateCurrentPage(page)}\n          showTitle={false}\n          current={currentPage}\n          prevIcon={ChevronIcon(\"ChevronLeft\")}\n          nextIcon={ChevronIcon(\"ChevronRight\")}\n          pageSize={pageSize}\n          showSizeChanger\n        />\n        <Dropdown\n          options={[\n            { key: 16, text: \"Show 16 results\" },\n            { key: 32, text: \"Show 32 results\" },\n            { key: 48, text: \"Show 48 results\" },\n          ]}\n          onChange={(_e, op): void => {\n            actions.updatePageSize(op?.key as number);\n          }}\n          selectedKey={pageSize}\n          className=\"pagination-dropdown\"\n          title=\"Page Size Dropdown\"\n        />\n      </PaginationRow>\n      <Modal\n        titleAriaId={\"title\"}\n        isOpen={isModalOpen}\n        isBlocking={false}\n        containerClassName={modalStyles}\n        topOffsetFixed\n      >\n        <ModalHeader>\n          <Text block styles={modalHeaderStyles}>\n            Event Details\n          </Text>\n          <IconButton\n            styles={iconButtonStyles}\n            iconProps={{ iconName: \"Cancel\" }}\n            ariaLabel=\"Close popup modal\"\n            onClick={onModalClose}\n          />\n        </ModalHeader>\n        <ModalContent>\n          <EventDetails closeModal={onModalClose} />\n        </ModalContent>\n      </Modal>\n    </>\n  );\n};\n\n/**\n * Maps StudentsContainer to redux state\n * @param {AppState} state The App state.\n */\nconst mapStateToProps = (state: AppState, ownProps: IEventsListProps & any) => ({\n  data: ownProps.data,\n  isLoadingEvents: isLoadingEvents(state.eventState),\n  loadEventsError: getLoadEventsError(state.eventState),\n  formSubmittingComplete: false,\n  currentPage: getCurrentPage(state.eventState),\n  pageSize: getPageSize(state.eventState),\n  searchText: getSearchText(state.eventState),\n});\n\n/**\n * Maps Component's dispatch/handler props to redux state\n * @param {Dispatch} dispatch The dispatch.\n */\nconst mapDispatchToProps = (dispatch: Dispatch<EventActions.EventActionTypes>) => ({\n  actions: {\n    updateCurrentPage: bindActionCreators(EventActions.updateCurrentPage, dispatch),\n    updatePageSize: bindActionCreators(EventActions.updatePageSize, dispatch), //Create new event action and bind new event\n    updateSelectedEventId: bindActionCreators(EventActions.updateSelectedEventId, dispatch),\n  },\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(EventsList);\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { useEffect, useState, ReactElement } from \"react\";\n\nimport { connect } from \"react-redux\";\nimport { withRouter } from \"react-router-dom\";\nimport { bindActionCreators, Dispatch } from \"redux\";\n\nimport { SearchBox, Stack } from \"office-ui-fabric-react/lib\";\n\nimport { PrimaryButton } from \"@fluentui/react\";\n\nimport * as EventConstants from \"Constants/EventConstants\";\nimport * as EventActions from \"Dataflows/Event/EventAction\";\n\nimport ListCounts from \"Components/Common/ListCounts/ListCounts\";\nimport { Title } from \"Components/Common/Results/Result.styles\";\nimport EventsList from \"Components/EventsList/EventsList\";\nimport {\n  getCurrentPage,\n  getEvents,\n  getEventsFilterValues,\n  getFilteredCount,\n  getPageSize,\n  getSearchText,\n  isLoadingEvents,\n} from \"Dataflows/Event/EventSelector\";\nimport { AppState } from \"Dataflows/Reducers\";\nimport { IFilterValue } from \"Interfaces/IFilterValue\";\n\nimport {\n  buttonStackTokens,\n  containerStackStyles,\n  filterButtonStyles,\n  listStackStyles,\n  searchBoxStyles,\n  tableStackStyles,\n  PaddedFlexRow,\n} from \"../Common/CommonContainer.styles\";\nimport SideBarContainer from \"../SideBarContainer/SideBarContainer\";\nimport { IEventsContainerProps } from \"./IEventsContainerProps\";\n\n/**\n * Events Container element that displays side bar filtering and result listing.\n * @FunctionComponent\n * @param {IEventsContainerProps} props The side bar props.\n * @returns {React.FunctionComponent<IEventsContainerProps>} The side bar component.\n */\nconst EventsContainer: React.FunctionComponent<IEventsContainerProps> = (\n  props: IEventsContainerProps\n): ReactElement => {\n  const {\n    selectedEventsFilterValues,\n    events,\n    isLoadingEvents,\n    currentPage,\n    pageSize,\n    filteredCount,\n    actions: {\n      addEventsFilterValue,\n      removeEventsFilterValue,\n      removeEventsProvinceFilterValue,\n      removeEventsCountryFilterValue,\n      searchEvents,\n      updateEventsFilterValue,\n      resetEvents,\n    },\n  } = props;\n\n  const [searchText, setSearchText] = useState(props.searchText);\n\n  /**\n   * Call search function for entered text.\n   * @method\n   * @returns {void}\n   */\n  const handleSearch = (\n    searchValue: string,\n    selectedEventsFilterValues: IFilterValue[],\n    page: number,\n    pageSize: number\n  ): void => {\n    searchEvents(searchValue, selectedEventsFilterValues, page, pageSize);\n  };\n\n  /**\n   * Call to reset filter values.\n   * @method\n   */\n  const resetFilterValues = (): void => {\n    resetEvents();\n\n    setSearchText(\"\");\n    searchEvents(\n      \"\",\n      EventConstants.defaultEventFilterValues,\n      1,\n      EventConstants.defaultListingPageSize\n    );\n  };\n\n  useEffect(() => {\n    handleSearch(searchText, selectedEventsFilterValues, currentPage, pageSize);\n  }, [currentPage, pageSize]);\n\n  /**\n   * Function triggered when search box is cleared\n   * @param ev clear event that was trigger\n   */\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  const onClear = (ev: any): void => {\n    handleSearch(\"\", selectedEventsFilterValues, 1, pageSize);\n  };\n\n  return (\n    <Stack horizontal styles={containerStackStyles}>\n      <Stack.Item disableShrink>\n        <SideBarContainer\n          addFilterValue={addEventsFilterValue}\n          removeFilterValue={removeEventsFilterValue}\n          removeFilterProvinceValue={removeEventsProvinceFilterValue}\n          removeFilterCountryValue={removeEventsCountryFilterValue}\n          updateFilterValue={updateEventsFilterValue}\n          selectedFilterValues={selectedEventsFilterValues}\n          filterFields={EventConstants.eventFilterFields}\n        />\n        <Stack horizontal tokens={buttonStackTokens}>\n          <PrimaryButton\n            styles={filterButtonStyles()}\n            text=\"Apply\"\n            onClick={(): void => handleSearch(searchText, selectedEventsFilterValues, 1, pageSize)}\n          />\n          <PrimaryButton styles={filterButtonStyles()} text=\"Reset\" onClick={resetFilterValues} />\n        </Stack>\n      </Stack.Item>\n      <Stack.Item grow styles={listStackStyles()}>\n        <Stack styles={tableStackStyles}>\n          <PaddedFlexRow>\n            <Title>Events</Title>\n            <ListCounts total={filteredCount} loading={isLoadingEvents} />\n          </PaddedFlexRow>\n          <SearchBox\n            placeholder=\"Search events\"\n            value={searchText}\n            onSearch={(searchValue: string): void =>\n              handleSearch(searchValue, selectedEventsFilterValues, 1, pageSize)\n            }\n            onChange={(event?: React.ChangeEvent<HTMLInputElement>, newValue?: string): void =>\n              setSearchText(newValue || \"\")\n            }\n            onClear={onClear}\n            styles={searchBoxStyles}\n          />\n          <EventsList data={events} filteredCount={filteredCount} pageSize={pageSize} />\n        </Stack>\n      </Stack.Item>\n    </Stack>\n  );\n};\n\n/**\n * Maps StudentsContainer to redux state\n * @param {AppState} state The App state.\n */\nconst mapStateToProps = (state: AppState) => ({\n  events: getEvents(state.eventState),\n  isLoadingEvents: isLoadingEvents(state.eventState),\n  selectedEventsFilterValues: getEventsFilterValues(state.eventState),\n  currentPage: getCurrentPage(state.eventState),\n  pageSize: getPageSize(state.eventState),\n  searchText: getSearchText(state.eventState),\n  filteredCount: getFilteredCount(state.eventState),\n});\n\n/**\n * Maps Component's dispatch/handler props to redux state\n * @param {Dispatch} dispatch The dispatch.\n */\nconst mapDispatchToProps = (dispatch: Dispatch<EventActions.EventActionTypes>) => ({\n  actions: {\n    searchEvents: bindActionCreators(EventActions.searchEvents, dispatch),\n    addEventsFilterValue: bindActionCreators(EventActions.addEventsFilterValue, dispatch),\n    removeEventsFilterValue: bindActionCreators(EventActions.removeEventsFilterValue, dispatch),\n    removeEventsProvinceFilterValue: bindActionCreators(\n      EventActions.removeEventsFilterProvinceValue,\n      dispatch\n    ),\n    removeEventsCountryFilterValue: bindActionCreators(\n      EventActions.removeEventsFilterCountryValue,\n      dispatch\n    ),\n    updateEventsFilterValue: bindActionCreators(EventActions.updateEventsFilterValue, dispatch),\n    resetEvents: bindActionCreators(EventActions.resetEvents, dispatch),\n  },\n});\n\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(EventsContainer));\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { ReactElement } from \"react\";\n\nimport { Redirect } from \"react-router-dom\";\n\nimport { Text } from \"@fluentui/react\";\n\nimport { useAuth } from \"Authentication/AuthProvider\";\nimport { AAD_REPLYURL_SESSIONSTORAGE_KEY } from \"Constants/AuthenticationConstants\";\nimport { DetailWrapper } from \"Containers/Common/CommonContainer.styles\";\n\nconst HomeContainer = (): ReactElement => {\n  const { isUserLoggedIn, loading, hasAnyRoles } = useAuth();\n\n  const redirectUrl = sessionStorage.getItem(AAD_REPLYURL_SESSIONSTORAGE_KEY);\n  if (isUserLoggedIn && !!redirectUrl) {\n    // If user is authenticated and has redirect url, then redirect.\n    sessionStorage.removeItem(AAD_REPLYURL_SESSIONSTORAGE_KEY);\n    return <Redirect to={redirectUrl} />;\n  }\n\n  if (isUserLoggedIn && !hasAnyRoles && !loading) {\n    return <Redirect to=\"/unauthorized\" />;\n  }\n\n  const text = isUserLoggedIn\n    ? \"Welcome to the MVP Communities Admin Center. Please select an option to continue.\"\n    : \"Please log in to continue.\";\n\n  return (\n    <DetailWrapper>\n      <Text>{text}</Text>\n    </DetailWrapper>\n  );\n};\n\nexport default HomeContainer;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { ReactElement } from \"react\";\n\nimport { Redirect } from \"react-router-dom\";\n\nimport { Text } from \"@fluentui/react\";\n\nimport { useAuth } from \"Authentication/AuthProvider\";\nimport { DetailWrapper } from \"Containers/Common/CommonContainer.styles\";\n\nconst MvpEventContainer = (): ReactElement => {\n  const { isUserLoggedIn, loading, hasAnyRoles } = useAuth();\n  if (isUserLoggedIn && !hasAnyRoles && !loading) {\n    return <Redirect to=\"/unauthorized\" />;\n  }\n\n  return (\n    <DetailWrapper>\n      <div>\n        <Text>Most Valuable Professionals Event Container.</Text>\n      </div>\n      <div>\n        <Text>Coming Soon.</Text>\n      </div>\n    </DetailWrapper>\n  );\n};\n\nexport default MvpEventContainer;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { ReactElement } from \"react\";\n\nimport { Redirect } from \"react-router-dom\";\n\nimport { Text } from \"@fluentui/react\";\n\nimport { useAuth } from \"Authentication/AuthProvider\";\nimport { DetailWrapper } from \"Containers/Common/CommonContainer.styles\";\n\nconst MvpHomeContainer = (): ReactElement => {\n  const { isUserLoggedIn, loading, hasAnyRoles } = useAuth();\n  if (isUserLoggedIn && !hasAnyRoles && !loading) {\n    return <Redirect to=\"/unauthorized\" />;\n  }\n\n  return (\n    <DetailWrapper>\n      <div>\n        <Text>Most Valuable Professionals Admin Landing</Text>\n      </div>\n      <div>\n        <Text>Please choose a sub menu.</Text>\n      </div>\n    </DetailWrapper>\n  );\n};\n\nexport default MvpHomeContainer;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { useEffect, ReactElement } from \"react\";\n\nimport { useFieldArray, useForm } from \"react-hook-form\";\nimport { useDispatch, useSelector } from \"react-redux\";\n\nimport {\n  IPersonaProps,\n  MessageBar,\n  MessageBarType,\n  Spinner,\n  SpinnerSize,\n  Stack,\n  StackItem,\n} from \"@fluentui/react\";\n\nimport { useAuth } from \"Authentication/AuthProvider\";\nimport PeoplePickerController from \"Components/ReactHookForm/PeoplePickerController/PeoplePickerController\";\nimport { SidePanel } from \"Components/SidePanel/SidePanel\";\nimport { SidePanelConstants } from \"Constants/ApplicationConstants\";\nimport { OperationStatus } from \"Constants/OperationStatus\";\nimport { RolesEnum } from \"Constants/RolesPermissionsConstants\";\nimport { TenantTypesEnum } from \"Constants/TenantTypes\";\nimport {\n  assignApplication,\n  assignApplicationReset,\n  getAssignApplication,\n} from \"Dataflows/Application/ApplicationAction\";\nimport {\n  getAssignApplicationErrorMessage,\n  getAssignApplicationInfo,\n  getAssignApplicationInfoErrorMessage,\n  getAssignApplicationInfoStatus,\n  getAssignApplicationStatus,\n} from \"Dataflows/Application/ApplicationSelector\";\nimport { IApplicationAssignTechnologyAssignment } from \"Interfaces/Application/IApplicationAssign\";\nimport { IApplicationGetAssignUser } from \"Interfaces/Application/IApplicationGetAssign\";\n\nimport { IApplicationAssignSidePanel as IApplicationAssignSidePanelProps } from \"./IApplicationAssignSidePanel\";\n\nexport const ApplicationAssignSidePanel = (\n  props: IApplicationAssignSidePanelProps\n): ReactElement => {\n  const { isPanelOpen, setIsPanelOpen, applicationFormId, onSubmitSuccess } = props;\n\n  const dispatch = useDispatch();\n  const assignApplicationInfoErrorMessage = useSelector(getAssignApplicationInfoErrorMessage);\n  const assignApplicationErrorMessage = useSelector(getAssignApplicationErrorMessage);\n  const assignApplicationInfoStatus = useSelector(getAssignApplicationInfoStatus);\n  const assignApplicationStatus = useSelector(getAssignApplicationStatus);\n\n  useEffect(() => {\n    if (isPanelOpen && assignApplicationStatus === OperationStatus.Idle) {\n      dispatch(getAssignApplication(applicationFormId, TenantTypesEnum.MVP));\n    }\n  }, [applicationFormId, isPanelOpen]);\n\n  const assignApplicationInfo = useSelector(getAssignApplicationInfo);\n\n  const mapAssigneesToOptions = (assignees: IApplicationGetAssignUser[]): IPersonaProps[] => {\n    return assignees.map((assignee) => {\n      return {\n        text: `${assignee.firstName} ${assignee.lastName}`,\n        secondaryText: assignee.emailAddress,\n      };\n    });\n  };\n\n  const { account, hasRole } = useAuth();\n\n  // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n  const mapAssignApplicationInfoToFormValues = () => ({\n    technologyAssignments: assignApplicationInfo?.technologyAssignments.map((assignment) => ({\n      ...assignment,\n      currentAssignee: assignment.currentAssignee?.emailAddress,\n      hasScore: assignment.currentAssignee?.hasScore,\n      canAssign:\n        hasRole(RolesEnum.MVP_PROGRAM_OWNER) ||\n        (hasRole(RolesEnum.MVP_TECH_AREA_VALIDATOR) &&\n          assignment.availableAssignees.find((aa) => aa.emailAddress === account?.userName)),\n    })),\n  });\n\n  const {\n    control,\n    handleSubmit,\n    reset,\n    formState: { errors },\n  } = useForm({\n    defaultValues: mapAssignApplicationInfoToFormValues(),\n  });\n\n  useEffect(() => {\n    if (assignApplicationInfo) {\n      reset(mapAssignApplicationInfoToFormValues());\n    }\n  }, [assignApplicationInfo]);\n\n  // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n  const save = () =>\n    handleSubmit((formData) => {\n      // Strip off availableAssignees\n      const technologyAssignments = formData.technologyAssignments?.map((assignment) => ({\n        technologyFocusArea: assignment.technologyFocusArea,\n        emailAddress: assignment.currentAssignee || \"\",\n      })) as IApplicationAssignTechnologyAssignment[];\n\n      dispatch(assignApplication(applicationFormId, technologyAssignments, TenantTypesEnum.MVP));\n    });\n\n  const dismissPanel = (): void => {\n    setIsPanelOpen(false);\n    dispatch(assignApplicationReset());\n  };\n\n  useEffect(() => {\n    if (assignApplicationStatus === OperationStatus.Succeeded) {\n      dismissPanel();\n      onSubmitSuccess();\n    }\n  }, [assignApplicationStatus]);\n\n  const { fields } = useFieldArray({ control, name: \"technologyAssignments\" });\n\n  const isSaving = assignApplicationStatus === OperationStatus.Pending;\n\n  return (\n    <form onSubmit={save()}>\n      <SidePanel\n        isOpen={isPanelOpen}\n        title=\"Assign Application\"\n        saveButtonLabel=\"Save\"\n        error={assignApplicationErrorMessage}\n        disableActions={\n          assignApplicationInfo?.technologyAssignments.every(\n            (ta) => ta.currentAssignee?.hasScore\n          ) || isSaving\n        }\n        onDismiss={dismissPanel}\n        onSave={save()}\n      >\n        {assignApplicationInfoStatus === OperationStatus.Pending ? (\n          <Spinner size={SpinnerSize.large} />\n        ) : !!assignApplicationInfoErrorMessage ? (\n          <h5>{assignApplicationInfoErrorMessage}</h5>\n        ) : (\n          <Stack tokens={{ childrenGap: \"1rem\" }}>\n            <MessageBar messageBarType={MessageBarType.info}>\n              {SidePanelConstants.SidePanelInformation}\n            </MessageBar>\n            {fields.map((field, index) => {\n              return (\n                <StackItem key={field.id}>\n                  <PeoplePickerController\n                    control={control}\n                    inputName={`technologyAssignments[${index}].currentAssignee`}\n                    errors={errors}\n                    labelDisplayName={`Assign ${field.technologyFocusArea}`}\n                    isDisabled={field.hasScore || isSaving || !field.canAssign}\n                    options={mapAssigneesToOptions(field.availableAssignees)}\n                    keyPropertyName=\"secondaryText\"\n                    defaultSelectedKey={field.currentAssignee}\n                  />\n                </StackItem>\n              );\n            })}\n          </Stack>\n        )}\n      </SidePanel>\n    </form>\n  );\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { IActivityEventTypesData } from \"Interfaces/SiteContent/IActivityEventTypesData\";\n\nimport {\n  ACTIVITY_TYPE_EVENT_TYPE_DATA_LOAD,\n  ACTIVITY_TYPE_EVENT_TYPE_DATA_LOAD_FAILURE,\n  ACTIVITY_TYPE_EVENT_TYPE_DATA_LOAD_SUCCESS,\n} from \"./ActivityEventTypesActionTypes\";\n\n/**\n *@interface\n */\nexport interface IGetActivityEventTypes {\n  type: typeof ACTIVITY_TYPE_EVENT_TYPE_DATA_LOAD;\n  tenant: string;\n}\n\nexport interface IGetActivityEventTypesSuccess {\n  type: typeof ACTIVITY_TYPE_EVENT_TYPE_DATA_LOAD_SUCCESS;\n  activityEventTypes: IActivityEventTypesData[];\n}\n\nexport interface IGetActivityEventTypesFailure {\n  type: typeof ACTIVITY_TYPE_EVENT_TYPE_DATA_LOAD_FAILURE;\n  activityEventTypesLoadError: string;\n}\n\nexport const getActivityEventTypes = (tenant: string): ActivityEventTypesActionTypes => ({\n  type: ACTIVITY_TYPE_EVENT_TYPE_DATA_LOAD,\n  tenant: tenant,\n});\n\nexport const getActivityEventTypesSuccess = (\n  activityEventTypes: IActivityEventTypesData[]\n): ActivityEventTypesActionTypes => ({\n  type: ACTIVITY_TYPE_EVENT_TYPE_DATA_LOAD_SUCCESS,\n  activityEventTypes,\n});\n\nexport const getActivityEventTypesFailure = (\n  activityEventTypesLoadError: string\n): ActivityEventTypesActionTypes => ({\n  type: ACTIVITY_TYPE_EVENT_TYPE_DATA_LOAD_FAILURE,\n  activityEventTypesLoadError,\n});\n\nexport type ActivityEventTypesActionTypes =\n  | IGetActivityEventTypes\n  | IGetActivityEventTypesSuccess\n  | IGetActivityEventTypesFailure;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nexport const ACTIVITY_TYPE_EVENT_TYPE_DATA_LOAD = \"ACTIVITY_TYPE_EVENT_TYPE_DATA_LOAD\";\nexport const ACTIVITY_TYPE_EVENT_TYPE_DATA_LOAD_SUCCESS =\n  \"ACTIVITY_TYPE_EVENT_TYPE_DATA_LOAD_SUCCESS\";\nexport const ACTIVITY_TYPE_EVENT_TYPE_DATA_LOAD_FAILURE =\n  \"ACTIVITY_TYPE_EVENT_TYPE_DATA_LOAD_FAILURE\";\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\nimport {\n  COUNTRYDATA_LOAD,\n  COUNTRYDATA_LOAD_SUCCESS,\n  COUNTRYDATA_LOAD_FAILURE,\n} from \"../../Constants/ActionTypes\";\nimport { ICountryRegionData } from \"../../Interfaces/SiteContent\";\n\n/**\n *\n */\nexport interface IGetCountryRegion {\n  type: typeof COUNTRYDATA_LOAD;\n}\n\n/**\n *\n */\nexport interface IGetCountryRegionSuccess {\n  type: typeof COUNTRYDATA_LOAD_SUCCESS;\n  countryRegions: ICountryRegionData[];\n}\n\n/**\n *\n */\nexport interface IGetCountryRegionFailure {\n  type: typeof COUNTRYDATA_LOAD_FAILURE;\n  countryRegionLoadError: string;\n}\n\n/**\n *\n */\nexport const getCountryRegion = (): CountryRegionActionTypes => ({\n  type: COUNTRYDATA_LOAD,\n});\n\n/**\n *\n * @param countryRegions\n */\nexport const getCountryRegionSuccess = (\n  countryRegions: ICountryRegionData[]\n): CountryRegionActionTypes => ({\n  type: COUNTRYDATA_LOAD_SUCCESS,\n  countryRegions,\n});\n\n/**\n *\n * @param errorMessage\n */\nexport const getCountryRegionFailure = (\n  countryRegionLoadError: string\n): CountryRegionActionTypes => ({\n  type: COUNTRYDATA_LOAD_FAILURE,\n  countryRegionLoadError,\n});\n\nexport type CountryRegionActionTypes =\n  | IGetCountryRegion\n  | IGetCountryRegionSuccess\n  | IGetCountryRegionFailure;\n","export const COUNTRYDATA_LOAD = \"COUNTRYDATA_LOAD\";\nexport const COUNTRYDATA_LOAD_SUCCESS = \"COUNTRYDATA_LOAD_SUCCESS\";\nexport const COUNTRYDATA_LOAD_FAILURE = \"COUNTRYDATA_LOAD_FAILURE\";\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport {\n  defaultFilterValues,\n  defaultListingPageSize,\n  COUNTRY_REGION,\n  STATE_PROVINCE,\n} from \"Constants/AccessControlConstants\";\nimport {\n  CREATE_USER,\n  CREATE_USER_FAIL,\n  CREATE_USER_SUCCESS,\n  UPDATE_SELECTED_USER,\n  UPDATE_SELECTED_USER_ID,\n  UPDATE_USER_LISTING_CURRENT_PAGE,\n  UPDATE_USER_LISTING_PAGE_SIZE,\n  UPDATE_USER_STATUS,\n  UPDATE_USER_STATUS_FAIL,\n  UPDATE_USER_STATUS_SUCCESS,\n  USER_LOAD_FAIL,\n  USER_LOAD_SUCCESS,\n  USER_ROLE_CREATE_FAIL,\n  USER_ROLE_CREATE_SUCCESS,\n  USER_ROLE_DELETE_FAIL,\n  USER_ROLE_DELETE_SUCCESS,\n  USER_ROLE_UPDATE_FAIL,\n  USER_ROLE_UPDATE_SUCCESS,\n  USER_ROLES_LOAD,\n  USER_ROLES_LOAD_FAIL,\n  USER_ROLES_LOAD_SUCCESS,\n  USERS_FILTER_COUNTRY_VALUE_REMOVE,\n  USERS_FILTER_PROVINCE_VALUE_REMOVE,\n  USERS_FILTER_VALUE_ADD,\n  USERS_FILTER_VALUE_REMOVE,\n  USERS_FILTER_VALUE_UPDATE,\n  USERS_RESET_PAGINATION_PROPS,\n  USERS_RESET_PROPS,\n  USERS_SEARCH,\n  USERS_SEARCH_FAIL,\n  USERS_SEARCH_SUCCESS,\n} from \"Constants/ActionTypes\";\nimport { OperationStatus } from \"Constants/OperationStatus\";\n\nimport {\n  AccessControlActionTypes,\n  IAccessControlFilterValueAdd,\n  IAccessControlFilterValueRemove,\n  IAccessControlFilterValueUpdate,\n  ICreateUser,\n  ICreateUserFail,\n  ICreateUserRoleFail,\n  ICreateUserRoleSuccess,\n  ICreateUserSuccess,\n  IDeleteUserRoleFail,\n  IDeleteUserRoleSuccess,\n  ILoadUserFail,\n  ILoadUserRolesFail,\n  ILoadUserRolesSuccess,\n  ILoadUserSuccess,\n  IResetProps,\n  ISearchUsers,\n  ISearchUsersFail,\n  ISearchUsersSuccess,\n  IUpdateCurrentPage,\n  IUpdatePageSize,\n  IUpdateSelectedUser,\n  IUpdateSelectedUserId,\n  IUpdateUserRoleFail,\n  IUpdateUserRoleSuccess,\n  IUpdateUserStatusFail,\n  IUpdateUserStatusSuccess,\n} from \"./AccessControlAction\";\nimport { IAccessControlState } from \"./IAccessControlState\";\n\nconst INITIAL_STATE: IAccessControlState = {\n  tenant: \"\",\n  accessControlFilterValues: defaultFilterValues,\n  currentPage: 1,\n  filteredCount: 0,\n  pageSize: defaultListingPageSize,\n  searchText: \"\",\n  selectedUser: {\n    emailAddress: \"\",\n    firstName: \"\",\n    lastName: \"\",\n    id: 0,\n    dateModified: new Date(),\n    countryString: \"\",\n    roleNames: [],\n    technologyFocusAreas: [],\n    isActive: false,\n    status: \"\",\n    region: \"\",\n    role: \"\",\n  },\n  selectedUserId: 0,\n  newUserId: 0,\n  users: [], // check access control container props\n  userRoles: [],\n  networkOperationStatus: OperationStatus.Idle,\n  networkOperationError: \"\",\n};\n\nconst applyResetProps = (state: IAccessControlState, action: IResetProps): IAccessControlState => ({\n  ...state,\n  selectedUser: {\n    emailAddress: \"\",\n    firstName: \"\",\n    lastName: \"\",\n    id: 0,\n    dateModified: new Date(),\n    countryString: \"\",\n    roleNames: [],\n    technologyFocusAreas: [],\n    isActive: false,\n    status: \"\",\n    region: \"\",\n    role: \"\",\n  },\n  selectedUserId: 0,\n  newUserId: 0,\n  userRoles: [],\n  networkOperationStatus: OperationStatus.Idle,\n});\n\nconst applyResetPaginationProps = (): IAccessControlState => INITIAL_STATE;\n\nconst applyLoadUser = (\n  state: IAccessControlState,\n  action: ILoadUserSuccess\n): IAccessControlState => ({\n  ...state,\n  selectedUser: action.user,\n  networkOperationStatus: OperationStatus.Idle,\n  networkOperationError: \"\",\n});\n\nconst applyLoadFailUser = (\n  state: IAccessControlState,\n  action: ILoadUserFail\n): IAccessControlState => ({\n  ...state,\n  networkOperationStatus: OperationStatus.Failed,\n  networkOperationError: action.loadSelectedUserError,\n});\n\nconst addAccessControlFilterValue = (\n  state: IAccessControlState,\n  action: IAccessControlFilterValueAdd\n): IAccessControlState => ({\n  ...state,\n  accessControlFilterValues: state.accessControlFilterValues.concat([action.filterValue]),\n});\n\nconst removeAccessControlFilterValue = (\n  state: IAccessControlState,\n  action: IAccessControlFilterValueRemove\n): IAccessControlState => ({\n  ...state,\n  accessControlFilterValues: state.accessControlFilterValues.filter(\n    (item) =>\n      !(item.fieldName === action.filterValue.fieldName && item.value === action.filterValue.value)\n  ),\n});\n\nconst removeAccessControlFilterProvinceValue = (\n  state: IAccessControlState\n): IAccessControlState => ({\n  ...state,\n  accessControlFilterValues: state.accessControlFilterValues.filter(\n    (item) => !(item.fieldName === STATE_PROVINCE)\n  ),\n});\n\nconst removeAccessControlFilterCountryValue = (\n  state: IAccessControlState\n): IAccessControlState => ({\n  ...state,\n  accessControlFilterValues: state.accessControlFilterValues.filter(\n    (item) => !(item.fieldName === COUNTRY_REGION)\n  ),\n});\n\nconst updateAccessControlFilterValue = (\n  state: IAccessControlState,\n  action: IAccessControlFilterValueUpdate\n): IAccessControlState => ({\n  ...state,\n  accessControlFilterValues: state.accessControlFilterValues\n    .filter((item) => !(item.fieldName === action.filterValue.fieldName))\n    .concat([action.filterValue]),\n});\n\nconst applySearchUsers = (\n  state: IAccessControlState,\n  action: ISearchUsers\n): IAccessControlState => ({\n  ...state,\n  searchText: action.searchText,\n  currentPage: action.searchPage,\n  tenant: action.tenant,\n  networkOperationStatus: OperationStatus.Pending,\n  networkOperationError: \"\",\n});\n\nconst applySearchUsersSuccess = (\n  state: IAccessControlState,\n  action: ISearchUsersSuccess\n): IAccessControlState => ({\n  ...state,\n  users: action.users,\n  currentPage: action.searchPage,\n  filteredCount: action.filteredCount,\n  networkOperationStatus: OperationStatus.Succeeded,\n  networkOperationError: \"\",\n});\n\nconst applySearchUsersFail = (\n  state: IAccessControlState,\n  action: ISearchUsersFail\n): IAccessControlState => ({\n  ...state,\n  networkOperationStatus: OperationStatus.Failed,\n  networkOperationError: action.error,\n});\n\nconst applySelectedUserId = (\n  state: IAccessControlState,\n  action: IUpdateSelectedUserId\n): IAccessControlState => ({\n  ...state,\n  selectedUserId: action.selectedUserId,\n  networkOperationStatus: OperationStatus.Pending,\n  networkOperationError: \"\",\n});\n\nconst applySelectedUser = (\n  state: IAccessControlState,\n  action: IUpdateSelectedUser\n): IAccessControlState => ({\n  ...state,\n  selectedUser: action.selectedUser,\n  networkOperationStatus: OperationStatus.Pending,\n  networkOperationError: \"\",\n});\n\nconst applyCreateUser = (state: IAccessControlState, action: ICreateUser): IAccessControlState => ({\n  ...state,\n  networkOperationStatus: OperationStatus.Pending,\n  networkOperationError: \"\",\n});\n\nconst applyCreateUserSuccess = (\n  state: IAccessControlState,\n  action: ICreateUserSuccess\n): IAccessControlState => ({\n  ...state,\n  newUserId: action.accessUser.id,\n  selectedUser: {\n    id: action.accessUser.id,\n    role: \"\",\n    emailAddress: action.accessUser.emailAddress,\n    firstName: action.accessUser.firstName,\n    lastName: \"\",\n    region: \"\",\n    status: \"\",\n    dateModified: new Date(),\n    countryString: \"\",\n    roleNames: [],\n    technologyFocusAreas: [],\n    isActive: false,\n  },\n  selectedUserId: action.accessUser.id,\n  networkOperationStatus: OperationStatus.Idle,\n  networkOperationError: \"\",\n  userRoles: [],\n});\n\nconst applyCreateUserFail = (\n  state: IAccessControlState,\n  action: ICreateUserFail\n): IAccessControlState => ({\n  ...state,\n  networkOperationStatus: OperationStatus.Failed,\n  networkOperationError: action.errorMessage,\n});\n\nconst applyUpdateUserStatus = (state: IAccessControlState): IAccessControlState => ({\n  ...state,\n  networkOperationStatus: OperationStatus.Pending,\n  networkOperationError: \"\",\n});\n\nconst applyUpdateUserStatusSuccess = (\n  state: IAccessControlState,\n  action: IUpdateUserStatusSuccess\n): IAccessControlState => {\n  const newState = {\n    ...state,\n    networkOperationStatus: OperationStatus.Succeeded,\n    networkOperationError: \"\",\n  } as IAccessControlState;\n\n  const user = newState.users.find((u) => u.id == action.userStatus.userId);\n  if (!!user) user.isActive = action.userStatus.isActive;\n  return newState;\n};\n\nconst applyUpdateUserStatusFail = (\n  state: IAccessControlState,\n  action: IUpdateUserStatusFail\n): IAccessControlState => ({\n  ...state,\n  networkOperationStatus: OperationStatus.Failed,\n  networkOperationError: action.updateUserStatusError,\n});\n\nconst applyUpdateCurrentPage = (\n  state: IAccessControlState,\n  action: IUpdateCurrentPage\n): IAccessControlState => ({\n  ...state,\n  currentPage: action.currentPage,\n});\n\nconst applyUpdatePageSize = (\n  state: IAccessControlState,\n  action: IUpdatePageSize\n): IAccessControlState => ({\n  ...state,\n  pageSize: action.pageSize,\n});\n\nconst applyLoadUserRoles = (state: IAccessControlState): IAccessControlState => ({\n  ...state,\n  networkOperationStatus: OperationStatus.Pending,\n  networkOperationError: \"\",\n});\n\nconst applyLoadUserRolesSuccess = (\n  state: IAccessControlState,\n  action: ILoadUserRolesSuccess\n): IAccessControlState => ({\n  ...state,\n  userRoles: action.roles,\n  networkOperationStatus: OperationStatus.Succeeded,\n  networkOperationError: \"\",\n});\n\nconst applyLoadUserRolesFail = (\n  state: IAccessControlState,\n  action: ILoadUserRolesFail\n): IAccessControlState => ({\n  ...state,\n  networkOperationStatus: OperationStatus.Failed,\n  networkOperationError: action.message,\n});\n\nconst applyDeleteUserRolesSuccess = (\n  state: IAccessControlState,\n  action: IDeleteUserRoleSuccess\n): IAccessControlState => ({\n  ...state,\n  userRoles: state.userRoles.filter((x) => x.id !== action.userRoleId),\n  networkOperationStatus: OperationStatus.Succeeded,\n  networkOperationError: \"\",\n});\n\nconst applyDeleteUserRolesFail = (\n  state: IAccessControlState,\n  action: IDeleteUserRoleFail\n): IAccessControlState => ({\n  ...state,\n  networkOperationStatus: OperationStatus.Failed,\n  networkOperationError: action.message,\n});\n\nconst applyCreateUserRolesSuccess = (\n  state: IAccessControlState,\n  action: ICreateUserRoleSuccess\n): IAccessControlState => ({\n  ...state,\n  userRoles: [...state.userRoles, action.role],\n  networkOperationStatus: OperationStatus.Succeeded,\n  networkOperationError: \"\",\n});\n\nconst applyUpdateUserRolesSuccess = (\n  state: IAccessControlState,\n  action: IUpdateUserRoleSuccess\n): IAccessControlState => ({\n  ...state,\n  userRoles: [...state.userRoles.filter((ur) => ur.id !== action.role.id), action.role],\n  networkOperationStatus: OperationStatus.Succeeded,\n  networkOperationError: \"\",\n});\n\nconst applyUpdateUserRolesFail = (\n  state: IAccessControlState,\n  action: IUpdateUserRoleFail\n): IAccessControlState => ({\n  ...state,\n  networkOperationStatus: OperationStatus.Failed,\n  networkOperationError: action.message,\n});\n\nconst applyCreateUserRolesFail = (\n  state: IAccessControlState,\n  action: ICreateUserRoleFail\n): IAccessControlState => ({\n  ...state,\n  networkOperationStatus: OperationStatus.Failed,\n  networkOperationError: action.message,\n});\n\nfunction accessControlReducer(\n  state = INITIAL_STATE,\n  action: AccessControlActionTypes\n): IAccessControlState {\n  switch (action.type) {\n    case USERS_RESET_PROPS: {\n      return applyResetProps(state, action);\n    }\n    case USERS_RESET_PAGINATION_PROPS: {\n      return applyResetPaginationProps();\n    }\n    case USER_LOAD_SUCCESS: {\n      return applyLoadUser(state, action);\n    }\n    case USER_LOAD_FAIL: {\n      return applyLoadFailUser(state, action);\n    }\n    case USERS_FILTER_VALUE_ADD: {\n      return addAccessControlFilterValue(state, action);\n    }\n    case USERS_FILTER_VALUE_REMOVE: {\n      return removeAccessControlFilterValue(state, action);\n    }\n    case USERS_FILTER_COUNTRY_VALUE_REMOVE: {\n      return removeAccessControlFilterCountryValue(state);\n    }\n    case USERS_FILTER_PROVINCE_VALUE_REMOVE: {\n      return removeAccessControlFilterProvinceValue(state);\n    }\n    case USERS_FILTER_VALUE_UPDATE: {\n      return updateAccessControlFilterValue(state, action);\n    }\n    case USERS_SEARCH: {\n      return applySearchUsers(state, action);\n    }\n    case USERS_SEARCH_FAIL: {\n      return applySearchUsersFail(state, action);\n    }\n    case USERS_SEARCH_SUCCESS: {\n      return applySearchUsersSuccess(state, action);\n    }\n    case UPDATE_SELECTED_USER_ID: {\n      return applySelectedUserId(state, action);\n    }\n    case UPDATE_SELECTED_USER: {\n      return applySelectedUser(state, action);\n    }\n    case CREATE_USER: {\n      return applyCreateUser(state, action);\n    }\n    case CREATE_USER_SUCCESS: {\n      return applyCreateUserSuccess(state, action);\n    }\n    case CREATE_USER_FAIL: {\n      return applyCreateUserFail(state, action);\n    }\n    case UPDATE_USER_STATUS: {\n      return applyUpdateUserStatus(state);\n    }\n    case UPDATE_USER_STATUS_SUCCESS: {\n      return applyUpdateUserStatusSuccess(state, action);\n    }\n    case UPDATE_USER_STATUS_FAIL: {\n      return applyUpdateUserStatusFail(state, action);\n    }\n    case UPDATE_USER_LISTING_CURRENT_PAGE: {\n      return applyUpdateCurrentPage(state, action);\n    }\n    case UPDATE_USER_LISTING_PAGE_SIZE: {\n      return applyUpdatePageSize(state, action);\n    }\n    case USER_ROLES_LOAD: {\n      return applyLoadUserRoles(state);\n    }\n    case USER_ROLES_LOAD_SUCCESS: {\n      return applyLoadUserRolesSuccess(state, action);\n    }\n    case USER_ROLES_LOAD_FAIL: {\n      return applyLoadUserRolesFail(state, action);\n    }\n    case USER_ROLE_DELETE_SUCCESS: {\n      return applyDeleteUserRolesSuccess(state, action);\n    }\n    case USER_ROLE_DELETE_FAIL: {\n      return applyDeleteUserRolesFail(state, action);\n    }\n    case USER_ROLE_CREATE_SUCCESS: {\n      return applyCreateUserRolesSuccess(state, action);\n    }\n    case USER_ROLE_CREATE_FAIL: {\n      return applyCreateUserRolesFail(state, action);\n    }\n    case USER_ROLE_UPDATE_SUCCESS: {\n      return applyUpdateUserRolesSuccess(state, action);\n    }\n    case USER_ROLE_UPDATE_FAIL: {\n      return applyUpdateUserRolesFail(state, action);\n    }\n    default:\n      return state;\n  }\n}\n\nexport default accessControlReducer;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { IActivityEventTypesDataState } from \"Interfaces/SiteContent/IActivityEventTypesDataState\";\n\nimport {\n  IGetActivityEventTypesFailure,\n  IGetActivityEventTypesSuccess,\n} from \"./ActivityEventTypesAction\";\nimport {\n  ACTIVITY_TYPE_EVENT_TYPE_DATA_LOAD_FAILURE,\n  ACTIVITY_TYPE_EVENT_TYPE_DATA_LOAD_SUCCESS,\n} from \"./ActivityEventTypesActionTypes\";\n\nexport const initialState: IActivityEventTypesDataState = {\n  activityEventTypesData: [],\n};\n\n/**\n * Updates state of fetch activity event types success.\n * @param {IActivityEventTypesDataState} state The activity event types state.\n * @param {IGetActivityEventTypesSuccess} action The activity event types action success.\n * @returns {IActivityEventTypesDataState} New activity event types state.\n */\nconst applyLoadActivityEventTypesSuccess = (\n  state: IActivityEventTypesDataState,\n  action: IGetActivityEventTypesSuccess\n): IActivityEventTypesDataState => {\n  return {\n    ...state,\n    activityEventTypesData: action.activityEventTypes,\n  };\n};\n\n/**\n * Updates state of fetch activity event types failure.\n * @param {IActivityEventTypesDataState} state The activity event types state.\n * @param {IGetActivityEventTypesFailure} action The activity event types action failure.\n * @returns {IActivityEventTypesDataState} New technology area state.\n */\nconst applyLoadActivityEventTypesFailure = (\n  state: IActivityEventTypesDataState,\n  action: IGetActivityEventTypesFailure\n): IActivityEventTypesDataState => ({\n  ...state,\n  errorMessage: action.activityEventTypesLoadError,\n});\n\n/**\n * Reducer function for activity event types.\n * @param state activity event types state.\n * @param action action.\n * @returns {IActivityEventTypesDataState} New activity event types state.\n */\nfunction activityAndEventTypesReducer(\n  state: IActivityEventTypesDataState = initialState,\n  action\n): IActivityEventTypesDataState {\n  switch (action.type) {\n    case ACTIVITY_TYPE_EVENT_TYPE_DATA_LOAD_SUCCESS:\n      return applyLoadActivityEventTypesSuccess(state, action);\n    case ACTIVITY_TYPE_EVENT_TYPE_DATA_LOAD_FAILURE:\n      return applyLoadActivityEventTypesFailure(state, action);\n    default:\n      return state;\n  }\n}\n\nexport default activityAndEventTypesReducer;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport {\n  APPLICATION_LOAD_FAIL,\n  APPLICATION_LOAD_SUCCESS,\n  APPLICATION_SEARCH_SORTING_UPDATE,\n  APPLICATIONS_FILTER_COUNTRY_VALUE_REMOVE,\n  APPLICATIONS_FILTER_PROVINCE_VALUE_REMOVE,\n  APPLICATIONS_FILTER_VALUE_ADD,\n  APPLICATIONS_FILTER_VALUE_REMOVE,\n  APPLICATIONS_FILTER_VALUE_UPDATE,\n  APPLICATIONS_RESET,\n  APPLICATIONS_SEARCH,\n  APPLICATIONS_SEARCH_SUCCESS,\n  ASSIGN_APPLICATION,\n  ASSIGN_APPLICATION_FAIL,\n  ASSIGN_APPLICATION_RESET,\n  ASSIGN_APPLICATION_SUCCESS,\n  DOWNLOAD_APPLICATIONS_TO_CSV,\n  DOWNLOAD_APPLICATIONS_TO_CSV_CLEAN,\n  DOWNLOAD_APPLICATIONS_TO_CSV_FAIL,\n  DOWNLOAD_APPLICATIONS_TO_CSV_SUCCESS,\n  FLAG_APPLICATION,\n  FLAG_APPLICATION_FAIL,\n  FLAG_APPLICATION_RESET,\n  FLAG_APPLICATION_SUCCESS,\n  GET_ASSIGN_APPLICATION,\n  GET_ASSIGN_APPLICATION_FAIL,\n  GET_ASSIGN_APPLICATION_SUCCESS,\n  SCORE_APPLICATION_FAIL,\n  SCORE_APPLICATION_RESET,\n  SCORE_APPLICATION_SUCCESS,\n  UPDATE_APPLICATION_LISTING_CURRENT_PAGE,\n  UPDATE_APPLICATION_LISTING_PAGE_SIZE,\n  UPDATE_SELECTED_APPLICATION_EMAIL,\n} from \"Constants/ActionTypes\";\nimport {\n  defaultFilterValues,\n  APPLICATION_COUNTRY_REGION,\n  APPLICATION_STATE_PROVINCE,\n} from \"Constants/ApplicationConstants\";\nimport { OperationStatus } from \"Constants/OperationStatus\";\nimport { defaultListingPageSize } from \"Constants/ProfileConstants\";\nimport { TenantTypesEnum } from \"Constants/TenantTypes\";\n\nimport {\n  ApplicationActionTypes,\n  IApplicationsFilterValueAdd,\n  IApplicationsFilterValueRemove,\n  IApplicationsFilterValueUpdate,\n  IApplicationSearchSortingChange,\n  IAssignApplicationFail,\n  IDownloadApplicationsToCSV,\n  IDownloadApplicationsToCSVFail,\n  IDownloadApplicationsToCSVSuccess,\n  IFlagApplicationFail,\n  IGetAssignApplicationFail,\n  IGetAssignApplicationSuccess,\n  ILoadApplicationFail,\n  ILoadApplicationSuccess,\n  IScoreApplicationFail,\n  ISearchApplications,\n  IUpdateCurrentPage,\n  IUpdatePageSize,\n  IUpdateSelectedApplicationEmail,\n} from \"./ApplicationAction\";\nimport { IApplicationState } from \"./IApplicationState\";\n\nconst INITIAL_STATE: IApplicationState = {\n  applications: [],\n  applicationsFilterValues: defaultFilterValues,\n  currentPage: 1,\n  fileDownloadStatus: OperationStatus.Idle,\n  fileDownloadErrorMessage: \"\",\n  fileDownloadData: \"\",\n  filteredCount: 0,\n  isLoadingApplications: false,\n  isLoadingSelectedApplication: false,\n  loadApplicationsError: \"\",\n  loadSelectedApplicationError: \"\",\n  pageSize: defaultListingPageSize,\n  searchText: \"\",\n  selectedApplication: {\n    id: 0,\n    firstName: \"\",\n    lastName: \"\",\n    email: \"\",\n    countryName: \"\",\n    techArea: \"\",\n    submittedOn: \"\",\n    applicationStatus: \"\",\n    modifiedDate: \"\",\n    modifiedBy: \"\",\n    isReadOnly: false,\n    reviewStatus: \"\",\n    technicalExpertise: [],\n    industryFocus: [],\n  },\n  selectedApplicationEmail: \"\",\n  tenant: TenantTypesEnum.MLSA,\n  assignApplicationInfo: undefined,\n  assignApplicationInfoStatus: OperationStatus.Idle,\n  assignApplicationInfoErrorMessage: \"\",\n  assignApplicationStatus: OperationStatus.Idle,\n  assignApplicationErrorMessage: \"\",\n  scoreApplicationStatus: OperationStatus.Idle,\n  scoreApplicationErrorMessage: \"\",\n  flagApplicationStatus: OperationStatus.Idle,\n  flagApplicationErrorMessage: \"\",\n  sortColumn: \"\",\n  sortDescending: false,\n};\n\nconst applyLoadAssignApplicationInfo = (state: IApplicationState): IApplicationState => ({\n  ...state,\n  assignApplicationInfoStatus: OperationStatus.Pending,\n  assignApplicationInfoErrorMessage: \"\",\n});\n\nconst applyLoadAssignApplicationInfoSuccess = (\n  state: IApplicationState,\n  action: IGetAssignApplicationSuccess\n): IApplicationState => ({\n  ...state,\n  assignApplicationInfo: action.assignApplicationInfo,\n  assignApplicationInfoStatus: OperationStatus.Succeeded,\n  assignApplicationInfoErrorMessage: \"\",\n});\n\nconst applyLoadAssignApplicationInfoFail = (\n  state: IApplicationState,\n  action: IGetAssignApplicationFail\n): IApplicationState => ({\n  ...state,\n  assignApplicationInfoStatus: OperationStatus.Failed,\n  assignApplicationInfoErrorMessage: action.errorMessage,\n});\n\nconst applyAssignApplication = (state: IApplicationState): IApplicationState => ({\n  ...state,\n  assignApplicationStatus: OperationStatus.Pending,\n  assignApplicationErrorMessage: \"\",\n});\n\nconst applyAssignApplicationSuccess = (state: IApplicationState): IApplicationState => ({\n  ...state,\n  assignApplicationStatus: OperationStatus.Succeeded,\n  assignApplicationErrorMessage: \"\",\n});\n\nconst applyAssignApplicationFail = (\n  state: IApplicationState,\n  action: IAssignApplicationFail\n): IApplicationState => ({\n  ...state,\n  assignApplicationStatus: OperationStatus.Failed,\n  assignApplicationErrorMessage: action.errorMessage,\n});\n\nconst applyAssignApplicationReset = (state: IApplicationState): IApplicationState => ({\n  ...state,\n  assignApplicationInfo: undefined,\n  assignApplicationInfoStatus: OperationStatus.Idle,\n  assignApplicationInfoErrorMessage: \"\",\n  assignApplicationStatus: OperationStatus.Idle,\n  assignApplicationErrorMessage: \"\",\n});\n\nconst applyScoreApplicationSuccess = (state: IApplicationState): IApplicationState => ({\n  ...state,\n  scoreApplicationStatus: OperationStatus.Succeeded,\n  scoreApplicationErrorMessage: \"\",\n});\n\nconst applyScoreApplicationFail = (\n  state: IApplicationState,\n  action: IScoreApplicationFail\n): IApplicationState => ({\n  ...state,\n  scoreApplicationStatus: OperationStatus.Failed,\n  scoreApplicationErrorMessage: action.errorMessage,\n});\n\nconst applyScoreApplicationReset = (state: IApplicationState): IApplicationState => ({\n  ...state,\n  scoreApplicationStatus: OperationStatus.Idle,\n  scoreApplicationErrorMessage: \"\",\n});\n\nconst applyFlagApplication = (state: IApplicationState): IApplicationState => ({\n  ...state,\n  flagApplicationStatus: OperationStatus.Pending,\n});\n\nconst applyFlagApplicationSuccess = (state: IApplicationState): IApplicationState => ({\n  ...state,\n  flagApplicationStatus: OperationStatus.Succeeded,\n  flagApplicationErrorMessage: \"\",\n});\n\nconst applyFlagApplicationFail = (\n  state: IApplicationState,\n  action: IFlagApplicationFail\n): IApplicationState => ({\n  ...state,\n  flagApplicationStatus: OperationStatus.Failed,\n  flagApplicationErrorMessage: action.errorMessage,\n});\n\nconst applyFlagApplicationReset = (state: IApplicationState): IApplicationState => ({\n  ...state,\n  flagApplicationStatus: OperationStatus.Idle,\n  flagApplicationErrorMessage: \"\",\n});\n\nconst applyLoadApplication = (\n  state: IApplicationState,\n  action: ILoadApplicationSuccess\n): IApplicationState => ({\n  ...state,\n  selectedApplication: action.application,\n  isLoadingSelectedApplication: false,\n  loadSelectedApplicationError: \"\",\n  // updateApplicationStatusError: \"\",\n});\n\nconst applyLoadFailApplication = (\n  state: IApplicationState,\n  action: ILoadApplicationFail\n): IApplicationState => ({\n  ...state,\n  loadSelectedApplicationError: action.loadSelectedApplicationError,\n  isLoadingSelectedApplication: false,\n});\n\nconst applySelectedApplication = (\n  state: IApplicationState,\n  action: IUpdateSelectedApplicationEmail\n): IApplicationState => ({\n  ...state,\n  selectedApplicationEmail: action.selectedApplicationEmail,\n  // updateApplicationStatusError: \"\",\n  isLoadingSelectedApplication: true,\n});\n\nconst applySearchApplications = (\n  state: IApplicationState,\n  action: ISearchApplications\n): IApplicationState => ({\n  ...state,\n  applications: [],\n  isLoadingApplications: true,\n  searchText: action.searchText,\n  currentPage: action.searchPage,\n  loadApplicationsError: \"\",\n  tenant: action.tenant,\n  sortColumn: action.sortColumn,\n  sortDescending: action.sortDescending,\n  applicationsFilterValues: action.selectedApplicationsFilterValues, // added to retain the filter values\n});\n\nconst applySearchApplicationsSuccess = (state: IApplicationState, action): IApplicationState => ({\n  ...state,\n  applications: action.applications,\n  currentPage: action.searchPage,\n  isLoadingApplications: false,\n  filteredCount: action.filteredCount,\n  loadApplicationsError: \"\",\n});\n\nconst addApplicationsFilterValue = (\n  state: IApplicationState,\n  action: IApplicationsFilterValueAdd\n): IApplicationState => ({\n  ...state,\n  applicationsFilterValues: state.applicationsFilterValues.concat([action.filterValue]),\n});\n\nconst applyApplicationsReset = (): IApplicationState => INITIAL_STATE;\n\nconst removeApplicationsFilterValue = (\n  state: IApplicationState,\n  action: IApplicationsFilterValueRemove\n): IApplicationState => ({\n  ...state,\n  applicationsFilterValues: state.applicationsFilterValues.filter(\n    (item) =>\n      !(item.fieldName === action.filterValue.fieldName && item.value === action.filterValue.value)\n  ),\n});\n\nconst removeApplicationsFilterProvinceValue = (state: IApplicationState): IApplicationState => ({\n  ...state,\n  applicationsFilterValues: state.applicationsFilterValues.filter(\n    (item) => !(item.fieldName === APPLICATION_STATE_PROVINCE)\n  ),\n});\n\nconst removeApplicationsFilterCountryValue = (state: IApplicationState): IApplicationState => ({\n  ...state,\n  applicationsFilterValues: state.applicationsFilterValues.filter(\n    (item) => !(item.fieldName === APPLICATION_COUNTRY_REGION)\n  ),\n});\n\nconst updateApplicationsFilterValue = (\n  state: IApplicationState,\n  action: IApplicationsFilterValueUpdate\n): IApplicationState => ({\n  ...state,\n  applicationsFilterValues: state.applicationsFilterValues\n    .filter((item) => !(item.fieldName === action.filterValue.fieldName))\n    .concat([action.filterValue]),\n});\n\nconst applyUpdateCurrentPage = (\n  state: IApplicationState,\n  action: IUpdateCurrentPage\n): IApplicationState => ({\n  ...state,\n  currentPage: action.currentPage,\n});\n\nconst applyUpdatePageSize = (\n  state: IApplicationState,\n  action: IUpdatePageSize\n): IApplicationState => ({\n  ...state,\n  pageSize: action.pageSize,\n});\n\nconst applyDownloadApplicationsToCSV = (\n  state: IApplicationState,\n  action: IDownloadApplicationsToCSV\n): IApplicationState => ({\n  ...state,\n  fileDownloadStatus: OperationStatus.Pending,\n  tenant: action.tenant,\n});\n\nconst applyDownloadApplicationsToCSVSuccess = (\n  state: IApplicationState,\n  action: IDownloadApplicationsToCSVSuccess\n): IApplicationState => ({\n  ...state,\n  fileDownloadStatus: OperationStatus.Succeeded,\n  fileDownloadData: action.csvFile,\n});\n\nconst applyDownloadApplicationsToCSVFailed = (\n  state: IApplicationState,\n  action: IDownloadApplicationsToCSVFail\n): IApplicationState => ({\n  ...state,\n  fileDownloadStatus: OperationStatus.Failed,\n  fileDownloadErrorMessage: action.errorMessage,\n});\n\nconst applyDownloadApplicationsClean = (state: IApplicationState): IApplicationState => ({\n  ...state,\n  fileDownloadStatus: OperationStatus.Pending,\n  fileDownloadData: \"\",\n});\n\nconst applySearchSortingUpdate = (\n  state: IApplicationState,\n  action: IApplicationSearchSortingChange\n): IApplicationState => ({\n  ...state,\n  sortColumn: action.sortColumn,\n  sortDescending: action.sortDescending,\n});\n\nfunction applicationReducer(\n  state = INITIAL_STATE,\n  action: ApplicationActionTypes\n): IApplicationState {\n  switch (action.type) {\n    case APPLICATION_LOAD_SUCCESS: {\n      return applyLoadApplication(state, action);\n    }\n    case APPLICATION_LOAD_FAIL: {\n      return applyLoadFailApplication(state, action);\n    }\n    case APPLICATIONS_SEARCH: {\n      return applySearchApplications(state, action);\n    }\n    case APPLICATIONS_SEARCH_SUCCESS: {\n      return applySearchApplicationsSuccess(state, action);\n    }\n    case APPLICATIONS_RESET: {\n      return applyApplicationsReset();\n    }\n    case APPLICATIONS_FILTER_VALUE_ADD: {\n      return addApplicationsFilterValue(state, action);\n    }\n    case APPLICATIONS_FILTER_VALUE_REMOVE: {\n      return removeApplicationsFilterValue(state, action);\n    }\n    case APPLICATIONS_FILTER_COUNTRY_VALUE_REMOVE: {\n      return removeApplicationsFilterCountryValue(state);\n    }\n    case APPLICATIONS_FILTER_PROVINCE_VALUE_REMOVE: {\n      return removeApplicationsFilterProvinceValue(state);\n    }\n    case APPLICATIONS_FILTER_VALUE_UPDATE: {\n      return updateApplicationsFilterValue(state, action);\n    }\n    case UPDATE_SELECTED_APPLICATION_EMAIL: {\n      return applySelectedApplication(state, action);\n    }\n    case UPDATE_APPLICATION_LISTING_CURRENT_PAGE: {\n      return applyUpdateCurrentPage(state, action);\n    }\n    case UPDATE_APPLICATION_LISTING_PAGE_SIZE: {\n      return applyUpdatePageSize(state, action);\n    }\n    case DOWNLOAD_APPLICATIONS_TO_CSV: {\n      return applyDownloadApplicationsToCSV(state, action);\n    }\n    case DOWNLOAD_APPLICATIONS_TO_CSV_SUCCESS: {\n      return applyDownloadApplicationsToCSVSuccess(state, action);\n    }\n    case DOWNLOAD_APPLICATIONS_TO_CSV_FAIL: {\n      return applyDownloadApplicationsToCSVFailed(state, action);\n    }\n    case DOWNLOAD_APPLICATIONS_TO_CSV_CLEAN: {\n      return applyDownloadApplicationsClean(state);\n    }\n    case GET_ASSIGN_APPLICATION: {\n      return applyLoadAssignApplicationInfo(state);\n    }\n    case GET_ASSIGN_APPLICATION_SUCCESS: {\n      return applyLoadAssignApplicationInfoSuccess(state, action);\n    }\n    case GET_ASSIGN_APPLICATION_FAIL: {\n      return applyLoadAssignApplicationInfoFail(state, action);\n    }\n    case ASSIGN_APPLICATION: {\n      return applyAssignApplication(state);\n    }\n    case ASSIGN_APPLICATION_SUCCESS: {\n      return applyAssignApplicationSuccess(state);\n    }\n    case ASSIGN_APPLICATION_FAIL: {\n      return applyAssignApplicationFail(state, action);\n    }\n    case ASSIGN_APPLICATION_RESET: {\n      return applyAssignApplicationReset(state);\n    }\n    case SCORE_APPLICATION_SUCCESS: {\n      return applyScoreApplicationSuccess(state);\n    }\n    case SCORE_APPLICATION_FAIL: {\n      return applyScoreApplicationFail(state, action);\n    }\n    case SCORE_APPLICATION_RESET: {\n      return applyScoreApplicationReset(state);\n    }\n    case FLAG_APPLICATION: {\n      return applyFlagApplication(state);\n    }\n    case FLAG_APPLICATION_SUCCESS: {\n      return applyFlagApplicationSuccess(state);\n    }\n    case FLAG_APPLICATION_FAIL: {\n      return applyFlagApplicationFail(state, action);\n    }\n    case FLAG_APPLICATION_RESET: {\n      return applyFlagApplicationReset(state);\n    }\n    case APPLICATION_SEARCH_SORTING_UPDATE: {\n      return applySearchSortingUpdate(state, action);\n    }\n    default:\n      return state;\n  }\n}\n\nexport default applicationReducer;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport {\n  defaultActivitiesEventsFilterValues,\n  defaultListingPageSize,\n} from \"Constants/ApplicationConstants\";\nimport { OperationStatus } from \"Constants/OperationStatus\";\n\nimport {\n  IActivitiesEventsFilterValueAdd,\n  IActivitiesEventsFilterValueBulkRemove,\n  IActivitiesEventsFilterValueRemove,\n  IActivitiesEventsFilterValueReset,\n  IGetAdditionalActivitiesEventsBySelectedUserprofileIdFail,\n  IGetAdditionalActivitiesEventsBySelectedUserprofileIdSuccess,\n  IGetApplicationFlagsBySelectedApplicationIdFail,\n  IGetApplicationFlagsBySelectedApplicationIdSuccess,\n  IGetApplicationQuestionsBySelectedApplicationIdFail,\n  IGetApplicationQuestionsBySelectedApplicationIdSuccess,\n  IGetHighlightedActivitiesEventsBySelectedApplicationIdFail,\n  IGetHighlightedActivitiesEventsBySelectedApplicationIdSuccess,\n  IGetUserProfileBySelectedApplicationIdFail,\n  IGetUserProfileBySelectedApplicationIdSuccess,\n  IUpdateApplicationStatusesAndRemoveFlagsFail,\n  IUpdateApplicationTechnologyAreaAndResetScoresFail,\n} from \"./ApplicationDetailsAction\";\nimport {\n  ACTIVITIES_EVENTS_FILTER_VALUE_ADD,\n  ACTIVITIES_EVENTS_FILTER_VALUE_BULK_REMOVE,\n  ACTIVITIES_EVENTS_FILTER_VALUE_REMOVE,\n  ACTIVITIES_EVENTS_FILTER_VALUE_RESET,\n  CLEAR_APPLICATION_DETAILS_STATE,\n  GET_ACTIVITY_EVENT_BY_ID,\n  GET_ACTIVITY_EVENT_BY_ID_FAIL,\n  GET_ACTIVITY_EVENT_BY_ID_SUCCESS,\n  GET_ADDITIONAL_ACTIVITIES_EVENTS_BY_SELECTED_USERPROFILE_ID,\n  GET_ADDITIONAL_ACTIVITIES_EVENTS_BY_SELECTED_USERPROFILE_ID_FAIL,\n  GET_ADDITIONAL_ACTIVITIES_EVENTS_BY_SELECTED_USERPROFILE_ID_SUCCESS,\n  GET_APPLICATION_FLAGS_BY_SELECTED_APPLICATION_ID,\n  GET_APPLICATION_FLAGS_BY_SELECTED_APPLICATION_ID_FAIL,\n  GET_APPLICATION_FLAGS_BY_SELECTED_APPLICATION_ID_SUCCESS,\n  GET_APPLICATION_QUESTIONS_BY_SELECTED_APPLICATION_ID,\n  GET_APPLICATION_QUESTIONS_BY_SELECTED_APPLICATION_ID_FAIL,\n  GET_APPLICATION_QUESTIONS_BY_SELECTED_APPLICATION_ID_SUCCESS,\n  GET_HIGHLIGHTED_ACTIVITIES_EVENTS_BY_SELECTED_APPLICATION_ID,\n  GET_HIGHLIGHTED_ACTIVITIES_EVENTS_BY_SELECTED_APPLICATION_ID_FAIL,\n  GET_HIGHLIGHTED_ACTIVITIES_EVENTS_BY_SELECTED_APPLICATION_ID_SUCCESS,\n  GET_USER_PROFILE_BY_SELECTED_APPLICATION_ID,\n  GET_USER_PROFILE_BY_SELECTED_APPLICATION_ID_FAIL,\n  GET_USER_PROFILE_BY_SELECTED_APPLICATION_ID_SUCCESS,\n  UPDATE_ACTIVITIES_EVENTS_CURRENT_PAGE,\n  UPDATE_ACTIVITIES_EVENTS_PAGE_SIZE,\n  UPDATE_APPLICATION_STATUSES_AND_REMOVE_FLAGS,\n  UPDATE_APPLICATION_STATUSES_AND_REMOVE_FLAGS_FAIL,\n  UPDATE_APPLICATION_STATUSES_AND_REMOVE_FLAGS_RESET,\n  UPDATE_APPLICATION_STATUSES_AND_REMOVE_FLAGS_SUCCESS,\n  UPDATE_APPLICATION_TECHNOLOGY_AREA_AND_RESET_SCORES,\n  UPDATE_APPLICATION_TECHNOLOGY_AREA_AND_RESET_SCORES_FAIL,\n  UPDATE_APPLICATION_TECHNOLOGY_AREA_AND_RESET_SCORES_RESET,\n  UPDATE_APPLICATION_TECHNOLOGY_AREA_AND_RESET_SCORES_SUCCESS,\n} from \"./ApplicationDetailsActionTypes\";\nimport { IApplicationDetailsState } from \"./IApplicationDetailsState\";\n\nexport const initialState: IApplicationDetailsState = {\n  additionalActivitiesEventsState: {\n    activitiesEventsFilterValues: defaultActivitiesEventsFilterValues,\n    filteredCount: 0,\n    currentPage: 1,\n    pageSize: defaultListingPageSize,\n    activitiesEvents: [],\n  },\n  highlightedActivitiesEventsState: {\n    activitiesEventsFilterValues: defaultActivitiesEventsFilterValues,\n    filteredCount: 0,\n    currentPage: 1,\n    pageSize: defaultListingPageSize,\n    activitiesEvents: [],\n  },\n};\n\nconst applyFilterValueAdd = (\n  state: IApplicationDetailsState,\n  action: IActivitiesEventsFilterValueAdd\n): IApplicationDetailsState => {\n  if (action.isHighlighted) {\n    return {\n      ...state,\n      highlightedActivitiesEventsState: {\n        ...state.highlightedActivitiesEventsState,\n        activitiesEventsFilterValues: [\n          ...state.highlightedActivitiesEventsState.activitiesEventsFilterValues,\n          action.filterValue,\n        ],\n      },\n    };\n  } else {\n    return {\n      ...state,\n      additionalActivitiesEventsState: {\n        ...state.additionalActivitiesEventsState,\n        activitiesEventsFilterValues: [\n          ...state.additionalActivitiesEventsState.activitiesEventsFilterValues,\n          action.filterValue,\n        ],\n      },\n    };\n  }\n};\n\nconst applyFilterValueRemove = (\n  state: IApplicationDetailsState,\n  action: IActivitiesEventsFilterValueRemove\n): IApplicationDetailsState => {\n  if (action.isHighlighted) {\n    return {\n      ...state,\n      highlightedActivitiesEventsState: {\n        ...state.highlightedActivitiesEventsState,\n        activitiesEventsFilterValues:\n          state.highlightedActivitiesEventsState.activitiesEventsFilterValues.filter(\n            (fv) => fv.value !== action.filterValue.value\n          ),\n      },\n    };\n  } else {\n    return {\n      ...state,\n      additionalActivitiesEventsState: {\n        ...state.additionalActivitiesEventsState,\n        activitiesEventsFilterValues:\n          state.additionalActivitiesEventsState.activitiesEventsFilterValues.filter(\n            (fv) => fv.value !== action.filterValue.value\n          ),\n      },\n    };\n  }\n};\n\nconst applyFilterValueBulkRemove = (\n  state: IApplicationDetailsState,\n  action: IActivitiesEventsFilterValueBulkRemove\n): IApplicationDetailsState => {\n  if (action.isHighlighted) {\n    return {\n      ...state,\n      highlightedActivitiesEventsState: {\n        ...state.highlightedActivitiesEventsState,\n        activitiesEventsFilterValues:\n          state.highlightedActivitiesEventsState.activitiesEventsFilterValues.filter(\n            (sfv) => !action.filterValues.some((fv) => fv.value === sfv.value)\n          ),\n      },\n    };\n  } else {\n    return {\n      ...state,\n      additionalActivitiesEventsState: {\n        ...state.additionalActivitiesEventsState,\n        activitiesEventsFilterValues:\n          state.additionalActivitiesEventsState.activitiesEventsFilterValues.filter(\n            (sfv) => !action.filterValues.some((fv) => fv.value === sfv.value)\n          ),\n      },\n    };\n  }\n};\n\nconst applyFilterValueReset = (\n  state: IApplicationDetailsState,\n  action: IActivitiesEventsFilterValueReset\n): IApplicationDetailsState => {\n  if (action.isHighlighted) {\n    return {\n      ...state,\n      highlightedActivitiesEventsState: initialState.highlightedActivitiesEventsState,\n    };\n  } else {\n    return {\n      ...state,\n      additionalActivitiesEventsState: initialState.additionalActivitiesEventsState,\n    };\n  }\n};\n\nconst applyGetUserProfileBySelectedApplicationId = (\n  state: IApplicationDetailsState\n): IApplicationDetailsState => ({\n  ...state,\n  selectedUserProfileInformation: undefined,\n  selectedUserProfileInformationOpStatus: {\n    read: OperationStatus.Pending,\n  },\n  selectedUserProfileInformationErrorMessage: undefined,\n});\n\nconst applyGetUserProfileBySelectedApplicationIdSuccess = (\n  state: IApplicationDetailsState,\n  action: IGetUserProfileBySelectedApplicationIdSuccess\n): IApplicationDetailsState => ({\n  ...state,\n  selectedUserProfileInformation: action.userProfileInfo,\n  selectedUserProfileInformationOpStatus: {\n    read: OperationStatus.Succeeded,\n  },\n  selectedUserProfileInformationErrorMessage: undefined,\n});\n\nconst applyGetUserProfileBySelectedApplicationIdFail = (\n  state: IApplicationDetailsState,\n  action: IGetUserProfileBySelectedApplicationIdFail\n): IApplicationDetailsState => ({\n  ...state,\n\n  selectedUserProfileInformation: undefined,\n  selectedUserProfileInformationOpStatus: {\n    read: OperationStatus.Failed,\n  },\n  selectedUserProfileInformationErrorMessage: action.errorMessage,\n});\n\nconst applyGetApplicationFlagsBySelectedApplicationId = (\n  state: IApplicationDetailsState\n): IApplicationDetailsState => ({\n  ...state,\n  selectedApplicationFlags: undefined,\n  selectedApplicationFlagsOpStatus: {\n    read: OperationStatus.Pending,\n  },\n  selectedApplicationFlagsErrorMessage: undefined,\n});\n\nconst applyGetApplicationFlagsBySelectedApplicationIdSuccess = (\n  state: IApplicationDetailsState,\n  action: IGetApplicationFlagsBySelectedApplicationIdSuccess\n): IApplicationDetailsState => ({\n  ...state,\n  selectedApplicationFlags: action.applicationFlags,\n  selectedApplicationFlagsOpStatus: {\n    read: OperationStatus.Succeeded,\n  },\n  selectedApplicationFlagsErrorMessage: undefined,\n});\n\nconst applyGetApplicationFlagsBySelectedApplicationIdFail = (\n  state: IApplicationDetailsState,\n  action: IGetApplicationFlagsBySelectedApplicationIdFail\n): IApplicationDetailsState => ({\n  ...state,\n  selectedApplicationFlags: undefined,\n  selectedApplicationFlagsOpStatus: {\n    read: OperationStatus.Failed,\n  },\n  selectedApplicationFlagsErrorMessage: action.errorMessage,\n});\n\nconst applyGetApplicationQuestionsBySelectedApplicationId = (\n  state: IApplicationDetailsState\n): IApplicationDetailsState => ({\n  ...state,\n  selectedApplicationQuestions: undefined,\n  selectedApplicationQuestionsOpStatus: {\n    read: OperationStatus.Pending,\n  },\n  selectedApplicationQuestionsErrorMessage: undefined,\n});\n\nconst applyGetApplicationQuestionsBySelectedApplicationIdSuccess = (\n  state: IApplicationDetailsState,\n  action: IGetApplicationQuestionsBySelectedApplicationIdSuccess\n): IApplicationDetailsState => ({\n  ...state,\n  selectedApplicationQuestions: action.applicationQuestions,\n  selectedApplicationQuestionsOpStatus: {\n    read: OperationStatus.Succeeded,\n  },\n  selectedApplicationQuestionsErrorMessage: undefined,\n});\n\nconst applyGetApplicationQuestionsBySelectedApplicationIdFail = (\n  state: IApplicationDetailsState,\n  action: IGetApplicationQuestionsBySelectedApplicationIdFail\n): IApplicationDetailsState => ({\n  ...state,\n  selectedApplicationQuestions: undefined,\n  selectedApplicationQuestionsOpStatus: {\n    read: OperationStatus.Failed,\n  },\n  selectedApplicationQuestionsErrorMessage: action.errorMessage,\n});\n\nconst applyGetHighlightedActivitiesEventsBySelectedApplicationId = (\n  state: IApplicationDetailsState\n): IApplicationDetailsState => ({\n  ...state,\n  highlightedActivitiesEventsState: {\n    ...state.highlightedActivitiesEventsState,\n    activitiesEvents: undefined,\n    filteredCount: 0,\n    activitiesEventsOpStatus: {\n      read: OperationStatus.Pending,\n    },\n    activitiesEventsErrorMessage: undefined,\n  },\n});\n\nconst applyGetHighlightedActivitiesEventsBySelectedApplicationIdSuccess = (\n  state: IApplicationDetailsState,\n  action: IGetHighlightedActivitiesEventsBySelectedApplicationIdSuccess\n): IApplicationDetailsState => ({\n  ...state,\n  highlightedActivitiesEventsState: {\n    ...state.highlightedActivitiesEventsState,\n    activitiesEvents: action.highlightedActivitiesEvents.activitiesEvents,\n    filteredCount: action.highlightedActivitiesEvents.totalCount,\n    activitiesEventsOpStatus: {\n      read: OperationStatus.Succeeded,\n    },\n    activitiesEventsErrorMessage: undefined,\n  },\n});\n\nconst applyGetHighlightedActivitiesEventsBySelectedApplicationIdFail = (\n  state: IApplicationDetailsState,\n  action: IGetHighlightedActivitiesEventsBySelectedApplicationIdFail\n): IApplicationDetailsState => ({\n  ...state,\n  highlightedActivitiesEventsState: {\n    ...state.highlightedActivitiesEventsState,\n    activitiesEvents: undefined,\n    filteredCount: 0,\n    activitiesEventsOpStatus: {\n      read: OperationStatus.Failed,\n    },\n    activitiesEventsErrorMessage: action.errorMessage,\n  },\n});\n\nconst applyGetAdditionalActivitiesEventsBySelectedUserprofileId = (\n  state: IApplicationDetailsState\n): IApplicationDetailsState => ({\n  ...state,\n  additionalActivitiesEventsState: {\n    ...state.additionalActivitiesEventsState,\n    activitiesEvents: undefined,\n    filteredCount: 0,\n    activitiesEventsOpStatus: {\n      read: OperationStatus.Pending,\n    },\n    activitiesEventsErrorMessage: undefined,\n  },\n});\n\nconst applyGetAdditionalActivitiesEventsBySelectedUserprofileIdSuccess = (\n  state: IApplicationDetailsState,\n  action: IGetAdditionalActivitiesEventsBySelectedUserprofileIdSuccess\n): IApplicationDetailsState => ({\n  ...state,\n  additionalActivitiesEventsState: {\n    ...state.additionalActivitiesEventsState,\n    activitiesEvents: action.additionalActivitiesEvents.activitiesEvents,\n    filteredCount: action.additionalActivitiesEvents.totalCount,\n    activitiesEventsOpStatus: {\n      read: OperationStatus.Succeeded,\n    },\n    activitiesEventsErrorMessage: undefined,\n  },\n});\n\nconst applyGetAdditionalActivitiesEventsBySelectedUserprofileIdFail = (\n  state: IApplicationDetailsState,\n  action: IGetAdditionalActivitiesEventsBySelectedUserprofileIdFail\n): IApplicationDetailsState => ({\n  ...state,\n  additionalActivitiesEventsState: {\n    ...state.additionalActivitiesEventsState,\n    activitiesEvents: undefined,\n    filteredCount: 0,\n    activitiesEventsOpStatus: {\n      read: OperationStatus.Failed,\n    },\n    activitiesEventsErrorMessage: action.errorMessage,\n  },\n});\n\nconst applyUpdateActivitiesEventsPageSize = (\n  state: IApplicationDetailsState,\n  action\n): IApplicationDetailsState => {\n  if (action.isHighlighted) {\n    return {\n      ...state,\n      highlightedActivitiesEventsState: {\n        ...state.highlightedActivitiesEventsState,\n        pageSize: action.pageSize,\n        currentPage: 1,\n      },\n    };\n  } else {\n    return {\n      ...state,\n      additionalActivitiesEventsState: {\n        ...state.additionalActivitiesEventsState,\n        pageSize: action.pageSize,\n        currentPage: 1,\n      },\n    };\n  }\n};\n\nconst applyUpdateActivitiesEventsCurrentPage = (\n  state: IApplicationDetailsState,\n  action\n): IApplicationDetailsState => {\n  if (action.isHighlighted) {\n    return {\n      ...state,\n      highlightedActivitiesEventsState: {\n        ...state.highlightedActivitiesEventsState,\n        currentPage: action.currentPage,\n      },\n    };\n  } else {\n    return {\n      ...state,\n      additionalActivitiesEventsState: {\n        ...state.additionalActivitiesEventsState,\n        currentPage: action.currentPage,\n      },\n    };\n  }\n};\n\nconst applyUpdateApplicationStatusesAndRemoveFlags = (\n  state: IApplicationDetailsState,\n  action\n): IApplicationDetailsState => {\n  return {\n    ...state,\n    manageApplicationOpStatus: {\n      update: OperationStatus.Pending,\n    },\n    manageApplicationErrorMessage: undefined,\n  };\n};\n\nconst applyUpdateApplicationStatusesAndRemoveFlagsFail = (\n  state: IApplicationDetailsState,\n  action: IUpdateApplicationStatusesAndRemoveFlagsFail\n): IApplicationDetailsState => {\n  return {\n    ...state,\n    manageApplicationOpStatus: {\n      update: OperationStatus.Failed,\n    },\n    manageApplicationErrorMessage: action.errorMessage,\n  };\n};\n\nconst applyUpdateApplicationStatusesAndRemoveFlagsSuccess = (\n  state: IApplicationDetailsState,\n  action\n): IApplicationDetailsState => {\n  return {\n    ...state,\n    manageApplicationOpStatus: {\n      update: OperationStatus.Succeeded,\n    },\n    manageApplicationErrorMessage: undefined,\n  };\n};\n\nconst applyUpdateApplicationStatusesAndRemoveFlagsReset = (\n  state: IApplicationDetailsState\n): IApplicationDetailsState => {\n  return {\n    ...state,\n    manageApplicationOpStatus: {\n      update: OperationStatus.Idle,\n    },\n    manageApplicationErrorMessage: undefined,\n  };\n};\nconst applyUpdateApplicationTechnologyAreaAndResetScores = (\n  state: IApplicationDetailsState,\n  action\n): IApplicationDetailsState => {\n  return {\n    ...state,\n    updateTechnologyAreaOpStatus: {\n      update: OperationStatus.Pending,\n    },\n    updateTechnologyAreaErrorMessage: undefined,\n  };\n};\n\nconst applyUpdateApplicationTechnologyAreaAndResetScoresFail = (\n  state: IApplicationDetailsState,\n  action: IUpdateApplicationTechnologyAreaAndResetScoresFail\n): IApplicationDetailsState => {\n  return {\n    ...state,\n    updateTechnologyAreaOpStatus: {\n      update: OperationStatus.Failed,\n    },\n    updateTechnologyAreaErrorMessage: action.errorMessage,\n  };\n};\n\nconst applyUpdateApplicationTechnologyAreaAndResetScoresSuccess = (\n  state: IApplicationDetailsState,\n  action\n): IApplicationDetailsState => {\n  return {\n    ...state,\n    updateTechnologyAreaOpStatus: {\n      update: OperationStatus.Succeeded,\n    },\n    updateTechnologyAreaErrorMessage: undefined,\n  };\n};\n\nconst applyUpdateApplicationTechnologyAreaAndResetScoresReset = (\n  state: IApplicationDetailsState\n): IApplicationDetailsState => {\n  return {\n    ...state,\n    updateTechnologyAreaOpStatus: {\n      update: OperationStatus.Idle,\n    },\n    updateTechnologyAreaErrorMessage: undefined,\n  };\n};\n\n/**\n * Reducer function for activity event types.\n * @param state activity event types state.\n * @param action action.\n * @returns {IApplicationDetailsState} New activity event types state.\n */\nfunction applicationDetailsReducer(\n  state: IApplicationDetailsState = initialState,\n  action\n): IApplicationDetailsState {\n  switch (action.type) {\n    case ACTIVITIES_EVENTS_FILTER_VALUE_ADD:\n      return applyFilterValueAdd(state, action);\n    case ACTIVITIES_EVENTS_FILTER_VALUE_REMOVE:\n      return applyFilterValueRemove(state, action);\n    case ACTIVITIES_EVENTS_FILTER_VALUE_BULK_REMOVE:\n      return applyFilterValueBulkRemove(state, action);\n    case UPDATE_ACTIVITIES_EVENTS_PAGE_SIZE:\n      return applyUpdateActivitiesEventsPageSize(state, action);\n    case UPDATE_ACTIVITIES_EVENTS_CURRENT_PAGE:\n      return applyUpdateActivitiesEventsCurrentPage(state, action);\n    case ACTIVITIES_EVENTS_FILTER_VALUE_RESET:\n      return applyFilterValueReset(state, action);\n    case GET_USER_PROFILE_BY_SELECTED_APPLICATION_ID: {\n      return applyGetUserProfileBySelectedApplicationId(state);\n    }\n    case GET_USER_PROFILE_BY_SELECTED_APPLICATION_ID_SUCCESS: {\n      return applyGetUserProfileBySelectedApplicationIdSuccess(state, action);\n    }\n    case GET_USER_PROFILE_BY_SELECTED_APPLICATION_ID_FAIL: {\n      return applyGetUserProfileBySelectedApplicationIdFail(state, action);\n    }\n    case GET_APPLICATION_FLAGS_BY_SELECTED_APPLICATION_ID: {\n      return applyGetApplicationFlagsBySelectedApplicationId(state);\n    }\n    case GET_APPLICATION_FLAGS_BY_SELECTED_APPLICATION_ID_SUCCESS: {\n      return applyGetApplicationFlagsBySelectedApplicationIdSuccess(state, action);\n    }\n    case GET_APPLICATION_FLAGS_BY_SELECTED_APPLICATION_ID_FAIL: {\n      return applyGetApplicationFlagsBySelectedApplicationIdFail(state, action);\n    }\n    case GET_APPLICATION_QUESTIONS_BY_SELECTED_APPLICATION_ID: {\n      return applyGetApplicationQuestionsBySelectedApplicationId(state);\n    }\n    case GET_APPLICATION_QUESTIONS_BY_SELECTED_APPLICATION_ID_SUCCESS: {\n      return applyGetApplicationQuestionsBySelectedApplicationIdSuccess(state, action);\n    }\n    case GET_APPLICATION_QUESTIONS_BY_SELECTED_APPLICATION_ID_FAIL: {\n      return applyGetApplicationQuestionsBySelectedApplicationIdFail(state, action);\n    }\n    case GET_HIGHLIGHTED_ACTIVITIES_EVENTS_BY_SELECTED_APPLICATION_ID: {\n      return applyGetHighlightedActivitiesEventsBySelectedApplicationId(state);\n    }\n    case GET_HIGHLIGHTED_ACTIVITIES_EVENTS_BY_SELECTED_APPLICATION_ID_SUCCESS: {\n      return applyGetHighlightedActivitiesEventsBySelectedApplicationIdSuccess(state, action);\n    }\n    case GET_HIGHLIGHTED_ACTIVITIES_EVENTS_BY_SELECTED_APPLICATION_ID_FAIL: {\n      return applyGetHighlightedActivitiesEventsBySelectedApplicationIdFail(state, action);\n    }\n    case GET_ADDITIONAL_ACTIVITIES_EVENTS_BY_SELECTED_USERPROFILE_ID: {\n      return applyGetAdditionalActivitiesEventsBySelectedUserprofileId(state);\n    }\n    case GET_ADDITIONAL_ACTIVITIES_EVENTS_BY_SELECTED_USERPROFILE_ID_SUCCESS: {\n      return applyGetAdditionalActivitiesEventsBySelectedUserprofileIdSuccess(state, action);\n    }\n    case GET_ADDITIONAL_ACTIVITIES_EVENTS_BY_SELECTED_USERPROFILE_ID_FAIL: {\n      return applyGetAdditionalActivitiesEventsBySelectedUserprofileIdFail(state, action);\n    }\n    case UPDATE_APPLICATION_STATUSES_AND_REMOVE_FLAGS: {\n      return applyUpdateApplicationStatusesAndRemoveFlags(state, action);\n    }\n    case UPDATE_APPLICATION_STATUSES_AND_REMOVE_FLAGS_FAIL: {\n      return applyUpdateApplicationStatusesAndRemoveFlagsFail(state, action);\n    }\n    case UPDATE_APPLICATION_STATUSES_AND_REMOVE_FLAGS_SUCCESS: {\n      return applyUpdateApplicationStatusesAndRemoveFlagsSuccess(state, action);\n    }\n    case UPDATE_APPLICATION_STATUSES_AND_REMOVE_FLAGS_RESET: {\n      return applyUpdateApplicationStatusesAndRemoveFlagsReset(state);\n    }\n    case UPDATE_APPLICATION_TECHNOLOGY_AREA_AND_RESET_SCORES: {\n      return applyUpdateApplicationTechnologyAreaAndResetScores(state, action);\n    }\n    case UPDATE_APPLICATION_TECHNOLOGY_AREA_AND_RESET_SCORES_FAIL: {\n      return applyUpdateApplicationTechnologyAreaAndResetScoresFail(state, action);\n    }\n    case UPDATE_APPLICATION_TECHNOLOGY_AREA_AND_RESET_SCORES_SUCCESS: {\n      return applyUpdateApplicationTechnologyAreaAndResetScoresSuccess(state, action);\n    }\n    case UPDATE_APPLICATION_TECHNOLOGY_AREA_AND_RESET_SCORES_RESET: {\n      return applyUpdateApplicationTechnologyAreaAndResetScoresReset(state);\n    }\n    case GET_ACTIVITY_EVENT_BY_ID_SUCCESS: {\n      return {\n        ...state,\n        selectedActivityEvent: action.activityEvent,\n        selectedActivityEventOpStatus: {\n          read: OperationStatus.Succeeded,\n        },\n      };\n    }\n    case GET_ACTIVITY_EVENT_BY_ID_FAIL: {\n      return {\n        ...state,\n        selectedActivityEvent: undefined,\n        selectedActivityEventOpStatus: {\n          read: OperationStatus.Failed,\n        },\n        selectedActivityEventErrorMessage: action.errorMessage,\n      };\n    }\n    case GET_ACTIVITY_EVENT_BY_ID: {\n      return {\n        ...state,\n        selectedActivityEvent: undefined,\n        selectedActivityEventOpStatus: {\n          read: OperationStatus.Pending,\n        },\n        selectedActivityEventErrorMessage: undefined,\n      };\n    }\n    case CLEAR_APPLICATION_DETAILS_STATE: {\n      return initialState;\n    }\n    default:\n      return state;\n  }\n}\n\nexport default applicationDetailsReducer;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { IAwardKitSkuDataState } from \"Interfaces/SiteContent/IAwardKitSkuDataState\";\n\nimport { IGetAwardKitSkuSuccess, IGetAwardKitSkuFailure } from \"./AwardKitSkuAction\";\nimport { AWARD_KIT_SKU_LOAD_SUCCESS, AWARD_KIT_SKU_LOAD_FAILURE } from \"./AwardKitSkuActionTypes\";\n\nconst initialState: IAwardKitSkuDataState = {\n  awardKitSkuOptionList: [],\n  awardKitSkuLoadError: \"\",\n};\n\n/**\n * Updates state of fetch awardkit sku success.\n * @param {IAwardKitSkuDataState} state The awardkit sku state.\n * @param {IGetAwardKitSkuSuccess} action The awardkit sku action success.\n * @returns {IAwardKitSkuDataState} New awardkit sku state.\n */\nconst applyLoadAwardKitSku = (\n  state: IAwardKitSkuDataState,\n  action: IGetAwardKitSkuSuccess\n): IAwardKitSkuDataState => ({\n  ...state,\n  awardKitSkuOptionList: action.awardKitSku,\n});\n\n/**\n * Updates state of fetch awardkit sku failure.\n * @param {IAwardKitSkuDataState} state The awardkit sku state.\n * @param {IGetAwardKitSkuFailure} action The awardkit sku action failure.\n * @returns {IAwardKitSkuDataState} New awardkit sku state.\n */\nconst applyLoadAwardKitSkuFail = (\n  state: IAwardKitSkuDataState,\n  action: IGetAwardKitSkuFailure\n): IAwardKitSkuDataState => ({\n  ...state,\n  awardKitSkuLoadError: action.awardKitSkuLoadError,\n});\n\n/**\n * Reducer function for MVP Award Kit Benefit component.\n * @param {IAwardKitSkuDataState} state The sku state.\n * @param {AwardKitSkuActionTypes} action The sku type.\n * @returns {IAwardKitSkuDataState} The sku state.\n */\nfunction awardKitSkuReducer(\n  state: IAwardKitSkuDataState = initialState,\n  action\n): IAwardKitSkuDataState {\n  switch (action.type) {\n    case AWARD_KIT_SKU_LOAD_SUCCESS:\n      return applyLoadAwardKitSku(state, action);\n    case AWARD_KIT_SKU_LOAD_FAILURE:\n      return applyLoadAwardKitSkuFail(state, action);\n    default:\n      return state;\n  }\n}\n\nexport default awardKitSkuReducer;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { IAwardPeriodDataState } from \"Interfaces/SiteContent/IAwardPeriodDataState\";\n\nimport { IGetAwardPeriodsFailure, IGetAwardPeriodsSuccess } from \"./AwardPeriodAction\";\nimport { AWARD_PERIOD_LOAD_FAILURE, AWARD_PERIOD_LOAD_SUCCESS } from \"./AwardPeriodActionTypes\";\n\nconst initialState: IAwardPeriodDataState = {\n  awardPeriodOptionList: [],\n  awardPeriodLoadError: \"\",\n};\n\n/**\n * Updates state of fetch award periods success.\n * @param {IAwardPeriodDataState} state The award periods state.\n * @param {IGetAwardPeriodsSuccess} action The award periods action success.\n * @returns {IAwardPeriodDataState} New award periods state.\n */\nconst applyLoadAwardPeriods = (\n  state: IAwardPeriodDataState,\n  action: IGetAwardPeriodsSuccess\n): IAwardPeriodDataState => ({\n  ...state,\n  awardPeriodOptionList: action.awardPeriods,\n});\n\n/**\n * Updates state of fetch award periods failure.\n * @param {IAwardPeriodDataState} state The award periods state.\n * @param {IGetAwardPeriodsFailure} action The award periods action failure.\n * @returns {IAwardPeriodDataState} New award periods state.\n */\nconst applyLoadAwardPeriodsFail = (\n  state: IAwardPeriodDataState,\n  action: IGetAwardPeriodsFailure\n): IAwardPeriodDataState => ({\n  ...state,\n  awardPeriodLoadError: action.awardPeriodLoadError,\n});\n\n/**\n * Reducer function for Activity component.\n * @param {IAwardPeriodDataState} state The activity state.\n * @param {AwardPeriodActionTypes} action The action type.\n * @returns {IAwardPeriodDataState} The activity state.\n */\n\nfunction awardPeriodReducer(\n  state: IAwardPeriodDataState = initialState,\n  action\n): IAwardPeriodDataState {\n  switch (action.type) {\n    case AWARD_PERIOD_LOAD_SUCCESS:\n      return applyLoadAwardPeriods(state, action);\n    case AWARD_PERIOD_LOAD_FAILURE:\n      return applyLoadAwardPeriodsFail(state, action);\n    default:\n      return state;\n  }\n}\n\nexport default awardPeriodReducer;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { defaultFilterValues } from \"Constants/AzureBenefitConstants\";\nimport { defaultListingPageSize } from \"Constants/BenefitConstants\";\nimport { OperationStatus } from \"Constants/OperationStatus\";\n\nimport {\n  AzureBenefitRequestsActionTypes,\n  IApproveOrDeclineAzureBenefitRequest,\n  IApproveOrDeclineAzureBenefitRequestFailure,\n  IApproveOrDeclineAzureBenefitRequestSuccess,\n  IAzureBenefitRequestsFilterValueAdd,\n  IAzureBenefitRequestsFilterValueRemove,\n  IAzureBenefitRequestsFilterValueUpdate,\n  IGetAzureBenefitRequestDetailsFail,\n  IGetAzureBenefitRequestDetailsSuccess,\n  ISearchAzureBenefitRequests,\n  ISearchAzureBenefitRequestsFail,\n  ISearchAzureBenefitRequestsSuccess,\n} from \"./AzureBenefitRequestsAction\";\nimport {\n  AZURE_BENEFIT_REQUEST_APPROVE_OR_DECLINE,\n  AZURE_BENEFIT_REQUEST_APPROVE_OR_DECLINE_FAILURE,\n  AZURE_BENEFIT_REQUEST_APPROVE_OR_DECLINE_SUCCESS,\n  AZURE_BENEFIT_REQUESTS_FILTER_VALUE_ADD,\n  AZURE_BENEFIT_REQUESTS_FILTER_VALUE_CLEAR,\n  AZURE_BENEFIT_REQUESTS_FILTER_VALUE_REMOVE,\n  AZURE_BENEFIT_REQUESTS_FILTER_VALUE_UPDATE,\n  AZURE_BENEFIT_REQUESTS_SEARCH,\n  AZURE_BENEFIT_REQUESTS_SEARCH_FAIL,\n  AZURE_BENEFIT_REQUESTS_SEARCH_SUCCESS,\n  GET_AZURE_BENEFIT_REQUEST_DETAILS,\n  GET_AZURE_BENEFIT_REQUEST_DETAILS_FAIL,\n  GET_AZURE_BENEFIT_REQUEST_DETAILS_SUCCESS,\n} from \"./AzureBenefitRequestsActionTypes\";\nimport { IAzureBenefitRequestsState } from \"./IAzureBenefitRequestsState\";\n\nconst INITIAL_STATE: IAzureBenefitRequestsState = {\n  currentPage: 1,\n  filteredCount: 0,\n  isLoadingAzureBenefitRequests: false,\n  loadAzureBenefitRequestsError: \"\",\n  pageSize: defaultListingPageSize,\n  searchText: \"\",\n  requests: [],\n  azureBenefitRequestsFilterValues: defaultFilterValues,\n  selectedAzureBenefitRequest: undefined,\n  fetchAzureBenefitRequestDetailsErrorMessage: \"\",\n  selectedAzureBenefitRequestIsExpedited: false,\n  selectedAzureBenefitRequestExpeditedByDate: undefined,\n  azureBenefitApproveOrDeclineOperationStatus: OperationStatus.Idle,\n  azureBenefitApproveOrDeclineErrorMessage: \"\",\n};\n\nconst applySearchAzureBenefitRequests = (\n  state: IAzureBenefitRequestsState,\n  action: ISearchAzureBenefitRequests\n): IAzureBenefitRequestsState => ({\n  ...state,\n  requests: [],\n  isLoadingAzureBenefitRequests: true,\n  searchText: action.searchText,\n  currentPage: action.pageIndex,\n  loadAzureBenefitRequestsError: \"\",\n  azureBenefitApproveOrDeclineOperationStatus: OperationStatus.Idle,\n  azureBenefitApproveOrDeclineErrorMessage: \"\",\n});\n\nconst applySearchAzureBenefitRequestsSuccess = (\n  state: IAzureBenefitRequestsState,\n  action: ISearchAzureBenefitRequestsSuccess\n): IAzureBenefitRequestsState => ({\n  ...state,\n  requests: action.requests,\n  currentPage: action.pageIndex,\n  isLoadingAzureBenefitRequests: false,\n  filteredCount: action.filteredCount,\n  loadAzureBenefitRequestsError: \"\",\n});\n\nconst applySearchAzureBenefitRequestsFail = (\n  state: IAzureBenefitRequestsState,\n  action: ISearchAzureBenefitRequestsFail\n): IAzureBenefitRequestsState => ({\n  ...state,\n  loadAzureBenefitRequestsError: action.error,\n  isLoadingAzureBenefitRequests: false,\n});\n\nconst addAzureBenefitRequestsFilterValue = (\n  state: IAzureBenefitRequestsState,\n  action: IAzureBenefitRequestsFilterValueAdd\n): IAzureBenefitRequestsState => ({\n  ...state,\n  azureBenefitRequestsFilterValues: state.azureBenefitRequestsFilterValues.concat([\n    action.filterValue,\n  ]),\n});\n\nconst removeAzureBenefitRequestsFilterValue = (\n  state: IAzureBenefitRequestsState,\n  action: IAzureBenefitRequestsFilterValueRemove\n): IAzureBenefitRequestsState => ({\n  ...state,\n  azureBenefitRequestsFilterValues: state.azureBenefitRequestsFilterValues.filter(\n    (item) =>\n      !(item.fieldName === action.filterValue.fieldName && item.value === action.filterValue.value)\n  ),\n});\n\nconst updateAzureBenefitRequestsFilterValue = (\n  state: IAzureBenefitRequestsState,\n  action: IAzureBenefitRequestsFilterValueUpdate\n): IAzureBenefitRequestsState => ({\n  ...state,\n  azureBenefitRequestsFilterValues: state.azureBenefitRequestsFilterValues\n    .filter((item) => !(item.fieldName === action.filterValue.fieldName))\n    .concat([action.filterValue]),\n});\n\nconst clearAzureBenefitRequestsFilterValue = (\n  state: IAzureBenefitRequestsState\n): IAzureBenefitRequestsState => ({\n  ...state,\n  azureBenefitRequestsFilterValues: [],\n});\n\nconst applyGetAzureBenefitRequestDetails = (\n  state: IAzureBenefitRequestsState\n): IAzureBenefitRequestsState => ({\n  ...state,\n  selectedAzureBenefitRequest: undefined,\n  selectedAzureBenefitRequestIsExpedited: false,\n  fetchAzureBenefitRequestDetailsErrorMessage: \"\",\n  selectedAzureBenefitRequestExpeditedByDate: undefined,\n});\n\nconst applyGetAzureBenefitRequestDetailsSuccess = (\n  state: IAzureBenefitRequestsState,\n  action: IGetAzureBenefitRequestDetailsSuccess\n): IAzureBenefitRequestsState => ({\n  ...state,\n  selectedAzureBenefitRequest: action.questionAnswerMap,\n  selectedAzureBenefitRequestIsExpedited: action.expedited,\n  selectedAzureBenefitRequestExpeditedByDate: action?.expeditedDate,\n});\n\nconst applyGetAzureBenefitRequestDetailsFail = (\n  state: IAzureBenefitRequestsState,\n  action: IGetAzureBenefitRequestDetailsFail\n): IAzureBenefitRequestsState => ({\n  ...state,\n  selectedAzureBenefitRequest: undefined,\n  fetchAzureBenefitRequestDetailsErrorMessage: action.error,\n  selectedAzureBenefitRequestIsExpedited: false,\n});\n\nconst applyApproveOrDeclineAzureBenefitRequest = (\n  state: IAzureBenefitRequestsState,\n  action: IApproveOrDeclineAzureBenefitRequest\n): IAzureBenefitRequestsState => ({\n  ...state,\n  azureBenefitApproveOrDeclineOperationStatus: OperationStatus.Pending,\n  azureBenefitApproveOrDeclineErrorMessage: \"\",\n});\n\nconst applyApproveOrDeclineAzureBenefitRequestSuccess = (\n  state: IAzureBenefitRequestsState,\n  action: IApproveOrDeclineAzureBenefitRequestSuccess\n): IAzureBenefitRequestsState => ({\n  ...state,\n  azureBenefitApproveOrDeclineOperationStatus: OperationStatus.Succeeded,\n});\n\nconst applyApproveOrDeclineAzureBenefitRequestFailure = (\n  state: IAzureBenefitRequestsState,\n  action: IApproveOrDeclineAzureBenefitRequestFailure\n): IAzureBenefitRequestsState => ({\n  ...state,\n  azureBenefitApproveOrDeclineOperationStatus: OperationStatus.Failed,\n  azureBenefitApproveOrDeclineErrorMessage: action.errorMessage,\n});\n\nfunction azureBenefitRequestsReducer(\n  state = INITIAL_STATE,\n  action: AzureBenefitRequestsActionTypes\n): IAzureBenefitRequestsState {\n  switch (action.type) {\n    case AZURE_BENEFIT_REQUESTS_SEARCH:\n      return applySearchAzureBenefitRequests(state, action);\n    case AZURE_BENEFIT_REQUESTS_SEARCH_FAIL:\n      return applySearchAzureBenefitRequestsFail(state, action);\n    case AZURE_BENEFIT_REQUESTS_SEARCH_SUCCESS:\n      return applySearchAzureBenefitRequestsSuccess(state, action);\n    case AZURE_BENEFIT_REQUESTS_FILTER_VALUE_ADD:\n      return addAzureBenefitRequestsFilterValue(state, action);\n    case AZURE_BENEFIT_REQUESTS_FILTER_VALUE_CLEAR:\n      return clearAzureBenefitRequestsFilterValue(state);\n    case AZURE_BENEFIT_REQUESTS_FILTER_VALUE_REMOVE:\n      return removeAzureBenefitRequestsFilterValue(state, action);\n    case AZURE_BENEFIT_REQUESTS_FILTER_VALUE_UPDATE:\n      return updateAzureBenefitRequestsFilterValue(state, action);\n    case GET_AZURE_BENEFIT_REQUEST_DETAILS:\n      return applyGetAzureBenefitRequestDetails(state);\n    case GET_AZURE_BENEFIT_REQUEST_DETAILS_FAIL:\n      return applyGetAzureBenefitRequestDetailsFail(state, action);\n    case GET_AZURE_BENEFIT_REQUEST_DETAILS_SUCCESS:\n      return applyGetAzureBenefitRequestDetailsSuccess(state, action);\n    case AZURE_BENEFIT_REQUEST_APPROVE_OR_DECLINE:\n      return applyApproveOrDeclineAzureBenefitRequest(state, action);\n    case AZURE_BENEFIT_REQUEST_APPROVE_OR_DECLINE_FAILURE:\n      return applyApproveOrDeclineAzureBenefitRequestFailure(state, action);\n    case AZURE_BENEFIT_REQUEST_APPROVE_OR_DECLINE_SUCCESS:\n      return applyApproveOrDeclineAzureBenefitRequestSuccess(state, action);\n    default:\n      return state;\n  }\n}\n\nexport default azureBenefitRequestsReducer;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { defaultListingPageSize } from \"Constants/BenefitConstants\";\n\nimport {\n  BenefitActionTypes,\n  IBenefitsFilterValueAdd,\n  IBenefitsFilterValueRemove,\n  IBenefitsFilterValueUpdate,\n  ISearchBenefits,\n  ISearchBenefitsFail,\n  ISearchBenefitsSuccess,\n  IUpdateCurrentPage,\n  IUpdatePageSize,\n} from \"./BenefitAction\";\nimport {\n  BENEFITS_FILTER_VALUE_ADD,\n  BENEFITS_FILTER_VALUE_REMOVE,\n  BENEFITS_FILTER_VALUE_UPDATE,\n  BENEFITS_RESET,\n  BENEFITS_SEARCH,\n  BENEFITS_SEARCH_FAIL,\n  BENEFITS_SEARCH_SUCCESS,\n  UPDATE_BENEFIT_LISTING_CURRENT_PAGE,\n  UPDATE_BENEFIT_LISTING_PAGE_SIZE,\n} from \"./BenefitActionTypes\";\nimport { IBenefitState } from \"./IBenefitState\";\n\nconst INITIAL_STATE: IBenefitState = {\n  isLoadingBenefits: false,\n  benefits: [],\n  benefitsFilterValues: [],\n  loadBenefitsError: \"\",\n  currentPage: 1,\n  pageSize: defaultListingPageSize,\n  searchText: \"\",\n  filteredCount: 0,\n  unclaimedCount: 0,\n};\n\nconst applySearchBenefits = (state: IBenefitState, action: ISearchBenefits): IBenefitState => ({\n  ...state,\n  benefits: [],\n  isLoadingBenefits: true,\n  searchText: action.searchText,\n  currentPage: action.searchPage,\n  loadBenefitsError: \"\",\n  currentTenant: action.tenant,\n  currentBenefitName: action.benefitName,\n});\n\nconst applySearchBenefitsSuccess = (\n  state: IBenefitState,\n  action: ISearchBenefitsSuccess\n): IBenefitState => ({\n  ...state,\n  benefits: action.benefits,\n  currentPage: action.searchPage,\n  isLoadingBenefits: false,\n  filteredCount: action.filteredCount,\n  unclaimedCount: action.unclaimedCount,\n  loadBenefitsError: \"\",\n});\n\nconst applySearchBenefitsFail = (\n  state: IBenefitState,\n  action: ISearchBenefitsFail\n): IBenefitState => ({\n  ...state,\n  loadBenefitsError: action.error,\n  isLoadingBenefits: false,\n});\n\nconst applyResetBenefits = (): IBenefitState => INITIAL_STATE;\n\nconst applyUpdateCurrentPage = (\n  state: IBenefitState,\n  action: IUpdateCurrentPage\n): IBenefitState => ({\n  ...state,\n  currentPage: action.currentPage,\n});\n\nconst applyUpdatePageSize = (state: IBenefitState, action: IUpdatePageSize): IBenefitState => ({\n  ...state,\n  pageSize: action.pageSize,\n});\n\nconst addBenefitsFilterValue = (\n  state: IBenefitState,\n  action: IBenefitsFilterValueAdd\n): IBenefitState => ({\n  ...state,\n  benefitsFilterValues: state.benefitsFilterValues.concat([action.filterValue]),\n});\n\nconst removeBenefitsFilterValue = (\n  state: IBenefitState,\n  action: IBenefitsFilterValueRemove\n): IBenefitState => ({\n  ...state,\n  benefitsFilterValues: state.benefitsFilterValues.filter(\n    (item) =>\n      !(item.fieldName === action.filterValue.fieldName && item.value === action.filterValue.value)\n  ),\n});\n\nconst updateBenefitsFilterValue = (\n  state: IBenefitState,\n  action: IBenefitsFilterValueUpdate\n): IBenefitState => ({\n  ...state,\n  benefitsFilterValues: state.benefitsFilterValues\n    .filter((item) => !(item.fieldName === action.filterValue.fieldName))\n    .concat([action.filterValue]),\n});\n\nfunction benefitReducer(state = INITIAL_STATE, action: BenefitActionTypes): IBenefitState {\n  switch (action.type) {\n    case BENEFITS_SEARCH: {\n      return applySearchBenefits(state, action);\n    }\n    case BENEFITS_SEARCH_FAIL: {\n      return applySearchBenefitsFail(state, action);\n    }\n    case BENEFITS_SEARCH_SUCCESS: {\n      return applySearchBenefitsSuccess(state, action);\n    }\n    case BENEFITS_RESET: {\n      return applyResetBenefits();\n    }\n    case UPDATE_BENEFIT_LISTING_CURRENT_PAGE: {\n      return applyUpdateCurrentPage(state, action);\n    }\n    case UPDATE_BENEFIT_LISTING_PAGE_SIZE: {\n      return applyUpdatePageSize(state, action);\n    }\n    case BENEFITS_FILTER_VALUE_ADD: {\n      return addBenefitsFilterValue(state, action);\n    }\n    case BENEFITS_FILTER_VALUE_REMOVE: {\n      return removeBenefitsFilterValue(state, action);\n    }\n    case BENEFITS_FILTER_VALUE_UPDATE: {\n      return updateBenefitsFilterValue(state, action);\n    }\n    default:\n      return state;\n  }\n}\n\nexport default benefitReducer;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { OperationStatus } from \"Constants/OperationStatus\";\nimport { IAvaiableCpmOptionList } from \"Interfaces/SiteContent/IAvailableCpmOptionList\";\nimport { ICommonDataState } from \"Interfaces/SiteContent/ICommonDataState\";\nimport { IReviewStatusOptionList } from \"Interfaces/SiteContent/IReviewStatusOptionList\";\n\nimport { ICommonDataLoadFail, ICommonDataLoadSuccess } from \"./CommonDataAction\";\nimport { COMMON_DATA_LOAD_FAIL, COMMON_DATA_LOAD_SUCCESS } from \"./CommonDataActionTypes\";\n\n/**\n * Common Data Initial State.\n */\nconst initialState: ICommonDataState = {\n  commonDataOperationStatus: OperationStatus.Idle,\n  commonDataLoadError: \"\",\n  mvp: {\n    reviewStatuses: [],\n    reviewStatusOptionList: [],\n    availableCpms: [],\n    availableCpmOptionList: [],\n  },\n  mlsa: {\n    availableCpms: [],\n    availableCpmOptionList: [],\n  },\n};\n\n/**\n * Updates state of fetch common data success.\n * @param {ICommonDataState} state The common data state.\n * @param {ICommonDataLoadSuccess} action The common data action success.\n * @returns {ICommonDataState} New common data state.\n */\nconst applyLoadSuccessCommonData = (\n  state: ICommonDataState,\n  action: ICommonDataLoadSuccess\n): ICommonDataState => ({\n  ...state,\n  commonDataOperationStatus: OperationStatus.Succeeded,\n  mvp: {\n    reviewStatuses: action.commonData.mvp.reviewStatuses,\n    reviewStatusOptionList: action.commonData.mvp.reviewStatuses.map(\n      (x) =>\n        ({\n          key: x.name,\n          text: x.name,\n        } as IReviewStatusOptionList)\n    ),\n    availableCpms: action.commonData.mvp.availableCpms,\n    availableCpmOptionList: action.commonData.mvp.availableCpms.map(\n      (x) =>\n        ({\n          key: x.email,\n          text: x.name,\n        } as IAvaiableCpmOptionList)\n    ),\n  },\n  mlsa: {\n    availableCpms: action.commonData.mlsa.availableCpms,\n    availableCpmOptionList: action.commonData.mlsa.availableCpms.map(\n      (x) =>\n        ({\n          key: x.email,\n          text: x.name,\n        } as IAvaiableCpmOptionList)\n    ),\n  },\n});\n\n/**\n * Updates state of fetch common data failure.\n * @param {ICommonDataState} state The common data state.\n * @param {ICommonDataLoadFail} action The common data action failure.\n * @returns {ICommonDataState} New common data state.\n */\nconst applyLoadFailCommonData = (\n  state: ICommonDataState,\n  action: ICommonDataLoadFail\n): ICommonDataState => ({\n  ...state,\n  commonDataOperationStatus: OperationStatus.Failed,\n  commonDataLoadError: action.commonDataLoadError,\n});\n\n/**\n * Reducer function for CommonData component.\n * @param {ICommonDataState} state The activity state.\n * @param {ICommonDataActionTypes} action The action type.\n * @returns {IClRegionDataState} The activity state.\n */\n\nfunction CommonDataReducer(state: ICommonDataState = initialState, action): ICommonDataState {\n  switch (action.type) {\n    case COMMON_DATA_LOAD_SUCCESS:\n      return applyLoadSuccessCommonData(state, action);\n    case COMMON_DATA_LOAD_FAIL:\n      return applyLoadFailCommonData(state, action);\n    default:\n      return state;\n  }\n}\n\nexport default CommonDataReducer;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport {\n  CAPACITY_DATA_LOAD,\n  CAPACITY_DATA_LOAD_SUCCESS,\n  DEMOGRAPHICS_FILTER,\n  DEMOGRAPHICS_FILTER_COUNTRY_VALUE_REMOVE,\n  DEMOGRAPHICS_FILTER_REGION_VALUE_REMOVE,\n  DEMOGRAPHICS_FILTER_RESET,\n  DEMOGRAPHICS_FILTER_SUCCESS,\n  DEMOGRAPHICS_FILTER_VALUE_ADD,\n  DEMOGRAPHICS_FILTER_VALUE_REMOVE,\n  DEMOGRAPHICS_FILTER_VALUE_UPDATE,\n} from \"Constants/ActionTypes\";\nimport { defaultMvpDemographicsFilterValues } from \"Constants/ApplicationConstants\";\nimport { TenantTypesEnum } from \"Constants/TenantTypes\";\n\nimport {\n  DemographicActionTypes,\n  ICapDataLoad,\n  IDemographicsFilterValueAdd,\n  IDemographicsFilterValueRemove,\n  IDemographicsFilterValueUpdate,\n  IFilterDemographics,\n} from \"./DemographicsAction\";\nimport { IDemographicsState } from \"./IDemographicsState\";\n\nconst INITIAL_STATE: IDemographicsState = {\n  demographicsData: {\n    numberOfApplications: 0,\n    averageApplicationScore: 0,\n    genderData: [],\n    statusData: [],\n    declineReasonData: [],\n    awardCategoryBarData: [],\n    regionBarData: [],\n  },\n  capData: {\n    capacityData: [],\n  },\n  demographicsFilterValues: defaultMvpDemographicsFilterValues,\n  isLoadingDemographics: false,\n  isLoadingCapData: false,\n  loadDemographicsError: \"\",\n  loadCapDataError: \"\",\n  tenant: TenantTypesEnum.MVP,\n};\n\nconst applyFilterDemographics = (\n  state: IDemographicsState,\n  action: IFilterDemographics\n): IDemographicsState => ({\n  ...state,\n  demographicsData: INITIAL_STATE.demographicsData,\n  isLoadingDemographics: true,\n  loadDemographicsError: \"\",\n  tenant: action.tenant,\n});\n\nconst applyFilterDemographicsSuccess = (state: IDemographicsState, action): IDemographicsState => ({\n  ...state,\n  demographicsData: action.demographics,\n  isLoadingDemographics: false,\n  loadDemographicsError: \"\",\n});\n\nconst applyFilterDemographicsFail = (state: IDemographicsState, action): IDemographicsState => ({\n  ...state,\n  demographicsData: INITIAL_STATE.demographicsData,\n  isLoadingDemographics: false,\n  loadDemographicsError: \"Couldn't load demographics data: \" + action.errorMessage,\n});\n\nconst addDemographicsFilterValue = (\n  state: IDemographicsState,\n  action: IDemographicsFilterValueAdd\n): IDemographicsState => ({\n  ...state,\n  demographicsFilterValues: state.demographicsFilterValues.concat([action.filterValue]),\n});\n\nconst applyDemographicsFilterReset = (state: IDemographicsState): IDemographicsState => ({\n  ...state,\n  demographicsFilterValues: defaultMvpDemographicsFilterValues,\n});\n\nconst removeDemographicsFilterValue = (\n  state: IDemographicsState,\n  action: IDemographicsFilterValueRemove\n): IDemographicsState => ({\n  ...state,\n  demographicsFilterValues: state.demographicsFilterValues.filter(\n    (item) =>\n      !(item.fieldName === action.filterValue.fieldName && item.value === action.filterValue.value)\n  ),\n});\n\nconst removeDemographicsFilterRegionValue = (state: IDemographicsState): IDemographicsState => ({\n  ...state,\n  demographicsFilterValues: state.demographicsFilterValues.filter(\n    (item) => !(item.fieldName === \"region\")\n  ),\n});\n\nconst removeDemographicsFilterCountryValue = (state: IDemographicsState): IDemographicsState => ({\n  ...state,\n  demographicsFilterValues: state.demographicsFilterValues.filter(\n    (item) => !(item.fieldName === \"country\")\n  ),\n});\n\nconst updateDemographicsFilterValue = (\n  state: IDemographicsState,\n  action: IDemographicsFilterValueUpdate\n): IDemographicsState => ({\n  ...state,\n  demographicsFilterValues: state.demographicsFilterValues\n    .filter((item) => !(item.fieldName === action.filterValue.fieldName))\n    .concat([action.filterValue]),\n});\n\nconst applyCapacityDataLoad = (state: IDemographicsState, _: ICapDataLoad): IDemographicsState => ({\n  ...state,\n  capData: INITIAL_STATE.capData,\n  isLoadingCapData: true,\n  loadCapDataError: \"\",\n  tenant: TenantTypesEnum.MVP,\n});\n\nconst applyCapacityDataLoadSuccess = (state: IDemographicsState, action): IDemographicsState => ({\n  ...state,\n  capData: action.capData,\n  isLoadingCapData: false,\n  loadCapDataError: \"\",\n});\n\nconst applyCapacityDataLoadFail = (state: IDemographicsState, action): IDemographicsState => ({\n  ...state,\n  capData: INITIAL_STATE.capData,\n  isLoadingCapData: false,\n  loadCapDataError: \"Couldn't load capacity data: \" + action.errorMessage,\n});\n\nfunction applicationReducer(\n  state = INITIAL_STATE,\n  action: DemographicActionTypes\n): IDemographicsState {\n  switch (action.type) {\n    case DEMOGRAPHICS_FILTER: {\n      return applyFilterDemographics(state, action);\n    }\n    case DEMOGRAPHICS_FILTER_SUCCESS: {\n      return applyFilterDemographicsSuccess(state, action);\n    }\n    case DEMOGRAPHICS_FILTER_RESET: {\n      return applyDemographicsFilterReset(state);\n    }\n    case DEMOGRAPHICS_FILTER_VALUE_ADD: {\n      return addDemographicsFilterValue(state, action);\n    }\n    case DEMOGRAPHICS_FILTER_VALUE_REMOVE: {\n      return removeDemographicsFilterValue(state, action);\n    }\n    case DEMOGRAPHICS_FILTER_COUNTRY_VALUE_REMOVE: {\n      return removeDemographicsFilterCountryValue(state);\n    }\n    case DEMOGRAPHICS_FILTER_REGION_VALUE_REMOVE: {\n      return removeDemographicsFilterRegionValue(state);\n    }\n    case DEMOGRAPHICS_FILTER_VALUE_UPDATE: {\n      return updateDemographicsFilterValue(state, action);\n    }\n    case CAPACITY_DATA_LOAD: {\n      return applyCapacityDataLoad(state, action);\n    }\n    case CAPACITY_DATA_LOAD_SUCCESS: {\n      return applyCapacityDataLoadSuccess(state, action);\n    }\n    default:\n      return state;\n  }\n}\n\nexport default applicationReducer;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { defaultListingPageSize } from \"Constants/AdminConstants\";\nimport { OperationStatus } from \"Constants/OperationStatus\";\n\nimport {\n  DistributionListsActionTypes,\n  IAddMicrosoftMemberToDLRequest,\n  IAddMicrosoftMemberToDLRequestFail,\n  IAddMicrosoftMemberToDLRequestSuccess,\n  IApproveOrDeclineJoinRequest,\n  IApproveOrDeclineJoinRequestFail,\n  IFetchDistributionListByTenantRequest,\n  IFetchDistributionListByTenantRequestFail,\n  IFetchDistributionListByTenantRequestSuccess,\n  IFetchMicrosoftMembersForDLRequest,\n  IFetchMicrosoftMembersForDLRequestFail,\n  IFetchMicrosoftMembersForDLRequestSuccess,\n  IRemoveMicrosoftMemberFromDLRequest,\n  IRemoveMicrosoftMemberFromDLRequestFail,\n  IRemoveMicrosoftMemberFromDLRequestSuccess,\n  ISearchDistributionLists,\n  ISearchDistributionListsFail,\n  ISearchDistributionListsSuccess,\n  IUpdateCurrentPage,\n  IUpdatePageSize,\n  IUpdateSelectedDistributionList,\n} from \"./DistributionListsAction\";\nimport {\n  ADD_MICROSOFT_MEMBER_TO_DL,\n  ADD_MICROSOFT_MEMBER_TO_DL_FAIL,\n  ADD_MICROSOFT_MEMBER_TO_DL_SUCCESS,\n  APPROVE_OR_DECLINE_DISTRIBUTION_LIST_JOIN_REQUEST,\n  APPROVE_OR_DECLINE_DISTRIBUTION_LIST_JOIN_REQUEST_FAIL,\n  APPROVE_OR_DECLINE_DISTRIBUTION_LIST_JOIN_REQUEST_SUCCESS,\n  DISTRIBUTION_LISTS_RESET,\n  DISTRIBUTION_LISTS_SEARCH,\n  DISTRIBUTION_LISTS_SEARCH_FAIL,\n  DISTRIBUTION_LISTS_SEARCH_SUCCESS,\n  FETCH_DISTRIBUTION_LISTS_BY_TENANT_REQUEST,\n  FETCH_DISTRIBUTION_LISTS_BY_TENANT_REQUEST_FAIL,\n  FETCH_DISTRIBUTION_LISTS_BY_TENANT_REQUEST_SUCCESS,\n  FETCH_MICROSOFT_MEMBERS_FOR_DL,\n  FETCH_MICROSOFT_MEMBERS_FOR_DL_FAIL,\n  FETCH_MICROSOFT_MEMBERS_FOR_DL_SUCCESS,\n  MICROSOFT_MEMBER_DL_RESET,\n  REMOVE_MICROSOFT_MEMBER_FROM_DL,\n  REMOVE_MICROSOFT_MEMBER_FROM_DL_FAIL,\n  REMOVE_MICROSOFT_MEMBER_FROM_DL_SUCCESS,\n  UPDATE_DISTRIBUTION_LISTS_LISTING_CURRENT_PAGE,\n  UPDATE_DISTRIBUTION_LISTS_LISTING_PAGE_SIZE,\n  UPDATE_SELECTED_DISTRIBUTION_LIST,\n} from \"./DistributionListsActionTypes\";\nimport { IDistributionListsState } from \"./IDistributionListsState\";\n\nconst INITIAL_STATE: IDistributionListsState = {\n  distributionLists: [],\n  distributionListsByTenant: [],\n  networkOperationStatusFetchByTenant: OperationStatus.Idle,\n  fetchDistributionListsByTenantError: \"\",\n  distributionListsByTenantCount: 0,\n  networkOperationStatus: OperationStatus.Idle,\n  networkOperationStatusApprove: OperationStatus.Idle,\n  networkOperationStatusAddMember: OperationStatus.Idle,\n  networkOperationStatusRemoveMember: OperationStatus.Idle,\n  networkOperationStatusFetchMicrosoftMembers: OperationStatus.Idle,\n  networkOperationError: \"\",\n  networkOperationApproveError: \"\",\n  currentPage: 1,\n  pageSize: defaultListingPageSize,\n  filteredCount: 0,\n  selectedDistributionList: {},\n  selectedDistributionListMicrosoftMembers: [],\n  fetchMicrosoftMembersError: \"\",\n  addMemberToDLErrorMessage: \"\",\n  removeMemberFromDLErrorMessage: \"\",\n};\n\nconst applySearchDistributionLists = (\n  state: IDistributionListsState,\n  action: ISearchDistributionLists\n): IDistributionListsState => ({\n  ...state,\n  distributionLists: [],\n  networkOperationStatus: OperationStatus.Pending,\n  networkOperationError: \"\",\n  currentPage: action.searchPage,\n  currentTenant: action.tenant,\n});\n\nconst applySearchDistributionListsSuccess = (\n  state: IDistributionListsState,\n  action: ISearchDistributionListsSuccess\n): IDistributionListsState => ({\n  ...state,\n  distributionLists: action.distributionLists,\n  currentPage: action.searchPage,\n  filteredCount: action.filteredCount,\n  networkOperationStatus: OperationStatus.Succeeded,\n  networkOperationError: \"\",\n});\n\nconst applySearchDistributionListsFail = (\n  state: IDistributionListsState,\n  action: ISearchDistributionListsFail\n): IDistributionListsState => ({\n  ...state,\n  networkOperationStatus: OperationStatus.Failed,\n  networkOperationError: action.error,\n});\n\nconst applyResetDistributionLists = (): IDistributionListsState => INITIAL_STATE;\n\nconst applyUpdateCurrentPage = (\n  state: IDistributionListsState,\n  action: IUpdateCurrentPage\n): IDistributionListsState => ({\n  ...state,\n  currentPage: action.currentPage,\n});\n\nconst applyUpdatePageSize = (\n  state: IDistributionListsState,\n  action: IUpdatePageSize\n): IDistributionListsState => ({\n  ...state,\n  pageSize: action.pageSize,\n});\n\nconst applyApproveOrDeclineJoinRequest = (\n  state: IDistributionListsState,\n  action: IApproveOrDeclineJoinRequest\n): IDistributionListsState => ({\n  ...state,\n  networkOperationStatusApprove: OperationStatus.Pending,\n  networkOperationApproveError: \"\",\n});\n\nconst applyApproveOrDeclineJoinRequestSuccess = (\n  state: IDistributionListsState\n): IDistributionListsState => ({\n  ...state,\n  networkOperationStatusApprove: OperationStatus.Succeeded,\n  networkOperationApproveError: \"\",\n});\n\nconst applyApproveOrDeclineJoinRequestFail = (\n  state: IDistributionListsState,\n  action: IApproveOrDeclineJoinRequestFail\n): IDistributionListsState => ({\n  ...state,\n  networkOperationStatusApprove: OperationStatus.Failed,\n  networkOperationApproveError: action.error,\n});\n\nconst applyFetchDistributionListsByTenant = (\n  state: IDistributionListsState,\n  action: IFetchDistributionListByTenantRequest\n) => ({\n  ...state,\n  fetchDistributionListsByTenantError: \"\",\n  distributionListsByTenant: [],\n  networkOperationStatusFetchByTenant: OperationStatus.Pending,\n});\n\nconst applyFetchDistributionListsByTenantSuccess = (\n  state: IDistributionListsState,\n  action: IFetchDistributionListByTenantRequestSuccess\n): IDistributionListsState => ({\n  ...state,\n  distributionListsByTenant: action.distributionListsByTenant,\n  networkOperationStatusFetchByTenant: OperationStatus.Succeeded,\n  distributionListsByTenantCount: action.count,\n});\n\nconst applyFetchDistributionListsByTenantFail = (\n  state: IDistributionListsState,\n  action: IFetchDistributionListByTenantRequestFail\n): IDistributionListsState => ({\n  ...state,\n  networkOperationStatusFetchByTenant: OperationStatus.Failed,\n  networkOperationApproveError: action.errorMessage,\n  fetchDistributionListsByTenantError: action.errorMessage,\n});\n\nconst applyUpdateSelectedDistributionList = (\n  state: IDistributionListsState,\n  action: IUpdateSelectedDistributionList\n): IDistributionListsState => ({\n  ...state,\n  selectedDistributionList: state.distributionListsByTenant.filter(\n    (dl) => dl.distributionListEmail === action.distributionListEmail\n  )[0],\n});\n\nconst applyFetchMicrosoftMembersForDL = (\n  state: IDistributionListsState,\n  action: IFetchMicrosoftMembersForDLRequest\n): IDistributionListsState => ({\n  ...state,\n  selectedDistributionListMicrosoftMembers: [],\n  fetchMicrosoftMembersError: \"\",\n  networkOperationStatusFetchMicrosoftMembers: OperationStatus.Pending,\n  networkOperationStatusAddMember: OperationStatus.Idle,\n  networkOperationStatusRemoveMember: OperationStatus.Idle,\n});\n\nconst applyFetchMicrosoftMembersForDLFail = (\n  state: IDistributionListsState,\n  action: IFetchMicrosoftMembersForDLRequestFail\n): IDistributionListsState => ({\n  ...state,\n  fetchMicrosoftMembersError: action.errorMessage,\n  networkOperationStatusFetchMicrosoftMembers: OperationStatus.Failed,\n});\n\nconst applyFetchMicrosoftMembersForDLSuccess = (\n  state: IDistributionListsState,\n  action: IFetchMicrosoftMembersForDLRequestSuccess\n): IDistributionListsState => ({\n  ...state,\n  selectedDistributionListMicrosoftMembers: action.microsoftMembers,\n  networkOperationStatusFetchMicrosoftMembers: OperationStatus.Succeeded,\n});\n\nconst applyAddMicrosoftMemberToDL = (\n  state: IDistributionListsState,\n  action: IAddMicrosoftMemberToDLRequest\n): IDistributionListsState => ({\n  ...state,\n  networkOperationStatusAddMember: OperationStatus.Pending,\n  networkOperationStatusRemoveMember: OperationStatus.Idle,\n});\n\nconst applyAddMicrosoftMemberToDLFail = (\n  state: IDistributionListsState,\n  action: IAddMicrosoftMemberToDLRequestFail\n): IDistributionListsState => ({\n  ...state,\n  networkOperationStatusAddMember: OperationStatus.Failed,\n  addMemberToDLErrorMessage: action.errorMessage\n    ? action.errorMessage\n    : \"Failed to add this user to the distribution list.\",\n});\n\nconst applyAddMicrosoftMemberToDLSuccess = (\n  state: IDistributionListsState,\n  action: IAddMicrosoftMemberToDLRequestSuccess\n): IDistributionListsState => ({\n  ...state,\n  networkOperationStatusAddMember: OperationStatus.Succeeded,\n});\n\nconst applyResetMicrosoftMemberDLs = (state: IDistributionListsState): IDistributionListsState => ({\n  ...state,\n  networkOperationStatusAddMember: OperationStatus.Idle,\n  networkOperationStatusRemoveMember: OperationStatus.Idle,\n  addMemberToDLErrorMessage: \"\",\n  removeMemberFromDLErrorMessage: \"\",\n});\n\nconst applyRemoveMicrosoftMemberFromDL = (\n  state: IDistributionListsState,\n  action: IRemoveMicrosoftMemberFromDLRequest\n): IDistributionListsState => ({\n  ...state,\n  networkOperationStatusRemoveMember: OperationStatus.Pending,\n  networkOperationStatusAddMember: OperationStatus.Idle,\n});\n\nconst applyRemoveMicrosoftMemberFromDLFail = (\n  state: IDistributionListsState,\n  action: IRemoveMicrosoftMemberFromDLRequestFail\n): IDistributionListsState => ({\n  ...state,\n  networkOperationStatusRemoveMember: OperationStatus.Failed,\n  removeMemberFromDLErrorMessage: action.errorMessage\n    ? action.errorMessage\n    : \"Failed to remove this user from the distribution list.\",\n});\n\nconst applyRemoveMicrosoftMemberFromDLSuccess = (\n  state: IDistributionListsState,\n  action: IRemoveMicrosoftMemberFromDLRequestSuccess\n): IDistributionListsState => ({\n  ...state,\n  networkOperationStatusRemoveMember: OperationStatus.Succeeded,\n});\n\nfunction distributionListsReducer(\n  state = INITIAL_STATE,\n  action: DistributionListsActionTypes\n): IDistributionListsState {\n  switch (action.type) {\n    case ADD_MICROSOFT_MEMBER_TO_DL: {\n      return applyAddMicrosoftMemberToDL(state, action);\n    }\n    case ADD_MICROSOFT_MEMBER_TO_DL_FAIL: {\n      return applyAddMicrosoftMemberToDLFail(state, action);\n    }\n    case ADD_MICROSOFT_MEMBER_TO_DL_SUCCESS: {\n      return applyAddMicrosoftMemberToDLSuccess(state, action);\n    }\n    case MICROSOFT_MEMBER_DL_RESET: {\n      return applyResetMicrosoftMemberDLs(state);\n    }\n    case DISTRIBUTION_LISTS_SEARCH: {\n      return applySearchDistributionLists(state, action);\n    }\n    case DISTRIBUTION_LISTS_SEARCH_FAIL: {\n      return applySearchDistributionListsFail(state, action);\n    }\n    case DISTRIBUTION_LISTS_SEARCH_SUCCESS: {\n      return applySearchDistributionListsSuccess(state, action);\n    }\n    case DISTRIBUTION_LISTS_RESET: {\n      return applyResetDistributionLists();\n    }\n    case REMOVE_MICROSOFT_MEMBER_FROM_DL: {\n      return applyRemoveMicrosoftMemberFromDL(state, action);\n    }\n    case REMOVE_MICROSOFT_MEMBER_FROM_DL_FAIL: {\n      return applyRemoveMicrosoftMemberFromDLFail(state, action);\n    }\n    case REMOVE_MICROSOFT_MEMBER_FROM_DL_SUCCESS: {\n      return applyRemoveMicrosoftMemberFromDLSuccess(state, action);\n    }\n    case UPDATE_DISTRIBUTION_LISTS_LISTING_CURRENT_PAGE: {\n      return applyUpdateCurrentPage(state, action);\n    }\n    case UPDATE_DISTRIBUTION_LISTS_LISTING_PAGE_SIZE: {\n      return applyUpdatePageSize(state, action);\n    }\n    case APPROVE_OR_DECLINE_DISTRIBUTION_LIST_JOIN_REQUEST: {\n      return applyApproveOrDeclineJoinRequest(state, action);\n    }\n    case APPROVE_OR_DECLINE_DISTRIBUTION_LIST_JOIN_REQUEST_SUCCESS: {\n      return applyApproveOrDeclineJoinRequestSuccess(state);\n    }\n    case APPROVE_OR_DECLINE_DISTRIBUTION_LIST_JOIN_REQUEST_FAIL: {\n      return applyApproveOrDeclineJoinRequestFail(state, action);\n    }\n    case FETCH_DISTRIBUTION_LISTS_BY_TENANT_REQUEST: {\n      return applyFetchDistributionListsByTenant(state, action);\n    }\n    case FETCH_DISTRIBUTION_LISTS_BY_TENANT_REQUEST_SUCCESS: {\n      return applyFetchDistributionListsByTenantSuccess(state, action);\n    }\n    case FETCH_DISTRIBUTION_LISTS_BY_TENANT_REQUEST_FAIL: {\n      return applyFetchDistributionListsByTenantFail(state, action);\n    }\n    case UPDATE_SELECTED_DISTRIBUTION_LIST: {\n      return applyUpdateSelectedDistributionList(state, action);\n    }\n    case FETCH_MICROSOFT_MEMBERS_FOR_DL: {\n      return applyFetchMicrosoftMembersForDL(state, action);\n    }\n    case FETCH_MICROSOFT_MEMBERS_FOR_DL_SUCCESS: {\n      return applyFetchMicrosoftMembersForDLSuccess(state, action);\n    }\n    case FETCH_MICROSOFT_MEMBERS_FOR_DL_FAIL: {\n      return applyFetchMicrosoftMembersForDLFail(state, action);\n    }\n    default:\n      return state;\n  }\n}\n\nexport default distributionListsReducer;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { defaultFilterValues, defaultListingPageSize } from \"Constants/M365CopilotBenefitConstants\";\n\nimport { IM365CopilotBenefitState } from \"./IM365CopilotBenefitState\";\nimport {\n  IAddM365CopilotFilterValue,\n  IRemoveM365CopilotFilterValue,\n  ISearchM365CopilotBenefit,\n  ISearchM365CopilotBenefitFail,\n  ISearchM365CopilotBenefitSuccess,\n  IUpdateM365CopilotCurrentPage,\n  IUpdateM365CopilotFilterValue,\n  IUpdateM365CopilotPageSize,\n  M365CopilotBenefitActionTypes,\n} from \"./M365CopilotBenefitAction\";\nimport {\n  M365_COPILOT_BENEFITS_SEARCH,\n  M365_COPILOT_BENEFITS_SEARCH_FAILURE,\n  M365_COPILOT_BENEFITS_SEARCH_RESET,\n  M365_COPILOT_BENEFITS_SEARCH_SUCCESS,\n  M365_COPILOT_FILTER_VALUE_ADD,\n  M365_COPILOT_FILTER_VALUE_REMOVE,\n  M365_COPILOT_FILTER_VALUE_UPDATE,\n  UPDATE_M365_COPILOT_LISTING_CURRENT_PAGE,\n  UPDATE_M365_COPILOT_LISTING_PAGE_SIZE,\n} from \"./M365CopilotBenefitActionType\";\n\nconst INITIAL_STATE: IM365CopilotBenefitState = {\n  benefits: [],\n  isLoading: false,\n  loadBenefitsError: \"\",\n  searchText: \"\",\n  filteredCount: 0,\n  pageSize: defaultListingPageSize,\n  currentPage: 1,\n  m365CopilotFilterValues: defaultFilterValues,\n};\n\nconst applySearchM365CopilotBenefits = (\n  state: IM365CopilotBenefitState,\n  action: ISearchM365CopilotBenefit\n): IM365CopilotBenefitState => {\n  return {\n    ...state,\n    benefits: [],\n    isLoading: true,\n    searchText: action.searchText,\n    loadBenefitsError: \"\",\n    pageSize: action.pageSize,\n    currentPage: action.searchPage,\n    currentTenant: action.tenant,\n  };\n};\n\nconst applySearchM365CopilotBenefitsSuccess = (\n  state: IM365CopilotBenefitState,\n  action: ISearchM365CopilotBenefitSuccess\n): IM365CopilotBenefitState => {\n  return {\n    ...state,\n    benefits: action.benefits,\n    filteredCount: action.filteredCount,\n    isLoading: false,\n  };\n};\n\nconst applySearchM365CopilotBenefitsFail = (\n  state: IM365CopilotBenefitState,\n  action: ISearchM365CopilotBenefitFail\n): IM365CopilotBenefitState => {\n  return {\n    ...state,\n    loadBenefitsError: action.error,\n    isLoading: false,\n  };\n};\n\nconst applyResetM365CopilotBenefits = (): IM365CopilotBenefitState => INITIAL_STATE;\n\nconst applyAddM365CopilotFilterValue = (\n  state: IM365CopilotBenefitState,\n  action: IAddM365CopilotFilterValue\n): IM365CopilotBenefitState => {\n  return {\n    ...state,\n    m365CopilotFilterValues: state.m365CopilotFilterValues.concat([action.filterValue]),\n  };\n};\n\nconst applyRemoveM365CopilotFilterValue = (\n  state: IM365CopilotBenefitState,\n  action: IRemoveM365CopilotFilterValue\n): IM365CopilotBenefitState => {\n  return {\n    ...state,\n    m365CopilotFilterValues: state.m365CopilotFilterValues.filter(\n      (item) =>\n        !(\n          item.fieldName === action.filterValue.fieldName && item.value === action.filterValue.value\n        )\n    ),\n  };\n};\n\nconst applyUpdateM365CopilotFilterValue = (\n  state: IM365CopilotBenefitState,\n  action: IUpdateM365CopilotFilterValue\n): IM365CopilotBenefitState => {\n  return {\n    ...state,\n    m365CopilotFilterValues: state.m365CopilotFilterValues\n      .filter((item) => !(item.fieldName === action.filterValue.fieldName))\n      .concat([action.filterValue]),\n  };\n};\n\nconst applyUpdateM365CopilotCurrentPage = (\n  state: IM365CopilotBenefitState,\n  action: IUpdateM365CopilotCurrentPage\n): IM365CopilotBenefitState => {\n  return {\n    ...state,\n    currentPage: action.currentPage,\n  };\n};\n\nconst applyUpdateM365CopilotPageSize = (\n  state: IM365CopilotBenefitState,\n  action: IUpdateM365CopilotPageSize\n): IM365CopilotBenefitState => {\n  return {\n    ...state,\n    pageSize: action.pageSize,\n  };\n};\n\nfunction m365CopilotBenefitReducer(\n  state = INITIAL_STATE,\n  action: M365CopilotBenefitActionTypes\n): IM365CopilotBenefitState {\n  switch (action.type) {\n    case M365_COPILOT_BENEFITS_SEARCH:\n      return applySearchM365CopilotBenefits(state, action);\n\n    case M365_COPILOT_BENEFITS_SEARCH_SUCCESS:\n      return applySearchM365CopilotBenefitsSuccess(state, action);\n\n    case M365_COPILOT_BENEFITS_SEARCH_FAILURE:\n      return applySearchM365CopilotBenefitsFail(state, action);\n\n    case M365_COPILOT_BENEFITS_SEARCH_RESET:\n      return applyResetM365CopilotBenefits();\n\n    case M365_COPILOT_FILTER_VALUE_ADD:\n      return applyAddM365CopilotFilterValue(state, action);\n\n    case M365_COPILOT_FILTER_VALUE_REMOVE:\n      return applyRemoveM365CopilotFilterValue(state, action);\n\n    case M365_COPILOT_FILTER_VALUE_UPDATE:\n      return applyUpdateM365CopilotFilterValue(state, action);\n\n    case UPDATE_M365_COPILOT_LISTING_CURRENT_PAGE:\n      return applyUpdateM365CopilotCurrentPage(state, action);\n\n    case UPDATE_M365_COPILOT_LISTING_PAGE_SIZE:\n      return applyUpdateM365CopilotPageSize(state, action);\n\n    default:\n      return state;\n  }\n}\n\nexport default m365CopilotBenefitReducer;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nexport const MVP_ADD_COMMENT = \"MVP_ADD_COMMENT\";\nexport const MVP_ADD_COMMENT_SUCCESS = \"MVP_ADD_COMMENT_SUCCESS\";\nexport const MVP_ADD_COMMENT_FAIL = \"MVP_ADD_COMMENT_FAIL\";\n\nexport const MVP_FETCH_COMMENTS = \"MVP_FETCH_COMMENTS\";\nexport const MVP_FETCH_COMMENTS_SUCCESS = \"MVP_FETCH_COMMENTS_SUCCESS\";\nexport const MVP_FETCH_COMMENTS_FAIL = \"MVP_FETCH_COMMENTS_FAIL\";\n\nexport const MVP_FETCH_USER_PROFILE = \"MVP_FETCH_USER_PROFILE\";\nexport const MVP_FETCH_USER_PROFILE_SUCCESS = \"MVP_FETCH_USER_PROFILE_SUCCESS\";\nexport const MVP_FETCH_USER_PROFILE_FAIL = \"MVP_FETCH_USER_PROFILE_FAIL\";\n\nexport const MVP_USERPROFILE_UPDATE_BLOCK_SHIPPING = \"MVP_USERPROFILE_UPDATE_BLOCK_SHIPPING\";\nexport const MVP_USERPROFILE_UPDATE_BLOCK_SHIPPING_FAIL =\n  \"MVP_USERPROFILE_UPDATE_BLOCK_SHIPPING_FAIL\";\nexport const MVP_USERPROFILE_UPDATE_BLOCK_SHIPPING_SUCCESS =\n  \"MVP_USERPROFILE_UPDATE_BLOCK_SHIPPING_SUCCESS\";\n\nexport const MVP_FETCH_PROGRAM_PROFILE = \"MVP_FETCH_PROGRAM_PROFILE\";\nexport const MVP_FETCH_PROGRAM_PROFILE_SUCCESS = \"MVP_FETCH_PROGRAM_PROFILE_SUCCESS\";\nexport const MVP_FETCH_PROGRAM_PROFILE_FAIL = \"MVP_FETCH_PROGRAM_PROFILE_FAIL\";\nexport const MVP_UPDATE_PROGRAM_PROFILE = \"MVP_UPDATE_PROGRAM_PROFILE\";\nexport const MVP_UPDATE_PROGRAM_PROFILE_SUCCESS = \"MVP_UPDATE_PROGRAM_PROFILE_SUCCESS\";\nexport const MVP_UPDATE_PROGRAM_PROFILE_FAIL = \"MVP_UPDATE_PROGRAM_PROFILE_FAIL\";\nexport const MVP_UPDATE_PROGRAM_PROFILE_RESET = \"MVP_UPDATE_PROGRAM_PROFILE_RESET\";\n\nexport const MVP_ADD_AZURE_BENEFIT_DETAIL = \"MVP_ADD_AZURE_BENEFIT_DETAIL\";\nexport const MVP_ADD_AZURE_BENEFIT_DETAIL_SUCCESS = \"MVP_ADD_AZURE_BENEFIT_DETAIL_SUCCESS\";\nexport const MVP_ADD_AZURE_BENEFIT_DETAIL_FAIL = \"MVP_ADD_AZURE_BENEFIT_DETAIL_FAIL\";\nexport const MVP_ADD_AZURE_BENEFIT_RESET = \"MVP_ADD_AZURE_BENEFIT_RESET\";\n\nexport const MVP_FETCH_RETIRE_PROFILE = \"MVP_FETCH_RETIRE_PROFILE\";\nexport const MVP_RETIRE_PROFILE = \"MVP_RETIRE_PROFILE\";\nexport const MVP_FETCH_RETIRE_PROFILE_FAIL = \"MVP_FETCH_RETIRE_PROFILE_FAIL\";\nexport const MVP_FETCH_RETIRE_PROFILE_SUCCESS = \"MVP_FETCH_RETIRE_PROFILE_SUCCESS\";\nexport const MVP_RETIRE_PROFILE_FAIL = \"MVP_RETIRE_PROFILE_FAIL\";\nexport const MVP_RETIRE_PROFILE_SUCCESS = \"MVP_RETIRE_PROFILE_SUCCESS\";\nexport const MVP_RETIRE_PROFILE_RESET = \"MVP_RETIRE_PROFILE_RESET\";\n\nexport const MVP_USER_PROFILES_SEARCH = \"MVP_USER_PROFILES_SEARCH\";\nexport const MVP_USER_PROFILES_SEARCH_SUCCESS = \"MVP_USER_PROFILES_SEARCH_SUCCESS\";\nexport const MVP_USER_PROFILES_SEARCH_FAIL = \"MVP_USER_PROFILES_SEARCH_FAIL\";\n\nexport const MVP_CLAIM_BENEFIT = \"MVP_CLAIM_BENEFIT\";\nexport const MVP_CLAIM_BENEFIT_FAIL = \"MVP_CLAIM_BENEFIT_FAIL\";\nexport const MVP_CLAIM_BENEFIT_SUCCESS = \"MVP_CLAIM_BENEFIT_SUCCESS\";\nexport const MVP_CLAIM_BENEFIT_RESET = \"MVP_CLAIM_BENEFIT_RESET\";\n\nexport const MVP_FETCH_PROFILE_BENEFITS = \"MVP_FETCH_PROFILE_BENEFITS\";\nexport const MVP_FETCH_PROFILE_BENEFITS_SUCCESS = \"MVP_FETCH_PROFILE_BENEFITS_SUCCESS\";\nexport const MVP_FETCH_PROFILE_BENEFITS_FAIL = \"MVP_FETCH_PROFILE_BENEFITS_FAIL\";\n\nexport const MVP_USER_PROFILE_SEARCH_FILTER_VALUE_ADD = \"MVP_USER_PROFILE_SEARCH_FILTER_VALUE_ADD\";\nexport const MVP_USER_PROFILE_SEARCH_FILTER_VALUE_REMOVE =\n  \"MVP_USER_PROFILE_SEARCH_FILTER_VALUE_REMOVE\";\nexport const MVP_USER_PROFILE_SEARCH_FILTER_VALUES_BULK_REMOVE =\n  \"MVP_USER_PROFILE_SEARCH_FILTER_VALUES_BULK_REMOVE\";\nexport const MVP_USER_PROFILE_SEARCH_FILTER_VALUE_STATE_PROVINCE_REMOVE =\n  \"MVP_USER_PROFILE_SEARCH_FILTER_VALUE_STATE_PROVINCE_REMOVE\";\nexport const MVP_USER_PROFILE_SEARCH_FILTER_VALUE_UPDATE =\n  \"MVP_USER_PROFILE_SEARCH_FILTER_VALUE_UPDATE\";\n\nexport const MVP_USER_PROFILE_SEARCH_CURRENT_PAGE_UPDATE =\n  \"MVP_USER_PROFILE_SEARCH_CURRENT_PAGE_UPDATE\";\nexport const MVP_USER_PROFILE_SEARCH_PAGE_SIZE_UPDATE = \"MVP_USER_PROFILE_SEARCH_PAGE_SIZE_UPDATE\";\nexport const MVP_USER_PROFILE_SEARCH_SORTING_UPDATE = \"MVP_USER_PROFILE_SEARCH_SORTING_UPDATE\";\nexport const MVP_USER_PROFILE_FILTER_VALUE_RESET = \"MVP_USER_PROFILE_FILTER_VALUE_RESET\";\n\nexport const MVP_RESET_M365_BENEFIT_DETAIL = \"MVP_RESET_M365_BENEFIT_DETAIL\";\n\nexport const MVP_GET_M365_BENEFIT_DETAIL = \"MVP_GET_M365_BENEFIT_DETAIL\";\nexport const MVP_GET_M365_BENEFIT_DETAIL_SUCCESS = \"MVP_GET_M365_BENEFIT_DETAIL_SUCCESS\";\nexport const MVP_GET_M365_BENEFIT_DETAIL_FAILURE = \"MVP_GET_M365_BENEFIT_DETAIL_FAILURE\";\n\nexport const MVP_UPDATE_M365_BENEFIT_DETAIL = \"MVP_UPDATE_M365_BENEFIT_DETAIL\";\nexport const MVP_UPDATE_M365_BENEFIT_DETAIL_SUCCESS = \"MVP_UPDATE_M365_BENEFIT_DETAIL_SUCCESS\";\nexport const MVP_UPDATE_M365_BENEFIT_DETAIL_FAILURE = \"MVP_UPDATE_M365_BENEFIT_DETAIL_FAILURE\";\n\nexport const MVP_RESET_MS365_BENEFIT_DETAIL = \"MVP_RESET_MS365_BENEFIT_DETAIL\";\n\nexport const MVP_GET_MS365_BENEFIT_DETAIL = \"MVP_GET_MS365_BENEFIT_DETAIL\";\nexport const MVP_GET_MS365_BENEFIT_DETAIL_SUCCESS = \"MVP_GET_MS365_BENEFIT_DETAIL_SUCCESS\";\nexport const MVP_GET_MS365_BENEFIT_DETAIL_FAILURE = \"MVP_GET_MS365_BENEFIT_DETAIL_FAILURE\";\n\nexport const MVP_UPDATE_MS365_BENEFIT_DETAIL = \"MVP_UPDATE_MS365_BENEFIT_DETAIL\";\nexport const MVP_UPDATE_MS365_BENEFIT_DETAIL_SUCCESS = \"MVP_UPDATE_MS365_BENEFIT_DETAIL_SUCCESS\";\nexport const MVP_UPDATE_MS365_BENEFIT_DETAIL_FAILURE = \"MVP_UPDATE_MS365_BENEFIT_DETAIL_FAILURE\";\n\nexport const MVP_GET_TEAMS_BENEFIT_DETAIL = \"MVP_GET_TEAMS_BENEFIT_DETAIL\";\nexport const MVP_GET_TEAMS_BENEFIT_DETAIL_SUCCESS = \"MVP_GET_TEAMS_BENEFIT_DETAIL_SUCCESS\";\nexport const MVP_GET_TEAMS_BENEFIT_DETAIL_FAILURE = \"MVP_GET_TEAMS_BENEFIT_DETAIL_FAILURE\";\n\nexport const MVP_GET_AWARD_KITS_BENEFIT_DETAIL = \"MVP_GET_AWARD_KITS_BENEFIT_DETAIL\";\nexport const MVP_GET_AWARD_KITS_BENEFIT_DETAIL_SUCCESS =\n  \"MVP_GET_AWARD_KITS_BENEFIT_DETAIL_SUCCESS\";\nexport const MVP_GET_AWARD_KITS_BENEFIT_DETAIL_FAILURE = \"MVP_GET_TEAMS_AWARD_KITS_DETAIL_FAILURE\";\n\nexport const MVP_EXTEND_AZURE_BENEFIT_CREDIT = \"MVP_EXTEND_AZURE_BENEFIT_CREDIT\";\nexport const MVP_EXTEND_AZURE_BENEFIT_CREDIT_SUCCESS = \"MVP_EXTEND_AZURE_BENEFIT_CREDIT_SUCCESS\";\nexport const MVP_EXTEND_AZURE_BENEFIT_CREDIT_FAILURE = \"MVP_EXTEND_AZURE_BENEFIT_CREDIT_FAILURE\";\nexport const MVP_EXTEND_AZURE_BENEFIT_CREDIT_RESET = \"MVP_EXTEND_AZURE_BENEFIT_CREDIT_RESET\";\n\nexport const MVP_USERPROFILE_UPDATE_IS_PRIVATE = \"MVP_USERPROFILE_UPDATE_IS_PRIVATE\";\nexport const MVP_USERPROFILE_UPDATE_IS_PRIVATE_FAIL = \"MVP_USERPROFILE_UPDATE_IS_PRIVATE_FAIL\";\nexport const MVP_USERPROFILE_UPDATE_IS_PRIVATE_SUCCESS =\n  \"MVP_USERPROFILE_UPDATE_IS_PRIVATE_SUCCESS\";\n\nexport const MVP_USERPROFILE_UPDATE_PRIMARY_EMAIL = \"MVP_USERPROFILE_UPDATE_PRIMARY_EMAIL\";\nexport const MVP_USERPROFILE_UPDATE_PRIMARY_EMAIL_FAIL =\n  \"MVP_USERPROFILE_UPDATE_PRIMARY_EMAIL_FAIL\";\nexport const MVP_USERPROFILE_UPDATE_PRIMARY_EMAIL_SUCCESS =\n  \"MVP_USERPROFILE_UPDATE_PRIMARY_EMAIL_SUCCESS\";\nexport const MVP_USERPROFILE_UPDATE_PRIMARY_EMAIL_RESET =\n  \"MVP_USERPROFILE_UPDATE_PRIMARY_EMAIL_RESET\";\n\nexport const MVP_USERPROFILE_UPDATE_ANNUAL_EXCEPTION = \"MVP_USERPROFILE_UPDATE_ANNUAL_EXCEPTION\";\nexport const MVP_USERPROFILE_UPDATE_ANNUAL_EXCEPTION_FAIL =\n  \"MVP_USERPROFILE_UPDATE_ANNUAL_EXCEPTION_FAIL\";\nexport const MVP_USERPROFILE_UPDATE_ANNUAL_EXCEPTION_SUCCESS =\n  \"MVP_USERPROFILE_UPDATE_ANNUAL_EXCEPTION_SUCCESS\";\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { isEqual } from \"lodash\";\n\nimport { OperationStatus } from \"Constants/OperationStatus\";\nimport { defaultListingPageSize, defaultMvpFilterValues } from \"Constants/ProfileConstants\";\nimport { TenantTypesEnum } from \"Constants/TenantTypes\";\nimport { removeDateTimeOffset } from \"Utility/FormatHelper\";\n\nimport { IMVPState } from \"./IMVPState\";\nimport {\n  IMVPAddNewCommentFail,\n  IMVPClaimBenefitFail,\n  IMVPExtendAzureBenefitCreditFailure,\n  IMVPFetchAwardKitsBenefitDetailFailure,\n  IMVPFetchAwardKitsBenefitDetailSuccess,\n  IMVPFetchCommentsFail,\n  IMVPFetchCommentsSuccess,\n  IMVPFetchM365BenefitDetailFailure,\n  IMVPFetchM365BenefitDetailSuccess,\n  IMVPFetchProfileBenefitsFail,\n  IMVPFetchProfileBenefitsSuccess,\n  IMVPFetchProgramProfileFail,\n  IMVPFetchProgramProfileSuccess,\n  IMVPFetchRetireProfileFail,\n  IMVPFetchRetireProfileSuccess,\n  IMVPFetchTeamsBenefitDetailFailure,\n  IMVPFetchTeamsBenefitDetailSuccess,\n  IMVPFetchUserProfileFail,\n  IMVPFetchUserProfileSuccess,\n  IMVPRetireProfileFail,\n  IMVPUpdateM365BenefitDetailFailure,\n  IMVPUpdateM365BenefitDetailSuccess,\n  IMVPUpdateProgramProfileFail,\n  IMVPUserProfilesSearch,\n  IMVPUserProfilesSearchFail,\n  IMVPUserProfilesSearchSuccess,\n  IMVPUserProfileAnnualExceptionUpdateFail,\n  IMVPUserProfileIsPrivateUpdateFail,\n  IMVPUserProfilePrimaryEmailUpdateFail,\n  IMVPUserProfileSearchCurrentPageUpdate,\n  IMVPUserProfileSearchFilterValuesBulkRemove,\n  IMVPUserProfileSearchFilterValueAdd,\n  IMVPUserProfileSearchFilterValueRemove,\n  IMVPUserProfileSearchFilterValueUpdate,\n  IMVPUserProfileSearchPageSizeUpdate,\n  IMVPUserProfileSearchSortingChange,\n  IMVPUserProfileUpdateBlockShippingFail,\n  IMVPFetchMS365BenefitDetailFailure,\n  IMVPFetchMS365BenefitDetailSuccess,\n  IMVPUpdateMS365BenefitDetailFailure,\n  IMVPUpdateMS365BenefitDetailSuccess,\n  MVPActionTypes,\n  IMVPAddAzureBenefitDetailFail,\n} from \"./MVPAction\";\nimport {\n  MVP_ADD_COMMENT,\n  MVP_ADD_COMMENT_FAIL,\n  MVP_ADD_COMMENT_SUCCESS,\n  MVP_CLAIM_BENEFIT,\n  MVP_CLAIM_BENEFIT_FAIL,\n  MVP_CLAIM_BENEFIT_RESET,\n  MVP_CLAIM_BENEFIT_SUCCESS,\n  MVP_EXTEND_AZURE_BENEFIT_CREDIT,\n  MVP_EXTEND_AZURE_BENEFIT_CREDIT_FAILURE,\n  MVP_EXTEND_AZURE_BENEFIT_CREDIT_RESET,\n  MVP_EXTEND_AZURE_BENEFIT_CREDIT_SUCCESS,\n  MVP_FETCH_COMMENTS,\n  MVP_FETCH_COMMENTS_FAIL,\n  MVP_FETCH_COMMENTS_SUCCESS,\n  MVP_FETCH_PROFILE_BENEFITS,\n  MVP_FETCH_PROFILE_BENEFITS_FAIL,\n  MVP_FETCH_PROFILE_BENEFITS_SUCCESS,\n  MVP_FETCH_PROGRAM_PROFILE,\n  MVP_FETCH_PROGRAM_PROFILE_FAIL,\n  MVP_FETCH_PROGRAM_PROFILE_SUCCESS,\n  MVP_FETCH_RETIRE_PROFILE,\n  MVP_FETCH_RETIRE_PROFILE_FAIL,\n  MVP_FETCH_RETIRE_PROFILE_SUCCESS,\n  MVP_FETCH_USER_PROFILE,\n  MVP_FETCH_USER_PROFILE_FAIL,\n  MVP_FETCH_USER_PROFILE_SUCCESS,\n  MVP_GET_AWARD_KITS_BENEFIT_DETAIL,\n  MVP_GET_AWARD_KITS_BENEFIT_DETAIL_FAILURE,\n  MVP_GET_AWARD_KITS_BENEFIT_DETAIL_SUCCESS,\n  MVP_GET_M365_BENEFIT_DETAIL,\n  MVP_GET_M365_BENEFIT_DETAIL_FAILURE,\n  MVP_GET_M365_BENEFIT_DETAIL_SUCCESS,\n  MVP_GET_TEAMS_BENEFIT_DETAIL,\n  MVP_GET_TEAMS_BENEFIT_DETAIL_FAILURE,\n  MVP_GET_TEAMS_BENEFIT_DETAIL_SUCCESS,\n  MVP_RESET_M365_BENEFIT_DETAIL,\n  MVP_RETIRE_PROFILE,\n  MVP_RETIRE_PROFILE_FAIL,\n  MVP_RETIRE_PROFILE_SUCCESS,\n  MVP_UPDATE_M365_BENEFIT_DETAIL,\n  MVP_UPDATE_M365_BENEFIT_DETAIL_FAILURE,\n  MVP_UPDATE_M365_BENEFIT_DETAIL_SUCCESS,\n  MVP_UPDATE_PROGRAM_PROFILE,\n  MVP_UPDATE_PROGRAM_PROFILE_FAIL,\n  MVP_UPDATE_PROGRAM_PROFILE_RESET,\n  MVP_UPDATE_PROGRAM_PROFILE_SUCCESS,\n  MVP_USER_PROFILE_FILTER_VALUE_RESET,\n  MVP_USER_PROFILE_SEARCH_CURRENT_PAGE_UPDATE,\n  MVP_USER_PROFILE_SEARCH_FILTER_VALUE_ADD,\n  MVP_USER_PROFILE_SEARCH_FILTER_VALUE_REMOVE,\n  MVP_USER_PROFILE_SEARCH_FILTER_VALUE_STATE_PROVINCE_REMOVE,\n  MVP_USER_PROFILE_SEARCH_FILTER_VALUE_UPDATE,\n  MVP_USER_PROFILE_SEARCH_FILTER_VALUES_BULK_REMOVE,\n  MVP_USER_PROFILE_SEARCH_PAGE_SIZE_UPDATE,\n  MVP_USER_PROFILE_SEARCH_SORTING_UPDATE,\n  MVP_USER_PROFILES_SEARCH,\n  MVP_USER_PROFILES_SEARCH_FAIL,\n  MVP_USER_PROFILES_SEARCH_SUCCESS,\n  MVP_USERPROFILE_UPDATE_ANNUAL_EXCEPTION,\n  MVP_USERPROFILE_UPDATE_ANNUAL_EXCEPTION_FAIL,\n  MVP_USERPROFILE_UPDATE_ANNUAL_EXCEPTION_SUCCESS,\n  MVP_USERPROFILE_UPDATE_BLOCK_SHIPPING,\n  MVP_USERPROFILE_UPDATE_BLOCK_SHIPPING_FAIL,\n  MVP_USERPROFILE_UPDATE_BLOCK_SHIPPING_SUCCESS,\n  MVP_USERPROFILE_UPDATE_IS_PRIVATE,\n  MVP_USERPROFILE_UPDATE_IS_PRIVATE_FAIL,\n  MVP_USERPROFILE_UPDATE_IS_PRIVATE_SUCCESS,\n  MVP_USERPROFILE_UPDATE_PRIMARY_EMAIL,\n  MVP_USERPROFILE_UPDATE_PRIMARY_EMAIL_FAIL,\n  MVP_USERPROFILE_UPDATE_PRIMARY_EMAIL_RESET,\n  MVP_USERPROFILE_UPDATE_PRIMARY_EMAIL_SUCCESS,\n  MVP_ADD_AZURE_BENEFIT_DETAIL,\n  MVP_ADD_AZURE_BENEFIT_DETAIL_SUCCESS,\n  MVP_ADD_AZURE_BENEFIT_DETAIL_FAIL,\n  MVP_ADD_AZURE_BENEFIT_RESET,\n  MVP_RESET_MS365_BENEFIT_DETAIL,\n  MVP_GET_MS365_BENEFIT_DETAIL,\n  MVP_GET_MS365_BENEFIT_DETAIL_FAILURE,\n  MVP_GET_MS365_BENEFIT_DETAIL_SUCCESS,\n  MVP_UPDATE_MS365_BENEFIT_DETAIL,\n  MVP_UPDATE_MS365_BENEFIT_DETAIL_FAILURE,\n  MVP_UPDATE_MS365_BENEFIT_DETAIL_SUCCESS,\n  MVP_RETIRE_PROFILE_RESET,\n} from \"./MVPActionTypes\";\n\nconst INITIAL_STATE: IMVPState = {\n  azureBenefitExtendCreditState: {\n    extendAzureCreditOperationStatus: { update: OperationStatus.Idle },\n    extendAzureCreditError: \"\",\n  },\n  azureBenefitAddState: {\n    addAzureBenefitOperationStatus: { update: OperationStatus.Idle },\n    addAzureBenefitError: \"\",\n  },\n  m365BenefitDetailState: {\n    m365FetchErrorMessage: \"\",\n    m365UpdateErrorMessage: \"\",\n    m365OperationStatus: { read: OperationStatus.Idle, update: OperationStatus.Idle },\n    m365BenefitDetail: {\n      tenantId: \"\",\n      tenantName: \"\",\n      userProfileId: 0,\n    },\n  },\n  ms365BenefitDetailState: {\n    ms365FetchErrorMessage: \"\",\n    ms365UpdateErrorMessage: \"\",\n    ms365OperationStatus: { read: OperationStatus.Idle, update: OperationStatus.Idle },\n    ms365BenefitDetail: {\n      subscriptionId: \"\",\n      tenantId: \"\",\n      tenantName: \"\",\n      userProfileId: 0,\n    },\n  },\n  teamsBenefitDetailState: {\n    teamsFetchErrorMessage: \"\",\n    teamsUpdateErrorMessage: \"\",\n    teamsOperationStatus: { read: OperationStatus.Idle, update: OperationStatus.Idle },\n    teamsBenefitDetail: {\n      userProfileId: 0,\n      expirationDate: \"\",\n      claimDate: \"\",\n      code: \"\",\n    },\n  },\n  awardKitsBenefitDetailState: {\n    awardKitsFetchErrorMessage: \"\",\n    awardKitsUpdateErrorMessage: \"\",\n    awardKitsOperationStatus: { read: OperationStatus.Idle, update: OperationStatus.Idle },\n    awardKitsBenefitDetail: {\n      userProfileId: 0,\n      expirationDate: \"\",\n      claimDate: \"\",\n      code: \"\",\n    },\n  },\n  benefitsState: {\n    benefitsOperationStatus: { read: OperationStatus.Idle, create: OperationStatus.Idle },\n    profileBenefits: {\n      azure: [],\n      githubPro: [],\n      mcp: [],\n      linkedIn: [],\n      visualStudio: [],\n      m365: [],\n      benefitTenant: {},\n      teams: [],\n      awardKits: [],\n    },\n  },\n  commentsState: {\n    commentsOperationStatus: { read: OperationStatus.Idle, create: OperationStatus.Idle },\n    userProfileComments: [],\n  },\n  demographicsState: {\n    demographicsData: {\n      numberOfApplications: 0,\n      averageApplicationScore: 0,\n      genderData: [],\n      statusData: [],\n      declineReasonData: [],\n      awardCategoryBarData: [],\n      regionBarData: [],\n    },\n    capData: {\n      capacityData: [],\n    },\n    demographicsFilterValues: [],\n    isLoadingDemographics: false,\n    isLoadingCapData: false,\n    loadDemographicsError: \"\",\n    loadCapDataError: \"\",\n    tenant: TenantTypesEnum.MVP,\n  },\n  selectedUserProfileState: {\n    userProfileOperationStatus: {\n      read: OperationStatus.Idle,\n    },\n    updateBlockShippingOperationStatus: OperationStatus.Idle,\n    updateBlockShippingErrorMessage: \"\",\n    updateIsPrivateProfileStatus: OperationStatus.Idle,\n    updateIsPrivateProfileError: \"\",\n    updatePrimaryEmailStatus: OperationStatus.Idle,\n    updatePrimaryEmailErrorMessage: \"\",\n    updateAnnualExceptionProfileStatus: OperationStatus.Idle,\n    updateAnnualExceptionProfileError: \"\",\n  },\n  userProfilesSearchState: {\n    currentPage: 1,\n    filteredCount: 0,\n    filteredUserProfiles: [],\n    searchText: \"\",\n    searchOperationStatus: { read: OperationStatus.Idle },\n    pageSize: defaultListingPageSize,\n    searchFilterValues: defaultMvpFilterValues,\n  },\n  programProfileState: {\n    programProfileOperationStatus: { update: OperationStatus.Idle },\n  },\n  retireProfileState: {\n    operationStatus: { update: OperationStatus.Idle },\n  },\n};\n\nconst applyFetchBenefits = (state: IMVPState): IMVPState => ({\n  ...state,\n  benefitsState: {\n    ...state.benefitsState,\n    benefitsOperationStatus: { read: OperationStatus.Pending },\n    profileBenefitsErrorMessage: undefined,\n  },\n});\n\nconst applyFetchProfileBenefitsSuccess = (\n  state: IMVPState,\n  action: IMVPFetchProfileBenefitsSuccess\n): IMVPState => ({\n  ...state,\n  benefitsState: {\n    ...state.benefitsState,\n    benefitsOperationStatus: { read: OperationStatus.Succeeded },\n    profileBenefitsErrorMessage: undefined,\n    profileBenefits: action.userProfileBenefits,\n  },\n});\n\nconst applyFetchBenefitsFail = (\n  state: IMVPState,\n  action: IMVPFetchProfileBenefitsFail\n): IMVPState => ({\n  ...state,\n  benefitsState: {\n    ...state.benefitsState,\n    benefitsOperationStatus: { read: OperationStatus.Failed },\n    profileBenefitsErrorMessage: action.profileBenefitsErrorMessage,\n  },\n});\n\nconst applyClaimingBenefit = (state: IMVPState): IMVPState => ({\n  ...state,\n  benefitsState: {\n    ...state.benefitsState,\n    benefitsOperationStatus: { create: OperationStatus.Pending },\n    claimBenefitError: undefined,\n  },\n});\n\nconst applyClaimingBenefitSuccess = (state: IMVPState): IMVPState => ({\n  ...state,\n  benefitsState: {\n    ...state.benefitsState,\n    benefitsOperationStatus: { create: OperationStatus.Succeeded },\n  },\n});\n\nconst applyClaimingBenefitFail = (state: IMVPState, action: IMVPClaimBenefitFail): IMVPState => ({\n  ...state,\n  benefitsState: {\n    ...state.benefitsState,\n    benefitsOperationStatus: { create: OperationStatus.Failed },\n    claimBenefitError: action.error,\n  },\n});\n\nconst applyClaimingBenefitReset = (state: IMVPState): IMVPState => ({\n  ...state,\n  benefitsState: {\n    ...state.benefitsState,\n    benefitsOperationStatus: { create: OperationStatus.Idle },\n    claimBenefitError: \"\",\n  },\n});\n\nconst applyExtendAzureBenefitCredit = (state: IMVPState): IMVPState => ({\n  ...state,\n  azureBenefitExtendCreditState: {\n    ...state.azureBenefitExtendCreditState,\n    extendAzureCreditOperationStatus: { update: OperationStatus.Pending },\n    extendAzureCreditError: \"\",\n  },\n});\n\nconst applyExtendAzureBenefitCreditSuccess = (state: IMVPState): IMVPState => ({\n  ...state,\n  azureBenefitExtendCreditState: {\n    ...state.azureBenefitExtendCreditState,\n    extendAzureCreditOperationStatus: { update: OperationStatus.Succeeded },\n  },\n});\n\nconst applyExtendAzureBenefitCreditFail = (\n  state: IMVPState,\n  action: IMVPExtendAzureBenefitCreditFailure\n): IMVPState => ({\n  ...state,\n  azureBenefitExtendCreditState: {\n    ...state.azureBenefitExtendCreditState,\n    extendAzureCreditOperationStatus: { update: OperationStatus.Failed },\n    extendAzureCreditError: action.error,\n  },\n});\n\nconst applyExtendAzureBenefitCreditReset = (state: IMVPState): IMVPState => ({\n  ...state,\n  azureBenefitExtendCreditState: {\n    ...state.azureBenefitExtendCreditState,\n    extendAzureCreditOperationStatus: { update: OperationStatus.Idle },\n    extendAzureCreditError: \"\",\n  },\n});\n\nconst applyFetchComments = (state: IMVPState): IMVPState => ({\n  ...state,\n  commentsState: {\n    ...state.commentsState,\n    commentsErrorMessage: undefined,\n    commentsOperationStatus: { read: OperationStatus.Pending },\n  },\n});\n\nconst applyFetchCommentsSuccess = (\n  state: IMVPState,\n  action: IMVPFetchCommentsSuccess\n): IMVPState => ({\n  ...state,\n  commentsState: {\n    commentsErrorMessage: undefined,\n    commentsOperationStatus: { read: OperationStatus.Succeeded },\n    userProfileComments: action.userProfileComments,\n  },\n});\n\nconst applyFetchCommentsFail = (state: IMVPState, action: IMVPFetchCommentsFail): IMVPState => ({\n  ...state,\n  commentsState: {\n    ...state.commentsState,\n    commentsOperationStatus: { read: OperationStatus.Failed },\n    commentsErrorMessage: action.errorMessage,\n  },\n});\n\nconst applyAddNewComment = (state: IMVPState): IMVPState => ({\n  ...state,\n  commentsState: {\n    ...state.commentsState,\n    commentsErrorMessage: undefined,\n    commentsOperationStatus: { create: OperationStatus.Pending },\n  },\n});\n\nconst applyAddNewCommentSuccess = (state: IMVPState): IMVPState => ({\n  ...state,\n  commentsState: {\n    ...state.commentsState,\n    commentsErrorMessage: undefined,\n    commentsOperationStatus: { create: OperationStatus.Succeeded },\n  },\n});\n\nconst applyAddNewCommentFail = (state: IMVPState, action: IMVPAddNewCommentFail): IMVPState => ({\n  ...state,\n  commentsState: {\n    ...state.commentsState,\n    commentsOperationStatus: { create: OperationStatus.Failed },\n    commentsErrorMessage: action.errorMessage,\n  },\n});\n\nconst applyFetchProgramProfile = (state: IMVPState): IMVPState => ({\n  ...state,\n  programProfileState: {\n    programProfileOperationStatus: { read: OperationStatus.Pending },\n    programProfileErrorMessage: undefined,\n    programProfile: undefined,\n  },\n});\n\nconst applyFetchRetireProfile = (state: IMVPState): IMVPState => ({\n  ...state,\n  retireProfileState: {\n    operationStatus: { read: OperationStatus.Pending },\n    errorMessage: undefined,\n    retireProfile: undefined,\n  },\n});\n\nconst applyFetchProgramProfileSuccess = (\n  state: IMVPState,\n  action: IMVPFetchProgramProfileSuccess\n): IMVPState => ({\n  ...state,\n  programProfileState: {\n    ...state.programProfileState,\n    programProfileOperationStatus: { read: OperationStatus.Succeeded },\n    programProfile: action.programProfile,\n    programProfileErrorMessage: undefined,\n  },\n});\n\nconst applyFetchRetireProfileSuccess = (\n  state: IMVPState,\n  action: IMVPFetchRetireProfileSuccess\n): IMVPState => ({\n  ...state,\n  retireProfileState: {\n    ...state.retireProfileState,\n    operationStatus: { read: OperationStatus.Succeeded },\n    retireProfile: action.retireProfile,\n    errorMessage: undefined,\n  },\n});\n\nconst applyFetchProgramProfileFail = (\n  state: IMVPState,\n  action: IMVPFetchProgramProfileFail\n): IMVPState => ({\n  ...state,\n  programProfileState: {\n    ...state.programProfileState,\n    programProfileOperationStatus: { read: OperationStatus.Failed },\n    programProfile: undefined,\n    programProfileErrorMessage: action.errorMessage,\n  },\n});\n\nconst applyAddAzureBenefit = (state: IMVPState): IMVPState => ({\n  ...state,\n  azureBenefitAddState: {\n    ...state.azureBenefitAddState,\n    addAzureBenefitOperationStatus: { update: OperationStatus.Pending },\n    addAzureBenefitError: \"\",\n  },\n});\n\nconst applyAddAzureBenefitSuccess = (state: IMVPState): IMVPState => ({\n  ...state,\n  azureBenefitAddState: {\n    ...state.azureBenefitAddState,\n    addAzureBenefitOperationStatus: { update: OperationStatus.Succeeded },\n  },\n});\n\nconst applyAddAzureBenefitFail = (\n  state: IMVPState,\n  action: IMVPAddAzureBenefitDetailFail\n): IMVPState => ({\n  ...state,\n  azureBenefitAddState: {\n    ...state.azureBenefitAddState,\n    addAzureBenefitOperationStatus: { update: OperationStatus.Failed },\n    addAzureBenefitError: action.errorMessage,\n  },\n});\n\nconst applyAddAzureBenefitReset = (state: IMVPState): IMVPState => ({\n  ...state,\n  azureBenefitAddState: {\n    ...state.azureBenefitAddState,\n    addAzureBenefitOperationStatus: { update: OperationStatus.Idle },\n    addAzureBenefitError: \"\",\n  },\n});\n\nconst applyFetchRetireProfileFail = (\n  state: IMVPState,\n  action: IMVPFetchRetireProfileFail\n): IMVPState => ({\n  ...state,\n  retireProfileState: {\n    ...state.retireProfileState,\n    operationStatus: { read: OperationStatus.Failed },\n    retireProfile: undefined,\n    errorMessage: action.errorMessage,\n  },\n});\n\nconst applyUpdateProgramProfile = (state: IMVPState): IMVPState => ({\n  ...state,\n  programProfileState: {\n    ...state.programProfileState,\n    programProfileOperationStatus: { update: OperationStatus.Pending },\n    programProfileErrorMessage: undefined,\n  },\n});\n\nconst applyRetireProfileReset = (state: IMVPState): IMVPState => ({\n  ...state,\n  retireProfileState: {\n    ...state.retireProfileState,\n    operationStatus: { update: OperationStatus.Idle },\n    errorMessage: \"\",\n  },\n});\n\nconst applyRetireProfile = (state: IMVPState): IMVPState => ({\n  ...state,\n  retireProfileState: {\n    ...state.retireProfileState,\n    operationStatus: { update: OperationStatus.Pending },\n    errorMessage: undefined,\n  },\n});\n\nconst applyUpdateProgramProfileSuccess = (state: IMVPState): IMVPState => ({\n  ...state,\n  programProfileState: {\n    ...state.programProfileState,\n    programProfileOperationStatus: { update: OperationStatus.Succeeded },\n    programProfileErrorMessage: undefined,\n  },\n});\n\nconst applyRetireProfileSuccess = (state: IMVPState): IMVPState => ({\n  ...state,\n  retireProfileState: {\n    ...state.retireProfileState,\n    operationStatus: { update: OperationStatus.Succeeded },\n    errorMessage: undefined,\n  },\n});\n\nconst applyUpdateProgramProfileFail = (\n  state: IMVPState,\n  action: IMVPUpdateProgramProfileFail\n): IMVPState => ({\n  ...state,\n  programProfileState: {\n    ...state.programProfileState,\n    programProfileOperationStatus: { update: OperationStatus.Failed },\n    programProfileErrorMessage: action.errorMessage,\n  },\n});\n\nconst applyRetireProfileFail = (state: IMVPState, action: IMVPRetireProfileFail): IMVPState => ({\n  ...state,\n  retireProfileState: {\n    ...state.retireProfileState,\n    operationStatus: { update: OperationStatus.Failed },\n    errorMessage: action.errorMessage,\n  },\n});\n\nconst applyUpdateProgramProfileReset = (state: IMVPState): IMVPState => ({\n  ...state,\n  programProfileState: {\n    ...state.programProfileState,\n    programProfileOperationStatus: { update: OperationStatus.Idle },\n    programProfileErrorMessage: \"\",\n  },\n});\n\nconst applyFetchUserProfile = (state: IMVPState): IMVPState => ({\n  ...state,\n  selectedUserProfileState: {\n    ...state.selectedUserProfileState,\n    userProfileOperationStatus: { read: OperationStatus.Pending },\n    fetchUserProfileErrorMessage: undefined,\n    selectedUserProfile: undefined,\n    updateBlockShippingOperationStatus: OperationStatus.Idle,\n    updateBlockShippingErrorMessage: \"\",\n    updateIsPrivateProfileError: \"\",\n    updateIsPrivateProfileStatus: OperationStatus.Idle,\n    updateAnnualExceptionProfileError: \"\",\n    updateAnnualExceptionProfileStatus: OperationStatus.Idle,\n  },\n});\n\nconst applyFetchUserProfileSuccess = (\n  state: IMVPState,\n  action: IMVPFetchUserProfileSuccess\n): IMVPState => ({\n  ...state,\n  selectedUserProfileState: {\n    ...state.selectedUserProfileState,\n    userProfileOperationStatus: { read: OperationStatus.Succeeded },\n    selectedUserProfile: {\n      ...action.userProfile,\n      dateOfBirth: removeDateTimeOffset(action.userProfile.dateOfBirth),\n    },\n    fetchUserProfileErrorMessage: undefined,\n    updateBlockShippingOperationStatus: OperationStatus.Idle,\n    updateBlockShippingErrorMessage: \"\",\n    updateIsPrivateProfileError: \"\",\n    updateIsPrivateProfileStatus: OperationStatus.Idle,\n    updateAnnualExceptionProfileError: \"\",\n    updateAnnualExceptionProfileStatus: OperationStatus.Idle,\n  },\n});\n\nconst applyFetchUserProfileFail = (\n  state: IMVPState,\n  action: IMVPFetchUserProfileFail\n): IMVPState => ({\n  ...state,\n  selectedUserProfileState: {\n    ...state.selectedUserProfileState,\n    userProfileOperationStatus: { read: OperationStatus.Failed },\n    selectedUserProfile: undefined,\n    fetchUserProfileErrorMessage: action.errorMessage,\n    updateBlockShippingOperationStatus: OperationStatus.Idle,\n    updateBlockShippingErrorMessage: \"\",\n    updateIsPrivateProfileError: \"\",\n    updateIsPrivateProfileStatus: OperationStatus.Idle,\n    updateAnnualExceptionProfileError: \"\",\n    updateAnnualExceptionProfileStatus: OperationStatus.Idle,\n  },\n});\n\nconst applyUserProfilesSearch = (state: IMVPState, action: IMVPUserProfilesSearch): IMVPState => ({\n  ...state,\n  userProfilesSearchState: {\n    ...state.userProfilesSearchState,\n    searchText: action.searchText,\n    currentPage: action.searchPage,\n    pageSize: action.pageSize,\n    searchFilterValues: action.selectedFilterValues,\n    searchOperationStatus: { read: OperationStatus.Pending },\n  },\n});\n\nconst applyUserProfilesSearchSuccess = (\n  state: IMVPState,\n  action: IMVPUserProfilesSearchSuccess\n): IMVPState => ({\n  ...state,\n  userProfilesSearchState: {\n    ...state.userProfilesSearchState,\n    searchOperationStatus: { read: OperationStatus.Succeeded },\n    filteredUserProfiles: action.userProfiles,\n    currentPage: action.searchPage,\n    filteredCount: action.filteredCount,\n    pageSize: action.pageSize,\n  },\n});\n\nconst applyUserProfilesSearchFail = (\n  state: IMVPState,\n  action: IMVPUserProfilesSearchFail\n): IMVPState => ({\n  ...state,\n  userProfilesSearchState: {\n    ...state.userProfilesSearchState,\n    searchOperationStatus: { read: OperationStatus.Failed },\n    searchErrorMessage: action.errorMessage,\n  },\n});\n\nconst applyUserProfilesSearchFilterValueAdd = (\n  state: IMVPState,\n  action: IMVPUserProfileSearchFilterValueAdd\n): IMVPState => ({\n  ...state,\n  userProfilesSearchState: {\n    ...state.userProfilesSearchState,\n    searchFilterValues: [...state.userProfilesSearchState.searchFilterValues, action.filterValue],\n  },\n});\n\nconst applyUserProfilesSearchFilterValueRemove = (\n  state: IMVPState,\n  action: IMVPUserProfileSearchFilterValueRemove\n): IMVPState => ({\n  ...state,\n  userProfilesSearchState: {\n    ...state.userProfilesSearchState,\n    searchFilterValues: state.userProfilesSearchState.searchFilterValues.filter(\n      (value) => !isEqual(value, action.filterValue)\n    ),\n  },\n});\n\nconst applyUserProfilesSearchFilterValuesBulkRemove = (\n  state: IMVPState,\n  action: IMVPUserProfileSearchFilterValuesBulkRemove\n): IMVPState => ({\n  ...state,\n  userProfilesSearchState: {\n    ...state.userProfilesSearchState,\n    searchFilterValues: state.userProfilesSearchState.searchFilterValues.filter(\n      (sfv) => !action.filterValues.some((fv) => fv.value === sfv.value)\n    ),\n  },\n});\n\nconst applyUserProfilesSearchFilterValueStateProvinceRemove = (state: IMVPState): IMVPState => ({\n  ...state,\n  userProfilesSearchState: {\n    ...state.userProfilesSearchState,\n    searchFilterValues: state.userProfilesSearchState.searchFilterValues.filter(\n      (value) => !isEqual(value.fieldName, \"stateOrProvince\")\n    ),\n  },\n});\n\nconst applyUserProfilesSearchFilterValueUpdate = (\n  state: IMVPState,\n  action: IMVPUserProfileSearchFilterValueUpdate\n): IMVPState => ({\n  ...state,\n  userProfilesSearchState: {\n    ...state.userProfilesSearchState,\n    searchFilterValues: [\n      ...state.userProfilesSearchState.searchFilterValues.filter(\n        (value) => !isEqual(value, action.filterValue)\n      ),\n      action.filterValue,\n    ],\n  },\n});\n\nconst applyUserProfilesSearchPageSizeUpdate = (\n  state: IMVPState,\n  action: IMVPUserProfileSearchPageSizeUpdate\n): IMVPState => ({\n  ...state,\n  userProfilesSearchState: {\n    ...state.userProfilesSearchState,\n    currentPage: 1, // Resetting the page to 1 when the page size is changed\n    pageSize: action.pageSize,\n  },\n});\n\nconst applyUserProfilesSearchCurrentPageUpdate = (\n  state: IMVPState,\n  action: IMVPUserProfileSearchCurrentPageUpdate\n): IMVPState => ({\n  ...state,\n  userProfilesSearchState: {\n    ...state.userProfilesSearchState,\n    currentPage: action.currentPage,\n  },\n});\n\nconst applyM365BenefitDetailReset = (state: IMVPState): IMVPState => ({\n  ...state,\n  m365BenefitDetailState: {\n    ...state.m365BenefitDetailState,\n    m365OperationStatus: { read: OperationStatus.Idle, update: OperationStatus.Idle },\n  },\n});\n\nconst applyGetM365BenefitDetailsSuccess = (\n  state: IMVPState,\n  action: IMVPFetchM365BenefitDetailSuccess\n): IMVPState => ({\n  ...state,\n  m365BenefitDetailState: {\n    ...state.m365BenefitDetailState,\n    m365BenefitDetail: action.m365BenefitDetail,\n    m365OperationStatus: {\n      ...state.m365BenefitDetailState.m365OperationStatus,\n      read: OperationStatus.Succeeded,\n    },\n  },\n});\n\nconst applyGetM365BenefitDetailsFailure = (\n  state: IMVPState,\n  action: IMVPFetchM365BenefitDetailFailure\n): IMVPState => ({\n  ...state,\n  m365BenefitDetailState: {\n    ...state.m365BenefitDetailState,\n    m365FetchErrorMessage: action.m365FetchErrorMessage,\n    m365OperationStatus: {\n      ...state.m365BenefitDetailState.m365OperationStatus,\n      read: OperationStatus.Failed,\n    },\n  },\n});\n\nconst applyGetM365BenefitDetails = (state: IMVPState): IMVPState => ({\n  ...state,\n  m365BenefitDetailState: {\n    ...state.m365BenefitDetailState,\n    m365FetchErrorMessage: \"\",\n    m365OperationStatus: {\n      ...state.m365BenefitDetailState.m365OperationStatus,\n      read: OperationStatus.Pending,\n    },\n  },\n});\n\nconst applyUpdateM365BenefitDetails = (state: IMVPState): IMVPState => ({\n  ...state,\n  m365BenefitDetailState: {\n    ...state.m365BenefitDetailState,\n    m365UpdateErrorMessage: \"\",\n    m365OperationStatus: {\n      ...state.m365BenefitDetailState.m365OperationStatus,\n      update: OperationStatus.Pending,\n    },\n  },\n});\n\nconst applyUpdateM365BenefitDetailsSuccess = (\n  state: IMVPState,\n  action: IMVPUpdateM365BenefitDetailSuccess\n): IMVPState => ({\n  ...state,\n  m365BenefitDetailState: {\n    ...state.m365BenefitDetailState,\n    m365BenefitDetail: action.m365BenefitDetail,\n    m365OperationStatus: {\n      ...state.m365BenefitDetailState.m365OperationStatus,\n      update: OperationStatus.Succeeded,\n    },\n  },\n});\n\nconst applyUpdateM365BenefitDetailsFailure = (\n  state: IMVPState,\n  action: IMVPUpdateM365BenefitDetailFailure\n): IMVPState => ({\n  ...state,\n  m365BenefitDetailState: {\n    ...state.m365BenefitDetailState,\n    m365FetchErrorMessage: action.m365UpdateErrorMessage,\n    m365OperationStatus: {\n      ...state.m365BenefitDetailState.m365OperationStatus,\n      update: OperationStatus.Failed,\n    },\n  },\n});\n\nconst applyMS365BenefitDetailReset = (state: IMVPState): IMVPState => ({\n  ...state,\n  ms365BenefitDetailState: {\n    ...state.ms365BenefitDetailState,\n    ms365OperationStatus: { read: OperationStatus.Idle, update: OperationStatus.Idle },\n  },\n});\n\nconst applyGetMS365BenefitDetailsSuccess = (\n  state: IMVPState,\n  action: IMVPFetchMS365BenefitDetailSuccess\n): IMVPState => ({\n  ...state,\n  ms365BenefitDetailState: {\n    ...state.ms365BenefitDetailState,\n    ms365BenefitDetail: action.ms365BenefitDetail,\n    ms365OperationStatus: {\n      ...state.ms365BenefitDetailState.ms365OperationStatus,\n      read: OperationStatus.Succeeded,\n    },\n  },\n});\n\nconst applyGetMS365BenefitDetailsFailure = (\n  state: IMVPState,\n  action: IMVPFetchMS365BenefitDetailFailure\n): IMVPState => ({\n  ...state,\n  ms365BenefitDetailState: {\n    ...state.ms365BenefitDetailState,\n    ms365FetchErrorMessage: action.ms365FetchErrorMessage,\n    ms365OperationStatus: {\n      ...state.ms365BenefitDetailState.ms365OperationStatus,\n      read: OperationStatus.Failed,\n    },\n  },\n});\n\nconst applyGetMS365BenefitDetails = (state: IMVPState): IMVPState => ({\n  ...state,\n  ms365BenefitDetailState: {\n    ...state.ms365BenefitDetailState,\n    ms365FetchErrorMessage: \"\",\n    ms365OperationStatus: {\n      ...state.ms365BenefitDetailState.ms365OperationStatus,\n      read: OperationStatus.Pending,\n    },\n  },\n});\n\nconst applyUpdateMS365BenefitDetails = (state: IMVPState): IMVPState => ({\n  ...state,\n  ms365BenefitDetailState: {\n    ...state.ms365BenefitDetailState,\n    ms365UpdateErrorMessage: \"\",\n    ms365OperationStatus: {\n      ...state.ms365BenefitDetailState.ms365OperationStatus,\n      update: OperationStatus.Pending,\n    },\n  },\n});\n\nconst applyUpdateMS365BenefitDetailsSuccess = (\n  state: IMVPState,\n  action: IMVPUpdateMS365BenefitDetailSuccess\n): IMVPState => ({\n  ...state,\n  ms365BenefitDetailState: {\n    ...state.ms365BenefitDetailState,\n    ms365BenefitDetail: action.ms365BenefitDetail,\n    ms365OperationStatus: {\n      ...state.ms365BenefitDetailState.ms365OperationStatus,\n      update: OperationStatus.Succeeded,\n    },\n  },\n});\n\nconst applyUpdateMS365BenefitDetailsFailure = (\n  state: IMVPState,\n  action: IMVPUpdateMS365BenefitDetailFailure\n): IMVPState => ({\n  ...state,\n  ms365BenefitDetailState: {\n    ...state.ms365BenefitDetailState,\n    ms365FetchErrorMessage: action.ms365UpdateErrorMessage,\n    ms365OperationStatus: {\n      ...state.ms365BenefitDetailState.ms365OperationStatus,\n      update: OperationStatus.Failed,\n    },\n  },\n});\n\nconst applyGetTeamsBenefitDetailsSuccess = (\n  state: IMVPState,\n  action: IMVPFetchTeamsBenefitDetailSuccess\n): IMVPState => ({\n  ...state,\n  teamsBenefitDetailState: {\n    ...state.teamsBenefitDetailState,\n    teamsBenefitDetail: action.teamsBenefitDetail,\n    teamsOperationStatus: {\n      ...state.teamsBenefitDetailState.teamsOperationStatus,\n      read: OperationStatus.Succeeded,\n    },\n  },\n});\n\nconst applyGetTeamsBenefitDetailsFailure = (\n  state: IMVPState,\n  action: IMVPFetchTeamsBenefitDetailFailure\n): IMVPState => ({\n  ...state,\n  teamsBenefitDetailState: {\n    ...state.teamsBenefitDetailState,\n    teamsFetchErrorMessage: action.teamsFetchErrorMessage,\n    teamsOperationStatus: {\n      ...state.teamsBenefitDetailState.teamsOperationStatus,\n      read: OperationStatus.Failed,\n    },\n  },\n});\n\nconst applyGetTeamsBenefitDetails = (state: IMVPState): IMVPState => ({\n  ...state,\n  teamsBenefitDetailState: {\n    ...state.teamsBenefitDetailState,\n    teamsFetchErrorMessage: \"\",\n    teamsOperationStatus: {\n      ...state.teamsBenefitDetailState.teamsOperationStatus,\n      read: OperationStatus.Pending,\n    },\n  },\n});\n\nconst applyGetAwardKitsBenefitDetailsSuccess = (\n  state: IMVPState,\n  action: IMVPFetchAwardKitsBenefitDetailSuccess\n): IMVPState => ({\n  ...state,\n  awardKitsBenefitDetailState: {\n    ...state.awardKitsBenefitDetailState,\n    awardKitsBenefitDetail: action.awardKitsBenefitDetail,\n    awardKitsOperationStatus: {\n      ...state.awardKitsBenefitDetailState.awardKitsOperationStatus,\n      read: OperationStatus.Succeeded,\n    },\n  },\n});\n\nconst applyGetAwardKitsBenefitDetailsFailure = (\n  state: IMVPState,\n  action: IMVPFetchAwardKitsBenefitDetailFailure\n): IMVPState => ({\n  ...state,\n  awardKitsBenefitDetailState: {\n    ...state.awardKitsBenefitDetailState,\n    awardKitsFetchErrorMessage: action.awardKitsFetchErrorMessage,\n    awardKitsOperationStatus: {\n      ...state.awardKitsBenefitDetailState.awardKitsOperationStatus,\n      read: OperationStatus.Failed,\n    },\n  },\n});\n\nconst applyGetAwardKitsBenefitDetails = (state: IMVPState): IMVPState => ({\n  ...state,\n  awardKitsBenefitDetailState: {\n    ...state.awardKitsBenefitDetailState,\n    awardKitsFetchErrorMessage: \"\",\n    awardKitsOperationStatus: {\n      ...state.awardKitsBenefitDetailState.awardKitsOperationStatus,\n      read: OperationStatus.Pending,\n    },\n  },\n});\n\nconst applyUpdateBlockShipping = (state: IMVPState): IMVPState => ({\n  ...state,\n  selectedUserProfileState: {\n    ...state.selectedUserProfileState,\n    updateBlockShippingOperationStatus: OperationStatus.Pending,\n    updateBlockShippingErrorMessage: \"\",\n  },\n});\n\nconst applyUpdateBlockShippingFail = (\n  state: IMVPState,\n  action: IMVPUserProfileUpdateBlockShippingFail\n): IMVPState => ({\n  ...state,\n  selectedUserProfileState: {\n    ...state.selectedUserProfileState,\n    updateBlockShippingOperationStatus: OperationStatus.Failed,\n    updateBlockShippingErrorMessage: action.errorMessage,\n  },\n});\n\nconst applyUpdateBlockShippingSuccess = (state: IMVPState): IMVPState => ({\n  ...state,\n  selectedUserProfileState: {\n    ...state.selectedUserProfileState,\n    updateBlockShippingOperationStatus: OperationStatus.Succeeded,\n    updateBlockShippingErrorMessage: \"\",\n  },\n});\n\nconst applyUserProfileIsPrivateUpdate = (state: IMVPState): IMVPState => ({\n  ...state,\n  selectedUserProfileState: {\n    ...state.selectedUserProfileState,\n    updateIsPrivateProfileStatus: OperationStatus.Pending,\n    updateIsPrivateProfileError: \"\",\n  },\n});\n\nconst applyUserProfileIsPrivateUpdateSuccess = (state: IMVPState): IMVPState => ({\n  ...state,\n  selectedUserProfileState: {\n    ...state.selectedUserProfileState,\n    updateIsPrivateProfileStatus: OperationStatus.Succeeded,\n  },\n});\n\nconst applyUserProfileIsPrivateUpdateFail = (\n  state: IMVPState,\n  action: IMVPUserProfileIsPrivateUpdateFail\n): IMVPState => ({\n  ...state,\n  selectedUserProfileState: {\n    ...state.selectedUserProfileState,\n    updateIsPrivateProfileStatus: OperationStatus.Failed,\n    updateIsPrivateProfileError: action.error,\n  },\n});\n\nconst applyUserProfileAnnualExceptionUpdate = (state: IMVPState): IMVPState => ({\n  ...state,\n  selectedUserProfileState: {\n    ...state.selectedUserProfileState,\n    updateAnnualExceptionProfileStatus: OperationStatus.Pending,\n    updateAnnualExceptionProfileError: \"\",\n  },\n});\n\nconst applyUserProfileAnnualExceptionUpdateSuccess = (state: IMVPState): IMVPState => ({\n  ...state,\n  selectedUserProfileState: {\n    ...state.selectedUserProfileState,\n    updateAnnualExceptionProfileStatus: OperationStatus.Succeeded,\n  },\n});\n\nconst applyUserProfileAnnualExceptionUpdateFail = (\n  state: IMVPState,\n  action: IMVPUserProfileAnnualExceptionUpdateFail\n): IMVPState => ({\n  ...state,\n  selectedUserProfileState: {\n    ...state.selectedUserProfileState,\n    updateAnnualExceptionProfileStatus: OperationStatus.Failed,\n    updateAnnualExceptionProfileError: action.error,\n  },\n});\n\nconst applyUserProfilesSearchSortingUpdate = (\n  state: IMVPState,\n  action: IMVPUserProfileSearchSortingChange\n): IMVPState => ({\n  ...state,\n  userProfilesSearchState: {\n    ...state.userProfilesSearchState,\n    currentPage:\n      state.userProfilesSearchState.currentPage > 1 ? 1 : state.userProfilesSearchState.currentPage,\n    sortColumn: action.sortColumn,\n    sortDescending: action.sortDescending,\n  },\n});\n\nconst applyUserProfileFilterValueReset = (state: IMVPState): IMVPState => ({\n  ...state,\n  userProfilesSearchState: INITIAL_STATE.userProfilesSearchState,\n});\n\nconst applyUserProfilePrimaryEmailUpdate = (state: IMVPState): IMVPState => ({\n  ...state,\n  selectedUserProfileState: {\n    ...state.selectedUserProfileState,\n    updatePrimaryEmailStatus: OperationStatus.Pending,\n    updatePrimaryEmailErrorMessage: \"\",\n  },\n});\n\nconst applyUserProfilePrimaryEmailUpdateFail = (\n  state: IMVPState,\n  action: IMVPUserProfilePrimaryEmailUpdateFail\n): IMVPState => ({\n  ...state,\n  selectedUserProfileState: {\n    ...state.selectedUserProfileState,\n    updatePrimaryEmailStatus: OperationStatus.Failed,\n    updatePrimaryEmailErrorMessage: action.errorMessage,\n  },\n});\n\nconst applyUserProfilePrimaryEmailUpdateSuccess = (state: IMVPState): IMVPState => ({\n  ...state,\n  selectedUserProfileState: {\n    ...state.selectedUserProfileState,\n    updatePrimaryEmailStatus: OperationStatus.Succeeded,\n  },\n});\n\nconst applyUserProfilePrimaryEmailUpdateReset = (state: IMVPState): IMVPState => ({\n  ...state,\n  selectedUserProfileState: {\n    ...state.selectedUserProfileState,\n    updatePrimaryEmailStatus: OperationStatus.Idle,\n    updatePrimaryEmailErrorMessage: \"\",\n  },\n});\n\nfunction mvpReducer(state = INITIAL_STATE, action: MVPActionTypes): IMVPState {\n  switch (action.type) {\n    case MVP_RESET_M365_BENEFIT_DETAIL:\n      return applyM365BenefitDetailReset(state);\n    case MVP_GET_M365_BENEFIT_DETAIL:\n      return applyGetM365BenefitDetails(state);\n    case MVP_GET_M365_BENEFIT_DETAIL_FAILURE:\n      return applyGetM365BenefitDetailsFailure(state, action);\n    case MVP_GET_M365_BENEFIT_DETAIL_SUCCESS:\n      return applyGetM365BenefitDetailsSuccess(state, action);\n    case MVP_UPDATE_M365_BENEFIT_DETAIL:\n      return applyUpdateM365BenefitDetails(state);\n    case MVP_UPDATE_M365_BENEFIT_DETAIL_SUCCESS:\n      return applyUpdateM365BenefitDetailsSuccess(state, action);\n    case MVP_UPDATE_M365_BENEFIT_DETAIL_FAILURE:\n      return applyUpdateM365BenefitDetailsFailure(state, action);\n    case MVP_RESET_MS365_BENEFIT_DETAIL:\n      return applyMS365BenefitDetailReset(state);\n    case MVP_GET_MS365_BENEFIT_DETAIL:\n      return applyGetMS365BenefitDetails(state);\n    case MVP_GET_MS365_BENEFIT_DETAIL_FAILURE:\n      return applyGetMS365BenefitDetailsFailure(state, action);\n    case MVP_GET_MS365_BENEFIT_DETAIL_SUCCESS:\n      return applyGetMS365BenefitDetailsSuccess(state, action);\n    case MVP_UPDATE_MS365_BENEFIT_DETAIL:\n      return applyUpdateMS365BenefitDetails(state);\n    case MVP_UPDATE_MS365_BENEFIT_DETAIL_SUCCESS:\n      return applyUpdateMS365BenefitDetailsSuccess(state, action);\n    case MVP_UPDATE_MS365_BENEFIT_DETAIL_FAILURE:\n      return applyUpdateMS365BenefitDetailsFailure(state, action);\n    case MVP_GET_TEAMS_BENEFIT_DETAIL:\n      return applyGetTeamsBenefitDetails(state);\n    case MVP_GET_TEAMS_BENEFIT_DETAIL_FAILURE:\n      return applyGetTeamsBenefitDetailsFailure(state, action);\n    case MVP_GET_TEAMS_BENEFIT_DETAIL_SUCCESS:\n      return applyGetTeamsBenefitDetailsSuccess(state, action);\n    case MVP_GET_AWARD_KITS_BENEFIT_DETAIL:\n      return applyGetAwardKitsBenefitDetails(state);\n    case MVP_GET_AWARD_KITS_BENEFIT_DETAIL_FAILURE:\n      return applyGetAwardKitsBenefitDetailsFailure(state, action);\n    case MVP_GET_AWARD_KITS_BENEFIT_DETAIL_SUCCESS:\n      return applyGetAwardKitsBenefitDetailsSuccess(state, action);\n    case MVP_EXTEND_AZURE_BENEFIT_CREDIT:\n      return applyExtendAzureBenefitCredit(state);\n    case MVP_EXTEND_AZURE_BENEFIT_CREDIT_SUCCESS:\n      return applyExtendAzureBenefitCreditSuccess(state);\n    case MVP_EXTEND_AZURE_BENEFIT_CREDIT_FAILURE:\n      return applyExtendAzureBenefitCreditFail(state, action);\n    case MVP_EXTEND_AZURE_BENEFIT_CREDIT_RESET:\n      return applyExtendAzureBenefitCreditReset(state);\n    case MVP_ADD_AZURE_BENEFIT_DETAIL:\n      return applyAddAzureBenefit(state);\n    case MVP_ADD_AZURE_BENEFIT_DETAIL_SUCCESS:\n      return applyAddAzureBenefitSuccess(state);\n    case MVP_ADD_AZURE_BENEFIT_DETAIL_FAIL:\n      return applyAddAzureBenefitFail(state, action);\n    case MVP_ADD_AZURE_BENEFIT_RESET:\n      return applyAddAzureBenefitReset(state);\n    case MVP_FETCH_PROFILE_BENEFITS:\n      return applyFetchBenefits(state);\n    case MVP_FETCH_PROFILE_BENEFITS_FAIL:\n      return applyFetchBenefitsFail(state, action);\n    case MVP_FETCH_PROFILE_BENEFITS_SUCCESS:\n      return applyFetchProfileBenefitsSuccess(state, action);\n    case MVP_CLAIM_BENEFIT:\n      return applyClaimingBenefit(state);\n    case MVP_CLAIM_BENEFIT_SUCCESS:\n      return applyClaimingBenefitSuccess(state);\n    case MVP_CLAIM_BENEFIT_FAIL:\n      return applyClaimingBenefitFail(state, action);\n    case MVP_CLAIM_BENEFIT_RESET:\n      return applyClaimingBenefitReset(state);\n    case MVP_FETCH_COMMENTS:\n      return applyFetchComments(state);\n    case MVP_FETCH_COMMENTS_SUCCESS:\n      return applyFetchCommentsSuccess(state, action);\n    case MVP_FETCH_COMMENTS_FAIL:\n      return applyFetchCommentsFail(state, action);\n    case MVP_ADD_COMMENT:\n      return applyAddNewComment(state);\n    case MVP_ADD_COMMENT_SUCCESS:\n      return applyAddNewCommentSuccess(state);\n    case MVP_ADD_COMMENT_FAIL:\n      return applyAddNewCommentFail(state, action);\n    case MVP_FETCH_PROGRAM_PROFILE:\n      return applyFetchProgramProfile(state);\n    case MVP_FETCH_PROGRAM_PROFILE_SUCCESS:\n      return applyFetchProgramProfileSuccess(state, action);\n    case MVP_FETCH_PROGRAM_PROFILE_FAIL:\n      return applyFetchProgramProfileFail(state, action);\n    case MVP_UPDATE_PROGRAM_PROFILE:\n      return applyUpdateProgramProfile(state);\n    case MVP_UPDATE_PROGRAM_PROFILE_SUCCESS:\n      return applyUpdateProgramProfileSuccess(state);\n    case MVP_UPDATE_PROGRAM_PROFILE_FAIL:\n      return applyUpdateProgramProfileFail(state, action);\n    case MVP_UPDATE_PROGRAM_PROFILE_RESET:\n      return applyUpdateProgramProfileReset(state);\n    case MVP_FETCH_USER_PROFILE:\n      return applyFetchUserProfile(state);\n    case MVP_FETCH_USER_PROFILE_SUCCESS:\n      return applyFetchUserProfileSuccess(state, action);\n    case MVP_FETCH_USER_PROFILE_FAIL:\n      return applyFetchUserProfileFail(state, action);\n    case MVP_USER_PROFILES_SEARCH:\n      return applyUserProfilesSearch(state, action);\n    case MVP_USER_PROFILES_SEARCH_SUCCESS:\n      return applyUserProfilesSearchSuccess(state, action);\n    case MVP_USER_PROFILES_SEARCH_FAIL:\n      return applyUserProfilesSearchFail(state, action);\n    case MVP_USER_PROFILE_SEARCH_FILTER_VALUE_ADD:\n      return applyUserProfilesSearchFilterValueAdd(state, action);\n    case MVP_USER_PROFILE_SEARCH_FILTER_VALUE_REMOVE:\n      return applyUserProfilesSearchFilterValueRemove(state, action);\n    case MVP_USER_PROFILE_SEARCH_FILTER_VALUES_BULK_REMOVE:\n      return applyUserProfilesSearchFilterValuesBulkRemove(state, action);\n    case MVP_USER_PROFILE_SEARCH_FILTER_VALUE_STATE_PROVINCE_REMOVE:\n      return applyUserProfilesSearchFilterValueStateProvinceRemove(state);\n    case MVP_USER_PROFILE_SEARCH_FILTER_VALUE_UPDATE:\n      return applyUserProfilesSearchFilterValueUpdate(state, action);\n    case MVP_USER_PROFILE_SEARCH_PAGE_SIZE_UPDATE:\n      return applyUserProfilesSearchPageSizeUpdate(state, action);\n    case MVP_USER_PROFILE_SEARCH_CURRENT_PAGE_UPDATE:\n      return applyUserProfilesSearchCurrentPageUpdate(state, action);\n    case MVP_USER_PROFILE_SEARCH_SORTING_UPDATE:\n      return applyUserProfilesSearchSortingUpdate(state, action);\n    case MVP_USERPROFILE_UPDATE_BLOCK_SHIPPING:\n      return applyUpdateBlockShipping(state);\n    case MVP_USERPROFILE_UPDATE_BLOCK_SHIPPING_FAIL:\n      return applyUpdateBlockShippingFail(state, action);\n    case MVP_USERPROFILE_UPDATE_BLOCK_SHIPPING_SUCCESS:\n      return applyUpdateBlockShippingSuccess(state);\n    case MVP_USERPROFILE_UPDATE_IS_PRIVATE: {\n      return applyUserProfileIsPrivateUpdate(state);\n    }\n    case MVP_USERPROFILE_UPDATE_IS_PRIVATE_SUCCESS: {\n      return applyUserProfileIsPrivateUpdateSuccess(state);\n    }\n    case MVP_USERPROFILE_UPDATE_IS_PRIVATE_FAIL: {\n      return applyUserProfileIsPrivateUpdateFail(state, action);\n    }\n    case MVP_USERPROFILE_UPDATE_ANNUAL_EXCEPTION: {\n      return applyUserProfileAnnualExceptionUpdate(state);\n    }\n    case MVP_USERPROFILE_UPDATE_ANNUAL_EXCEPTION_SUCCESS: {\n      return applyUserProfileAnnualExceptionUpdateSuccess(state);\n    }\n    case MVP_USERPROFILE_UPDATE_ANNUAL_EXCEPTION_FAIL: {\n      return applyUserProfileAnnualExceptionUpdateFail(state, action);\n    }\n    case MVP_USER_PROFILE_FILTER_VALUE_RESET: {\n      return applyUserProfileFilterValueReset(state);\n    }\n    case MVP_USERPROFILE_UPDATE_PRIMARY_EMAIL: {\n      return applyUserProfilePrimaryEmailUpdate(state);\n    }\n    case MVP_USERPROFILE_UPDATE_PRIMARY_EMAIL_FAIL: {\n      return applyUserProfilePrimaryEmailUpdateFail(state, action);\n    }\n    case MVP_USERPROFILE_UPDATE_PRIMARY_EMAIL_SUCCESS: {\n      return applyUserProfilePrimaryEmailUpdateSuccess(state);\n    }\n    case MVP_USERPROFILE_UPDATE_PRIMARY_EMAIL_RESET: {\n      return applyUserProfilePrimaryEmailUpdateReset(state);\n    }\n    case MVP_FETCH_RETIRE_PROFILE:\n      return applyFetchRetireProfile(state);\n    case MVP_FETCH_RETIRE_PROFILE_SUCCESS:\n      return applyFetchRetireProfileSuccess(state, action);\n    case MVP_FETCH_RETIRE_PROFILE_FAIL:\n      return applyFetchRetireProfileFail(state, action);\n    case MVP_RETIRE_PROFILE_RESET:\n      return applyRetireProfileReset(state);\n    case MVP_RETIRE_PROFILE:\n      return applyRetireProfile(state);\n    case MVP_RETIRE_PROFILE_SUCCESS:\n      return applyRetireProfileSuccess(state);\n    case MVP_RETIRE_PROFILE_FAIL:\n      return applyRetireProfileFail(state, action);\n    default:\n      return state;\n  }\n}\n\nexport default mvpReducer;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nexport const RD_ADD_USER_PROFILE_COMMENT_RESET_VALUES = \"RD_ADD_USER_PROFILE_COMMENT_RESET_VALUES\";\nexport const RD_PROGRAM_PROFILE_UPDATE_RESET_STATUS = \"RD_PROGRAM_PROFILE_UPDATE_RESET_STATUS\";\n\nexport const RD_UPDATE_USER_PROFILE_ID = \"RD_UPDATE_USER_PROFILE_ID\";\n\nexport const RD_FETCH_PROGRAM_PROFILE = \"RD_FETCH_PROGRAM_PROFILE\";\nexport const RD_FETCH_PROGRAM_PROFILE_FAIL = \"RD_FETCH_PROGRAM_PROFILE_FAIL\";\nexport const RD_FETCH_PROGRAM_PROFILE_SUCCESS = \"RD_FETCH_PROGRAM_PROFILE_SUCCESS\";\n\nexport const RD_UPDATE_PROGRAM_PROFILE = \"RD_UPDATE_PROGRAM_PROFILE\";\nexport const RD_UPDATE_PROGRAM_PROFILE_SUCCESS = \"RD_UPDATE_PROGRAM_PROFILE_SUCCESS\";\nexport const RD_UPDATE_PROGRAM_PROFILE_FAIL = \"RD_UPDATE_PROGRAM_PROFILE_FAIL\";\n\nexport const RD_ADD_USER_PROFILE_COMMENT = \"RD_ADD_USER_PROFILE_COMMENT\";\nexport const RD_ADD_USER_PROFILE_COMMENT_SUCCESS = \"RD_ADD_USER_PROFILE_COMMENT_SUCCESS\";\nexport const RD_ADD_USER_PROFILE_COMMENT_FAIL = \"RD_ADD_USER_PROFILE_COMMENT_FAIL\";\n\nexport const RD_FETCH_USER_PROFILE_COMMENTS = \"RD_FETCH_USER_PROFILE_COMMENTS\";\nexport const RD_FETCH_USER_PROFILE_COMMENTS_SUCCESS = \"RD_FETCH_USER_PROFILE_COMMENTS_SUCCESS\";\nexport const RD_FETCH_USER_PROFILE_COMMENTS_FAIL = \"RD_FETCH_USER_PROFILE_COMMENTS_FAIL\";\n\nexport const RD_FETCH_USER_PROFILE = \"RD_FETCH_USER_PROFILE\";\nexport const RD_FETCH_USER_PROFILE_SUCCESS = \"RD_FETCH_USER_PROFILE_SUCCESS\";\nexport const RD_FETCH_USER_PROFILE_FAIL = \"RD_FETCH_USER_PROFILE_FAIL\";\n\nexport const RD_USER_PROFILES_SEARCH = \"RD_USER_PROFILES_SEARCH\";\nexport const RD_USER_PROFILES_SEARCH_SUCCESS = \"RD_USER_PROFILES_SEARCH_SUCCESS\";\nexport const RD_USER_PROFILES_SEARCH_FAIL = \"RD_USER_PROFILES_SEARCH_FAIL\";\n\nexport const RD_ADD_AZURE_BENEFIT_DETAIL = \"RD_ADD_AZURE_BENEFIT_DETAIL\";\nexport const RD_ADD_AZURE_BENEFIT_DETAIL_SUCCESS = \"RD_ADD_AZURE_BENEFIT_DETAIL_SUCCESS\";\nexport const RD_ADD_AZURE_BENEFIT_DETAIL_FAIL = \"RD_ADD_AZURE_BENEFIT_DETAIL_FAIL\";\nexport const RD_ADD_AZURE_BENEFIT_RESET = \"RD_ADD_AZURE_BENEFIT_RESET\";\n\nexport const RD_USER_PROFILES_FILTER_VALUE_ADD = \"RD_USER_PROFILES_FILTER_VALUE_ADD\";\nexport const RD_USER_PROFILES_FILTER_VALUE_REMOVE = \"RD_USER_PROFILES_FILTER_VALUE_REMOVE\";\nexport const RD_USER_PROFILES_FILTER_PROVINCE_VALUE_REMOVE =\n  \"RD_USER_PROFILES_FILTER_PROVINCE_VALUE_REMOVE\";\nexport const RD_USER_PROFILES_FILTER_VALUE_UPDATE = \"RD_USER_PROFILES_FILTER_VALUE_UPDATE\";\nexport const RD_USER_PROFILES_FILTER_VALUE_RESET = \"RD_USER_PROFILES_FILTER_VALUE_RESET\";\n\nexport const RD_DOWNLOAD_TO_CSV = \"RD_DOWNLOAD_TO_CSV\";\nexport const RD_DOWNLOAD_TO_CSV_SUCCESS = \"RD_DOWNLOAD_TO_CSV_SUCCESS\";\nexport const RD_DOWNLOAD_TO_CSV_FAIL = \"RD_DOWNLOAD_TO_CSV_FAIL\";\n\nexport const RD_UPDATE_LISTING_SORTING = \"RD_UPDATE_LISTING_SORTING\";\nexport const RD_UPDATE_LISTING_CURRENT_PAGE = \"RD_UPDATE_LISTING_CURRENT_PAGE\";\nexport const RD_UPDATE_LISTING_PAGE_SIZE = \"RD_UPDATE_LISTING_PAGE_SIZE\";\nexport const RD_RESET_FILE_DOWNLOAD_STATUS = \"RD_RESET_FILE_DOWNLOAD_STATUS\";\n\nexport const RD_USER_PROFILE_CLAIM_BENEFIT = \"RD_USER_PROFILE_CLAIM_BENEFIT\";\nexport const RD_USER_PROFILE_CLAIM_BENEFIT_FAIL = \"RD_USER_PROFILE_CLAIM_BENEFIT_FAIL\";\nexport const RD_USER_PROFILE_CLAIM_BENEFIT_SUCCESS = \"RD_USER_PROFILE_CLAIM_BENEFIT_SUCCESS\";\nexport const RD_USER_PROFILE_CLAIM_BENEFIT_RESET = \"RD_USER_PROFILE_CLAIM_BENEFIT_RESET\";\nexport const RD_GET_PROFILE_BENEFITS = \"RD_GET_PROFILE_BENEFITS\";\nexport const RD_GET_PROFILE_BENEFITS_SUCCESS = \"RD_GET_PROFILE_BENEFITS_SUCCESS\";\nexport const RD_GET_PROFILE_BENEFITS_FAIL = \"RD_GET_PROFILE_BENEFITS_FAIL\";\n\nexport const RD_RESET_M365_BENEFIT_DETAIL = \"RD_RESET_M365_BENEFIT_DETAIL\";\n\nexport const RD_GET_M365_BENEFIT_DETAIL = \"RD_GET_M365_BENEFIT_DETAIL\";\nexport const RD_GET_M365_BENEFIT_DETAIL_SUCCESS = \"RD_GET_M365_BENEFIT_DETAIL_SUCCESS\";\nexport const RD_GET_M365_BENEFIT_DETAIL_FAILURE = \"RD_GET_M365_BENEFIT_DETAIL_FAILURE\";\n\nexport const RD_UPDATE_M365_BENEFIT_DETAIL = \"RD_UPDATE_M365_BENEFIT_DETAIL\";\nexport const RD_UPDATE_M365_BENEFIT_DETAIL_SUCCESS = \"RD_UPDATE_M365_BENEFIT_DETAIL_SUCCESS\";\nexport const RD_UPDATE_M365_BENEFIT_DETAIL_FAILURE = \"RD_UPDATE_M365_BENEFIT_DETAIL_FAILURE\";\n\nexport const RD_RESET_MS365_BENEFIT_DETAIL = \"RD_RESET_MS365_BENEFIT_DETAIL\";\n\nexport const RD_GET_MS365_BENEFIT_DETAIL = \"RD_GET_MS365_BENEFIT_DETAIL\";\nexport const RD_GET_MS365_BENEFIT_DETAIL_SUCCESS = \"RD_GET_MS365_BENEFIT_DETAIL_SUCCESS\";\nexport const RD_GET_MS365_BENEFIT_DETAIL_FAILURE = \"RD_GET_MS365_BENEFIT_DETAIL_FAILURE\";\n\nexport const RD_UPDATE_MS365_BENEFIT_DETAIL = \"RD_UPDATE_MS365_BENEFIT_DETAIL\";\nexport const RD_UPDATE_MS365_BENEFIT_DETAIL_SUCCESS = \"RD_UPDATE_MS365_BENEFIT_DETAIL_SUCCESS\";\nexport const RD_UPDATE_MS365_BENEFIT_DETAIL_FAILURE = \"RD_UPDATE_MS365_BENEFIT_DETAIL_FAILURE\";\n\nexport const RD_GET_TEAMS_BENEFIT_DETAIL = \"RD_GET_TEAMS_BENEFIT_DETAIL\";\nexport const RD_GET_TEAMS_BENEFIT_DETAIL_SUCCESS = \"RD_GET_TEAMS_BENEFIT_DETAIL_SUCCESS\";\nexport const RD_GET_TEAMS_BENEFIT_DETAIL_FAILURE = \"RD_GET_TEAMS_BENEFIT_DETAIL_FAILURE\";\n\nexport const RD_EXTEND_AZURE_BENEFIT_CREDIT = \"RD_EXTEND_AZURE_BENEFIT_CREDIT\";\nexport const RD_EXTEND_AZURE_BENEFIT_CREDIT_SUCCESS = \"RD_EXTEND_AZURE_BENEFIT_CREDIT_SUCCESS\";\nexport const RD_EXTEND_AZURE_BENEFIT_CREDIT_FAILURE = \"RD_EXTEND_AZURE_BENEFIT_CREDIT_FAILURE\";\nexport const RD_EXTEND_AZURE_BENEFIT_CREDIT_RESET = \"RD_EXTEND_AZURE_BENEFIT_CREDIT_RESET\";\n\nexport const RD_USERPROFILE_UPDATE_IS_PRIVATE = \"RD_USERPROFILE_UPDATE_IS_PRIVATE\";\nexport const RD_USERPROFILE_UPDATE_IS_PRIVATE_FAIL = \"RD_USERPROFILE_UPDATE_IS_PRIVATE_FAIL\";\nexport const RD_USERPROFILE_UPDATE_IS_PRIVATE_SUCCESS = \"RD_USERPROFILE_UPDATE_IS_PRIVATE_SUCCESS\";\n\nexport const RD_USER_PROFILE_UPDATE_PRIMARY_EMAIL = \"RD_USER_PROFILE_UPDATE_PRIMARY_EMAIL\";\nexport const RD_USER_PROFILE_UPDATE_PRIMARY_EMAIL_SUCCESS =\n  \"RD_USER_PROFILE_UPDATE_PRIMARY_EMAIL_SUCCESS\";\nexport const RD_USER_PROFILE_UPDATE_PRIMARY_EMAIL_FAIL =\n  \"RD_USER_PROFILE_UPDATE_PRIMARY_EMAIL_FAIL\";\nexport const RD_USER_PROFILE_UPDATE_PRIMARY_EMAIL_RESET =\n  \"RD_USER_PROFILE_UPDATE_PRIMARY_EMAIL_RESET\";\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { OperationStatus } from \"Constants/OperationStatus\";\nimport { defaultListingPageSize, defaultRdFilterValues } from \"Constants/ProfileConstants\";\nimport { removeDateTimeOffset } from \"Utility/FormatHelper\";\n\nimport { IRDUserProfileState } from \"./IRDUserProfileState\";\nimport {\n  IRDAddUserProfileComment,\n  IRDAddUserProfileCommentFail,\n  IRDAddUserProfileCommentSuccess,\n  IRDClaimBenefit,\n  IRDClaimBenefitFail,\n  IRDClaimBenefitSuccess,\n  IRDDownloadToCSVFail,\n  IRDDownloadToCSVSuccess,\n  IRDExtendAzureBenefitCreditFailure,\n  IRDFetchM365BenefitDetailFailure,\n  IRDFetchM365BenefitDetailSuccess,\n  IRDFetchProgramProfileFail,\n  IRDFetchProgramProfileSuccess,\n  IRDFetchUserProfile,\n  IRDFetchUserProfileComments,\n  IRDFetchUserProfileCommentsFail,\n  IRDFetchUserProfileCommentsSuccess,\n  IRDFetchUserProfileFail,\n  IRDFetchUserProfileSuccess,\n  IRDGetProfileBenefitsFail,\n  IRDGetProfileBenefitsSuccess,\n  IRDProfilesFail,\n  IRDProfilesSearch,\n  IRDProfilesSuccess,\n  IRDUpdateCurrentPage,\n  IRDUpdateM365BenefitDetailFailure,\n  IRDUpdateM365BenefitDetailSuccess,\n  IRDUpdatePageSize,\n  IRDUpdateProgramProfile,\n  IRDUpdateProgramProfileFail,\n  IRDUpdateProgramProfileSuccess,\n  IRDUpdateSorting,\n  IRDUpdateUserProfileId,\n  IRDUserProfilesFilterValueAdd,\n  IRDUserProfilesFilterValueRemove,\n  IRDUserProfilesFilterValueUpdate,\n  IRDUserProfileIsPrivateUpdateFail,\n  IRDUserProfilePrimaryEmailUpdateFail,\n  RDUserProfileActionTypes,\n  IRDAddAzureBenefitDetailFail,\n  IRDFetchMS365BenefitDetailFailure,\n  IRDFetchMS365BenefitDetailSuccess,\n  IRDUpdateMS365BenefitDetailFailure,\n  IRDUpdateMS365BenefitDetailSuccess,\n} from \"./RDUserProfileAction\";\nimport {\n  RD_ADD_AZURE_BENEFIT_DETAIL,\n  RD_ADD_AZURE_BENEFIT_DETAIL_FAIL,\n  RD_ADD_AZURE_BENEFIT_DETAIL_SUCCESS,\n  RD_ADD_AZURE_BENEFIT_RESET,\n  RD_ADD_USER_PROFILE_COMMENT,\n  RD_ADD_USER_PROFILE_COMMENT_FAIL,\n  RD_ADD_USER_PROFILE_COMMENT_RESET_VALUES,\n  RD_ADD_USER_PROFILE_COMMENT_SUCCESS,\n  RD_DOWNLOAD_TO_CSV,\n  RD_DOWNLOAD_TO_CSV_FAIL,\n  RD_DOWNLOAD_TO_CSV_SUCCESS,\n  RD_EXTEND_AZURE_BENEFIT_CREDIT,\n  RD_EXTEND_AZURE_BENEFIT_CREDIT_FAILURE,\n  RD_EXTEND_AZURE_BENEFIT_CREDIT_RESET,\n  RD_EXTEND_AZURE_BENEFIT_CREDIT_SUCCESS,\n  RD_FETCH_PROGRAM_PROFILE,\n  RD_FETCH_PROGRAM_PROFILE_FAIL,\n  RD_FETCH_PROGRAM_PROFILE_SUCCESS,\n  RD_FETCH_USER_PROFILE,\n  RD_FETCH_USER_PROFILE_COMMENTS,\n  RD_FETCH_USER_PROFILE_COMMENTS_FAIL,\n  RD_FETCH_USER_PROFILE_COMMENTS_SUCCESS,\n  RD_FETCH_USER_PROFILE_FAIL,\n  RD_FETCH_USER_PROFILE_SUCCESS,\n  RD_GET_M365_BENEFIT_DETAIL,\n  RD_GET_M365_BENEFIT_DETAIL_FAILURE,\n  RD_GET_M365_BENEFIT_DETAIL_SUCCESS,\n  RD_GET_PROFILE_BENEFITS,\n  RD_GET_PROFILE_BENEFITS_FAIL,\n  RD_GET_PROFILE_BENEFITS_SUCCESS,\n  RD_PROGRAM_PROFILE_UPDATE_RESET_STATUS,\n  RD_RESET_FILE_DOWNLOAD_STATUS,\n  RD_RESET_M365_BENEFIT_DETAIL,\n  RD_UPDATE_LISTING_CURRENT_PAGE,\n  RD_UPDATE_LISTING_PAGE_SIZE,\n  RD_UPDATE_LISTING_SORTING,\n  RD_UPDATE_M365_BENEFIT_DETAIL,\n  RD_UPDATE_M365_BENEFIT_DETAIL_FAILURE,\n  RD_UPDATE_M365_BENEFIT_DETAIL_SUCCESS,\n  RD_UPDATE_PROGRAM_PROFILE,\n  RD_UPDATE_PROGRAM_PROFILE_FAIL,\n  RD_UPDATE_PROGRAM_PROFILE_SUCCESS,\n  RD_UPDATE_USER_PROFILE_ID,\n  RD_USER_PROFILE_CLAIM_BENEFIT,\n  RD_USER_PROFILE_CLAIM_BENEFIT_FAIL,\n  RD_USER_PROFILE_CLAIM_BENEFIT_RESET,\n  RD_USER_PROFILE_CLAIM_BENEFIT_SUCCESS,\n  RD_USER_PROFILE_UPDATE_PRIMARY_EMAIL,\n  RD_USER_PROFILE_UPDATE_PRIMARY_EMAIL_FAIL,\n  RD_USER_PROFILE_UPDATE_PRIMARY_EMAIL_RESET,\n  RD_USER_PROFILE_UPDATE_PRIMARY_EMAIL_SUCCESS,\n  RD_USER_PROFILES_FILTER_PROVINCE_VALUE_REMOVE,\n  RD_USER_PROFILES_FILTER_VALUE_ADD,\n  RD_USER_PROFILES_FILTER_VALUE_REMOVE,\n  RD_USER_PROFILES_FILTER_VALUE_RESET,\n  RD_USER_PROFILES_FILTER_VALUE_UPDATE,\n  RD_USER_PROFILES_SEARCH,\n  RD_USER_PROFILES_SEARCH_FAIL,\n  RD_USER_PROFILES_SEARCH_SUCCESS,\n  RD_USERPROFILE_UPDATE_IS_PRIVATE,\n  RD_USERPROFILE_UPDATE_IS_PRIVATE_FAIL,\n  RD_USERPROFILE_UPDATE_IS_PRIVATE_SUCCESS,\n  RD_RESET_MS365_BENEFIT_DETAIL,\n  RD_GET_MS365_BENEFIT_DETAIL,\n  RD_GET_MS365_BENEFIT_DETAIL_FAILURE,\n  RD_GET_MS365_BENEFIT_DETAIL_SUCCESS,\n  RD_UPDATE_MS365_BENEFIT_DETAIL,\n  RD_UPDATE_MS365_BENEFIT_DETAIL_FAILURE,\n  RD_UPDATE_MS365_BENEFIT_DETAIL_SUCCESS,\n} from \"./RDUserProfileActionTypes\";\n\nconst INITIAL_STATE: IRDUserProfileState = {\n  userProfiles: [],\n  userProfileFilterValues: defaultRdFilterValues,\n  error: \"\",\n  isUserProfilesLoading: true,\n  isSelectedUserProfileUpdating: false,\n  updateUserProfileError: \"\",\n  isCurrentUserProfileLoading: true,\n  formSubmittingComplete: false,\n  fetchUserProfileCommentsStatus: OperationStatus.Idle,\n  successMessage: \"\",\n  userProfileComments: [],\n  currentPage: 1,\n  pageSize: defaultListingPageSize,\n  searchText: \"\",\n  programProfileUpdateError: \"\",\n  filteredCount: 0,\n  fileDownloadStatus: OperationStatus.Idle,\n  updateProgramProfileOperationStatus: OperationStatus.Idle,\n  fetchUserProfileOperationStatus: OperationStatus.Idle,\n  addUserProfileCommentOperationStatus: OperationStatus.Idle,\n  fetchProgramProfileErrorMessage: \"\",\n  selectedUserProfileId: 0,\n  isClaimingBenefit: false,\n  isClaimingBenefitStatus: OperationStatus.Idle,\n  claimBenefitError: \"\",\n  profileBenefits: {\n    azure: [],\n    githubPro: [],\n    mcp: [],\n    linkedIn: [],\n    visualStudio: [],\n    m365: [],\n    benefitTenant: {},\n    teams: [],\n  },\n  profileBenefitsErrorMessage: \"\",\n  profileBenefitsStatus: OperationStatus.Idle,\n  m365BenefitDetailState: {\n    m365BenefitDetail: {\n      tenantId: \"\",\n      tenantName: \"\",\n      userProfileId: 0,\n    },\n\n    m365FetchErrorMessage: \"\",\n    m365UpdateErrorMessage: \"\",\n    m365OperationStatus: { read: OperationStatus.Idle, update: OperationStatus.Idle },\n  },\n  ms365BenefitDetailState: {\n    ms365FetchErrorMessage: \"\",\n    ms365UpdateErrorMessage: \"\",\n    ms365OperationStatus: { read: OperationStatus.Idle, update: OperationStatus.Idle },\n    ms365BenefitDetail: {\n      subscriptionId: \"\",\n      tenantId: \"\",\n      tenantName: \"\",\n      userProfileId: 0,\n    },\n  },\n  teamsBenefitDetailState: {\n    teamsBenefitDetail: {\n      userProfileId: 0,\n      expirationDate: \"\",\n      claimDate: \"\",\n      code: \"\",\n    },\n\n    teamsFetchErrorMessage: \"\",\n    teamsUpdateErrorMessage: \"\",\n    teamsOperationStatus: { read: OperationStatus.Idle, update: OperationStatus.Idle },\n  },\n  azureBenefitExtendCreditState: {\n    extendAzureCreditOperationStatus: { update: OperationStatus.Idle },\n    extendAzureCreditError: \"\",\n  },\n  azureBenefitAddState: {\n    addAzureBenefitOperationStatus: { update: OperationStatus.Idle },\n    addAzureBenefitError: \"\",\n  },\n  programProfileOperationStatus: {\n    read: OperationStatus.Idle,\n  },\n  selectedUserProfile: {\n    address1: \"\",\n    address2: \"\",\n    addressCity: \"\",\n    addressCountryOrRegionName: \"\",\n    addressPostCode: \"\",\n    addressStateOrProvince: \"\",\n    applicationFormDateLastModified: \"\",\n    applicationFormDateSubmitted: \"\",\n    applicationStatus: \"\",\n    awardNameLocalized: false,\n    biography: \"\",\n    companyTypeName: \"\",\n    currentEmployerName: \"\",\n    dateOfBirth: undefined,\n    firstName: \"\",\n    genderName: \"\",\n    genderPronounPreferenceName: \"\",\n    headline: \"\",\n    id: 0,\n    industryFocusNames: [],\n    jobTitle: \"\",\n    languages: [],\n    lastName: \"\",\n    localizedFirstName: \"\",\n    localizedLastName: \"\",\n    microsoftReferralId: \"\",\n    primaryEmail: \"\",\n    primaryPhone: \"\",\n    primaryPhoneCountryOrRegionId: 0,\n    primaryPhoneCountryOrRegionName: \"\",\n    programProfile: undefined,\n    programProfileStatus: \"\",\n    screenNameLocalized: false,\n    secondaryEmail: \"\",\n    shippingAddress1: \"\",\n    shippingAddress2: \"\",\n    shippingCity: \"\",\n    shippingCountryOrRegionName: \"\",\n    shippingName: \"\",\n    shippingPhoneCountryOrRegionId: 0,\n    shippingPhoneCountryOrRegionName: \"\",\n    shippingPhoneNumber: \"\",\n    shippingPostCode: \"\",\n    shippingSameAsAddress: false,\n    shippingStateOrProvince: \"\",\n    shirtFitType: \"\",\n    shirtSize: \"\",\n    technicalExpertiseNames: [],\n    tenants: [],\n    titleName: \"\",\n    userProfileSocialNetwork: [],\n    userProfileProgramLanguage: [],\n    userProfileFunctionalRole: [],\n    cpm: \"\",\n  },\n  updateIsPrivateProfileError: \"\",\n  updateIsPrivateProfileStatus: OperationStatus.Idle,\n  updatePrimaryEmailError: \"\",\n  updatePrimaryEmailStatus: OperationStatus.Idle,\n};\n\nconst applyUpdateCurrentPage = (\n  state: IRDUserProfileState,\n  action: IRDUpdateCurrentPage\n): IRDUserProfileState => ({\n  ...state,\n  currentPage: action.currentPage,\n});\n\nconst applyUpdatePageSize = (\n  state: IRDUserProfileState,\n  action: IRDUpdatePageSize\n): IRDUserProfileState => ({\n  ...state,\n  pageSize: action.pageSize,\n});\n\nconst applyUpdateSorting = (\n  state: IRDUserProfileState,\n  action: IRDUpdateSorting\n): IRDUserProfileState => ({\n  ...state,\n  currentPage: state.currentPage > 1 ? 1 : state.currentPage,\n  sortColumn: action.sortColumn,\n  sortDescending: action.sortDescending,\n});\n\nconst applyFileDownloadStatus = (state: IRDUserProfileState): IRDUserProfileState => ({\n  ...state,\n  fileDownloadStatus: OperationStatus.Idle,\n});\n\nconst applySearchUserProfiles = (\n  state: IRDUserProfileState,\n  action: IRDProfilesSearch\n): IRDUserProfileState => ({\n  ...state,\n  isUserProfilesLoading: true,\n  searchText: action.searchText,\n  currentPage: action.searchPage,\n  pageSize: action.pageSize,\n  sortColumn: action.sortColumn,\n  sortDescending: action.sortDescending,\n});\n\nconst applySearchUserProfilesSuccess = (\n  state: IRDUserProfileState,\n  action: IRDProfilesSuccess\n): IRDUserProfileState => ({\n  ...state,\n  userProfiles: action.userProfiles,\n  currentPage: action.searchPage,\n  pageSize: action.pageSize,\n  isUserProfilesLoading: false,\n  filteredCount: action.filteredCount,\n});\n\nconst applySearchUserProfilesFail = (\n  state: IRDUserProfileState,\n  action: IRDProfilesFail\n): IRDUserProfileState => ({\n  ...state,\n  error: action.error,\n  isUserProfilesLoading: false,\n});\n\nconst applyDownloadToCSV = (state: IRDUserProfileState): IRDUserProfileState => ({\n  ...state,\n  fileDownloadErrorMessage: undefined,\n  fileDownloadStatus: OperationStatus.Pending,\n});\n\nconst applyDownloadToCSVSuccess = (\n  state: IRDUserProfileState,\n  action: IRDDownloadToCSVSuccess\n): IRDUserProfileState => ({\n  ...state,\n  fileDownloadErrorMessage: undefined,\n  fileDownloadStatus: OperationStatus.Succeeded,\n  fileDownloadData: action.csvFile,\n});\n\nconst applyDownloadToCSVFailed = (\n  state: IRDUserProfileState,\n  action: IRDDownloadToCSVFail\n): IRDUserProfileState => ({\n  ...state,\n  fileDownloadStatus: OperationStatus.Failed,\n  fileDownloadErrorMessage: action.errorMessage,\n});\n\nconst addUserProfilesFilterValue = (\n  state: IRDUserProfileState,\n  action: IRDUserProfilesFilterValueAdd\n): IRDUserProfileState => ({\n  ...state,\n  userProfileFilterValues: state.userProfileFilterValues.concat([action.filterValue]),\n});\n\nconst removeUserProfilesFilterValue = (\n  state: IRDUserProfileState,\n  action: IRDUserProfilesFilterValueRemove\n): IRDUserProfileState => ({\n  ...state,\n  userProfileFilterValues: state.userProfileFilterValues.filter(\n    (item) =>\n      !(item.fieldName === action.filterValue.fieldName && item.value === action.filterValue.value)\n  ),\n});\n\nconst removeUserProfilesFilterProvinceValue = (\n  state: IRDUserProfileState\n): IRDUserProfileState => ({\n  ...state,\n  userProfileFilterValues: state.userProfileFilterValues.filter(\n    (item) => !(item.fieldName === \"stateOrProvince\")\n  ),\n});\n\nconst updateUserProfilesFilterValue = (\n  state: IRDUserProfileState,\n  action: IRDUserProfilesFilterValueUpdate\n): IRDUserProfileState => ({\n  ...state,\n  userProfileFilterValues: state.userProfileFilterValues\n    .filter((item) => !(item.fieldName === action.filterValue.fieldName))\n    .concat([action.filterValue]),\n});\n\nconst applyFetchUserProfileComments = (\n  state: IRDUserProfileState,\n  action: IRDFetchUserProfileComments\n): IRDUserProfileState => ({\n  ...state,\n  fetchUserProfileCommentsErrorMessage: undefined,\n  userProfileComments: [],\n  fetchUserProfileCommentsStatus: OperationStatus.Pending,\n});\n\nconst applyFetchUserProfileCommentsSuccess = (\n  state: IRDUserProfileState,\n  action: IRDFetchUserProfileCommentsSuccess\n): IRDUserProfileState => ({\n  ...state,\n  userProfileComments: action.userProfileComments,\n  fetchUserProfileCommentsErrorMessage: undefined,\n  fetchUserProfileCommentsStatus: OperationStatus.Succeeded,\n});\n\nconst applyFetchUserProfileCommentsFail = (\n  state: IRDUserProfileState,\n  action: IRDFetchUserProfileCommentsFail\n): IRDUserProfileState => ({\n  ...state,\n  fetchUserProfileCommentsErrorMessage: action.errorMessage,\n  fetchUserProfileCommentsStatus: OperationStatus.Failed,\n});\n\nconst applyFetchUserProfile = (\n  state: IRDUserProfileState,\n  action: IRDFetchUserProfile\n): IRDUserProfileState => ({\n  ...state,\n  selectedUserProfileId: action.rdUserProfileId,\n  selectedUserProfile: {\n    ...INITIAL_STATE.selectedUserProfile,\n  },\n  fetchUserProfileErrorMessage: undefined,\n  fetchUserProfileOperationStatus: OperationStatus.Pending,\n});\n\nconst applyFetchUserProfileSuccess = (\n  state: IRDUserProfileState,\n  action: IRDFetchUserProfileSuccess\n): IRDUserProfileState => ({\n  ...state,\n  selectedUserProfile: {\n    ...action.rdUserProfile,\n    dateOfBirth: removeDateTimeOffset(action.rdUserProfile.dateOfBirth),\n  },\n  fetchUserProfileErrorMessage: undefined,\n  fetchUserProfileOperationStatus: OperationStatus.Succeeded,\n});\n\nconst applyFetchUserProfileFail = (\n  state: IRDUserProfileState,\n  action: IRDFetchUserProfileFail\n): IRDUserProfileState => ({\n  ...state,\n  fetchUserProfileErrorMessage: action.errorMessage,\n  fetchUserProfileOperationStatus: OperationStatus.Failed,\n});\n\nconst applyAddUserProfileComment = (\n  state: IRDUserProfileState,\n  action: IRDAddUserProfileComment\n): IRDUserProfileState => ({\n  ...state,\n  addUserProfileCommentErrorMessage: undefined,\n  addUserProfileCommentOperationStatus: OperationStatus.Pending,\n});\n\nconst applyAddUserProfileCommentSuccess = (\n  state: IRDUserProfileState,\n  action: IRDAddUserProfileCommentSuccess\n): IRDUserProfileState => ({\n  ...state,\n  addUserProfileCommentErrorMessage: undefined,\n  addUserProfileCommentOperationStatus: OperationStatus.Succeeded,\n});\n\nconst applyAddUserProfileCommentFail = (\n  state: IRDUserProfileState,\n  action: IRDAddUserProfileCommentFail\n): IRDUserProfileState => ({\n  ...state,\n  addUserProfileCommentErrorMessage: action.errorMessage,\n  addUserProfileCommentOperationStatus: OperationStatus.Failed,\n});\n\nconst applyAddUserProfileCommentResetValues = (\n  state: IRDUserProfileState\n): IRDUserProfileState => ({\n  ...state,\n  addUserProfileCommentErrorMessage: undefined,\n  addUserProfileCommentOperationStatus: OperationStatus.Idle,\n  fetchUserProfileCommentsErrorMessage: undefined,\n  fetchUserProfileCommentsStatus: OperationStatus.Idle,\n});\n\nconst applyUpdateUserProfileId = (\n  state: IRDUserProfileState,\n  action: IRDUpdateUserProfileId\n): IRDUserProfileState => ({\n  ...state,\n  selectedUserProfileId: action.selectedUserProfileId,\n});\n\nconst applyUpdateProgramProfile = (\n  state: IRDUserProfileState,\n  action: IRDUpdateProgramProfile\n): IRDUserProfileState => ({\n  ...state,\n  updateProgramProfileOperationStatus: OperationStatus.Pending,\n  updateProgramProfileErrorMessage: undefined,\n});\n\nconst applyUpdateProgramProfileSuccess = (\n  state: IRDUserProfileState,\n  action: IRDUpdateProgramProfileSuccess\n): IRDUserProfileState => {\n  if (!!state.selectedUserProfile) {\n    return {\n      ...state,\n      selectedUserProfile: {\n        ...state.selectedUserProfile,\n        programProfileStatus: action.savedProgramProfileStatusName,\n      },\n      updateProgramProfileErrorMessage: undefined,\n      updateProgramProfileOperationStatus: OperationStatus.Succeeded,\n    };\n  }\n  return state;\n};\n\nconst applyUpdateProgramProfileFail = (\n  state: IRDUserProfileState,\n  action: IRDUpdateProgramProfileFail\n): IRDUserProfileState => ({\n  ...state,\n  updateProgramProfileErrorMessage: action.errorMessage,\n  updateProgramProfileOperationStatus: OperationStatus.Failed,\n});\n\nconst applyUpdateProgramProfileResetStatus = (state: IRDUserProfileState): IRDUserProfileState => ({\n  ...state,\n  updateProgramProfileErrorMessage: undefined,\n  updateProgramProfileOperationStatus: OperationStatus.Idle,\n});\n\nconst applyClaimingRdBenefit = (\n  state: IRDUserProfileState,\n  action: IRDClaimBenefit\n): IRDUserProfileState => ({\n  ...state,\n  isClaimingBenefit: true,\n  isClaimingBenefitStatus: OperationStatus.Pending,\n  claimBenefitError: \"\",\n});\n\nconst applyClaimingRdBenefitSuccess = (\n  state: IRDUserProfileState,\n  action: IRDClaimBenefitSuccess\n): IRDUserProfileState => ({\n  ...state,\n  isClaimingBenefit: false,\n  isClaimingBenefitStatus: OperationStatus.Succeeded,\n});\n\nconst applyClaimingRdBenefitFail = (\n  state: IRDUserProfileState,\n  action: IRDClaimBenefitFail\n): IRDUserProfileState => ({\n  ...state,\n  isClaimingBenefit: false,\n  isClaimingBenefitStatus: OperationStatus.Failed,\n  claimBenefitError: action.error,\n});\n\nconst applyClaimingRdBenefitReset = (state: IRDUserProfileState): IRDUserProfileState => ({\n  ...state,\n  isClaimingBenefit: false,\n  isClaimingBenefitStatus: OperationStatus.Idle,\n  claimBenefitError: \"\",\n});\n\nconst applyGetProfileBenefits = (state: IRDUserProfileState): IRDUserProfileState => ({\n  ...state,\n  profileBenefitsStatus: OperationStatus.Pending,\n  profileBenefitsErrorMessage: \"\",\n});\n\nconst applyGetProfileBenefitsSuccess = (\n  state: IRDUserProfileState,\n  action: IRDGetProfileBenefitsSuccess\n): IRDUserProfileState => ({\n  ...state,\n  profileBenefits: action.userProfileBenefits,\n  profileBenefitsStatus: OperationStatus.Succeeded,\n});\n\nconst applyProfileBenefitsFail = (\n  state: IRDUserProfileState,\n  action: IRDGetProfileBenefitsFail\n): IRDUserProfileState => ({\n  ...state,\n  profileBenefitsErrorMessage: action.profileBenefitsErrorMessage,\n  profileBenefitsStatus: OperationStatus.Failed,\n});\n\nconst applyExtendAzureBenefitCredit = (state: IRDUserProfileState): IRDUserProfileState => ({\n  ...state,\n  azureBenefitExtendCreditState: {\n    ...state.azureBenefitExtendCreditState,\n    extendAzureCreditOperationStatus: { update: OperationStatus.Pending },\n    extendAzureCreditError: \"\",\n  },\n});\n\nconst applyExtendAzureBenefitCreditSuccess = (state: IRDUserProfileState): IRDUserProfileState => ({\n  ...state,\n  azureBenefitExtendCreditState: {\n    ...state.azureBenefitExtendCreditState,\n    extendAzureCreditOperationStatus: { update: OperationStatus.Succeeded },\n  },\n});\n\nconst applyExtendAzureBenefitCreditFail = (\n  state: IRDUserProfileState,\n  action: IRDExtendAzureBenefitCreditFailure\n): IRDUserProfileState => ({\n  ...state,\n  azureBenefitExtendCreditState: {\n    ...state.azureBenefitExtendCreditState,\n    extendAzureCreditOperationStatus: { update: OperationStatus.Failed },\n    extendAzureCreditError: action.error,\n  },\n});\n\nconst applyExtendAzureBenefitCreditReset = (state: IRDUserProfileState): IRDUserProfileState => ({\n  ...state,\n  azureBenefitExtendCreditState: {\n    ...state.azureBenefitExtendCreditState,\n    extendAzureCreditOperationStatus: { update: OperationStatus.Idle },\n    extendAzureCreditError: \"\",\n  },\n});\n\nconst applyAddAzureBenefit = (state: IRDUserProfileState): IRDUserProfileState => ({\n  ...state,\n  azureBenefitAddState: {\n    ...state.azureBenefitAddState,\n    addAzureBenefitOperationStatus: { update: OperationStatus.Pending },\n    addAzureBenefitError: \"\",\n  },\n});\n\nconst applyAddAzureBenefitSuccess = (state: IRDUserProfileState): IRDUserProfileState => ({\n  ...state,\n  azureBenefitAddState: {\n    ...state.azureBenefitAddState,\n    addAzureBenefitOperationStatus: { update: OperationStatus.Succeeded },\n  },\n});\n\nconst applyAddAzureBenefitFail = (\n  state: IRDUserProfileState,\n  action: IRDAddAzureBenefitDetailFail\n): IRDUserProfileState => ({\n  ...state,\n  azureBenefitAddState: {\n    ...state.azureBenefitAddState,\n    addAzureBenefitOperationStatus: { update: OperationStatus.Failed },\n    addAzureBenefitError: action.errorMessage,\n  },\n});\n\nconst applyAddAzureBenefitReset = (state: IRDUserProfileState): IRDUserProfileState => ({\n  ...state,\n  azureBenefitAddState: {\n    ...state.azureBenefitAddState,\n    addAzureBenefitOperationStatus: { update: OperationStatus.Idle },\n    addAzureBenefitError: \"\",\n  },\n});\n\nconst applyM365BenefitDetailReset = (state: IRDUserProfileState): IRDUserProfileState => ({\n  ...state,\n  m365BenefitDetailState: {\n    ...state.m365BenefitDetailState,\n    m365OperationStatus: {\n      read: OperationStatus.Idle,\n      update: OperationStatus.Idle,\n    },\n  },\n});\n\nconst applyGetM365BenefitDetailsSuccess = (\n  state: IRDUserProfileState,\n  action: IRDFetchM365BenefitDetailSuccess\n): IRDUserProfileState => ({\n  ...state,\n  m365BenefitDetailState: {\n    ...state.m365BenefitDetailState,\n    m365BenefitDetail: action.m365BenefitDetail,\n    m365OperationStatus: {\n      ...state.m365BenefitDetailState.m365OperationStatus,\n      read: OperationStatus.Succeeded,\n    },\n  },\n});\n\nconst applyGetM365BenefitDetailsFailure = (\n  state: IRDUserProfileState,\n  action: IRDFetchM365BenefitDetailFailure\n): IRDUserProfileState => ({\n  ...state,\n  m365BenefitDetailState: {\n    ...state.m365BenefitDetailState,\n    m365FetchErrorMessage: action.m365FetchErrorMessage,\n    m365OperationStatus: {\n      ...state.m365BenefitDetailState.m365OperationStatus,\n      read: OperationStatus.Failed,\n    },\n  },\n});\n\nconst applyGetM365BenefitDetails = (state: IRDUserProfileState): IRDUserProfileState => ({\n  ...state,\n  m365BenefitDetailState: {\n    ...state.m365BenefitDetailState,\n    m365FetchErrorMessage: \"\",\n    m365OperationStatus: {\n      ...state.m365BenefitDetailState.m365OperationStatus,\n      read: OperationStatus.Pending,\n    },\n  },\n});\n\nconst applyUpdateM365BenefitDetails = (state: IRDUserProfileState): IRDUserProfileState => ({\n  ...state,\n  m365BenefitDetailState: {\n    ...state.m365BenefitDetailState,\n    m365UpdateErrorMessage: \"\",\n    m365OperationStatus: {\n      ...state.m365BenefitDetailState.m365OperationStatus,\n      update: OperationStatus.Pending,\n    },\n  },\n});\n\nconst applyUpdateM365BenefitDetailsSuccess = (\n  state: IRDUserProfileState,\n  action: IRDUpdateM365BenefitDetailSuccess\n): IRDUserProfileState => ({\n  ...state,\n  m365BenefitDetailState: {\n    ...state.m365BenefitDetailState,\n    m365BenefitDetail: action.m365BenefitDetail,\n    m365OperationStatus: {\n      ...state.m365BenefitDetailState.m365OperationStatus,\n      update: OperationStatus.Succeeded,\n    },\n  },\n});\n\nconst applyUpdateM365BenefitDetailsFailure = (\n  state: IRDUserProfileState,\n  action: IRDUpdateM365BenefitDetailFailure\n): IRDUserProfileState => ({\n  ...state,\n  m365BenefitDetailState: {\n    ...state.m365BenefitDetailState,\n    m365UpdateErrorMessage: action.m365UpdateErrorMessage,\n    m365OperationStatus: {\n      ...state.m365BenefitDetailState.m365OperationStatus,\n      update: OperationStatus.Failed,\n    },\n  },\n});\n\nconst applyMS365BenefitDetailReset = (state: IRDUserProfileState): IRDUserProfileState => ({\n  ...state,\n  ms365BenefitDetailState: {\n    ...state.ms365BenefitDetailState,\n    ms365OperationStatus: { read: OperationStatus.Idle, update: OperationStatus.Idle },\n  },\n});\n\nconst applyGetMS365BenefitDetailsSuccess = (\n  state: IRDUserProfileState,\n  action: IRDFetchMS365BenefitDetailSuccess\n): IRDUserProfileState => ({\n  ...state,\n  ms365BenefitDetailState: {\n    ...state.ms365BenefitDetailState,\n    ms365BenefitDetail: action.ms365BenefitDetail,\n    ms365OperationStatus: {\n      ...state.ms365BenefitDetailState.ms365OperationStatus,\n      read: OperationStatus.Succeeded,\n    },\n  },\n});\n\nconst applyGetMS365BenefitDetailsFailure = (\n  state: IRDUserProfileState,\n  action: IRDFetchMS365BenefitDetailFailure\n): IRDUserProfileState => ({\n  ...state,\n  ms365BenefitDetailState: {\n    ...state.ms365BenefitDetailState,\n    ms365FetchErrorMessage: action.ms365FetchErrorMessage,\n    ms365OperationStatus: {\n      ...state.ms365BenefitDetailState.ms365OperationStatus,\n      read: OperationStatus.Failed,\n    },\n  },\n});\n\nconst applyGetMS365BenefitDetails = (state: IRDUserProfileState): IRDUserProfileState => ({\n  ...state,\n  ms365BenefitDetailState: {\n    ...state.ms365BenefitDetailState,\n    ms365FetchErrorMessage: \"\",\n    ms365OperationStatus: {\n      ...state.ms365BenefitDetailState.ms365OperationStatus,\n      read: OperationStatus.Pending,\n    },\n  },\n});\n\nconst applyUpdateMS365BenefitDetails = (state: IRDUserProfileState): IRDUserProfileState => ({\n  ...state,\n  ms365BenefitDetailState: {\n    ...state.ms365BenefitDetailState,\n    ms365UpdateErrorMessage: \"\",\n    ms365OperationStatus: {\n      ...state.ms365BenefitDetailState.ms365OperationStatus,\n      update: OperationStatus.Pending,\n    },\n  },\n});\n\nconst applyUpdateMS365BenefitDetailsSuccess = (\n  state: IRDUserProfileState,\n  action: IRDUpdateMS365BenefitDetailSuccess\n): IRDUserProfileState => ({\n  ...state,\n  ms365BenefitDetailState: {\n    ...state.ms365BenefitDetailState,\n    ms365BenefitDetail: action.ms365BenefitDetail,\n    ms365OperationStatus: {\n      ...state.ms365BenefitDetailState.ms365OperationStatus,\n      update: OperationStatus.Succeeded,\n    },\n  },\n});\n\nconst applyUpdateMS365BenefitDetailsFailure = (\n  state: IRDUserProfileState,\n  action: IRDUpdateMS365BenefitDetailFailure\n): IRDUserProfileState => ({\n  ...state,\n  ms365BenefitDetailState: {\n    ...state.ms365BenefitDetailState,\n    ms365FetchErrorMessage: action.ms365UpdateErrorMessage,\n    ms365OperationStatus: {\n      ...state.ms365BenefitDetailState.ms365OperationStatus,\n      update: OperationStatus.Failed,\n    },\n  },\n});\n\nconst applyFetchProgramProfile = (state: IRDUserProfileState): IRDUserProfileState => ({\n  ...state,\n  selectedUserProfile: {\n    ...state.selectedUserProfile,\n    programProfile: undefined,\n  },\n  programProfileOperationStatus: { read: OperationStatus.Pending },\n  updateProgramProfileOperationStatus: OperationStatus.Idle,\n  fetchProgramProfileErrorMessage: \"\",\n});\n\nconst applyFetchProgramProfileSuccess = (\n  state: IRDUserProfileState,\n  action: IRDFetchProgramProfileSuccess\n): IRDUserProfileState => ({\n  ...state,\n  selectedUserProfile: {\n    ...state.selectedUserProfile,\n    programProfile: action.programProfile,\n  },\n  programProfileOperationStatus: { read: OperationStatus.Succeeded },\n});\n\nconst applyFetchProgramProfileFail = (\n  state: IRDUserProfileState,\n  action: IRDFetchProgramProfileFail\n): IRDUserProfileState => ({\n  ...state,\n  selectedUserProfile: {\n    ...state.selectedUserProfile,\n    programProfile: undefined,\n  },\n  programProfileOperationStatus: { read: OperationStatus.Failed },\n  fetchProgramProfileErrorMessage: action.errorMessage,\n});\n\nconst applyUserProfileIsPrivateUpdate = (state: IRDUserProfileState): IRDUserProfileState => ({\n  ...state,\n  updateIsPrivateProfileStatus: OperationStatus.Pending,\n  updateIsPrivateProfileError: \"\",\n});\n\nconst applyUserProfileIsPrivateUpdateSuccess = (\n  state: IRDUserProfileState\n): IRDUserProfileState => ({\n  ...state,\n  updateIsPrivateProfileStatus: OperationStatus.Succeeded,\n});\n\nconst applyUserProfileIsPrivateUpdateFail = (\n  state: IRDUserProfileState,\n  action: IRDUserProfileIsPrivateUpdateFail\n): IRDUserProfileState => ({\n  ...state,\n  updateIsPrivateProfileStatus: OperationStatus.Failed,\n  updateIsPrivateProfileError: action.error,\n});\n\nconst applyUserProfileFilterValueReset = (state: IRDUserProfileState): IRDUserProfileState => ({\n  ...state,\n  userProfiles: [],\n  userProfileFilterValues: defaultRdFilterValues,\n  currentPage: 1,\n  pageSize: defaultListingPageSize,\n  searchText: \"\",\n});\n\nconst applyUserProfilePrimaryEmailUpdate = (state: IRDUserProfileState): IRDUserProfileState => ({\n  ...state,\n  updatePrimaryEmailStatus: OperationStatus.Pending,\n  updatePrimaryEmailError: \"\",\n});\n\nconst applyUserProfilePrimaryEmailUpdateSuccess = (\n  state: IRDUserProfileState\n): IRDUserProfileState => ({\n  ...state,\n  updatePrimaryEmailStatus: OperationStatus.Succeeded,\n});\n\nconst applyUserProfilePrimaryEmailUpdateFail = (\n  state: IRDUserProfileState,\n  action: IRDUserProfilePrimaryEmailUpdateFail\n): IRDUserProfileState => ({\n  ...state,\n  updatePrimaryEmailStatus: OperationStatus.Failed,\n  updatePrimaryEmailError: action.error,\n});\n\nconst applyUserProfilePrimaryEmailUpdateReset = (\n  state: IRDUserProfileState\n): IRDUserProfileState => ({\n  ...state,\n  updatePrimaryEmailStatus: OperationStatus.Idle,\n  updatePrimaryEmailError: \"\",\n});\n\nfunction rdUserProfileReducer(\n  state = INITIAL_STATE,\n  action: RDUserProfileActionTypes\n): IRDUserProfileState {\n  switch (action.type) {\n    case RD_RESET_M365_BENEFIT_DETAIL:\n      return applyM365BenefitDetailReset(state);\n    case RD_GET_M365_BENEFIT_DETAIL:\n      return applyGetM365BenefitDetails(state);\n    case RD_GET_M365_BENEFIT_DETAIL_FAILURE:\n      return applyGetM365BenefitDetailsFailure(state, action);\n    case RD_GET_M365_BENEFIT_DETAIL_SUCCESS:\n      return applyGetM365BenefitDetailsSuccess(state, action);\n    case RD_UPDATE_M365_BENEFIT_DETAIL:\n      return applyUpdateM365BenefitDetails(state);\n    case RD_UPDATE_M365_BENEFIT_DETAIL_SUCCESS:\n      return applyUpdateM365BenefitDetailsSuccess(state, action);\n    case RD_UPDATE_M365_BENEFIT_DETAIL_FAILURE:\n      return applyUpdateM365BenefitDetailsFailure(state, action);\n    case RD_RESET_MS365_BENEFIT_DETAIL:\n      return applyMS365BenefitDetailReset(state);\n    case RD_GET_MS365_BENEFIT_DETAIL:\n      return applyGetMS365BenefitDetails(state);\n    case RD_GET_MS365_BENEFIT_DETAIL_FAILURE:\n      return applyGetMS365BenefitDetailsFailure(state, action);\n    case RD_GET_MS365_BENEFIT_DETAIL_SUCCESS:\n      return applyGetMS365BenefitDetailsSuccess(state, action);\n    case RD_UPDATE_MS365_BENEFIT_DETAIL:\n      return applyUpdateMS365BenefitDetails(state);\n    case RD_UPDATE_MS365_BENEFIT_DETAIL_SUCCESS:\n      return applyUpdateMS365BenefitDetailsSuccess(state, action);\n    case RD_UPDATE_MS365_BENEFIT_DETAIL_FAILURE:\n      return applyUpdateMS365BenefitDetailsFailure(state, action);\n    case RD_EXTEND_AZURE_BENEFIT_CREDIT:\n      return applyExtendAzureBenefitCredit(state);\n    case RD_EXTEND_AZURE_BENEFIT_CREDIT_SUCCESS:\n      return applyExtendAzureBenefitCreditSuccess(state);\n    case RD_EXTEND_AZURE_BENEFIT_CREDIT_FAILURE:\n      return applyExtendAzureBenefitCreditFail(state, action);\n    case RD_EXTEND_AZURE_BENEFIT_CREDIT_RESET:\n      return applyExtendAzureBenefitCreditReset(state);\n    case RD_GET_PROFILE_BENEFITS: {\n      return applyGetProfileBenefits(state);\n    }\n    case RD_GET_PROFILE_BENEFITS_FAIL: {\n      return applyProfileBenefitsFail(state, action);\n    }\n    case RD_GET_PROFILE_BENEFITS_SUCCESS: {\n      return applyGetProfileBenefitsSuccess(state, action);\n    }\n    case RD_UPDATE_LISTING_CURRENT_PAGE: {\n      return applyUpdateCurrentPage(state, action);\n    }\n    case RD_UPDATE_LISTING_PAGE_SIZE: {\n      return applyUpdatePageSize(state, action);\n    }\n    case RD_UPDATE_LISTING_SORTING: {\n      return applyUpdateSorting(state, action);\n    }\n    case RD_RESET_FILE_DOWNLOAD_STATUS: {\n      return applyFileDownloadStatus(state);\n    }\n    case RD_USER_PROFILES_SEARCH: {\n      return applySearchUserProfiles(state, action);\n    }\n    case RD_USER_PROFILES_SEARCH_SUCCESS: {\n      return applySearchUserProfilesSuccess(state, action);\n    }\n    case RD_USER_PROFILES_SEARCH_FAIL: {\n      return applySearchUserProfilesFail(state, action);\n    }\n    case RD_USER_PROFILES_FILTER_VALUE_ADD: {\n      return addUserProfilesFilterValue(state, action);\n    }\n    case RD_USER_PROFILES_FILTER_VALUE_REMOVE: {\n      return removeUserProfilesFilterValue(state, action);\n    }\n    case RD_USER_PROFILES_FILTER_PROVINCE_VALUE_REMOVE: {\n      return removeUserProfilesFilterProvinceValue(state);\n    }\n    case RD_USER_PROFILES_FILTER_VALUE_UPDATE: {\n      return updateUserProfilesFilterValue(state, action);\n    }\n    case RD_DOWNLOAD_TO_CSV: {\n      return applyDownloadToCSV(state);\n    }\n    case RD_DOWNLOAD_TO_CSV_SUCCESS: {\n      return applyDownloadToCSVSuccess(state, action);\n    }\n    case RD_DOWNLOAD_TO_CSV_FAIL: {\n      return applyDownloadToCSVFailed(state, action);\n    }\n    case RD_FETCH_USER_PROFILE: {\n      return applyFetchUserProfile(state, action);\n    }\n    case RD_FETCH_USER_PROFILE_SUCCESS: {\n      return applyFetchUserProfileSuccess(state, action);\n    }\n    case RD_FETCH_USER_PROFILE_FAIL: {\n      return applyFetchUserProfileFail(state, action);\n    }\n    case RD_UPDATE_USER_PROFILE_ID: {\n      return applyUpdateUserProfileId(state, action);\n    }\n    case RD_FETCH_USER_PROFILE_COMMENTS: {\n      return applyFetchUserProfileComments(state, action);\n    }\n    case RD_FETCH_USER_PROFILE_COMMENTS_SUCCESS: {\n      return applyFetchUserProfileCommentsSuccess(state, action);\n    }\n    case RD_FETCH_USER_PROFILE_COMMENTS_FAIL: {\n      return applyFetchUserProfileCommentsFail(state, action);\n    }\n    case RD_ADD_AZURE_BENEFIT_DETAIL:\n      return applyAddAzureBenefit(state);\n    case RD_ADD_AZURE_BENEFIT_DETAIL_SUCCESS:\n      return applyAddAzureBenefitSuccess(state);\n    case RD_ADD_AZURE_BENEFIT_DETAIL_FAIL:\n      return applyAddAzureBenefitFail(state, action);\n    case RD_ADD_AZURE_BENEFIT_RESET:\n      return applyAddAzureBenefitReset(state);\n    case RD_ADD_USER_PROFILE_COMMENT: {\n      return applyAddUserProfileComment(state, action);\n    }\n    case RD_ADD_USER_PROFILE_COMMENT_SUCCESS: {\n      return applyAddUserProfileCommentSuccess(state, action);\n    }\n    case RD_ADD_USER_PROFILE_COMMENT_FAIL: {\n      return applyAddUserProfileCommentFail(state, action);\n    }\n    case RD_ADD_USER_PROFILE_COMMENT_RESET_VALUES: {\n      return applyAddUserProfileCommentResetValues(state);\n    }\n    case RD_UPDATE_PROGRAM_PROFILE: {\n      return applyUpdateProgramProfile(state, action);\n    }\n    case RD_UPDATE_PROGRAM_PROFILE_FAIL: {\n      return applyUpdateProgramProfileFail(state, action);\n    }\n    case RD_UPDATE_PROGRAM_PROFILE_SUCCESS: {\n      return applyUpdateProgramProfileSuccess(state, action);\n    }\n    case RD_PROGRAM_PROFILE_UPDATE_RESET_STATUS: {\n      return applyUpdateProgramProfileResetStatus(state);\n    }\n    case RD_USER_PROFILE_CLAIM_BENEFIT: {\n      return applyClaimingRdBenefit(state, action);\n    }\n    case RD_USER_PROFILE_CLAIM_BENEFIT_SUCCESS: {\n      return applyClaimingRdBenefitSuccess(state, action);\n    }\n    case RD_USER_PROFILE_CLAIM_BENEFIT_FAIL: {\n      return applyClaimingRdBenefitFail(state, action);\n    }\n    case RD_USER_PROFILE_CLAIM_BENEFIT_RESET: {\n      return applyClaimingRdBenefitReset(state);\n    }\n    case RD_FETCH_PROGRAM_PROFILE: {\n      return applyFetchProgramProfile(state);\n    }\n    case RD_FETCH_PROGRAM_PROFILE_SUCCESS: {\n      return applyFetchProgramProfileSuccess(state, action);\n    }\n    case RD_FETCH_PROGRAM_PROFILE_FAIL: {\n      return applyFetchProgramProfileFail(state, action);\n    }\n    case RD_USERPROFILE_UPDATE_IS_PRIVATE: {\n      return applyUserProfileIsPrivateUpdate(state);\n    }\n    case RD_USERPROFILE_UPDATE_IS_PRIVATE_SUCCESS: {\n      return applyUserProfileIsPrivateUpdateSuccess(state);\n    }\n    case RD_USERPROFILE_UPDATE_IS_PRIVATE_FAIL: {\n      return applyUserProfileIsPrivateUpdateFail(state, action);\n    }\n    case RD_USER_PROFILES_FILTER_VALUE_RESET: {\n      return applyUserProfileFilterValueReset(state);\n    }\n    case RD_USER_PROFILE_UPDATE_PRIMARY_EMAIL: {\n      return applyUserProfilePrimaryEmailUpdate(state);\n    }\n    case RD_USER_PROFILE_UPDATE_PRIMARY_EMAIL_SUCCESS: {\n      return applyUserProfilePrimaryEmailUpdateSuccess(state);\n    }\n    case RD_USER_PROFILE_UPDATE_PRIMARY_EMAIL_FAIL: {\n      return applyUserProfilePrimaryEmailUpdateFail(state, action);\n    }\n    case RD_USER_PROFILE_UPDATE_PRIMARY_EMAIL_RESET: {\n      return applyUserProfilePrimaryEmailUpdateReset(state);\n    }\n    default:\n      return state;\n  }\n}\n\nexport default rdUserProfileReducer;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { REGIONDATA_LOAD_FAILURE, REGIONDATA_LOAD_SUCCESS } from \"Constants/ActionTypes\";\nimport { IRegionDataState } from \"Interfaces/SiteContent\";\n\nimport { IGetRegionFailure, IGetRegionSuccess } from \"./RegionAction\";\n\nconst intialState: IRegionDataState = {\n  regions: [],\n  regionOptionList: [],\n  regionLoadError: \"\",\n};\n\n/**\n * Reducer function to load CL regions.\n * @state the current state.\n * @action the action object we use to update state.\n */\nconst applyLoadRegions = (\n  state: IRegionDataState,\n  action: IGetRegionSuccess\n): IRegionDataState => ({\n  ...state,\n  regions: action.regions,\n  regionOptionList: action.regions.map((x) => ({\n    key: x.clRegionName,\n    text: x.clRegionName,\n    id: x.clRegionId,\n  })),\n});\n\n/**\n * Reducer function to load the failure to\n * fetch CL regions.\n * @state the current state.\n * @action the action object we use to update state.\n */\nconst applyLoadFailregions = (\n  state: IRegionDataState,\n  action: IGetRegionFailure\n): IRegionDataState => ({\n  ...state,\n  regionLoadError: action.regionLoadError,\n});\n\n/**\n * Region reducer function\n * @state the current state.\n * @action the action object we use to update state.\n */\nfunction regionReducer(state: IRegionDataState = intialState, action: any) {\n  switch (action.type) {\n    case REGIONDATA_LOAD_SUCCESS:\n      return applyLoadRegions(state, action);\n    case REGIONDATA_LOAD_FAILURE:\n      return applyLoadFailregions(state, action);\n    default:\n      return state;\n  }\n}\n\nexport default regionReducer;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nexport const REGIONDATA_LOAD = \"REGIONDATA_LOAD\";\nexport const REGIONDATA_LOAD_SUCCESS = \"REGIONDATA_LOAD_SUCCESS\";\nexport const REGIONDATA_LOAD_FAILURE = \"REGIONDATA_LOAD_FAILURE\";\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nexport const SA_CSV_FILE_UPLOAD_RESET = \"SA_CSV_FILE_UPLOAD_RESET\";\nexport const SA_CSV_FILE_UPLOAD = \"SA_CSV_FILE_UPLOAD\";\nexport const SA_CSV_FILE_UPLOAD_SUCCESS = \"SA_CSV_FILE_UPLOAD_SUCCESS\";\nexport const SA_CSV_FILE_UPLOAD_FAIL = \"SA_CSV_FILE_UPLOAD_FAIL\";\n\nexport const SA_CSV_FILE_SUBMIT = \"SA_CSV_FILE_SUBMIT\";\nexport const SA_CSV_FILE_SUBMIT_SUCCESS = \"SA_CSV_FILE_SUBMIT_SUCCESS\";\nexport const SA_CSV_FILE_SUBMIT_FAIL = \"SA_CSV_FILE_SUBMIT_FAIL\";\n","import {\n  SA_CSV_FILE_UPLOAD,\n  SA_CSV_FILE_UPLOAD_SUCCESS,\n  SA_CSV_FILE_UPLOAD_FAIL,\n  SA_CSV_FILE_UPLOAD_RESET,\n  SA_CSV_FILE_SUBMIT,\n  SA_CSV_FILE_SUBMIT_SUCCESS,\n  SA_CSV_FILE_SUBMIT_FAIL,\n} from \"./UpdateSARegistrationStatusActionType\";\nimport {\n  ISubmitCsvFileFail,\n  ISubmitCsvFileSuccess,\n  IUploadCsvFileFail,\n  IUploadCsvFileSuccess,\n  UpdateSARegistrationActionTypes,\n} from \"./UpdateSARegistrationStatusAction\";\nimport { IUpdateSARegistrationStatusState } from \"./IUpdateSARegistrationStatusState\";\n\nconst INITIAL_STATE: IUpdateSARegistrationStatusState = {\n  uploadCSVFileRequest: {\n    CsvBase64: \"\",\n  },\n  submitCSVFileRequest: {\n    fileId: \"\",\n  },\n  isUploading: false,\n  errorMessage: \"\",\n  validationResponse: {\n    isValid: false,\n    fileId: \"\",\n    errors: [],\n    summary: [],\n  },\n  submitResponse: {\n    submitted: false,\n  },\n};\n\n/**\n * Updates state of fetch upload Csv File.\n * @param {IUpdateSARegistrationStatusState} state The activity state.\n * @returns {IUpdateSARegistrationStatusState} The activity state.\n */\nconst applyUploadCsv = (\n  state: IUpdateSARegistrationStatusState\n): IUpdateSARegistrationStatusState => ({\n  ...state,\n  uploadCSVFileRequest: {\n    ...state.uploadCSVFileRequest,\n  },\n  isUploading: true,\n  errorMessage: \"\",\n});\n\n/**\n * Updates state of fetch upload Csv File success.\n * @param {IUpdateSARegistrationStatusState} state The activity state.\n * @param {IUploadCsvFileSuccess} action The action state.\n * @returns {IUpdateSARegistrationStatusState} The activity state.\n */\nconst applyUploadCsvSuccess = (\n  state: IUpdateSARegistrationStatusState,\n  action: IUploadCsvFileSuccess\n): IUpdateSARegistrationStatusState => ({\n  ...state,\n  validationResponse: action.validationResponse,\n  isUploading: false,\n  errorMessage: \"\",\n});\n\n/**\n * Updates state of fetch upload Csv File fail.\n * @param {IUpdateSARegistrationStatusState} state The activity state.\n * @param {IUploadCsvFileFail} action The action state.\n * @returns {IUpdateSARegistrationStatusState} The activity state.\n */\nconst applyUploadCsvFail = (\n  state: IUpdateSARegistrationStatusState,\n  action: IUploadCsvFileFail\n): IUpdateSARegistrationStatusState => ({\n  ...state,\n  isUploading: false,\n  errorMessage: action.errorMessage,\n});\n\nconst applyUploadCsvReset = (): IUpdateSARegistrationStatusState => INITIAL_STATE;\n\n/**\n * Updates state of fetch Submit Csv File.\n * @param {IUpdateSARegistrationStatusState} state The activity state.\n * @returns {IUpdateSARegistrationStatusState} The activity state.\n */\nconst applySubmitCsv = (\n  state: IUpdateSARegistrationStatusState\n): IUpdateSARegistrationStatusState => ({\n  ...state,\n  submitCSVFileRequest: {\n    ...state.submitCSVFileRequest,\n  },\n  isUploading: true,\n  errorMessage: \"\",\n});\n\n/**\n * Updates state of fetch Submit Csv File success.\n * @param {IUpdateSARegistrationStatusState} state The activity state.\n * @param {ISubmitCsvFileSuccess} action The action state.\n * @returns {IUpdateSARegistrationStatusState} The activity state.\n */\nconst applySubmitCsvSuccess = (\n  state: IUpdateSARegistrationStatusState,\n  action: ISubmitCsvFileSuccess\n): IUpdateSARegistrationStatusState => ({\n  ...state,\n  submitResponse: action.submitResponse,\n  isUploading: false,\n  errorMessage: \"\",\n});\n\n/**\n * Updates state of fetch Submit Csv File Fail.\n * @param {IUpdateSARegistrationStatusState} state The activity state.\n * @param {ISubmitCsvFileFail} action The action state.\n * @returns {IUpdateSARegistrationStatusState} The activity state.\n */\nconst applySubmitCsvFail = (\n  state: IUpdateSARegistrationStatusState,\n  action: ISubmitCsvFileFail\n): IUpdateSARegistrationStatusState => ({\n  ...state,\n  isUploading: false,\n  errorMessage: action.errorMessage,\n});\n\n/**\n * Reducer function for Activity component.\n * @param {IUpdateSARegistrationStatusState} state The activity state.\n * @param {IUpdateSARegistrationStatusActionType} action The action type.\n * @returns {IUpdateSARegistrationStatusState} The activity state.\n */\nfunction UpdateSARegistrationStatusReducer(\n  state = INITIAL_STATE,\n  action: UpdateSARegistrationActionTypes\n): IUpdateSARegistrationStatusState {\n  switch (action.type) {\n    case SA_CSV_FILE_UPLOAD:\n      return applyUploadCsv(state);\n    case SA_CSV_FILE_UPLOAD_SUCCESS:\n      return applyUploadCsvSuccess(state, action);\n    case SA_CSV_FILE_UPLOAD_FAIL:\n      return applyUploadCsvFail(state, action);\n    case SA_CSV_FILE_UPLOAD_RESET: {\n      return applyUploadCsvReset();\n    }\n    case SA_CSV_FILE_SUBMIT:\n      return applySubmitCsv(state);\n    case SA_CSV_FILE_SUBMIT_SUCCESS:\n      return applySubmitCsvSuccess(state, action);\n    case SA_CSV_FILE_SUBMIT_FAIL:\n      return applySubmitCsvFail(state, action);\n    default:\n      return state;\n  }\n}\n\nexport default UpdateSARegistrationStatusReducer;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { ITechnologyAreaDataState } from \"Interfaces/SiteContent/ITechnologyAreaDataState\";\n\nimport {\n  IGetTechnologyAreaFailure,\n  IGetTechnologyAreaSuccess,\n} from \"../TechnologyArea/TechnologyAreaAction\";\nimport { TECHAREADATA_LOAD_FAILURE, TECHAREADATA_LOAD_SUCCESS } from \"./TechnologyAreaTypes\";\n\nexport const initialState: ITechnologyAreaDataState = {\n  technologyAreaLoadError: \"\",\n  technologyAreaData: [],\n};\n\n/**\n * Updates state of fetch technology area success.\n * @param {ITechnologyAreaDataState} state The technology area state.\n * @param {IGetTechnologyAreaSuccess} action The technology area action success.\n * @returns {ITechnologyAreaDataState} New technology area state.\n */\nconst applyLoadTechnologyAreas = (\n  state: ITechnologyAreaDataState,\n  action: IGetTechnologyAreaSuccess\n): ITechnologyAreaDataState => {\n  return {\n    ...state,\n    technologyAreaData: action.technologyAreaOptionList,\n  };\n};\n\n/**\n * Updates state of fetch technology area failure.\n * @param {ITechnologyAreaDataState} state The technology area state.\n * @param {IGetTechnologyAreaFailure} action The technology area action failure.\n * @returns {ITechnologyAreaDataState} New technology area state.\n */\nconst applyLoadFailTechnologyAreas = (\n  state: ITechnologyAreaDataState,\n  action: IGetTechnologyAreaFailure\n): ITechnologyAreaDataState => ({\n  ...state,\n  technologyAreaLoadError: action.technologyAreaLoadError,\n});\n\n/**\n * Reducer function for technology area options.\n * @param state technology area state.\n * @param action action.\n * @returns {ITechnologyAreaDataState} New technology area state.\n */\nfunction technologyAreaReducer(\n  state: ITechnologyAreaDataState = initialState,\n  action\n): ITechnologyAreaDataState {\n  switch (action.type) {\n    case TECHAREADATA_LOAD_SUCCESS:\n      return applyLoadTechnologyAreas(state, action);\n    case TECHAREADATA_LOAD_FAILURE:\n      return applyLoadFailTechnologyAreas(state, action);\n    default:\n      return state;\n  }\n}\n\nexport default technologyAreaReducer;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { IClRegionDataState } from \"../../Interfaces/SiteContent\";\nimport {\n  IGetClRegionsFailure,\n  IGetClRegionsSuccess,\n  IGetGeoDataFailure,\n  IGetGeoDataSuccess,\n} from \"./ClRegionAction\";\nimport {\n  CL_REGION_LOAD_FAILURE,\n  CL_REGION_LOAD_SUCCESS,\n  GEO_DATA_LOAD_FAILURE,\n  GEO_DATA_LOAD_SUCCESS,\n} from \"./ClRegionActionTypes\";\n\nconst initialState: IClRegionDataState = {\n  clRegions: [],\n  clRegionsOptionList: [],\n  clRegionsLoadError: \"\",\n  geoData: [],\n  geoDataLoadError: \"\",\n};\n\n/**\n * Updates state of fetch cl regions success.\n * @param {IClRegionDataState} state The cl regions state.\n * @param {IGetClRegionsSuccess} action The cl regions action success.\n * @returns {IClRegionDataState} New cl regions state.\n */\nconst applyLoadClRegions = (\n  state: IClRegionDataState,\n  action: IGetClRegionsSuccess\n): IClRegionDataState => ({\n  ...state,\n  clRegions: action.regions,\n  clRegionsOptionList: action.regions.map((x) => ({\n    key: x.clRegionName,\n    text: x.clRegionName,\n  })),\n});\n\n/**\n * Updates state of fetch cl regions failure.\n * @param {IClRegionDataState} state The cl regions state.\n * @param {IGetClRegionFailure} action The cl regions action failure.\n * @returns {IClRegionDataState} New cl regions state.\n */\nconst applyLoadFailClRegions = (\n  state: IClRegionDataState,\n  action: IGetClRegionsFailure\n): IClRegionDataState => ({\n  ...state,\n  clRegionsLoadError: action.regionsLoadError,\n});\n\n/**\n * Updates state of fetch geo data success.\n * @param {IClRegionDataState} state The cl regions state.\n * @param {IGetClRegionsSuccess} action The cl regions action success.\n * @returns {IClRegionDataState} New cl regions state.\n */\nconst applyLoadGeoData = (\n  state: IClRegionDataState,\n  action: IGetGeoDataSuccess\n): IClRegionDataState => ({\n  ...state,\n  geoData: action.geoData,\n});\n\n/**\n * Updates state of fetch geo data failure.\n * @param {IClRegionDataState} state The cl regions state.\n * @param {IGetClRegionFailure} action The cl regions action failure.\n * @returns {IClRegionDataState} New cl regions state.\n */\nconst applyLoadFailGeoData = (\n  state: IClRegionDataState,\n  action: IGetGeoDataFailure\n): IClRegionDataState => ({\n  ...state,\n  geoDataLoadError: action.geoDataLoadError,\n});\n\n/**\n * Reducer function for Activity component.\n * @param {IClRegionDataState} state The activity state.\n * @param {ClRegionActionTypes} action The action type.\n * @returns {IClRegionDataState} The activity state.\n */\n\nfunction ClRegionReducer(state: IClRegionDataState = initialState, action): IClRegionDataState {\n  switch (action.type) {\n    case CL_REGION_LOAD_SUCCESS:\n      return applyLoadClRegions(state, action);\n    case CL_REGION_LOAD_FAILURE:\n      return applyLoadFailClRegions(state, action);\n    case GEO_DATA_LOAD_SUCCESS:\n      return applyLoadGeoData(state, action);\n    case GEO_DATA_LOAD_FAILURE:\n      return applyLoadFailGeoData(state, action);\n    default:\n      return state;\n  }\n}\n\nexport default ClRegionReducer;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\nimport { IGetCountryRegionSuccess, IGetCountryRegionFailure } from \"./CountryRegionAction\";\nimport { COUNTRYDATA_LOAD_SUCCESS, COUNTRYDATA_LOAD_FAILURE } from \"../../Constants/ActionTypes\";\nimport { ICountryRegionDataState } from \"../../Interfaces/SiteContent\";\n\nconst intialState: ICountryRegionDataState = {\n  countryRegions: [],\n  countryRegionOptionList: [],\n  countryRegionPhoneOptionList: [],\n  countryRegionLoadError: \"\",\n};\n\n/**\n *\n * @param state\n * @param action\n */\nconst applyLoadCountryRegions = (\n  state: ICountryRegionDataState,\n  action: IGetCountryRegionSuccess\n): ICountryRegionDataState => ({\n  ...state,\n  countryRegions: action.countryRegions,\n  countryRegionOptionList: action.countryRegions.map((x) => ({\n    key: x.countryRegionName,\n    text: x.countryRegionName,\n    id: x.countryRegionId,\n  })),\n  countryRegionPhoneOptionList: action.countryRegions.map((x) => ({\n    key: x.countryRegionName,\n    text: x.countryRegionName + \" (+\" + x.tapiCode + \")\",\n    tapi: x.tapiCode,\n    id: x.countryRegionId,\n  })),\n});\n\n/**\n *\n * @param state\n * @param action\n */\nconst applyLoadFailCountryRegions = (\n  state: ICountryRegionDataState,\n  action: IGetCountryRegionFailure\n): ICountryRegionDataState => ({\n  ...state,\n  countryRegionLoadError: action.countryRegionLoadError,\n});\n\n/**\n *\n * @param state\n * @param action\n */\nfunction countryRegionReducer(state: ICountryRegionDataState = intialState, action: any) {\n  switch (action.type) {\n    case COUNTRYDATA_LOAD_SUCCESS:\n      return applyLoadCountryRegions(state, action);\n    case COUNTRYDATA_LOAD_FAILURE:\n      return applyLoadFailCountryRegions(state, action);\n    default:\n      return state;\n  }\n}\n\nexport default countryRegionReducer;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport {\n  EVENT_LOAD_FAIL,\n  EVENT_LOAD_SUCCESS,\n  EVENTS_FILTER_COUNTRY_VALUE_REMOVE,\n  EVENTS_FILTER_PROVINCE_VALUE_REMOVE,\n  EVENTS_FILTER_VALUE_ADD,\n  EVENTS_FILTER_VALUE_REMOVE,\n  EVENTS_FILTER_VALUE_UPDATE,\n  EVENTS_RESET,\n  EVENTS_SEARCH,\n  EVENTS_SEARCH_FAIL,\n  EVENTS_SEARCH_SUCCESS,\n  UPDATE_EVENT_LISTING_CURRENT_PAGE,\n  UPDATE_EVENT_LISTING_PAGE_SIZE,\n  UPDATE_EVENT_STATUS,\n  UPDATE_EVENT_STATUS_FAIL,\n  UPDATE_EVENT_STATUS_SUCCESS,\n  UPDATE_SELECTED_EVENT_ID,\n} from \"../../Constants/ActionTypes\";\nimport {\n  defaultEventFilterValues,\n  defaultListingPageSize,\n  EVENT_COUNTRY_REGION,\n  EVENT_STATE_PROVINCE,\n} from \"../../Constants/EventConstants\";\nimport { IEventUserProfileRole } from \"../../Interfaces/Event/IEventUserProfileRole\";\nimport {\n  EventActionTypes,\n  IEventsFilterValueAdd,\n  IEventsFilterValueRemove,\n  IEventsFilterValueUpdate,\n  ILoadEventFail,\n  ILoadEventSuccess,\n  ISearchEvents,\n  ISearchEventsFail,\n  ISearchEventsSuccess,\n  IUpdateCurrentPage,\n  IUpdateEventStatusFail,\n  IUpdateEventStatusSuccess,\n  IUpdatePageSize,\n  IUpdateSelectedEventId,\n} from \"./EventAction\";\nimport { IEventState } from \"./IEventState\";\n\nconst INITIAL_USER_PROFILE_ROLE: IEventUserProfileRole = {\n  userProfileId: 0,\n  userProfileFirstName: \"\",\n  userProfileLastName: \"\",\n  userProfilePrimaryEmail: \"\",\n  userProfileStudentPartnerEmail: \"\",\n  userProfileHeadline: \"\",\n  eventRoleId: 0,\n  eventRoleName: \"\",\n  tenants: [\"\"],\n  userProfileLevelStatus: \"\",\n  isHighImpact: false,\n};\n\nconst INITIAL_STATE: IEventState = {\n  events: [],\n  eventsFilterValues: defaultEventFilterValues,\n  loadEventsError: \"\",\n  userProfileId: 0,\n  isLoadingEvents: true,\n  isLoadingSelectedEvent: false,\n  isUpdatingStatus: false,\n  loadSelectedEventError: \"\",\n  selectedEventId: \"\",\n  updateEventStatusError: \"\",\n  currentPage: 1,\n  pageSize: defaultListingPageSize,\n  searchText: \"\",\n  filteredCount: 0,\n  selectedEvent: {\n    actualAttendance: 0,\n    addressLatitude: 0,\n    addressLongitude: 0,\n    allDay: false,\n    city: \"\",\n    createdBy: \"\",\n    dateLastReviewed: new Date(),\n    dateCreated: new Date(),\n    dateEnd: new Date(),\n    dateStart: new Date(),\n    description: \"\",\n    eventCountryOrRegionNames: [\"\"],\n    streetAddress: \"\",\n    buildingName: \"\",\n    roomNo: \"\",\n    eventFormat: \"\",\n    eventIdentifier: \"\",\n    eventOrganizerUserProfileRole: INITIAL_USER_PROFILE_ROLE,\n    eventSkillNames: [\"\"],\n    eventStatusName: \"\",\n    eventTargetAudienceNames: [],\n    eventType: \"\",\n    eventUri: \"\",\n    eventUserProfileContributorRole: [INITIAL_USER_PROFILE_ROLE],\n    expectedAttendance: 0,\n    icsuri: \"\",\n    id: 0,\n    isCateringRequested: false,\n    isFirstParty: false,\n    isHighImpact: false,\n    isPrivate: false,\n    isReimbursementRequested: false,\n    microsoftContactOwnerEmailAddress: \"\",\n    microsoftContactOwnerFirstName: \"\",\n    microsoftContactOwnerLastName: \"\",\n    photosUrl: \"\",\n    postEventDetails: \"\",\n    programProfileEvent: [{ id: 0, accepted: false, eventRoleName: \"\" }],\n    reach: 0,\n    spotlight: false,\n    stateOrProvince: \"\",\n    technologyFocusAreaName: \"\",\n    tenantName: \"\",\n    timeEnd: \"\",\n    timeStart: \"\",\n    title: \"\",\n    userRole: \"\",\n    videoUri: \"\",\n  },\n};\n\nconst applyLoadEvent = (state: IEventState, action: ILoadEventSuccess): IEventState => ({\n  ...state,\n  selectedEvent: action.event,\n  isLoadingSelectedEvent: false,\n  loadSelectedEventError: \"\",\n  updateEventStatusError: \"\",\n});\n\nconst applyLoadFailEvent = (state: IEventState, action: ILoadEventFail): IEventState => ({\n  ...state,\n  loadSelectedEventError: action.loadSelectedEventError,\n  isLoadingSelectedEvent: false,\n});\n\nconst addEventsFilterValue = (state: IEventState, action: IEventsFilterValueAdd): IEventState => ({\n  ...state,\n  eventsFilterValues: state.eventsFilterValues.concat([action.filterValue]),\n});\n\nconst removeEventsFilterValue = (\n  state: IEventState,\n  action: IEventsFilterValueRemove\n): IEventState => ({\n  ...state,\n  eventsFilterValues: state.eventsFilterValues.filter(\n    (item) =>\n      !(item.fieldName === action.filterValue.fieldName && item.value === action.filterValue.value)\n  ),\n});\n\nconst removeEventsFilterProvinceValue = (state: IEventState): IEventState => ({\n  ...state,\n  eventsFilterValues: state.eventsFilterValues.filter(\n    (item) => !(item.fieldName === EVENT_STATE_PROVINCE)\n  ),\n});\n\nconst removeEventsFilterCountryValue = (state: IEventState): IEventState => ({\n  ...state,\n  eventsFilterValues: state.eventsFilterValues.filter(\n    (item) => !(item.fieldName === EVENT_COUNTRY_REGION)\n  ),\n});\n\nconst updateEventsFilterValue = (\n  state: IEventState,\n  action: IEventsFilterValueUpdate\n): IEventState => ({\n  ...state,\n  eventsFilterValues: state.eventsFilterValues\n    .filter((item) => !(item.fieldName === action.filterValue.fieldName))\n    .concat([action.filterValue]),\n});\n\nconst applySearchEvents = (state: IEventState, action: ISearchEvents): IEventState => ({\n  ...state,\n  isLoadingEvents: true,\n  searchText: action.searchText,\n  currentPage: action.searchPage,\n  loadEventsError: \"\",\n});\n\nconst applySearchEventsSuccess = (\n  state: IEventState,\n  action: ISearchEventsSuccess\n): IEventState => ({\n  ...state,\n  events: action.events,\n  currentPage: action.searchPage,\n  isLoadingEvents: false,\n  filteredCount: action.filteredCount,\n  loadEventsError: \"\",\n});\n\nconst applySearchEventsFail = (state: IEventState, action: ISearchEventsFail): IEventState => ({\n  ...state,\n  loadEventsError: action.error,\n  isLoadingEvents: false,\n});\n\nconst applySelectedEvent = (state: IEventState, action: IUpdateSelectedEventId): IEventState => ({\n  ...state,\n  selectedEventId: action.selectedEventId,\n  updateEventStatusError: \"\",\n  isLoadingSelectedEvent: true,\n});\n\nconst applyUpdateEventStatus = (state: IEventState): IEventState => ({\n  ...state,\n  isUpdatingStatus: true,\n  updateEventStatusError: \"\",\n});\n\nconst applyUpdateEventStatusSuccess = (\n  state: IEventState,\n  action: IUpdateEventStatusSuccess\n): IEventState => ({\n  ...state,\n  selectedEvent: action.event,\n  updateEventStatusError: \"\",\n  isUpdatingStatus: false,\n});\n\nconst applyUpdateEventStatusFail = (\n  state: IEventState,\n  action: IUpdateEventStatusFail\n): IEventState => ({\n  ...state,\n  updateEventStatusError: action.updateEventStatusError,\n  isUpdatingStatus: false,\n});\n\nconst applyUpdateCurrentPage = (state: IEventState, action: IUpdateCurrentPage): IEventState => ({\n  ...state,\n  currentPage: action.currentPage,\n});\n\nconst applyUpdatePageSize = (state: IEventState, action: IUpdatePageSize): IEventState => ({\n  ...state,\n  pageSize: action.pageSize,\n});\n\nconst applyEventsReset = (): IEventState => INITIAL_STATE;\n\nfunction eventReducer(state = INITIAL_STATE, action: EventActionTypes): IEventState {\n  switch (action.type) {\n    case EVENT_LOAD_SUCCESS: {\n      return applyLoadEvent(state, action);\n    }\n    case EVENT_LOAD_FAIL: {\n      return applyLoadFailEvent(state, action);\n    }\n    case EVENTS_FILTER_VALUE_ADD: {\n      return addEventsFilterValue(state, action);\n    }\n    case EVENTS_FILTER_VALUE_REMOVE: {\n      return removeEventsFilterValue(state, action);\n    }\n    case EVENTS_FILTER_COUNTRY_VALUE_REMOVE: {\n      return removeEventsFilterCountryValue(state);\n    }\n    case EVENTS_FILTER_PROVINCE_VALUE_REMOVE: {\n      return removeEventsFilterProvinceValue(state);\n    }\n    case EVENTS_FILTER_VALUE_UPDATE: {\n      return updateEventsFilterValue(state, action);\n    }\n    case EVENTS_SEARCH: {\n      return applySearchEvents(state, action);\n    }\n    case EVENTS_SEARCH_FAIL: {\n      return applySearchEventsFail(state, action);\n    }\n    case EVENTS_SEARCH_SUCCESS: {\n      return applySearchEventsSuccess(state, action);\n    }\n    case UPDATE_SELECTED_EVENT_ID: {\n      return applySelectedEvent(state, action);\n    }\n    case UPDATE_EVENT_STATUS: {\n      return applyUpdateEventStatus(state);\n    }\n    case UPDATE_EVENT_STATUS_SUCCESS: {\n      return applyUpdateEventStatusSuccess(state, action);\n    }\n    case UPDATE_EVENT_STATUS_FAIL: {\n      return applyUpdateEventStatusFail(state, action);\n    }\n    case UPDATE_EVENT_LISTING_CURRENT_PAGE: {\n      return applyUpdateCurrentPage(state, action);\n    }\n    case UPDATE_EVENT_LISTING_PAGE_SIZE: {\n      return applyUpdatePageSize(state, action);\n    }\n    case EVENTS_RESET: {\n      return applyEventsReset();\n    }\n    default:\n      return state;\n  }\n}\n\nexport default eventReducer;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nexport const INDUSTRY_FOCUS_LOAD = \"INDUSTRY_FOCUS_LOAD\";\nexport const INDUSTRY_FOCUS_LOAD_SUCCESS = \"INDUSTRY_FOCUS_LOAD_SUCCESS\";\nexport const INDUSTRY_FOCUS_LOAD_FAILURE = \"INDUSTRY_FOCUS_LOAD_FAILURE\";\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { IIndustryFocusDataState } from \"../../Interfaces/SiteContent\";\nimport { IGetIndustryFocusFailure, IGetIndustryFocusSuccess } from \"./IndustryFocusAction\";\nimport {\n  INDUSTRY_FOCUS_LOAD_FAILURE,\n  INDUSTRY_FOCUS_LOAD_SUCCESS,\n} from \"./IndustryFocusActionTypes\";\n\nconst initialState: IIndustryFocusDataState = {\n  industryFocuses: [],\n  industryFocusesOptionList: [],\n  industryFocusLoadError: \"\",\n};\n\n/**\n * Updates state of fetch industry focuses success.\n * @param {IIndustryFocusDataState} state The industry focus state.\n * @param {IGetIndustryFocusSuccess} action The industry focus action success.\n * @returns {IIndustryFocusDataState} New industry focus state.\n */\nconst applyLoadIndustryFocuses = (\n  state: IIndustryFocusDataState,\n  action: IGetIndustryFocusSuccess\n): IIndustryFocusDataState => ({\n  ...state,\n  industryFocuses: action.industryFocuses,\n  industryFocusesOptionList: action.industryFocuses.map((x) => ({\n    key: x.text,\n    text: x.industryFocusLocKey,\n  })),\n});\n\n/**\n * Updates state of fetch industry focuses failure.\n * @param {IIndustryFocusDataState} state The industry focus state.\n * @param {IGetIndustryFocusFailure} action The industry focus action failure.\n * @returns {IIndustryFocusDataState} New industry focus state.\n */\nconst applyLoadFailIndustryFocuses = (\n  state: IIndustryFocusDataState,\n  action: IGetIndustryFocusFailure\n): IIndustryFocusDataState => ({\n  ...state,\n  industryFocusLoadError: action.industryFocusLoadError,\n});\n\n/**\n * Reducer function for Activity component.\n * @param {IIndustryFocusDataState} state The activity state.\n * @param {IndustryFocusActionTypes} action The action type.\n * @returns {IIndustryFocusDataState} The activity state.\n */\n\nfunction industryFocusReducer(\n  state: IIndustryFocusDataState = initialState,\n  action\n): IIndustryFocusDataState {\n  switch (action.type) {\n    case INDUSTRY_FOCUS_LOAD_SUCCESS:\n      return applyLoadIndustryFocuses(state, action);\n    case INDUSTRY_FOCUS_LOAD_FAILURE:\n      return applyLoadFailIndustryFocuses(state, action);\n    default:\n      return state;\n  }\n}\n\nexport default industryFocusReducer;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { IProgramLanguageDataState } from \"../../Interfaces/SiteContent\";\nimport { IGetProgramLanguageFailure, IGetProgramLanguageSuccess } from \"./ProgramLanguageAction\";\nimport {\n  PROGRAM_LANGUAGE_LOAD_FAILURE,\n  PROGRAM_LANGUAGE_LOAD_SUCCESS,\n} from \"./ProgramLanguageActionTypes\";\n\nconst initialState: IProgramLanguageDataState = {\n  programLanguages: [],\n  programLanguageOptionList: [],\n  programLanguageLoadError: \"\",\n};\n\n/**\n * Updates state of fetch program language success.\n * @param {IProgramLanguageDataState} state The program language state.\n * @param {IGetProgramLanguageSuccess} action The program language action success.\n * @returns {IProgramLanguageDataState} New program language state.\n */\nconst applyLoadProgramLanguage = (\n  state: IProgramLanguageDataState,\n  action: IGetProgramLanguageSuccess\n): IProgramLanguageDataState => ({\n  ...state,\n  programLanguages: action.programLanguages,\n  programLanguageOptionList: action.programLanguages.map((x) => ({\n    key: x.name,\n    text: x.name,\n    id: x.id,\n  })),\n});\n\n/**\n * Updates state of fetch program language failure.\n * @param {IProgramLanguageDataState} state The program language state.\n * @param {IGetProgramLanguageFailure} action The program language action failure.\n * @returns {IProgramLanguageDataState} New program language state.\n */\nconst applyLoadFailProgramLanguage = (\n  state: IProgramLanguageDataState,\n  action: IGetProgramLanguageFailure\n): IProgramLanguageDataState => ({\n  ...state,\n  programLanguageLoadError: action.programLanguageLoadError,\n});\n\n/**\n * Reducer function for program language.\n * @param {IProgramLanguageDataState} state The program language state.\n * @param {ProgramLanguageActionTypes} action The program language action type.\n * @returns {IProgramLanguageDataState} The program language data state.\n */\n\nfunction ProgramLanguageReducer(\n  state: IProgramLanguageDataState = initialState,\n  action\n): IProgramLanguageDataState {\n  switch (action.type) {\n    case PROGRAM_LANGUAGE_LOAD_SUCCESS:\n      return applyLoadProgramLanguage(state, action);\n    case PROGRAM_LANGUAGE_LOAD_FAILURE:\n      return applyLoadFailProgramLanguage(state, action);\n    default:\n      return state;\n  }\n}\n\nexport default ProgramLanguageReducer;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\nimport { IGetSchoolsSuccess, IGetSchoolsFailure } from \"./SchoolDataAction\";\nimport { SCHOOLDATA_LOAD_SUCCESS, SCHOOLDATA_LOAD_FAILURE } from \"../../Constants/ActionTypes\";\nimport { ISchoolDataState } from \"../../Interfaces/SiteContent\";\n\nconst intialState: ISchoolDataState = {\n  schools: [],\n  schoolOptionList: [],\n  schoolDataLoadError: \"\",\n};\n\n/**\n *\n * @param state\n * @param action\n */\nconst applyLoadSchools = (\n  state: ISchoolDataState,\n  action: IGetSchoolsSuccess\n): ISchoolDataState => ({\n  ...state,\n  schools: action.schools,\n  schoolOptionList: action.schools.map((x) => ({\n    key: x.schoolName,\n    name: x.schoolName,\n    id: x.schoolId,\n    countryRegionId: x.countryRegionId,\n  })),\n});\n\n/**\n *\n * @param state\n * @param action\n */\nconst applyLoadFailSchools = (\n  state: ISchoolDataState,\n  action: IGetSchoolsFailure\n): ISchoolDataState => ({\n  ...state,\n  schoolDataLoadError: action.schoolDataLoadError,\n});\n\n/**\n *\n * @param state\n * @param action\n */\nfunction schoolDataReducer(state: ISchoolDataState = intialState, action) {\n  switch (action.type) {\n    case SCHOOLDATA_LOAD_SUCCESS:\n      return applyLoadSchools(state, action);\n    case SCHOOLDATA_LOAD_FAILURE:\n      return applyLoadFailSchools(state, action);\n    default:\n      return state;\n  }\n}\n\nexport default schoolDataReducer;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\nimport { IGetSocialNetworkSuccess, IGetSocialNetworkFailure } from \"./SocialNetworkAction\";\nimport {\n  SOCIALNETWORKDATA_LOAD_SUCCESS,\n  SOCIALNETWORKDATA_LOAD_FAILURE,\n} from \"./SocialNetworkActionTypes\";\nimport { ISocialNetworkDataState } from \"../../Interfaces/SiteContent\";\n\nconst initialState: ISocialNetworkDataState = {\n  socialNetworks: [],\n  socialNetworkOptionList: [],\n  socialNetworkLoadError: \"\",\n};\n\n/**\n *\n * @param state\n * @param action\n */\nconst applyLoadSocialNetworks = (\n  state: ISocialNetworkDataState,\n  action: IGetSocialNetworkSuccess\n): ISocialNetworkDataState => ({\n  ...state,\n  socialNetworks: action.socialNetworks,\n  socialNetworkOptionList: action.socialNetworks.map((x) => ({\n    key: x.socialNetworkName,\n    text: x.socialNetworkName,\n    id: x.socialNetworkId,\n    urlPrefix: x.socialNetworkUrlPrefix,\n  })),\n});\n\n/**\n *\n * @param state\n * @param action\n */\nconst applyLoadFailSocialNetworks = (\n  state: ISocialNetworkDataState,\n  action: IGetSocialNetworkFailure\n): ISocialNetworkDataState => ({\n  ...state,\n  socialNetworkLoadError: action.socialNetworkLoadError,\n});\n\n/**\n *\n * @param state\n * @param action\n */\nfunction socialNetworkReducer(state: ISocialNetworkDataState = initialState, action) {\n  switch (action.type) {\n    case SOCIALNETWORKDATA_LOAD_SUCCESS:\n      return applyLoadSocialNetworks(state, action);\n    case SOCIALNETWORKDATA_LOAD_FAILURE:\n      return applyLoadFailSocialNetworks(state, action);\n    default:\n      return state;\n  }\n}\n\nexport default socialNetworkReducer;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\nimport {\n  IGetStateProvinceSuccess,\n  IGetStateProvinceFailure,\n  IGetStateProvinceShippingSuccess,\n  IGetStateProvinceShippingFailure,\n  IGetStateProvinceSchoolSuccess,\n  IGetStateProvinceSchoolFailure,\n} from \"./StateProvinceAction\";\nimport {\n  STATEPROVINCEDATA_LOAD_SUCCESS,\n  STATEPROVINCEDATA_LOAD_FAILURE,\n  STATEPROVINCESHIPPING_LOAD_SUCCESS,\n  STATEPROVINCESHIPPING_LOAD_FAILURE,\n  STATEPROVINCESCHOOL_LOAD_SUCCESS,\n  STATEPROVINCESCHOOL_LOAD_FAILURE,\n} from \"../../Constants/ActionTypes\";\nimport { IStateProvinceDataState } from \"../../Interfaces/SiteContent\";\n\nconst initialState: IStateProvinceDataState = {\n  stateProvinces: [],\n  stateProvincesShipping: [],\n  stateProvincesSchool: [],\n  stateProvincesOptionList: [],\n  stateProvincesShippingOptionList: [],\n  stateProvincesSchoolOptionList: [],\n  stateProvincesLoadError: \"\",\n  stateProvincesShippingLoadError: \"\",\n  stateProvincesSchoolLoadError: \"\",\n};\n\n/**\n *\n * @param state\n * @param action\n */\nconst applyLoadStateProvince = (\n  state: IStateProvinceDataState,\n  action: IGetStateProvinceSuccess\n): IStateProvinceDataState => ({\n  ...state,\n  stateProvinces: action.stateProvinces,\n  stateProvincesOptionList: action.stateProvinces.map((x) => ({\n    key: x.stateProvinceName,\n    text: x.stateProvinceName,\n    id: x.stateProvinceId,\n    countryRegionId: x.countryRegionId,\n  })),\n});\n\n/**\n *\n * @param state\n * @param action\n */\nconst applyLoadFailStateProvinces = (\n  state: IStateProvinceDataState,\n  action: IGetStateProvinceFailure\n): IStateProvinceDataState => ({\n  ...state,\n  stateProvincesLoadError: action.stateProvincesLoadError,\n});\n\n/**\n *\n * @param state\n * @param action\n */\nconst applyLoadStateProvinceShipping = (\n  state: IStateProvinceDataState,\n  action: IGetStateProvinceShippingSuccess\n): IStateProvinceDataState => ({\n  ...state,\n  stateProvincesShipping: action.stateProvincesShipping,\n  stateProvincesShippingOptionList: action.stateProvincesShipping.map((x) => ({\n    key: x.stateProvinceName,\n    text: x.stateProvinceName,\n    id: x.stateProvinceId,\n    countryRegionId: x.countryRegionId,\n  })),\n});\n\n/**\n *\n * @param state\n * @param action\n */\nconst applyLoadFailStateProvinceShipping = (\n  state: IStateProvinceDataState,\n  action: IGetStateProvinceShippingFailure\n): IStateProvinceDataState => ({\n  ...state,\n  stateProvincesShippingLoadError: action.stateProvincesShippingLoadError,\n});\n\n/**\n *\n * @param state\n * @param action\n */\nconst applyLoadStateProvinceSchool = (\n  state: IStateProvinceDataState,\n  action: IGetStateProvinceSchoolSuccess\n): IStateProvinceDataState => ({\n  ...state,\n  stateProvincesSchool: action.stateProvincesSchool,\n  stateProvincesSchoolOptionList: action.stateProvincesSchool.map((x) => ({\n    key: x.stateProvinceName,\n    text: x.stateProvinceName,\n    id: x.stateProvinceId,\n    countryRegionId: x.countryRegionId,\n  })),\n});\n\n/**\n *\n * @param state\n * @param action\n */\nconst applyLoadFailStateProvinceSchool = (\n  state: IStateProvinceDataState,\n  action: IGetStateProvinceSchoolFailure\n): IStateProvinceDataState => ({\n  ...state,\n  stateProvincesSchoolLoadError: action.stateProvincesSchoolLoadError,\n});\n\n/**\n *\n * @param state\n * @param action\n */\nfunction stateProvinceReducer(state: IStateProvinceDataState = initialState, action) {\n  switch (action.type) {\n    case STATEPROVINCEDATA_LOAD_SUCCESS:\n      return applyLoadStateProvince(state, action);\n    case STATEPROVINCEDATA_LOAD_FAILURE:\n      return applyLoadFailStateProvinces(state, action);\n    case STATEPROVINCESHIPPING_LOAD_SUCCESS:\n      return applyLoadStateProvinceShipping(state, action);\n    case STATEPROVINCESHIPPING_LOAD_FAILURE:\n      return applyLoadFailStateProvinceShipping(state, action);\n    case STATEPROVINCESCHOOL_LOAD_SUCCESS:\n      return applyLoadStateProvinceSchool(state, action);\n    case STATEPROVINCESCHOOL_LOAD_FAILURE:\n      return applyLoadFailStateProvinceSchool(state, action);\n    default:\n      return state;\n  }\n}\n\nexport default stateProvinceReducer;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nexport const TECHNICAL_EXPERTISE_LOAD = \"TECHNICAL_EXPERTISE_LOAD\";\nexport const TECHNICAL_EXPERTISE_LOAD_SUCCESS = \"TECHNICAL_EXPERTISE_LOAD_SUCCESS\";\nexport const TECHNICAL_EXPERTISE_LOAD_FAILURE = \"TECHNICAL_EXPERTISE_LOAD_FAILURE\";\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { ITechnicalExpertiseDataState } from \"../../Interfaces/SiteContent\";\nimport {\n  IGetTechnicalExpertiseFailure,\n  IGetTechnicalExpertiseSuccess,\n} from \"./TechnicalExpertiseAction\";\nimport {\n  TECHNICAL_EXPERTISE_LOAD_FAILURE,\n  TECHNICAL_EXPERTISE_LOAD_SUCCESS,\n} from \"./TechnicalExpertiseTypes\";\n\nconst initialState: ITechnicalExpertiseDataState = {\n  technicalExpertise: [],\n  technicalExpertiseOptionList: [],\n  technicalExpertiseLoadError: \"\",\n};\n\n/**\n * Updates state of fetch technical expertise success.\n * @param {ITechnicalExpertiseDataState} state The technical expertise state.\n * @param {IGetTechnicalExpertiseSuccess} action The technical expertise action success.\n * @returns {ITechnicalExpertiseDataState} New technical expertise state.\n */\nconst applyLoadTechnicalExpertise = (\n  state: ITechnicalExpertiseDataState,\n  action: IGetTechnicalExpertiseSuccess\n): ITechnicalExpertiseDataState => ({\n  ...state,\n  technicalExpertise: action.technicalExpertise,\n  technicalExpertiseOptionList: action.technicalExpertise.map((x) => ({\n    key: x.text,\n    text: x.technicalExpertiseLocKey,\n  })),\n});\n\n/**\n * Updates state of fetch technical expertise failure.\n * @param {ITechnicalExpertiseDataState} state The technical expertise state.\n * @param {IGetTechnicalExpertiseFailure} action The technical expertise action failure.\n * @returns {ITechnicalExpertiseDataState} New technical expertise state.\n */\nconst applyLoadFailTechnicalExpertise = (\n  state: ITechnicalExpertiseDataState,\n  action: IGetTechnicalExpertiseFailure\n): ITechnicalExpertiseDataState => ({\n  ...state,\n  technicalExpertiseLoadError: action.technicalExpertiseLoadError,\n});\n\n/**\n * Reducer function for Activity component.\n * @param {ITechnicalExpertiseDataState} state The activity state.\n * @param {TechnicalExpertiseActionTypes} action The action type.\n * @returns {ITechnicalExpertiseDataState} The activity state.\n */\n\nfunction TechnicalExpertiseReducer(\n  state: ITechnicalExpertiseDataState = initialState,\n  action\n): ITechnicalExpertiseDataState {\n  switch (action.type) {\n    case TECHNICAL_EXPERTISE_LOAD_SUCCESS:\n      return applyLoadTechnicalExpertise(state, action);\n    case TECHNICAL_EXPERTISE_LOAD_FAILURE:\n      return applyLoadFailTechnicalExpertise(state, action);\n    default:\n      return state;\n  }\n}\n\nexport default TechnicalExpertiseReducer;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { OperationStatus } from \"Constants/OperationStatus\";\nimport { removeDateTimeOffset } from \"Utility/FormatHelper\";\n\nimport {\n  UPDATE_LISTING_CURRENT_PAGE,\n  UPDATE_LISTING_PAGE_SIZE,\n  UPDATE_USERPROFILE_ID,\n  USERPROFILE_ADD_COMMENT,\n  USERPROFILE_ADD_COMMENT_FAIL,\n  USERPROFILE_ADD_COMMENT_SUCCESS,\n  USERPROFILE_CLAIM_BENEFIT,\n  USERPROFILE_CLAIM_BENEFIT_FAIL,\n  USERPROFILE_CLAIM_BENEFIT_RESET,\n  USERPROFILE_CLAIM_BENEFIT_SUCCESS,\n  USERPROFILE_DL_LOAD,\n  USERPROFILE_DL_LOAD_FAIL,\n  USERPROFILE_DL_LOAD_SUCCESS,\n  USERPROFILE_DL_REMOVE,\n  USERPROFILE_DL_REMOVE_ALL,\n  USERPROFILE_DL_REMOVE_ALL_FAIL,\n  USERPROFILE_DL_REMOVE_ALL_SUCCESS,\n  USERPROFILE_DL_REMOVE_FAIL,\n  USERPROFILE_DL_REMOVE_SUCCESS,\n  USERPROFILE_END_VSBENEFITS,\n  USERPROFILE_END_VSBENEFITS_FAIL,\n  USERPROFILE_END_VSBENEFITS_SUCCESS,\n  USERPROFILE_EXTEND_VSBENEFITS,\n  USERPROFILE_EXTEND_VSBENEFITS_FAIL,\n  USERPROFILE_EXTEND_VSBENEFITS_SUCCESS,\n  USERPROFILE_FETCH_PROGRAM_PROFILE,\n  USERPROFILE_FETCH_PROGRAM_PROFILE_FAIL,\n  USERPROFILE_FETCH_PROGRAM_PROFILE_SUCCESS,\n  USERPROFILE_GET_PROFILE_BENEFITS,\n  USERPROFILE_GET_PROFILE_BENEFITS_FAIL,\n  USERPROFILE_GET_PROFILE_BENEFITS_SUCCESS,\n  USERPROFILE_LOAD_COMMENTS_FAIL,\n  USERPROFILE_LOAD_COMMENTS_SUCCESS,\n  USERPROFILE_LOAD_FAIL,\n  USERPROFILE_LOAD_SUCCESS,\n  USERPROFILE_LOAD_VSBENEFITS_FAIL,\n  USERPROFILE_LOAD_VSBENEFITS_SUCCESS,\n  USERPROFILE_PROVISION_VSBENEFITS,\n  USERPROFILE_PROVISION_VSBENEFITS_FAIL,\n  USERPROFILE_PROVISION_VSBENEFITS_SUCCESS,\n  USERPROFILE_UPDATE,\n  USERPROFILE_UPDATE_BLOCK_SHIPPING,\n  USERPROFILE_UPDATE_BLOCK_SHIPPING_FAIL,\n  USERPROFILE_UPDATE_BLOCK_SHIPPING_SUCCESS,\n  USERPROFILE_UPDATE_COMMENT_FAIL,\n  USERPROFILE_UPDATE_COMMENT_SUCCESS,\n  USERPROFILE_UPDATE_FAIL,\n  USERPROFILE_UPDATE_IS_PRIVATE,\n  USERPROFILE_UPDATE_IS_PRIVATE_FAIL,\n  USERPROFILE_UPDATE_IS_PRIVATE_SUCCESS,\n  USERPROFILE_UPDATE_PROGRAM_PROFILE,\n  USERPROFILE_UPDATE_PROGRAM_PROFILE_FAILURE,\n  USERPROFILE_UPDATE_PROGRAM_PROFILE_SUCCESS,\n  USERPROFILE_UPDATE_SUCCESS,\n  USERPROFILE_VSBENEFITS_RESET,\n  USERPROFILES_FILTER_PROVINCE_VALUE_REMOVE,\n  USERPROFILES_FILTER_VALUE_ADD,\n  USERPROFILES_FILTER_VALUE_REMOVE,\n  USERPROFILES_FILTER_VALUE_RESET,\n  USERPROFILES_FILTER_VALUE_UPDATE,\n  USERPROFILES_SEARCH,\n  USERPROFILES_SEARCH_FAIL,\n  USERPROFILES_SEARCH_SUCCESS,\n} from \"../../Constants/ActionTypes\";\nimport { defaultListingPageSize, defaultMlsaFilterValues } from \"../../Constants/ProfileConstants\";\nimport { IUserProfileState } from \"./IUserProfileState\";\nimport {\n  IAddNewCommentFail,\n  IClaimBenefit,\n  IClaimBenefitFail,\n  IClaimBenefitSuccess,\n  IEndUserProfileVSBenefitsFail,\n  IExtendUserProfileVSBenefitsFail,\n  IFetchProgramProfile,\n  IFetchProgramProfileFail,\n  IFetchProgramProfileSuccess,\n  IGetProfileBenefitsFail,\n  IGetProfileBenefitsSuccess,\n  ILoadUserProfileCommentsFail,\n  ILoadUserProfileCommentsSuccess,\n  ILoadUserProfileFail,\n  ILoadUserProfileSuccess,\n  ILoadUserProfileVSBenefitsFail,\n  ILoadUserProfileVSBenefitsSuccess,\n  IProvisionUserProfileVSBenefitsFail,\n  ISearchUserProfiles,\n  ISearchUserProfilesFail,\n  ISearchUserProfilesSuccess,\n  IUpdateCurrentPage,\n  IUpdatePageSize,\n  IUpdateProgramProfileFailure,\n  IUpdateProgramProfileSuccess,\n  IUpdateUserProfileCommentFail,\n  IUpdateUserProfileFail,\n  IUpdateUserProfileId,\n  IUpdateUserProfileSuccess,\n  IUserProfilesFilterValueAdd,\n  IUserProfilesFilterValueRemove,\n  IUserProfilesFilterValueUpdate,\n  IUserProfileDlLoadFail,\n  IUserProfileDlLoadSuccess,\n  IUserProfileDlRemoveAllFail,\n  IUserProfileDlRemoveFail,\n  IUserProfileIsPrivateUpdateFail,\n  IUserProfileUpdateBlockShippingFail,\n  UserProfileActionTypes,\n} from \"./UserProfileAction\";\n\nconst INITIAL_STATE: IUserProfileState = {\n  userProfiles: [],\n  userProfileFilterValues: defaultMlsaFilterValues,\n  selectedUserProfile: {\n    address1: \"\",\n    address2: \"\",\n    addressCity: \"\",\n    addressCountryOrRegionName: \"\",\n    addresses: [],\n    addressPostCode: \"\",\n    addressStateOrProvince: \"\",\n    application: { applicationId: 0, dateModified: new Date(), applicationStatus: \"\" },\n    awardNameLocalized: false,\n    biography: \"\",\n    companyName: \"\",\n    companyRole: \"\",\n    companySize: \"\",\n    companyUrl: \"\",\n    microsoftReferralId: \"\",\n    createdBy: \"\",\n    dateCreated: new Date(),\n    dateDeleted: new Date(),\n    dateModified: new Date(),\n    dateOfBirth: undefined,\n    deleted: false,\n    deletedBy: \"\",\n    firstName: \"\",\n    fullPhoneNumber: \"\",\n    genderName: \"\",\n    genderPronounPreferenceName: \"\",\n    headline: \"\",\n    id: 0,\n    isOnboardingWizardComplete: true,\n    isPrivacyAgreed: false,\n    isShippingBlocked: false,\n    isTextOptIn: false,\n    languages: [],\n    lastName: \"\",\n    levelStatus: { id: 0, levelName: \"\" },\n    localizedFirstName: \"\",\n    localizedLastName: \"\",\n    modifiedBy: \"\",\n    newSchoolAdded: false,\n    onboardingWizardStep: 1,\n    onboardingWizardStepId: 0,\n    phoneContacts: [],\n    pictureLink: \"\",\n    primaryAddressId: 0,\n    primaryEmail: \"\",\n    primaryPhone: \"\",\n    primaryPhoneCountryOrRegionId: 0,\n    primaryPhoneId: 0,\n    profilePictureBase64: \"\",\n    profilePictureUrl: \"\",\n    programProfileBenefit: [],\n    programProfileStatusId: 0,\n    programProfileStatusName: \"\",\n    programProfileStartDate: new Date(),\n    programProfileEndDate: new Date(),\n    puid: \"\",\n    renewalStatusName: \"\",\n    screenNameLocalized: false,\n    secondaryEmail: \"\",\n    shippingAddress1: \"\",\n    shippingAddress2: \"\",\n    shippingAddressId: 0,\n    shippingCity: \"\",\n    shippingCompany: \"\",\n    shippingCountryOrRegionId: 0,\n    shippingCountryOrRegionName: \"\",\n    shippingName: \"\",\n    shippingPhoneCountryOrRegionId: 0,\n    shippingPhoneId: 0,\n    shippingPhoneNumber: \"\",\n    shippingPostCode: \"\",\n    shippingSameAsAddress: false,\n    shippingStateOrProvince: \"\",\n    shirtFitType: \"\",\n    shirtSize: \"\",\n    studentPartnerEmail: \"\",\n    tenants: [],\n    titleName: \"\",\n    userProfileIdentifier: \"\",\n    userProfileSchool: [],\n    userProfileSocialNetwork: [],\n    userProfileProgramLanguage: [],\n  },\n  error: \"\",\n  userProfileId: 0,\n  isUserProfilesLoading: true,\n  isSelectedUserProfileUpdating: false,\n  updateUserProfileError: \"\",\n  isCurrentUserProfileLoading: true,\n  isUserProfileCommentsLoading: false,\n  isLoadingVSBenefits: false,\n  loadVSBenefitsError: \"\",\n  isUpdatingVSBenefits: false,\n  updatingVSBenefitOperationStatus: OperationStatus.Idle,\n  updateVSBenefitsError: \"\",\n  currentPage: 1,\n  pageSize: defaultListingPageSize,\n  searchText: \"\",\n  programProfileUpdateError: \"\",\n  fetchProgramProfileError: \"\",\n  filteredCount: 0,\n  isClaimingBenefit: false,\n  isClaimingBenefitSuccess: false,\n  claimBenefitError: \"\",\n  benefitsOperationStatus: { read: OperationStatus.Idle, create: OperationStatus.Idle },\n  profileBenefits: {\n    azure: [],\n    githubPro: [],\n    mcp: [],\n    linkedIn: [],\n    visualStudio: [],\n    m365: [],\n    benefitTenant: {},\n    teams: [],\n    awardKits: [],\n  },\n  profileBenefitsErrorMessage: \"\",\n  profileBenefitsStatus: OperationStatus.Idle,\n  programProfileOperationStatus: { read: OperationStatus.Idle, update: OperationStatus.Idle },\n  commentsState: {\n    commentsOperationStatus: { read: OperationStatus.Idle, create: OperationStatus.Idle },\n    userProfileComments: [],\n    commentsErrorMessage: undefined,\n  },\n  updateBlockShippingOperationStatus: OperationStatus.Idle,\n  updateBlockShippingErrorMessage: \"\",\n  distributionLists: [],\n  loadingDlStatus: OperationStatus.Idle,\n  loadingDlErrorMessage: \"\",\n  removingAllDlStatus: OperationStatus.Idle,\n  removingAllErrorMessage: \"\",\n  removingDlStatus: OperationStatus.Idle,\n  removingDlErrorMessage: \"\",\n  updateIsPrivateProfileStatus: OperationStatus.Idle,\n  updateIsPrivateProfileError: \"\",\n};\n\nconst applyUpdateProgramProfileSuccess = (\n  state: IUserProfileState,\n  action: IUpdateProgramProfileSuccess\n): IUserProfileState => {\n  return {\n    ...state,\n    programProfileUpdateError: \"\",\n    programProfileOperationStatus: { update: OperationStatus.Succeeded },\n    selectedUserProfile: {\n      ...state.selectedUserProfile,\n      programProfileStatusName: action.programProfile.programProfileStatusName,\n      levelStatus: {\n        ...state.selectedUserProfile.levelStatus,\n        levelName: action.programProfile.levelStatusName,\n      },\n    },\n  };\n};\n\nconst applyUpdateProgramProfileFailure = (\n  state: IUserProfileState,\n  action: IUpdateProgramProfileFailure\n): IUserProfileState => {\n  return {\n    ...state,\n    programProfileUpdateError: action.message,\n    programProfileOperationStatus: { update: OperationStatus.Failed },\n  };\n};\n\nconst applyUpdateCurrentPage = (\n  state: IUserProfileState,\n  action: IUpdateCurrentPage\n): IUserProfileState => ({\n  ...state,\n  currentPage: action.currentPage,\n});\n\nconst applyUpdatePageSize = (\n  state: IUserProfileState,\n  action: IUpdatePageSize\n): IUserProfileState => ({\n  ...state,\n  pageSize: action.pageSize,\n});\n\nconst applySearchUserProfiles = (\n  state: IUserProfileState,\n  action: ISearchUserProfiles\n): IUserProfileState => ({\n  ...state,\n  isUserProfilesLoading: true,\n  searchText: action.searchText,\n  currentPage: action.searchPage,\n  pageSize: action.pageSize,\n});\n\nconst applySearchUserProfilesSuccess = (\n  state: IUserProfileState,\n  action: ISearchUserProfilesSuccess\n): IUserProfileState => ({\n  ...state,\n  userProfiles: action.userProfiles,\n  currentPage: action.searchPage,\n  pageSize: action.pageSize,\n  isUserProfilesLoading: false,\n  filteredCount: action.filteredCount,\n});\n\nconst applySearchUserProfilesFail = (\n  state: IUserProfileState,\n  action: ISearchUserProfilesFail\n): IUserProfileState => ({\n  ...state,\n  error: action.error,\n  isUserProfilesLoading: false,\n  currentPage: 1,\n  pageSize: defaultListingPageSize,\n});\n\nconst addUserProfilesFilterValue = (\n  state: IUserProfileState,\n  action: IUserProfilesFilterValueAdd\n): IUserProfileState => ({\n  ...state,\n  userProfileFilterValues: state.userProfileFilterValues.concat([action.filterValue]),\n});\n\nconst removeUserProfilesFilterValue = (\n  state: IUserProfileState,\n  action: IUserProfilesFilterValueRemove\n): IUserProfileState => ({\n  ...state,\n  userProfileFilterValues: state.userProfileFilterValues.filter(\n    (item) =>\n      !(item.fieldName === action.filterValue.fieldName && item.value === action.filterValue.value)\n  ),\n});\n\nconst removeUserProfilesFilterProvinceValue = (state: IUserProfileState): IUserProfileState => ({\n  ...state,\n  userProfileFilterValues: state.userProfileFilterValues.filter(\n    (item) => !(item.fieldName === \"regionState\")\n  ),\n});\n\nconst updateUserProfilesFilterValue = (\n  state: IUserProfileState,\n  action: IUserProfilesFilterValueUpdate\n): IUserProfileState => ({\n  ...state,\n  userProfileFilterValues: state.userProfileFilterValues\n    .filter((item) => !(item.fieldName === action.filterValue.fieldName))\n    .concat([action.filterValue]),\n});\n\nconst applyLoadUserProfile = (\n  state: IUserProfileState,\n  action: ILoadUserProfileSuccess\n): IUserProfileState => ({\n  ...state,\n  selectedUserProfile: {\n    ...action.userProfile,\n    dateOfBirth: removeDateTimeOffset(action.userProfile.dateOfBirth),\n  },\n  isCurrentUserProfileLoading: false,\n  programProfileUpdateError: \"\",\n  updateBlockShippingOperationStatus: OperationStatus.Idle,\n});\n\nconst applyLoadFailUserProfile = (\n  state: IUserProfileState,\n  action: ILoadUserProfileFail\n): IUserProfileState => ({\n  ...state,\n  isCurrentUserProfileLoading: false,\n  error: action.error,\n});\n\nconst applyUpdateUserProfileId = (\n  state: IUserProfileState,\n  action: IUpdateUserProfileId\n): IUserProfileState => {\n  if (state.userProfileId === action.userProfileId) return state;\n\n  return {\n    ...state,\n    userProfileId: action.userProfileId,\n    isCurrentUserProfileLoading: true,\n    updateUserProfileError: \"\",\n  };\n};\n\nconst applyUpdateUserProfile = (state: IUserProfileState): IUserProfileState => ({\n  ...state,\n  isSelectedUserProfileUpdating: true,\n  updateUserProfileError: \"\",\n});\n\nconst applyUpdateFailUserProfile = (\n  state: IUserProfileState,\n  action: IUpdateUserProfileFail\n): IUserProfileState => ({\n  ...state,\n  isSelectedUserProfileUpdating: false,\n  updateUserProfileError: action.error,\n});\n\nconst applyUpdateSuccessUserProfile = (\n  state: IUserProfileState,\n  action: IUpdateUserProfileSuccess\n): IUserProfileState => {\n  return {\n    ...state,\n    userProfiles: state.userProfiles.map((item) =>\n      item.id === action.userProfile.id ? action.userProfile : item\n    ),\n    isSelectedUserProfileUpdating: false,\n    selectedUserProfile: {\n      ...action.userProfile,\n      dateOfBirth: removeDateTimeOffset(action.userProfile.dateOfBirth),\n    },\n  };\n};\n\nconst applyLoadUserProfileComments = (\n  state: IUserProfileState,\n  action: ILoadUserProfileCommentsSuccess\n): IUserProfileState => ({\n  ...state,\n  isUserProfileCommentsLoading: true,\n  commentsState: {\n    commentsOperationStatus: { read: OperationStatus.Succeeded, create: OperationStatus.Idle },\n    userProfileComments: action.userProfileComments,\n    commentsErrorMessage: undefined,\n  },\n});\n\nconst applyLoadFailUserProfileComments = (\n  state: IUserProfileState,\n  action: ILoadUserProfileCommentsFail\n): IUserProfileState => ({\n  ...state,\n  isUserProfileCommentsLoading: false,\n  commentsState: {\n    ...state.commentsState,\n    commentsOperationStatus: { read: OperationStatus.Failed, create: OperationStatus.Idle },\n    commentsErrorMessage: action.loadCommentsError,\n  },\n});\n\nconst applyUpdateUserProfileComment = (state: IUserProfileState): IUserProfileState => ({\n  ...state,\n  commentsState: {\n    ...state.commentsState,\n    commentsOperationStatus: { read: OperationStatus.Failed, update: OperationStatus.Pending },\n    commentsErrorMessage: undefined,\n  },\n});\n\nconst applyUpdateFailUserProfileComment = (\n  state: IUserProfileState,\n  action: IUpdateUserProfileCommentFail\n): IUserProfileState => ({\n  ...state,\n  error: action.error,\n  commentsState: {\n    ...state.commentsState,\n    commentsOperationStatus: { read: OperationStatus.Failed, update: OperationStatus.Failed },\n  },\n});\n\nconst applyLoadUserProfileVSBenefitsSuccess = (\n  state: IUserProfileState,\n  action: ILoadUserProfileVSBenefitsSuccess\n): IUserProfileState => ({\n  ...state,\n  userProfileVSBenefit: action.userProfileVSBenefit,\n  isLoadingVSBenefits: false,\n  loadVSBenefitsError: \"\",\n  programProfileUpdateError: \"\",\n});\n\nconst applyLoadUserProfileVSBenefitsFail = (\n  state: IUserProfileState,\n  action: ILoadUserProfileVSBenefitsFail\n): IUserProfileState => ({\n  ...state,\n  isLoadingVSBenefits: false,\n  loadVSBenefitsError: action.error,\n});\n\nconst applyUpdateUserProfileVSBenefits = (state: IUserProfileState): IUserProfileState => ({\n  ...state,\n  isLoadingVSBenefits: true,\n  updatingVSBenefitOperationStatus: OperationStatus.Pending,\n  programProfileOperationStatus: { update: OperationStatus.Pending },\n});\n\nconst applyProvisionUserProfileVSBenefitsSuccess = (\n  state: IUserProfileState\n): IUserProfileState => ({\n  ...state,\n  isUpdatingVSBenefits: false,\n  updatingVSBenefitOperationStatus: OperationStatus.Succeeded,\n  updateVSBenefitsError: \"\",\n});\n\nconst applyProvisionUserProfileVSBenefitsFail = (\n  state: IUserProfileState,\n  action: IProvisionUserProfileVSBenefitsFail\n): IUserProfileState => ({\n  ...state,\n  isUpdatingVSBenefits: false,\n  updatingVSBenefitOperationStatus: OperationStatus.Failed,\n  updateVSBenefitsError: action.error,\n});\n\nconst applyExtendUserProfileVSBenefitsSuccess = (state: IUserProfileState): IUserProfileState => ({\n  ...state,\n  isUpdatingVSBenefits: false,\n  updatingVSBenefitOperationStatus: OperationStatus.Succeeded,\n});\n\nconst applyExtendUserProfileVSBenefitsFail = (\n  state: IUserProfileState,\n  action: IExtendUserProfileVSBenefitsFail\n): IUserProfileState => ({\n  ...state,\n  isUpdatingVSBenefits: false,\n  updateVSBenefitsError: action.error,\n  updatingVSBenefitOperationStatus: OperationStatus.Failed,\n});\n\nconst applyEndUserProfileVSBenefitsSuccess = (state: IUserProfileState): IUserProfileState => ({\n  ...state,\n  isUpdatingVSBenefits: false,\n  updatingVSBenefitOperationStatus: OperationStatus.Succeeded,\n});\n\nconst applyEndUserProfileVSBenefitsFail = (\n  state: IUserProfileState,\n  action: IEndUserProfileVSBenefitsFail\n): IUserProfileState => ({\n  ...state,\n  isUpdatingVSBenefits: false,\n  updateVSBenefitsError: action.error,\n  updatingVSBenefitOperationStatus: OperationStatus.Failed,\n});\n\nconst applyVSBenefitReset = (state: IUserProfileState): IUserProfileState => ({\n  ...state,\n  isUpdatingVSBenefits: false,\n  updatingVSBenefitOperationStatus: OperationStatus.Idle,\n  updateVSBenefitsError: \"\",\n});\n\nconst applyClaimingBenefit = (\n  state: IUserProfileState,\n  action: IClaimBenefit\n): IUserProfileState => ({\n  ...state,\n  isClaimingBenefit: true,\n  isClaimingBenefitSuccess: false,\n  claimBenefitError: \"\",\n  benefitsOperationStatus: { create: OperationStatus.Pending },\n});\n\nconst applyClaimingBenefitSuccess = (\n  state: IUserProfileState,\n  action: IClaimBenefitSuccess\n): IUserProfileState => ({\n  ...state,\n  isClaimingBenefit: false,\n  isClaimingBenefitSuccess: true,\n  benefitsOperationStatus: { create: OperationStatus.Succeeded },\n});\n\nconst applyClaimingBenefitFail = (\n  state: IUserProfileState,\n  action: IClaimBenefitFail\n): IUserProfileState => ({\n  ...state,\n  isClaimingBenefit: false,\n  isClaimingBenefitSuccess: false,\n  claimBenefitError: action.error,\n  benefitsOperationStatus: { create: OperationStatus.Failed },\n});\n\nconst applyClaimingBenefitReset = (state: IUserProfileState): IUserProfileState => ({\n  ...state,\n  isClaimingBenefit: false,\n  isClaimingBenefitSuccess: false,\n  claimBenefitError: \"\",\n  benefitsOperationStatus: { create: OperationStatus.Idle },\n});\n\nconst applyGetProfileBenefits = (state: IUserProfileState): IUserProfileState => ({\n  ...state,\n  profileBenefitsStatus: OperationStatus.Pending,\n  profileBenefitsErrorMessage: \"\",\n});\n\nconst applyGetProfileBenefitsSuccess = (\n  state: IUserProfileState,\n  action: IGetProfileBenefitsSuccess\n): IUserProfileState => ({\n  ...state,\n  profileBenefitsStatus: OperationStatus.Succeeded,\n  profileBenefits: action.userProfileBenefits,\n});\n\nconst applyGetProfileBenefitsFail = (\n  state: IUserProfileState,\n  action: IGetProfileBenefitsFail\n): IUserProfileState => ({\n  ...state,\n  profileBenefitsStatus: OperationStatus.Failed,\n  profileBenefitsErrorMessage: action.profileBenefitsErrorMessage,\n});\n\nconst applyFetchProgramProfile = (\n  state: IUserProfileState,\n  action: IFetchProgramProfile\n): IUserProfileState => ({\n  ...state,\n  selectedUserProfile: {\n    ...state.selectedUserProfile,\n    programProfile: undefined,\n  },\n  programProfileOperationStatus: { read: OperationStatus.Pending },\n});\n\nconst applyFetchProgramProfileSuccess = (\n  state: IUserProfileState,\n  action: IFetchProgramProfileSuccess\n): IUserProfileState => ({\n  ...state,\n  selectedUserProfile: {\n    ...state.selectedUserProfile,\n    programProfile: action.programProfile,\n  },\n  programProfileOperationStatus: { read: OperationStatus.Succeeded },\n});\n\nconst applyFetchProgramProfileFail = (\n  state: IUserProfileState,\n  action: IFetchProgramProfileFail\n): IUserProfileState => ({\n  ...state,\n  selectedUserProfile: {\n    ...state.selectedUserProfile,\n    programProfile: undefined,\n  },\n  programProfileOperationStatus: { read: OperationStatus.Failed },\n  fetchProgramProfileError: action.errorMessage,\n});\n\nconst applyAddNewComment = (state: IUserProfileState): IUserProfileState => ({\n  ...state,\n  commentsState: {\n    ...state.commentsState,\n    commentsErrorMessage: undefined,\n    commentsOperationStatus: { create: OperationStatus.Pending },\n  },\n});\n\nconst applyAddNewCommentSuccess = (state: IUserProfileState): IUserProfileState => ({\n  ...state,\n  commentsState: {\n    ...state.commentsState,\n    commentsErrorMessage: undefined,\n    commentsOperationStatus: { create: OperationStatus.Succeeded },\n  },\n});\n\nconst applyAddNewCommentFail = (\n  state: IUserProfileState,\n  action: IAddNewCommentFail\n): IUserProfileState => ({\n  ...state,\n  commentsState: {\n    ...state.commentsState,\n    commentsOperationStatus: { create: OperationStatus.Failed },\n    commentsErrorMessage: action.errorMessage,\n  },\n});\n\nconst applyUpdateBlockShipping = (state: IUserProfileState): IUserProfileState => ({\n  ...state,\n  updateBlockShippingOperationStatus: OperationStatus.Pending,\n  updateBlockShippingErrorMessage: \"\",\n});\n\nconst applyUpdateBlockShippingFail = (\n  state: IUserProfileState,\n  action: IUserProfileUpdateBlockShippingFail\n): IUserProfileState => ({\n  ...state,\n  updateBlockShippingOperationStatus: OperationStatus.Failed,\n  updateBlockShippingErrorMessage: action.errorMessage,\n});\n\nconst applyUpdateBlockShippingSuccess = (state: IUserProfileState): IUserProfileState => ({\n  ...state,\n  updateBlockShippingOperationStatus: OperationStatus.Succeeded,\n});\n\nconst applyDlLoad = (state: IUserProfileState): IUserProfileState => ({\n  ...state,\n  loadingDlStatus: OperationStatus.Pending,\n});\n\nconst applyDlLoadSuccess = (\n  state: IUserProfileState,\n  action: IUserProfileDlLoadSuccess\n): IUserProfileState => ({\n  ...state,\n  loadingDlStatus: OperationStatus.Succeeded,\n  distributionLists: action.distributionLists,\n});\n\nconst applyDlLoadFail = (\n  state: IUserProfileState,\n  action: IUserProfileDlLoadFail\n): IUserProfileState => ({\n  ...state,\n  loadingDlStatus: OperationStatus.Failed,\n  loadingDlErrorMessage: action.error,\n});\n\nconst applyDlRemoveAll = (state: IUserProfileState): IUserProfileState => ({\n  ...state,\n  removingAllDlStatus: OperationStatus.Pending,\n  removingDlErrorMessage: \"\",\n});\n\nconst applyDlRemoveAllSuccess = (state: IUserProfileState): IUserProfileState => ({\n  ...state,\n  removingAllDlStatus: OperationStatus.Succeeded,\n});\n\nconst applyDlRemoveAllFail = (\n  state: IUserProfileState,\n  action: IUserProfileDlRemoveAllFail\n): IUserProfileState => ({\n  ...state,\n  removingAllDlStatus: OperationStatus.Failed,\n  removingAllErrorMessage: action.error,\n});\n\nconst applyDlRemove = (state: IUserProfileState): IUserProfileState => ({\n  ...state,\n  removingDlStatus: OperationStatus.Pending,\n  removingDlErrorMessage: \"\",\n});\n\nconst applyDlRemoveSuccess = (state: IUserProfileState): IUserProfileState => ({\n  ...state,\n  removingDlStatus: OperationStatus.Succeeded,\n});\n\nconst applyDlRemoveFail = (\n  state: IUserProfileState,\n  action: IUserProfileDlRemoveFail\n): IUserProfileState => ({\n  ...state,\n  removingDlStatus: OperationStatus.Failed,\n  removingDlErrorMessage: action.error,\n});\n\nconst applyUserProfileIsPrivateUpdate = (state: IUserProfileState): IUserProfileState => ({\n  ...state,\n  updateIsPrivateProfileStatus: OperationStatus.Pending,\n  updateIsPrivateProfileError: \"\",\n});\n\nconst applyUserProfileIsPrivateUpdateSuccess = (state: IUserProfileState): IUserProfileState => ({\n  ...state,\n  updateIsPrivateProfileStatus: OperationStatus.Succeeded,\n});\n\nconst applyUserProfileIsPrivateUpdateFail = (\n  state: IUserProfileState,\n  action: IUserProfileIsPrivateUpdateFail\n): IUserProfileState => ({\n  ...state,\n  updateIsPrivateProfileStatus: OperationStatus.Failed,\n  updateIsPrivateProfileError: action.error,\n});\n\nconst applyUserProfileFilterValueReset = (state: IUserProfileState): IUserProfileState => ({\n  ...state,\n  userProfiles: [],\n  userProfileFilterValues: defaultMlsaFilterValues,\n  currentPage: 1,\n  pageSize: defaultListingPageSize,\n  searchText: \"\",\n});\n\nfunction userProfileReducer(\n  state = INITIAL_STATE,\n  action: UserProfileActionTypes\n): IUserProfileState {\n  switch (action.type) {\n    case USERPROFILE_GET_PROFILE_BENEFITS: {\n      return applyGetProfileBenefits(state);\n    }\n    case USERPROFILE_GET_PROFILE_BENEFITS_SUCCESS: {\n      return applyGetProfileBenefitsSuccess(state, action);\n    }\n    case USERPROFILE_GET_PROFILE_BENEFITS_FAIL: {\n      return applyGetProfileBenefitsFail(state, action);\n    }\n    case UPDATE_LISTING_CURRENT_PAGE: {\n      return applyUpdateCurrentPage(state, action);\n    }\n    case UPDATE_LISTING_PAGE_SIZE: {\n      return applyUpdatePageSize(state, action);\n    }\n    case USERPROFILES_SEARCH: {\n      return applySearchUserProfiles(state, action);\n    }\n    case USERPROFILES_SEARCH_SUCCESS: {\n      return applySearchUserProfilesSuccess(state, action);\n    }\n    case USERPROFILES_SEARCH_FAIL: {\n      return applySearchUserProfilesFail(state, action);\n    }\n    case USERPROFILES_FILTER_VALUE_ADD: {\n      return addUserProfilesFilterValue(state, action);\n    }\n    case USERPROFILES_FILTER_VALUE_REMOVE: {\n      return removeUserProfilesFilterValue(state, action);\n    }\n    case USERPROFILES_FILTER_PROVINCE_VALUE_REMOVE: {\n      return removeUserProfilesFilterProvinceValue(state);\n    }\n    case USERPROFILES_FILTER_VALUE_UPDATE: {\n      return updateUserProfilesFilterValue(state, action);\n    }\n    case USERPROFILE_LOAD_SUCCESS: {\n      return applyLoadUserProfile(state, action);\n    }\n    case USERPROFILE_LOAD_FAIL: {\n      return applyLoadFailUserProfile(state, action);\n    }\n    case UPDATE_USERPROFILE_ID: {\n      return applyUpdateUserProfileId(state, action);\n    }\n    case USERPROFILE_UPDATE: {\n      return applyUpdateUserProfile(state);\n    }\n    case USERPROFILE_UPDATE_SUCCESS: {\n      return applyUpdateSuccessUserProfile(state, action);\n    }\n    case USERPROFILE_UPDATE_FAIL: {\n      return applyUpdateFailUserProfile(state, action);\n    }\n    case USERPROFILE_LOAD_COMMENTS_SUCCESS: {\n      return applyLoadUserProfileComments(state, action);\n    }\n    case USERPROFILE_LOAD_COMMENTS_FAIL: {\n      return applyLoadFailUserProfileComments(state, action);\n    }\n    case USERPROFILE_UPDATE_COMMENT_SUCCESS: {\n      return applyUpdateUserProfileComment(state);\n    }\n    case USERPROFILE_UPDATE_COMMENT_FAIL: {\n      return applyUpdateFailUserProfileComment(state, action);\n    }\n    case USERPROFILE_LOAD_VSBENEFITS_SUCCESS: {\n      return applyLoadUserProfileVSBenefitsSuccess(state, action);\n    }\n    case USERPROFILE_LOAD_VSBENEFITS_FAIL: {\n      return applyLoadUserProfileVSBenefitsFail(state, action);\n    }\n    case USERPROFILE_UPDATE_PROGRAM_PROFILE:\n    case USERPROFILE_PROVISION_VSBENEFITS:\n    case USERPROFILE_EXTEND_VSBENEFITS:\n    case USERPROFILE_END_VSBENEFITS: {\n      return applyUpdateUserProfileVSBenefits(state);\n    }\n    case USERPROFILE_PROVISION_VSBENEFITS_SUCCESS: {\n      return applyProvisionUserProfileVSBenefitsSuccess(state);\n    }\n    case USERPROFILE_PROVISION_VSBENEFITS_FAIL: {\n      return applyProvisionUserProfileVSBenefitsFail(state, action);\n    }\n    case USERPROFILE_EXTEND_VSBENEFITS_SUCCESS: {\n      return applyExtendUserProfileVSBenefitsSuccess(state);\n    }\n    case USERPROFILE_EXTEND_VSBENEFITS_FAIL: {\n      return applyExtendUserProfileVSBenefitsFail(state, action);\n    }\n    case USERPROFILE_END_VSBENEFITS_SUCCESS: {\n      return applyEndUserProfileVSBenefitsSuccess(state);\n    }\n    case USERPROFILE_END_VSBENEFITS_FAIL: {\n      return applyEndUserProfileVSBenefitsFail(state, action);\n    }\n    case USERPROFILE_VSBENEFITS_RESET: {\n      return applyVSBenefitReset(state);\n    }\n    case USERPROFILE_UPDATE_PROGRAM_PROFILE_SUCCESS: {\n      return applyUpdateProgramProfileSuccess(state, action);\n    }\n    case USERPROFILE_UPDATE_PROGRAM_PROFILE_FAILURE: {\n      return applyUpdateProgramProfileFailure(state, action);\n    }\n    case USERPROFILE_CLAIM_BENEFIT: {\n      return applyClaimingBenefit(state, action);\n    }\n    case USERPROFILE_CLAIM_BENEFIT_SUCCESS: {\n      return applyClaimingBenefitSuccess(state, action);\n    }\n    case USERPROFILE_CLAIM_BENEFIT_FAIL: {\n      return applyClaimingBenefitFail(state, action);\n    }\n    case USERPROFILE_CLAIM_BENEFIT_RESET: {\n      return applyClaimingBenefitReset(state);\n    }\n    case USERPROFILE_FETCH_PROGRAM_PROFILE_SUCCESS: {\n      return applyFetchProgramProfileSuccess(state, action);\n    }\n    case USERPROFILE_FETCH_PROGRAM_PROFILE_FAIL: {\n      return applyFetchProgramProfileFail(state, action);\n    }\n    case USERPROFILE_FETCH_PROGRAM_PROFILE: {\n      return applyFetchProgramProfile(state, action);\n    }\n    case USERPROFILE_ADD_COMMENT: {\n      return applyAddNewComment(state);\n    }\n    case USERPROFILE_ADD_COMMENT_SUCCESS: {\n      return applyAddNewCommentSuccess(state);\n    }\n    case USERPROFILE_ADD_COMMENT_FAIL: {\n      return applyAddNewCommentFail(state, action);\n    }\n    case USERPROFILE_UPDATE_BLOCK_SHIPPING: {\n      return applyUpdateBlockShipping(state);\n    }\n    case USERPROFILE_UPDATE_BLOCK_SHIPPING_FAIL: {\n      return applyUpdateBlockShippingFail(state, action);\n    }\n    case USERPROFILE_UPDATE_BLOCK_SHIPPING_SUCCESS: {\n      return applyUpdateBlockShippingSuccess(state);\n    }\n    case USERPROFILE_DL_LOAD: {\n      return applyDlLoad(state);\n    }\n    case USERPROFILE_DL_LOAD_SUCCESS: {\n      return applyDlLoadSuccess(state, action);\n    }\n    case USERPROFILE_DL_LOAD_FAIL: {\n      return applyDlLoadFail(state, action);\n    }\n    case USERPROFILE_DL_REMOVE: {\n      return applyDlRemove(state);\n    }\n    case USERPROFILE_DL_REMOVE_SUCCESS: {\n      return applyDlRemoveSuccess(state);\n    }\n    case USERPROFILE_DL_REMOVE_FAIL: {\n      return applyDlRemoveFail(state, action);\n    }\n    case USERPROFILE_DL_REMOVE_ALL: {\n      return applyDlRemoveAll(state);\n    }\n    case USERPROFILE_DL_REMOVE_ALL_SUCCESS: {\n      return applyDlRemoveAllSuccess(state);\n    }\n    case USERPROFILE_DL_REMOVE_ALL_FAIL: {\n      return applyDlRemoveAllFail(state, action);\n    }\n    case USERPROFILE_UPDATE_IS_PRIVATE: {\n      return applyUserProfileIsPrivateUpdate(state);\n    }\n    case USERPROFILE_UPDATE_IS_PRIVATE_SUCCESS: {\n      return applyUserProfileIsPrivateUpdateSuccess(state);\n    }\n    case USERPROFILE_UPDATE_IS_PRIVATE_FAIL: {\n      return applyUserProfileIsPrivateUpdateFail(state, action);\n    }\n    case USERPROFILES_FILTER_VALUE_RESET: {\n      return applyUserProfileFilterValueReset(state);\n    }\n    default:\n      return state;\n  }\n}\n\nexport default userProfileReducer;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { defaultListingPageSize } from \"Constants/BenefitConstants\";\nimport { OperationStatus } from \"Constants/OperationStatus\";\nimport { defaultVisualStudioBenefitFilterValues } from \"Constants/VisualStudioBenefitConstants\";\n\nimport { IVisualStudioBenefitState } from \"./IVisualStudioBenefitState\";\nimport {\n  IDownloadRequests,\n  IDownloadRequestsFail,\n  IDownloadRequestsSuccess,\n  ISearchVisualStudioBenefits,\n  ISearchVisualStudioBenefitsFail,\n  ISearchVisualStudioBenefitsSuccess,\n  IUpdateCurrentPage,\n  IUpdatePageSize,\n  IVisualStudioBenefitsFilterValueAdd,\n  IVisualStudioBenefitsFilterValueRemove,\n  IVisualStudioBenefitsFilterValueUpdate,\n  VisualStudioBenefitActionTypes,\n} from \"./VisualStudioBenefitAction\";\nimport {\n  DOWNLOAD_REQUESTS_TO_CSV,\n  DOWNLOAD_REQUESTS_TO_CSV_CLEAN,\n  DOWNLOAD_REQUESTS_TO_CSV_FAIL,\n  DOWNLOAD_REQUESTS_TO_CSV_SUCCESS,\n  UPDATE_VISUAL_STUDIO_BENEFIT_LISTING_CURRENT_PAGE,\n  UPDATE_VISUAL_STUDIO_BENEFIT_LISTING_PAGE_SIZE,\n  VISUAL_STUDIO_BENEFITS_FILTER_VALUE_ADD,\n  VISUAL_STUDIO_BENEFITS_FILTER_VALUE_CLEAR,\n  VISUAL_STUDIO_BENEFITS_FILTER_VALUE_REMOVE,\n  VISUAL_STUDIO_BENEFITS_FILTER_VALUE_UPDATE,\n  VISUAL_STUDIO_BENEFITS_SEARCH,\n  VISUAL_STUDIO_BENEFITS_SEARCH_FAIL,\n  VISUAL_STUDIO_BENEFITS_SEARCH_SUCCESS,\n} from \"./VisualStudioBenefitActionTypes\";\n\nconst INITIAL_STATE: IVisualStudioBenefitState = {\n  currentPage: 1,\n  fileDownloadStatus: OperationStatus.Idle,\n  fileDownloadErrorMessage: \"\",\n  fileDownloadData: \"\",\n  filteredCount: 0,\n  isLoadingVisualStudioBenefits: false,\n  loadVisualStudioBenefitsError: \"\",\n  pageSize: defaultListingPageSize,\n  searchText: \"\",\n  visualStudioBenefits: [],\n  visualStudioBenefitsFilterValues: defaultVisualStudioBenefitFilterValues,\n};\n\nconst applyDownloadVisualStudioBenefitRequestsToCSV = (\n  state: IVisualStudioBenefitState,\n  action: IDownloadRequests\n): IVisualStudioBenefitState => ({\n  ...state,\n  fileDownloadStatus: OperationStatus.Pending,\n});\n\nconst applyDownloadVisualStudioBenefitRequestsToCSVSuccess = (\n  state: IVisualStudioBenefitState,\n  action: IDownloadRequestsSuccess\n): IVisualStudioBenefitState => ({\n  ...state,\n  fileDownloadStatus: OperationStatus.Succeeded,\n  fileDownloadData: action.csvFile,\n});\n\nconst applyDownloadVisualStudioBenefitRequestsToCSVFailed = (\n  state: IVisualStudioBenefitState,\n  action: IDownloadRequestsFail\n): IVisualStudioBenefitState => ({\n  ...state,\n  fileDownloadStatus: OperationStatus.Failed,\n  fileDownloadErrorMessage: action.errorMessage,\n});\n\nconst applyDownloadApplicationsClean = (\n  state: IVisualStudioBenefitState\n): IVisualStudioBenefitState => ({\n  ...state,\n  fileDownloadStatus: OperationStatus.Pending,\n  fileDownloadData: \"\",\n});\n\nconst applySearchVisualStudioBenefits = (\n  state: IVisualStudioBenefitState,\n  action: ISearchVisualStudioBenefits\n): IVisualStudioBenefitState => ({\n  ...state,\n  visualStudioBenefits: [],\n  isLoadingVisualStudioBenefits: true,\n  searchText: action.searchText,\n  currentPage: action.searchPage,\n  loadVisualStudioBenefitsError: \"\",\n});\n\nconst applySearchVisualStudioBenefitsSuccess = (\n  state: IVisualStudioBenefitState,\n  action: ISearchVisualStudioBenefitsSuccess\n): IVisualStudioBenefitState => ({\n  ...state,\n  visualStudioBenefits: action.benefits,\n  currentPage: action.searchPage,\n  isLoadingVisualStudioBenefits: false,\n  filteredCount: action.filteredCount,\n  loadVisualStudioBenefitsError: \"\",\n});\n\nconst applySearchVisualStudioBenefitsFail = (\n  state: IVisualStudioBenefitState,\n  action: ISearchVisualStudioBenefitsFail\n): IVisualStudioBenefitState => ({\n  ...state,\n  loadVisualStudioBenefitsError: action.error,\n  isLoadingVisualStudioBenefits: false,\n});\n\nconst applyUpdateCurrentPage = (\n  state: IVisualStudioBenefitState,\n  action: IUpdateCurrentPage\n): IVisualStudioBenefitState => ({\n  ...state,\n  currentPage: action.currentPage,\n});\n\nconst applyUpdatePageSize = (\n  state: IVisualStudioBenefitState,\n  action: IUpdatePageSize\n): IVisualStudioBenefitState => ({\n  ...state,\n  pageSize: action.pageSize,\n});\n\nconst addVisualStudioBenefitsFilterValue = (\n  state: IVisualStudioBenefitState,\n  action: IVisualStudioBenefitsFilterValueAdd\n): IVisualStudioBenefitState => ({\n  ...state,\n  visualStudioBenefitsFilterValues: state.visualStudioBenefitsFilterValues.concat([\n    action.filterValue,\n  ]),\n});\n\nconst removeVisualStudioBenefitsFilterValue = (\n  state: IVisualStudioBenefitState,\n  action: IVisualStudioBenefitsFilterValueRemove\n): IVisualStudioBenefitState => ({\n  ...state,\n  visualStudioBenefitsFilterValues: state.visualStudioBenefitsFilterValues.filter(\n    (item) =>\n      !(item.fieldName === action.filterValue.fieldName && item.value === action.filterValue.value)\n  ),\n});\n\nconst updateVisualStudioBenefitsFilterValue = (\n  state: IVisualStudioBenefitState,\n  action: IVisualStudioBenefitsFilterValueUpdate\n): IVisualStudioBenefitState => ({\n  ...state,\n  visualStudioBenefitsFilterValues: state.visualStudioBenefitsFilterValues\n    .filter((item) => !(item.fieldName === action.filterValue.fieldName))\n    .concat([action.filterValue]),\n});\n\nconst clearVisualStudioBenefitsFilterValue = (\n  state: IVisualStudioBenefitState\n): IVisualStudioBenefitState => ({\n  ...state,\n  visualStudioBenefitsFilterValues: [],\n});\n\nfunction visualStudioBenefitReducer(\n  state = INITIAL_STATE,\n  action: VisualStudioBenefitActionTypes\n): IVisualStudioBenefitState {\n  switch (action.type) {\n    case VISUAL_STUDIO_BENEFITS_SEARCH: {\n      return applySearchVisualStudioBenefits(state, action);\n    }\n    case VISUAL_STUDIO_BENEFITS_SEARCH_FAIL: {\n      return applySearchVisualStudioBenefitsFail(state, action);\n    }\n    case VISUAL_STUDIO_BENEFITS_SEARCH_SUCCESS: {\n      return applySearchVisualStudioBenefitsSuccess(state, action);\n    }\n    case UPDATE_VISUAL_STUDIO_BENEFIT_LISTING_CURRENT_PAGE: {\n      return applyUpdateCurrentPage(state, action);\n    }\n    case UPDATE_VISUAL_STUDIO_BENEFIT_LISTING_PAGE_SIZE: {\n      return applyUpdatePageSize(state, action);\n    }\n    case VISUAL_STUDIO_BENEFITS_FILTER_VALUE_ADD: {\n      return addVisualStudioBenefitsFilterValue(state, action);\n    }\n    case VISUAL_STUDIO_BENEFITS_FILTER_VALUE_CLEAR: {\n      return clearVisualStudioBenefitsFilterValue(state);\n    }\n    case VISUAL_STUDIO_BENEFITS_FILTER_VALUE_REMOVE: {\n      return removeVisualStudioBenefitsFilterValue(state, action);\n    }\n    case VISUAL_STUDIO_BENEFITS_FILTER_VALUE_UPDATE: {\n      return updateVisualStudioBenefitsFilterValue(state, action);\n    }\n    case DOWNLOAD_REQUESTS_TO_CSV: {\n      return applyDownloadVisualStudioBenefitRequestsToCSV(state, action);\n    }\n    case DOWNLOAD_REQUESTS_TO_CSV_SUCCESS: {\n      return applyDownloadVisualStudioBenefitRequestsToCSVSuccess(state, action);\n    }\n    case DOWNLOAD_REQUESTS_TO_CSV_FAIL: {\n      return applyDownloadVisualStudioBenefitRequestsToCSVFailed(state, action);\n    }\n    case DOWNLOAD_REQUESTS_TO_CSV_CLEAN: {\n      return applyDownloadApplicationsClean(state);\n    }\n    default:\n      return state;\n  }\n}\n\nexport default visualStudioBenefitReducer;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nexport const SA_PROGRAM_CSV_FILE_UPLOAD_RESET = \"SA_PROGRAM_CSV_FILE_UPLOAD_RESET\";\nexport const SA_PROGRAM_CSV_FILE_UPLOAD = \"SA_PROGRAM_CSV_FILE_UPLOAD\";\nexport const SA_PROGRAM_CSV_FILE_UPLOAD_SUCCESS = \"SA_PROGRAM_CSV_FILE_UPLOAD_SUCCESS\";\nexport const SA_PROGRAM_CSV_FILE_UPLOAD_FAIL = \"SA_PROGRAM_CSV_FILE_UPLOAD_FAIL\";\nexport const SA_PROGRAM_CSV_FILE_UPLOAD_BAD_REQUEST = \"SA_PROGRAM_CSV_FILE_UPLOAD_BAD_REQUEST\";\n\nexport const SA_PROGRAM_CSV_FILE_SUBMIT = \"SA_PROGRAM_CSV_FILE_SUBMIT\";\nexport const SA_PROGRAM_CSV_FILE_SUBMIT_SUCCESS = \"SA_PROGRAM_CSV_FILE_SUBMIT_SUCCESS\";\nexport const SA_PROGRAM_CSV_FILE_SUBMIT_FAIL = \"SA_PROGRAM_CSV_FILE_SUBMIT_FAIL\";\n","import {\n  SA_PROGRAM_CSV_FILE_UPLOAD,\n  SA_PROGRAM_CSV_FILE_UPLOAD_SUCCESS,\n  SA_PROGRAM_CSV_FILE_UPLOAD_FAIL,\n  SA_PROGRAM_CSV_FILE_UPLOAD_RESET,\n  SA_PROGRAM_CSV_FILE_SUBMIT,\n  SA_PROGRAM_CSV_FILE_SUBMIT_SUCCESS,\n  SA_PROGRAM_CSV_FILE_SUBMIT_FAIL,\n} from \"./UpdateSAProgramStatusActionType\";\nimport {\n  ISubmitCsvFileFail,\n  ISubmitCsvFileSuccess,\n  IUploadCsvFileFail,\n  IUploadCsvFileSuccess,\n  UpdateSAProgramActionTypes,\n} from \"./UpdateSAProgramStatusAction\";\nimport { IUpdateSAProgramStatusState } from \"./IUpdateSAProgramStatusState\";\n\nconst INITIAL_STATE: IUpdateSAProgramStatusState = {\n  uploadCSVFileRequest: {\n    CsvBase64: \"\",\n  },\n  submitCSVFileRequest: {\n    fileId: \"\",\n  },\n  isUploading: false,\n  errorMessage: \"\",\n  validationResponse: {\n    isValid: false,\n    fileId: \"\",\n    errors: [],\n    summary: [],\n  },\n  submitResponse: {\n    submitted: false,\n  },\n};\n\n/**\n * Updates state of fetch upload Csv File.\n * @param {IUpdateSAProgramStatusState} state The activity state.\n * @returns {IUpdateSAProgramStatusState} The activity state.\n */\nconst applyUploadCsv = (state: IUpdateSAProgramStatusState): IUpdateSAProgramStatusState => ({\n  ...state,\n  uploadCSVFileRequest: {\n    ...state.uploadCSVFileRequest,\n  },\n  isUploading: true,\n  errorMessage: \"\",\n});\n\n/**\n * Updates state of fetch upload Csv File success.\n * @param {IUpdateSAProgramStatusState} state The activity state.\n * @param {IUploadCsvFileSuccess} action The action state.\n * @returns {IUpdateSAProgramStatusState} The activity state.\n */\nconst applyUploadCsvSuccess = (\n  state: IUpdateSAProgramStatusState,\n  action: IUploadCsvFileSuccess\n): IUpdateSAProgramStatusState => ({\n  ...state,\n  validationResponse: action.validationResponse,\n  isUploading: false,\n  errorMessage: \"\",\n});\n\n/**\n * Updates state of fetch upload Csv File fail.\n * @param {IUpdateSAProgramStatusState} state The activity state.\n * @param {IUploadCsvFileFail} action The action state.\n * @returns {IUpdateSAProgramStatusState} The activity state.\n */\nconst applyUploadCsvFail = (\n  state: IUpdateSAProgramStatusState,\n  action: IUploadCsvFileFail\n): IUpdateSAProgramStatusState => ({\n  ...state,\n  isUploading: false,\n  errorMessage: action.errorMessage,\n});\n\nconst applyUploadCsvReset = (): IUpdateSAProgramStatusState => INITIAL_STATE;\n\n/**\n * Updates state of fetch Submit Csv File.\n * @param {IUpdateSAProgramStatusState} state The activity state.\n * @returns {IUpdateSAProgramStatusState} The activity state.\n */\nconst applySubmitCsv = (state: IUpdateSAProgramStatusState): IUpdateSAProgramStatusState => ({\n  ...state,\n  submitCSVFileRequest: {\n    ...state.submitCSVFileRequest,\n  },\n  isUploading: true,\n  errorMessage: \"\",\n});\n\n/**\n * Updates state of fetch Submit Csv File success.\n * @param {IUpdateSAProgramStatusState} state The activity state.\n * @param {ISubmitCsvFileSuccess} action The action state.\n * @returns {IUpdateSAProgramStatusState} The activity state.\n */\nconst applySubmitCsvSuccess = (\n  state: IUpdateSAProgramStatusState,\n  action: ISubmitCsvFileSuccess\n): IUpdateSAProgramStatusState => ({\n  ...state,\n  submitResponse: action.submitResponse,\n  isUploading: false,\n  errorMessage: \"\",\n});\n\n/**\n * Updates state of fetch Submit Csv File Fail.\n * @param {IUpdateSAProgramStatusState} state The activity state.\n * @param {ISubmitCsvFileFail} action The action state.\n * @returns {IUpdateSAProgramStatusState} The activity state.\n */\nconst applySubmitCsvFail = (\n  state: IUpdateSAProgramStatusState,\n  action: ISubmitCsvFileFail\n): IUpdateSAProgramStatusState => ({\n  ...state,\n  isUploading: false,\n  errorMessage: action.errorMessage,\n});\n\n/**\n * Reducer function for Activity component.\n * @param {IUpdateSAProgramStatusState} state The activity state.\n * @param {IUpdateSAProgramStatusActionType} action The action type.\n * @returns {IUpdateSAProgramStatusState} The activity state.\n */\nfunction UpdateSAProgramStatusReducer(\n  state = INITIAL_STATE,\n  action: UpdateSAProgramActionTypes\n): IUpdateSAProgramStatusState {\n  switch (action.type) {\n    case SA_PROGRAM_CSV_FILE_UPLOAD:\n      return applyUploadCsv(state);\n    case SA_PROGRAM_CSV_FILE_UPLOAD_SUCCESS:\n      return applyUploadCsvSuccess(state, action);\n    case SA_PROGRAM_CSV_FILE_UPLOAD_FAIL:\n      return applyUploadCsvFail(state, action);\n    case SA_PROGRAM_CSV_FILE_UPLOAD_RESET: {\n      return applyUploadCsvReset();\n    }\n    case SA_PROGRAM_CSV_FILE_SUBMIT:\n      return applySubmitCsv(state);\n    case SA_PROGRAM_CSV_FILE_SUBMIT_SUCCESS:\n      return applySubmitCsvSuccess(state, action);\n    case SA_PROGRAM_CSV_FILE_SUBMIT_FAIL:\n      return applySubmitCsvFail(state, action);\n    default:\n      return state;\n  }\n}\n\nexport default UpdateSAProgramStatusReducer;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { combineReducers } from \"redux\";\n\nimport accessControlReducer from \"Dataflows/AccessControl/AccessControlReducer\";\nimport activityAndEventTypesReducer from \"Dataflows/ActivityEventTypes/ActivityEventTypesReducer\";\nimport applicationReducer from \"Dataflows/Application/ApplicationReducer\";\nimport applicationDetailsReducer from \"Dataflows/ApplicationDetails/ApplicationDetailsReducer\";\nimport awardCategoriesReducer from \"Dataflows/AwardCategories/AwardCategoriesSlice\";\nimport awardKitSkuReducer from \"Dataflows/AwardKitSku/AwardKitSkuReducer\";\nimport awardPeriodReducer from \"Dataflows/AwardPeriod/AwardPeriodReducer\";\nimport azureBenefitRequestsReducer from \"Dataflows/AzureBenefitRequests/AzureBenefitRequestsReducer\";\nimport benefitReducer from \"Dataflows/Benefit/BenefitReducer\";\nimport CommonDataReducer from \"Dataflows/CommonData/CommonDataReducer\";\nimport demographicsReducer from \"Dataflows/Demographics/DemographicsReducer\";\nimport distributionListsReducer from \"Dataflows/DistributionLists/DistributionListsReducer\";\nimport m365CopilotBenefitReducer from \"Dataflows/M365CopilotBenefit/M365CopilotBenefitReducer\";\nimport mvpReducer from \"Dataflows/MVP/MVPReducer\";\nimport rdUserProfileReducer from \"Dataflows/RD/UserProfile/RDUserProfileReducer\";\nimport regionReducer from \"Dataflows/Region/RegionReducer\";\nimport UpdateSARegistrationStatusReducer from \"Dataflows/SA/UpdateSARegistrationStatus/UpdateSARegistrationStatusReducer\";\nimport technologyAreaReducer from \"Dataflows/TechnologyArea/TechnologyAreaReducer\";\nimport { awardCategoriesApi } from \"Services/AwardCategoriesApi\";\n\nimport clRegionReducer from \"../ClRegion/ClRegionsReducer\";\nimport countryRegionReducer from \"../CountryRegion/CountryRegionReducer\";\nimport eventReducer from \"../Event/EventReducer\";\nimport industryFocusReducer from \"../IndustryFocus/IndustryFocusReducer\";\nimport programLanguageDataReducer from \"../ProgramLanguage/ProgramLanguageReducer\";\nimport schoolDataReducer from \"../School/SchoolDataReducer\";\nimport socialNetworkDataReducer from \"../SocialNetwork/SocialNetworkReducer\";\nimport stateProvinceReducer from \"../StateProvince/StateProvinceReducer\";\nimport technicalExpertiseReducer from \"../TechnicalExpertise/TechnicalExpertiseReducer\";\nimport userProfileReducer from \"../UserProfile/UserProfileReducer\";\nimport visualStudioBenefitReducer from \"../VisualStudioBenefit/VisualStudioBenefitReducer\";\nimport UpdateSAProgramStatusReducer from \"Dataflows/SA/UpdateSAProgramStatus/UpdateSAProgramStatusReducer\";\n\n// Handles multiple reducers\nconst rootReducer = combineReducers({\n  awardPeriodDataState: awardPeriodReducer,\n  awardKitSkuDataState: awardKitSkuReducer,\n  accessControlState: accessControlReducer,\n  applicationState: applicationReducer,\n  applicationDetailsState: applicationDetailsReducer,\n  azureBenefitRequestsState: azureBenefitRequestsReducer,\n  m365CopilotBenefitState: m365CopilotBenefitReducer,\n  benefitState: benefitReducer,\n  clRegionsDataState: clRegionReducer,\n  countryRegionDataState: countryRegionReducer,\n  eventState: eventReducer,\n  industryFocusDataState: industryFocusReducer,\n  mvpState: mvpReducer,\n  saRegistrationStatusState: UpdateSARegistrationStatusReducer,\n  saProgramStatusState: UpdateSAProgramStatusReducer,\n  rdUserProfileState: rdUserProfileReducer,\n  regionDataState: regionReducer,\n  schoolDataState: schoolDataReducer,\n  socialNetworkDataState: socialNetworkDataReducer,\n  programLanguageDataState: programLanguageDataReducer,\n  stateProvinceDataState: stateProvinceReducer,\n  technicalExpertiseDataState: technicalExpertiseReducer,\n  technologyAreaDataState: technologyAreaReducer,\n  activityEventTypesState: activityAndEventTypesReducer,\n  userProfileState: userProfileReducer,\n  visualStudioBenefitState: visualStudioBenefitReducer,\n  distributionListsState: distributionListsReducer,\n  demographicsState: demographicsReducer,\n  commonDataState: CommonDataReducer,\n  awardCategories: awardCategoriesReducer,\n  [awardCategoriesApi.reducerPath]: awardCategoriesApi.reducer,\n});\n\nexport default rootReducer;\nexport type AppState = ReturnType<typeof rootReducer>;\n","/*!\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n */\r\n\r\nimport { ACCESS_CONTROL_BASE_URL, ADMIN_USER_BASE_URL } from \"Constants/SagaConstants\";\r\nimport { TenantTypesEnum } from \"Constants/TenantTypes\";\r\nimport { IAccessControlRequest } from \"Interfaces/AccessControl/IAccessControlRequest\";\r\nimport { IUserRole } from \"Interfaces/AccessControl/IUserRole\";\r\nimport { IWriteAccessControlUser } from \"Interfaces/AccessControl/IWriteAccessControlUser\";\r\nimport { IWriteUpdateUserStatus } from \"Interfaces/AccessControl/IWriteUpdateUserStatus\";\r\nimport { IAdminPermissionsDataResult } from \"Interfaces/Admin/IAdminPermissionsDataResult\";\r\nimport { IApiEmptyResult, IApiResult2 } from \"Interfaces/IApiResult\";\r\nimport { getTenant } from \"Utility/Utils\";\r\n\r\nimport { get, post, put, remove, IHttpResponse } from \"./ApiUtils\";\r\nimport { ICreateUserResult } from \"./Interfaces/AccessControl/ICreateUserResult\";\r\nimport { ICreateUserRoleResult } from \"./Interfaces/AccessControl/ICreateUserRoleResult\";\r\nimport { IUpdateUserRoleResult } from \"./Interfaces/AccessControl/IUpdateUserRoleResult\";\r\nimport { IUpdateUserStatusResult } from \"./Interfaces/AccessControl/IUpdateUserStatusResult\";\r\n\r\n/**\r\n * Create an new user.\r\n * @param {string} tenant the tenant.\r\n * @param {IWriteAccessControlUser}  adminUser the user to create.\r\n */\r\nexport async function createUser(\r\n  tenant: string,\r\n  adminUser: IWriteAccessControlUser\r\n): Promise<IHttpResponse<IApiResult2<ICreateUserResult>>> {\r\n  return await post<IApiResult2<ICreateUserResult>>(\r\n    `${ACCESS_CONTROL_BASE_URL}${getTenant(TenantTypesEnum[tenant])}`,\r\n    { adminUser },\r\n    true\r\n  );\r\n}\r\n\r\n/**\r\n * Update the user status.\r\n * @param {string}  tenant the tenant.\r\n * @param {IWriteUpdateUserStatus}  userStatus the user statue to update.\r\n */\r\nexport async function updateUserStatus(\r\n  tenant: string,\r\n  userStatus: IWriteUpdateUserStatus\r\n): Promise<IHttpResponse<IApiResult2<IUpdateUserStatusResult>>> {\r\n  return await put<IApiResult2<IUpdateUserStatusResult>>(\r\n    `${ACCESS_CONTROL_BASE_URL}status/${getTenant(TenantTypesEnum[tenant])}`,\r\n    { userStatus },\r\n    true\r\n  );\r\n}\r\n\r\n/**\r\n * Load user roles.\r\n * @param {email} email the user's email.\r\n */\r\nexport async function loadUserRoles(\r\n  tenant: string,\r\n  email: string\r\n): Promise<IHttpResponse<IApiResult2<ICreateUserResult>>> {\r\n  return await get<IApiResult2<ICreateUserResult>>(\r\n    `${ACCESS_CONTROL_BASE_URL}${tenant}/${email}/roles`,\r\n    true\r\n  );\r\n}\r\n\r\n/**\r\n * Create an user role.\r\n * @param {string} tenant the tenant.\r\n * @param {IUserRole} role the user role to create.\r\n */\r\nexport async function createUserRole(\r\n  tenant: string,\r\n  role: IUserRole\r\n): Promise<IHttpResponse<IApiResult2<ICreateUserRoleResult>>> {\r\n  return await post<IApiResult2<ICreateUserRoleResult>>(\r\n    `${ACCESS_CONTROL_BASE_URL}roles/${getTenant(TenantTypesEnum[tenant])}`,\r\n    { adminUserRole: role },\r\n    true\r\n  );\r\n}\r\n\r\n/**\r\n * Update an user role.\r\n * @param {string} tenant the tenant.\r\n * @param {IUserRole} role the user role to create.\r\n */\r\nexport async function updateUserRole(\r\n  tenant: string,\r\n  role: IUserRole\r\n): Promise<IHttpResponse<IApiResult2<IUpdateUserRoleResult>>> {\r\n  return await put<IApiResult2<IUpdateUserRoleResult>>(\r\n    `${ACCESS_CONTROL_BASE_URL}roles/${getTenant(TenantTypesEnum[tenant])}`,\r\n    { adminUserRole: role },\r\n    true\r\n  );\r\n}\r\n\r\n/**\r\n * Delete user roles.\r\n * @param {number} userRoleId the user role id to delete.\r\n */\r\nexport async function deleteUserRole(userRoleId: number): Promise<IHttpResponse<IApiEmptyResult>> {\r\n  return await remove<IApiEmptyResult>(`${ACCESS_CONTROL_BASE_URL}roles/${userRoleId}`, {}, true);\r\n}\r\n\r\n/**\r\n * Search admin user list for access control\r\n */\r\nexport async function searchAccessControlList(\r\n  tenantName: string,\r\n  searchRequest: IAccessControlRequest\r\n): Promise<IHttpResponse<IApiResult2<IAdminPermissionsDataResult>>> {\r\n  return await post<IApiResult2<IAdminPermissionsDataResult>>(\r\n    ADMIN_USER_BASE_URL + \"search/\" + tenantName,\r\n    searchRequest,\r\n    true\r\n  );\r\n}\r\n","/*!\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n */\r\nimport { call, delay, put, race } from \"redux-saga/effects\";\r\n\r\nimport * as accessControlApi from \"Services/AccessControlApi\";\r\n\r\nimport {\r\n  COUNTRY_REGION,\r\n  REGION,\r\n  ROLE,\r\n  STATE_PROVINCE,\r\n  TECHNOLOGY_AREA,\r\n  USER_STATUS,\r\n} from \"Constants/AccessControlConstants\";\r\nimport { GENERIC_API_TIMEOUT_ERROR } from \"Constants/ApplicationConstants\";\r\nimport { HttpStatusCode } from \"Constants/HttpStatusCode\";\r\nimport { IAccessControlDataResult } from \"Interfaces/AccessControl/IAccessControlDataResult\";\r\nimport { IAccessControlRequest } from \"Interfaces/AccessControl/IAccessControlRequest\";\r\nimport { IUserRole } from \"Interfaces/AccessControl/IUserRole\";\r\nimport { IWriteAccessControlUser } from \"Interfaces/AccessControl/IWriteAccessControlUser\";\r\nimport { IWriteUpdateUserStatus } from \"Interfaces/AccessControl/IWriteUpdateUserStatus\";\r\nimport { IApiErrorResult, IApiResult, IBadRequestResult } from \"Interfaces/IApiResult\";\r\nimport { ICreateUserResult } from \"Services/Interfaces/AccessControl/ICreateUserResult\";\r\nimport { ICreateUserRoleResult } from \"Services/Interfaces/AccessControl/ICreateUserRoleResult\";\r\nimport { IUpdateUserStatusResult } from \"Services/Interfaces/AccessControl/IUpdateUserStatusResult\";\r\nimport { getDefaultApiTimeOutConfiguration } from \"Utility/Utils\";\r\n\r\nimport {\r\n  createUserFail,\r\n  createUserRoleFail,\r\n  createUserRoleSuccess,\r\n  createUserSuccess,\r\n  deleteUserRoleFail,\r\n  deleteUserRoleSuccess,\r\n  loadUserRolesFail,\r\n  loadUserRolesSuccess,\r\n  searchUsersFail,\r\n  searchUsersSuccess,\r\n  updateUserRoleFail,\r\n  updateUserRoleSuccess,\r\n  updateUserStatusFail,\r\n  updateUserStatusSuccess,\r\n  ICreateUser,\r\n  ICreateUserRole,\r\n  IDeleteUserRole,\r\n  ILoadUserRoles,\r\n  ISearchUsers,\r\n  IUpdateUserRole,\r\n  IUpdateUserStatus,\r\n} from \"./AccessControlAction\";\r\n\r\n/**\r\n * Calls request to create an access user\r\n * @param {ICreateUser} action triggering action\r\n * @returns {Generator} resulting function generated\r\n */\r\nfunction* handleCreateUser(action: ICreateUser): Generator {\r\n  const failedMessage = \"Failed to create the user\";\r\n\r\n  try {\r\n    // eslint-disable-next-line  @typescript-eslint/no-explicit-any\r\n    const { result, timeout }: IApiResult<ICreateUserResult> | any = yield race({\r\n      result: call(accessControlApi.createUser, action.tenant, action.accessUser),\r\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\r\n    });\r\n\r\n    if (timeout) {\r\n      yield put(createUserFail(GENERIC_API_TIMEOUT_ERROR));\r\n      return;\r\n    }\r\n\r\n    switch (result.httpStatusCode) {\r\n      case HttpStatusCode.CreatedAt:\r\n        const okResult = result.parsedBody as IWriteAccessControlUser;\r\n\r\n        yield put(createUserSuccess(okResult));\r\n        break;\r\n      case HttpStatusCode.BadRequest:\r\n        yield put(createUserFail((result.parsedBody as IApiErrorResult).error.message));\r\n        break;\r\n      case HttpStatusCode.ServerError:\r\n        yield put(createUserFail((result.parsedBody as IApiErrorResult).error.message));\r\n        break;\r\n      default:\r\n        yield put(createUserFail(failedMessage));\r\n        break;\r\n    }\r\n  } catch (error) {\r\n    if (error instanceof Error) {\r\n      yield put(createUserFail(String(error.message)));\r\n    }\r\n  }\r\n}\r\n\r\n/**\r\n * Calls request to get the load user roles.\r\n * @param {ILoadUserRoles} action triggering action\r\n * @returns {Generator} resulting function generated\r\n */\r\nfunction* handleLoadUserRoles(action: ILoadUserRoles): Generator {\r\n  const failedMessage = \"Failed to load user roles\";\r\n\r\n  try {\r\n    // eslint-disable-next-line  @typescript-eslint/no-explicit-any\r\n    const { result, timeout }: IApiResult<IUserRole[]> | any = yield race({\r\n      result: call(accessControlApi.loadUserRoles, action.tenant, action.email),\r\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\r\n    });\r\n\r\n    if (timeout) {\r\n      yield put(loadUserRolesFail(GENERIC_API_TIMEOUT_ERROR));\r\n      return;\r\n    }\r\n\r\n    switch (result.httpStatusCode) {\r\n      case HttpStatusCode.Ok:\r\n        const okResult = result.parsedBody as IUserRole[];\r\n\r\n        yield put(loadUserRolesSuccess(okResult));\r\n        break;\r\n      case HttpStatusCode.BadRequest:\r\n        yield put(loadUserRolesFail((result.parsedBody as IApiErrorResult).error.message));\r\n        break;\r\n      case HttpStatusCode.ServerError:\r\n        yield put(loadUserRolesFail((result.parsedBody as IApiErrorResult).error.message));\r\n        break;\r\n      default:\r\n        yield put(loadUserRolesFail(failedMessage));\r\n        break;\r\n    }\r\n  } catch (error) {\r\n    if (error instanceof Error) {\r\n      yield put(loadUserRolesFail(String(error.message)));\r\n    }\r\n  }\r\n}\r\n\r\n/**\r\n * Calls request to delete an user role.\r\n * @param {IDeleteUserRole} action triggering action\r\n * @returns {Generator} resulting function generated\r\n */\r\nfunction* handleDeleteUserRole(action: IDeleteUserRole): Generator {\r\n  const failedMessage = \"Failed to delete user role\";\r\n\r\n  try {\r\n    // eslint-disable-next-line  @typescript-eslint/no-explicit-any\r\n    const { result, timeout }: IApiResult<IUserRole[]> | any = yield race({\r\n      result: call(accessControlApi.deleteUserRole, action.roleId),\r\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\r\n    });\r\n\r\n    if (timeout) {\r\n      yield put(deleteUserRoleFail(GENERIC_API_TIMEOUT_ERROR));\r\n      return;\r\n    }\r\n\r\n    switch (result.httpStatusCode) {\r\n      case HttpStatusCode.Ok:\r\n        yield put(deleteUserRoleSuccess(action.roleId));\r\n        break;\r\n      case HttpStatusCode.BadRequest:\r\n        yield put(deleteUserRoleFail((result.parsedBody as IApiErrorResult).error.message));\r\n        break;\r\n      case HttpStatusCode.ServerError:\r\n        yield put(deleteUserRoleFail((result.parsedBody as IApiErrorResult).error.message));\r\n        break;\r\n      default:\r\n        yield put(deleteUserRoleFail(failedMessage));\r\n        break;\r\n    }\r\n  } catch (error) {\r\n    if (error instanceof Error) {\r\n      yield put(deleteUserRoleFail(String(error.message)));\r\n    }\r\n  }\r\n}\r\n\r\n/**\r\n * Calls request to create an user role.\r\n * @param {ICreateUserRole} action triggering action\r\n * @returns {Generator} resulting function generated\r\n */\r\nfunction* handleCreateUserRole(action: ICreateUserRole): Generator {\r\n  const failedMessage = \"Failed to create user role\";\r\n\r\n  try {\r\n    const { result, timeout }: IApiResult<ICreateUserRoleResult> | any = yield race({\r\n      result: call(accessControlApi.createUserRole, action.tenant, action.role),\r\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\r\n    });\r\n\r\n    if (timeout) {\r\n      yield put(createUserRoleFail(GENERIC_API_TIMEOUT_ERROR));\r\n      return;\r\n    }\r\n\r\n    switch (result.httpStatusCode) {\r\n      case HttpStatusCode.CreatedAt:\r\n        const okResult = result.parsedBody as IUserRole;\r\n        yield put(createUserRoleSuccess(okResult));\r\n        break;\r\n      case HttpStatusCode.BadRequest:\r\n        yield put(createUserRoleFail((result.parsedBody as IApiErrorResult).error.message));\r\n        break;\r\n      case HttpStatusCode.ServerError:\r\n        yield put(createUserRoleFail((result.parsedBody as IApiErrorResult).error.message));\r\n        break;\r\n      default:\r\n        yield put(createUserRoleFail(failedMessage));\r\n        break;\r\n    }\r\n  } catch (error) {\r\n    if (error instanceof Error) {\r\n      yield put(createUserRoleFail(String(error.message)));\r\n    }\r\n  }\r\n}\r\n\r\n/**\r\n * Calls request to update an user role.\r\n * @param {ICreateUserRole} action triggering action\r\n * @returns {Generator} resulting function generated\r\n */\r\nfunction* handleUpdateUserRole(action: IUpdateUserRole): Generator {\r\n  const failedMessage = \"Failed to update user role\";\r\n\r\n  try {\r\n    const { result, timeout }: IApiResult<IUpdateUserStatusResult> | any = yield race({\r\n      result: call(accessControlApi.updateUserRole, action.tenant, action.role),\r\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\r\n    });\r\n\r\n    if (timeout) {\r\n      yield put(createUserRoleFail(GENERIC_API_TIMEOUT_ERROR));\r\n      return;\r\n    }\r\n\r\n    switch (result.httpStatusCode) {\r\n      case HttpStatusCode.Ok:\r\n        const okResult = result.parsedBody as IUserRole;\r\n        yield put(updateUserRoleSuccess(okResult));\r\n        break;\r\n      case HttpStatusCode.BadRequest:\r\n        yield put(updateUserRoleFail((result.parsedBody as IApiErrorResult).error.message));\r\n        break;\r\n      case HttpStatusCode.ServerError:\r\n        yield put(updateUserRoleFail((result.parsedBody as IApiErrorResult).error.message));\r\n        break;\r\n      default:\r\n        yield put(updateUserRoleFail(failedMessage));\r\n        break;\r\n    }\r\n  } catch (error) {\r\n    if (error instanceof Error) {\r\n      yield put(updateUserRoleFail(String(error.message)));\r\n    }\r\n  }\r\n}\r\n\r\n/**\r\n * Calls request to update the user status\r\n * @param {IUpdateUserStatus} action triggering action\r\n * @returns {Generator} resulting function generated\r\n */\r\nfunction* handleUpdateUserStatus(action: IUpdateUserStatus): Generator {\r\n  const failedMessage = \"Failed to update the user status\";\r\n\r\n  const userStatus: IWriteUpdateUserStatus = {\r\n    userId: action.userId,\r\n    isActive: action.isActive,\r\n  };\r\n\r\n  try {\r\n    // eslint-disable-next-line  @typescript-eslint/no-explicit-any\r\n    const { result, timeout }: IApiResult<IUpdateUserStatusResult> | any = yield race({\r\n      result: call(accessControlApi.updateUserStatus, action.tenant, userStatus),\r\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\r\n    });\r\n\r\n    if (timeout) {\r\n      yield put(updateUserStatusFail(GENERIC_API_TIMEOUT_ERROR));\r\n      return;\r\n    }\r\n    switch (result.httpStatusCode) {\r\n      case HttpStatusCode.Ok:\r\n        const okResult = result.parsedBody as IWriteUpdateUserStatus;\r\n        yield put(updateUserStatusSuccess(okResult));\r\n        break;\r\n      case HttpStatusCode.BadRequest:\r\n        yield put(updateUserStatusFail((result.parsedBody as IBadRequestResult).message));\r\n        break;\r\n      case HttpStatusCode.ServerError:\r\n        yield put(updateUserStatusFail((result.parsedBody as IApiErrorResult).error.message));\r\n        break;\r\n      default:\r\n        yield put(updateUserStatusFail(failedMessage));\r\n        break;\r\n    }\r\n  } catch (error) {\r\n    if (error instanceof Error) {\r\n      yield put(updateUserStatusFail(String(error.message)));\r\n    }\r\n  }\r\n}\r\n\r\n/**\r\n * Search all access users for given text\r\n * @param {ISearchUsers} action for searching admin users\r\n * @returns {void}\r\n */\r\nfunction* handleSearchAccessUsers(action: ISearchUsers) {\r\n  const failedMessage = \"Failed to search the access users.\";\r\n  const requestBody = {\r\n    searchKey: action.searchText,\r\n    usersStatus: [],\r\n    usersRole: [],\r\n    usersRegion: [],\r\n    usersCountry: [],\r\n    usersState: [],\r\n    usersTechArea: [],\r\n    pageIndex: action.searchPage,\r\n    pageSize: action.pageSize,\r\n    tenantName: action.tenant,\r\n  } as unknown as IAccessControlRequest;\r\n\r\n  action.selectedAccessControlFilterValues.forEach(function (item) {\r\n    switch (item.fieldName) {\r\n      case USER_STATUS:\r\n        requestBody.usersStatus.push(item.value);\r\n        break;\r\n      case COUNTRY_REGION:\r\n        requestBody.usersCountry.push(item.value);\r\n        break;\r\n      case STATE_PROVINCE:\r\n        requestBody.usersState.push(item.value);\r\n        break;\r\n      case ROLE:\r\n        requestBody.usersRole.push(item.value);\r\n        break;\r\n      case REGION:\r\n        requestBody.usersRegion.push(item.value);\r\n        break;\r\n      case TECHNOLOGY_AREA:\r\n        requestBody.usersTechArea.push(item.value.split(\"__\")[0]);\r\n        break;\r\n      default:\r\n        return;\r\n    }\r\n  });\r\n\r\n  try {\r\n    const { result, timeout }: IApiResult<IAccessControlDataResult> | any = yield race({\r\n      result: call(accessControlApi.searchAccessControlList, requestBody.tenantName, requestBody),\r\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\r\n    });\r\n\r\n    if (timeout) {\r\n      yield put(searchUsersFail(GENERIC_API_TIMEOUT_ERROR));\r\n      return;\r\n    }\r\n\r\n    const parsedBody = result.parsedBody;\r\n\r\n    switch (result.httpStatusCode) {\r\n      case HttpStatusCode.Ok:\r\n        yield put(\r\n          searchUsersSuccess(\r\n            parsedBody.accessControlAdminList,\r\n            action.searchPage,\r\n            action.pageSize,\r\n            parsedBody.filteredCount\r\n          )\r\n        );\r\n        break;\r\n      case HttpStatusCode.BadRequest:\r\n        yield put(searchUsersFail((result.parsedBody as IApiErrorResult).error.message));\r\n        break;\r\n      default:\r\n        yield put(searchUsersFail(failedMessage));\r\n        break;\r\n    }\r\n  } catch (error) {\r\n    yield put(searchUsersFail(error));\r\n  }\r\n}\r\n\r\nexport {\r\n  handleCreateUser,\r\n  handleUpdateUserStatus,\r\n  handleLoadUserRoles,\r\n  handleDeleteUserRole,\r\n  handleCreateUserRole,\r\n  handleUpdateUserRole,\r\n  handleSearchAccessUsers,\r\n};\r\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport {\n  CL_REGIONS_BASE_URL,\n  COMMON_DATA_BASE_URL,\n  GEO_DATA_BASE_URL,\n  INDUSTRY_FOCUS_BASE_URL,\n  PROGRAM_LANGUAGE_BASE_URL,\n  SITECONTENT_ACTIVITY_EVENT_TYPES_BASE_URL,\n  SITECONTENT_AWARD_KIT_SKU_BASE_URL,\n  SITECONTENT_AWARD_PERIODS_BASE_URL,\n  SITECONTENT_CLREGIONS_BASE_URL,\n  SITECONTENT_COUNTRYREGIONS_BASE_URL,\n  SITECONTENT_SCHOOLS_BASE_URL,\n  SITECONTENT_SOCIALNETWORKS_BASE_URL,\n  SITECONTENT_STATEPROVINCES_BASE_URL,\n  TECHNICAL_EXPERTISE_BASE_URL,\n  TECHNOLOGY_AREA_BASE_URL,\n} from \"../Constants/SagaConstants\";\nimport { IApiResult2 } from \"../Utility/IApiResult\";\nimport { get, IHttpResponse } from \"./ApiUtils\";\nimport {\n  IGetClRegionsDataResult,\n  IGetCountryDataResult,\n  IGetIndustryFocusDataResult,\n  IGetRegionDataResult,\n  IGetSchoolDataResult,\n  IGetSocialNetworkDataResult,\n  IGetStateProvinceDataResult,\n  IGetTechnicalExpertiseDataResult,\n  IGetAwardKitSkuResult,\n} from \"./Interfaces/SiteContent\";\nimport { IGetActivityEventTypesResult } from \"./Interfaces/SiteContent/IGetActivityEventTypesResult\";\nimport { IGetCommonDataResult } from \"./Interfaces/SiteContent/IGetCommonDataResult\";\nimport { IGetProgramLanguageDataResult } from \"./Interfaces/SiteContent/IGetProgramLanguageDataResult\";\nimport { IGetTechAreaResult } from \"./Interfaces/SiteContent/IGetTechAreaResult\";\n\n/**\n * fetches Award Periods.\n * NOTE: Errors needs to be caught and handled by the caller as since  this is just a util, there is no telemetry instance.\n * @returns {any} the IGetCountryDataResult Promise.\n */\nexport async function fetchAwardPeriodList(\n  tenant: string\n): Promise<IHttpResponse<IApiResult2<any>>> {\n  return await get<IApiResult2<any>>(\n    `${SITECONTENT_AWARD_PERIODS_BASE_URL}?tenantName=${tenant}`,\n    true\n  );\n}\n\n/**\n * Get Award Kit SKU\n * @returns {IGetAwardKitSkuResult} the IGetAwardKitSkuResult Promise.\n */\nexport async function fetchAwardKitSkuList(): Promise<\n  IHttpResponse<IApiResult2<IGetAwardKitSkuResult>>\n> {\n  return await get<IApiResult2<IGetAwardKitSkuResult>>(\n    `${SITECONTENT_AWARD_KIT_SKU_BASE_URL}`,\n    true\n  );\n}\n\n/**\n * fetches Country Regions.\n * NOTE: Errors needs to be caught and handled by the caller as since  this is just a util, there is no telemetry instance.\n * @returns {IGetCountryDataResult} the IGetCountryDataResult Promise.\n */\nexport async function fetchCountryRegionList(): Promise<\n  IHttpResponse<IApiResult2<IGetCountryDataResult>>\n> {\n  return await get<IApiResult2<IGetCountryDataResult>>(SITECONTENT_COUNTRYREGIONS_BASE_URL, true);\n}\n\n/**\n * fetches the school list.\n * NOTE: Errors needs to be caught and handled by the caller as since  this is just a util, there is no telemetry instance.\n * @param {IGetCountryRegion} countryRegionName The IGetCountryRegion Action Type.\n * @returns {void} void.\n */\nexport async function fetchSchoolList(\n  countryRegionName: string\n): Promise<IHttpResponse<IApiResult2<IGetSchoolDataResult>>> {\n  return await get<IApiResult2<IGetSchoolDataResult>>(\n    SITECONTENT_SCHOOLS_BASE_URL + countryRegionName,\n    true\n  );\n}\n\n/**\n * fetches Regions list (i.e., \"Asia\", \"Europe\", etc.).\n * NOTE: Errors needs to be caught and handled by the caller as since  this is just a util, there is no telemetry instance.\n * @returns {IGetCountryDataResult} the IGetCountryDataResult Promise.\n */\nexport async function fetchRegionList(): Promise<IHttpResponse<IApiResult2<IGetRegionDataResult>>> {\n  return await get<IApiResult2<IGetRegionDataResult>>(SITECONTENT_CLREGIONS_BASE_URL, true);\n}\n\n/**\n * fetches the stateprovinces list.\n * NOTE: Errors needs to be caught and handled by the caller as since  this is just a util, there is no telemetry instance.\n * @param {IGetCountryRegion} countryRegionName The IGetCountryRegion Action Type.\n * @returns {void} void.\n */\nexport async function fetchStateProvinceList(\n  countryRegionName: string\n): Promise<IHttpResponse<IApiResult2<IGetStateProvinceDataResult>>> {\n  return await get<IApiResult2<IGetStateProvinceDataResult>>(\n    SITECONTENT_STATEPROVINCES_BASE_URL + countryRegionName,\n    true\n  );\n}\n\n/**\n * fetches the social network list.\n * NOTE: Errors need to be caught and handled by the caller as since this is just a util, there is no telemetry instance.\n * @returns {IGetSocialNetworkDataResult} the IGetSocialNetworkDataResult Promise.\n */\nexport async function fetchSocialNetworkList(): Promise<\n  IHttpResponse<IApiResult2<IGetSocialNetworkDataResult>>\n> {\n  return await get<IApiResult2<IGetSocialNetworkDataResult>>(\n    SITECONTENT_SOCIALNETWORKS_BASE_URL,\n    true\n  );\n}\n\n/**\n * fetches the industry focus list.\n * NOTE: Errors need to be caught and handled by the caller as since this is just a util, there is no telemetry instance.\n * @returns {IGetIndustryFocusDataResult} the IGetIndustryFocusDataResult Promise.\n */\nexport async function fetchIndustryFocusList(): Promise<\n  IHttpResponse<IApiResult2<IGetIndustryFocusDataResult>>\n> {\n  return await get<IApiResult2<IGetIndustryFocusDataResult>>(INDUSTRY_FOCUS_BASE_URL, true);\n}\n\n/**\n * fetches the technical expertise list.\n * NOTE: Errors need to be caught and handled by the caller as since this is just a util, there is no telemetry instance.\n * @returns {IGetTechnicalExpertiseDataResult} the IGetIndustryFocusDataResult Promise.\n */\nexport async function fetchTechnicalExpertiseList(): Promise<\n  IHttpResponse<IApiResult2<IGetTechnicalExpertiseDataResult>>\n> {\n  return await get<IApiResult2<IGetTechnicalExpertiseDataResult>>(\n    TECHNICAL_EXPERTISE_BASE_URL,\n    true\n  );\n}\n\n/**\n * fetches the program language list.\n * NOTE: Errors need to be caught and handled by the caller as since this is just a util, there is no telemetry instance.\n * @returns {IGetTechnicalExpertiseDataResult} the IGetProgramLanguageDataResult Promise.\n */\nexport async function fetchProgramLanguageList(): Promise<\n  IHttpResponse<IApiResult2<IGetProgramLanguageDataResult>>\n> {\n  return await get<IApiResult2<IGetProgramLanguageDataResult>>(PROGRAM_LANGUAGE_BASE_URL, true);\n}\n\n/**\n * fetches the technology area list.\n * NOTE: Errors need to be caught and handled by the caller as since this is just a util, there is no telemetry instance.\n * @param {string} tenant Name of the tenant\n * @returns {IGetTechAreaResult} the IGetTechAreaResult Promise.\n */\nexport async function fetchTechnologyAreaList(\n  tenant: string\n): Promise<IHttpResponse<IApiResult2<IGetTechAreaResult>>> {\n  return await get<IApiResult2<IGetTechAreaResult>>(\n    `${TECHNOLOGY_AREA_BASE_URL}?tenant=${tenant}`,\n    true\n  );\n}\n\n/**\n * fetches the cl regions list.\n * NOTE: Errors need to be caught and handled by the caller as since this is just a util, there is no telemetry instance.\n * @returns {IGetRegionsDataResult} the IGetIndustryFocusDataResult Promise.\n */\nexport async function fetchClRegionsList(): Promise<\n  IHttpResponse<IApiResult2<IGetClRegionsDataResult>>\n> {\n  return await get<IApiResult2<IGetClRegionsDataResult>>(CL_REGIONS_BASE_URL, true);\n}\n\n/**\n * fetches the geo data list.\n * NOTE: Errors need to be caught and handled by the caller as since this is just a util, there is no telemetry instance.\n * @returns {IGetRegionsDataResult} the IGetIndustryFocusDataResult Promise.\n */\nexport async function fetchGeoData(): Promise<IHttpResponse<IApiResult2<IGetClRegionsDataResult>>> {\n  return await get<IApiResult2<IGetClRegionsDataResult>>(GEO_DATA_BASE_URL, true);\n}\n\nexport async function fetchActivityEventTypes(\n  tenant: string\n): Promise<IHttpResponse<IApiResult2<IGetActivityEventTypesResult>>> {\n  return await get<IApiResult2<IGetActivityEventTypesResult>>(\n    `${SITECONTENT_ACTIVITY_EVENT_TYPES_BASE_URL}?tenant=${tenant}`,\n    true\n  );\n}\n\n/**\n * fetches the common data list.\n * NOTE: Errors need to be caught and handled by the caller as since this is just a util, there is no telemetry instance.\n * @returns {IGetCommonDataResult} the IGetIndustryFocusDataResult Promise.\n */\nexport async function fetchCommonData(): Promise<IHttpResponse<IApiResult2<IGetCommonDataResult>>> {\n  return await get<IApiResult2<IGetCommonDataResult>>(COMMON_DATA_BASE_URL, true);\n}\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { call, delay, put, race } from \"redux-saga/effects\";\n\nimport * as siteContentApi from \"Services/SiteContentApi\";\n\nimport { GENERIC_API_TIMEOUT_ERROR } from \"Constants/ApplicationConstants\";\nimport { HttpStatusCode } from \"Constants/HttpStatusCode\";\nimport { IActivityEventTypesData } from \"Interfaces/SiteContent/IActivityEventTypesData\";\nimport { IGetActivityEventTypesResult } from \"Services/Interfaces/SiteContent/IGetActivityEventTypesResult\";\nimport { IApiErrorResult, IApiResult2 } from \"Utility/IApiResult\";\nimport { getDefaultApiTimeOutConfiguration } from \"Utility/Utils\";\n\nimport {\n  getActivityEventTypesFailure,\n  getActivityEventTypesSuccess,\n  IGetActivityEventTypes,\n} from \"./ActivityEventTypesAction\";\n\n/**\n * Handle load activity event types actions.\n * @param {IGetActivityEventTypes} action The IGetActivityEventTypes Action Type.\n * @returns {void} void.\n */\nfunction* handleLoadActivityEventTypesResults(action: IGetActivityEventTypes) {\n  try {\n    const { result, timeout }: IApiResult2<IGetActivityEventTypesResult> | any = yield race({\n      result: call(siteContentApi.fetchActivityEventTypes, action.tenant),\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\n    });\n\n    if (timeout) {\n      yield put(getActivityEventTypesFailure(GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n\n    switch (result.httpStatusCode) {\n      case HttpStatusCode.Ok:\n        yield put(getActivityEventTypesSuccess(result.parsedBody as IActivityEventTypesData[]));\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(\n          getActivityEventTypesFailure((result.parsedBody as IApiErrorResult).error.message)\n        );\n        break;\n      case HttpStatusCode.NotFound:\n        yield put(\n          getActivityEventTypesFailure((result.parsedBody as IApiErrorResult).error.message)\n        );\n        break;\n      default:\n        yield put(\n          getActivityEventTypesFailure((result.parsedBody as IApiErrorResult).error.message)\n        );\n        break;\n    }\n  } catch (error) {\n    yield put(getActivityEventTypesFailure(error.message));\n  }\n}\n\nexport { handleLoadActivityEventTypesResults };\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport {\n  ACTIVITY_EVENT_BASE_URL,\n  APPLICATION_ACTIVITIES_EVENTS_URL,\n  APPLICATION_BASE_URL,\n  APPLICATION_FLAGS_URL,\n  APPLICATIONS_BASE_URL,\n  QUESTION_ANSWERS_URL,\n  USERPROFILE_ACTIVITIES_EVENTS_URL,\n} from \"Constants/SagaConstants\";\nimport { TenantTypesEnum } from \"Constants/TenantTypes\";\nimport {\n  IApplicationFormActivitiesEventsRequest,\n  IUserprofileActivitiesEventsRequest,\n} from \"Interfaces/Application/IActivitiesEventsRequest\";\nimport { IActivityEventRequest } from \"Interfaces/Application/IActivityEventRequest\";\nimport { IApplicationAssign } from \"Interfaces/Application/IApplicationAssign\";\nimport { IApplicationDataResult } from \"Interfaces/Application/IApplicationDataResult\";\nimport { IApplicationDetailsDataResult } from \"Interfaces/Application/IApplicationDetailsDataResult\";\nimport { IApplicationFlagRequest } from \"Interfaces/Application/IApplicationFlagRequest\";\nimport { IApplicationFlagResponse } from \"Interfaces/Application/IApplicationFlagResponse\";\nimport { IApplicationFormActivityEvent } from \"Interfaces/Application/IApplicationFormActivityEvent\";\nimport { IApplicationGetAssign } from \"Interfaces/Application/IApplicationGetAssign\";\nimport { IApplicationQuestionResponse } from \"Interfaces/Application/IApplicationQuestionResponse\";\nimport { IApplicationRequest } from \"Interfaces/Application/IApplicationRequest\";\nimport { IApplicationScoreRequest } from \"Interfaces/Application/IApplicationScoreRequest\";\nimport { IApplicationsRequest } from \"Interfaces/Application/IApplicationsRequest\";\nimport { IApplicationUserProfileInformation } from \"Interfaces/Application/IApplicationUserProfileInformation\";\nimport { IManageApplicationRequest } from \"Interfaces/Application/IManageApplicationRequest\";\nimport { IApplicationsDataResult } from \"Interfaces/Application/ISearchApplicationsDataResult\";\nimport { IUpdateApplicationTechnologyAreaRequest } from \"Interfaces/Application/IUpdateApplicationTechnologyAreaRequest\";\nimport { IEventStatus } from \"Interfaces/Event/IEventStatus\";\nimport { IEventUpdateStatusDataResult } from \"Interfaces/Event/IEventUpdateStatusDataResult\";\nimport { IApiResult2 } from \"Interfaces/IApiResult\";\n\nimport { get, post, put, IHttpResponse } from \"./ApiUtils\";\n\n/**\n * Get full detail of individual application\n */\nexport async function getApplication(\n  selectedApplicationEmail: string\n): Promise<IHttpResponse<IApiResult2<IApplicationDataResult>>> {\n  return await get<IApiResult2<IApplicationDataResult>>(\n    APPLICATION_BASE_URL + selectedApplicationEmail,\n    true\n  );\n}\n\n/**\n * Get profile information by application id\n */\nexport async function getProfileInformationByApplicationId(\n  selectedApplicationId: number,\n  tenant: string\n): Promise<\n  IHttpResponse<IApiResult2<IApplicationDetailsDataResult<IApplicationUserProfileInformation>>>\n> {\n  return await get<IApiResult2<IApplicationDetailsDataResult<IApplicationUserProfileInformation>>>(\n    APPLICATIONS_BASE_URL.replace(\"{tenant}\", tenant) + \"profile/\" + selectedApplicationId,\n    true\n  );\n}\n\n/**\n * Get application flags by application id\n */\nexport async function getApplicationFlagsByApplicationId(\n  selectedApplicationId: number\n): Promise<IHttpResponse<IApiResult2<IApplicationDetailsDataResult<IApplicationFlagResponse[]>>>> {\n  return await get<IApiResult2<IApplicationDetailsDataResult<IApplicationFlagResponse[]>>>(\n    APPLICATION_FLAGS_URL.replace(\"{tenant}\", \"mvp\") + selectedApplicationId,\n    true\n  );\n}\n\n/**\n * Get application questions by application id\n */\nexport async function getApplicationQuestionsByApplicationId(\n  selectedApplicationId: number,\n  tenant: string\n): Promise<\n  IHttpResponse<IApiResult2<IApplicationDetailsDataResult<IApplicationQuestionResponse[]>>>\n> {\n  return await get<IApiResult2<IApplicationDetailsDataResult<IApplicationQuestionResponse[]>>>(\n    QUESTION_ANSWERS_URL.replace(\"{tenant}\", tenant) + selectedApplicationId,\n    true\n  );\n}\n\n/**\n * Get assign application\n * @param applicationFormId\n */\nexport async function getAssignApplication(\n  applicationFormId: number\n): Promise<IHttpResponse<IApiResult2<IApplicationGetAssign>>> {\n  return await get<IApiResult2<IApplicationGetAssign>>(\n    APPLICATIONS_BASE_URL.replace(\"{tenant}\", \"mvp\") + \"assign/\" + applicationFormId,\n    true\n  );\n}\n\n/**\n * Assign an application\n */\nexport async function assignApplication(\n  assignApplicationRequest: IApplicationAssign\n): Promise<IHttpResponse<IApiResult2<string[]>>> {\n  return await post<IApiResult2<string[]>>(\n    APPLICATIONS_BASE_URL.replace(\"{tenant}\", \"mvp\") + \"assign\",\n    assignApplicationRequest,\n    true\n  );\n}\n\n/**\n * Score an application\n */\nexport async function scoreApplication(\n  scoreApplicationRequest: IApplicationScoreRequest\n): Promise<IHttpResponse<IApiResult2<boolean>>> {\n  return await post<IApiResult2<boolean>>(\n    APPLICATIONS_BASE_URL.replace(\"{tenant}\", \"mvp\") + \"score\",\n    scoreApplicationRequest,\n    true\n  );\n}\n\n/**\n * Flag an application\n */\nexport async function flagApplication(\n  flagApplicationRequest: IApplicationFlagRequest\n): Promise<IHttpResponse<IApiResult2<boolean>>> {\n  return await post<IApiResult2<boolean>>(\n    APPLICATIONS_BASE_URL.replace(\"{tenant}\", \"mvp\") + \"flag\",\n    flagApplicationRequest,\n    true\n  );\n}\n\n/**\n * Manage an application\n */\nexport async function manageApplication(\n  manageApplicationRequest: IManageApplicationRequest\n): Promise<IHttpResponse<IApiResult2<string[]>>> {\n  return await post<IApiResult2<string[]>>(\n    APPLICATIONS_BASE_URL.replace(\"{tenant}\", TenantTypesEnum.MVP.toLowerCase()) +\n      \"manageApplication\",\n    manageApplicationRequest,\n    true\n  );\n}\n\n/**\n * Update the technology areas of an application\n */\nexport async function updateApplicationTechnologyArea(\n  updateApplicationTechnologyAreaRequest: IUpdateApplicationTechnologyAreaRequest\n): Promise<IHttpResponse<IApiResult2<string[]>>> {\n  return await post<IApiResult2<string[]>>(\n    APPLICATIONS_BASE_URL.replace(\"{tenant}\", TenantTypesEnum.MVP.toLowerCase()) +\n      \"updateTechnologyArea\",\n    updateApplicationTechnologyAreaRequest,\n    true\n  );\n}\n\n/**\n * Search all applications for the given text.\n */\nexport async function searchApplications(\n  searchRequest: IApplicationRequest\n): Promise<IHttpResponse<IApiResult2<IApplicationsDataResult>>> {\n  return await post<IApiResult2<IApplicationsDataResult>>(\n    APPLICATION_BASE_URL + \"search\",\n    searchRequest,\n    true\n  );\n}\n\n/**\n * Search all applications for the given text.\n */\nexport async function getApplications(\n  searchRequest: IApplicationsRequest,\n  tenant: string\n): Promise<IHttpResponse<IApiResult2<IApplicationsDataResult>>> {\n  const url = APPLICATIONS_BASE_URL.replace(\"{tenant}\", tenant);\n  return await post<IApiResult2<IApplicationsDataResult>>(url, searchRequest, true);\n}\n\nexport async function getActivitiesEventsByApplicationId(\n  request: IApplicationFormActivitiesEventsRequest,\n  tenant: string\n): Promise<\n  IHttpResponse<IApiResult2<IApplicationDetailsDataResult<IApplicationFormActivityEvent[]>>>\n> {\n  const url = APPLICATION_ACTIVITIES_EVENTS_URL.replace(\"{tenant}\", tenant);\n  return await post<IApiResult2<IApplicationDetailsDataResult<IApplicationFormActivityEvent[]>>>(\n    url,\n    request,\n    true\n  );\n}\n\nexport async function getActivitiesEventsByUserprofileId(\n  request: IUserprofileActivitiesEventsRequest,\n  tenant: string\n): Promise<\n  IHttpResponse<IApiResult2<IApplicationDetailsDataResult<IApplicationFormActivityEvent[]>>>\n> {\n  const url = USERPROFILE_ACTIVITIES_EVENTS_URL.replace(\"{tenant}\", tenant);\n  return await post<IApiResult2<IApplicationDetailsDataResult<IApplicationFormActivityEvent[]>>>(\n    url,\n    request,\n    true\n  );\n}\nexport async function getActivityEventById(\n  request: IActivityEventRequest\n): Promise<IHttpResponse<IApiResult2<IApplicationFormActivityEvent>>> {\n  return await get<IApiResult2<IApplicationFormActivityEvent>>(\n    ACTIVITY_EVENT_BASE_URL.replace(\"{contributionType}\", request.contributionType).replace(\n      \"{activityEventId}\",\n      request.activityEventId.toString()\n    ),\n    true\n  );\n}\n\n/**\n * Update an application's status\n */\nexport async function updateApplicationStatus(\n  eventStatus: IEventStatus\n): Promise<IHttpResponse<IApiResult2<IEventUpdateStatusDataResult>>> {\n  return await put<IApiResult2<IEventUpdateStatusDataResult>>(\n    APPLICATION_BASE_URL + \"UpdateEventStatus/\",\n    eventStatus,\n    true\n  );\n}\n\n/**\n * Download applications.\n */\nexport async function downloadApplicationsToCSV(\n  request: any,\n  tenant\n): Promise<IHttpResponse<IApiResult2<string>>> {\n  const url = `${APPLICATIONS_BASE_URL.replace(\"{tenant}\", tenant)}download`;\n  return await post<IApiResult2<string>>(url, request, true, false, {\n    method: \"POST\",\n    body: JSON.stringify(request),\n    headers: { \"Content-Type\": \"application/octet-stream\" },\n  });\n}\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n/* eslint-disable @typescript-eslint/explicit-function-return-type */\nimport { call, delay, put, race } from \"redux-saga/effects\";\n\nimport * as ApplicationConstants from \"../../Constants/ApplicationConstants\";\nimport * as applicationApi from \"../../Services/ApplicationApi\";\n\nimport { IApplicationAssign } from \"Interfaces/Application/IApplicationAssign\";\nimport { IApplicationFlagRequest } from \"Interfaces/Application/IApplicationFlagRequest\";\nimport { IApplicationGetAssign } from \"Interfaces/Application/IApplicationGetAssign\";\nimport { IApplicationGetAssignDataResult } from \"Interfaces/Application/IApplicationGetAssignDataResult\";\nimport { IApplicationListDataResult } from \"Interfaces/Application/IApplicationListDataResult\";\nimport { IApplicationResponse } from \"Interfaces/Application/IApplicationResponse\";\nimport { IApplicationScoreRequest } from \"Interfaces/Application/IApplicationScoreRequest\";\nimport { IApplicationsRequest } from \"Interfaces/Application/IApplicationsRequest\";\nimport { IFilterValue } from \"Interfaces/IFilterValue\";\n\nimport { HttpStatusCode } from \"../../Constants/HttpStatusCode\";\nimport { IApplicationDataResult } from \"../../Interfaces/Application/IApplicationDataResult\";\nimport { IApiErrorResult, IApiResult2 } from \"../../Interfaces/IApiResult\";\nimport { getDefaultApiTimeOutConfiguration } from \"../../Utility/Utils\";\nimport {\n  assignApplicationFail,\n  assignApplicationSuccess,\n  downloadApplicationsToCSVFail,\n  downloadApplicationsToCSVSuccess,\n  flagApplicationFail,\n  flagApplicationSuccess,\n  getAssignApplicationFail,\n  getAssignApplicationSuccess,\n  loadApplicationFail,\n  loadApplicationSuccess,\n  scoreApplicationFail,\n  scoreApplicationSuccess,\n  searchApplicationsFail,\n  searchApplicationsSuccess,\n  IAssignApplication,\n  IDownloadApplicationsToCSV,\n  IFlagApplication,\n  IGetAssignApplication,\n  ILoadApplication,\n  IScoreApplication,\n  ISearchApplications,\n} from \"./ApplicationAction\";\n\n/**\n * Updates the request body with filter values.\n * @param {IFilterValue[]} filterValues The list of filters.\n * @return {any} The request to be sent.\n */\nconst updateFilterValues = (filterValues: IFilterValue[]): any => {\n  const requestBody: any = {\n    applicationType: \"Any\",\n    applicationStatusList: [],\n    countryRegionList: [],\n    stateProvinceList: [],\n    technologyAreaList: [],\n    technologyAreaGroupList: [],\n    assignedToMe: false,\n    technologyAreaStatusList: [],\n    technologyAreaStatusReasonList: [],\n    flagReason: [],\n    cohort: undefined,\n    technologyAreaScoreList: [],\n  };\n\n  filterValues.forEach(function (item) {\n    switch (item.fieldName) {\n      case ApplicationConstants.APPLICATION_TYPE:\n        requestBody.applicationType = item.value;\n        break;\n      case ApplicationConstants.APPLICATION_STATUS:\n        requestBody.applicationStatusList.push(item.value);\n        break;\n      case ApplicationConstants.APPLICATION_COUNTRY_REGION:\n        requestBody.countryRegionList.push(item.value);\n        break;\n      case ApplicationConstants.APPLICATION_STATE_PROVINCE:\n        requestBody.stateProvinceList.push(item.value);\n        break;\n      case ApplicationConstants.TECHNOLOGY_AREA_GROUP:\n        requestBody.technologyAreaGroupList.push(item.value);\n        break;\n      case ApplicationConstants.TECHNOLOGY_AREA:\n        requestBody.technologyAreaList.push(item.value);\n        break;\n      case ApplicationConstants.ASSIGNED_TO:\n        requestBody.assignedToMe = item.value === ApplicationConstants.ME;\n        break;\n      case ApplicationConstants.TECHNOLOGY_AREA_STATUS:\n        requestBody.technologyAreaStatusList.push(item.value);\n        break;\n      case ApplicationConstants.TECHNOLOGY_AREA_STATUS_REASON:\n        requestBody.technologyAreaStatusReasonList.push(item.value);\n        break;\n      case ApplicationConstants.FLAG_REASON:\n        requestBody.flagReason.push(item.value);\n        break;\n      case ApplicationConstants.COHORT:\n        requestBody.cohort = item.value === ApplicationConstants.ANY ? undefined : item.value;\n        break;\n      case ApplicationConstants.TECHNOLOGY_AREA_SCORE:\n        requestBody.technologyAreaScoreList.push(item.value);\n        break;\n      default:\n        return;\n    }\n  });\n\n  return requestBody;\n};\n\n/**\n * Load an individual applications\n * @param {ILoadApplication} action for loading an application\n * @returns {void}\n */\nfunction* handleLoadApplication(action: ILoadApplication) {\n  const failedMessage = \"Failed to load the selected application.\";\n  const { selectedApplicationEmail } = action;\n\n  try {\n    const { result, timeout }: IApiResult2<IApplicationDataResult> | any = yield race({\n      result: call(applicationApi.getApplication, selectedApplicationEmail),\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\n    });\n\n    if (timeout) {\n      yield put(loadApplicationFail(ApplicationConstants.GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n\n    const application = result.parsedBody as IApplicationResponse;\n\n    switch (result.httpStatusCode) {\n      case HttpStatusCode.Ok:\n        yield put(loadApplicationSuccess(application.applicationForm));\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(loadApplicationFail((result.parsedBody as IApiErrorResult).error.message));\n        break;\n      default:\n        yield put(loadApplicationFail(failedMessage));\n        break;\n    }\n  } catch (error) {\n    yield put(loadApplicationFail(error));\n  }\n}\n\n/**\n * Load the existing application assignments and information\n * @param {IGetAssignApplication} action for loading an application\n * @returns {void}\n */\nfunction* handleLoadAssignApplication(action: IGetAssignApplication) {\n  const failedMessage = \"Failed to load the assignment information.\";\n  const { applicationFormId } = action;\n\n  try {\n    const { result, timeout }: IApiResult2<IApplicationGetAssignDataResult> | any = yield race({\n      result: call(applicationApi.getAssignApplication, applicationFormId),\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\n    });\n\n    if (timeout) {\n      yield put(getAssignApplicationFail(ApplicationConstants.GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n\n    const getAssignResult = result.parsedBody as IApplicationGetAssign;\n\n    switch (result.httpStatusCode) {\n      case HttpStatusCode.Ok:\n        yield put(getAssignApplicationSuccess(getAssignResult));\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(getAssignApplicationFail((result.parsedBody as IApiErrorResult).error.message));\n        break;\n      default:\n        yield put(getAssignApplicationFail(failedMessage));\n        break;\n    }\n  } catch (error) {\n    yield put(getAssignApplicationFail(error.message || error || failedMessage));\n  }\n}\n\n/**\n * Assigns the application to admins for technology areas.\n * @param {IAssignApplication} action for assigning an application\n * @returns {void}\n */\nfunction* handleAssignApplication(action: IAssignApplication) {\n  const failedMessage = \"Failed to assign the application.\";\n\n  const requestBody: IApplicationAssign = {\n    applicationFormId: action.applicationFormId,\n    applicationAssignees: action.technologyAssignments,\n  };\n\n  try {\n    const { result, timeout }: IApiResult2<string[]> | any = yield race({\n      // TODO: Update this IApiResult2<any> to use actual ApiResult type\n      result: call(applicationApi.assignApplication, requestBody),\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\n    });\n\n    if (timeout) {\n      yield put(assignApplicationFail(ApplicationConstants.GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n\n    switch (result.httpStatusCode) {\n      case HttpStatusCode.Ok:\n      case HttpStatusCode.CreatedAt:\n        yield put(assignApplicationSuccess());\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(assignApplicationFail((result.parsedBody as IApiErrorResult).error.message));\n        break;\n      default:\n        yield put(assignApplicationFail(failedMessage));\n        break;\n    }\n  } catch (error) {\n    yield put(assignApplicationFail(failedMessage));\n  }\n}\n\n/**\n * Scores the application to admins for a technology area.\n * @param {IScoreApplication} action for assigning an application\n * @returns {void}\n */\nfunction* handleScoreApplication(action: IScoreApplication) {\n  const failedMessage = \"Failed to score the application.\";\n\n  const request: IApplicationScoreRequest = {\n    applicationFormId: action.applicationFormId,\n    technologyFocusArea: action.technologyFocusArea,\n    score: action.score,\n    justification: action.justification,\n  };\n\n  try {\n    const { result, timeout }: IApiResult2<boolean> | any = yield race({\n      result: call(applicationApi.scoreApplication, request),\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\n    });\n\n    if (timeout) {\n      yield put(scoreApplicationFail(ApplicationConstants.GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n\n    switch (result.httpStatusCode) {\n      case HttpStatusCode.Ok:\n      case HttpStatusCode.CreatedAt:\n        yield put(scoreApplicationSuccess());\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(scoreApplicationFail((result.parsedBody as IApiErrorResult).error.message));\n        break;\n      default:\n        yield put(scoreApplicationFail(failedMessage));\n        break;\n    }\n  } catch (error) {\n    yield put(scoreApplicationFail(failedMessage));\n  }\n}\n\n/**\n * Flags the application for further review.\n * @param {IFlagApplication} action for flagging an application\n * @returns {void}\n */\nfunction* handleFlagApplication(action: IFlagApplication) {\n  const failedMessage = \"Failed to flag the application.\";\n\n  const request: IApplicationFlagRequest = {\n    applicationFormId: action.applicationFormId,\n    justification: action.justification,\n    flagReasonId: action.flagReasonId,\n  };\n\n  try {\n    const { result, timeout }: IApiResult2<boolean> | any = yield race({\n      result: call(applicationApi.flagApplication, request),\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\n    });\n\n    if (timeout) {\n      yield put(flagApplicationFail(ApplicationConstants.GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n\n    switch (result.httpStatusCode) {\n      case HttpStatusCode.Ok:\n      case HttpStatusCode.CreatedAt:\n        yield put(flagApplicationSuccess());\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(flagApplicationFail((result.parsedBody as IApiErrorResult).error.message));\n        break;\n      default:\n        yield put(flagApplicationFail(failedMessage));\n        break;\n    }\n  } catch (error) {\n    yield put(flagApplicationFail(failedMessage));\n  }\n}\n\n/**\n * Search all applications for given text\n * @param {ISearchApplications} action for searching applications\n * @returns {void}\n */\nfunction* handleSearchApplications(action: ISearchApplications) {\n  const failedMessage = \"Failed to search the applications.\";\n  const requestBody = {\n    applicationStatusList: [],\n    countryRegionList: [],\n    pageIndex: action.searchPage,\n    pageSize: action.pageSize,\n    searchKey: action.searchText,\n    stateProvinceList: [],\n    annualExceptionList: [],\n    applicationType: action.applicationType,\n    requestorEmailAddress: action.requestorEmailAddress,\n    technologyAreaList: [],\n    technologyAreaGroupList: [],\n    assignedToMe: false,\n    technologyAreaScoreList: [],\n    technologyAreaStatusList: [],\n    technologyAreaStatusReasonList: [],\n    flagReason: [],\n    cohort: undefined,\n    reviewStatusList: [],\n    availableCpmList: [],\n    sortColumn: action.sortColumn,\n    sortDescending: action.sortDescending,\n  } as unknown as IApplicationsRequest;\n\n  action.selectedApplicationsFilterValues.forEach(function (item) {\n    switch (item.fieldName) {\n      case ApplicationConstants.APPLICATION_STATUS:\n        requestBody.applicationStatusList.push(item.value);\n        break;\n      case ApplicationConstants.APPLICATION_COUNTRY_REGION:\n        requestBody.countryRegionList.push(item.value);\n        break;\n      case ApplicationConstants.APPLICATION_STATE_PROVINCE:\n        requestBody.stateProvinceList.push(item.value);\n        break;\n      case ApplicationConstants.GRANT_ANNUAL_EXCEPTION:\n        requestBody.annualExceptionList.push(item.value);\n        break;\n      case ApplicationConstants.TECHNOLOGY_AREA_GROUP:\n        requestBody.technologyAreaGroupList.push(item.value);\n        break;\n      case ApplicationConstants.TECHNOLOGY_AREA:\n        requestBody.technologyAreaList.push(item.value);\n        break;\n      case ApplicationConstants.ASSIGNED_TO:\n        requestBody.assignedToMe = item.value === ApplicationConstants.ME;\n        break;\n      case ApplicationConstants.TECHNOLOGY_AREA_SCORE:\n        requestBody.technologyAreaScoreList.push(item.value);\n        break;\n      case ApplicationConstants.TECHNOLOGY_AREA_STATUS:\n        requestBody.technologyAreaStatusList.push(item.value);\n        break;\n      case ApplicationConstants.TECHNOLOGY_AREA_STATUS_REASON:\n        requestBody.technologyAreaStatusReasonList.push(item.value);\n        break;\n      case ApplicationConstants.FLAG_REASON:\n        requestBody.flagReason.push(item.value);\n        break;\n      case ApplicationConstants.COHORT:\n        if (item.value !== ApplicationConstants.ANY) {\n          requestBody.cohort = item.value;\n        }\n        break;\n      case ApplicationConstants.REVIEW_STATUS:\n        if (item.value !== ApplicationConstants.ANY) {\n          requestBody.reviewStatusList.push(item.value);\n        }\n        break;\n      case ApplicationConstants.AVAILABLE_CPM_LIST:\n        if (item.value !== ApplicationConstants.ANY) {\n          requestBody.availableCpmList.push(item.value);\n        }\n      default:\n        return;\n    }\n  });\n  try {\n    const { result, timeout }: IApiResult2<IApplicationListDataResult> | any = yield race({\n      result: call(applicationApi.getApplications, requestBody, action.tenant.toLowerCase()),\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\n    });\n\n    if (timeout) {\n      yield put(searchApplicationsFail(ApplicationConstants.GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n\n    const parsedBody = result.parsedBody;\n\n    switch (result.httpStatusCode) {\n      case HttpStatusCode.Ok:\n        yield put(\n          searchApplicationsSuccess(\n            parsedBody.applicationForms,\n            action.searchPage,\n            action.pageSize,\n            parsedBody.filteredCount\n          )\n        );\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(searchApplicationsFail((result.parsedBody as IApiErrorResult).error.message));\n        break;\n      default:\n        yield put(searchApplicationsFail(failedMessage));\n        break;\n    }\n  } catch (error) {\n    yield put(searchApplicationsFail(error));\n  }\n}\n\n/**\n * Generator function to async dispatch action\n * @generator\n * @param {IRDDownloadToCSV} action To download user profiles.\n * @returns {void}\n */\nfunction* handleDownloadApplicationsToCSV(action: IDownloadApplicationsToCSV) {\n  const defaultFailedErrorMessage = \"Failed to download applications\";\n  const requestBody = updateFilterValues(action.selectedApplicationsFilterValues);\n  requestBody.searchKey = action.searchText === undefined ? \"\" : action.searchText;\n\n  try {\n    const { result, timeout } = yield race({\n      result: call(applicationApi.downloadApplicationsToCSV, requestBody, action.tenant),\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\n    });\n\n    if (timeout) {\n      yield put(downloadApplicationsToCSVFail(ApplicationConstants.GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n\n    const data = yield result.text();\n\n    switch (result.status) {\n      case HttpStatusCode.Ok:\n        yield put(downloadApplicationsToCSVSuccess(data));\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(downloadApplicationsToCSVFail((result.body as IApiErrorResult).error.message));\n        break;\n      default:\n        yield put(downloadApplicationsToCSVFail(defaultFailedErrorMessage));\n        break;\n    }\n  } catch (error) {\n    yield put(downloadApplicationsToCSVFail(defaultFailedErrorMessage));\n  }\n}\n\nexport {\n  handleDownloadApplicationsToCSV,\n  handleFlagApplication,\n  handleLoadApplication,\n  handleSearchApplications,\n  handleLoadAssignApplication,\n  handleAssignApplication,\n  handleScoreApplication,\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { call, delay, put, race } from \"redux-saga/effects\";\n\nimport * as applicationApi from \"Services/ApplicationApi\";\n\nimport { GENERIC_API_TIMEOUT_ERROR } from \"Constants/ApplicationConstants\";\nimport { FilterValueFieldNames } from \"Constants/FilterFields\";\nimport { HttpStatusCode } from \"Constants/HttpStatusCode\";\nimport {\n  IApplicationFormActivitiesEventsRequest,\n  IUserprofileActivitiesEventsRequest,\n} from \"Interfaces/Application/IActivitiesEventsRequest\";\nimport { IApplicationDetailsDataResult } from \"Interfaces/Application/IApplicationDetailsDataResult\";\nimport { IApplicationFlagResponse } from \"Interfaces/Application/IApplicationFlagResponse\";\nimport { IApplicationFormActivityEvent } from \"Interfaces/Application/IApplicationFormActivityEvent\";\nimport { IApplicationFormActivityEventList } from \"Interfaces/Application/IApplicationFormActivityEventList\";\nimport { IApplicationQuestionResponse } from \"Interfaces/Application/IApplicationQuestionResponse\";\nimport { IApplicationUserProfileInformation } from \"Interfaces/Application/IApplicationUserProfileInformation\";\nimport { IApiErrorResult, IApiResult2 } from \"Utility/IApiResult\";\nimport { getDefaultApiTimeOutConfiguration } from \"Utility/Utils\";\n\nimport {\n  fetchApplicationFlagsBySelectedApplicationIdFail,\n  fetchApplicationFlagsBySelectedApplicationIdSuccess,\n  getActivityEventByIdFail,\n  getActivityEventByIdSuccess,\n  getAdditionalActivitiesEventsBySelectedUserProfileIdFail,\n  getAdditionalActivitiesEventsBySelectedUserProfileIdSuccess,\n  getApplicationQuestionsBySelectedApplicationIdFail,\n  getApplicationQuestionsBySelectedApplicationIdSuccess,\n  getHighlightedActivitiesEventsBySelectedApplicationIdFail,\n  getHighlightedActivitiesEventsBySelectedApplicationIdSuccess,\n  getUserProfileBySelectedApplicationIdFail,\n  getUserProfileBySelectedApplicationIdSuccess,\n  updateApplicationStatusesAndRemoveFlagsFail,\n  updateApplicationStatusesAndRemoveFlagsSuccess,\n  updateApplicationTechnologyAreaAndResetScoresFail,\n  updateApplicationTechnologyAreaAndResetScoresSuccess,\n  IGetActivityEvent,\n  IGetAdditionalActivitiesEventsBySelectedUserprofileId,\n  IGetApplicationFlagsBySelectedApplicationId,\n  IGetApplicationQuestionsBySelectedApplicationId,\n  IGetHighlightedActivitiesEventsBySelectedApplicationId,\n  IGetUserProfileBySelectedApplicationId,\n  IUpdateApplicationStatusesAndRemoveFlags,\n  IUpdateApplicationTechnologyAreaAndResetScores,\n} from \"./ApplicationDetailsAction\";\n\n/**\n * Fetches the user profile information by application id\n * @param {IGetUserProfileBySelectedApplicationId} action for fetching an application by id\n * @returns {void}\n */\nfunction* handleUserProfileFetchByApplicationId(action: IGetUserProfileBySelectedApplicationId) {\n  const failedMessage = \"Failed to fetch the selected userprofile info by application id.\";\n  const { selectedApplicationId, tenant } = action;\n\n  try {\n    const {\n      result,\n      timeout,\n    }: IApiResult2<IApplicationDetailsDataResult<IApplicationUserProfileInformation>> | any =\n      yield race({\n        result: call(\n          applicationApi.getProfileInformationByApplicationId,\n          selectedApplicationId,\n          tenant\n        ),\n        timeout: delay(getDefaultApiTimeOutConfiguration()),\n      });\n\n    if (timeout) {\n      yield put(getUserProfileBySelectedApplicationIdFail(GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n    switch (result.httpStatusCode) {\n      case HttpStatusCode.Ok:\n        yield put(\n          getUserProfileBySelectedApplicationIdSuccess(\n            result.parsedBody as IApplicationUserProfileInformation\n          )\n        );\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(\n          getUserProfileBySelectedApplicationIdFail(\n            (result.parsedBody as IApiErrorResult).error.message\n          )\n        );\n        break;\n      default:\n        yield put(getUserProfileBySelectedApplicationIdFail(failedMessage));\n        break;\n    }\n  } catch (error) {\n    yield put(getUserProfileBySelectedApplicationIdFail(failedMessage));\n  }\n}\n\n/**\n * Fetches the application flags by application id\n * @param {IGetApplicationFlagsBySelectedApplicationId} action for fetching application flags by application form id\n * @returns {void}\n */\nfunction* handleFetchApplicationFlagsByApplicationId(\n  action: IGetApplicationFlagsBySelectedApplicationId\n) {\n  const failedMessage = \"Failed to fetch the selected application flags by application id.\";\n  const { selectedApplicationId } = action;\n\n  try {\n    const {\n      result,\n      timeout,\n    }: IApiResult2<IApplicationDetailsDataResult<IApplicationFlagResponse[]>> | any = yield race({\n      result: call(applicationApi.getApplicationFlagsByApplicationId, selectedApplicationId),\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\n    });\n\n    if (timeout) {\n      yield put(fetchApplicationFlagsBySelectedApplicationIdFail(GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n\n    switch (result.httpStatusCode) {\n      case HttpStatusCode.Ok:\n        yield put(\n          fetchApplicationFlagsBySelectedApplicationIdSuccess(\n            result.parsedBody as IApplicationFlagResponse[]\n          )\n        );\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(\n          fetchApplicationFlagsBySelectedApplicationIdFail(\n            (result.parsedBody as IApiErrorResult).error.message\n          )\n        );\n        break;\n      default:\n        yield put(fetchApplicationFlagsBySelectedApplicationIdFail(failedMessage));\n        break;\n    }\n  } catch (error) {\n    yield put(fetchApplicationFlagsBySelectedApplicationIdFail(failedMessage));\n  }\n}\n\n/**\n * Fetches the application questions by application id\n * @param {IGetApplicationQuestionsBySelectedApplicationId} action for fetching an application by id\n * @returns {void}\n */\nfunction* handleApplicationQuestionsFetchByApplicationId(\n  action: IGetApplicationQuestionsBySelectedApplicationId\n) {\n  const failedMessage = \"Failed to fetch the selected application questions by application id.\";\n  const { selectedApplicationId, tenant } = action;\n\n  try {\n    const {\n      result,\n      timeout,\n    }: IApiResult2<IApplicationDetailsDataResult<IApplicationQuestionResponse[]>> | any =\n      yield race({\n        result: call(\n          applicationApi.getApplicationQuestionsByApplicationId,\n          selectedApplicationId,\n          tenant\n        ),\n        timeout: delay(getDefaultApiTimeOutConfiguration()),\n      });\n\n    if (timeout) {\n      yield put(getApplicationQuestionsBySelectedApplicationIdFail(GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n\n    switch (result.httpStatusCode) {\n      case HttpStatusCode.Ok:\n        yield put(\n          getApplicationQuestionsBySelectedApplicationIdSuccess(\n            result.parsedBody as IApplicationQuestionResponse[]\n          )\n        );\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(\n          getApplicationQuestionsBySelectedApplicationIdFail(\n            (result.parsedBody as IApiErrorResult).error.message\n          )\n        );\n        break;\n      default:\n        yield put(getApplicationQuestionsBySelectedApplicationIdFail(failedMessage));\n        break;\n    }\n  } catch (error) {\n    yield put(getApplicationQuestionsBySelectedApplicationIdFail(failedMessage));\n  }\n}\n\n/**\n * Fetches the highlighted activities or events by application id\n * @param {IGetHighlightedActivitiesEventsBySelectedApplicationId} action for fetching activities or events by application id\n * @returns {void}\n */\nfunction* handleHighlightedActivitiesEventsFetchByApplicationId(\n  action: IGetHighlightedActivitiesEventsBySelectedApplicationId\n) {\n  const failedMessage = \"Failed to fetch the highlighted activities or events by application id.\";\n  const {\n    applicationId,\n    pageIndex,\n    pageSize,\n    selectedFilterValues,\n    tenant,\n    sortFieldName,\n    isDescendingSort,\n  } = action;\n  const requestBody: IApplicationFormActivitiesEventsRequest = {\n    applicationFormId: applicationId,\n    pageIndex,\n    pageSize,\n    contributionTypes: [],\n    awardCategories: [],\n    technologyAreas: [],\n    activityOrEventTypes: [],\n    tenant,\n    sortFieldName,\n    isDescendingSort,\n  };\n\n  selectedFilterValues.forEach((item) => {\n    switch (item.fieldName) {\n      case FilterValueFieldNames.ACTIVITY_OR_EVENT:\n        requestBody.contributionTypes.push(item.value);\n        break;\n      case FilterValueFieldNames.TECHNOLOGY_AREA_GROUP:\n        requestBody.awardCategories.push(item.value);\n        break;\n      case FilterValueFieldNames.TECHNOLOGY_AREA:\n        requestBody.technologyAreas.push(item.value);\n        break;\n      case FilterValueFieldNames.ACTIVITY_OR_EVENT_TYPE:\n        requestBody.activityOrEventTypes.push(item.value);\n        break;\n      default:\n        return;\n    }\n  });\n\n  try {\n    const {\n      result,\n      timeout,\n    }: IApiResult2<IApplicationDetailsDataResult<IApplicationFormActivityEventList>> | any =\n      yield race({\n        result: call(applicationApi.getActivitiesEventsByApplicationId, requestBody, tenant),\n        timeout: delay(getDefaultApiTimeOutConfiguration()),\n      });\n\n    if (timeout) {\n      yield put(\n        getHighlightedActivitiesEventsBySelectedApplicationIdFail(GENERIC_API_TIMEOUT_ERROR)\n      );\n      return;\n    }\n\n    switch (result.httpStatusCode) {\n      case HttpStatusCode.Ok:\n        yield put(\n          getHighlightedActivitiesEventsBySelectedApplicationIdSuccess(\n            result.parsedBody as IApplicationFormActivityEventList\n          )\n        );\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(\n          getHighlightedActivitiesEventsBySelectedApplicationIdFail(\n            (result.parsedBody as IApiErrorResult).error.message\n          )\n        );\n        break;\n      default:\n        yield put(getHighlightedActivitiesEventsBySelectedApplicationIdFail(failedMessage));\n        break;\n    }\n  } catch (error) {\n    yield put(getHighlightedActivitiesEventsBySelectedApplicationIdFail(failedMessage));\n  }\n}\n\n/**\n * Fetches the additional activities or events by userprofile id\n * @param {IGetAdditionalActivitiesEventsBySelectedUserprofileId} action for fetching activities or events by userprofile id\n * @returns {void}\n */\nfunction* handleAdditionalActivitiesEventsFetchByUserprofileId(\n  action: IGetAdditionalActivitiesEventsBySelectedUserprofileId\n) {\n  const failedMessage = \"Failed to fetch the additional activities or events by userprofile id.\";\n  const {\n    userprofileId,\n    pageIndex,\n    pageSize,\n    selectedFilterValues,\n    tenant,\n    sortFieldName,\n    isDescendingSort,\n  } = action;\n  const requestBody: IUserprofileActivitiesEventsRequest = {\n    userprofileId,\n    pageIndex,\n    pageSize,\n    contributionTypes: [],\n    awardCategories: [],\n    technologyAreas: [],\n    activityOrEventTypes: [],\n    tenant,\n    sortFieldName,\n    isDescendingSort,\n  };\n\n  selectedFilterValues.forEach((item) => {\n    switch (item.fieldName) {\n      case FilterValueFieldNames.ACTIVITY_OR_EVENT:\n        requestBody.contributionTypes.push(item.value);\n        break;\n      case FilterValueFieldNames.TECHNOLOGY_AREA_GROUP:\n        requestBody.awardCategories.push(item.value);\n        break;\n      case FilterValueFieldNames.TECHNOLOGY_AREA:\n        requestBody.technologyAreas.push(item.value);\n        break;\n      case FilterValueFieldNames.ACTIVITY_OR_EVENT_TYPE:\n        requestBody.activityOrEventTypes.push(item.value);\n        break;\n      default:\n        return;\n    }\n  });\n\n  try {\n    const {\n      result,\n      timeout,\n    }: IApiResult2<IApplicationDetailsDataResult<IApplicationFormActivityEventList>> | any =\n      yield race({\n        result: call(applicationApi.getActivitiesEventsByUserprofileId, requestBody, tenant),\n        timeout: delay(getDefaultApiTimeOutConfiguration()),\n      });\n\n    if (timeout) {\n      yield put(\n        getAdditionalActivitiesEventsBySelectedUserProfileIdFail(GENERIC_API_TIMEOUT_ERROR)\n      );\n      return;\n    }\n\n    switch (result.httpStatusCode) {\n      case HttpStatusCode.Ok:\n        yield put(\n          getAdditionalActivitiesEventsBySelectedUserProfileIdSuccess(\n            result.parsedBody as IApplicationFormActivityEventList\n          )\n        );\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(\n          getAdditionalActivitiesEventsBySelectedUserProfileIdFail(\n            (result.parsedBody as IApiErrorResult).error.message\n          )\n        );\n        break;\n      default:\n        yield put(getAdditionalActivitiesEventsBySelectedUserProfileIdFail(failedMessage));\n        break;\n    }\n  } catch (error) {\n    yield put(getAdditionalActivitiesEventsBySelectedUserProfileIdFail(failedMessage));\n  }\n}\n\nfunction* handleActivityEventFetchById(action: IGetActivityEvent) {\n  const failedMessage = \"Failed to fetch the selected activity or event id.\";\n  const { activityEventId, contributionType } = action;\n\n  try {\n    const {\n      result,\n      timeout,\n    }: IApiResult2<IApplicationDetailsDataResult<IApplicationFormActivityEvent>> | any = yield race(\n      {\n        result: call(applicationApi.getActivityEventById, { activityEventId, contributionType }),\n        timeout: delay(getDefaultApiTimeOutConfiguration()),\n      }\n    );\n\n    if (timeout) {\n      yield put(getActivityEventByIdFail(GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n\n    switch (result.httpStatusCode) {\n      case HttpStatusCode.Ok:\n        yield put(getActivityEventByIdSuccess(result.parsedBody as IApplicationFormActivityEvent));\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(getActivityEventByIdFail((result.parsedBody as IApiErrorResult).error.message));\n        break;\n      default:\n        yield put(getActivityEventByIdFail(failedMessage));\n        break;\n    }\n  } catch (error) {\n    yield put(getActivityEventByIdFail(failedMessage));\n  }\n}\n\nfunction* handleUpdateApplicationStatusesAndRemoveFlags(\n  action: IUpdateApplicationStatusesAndRemoveFlags\n) {\n  const failedMessage = \"Failed to update the application status and/or remove flags.\";\n  const { applicationFormId, technologyFocusAreaStatuses, removeFlags, justification } = action;\n\n  try {\n    const {\n      result,\n      timeout,\n    }: IApiResult2<IApplicationDetailsDataResult<IApplicationFormActivityEvent>> | any = yield race(\n      {\n        result: call(applicationApi.manageApplication, {\n          applicationFormId,\n          technologyFocusAreaStatuses,\n          removeFlags,\n          justification,\n        }),\n        timeout: delay(getDefaultApiTimeOutConfiguration()),\n      }\n    );\n\n    if (timeout) {\n      yield put(updateApplicationStatusesAndRemoveFlagsFail(GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n\n    switch (result.httpStatusCode) {\n      case HttpStatusCode.Ok:\n        yield put(updateApplicationStatusesAndRemoveFlagsSuccess());\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(\n          updateApplicationStatusesAndRemoveFlagsFail(\n            (result.parsedBody as IApiErrorResult).error.message\n          )\n        );\n        break;\n      default:\n        yield put(updateApplicationStatusesAndRemoveFlagsFail(failedMessage));\n        break;\n    }\n  } catch (error) {\n    yield put(updateApplicationStatusesAndRemoveFlagsFail(failedMessage));\n  }\n}\n\nfunction* handleUpdateApplicationTechnologyAreaAndResetScores(\n  action: IUpdateApplicationTechnologyAreaAndResetScores\n) {\n  const failedMessage = \"Failed to update the application technology area and/or reset scores.\";\n  const { applicationFormId, technologyFocusAreas, justification } = action;\n\n  try {\n    const {\n      result,\n      timeout,\n    }: IApiResult2<IApplicationDetailsDataResult<IApplicationFormActivityEvent>> | any = yield race(\n      {\n        result: call(applicationApi.updateApplicationTechnologyArea, {\n          applicationFormId,\n          applicationFormTechnologyFocusAreas: technologyFocusAreas,\n          justification,\n        }),\n        timeout: delay(getDefaultApiTimeOutConfiguration()),\n      }\n    );\n\n    if (timeout) {\n      yield put(updateApplicationTechnologyAreaAndResetScoresFail(GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n\n    switch (result.httpStatusCode) {\n      case HttpStatusCode.Ok:\n        yield put(updateApplicationTechnologyAreaAndResetScoresSuccess());\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(\n          updateApplicationTechnologyAreaAndResetScoresFail(\n            (result.parsedBody as IApiErrorResult).error.message\n          )\n        );\n        break;\n      default:\n        yield put(updateApplicationTechnologyAreaAndResetScoresFail(failedMessage));\n        break;\n    }\n  } catch (error) {\n    yield put(updateApplicationTechnologyAreaAndResetScoresFail(failedMessage));\n  }\n}\n\nexport {\n  handleActivityEventFetchById,\n  handleFetchApplicationFlagsByApplicationId,\n  handleUserProfileFetchByApplicationId,\n  handleApplicationQuestionsFetchByApplicationId,\n  handleAdditionalActivitiesEventsFetchByUserprofileId,\n  handleHighlightedActivitiesEventsFetchByApplicationId,\n  handleUpdateApplicationStatusesAndRemoveFlags,\n  handleUpdateApplicationTechnologyAreaAndResetScores,\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { call, delay, put, race } from \"redux-saga/effects\";\n\nimport * as siteContentApi from \"../../Services/SiteContentApi\";\n\nimport { IGetAwardPeriodOkResult } from \"Services/Interfaces/SiteContent/IGetAwardPeriodOkResult\";\nimport { IGetAwardPeriodResult } from \"Services/Interfaces/SiteContent/IGetAwardPeriodResults\";\n\nimport { GENERIC_API_TIMEOUT_ERROR } from \"../../Constants/ApplicationConstants\";\nimport { HttpStatusCode } from \"../../Constants/HttpStatusCode\";\nimport { IApiErrorResult, IApiResult2 } from \"../../Utility/IApiResult\";\nimport { getDefaultApiTimeOutConfiguration } from \"../../Utility/Utils\";\nimport {\n  getAwardPeriodsFailure,\n  getAwardPeriodsSuccess,\n  IGetAwardPeriods,\n} from \"./AwardPeriodAction\";\n\n/**\n * Handle load cl regions.\n * NOTE: Errors need to be caught and handled by the caller as since this is just a util, there is no telemetry instance.\n * @returns {void} void.\n */\nfunction* handleLoadAwardPeriods(action: IGetAwardPeriods) {\n  try {\n    const { result, timeout }: IApiResult2<IGetAwardPeriodResult> | any = yield race({\n      result: call(siteContentApi.fetchAwardPeriodList, action.tenant),\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\n    });\n\n    if (timeout) {\n      yield put(getAwardPeriodsFailure(GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n\n    switch (result.httpStatusCode) {\n      case HttpStatusCode.Ok:\n        yield put(\n          getAwardPeriodsSuccess((result.parsedBody as IGetAwardPeriodOkResult).awardPeriods)\n        );\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(getAwardPeriodsFailure((result.parsedBody as IApiErrorResult).error.message));\n        break;\n      case HttpStatusCode.NotFound:\n        yield put(getAwardPeriodsFailure((result.parsedBody as IApiErrorResult).error.message));\n        break;\n      default:\n        yield put(getAwardPeriodsFailure((result.parsedBody as IApiErrorResult).error.message));\n        break;\n    }\n  } catch (error) {\n    yield put(getAwardPeriodsFailure(error.message));\n  }\n}\n\nexport { handleLoadAwardPeriods };\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { call, delay, put, race } from \"redux-saga/effects\";\n\nimport * as siteContentApi from \"Services/SiteContentApi\";\nimport { IGetAwardKitSkuOkResult } from \"Services/Interfaces/SiteContent/IGetAwardKitSkuOkResult\";\nimport { IGetAwardKitSkuResult } from \"Services/Interfaces/SiteContent/IGetAwardKitSkuResults\";\n\nimport { GENERIC_API_TIMEOUT_ERROR } from \"Constants/ApplicationConstants\";\nimport { HttpStatusCode } from \"Constants/HttpStatusCode\";\n\nimport { IApiErrorResult, IApiResult2 } from \"Utility/IApiResult\";\nimport { getDefaultApiTimeOutConfiguration } from \"Utility/Utils\";\n\nimport { getAwardKitSkuSuccess, getAwardKitSkuFailure, IGetAwardKitSku } from \"./AwardKitSkuAction\";\n\n/**\n * Handle load award kit sku.\n * @returns {void} void.\n */\nfunction* handleLoadAwardKitSku(action: IGetAwardKitSku) {\n  try {\n    const { result, timeout }: IApiResult2<IGetAwardKitSkuResult> | any = yield race({\n      result: call(siteContentApi.fetchAwardKitSkuList),\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\n    });\n\n    if (timeout) {\n      yield put(getAwardKitSkuFailure(GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n\n    switch (result.httpStatusCode) {\n      case HttpStatusCode.Ok:\n        yield put(getAwardKitSkuSuccess((result.parsedBody as IGetAwardKitSkuOkResult).skuLists));\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(getAwardKitSkuFailure((result.parsedBody as IApiErrorResult).error.message));\n        break;\n      case HttpStatusCode.NotFound:\n        yield put(getAwardKitSkuFailure((result.parsedBody as IApiErrorResult).error.message));\n        break;\n      default:\n        yield put(getAwardKitSkuFailure((result.parsedBody as IApiErrorResult).error.message));\n        break;\n    }\n  } catch (error) {\n    yield put(getAwardKitSkuFailure(error.message));\n  }\n}\n\nexport { handleLoadAwardKitSku };\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { IAzureBenefitApproveOrDeclineRequest } from \"Interfaces/AzureBenefitRequests/IAzureBenefitApproveOrDeclineRequest\";\nimport { IAzureBenefitApproveOrDeclineRequestDataResult } from \"Interfaces/AzureBenefitRequests/IAzureBenefitApproveOrDeclineRequestDataResult\";\nimport { IAzureBenefitRequestDetailsDataResult } from \"Interfaces/AzureBenefitRequests/IAzureBenefitRequestDetailsDataResult\";\nimport { IAzureBenefitRequestsDataResult } from \"Interfaces/AzureBenefitRequests/IAzureBenefitRequestsDataResult\";\nimport { IAzureBenefitRequestsRequest } from \"Interfaces/AzureBenefitRequests/IAzureBenefitRequestsRequest\";\n\nimport { MVP_AZURE_BENEFIT_BASE_URL, RD_AZURE_BENEFIT_BASE_URL } from \"../Constants/SagaConstants\";\nimport { IApiResult2 } from \"../Interfaces/IApiResult\";\nimport { get, post, put, IHttpResponse } from \"./ApiUtils\";\n\n/**\n * Search all azure benefit requests for mvp.\n */\nexport async function searchMvpAzureBenefitRequests(\n  searchRequest: IAzureBenefitRequestsRequest\n): Promise<IHttpResponse<IApiResult2<IAzureBenefitRequestsDataResult>>> {\n  const url = MVP_AZURE_BENEFIT_BASE_URL + \"/search\";\n  return await post<IApiResult2<IAzureBenefitRequestsDataResult>>(url, searchRequest, true);\n}\n\n/**\n * Search all azure benefit requests for rd.\n */\nexport async function searchRdAzureBenefitRequests(\n  searchRequest: IAzureBenefitRequestsRequest\n): Promise<IHttpResponse<IApiResult2<IAzureBenefitRequestsDataResult>>> {\n  const url = RD_AZURE_BENEFIT_BASE_URL + \"/search\";\n  return await post<IApiResult2<IAzureBenefitRequestsDataResult>>(url, searchRequest, true);\n}\n\n/**\n * Get azure benefit request details for mvp.\n */\nexport async function getMvpAzureRequestDetails(\n  userProfileId: number\n): Promise<IHttpResponse<IApiResult2<IAzureBenefitRequestDetailsDataResult>>> {\n  const url = MVP_AZURE_BENEFIT_BASE_URL + \"/request/\" + userProfileId;\n  return await get<IApiResult2<IAzureBenefitRequestDetailsDataResult>>(url, true);\n}\n\n/**\n * Get azure benefit request details for an rd.\n */\nexport async function getRdAzureRequestDetails(\n  userProfileId: number\n): Promise<IHttpResponse<IApiResult2<IAzureBenefitRequestDetailsDataResult>>> {\n  const url = RD_AZURE_BENEFIT_BASE_URL + \"/request/\" + userProfileId;\n  return await get<IApiResult2<IAzureBenefitRequestDetailsDataResult>>(url, true);\n}\n\n/**\n * Approve or deny an azure benefit request for mvp.\n */\nexport async function approveOrDeclineMvpAzureBenefitRequest(\n  approveOrDeclineRequest: IAzureBenefitApproveOrDeclineRequest\n): Promise<IHttpResponse<IApiResult2<IAzureBenefitApproveOrDeclineRequestDataResult>>> {\n  const url = MVP_AZURE_BENEFIT_BASE_URL + \"/review\";\n  return await put<IApiResult2<IAzureBenefitApproveOrDeclineRequestDataResult>>(\n    url,\n    approveOrDeclineRequest,\n    true\n  );\n}\n\n/**\n * Approve or deny an azure benefit request for rd.\n */\nexport async function approveOrDeclineRdAzureBenefitRequest(\n  approveOrDeclineRequest: IAzureBenefitApproveOrDeclineRequest\n): Promise<IHttpResponse<IApiResult2<IAzureBenefitApproveOrDeclineRequestDataResult>>> {\n  const url = RD_AZURE_BENEFIT_BASE_URL + \"/review\";\n  return await put<IApiResult2<IAzureBenefitApproveOrDeclineRequestDataResult>>(\n    url,\n    approveOrDeclineRequest,\n    true\n  );\n}\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n/* eslint-disable @typescript-eslint/explicit-function-return-type */\n\nimport { call, delay, put, race } from \"redux-saga/effects\";\n\nimport * as azureBenefitApi from \"Services/AzureBenefitApi\";\n\nimport { GENERIC_API_TIMEOUT_ERROR } from \"Constants/ApplicationConstants\";\nimport { HttpStatusCode } from \"Constants/HttpStatusCode\";\nimport { TenantTypesEnum } from \"Constants/TenantTypes\";\nimport { IAzureBenefitApproveOrDeclineRequestDataResult } from \"Interfaces/AzureBenefitRequests/IAzureBenefitApproveOrDeclineRequestDataResult\";\nimport { IAzureBenefitRequestDetailsDataResult } from \"Interfaces/AzureBenefitRequests/IAzureBenefitRequestDetailsDataResult\";\nimport { IAzureBenefitRequestDetailsResult } from \"Interfaces/AzureBenefitRequests/IAzureBenefitRequestDetailsResult\";\nimport { IAzureBenefitRequestsDataResult } from \"Interfaces/AzureBenefitRequests/IAzureBenefitRequestsDataResult\";\nimport { IAzureBenefitRequestsResult } from \"Interfaces/AzureBenefitRequests/IAzureBenefitRequestsResult\";\nimport { getDefaultApiTimeOutConfiguration } from \"Utility/Utils\";\n\nimport { IApiErrorResult, IApiResult2 } from \"../../Interfaces/IApiResult\";\nimport {\n  approveOrDeclineAzureBenefitRequestFailure,\n  approveOrDeclineAzureBenefitRequestSuccess,\n  getAzureBenefitRequestDetailsFail,\n  getAzureBenefitRequestDetailsSuccess,\n  searchAzureBenefitRequestsFail,\n  searchAzureBenefitRequestsSuccess,\n  IGetAzureBenefitRequestDetails,\n  ISearchAzureBenefitRequests,\n} from \"./AzureBenefitRequestsAction\";\n\n/**\n * Search all benefits for given text\n * @param {ISearchAzureBenefitRequests} action for searching benefits\n * @returns {void}\n */\nfunction* handleSearchAzureBenefitRequests(action: ISearchAzureBenefitRequests) {\n  const failedMessage = \"Failed to search azure benefit requests.\";\n  const requestBody = {\n    searchKey: action.searchText,\n    pageIndex: action.pageIndex,\n    pageSize: action.pageSize,\n  } as unknown as any;\n\n  action.selectedRequestsFilterValues.forEach(function (item) {\n    switch (item.fieldName) {\n      case \"expedited\":\n        requestBody.expedited = item.value;\n        break;\n    }\n  });\n\n  const apiEndpoint =\n    action.tenant === TenantTypesEnum.MVP.toLowerCase()\n      ? azureBenefitApi.searchMvpAzureBenefitRequests\n      : azureBenefitApi.searchRdAzureBenefitRequests;\n\n  try {\n    const { result, timeout }: IApiResult2<IAzureBenefitRequestsDataResult> | any = yield race({\n      result: call(apiEndpoint, requestBody),\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\n    });\n\n    if (timeout) {\n      yield put(searchAzureBenefitRequestsFail(GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n\n    const parsedBody = result.parsedBody as IAzureBenefitRequestsResult;\n\n    switch (result.httpStatusCode) {\n      case HttpStatusCode.Ok:\n        yield put(\n          searchAzureBenefitRequestsSuccess(\n            parsedBody.requests,\n            action.pageIndex,\n            action.pageSize,\n            parsedBody.filteredCount\n          )\n        );\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(\n          searchAzureBenefitRequestsFail((result.parsedBody as IApiErrorResult).error.message)\n        );\n        break;\n      default:\n        yield put(searchAzureBenefitRequestsFail(failedMessage));\n        break;\n    }\n  } catch (error) {\n    yield put(searchAzureBenefitRequestsFail(error));\n  }\n}\n\n/**\n * Get azure benefit request details.\n * @param {IGetAzureBenefitRequestDetails} action for getting azure benefit request details\n * @returns {void}\n */\nfunction* handleGetAzureBenefitRequestDetails(action: IGetAzureBenefitRequestDetails) {\n  const failedMessage = \"Failed to get azure benefit request details.\";\n\n  const apiEndpoint =\n    action.tenant === TenantTypesEnum.MVP.toLowerCase()\n      ? azureBenefitApi.getMvpAzureRequestDetails\n      : azureBenefitApi.getRdAzureRequestDetails;\n\n  try {\n    const { result, timeout }: IApiResult2<IAzureBenefitRequestDetailsDataResult> | any =\n      yield race({\n        result: call(apiEndpoint, action.userProfileId),\n        timeout: delay(getDefaultApiTimeOutConfiguration()),\n      });\n\n    if (timeout) {\n      yield put(getAzureBenefitRequestDetailsFail(GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n\n    const parsedBody = result.parsedBody as IAzureBenefitRequestDetailsResult;\n\n    switch (result.httpStatusCode) {\n      case HttpStatusCode.Ok:\n        yield put(\n          getAzureBenefitRequestDetailsSuccess(\n            parsedBody.questionAnswerMap,\n            parsedBody.expedited,\n            parsedBody?.expeditedDate\n          )\n        );\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(\n          getAzureBenefitRequestDetailsFail((result.parsedBody as IApiErrorResult).error.message)\n        );\n        break;\n      default:\n        yield put(getAzureBenefitRequestDetailsFail(failedMessage));\n        break;\n    }\n  } catch (error) {\n    yield put(getAzureBenefitRequestDetailsFail(error));\n  }\n}\n\n/**\n * Approve or deny azure benefit request.\n * @param {IGetAzureBenefitRequestDetails} action for updating azure benefit request approved status.\n * @returns {void}\n */\nfunction* handleApproveOrDenyAzureBenefitRequest(action: any) {\n  const failedMessage = \"Failed to approve or deny the azure benefit request.\";\n\n  const apiEndpoint =\n    action.tenant === TenantTypesEnum.MVP.toLowerCase()\n      ? azureBenefitApi.approveOrDeclineMvpAzureBenefitRequest\n      : azureBenefitApi.approveOrDeclineRdAzureBenefitRequest;\n\n  try {\n    const { result, timeout }: IApiResult2<IAzureBenefitApproveOrDeclineRequestDataResult> | any =\n      yield race({\n        result: call(apiEndpoint, action),\n        timeout: delay(getDefaultApiTimeOutConfiguration()),\n      });\n\n    if (timeout) {\n      yield put(approveOrDeclineAzureBenefitRequestFailure(GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n\n    const parsedBody = result.parsedBody; // result is either true or false\n\n    switch (result.httpStatusCode) {\n      case HttpStatusCode.Ok:\n        yield put(approveOrDeclineAzureBenefitRequestSuccess(parsedBody));\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(\n          approveOrDeclineAzureBenefitRequestFailure(\n            (result.parsedBody as IApiErrorResult).error.message\n          )\n        );\n        break;\n      default:\n        yield put(approveOrDeclineAzureBenefitRequestFailure(failedMessage));\n        break;\n    }\n  } catch (error) {\n    yield put(approveOrDeclineAzureBenefitRequestFailure(error.message));\n  }\n}\n\nexport {\n  handleApproveOrDenyAzureBenefitRequest,\n  handleGetAzureBenefitRequestDetails,\n  handleSearchAzureBenefitRequests,\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { IBenefitsDataResult } from \"Interfaces/Benefits/IBenefitsDataResult\";\nimport { IBenefitsRequest } from \"Interfaces/Benefits/IBenefitsRequest\";\n\nimport { BENEFIT_BASE_URL } from \"../Constants/SagaConstants\";\nimport { IApiResult2 } from \"../Interfaces/IApiResult\";\nimport { post, IHttpResponse } from \"./ApiUtils\";\n\n/**\n * Search all events for the given text.\n */\nexport async function searchBenefits(\n  searchRequest: IBenefitsRequest,\n  tenant: string\n): Promise<IHttpResponse<IApiResult2<IBenefitsDataResult>>> {\n  const url = BENEFIT_BASE_URL.replace(\"{tenant}\", tenant) + \"search\";\n  return await post<IApiResult2<IBenefitsDataResult>>(url, searchRequest, true);\n}\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n/* eslint-disable @typescript-eslint/explicit-function-return-type */\n\nimport { call, delay, put, race } from \"redux-saga/effects\";\n\nimport * as BenefitConstants from \"../../Constants/BenefitConstants\";\nimport * as benefitApi from \"../../Services/BenefitApi\";\n\nimport { GENERIC_API_TIMEOUT_ERROR } from \"Constants/ApplicationConstants\";\nimport { HttpStatusCode } from \"Constants/HttpStatusCode\";\nimport { IBenefitsDataResult } from \"Interfaces/Benefits/IBenefitsDataResult\";\nimport { IBenefitsRequest } from \"Interfaces/Benefits/IBenefitsRequest\";\nimport { IBenefitsResult } from \"Interfaces/Benefits/IBenefitsResult\";\nimport { IFilterValue } from \"Interfaces/IFilterValue\";\nimport { getDefaultApiTimeOutConfiguration } from \"Utility/Utils\";\n\nimport { IApiErrorResult, IApiResult2 } from \"../../Interfaces/IApiResult\";\nimport { searchBenefitsFail, searchBenefitsSuccess, ISearchBenefits } from \"./BenefitAction\";\n\n/**\n * Search all benefits for given text\n * @param {ISearchBenefits} action for searching benefits\n * @returns {void}\n */\nfunction* handleSearchBenefits(action: ISearchBenefits) {\n  const failedMessage = \"Failed to search the benefits.\";\n  const requestBody = ({\n    benefitName: action.benefitName,\n    searchKey: action.searchText,\n    pageIndex: action.searchPage,\n    pageSize: action.pageSize,\n    benefitStatusList: [],\n    claimedFrom: undefined,\n    claimedTo: undefined,\n    uploadedFrom: undefined,\n    uploadedTo: undefined,\n    expirationStartDate: undefined,\n    expirationEndDate: undefined,\n    countryCodePool: undefined,\n    sku: undefined,\n    levelStatusName: undefined,\n  } as unknown) as IBenefitsRequest;\n\n  /**\n   * Handle default filter request for O365/MS365/Teams Benefits.\n   * Country-Code-Pool filter should have value (O365/MS365/Teams) by default\n   */\n  if ([\"M365\", \"Teams\", \"MS365\"].includes(action.benefitName)) {\n    const findCountryCodeIndex = action.selectedBenefitsFilterValues.findIndex(\n      (x: IFilterValue) => x.fieldName == BenefitConstants.COUNTRY_CODE_POOL\n    );\n    if (findCountryCodeIndex < 0) {\n      requestBody.countryCodePool =\n        action.benefitName == BenefitConstants.BenefitNameEnum.M365\n          ? BenefitConstants.BenefitNameEnum.O365\n          : action.benefitName;\n    }\n  }\n\n  action.selectedBenefitsFilterValues.forEach(function (item) {\n    switch (item.fieldName) {\n      case BenefitConstants.BENEFIT_STATUS:\n        requestBody.benefitStatusList.push(item.value);\n        break;\n      case BenefitConstants.CLAIMED_FROM:\n        requestBody.claimedFrom = new Date(item.value);\n        break;\n      case BenefitConstants.CLAIMED_TO:\n        requestBody.claimedTo = new Date(item.value);\n        break;\n      case BenefitConstants.UPLOADED_FROM:\n        requestBody.uploadedFrom = new Date(item.value);\n        break;\n      case BenefitConstants.UPLOADED_TO:\n        requestBody.uploadedTo = new Date(item.value);\n        break;\n      case BenefitConstants.EXPIRATION_START_DATE:\n        requestBody.expirationStartDate = new Date(item.value);\n        break;\n      case BenefitConstants.EXPIRATION_END_DATE:\n        requestBody.expirationEndDate = new Date(item.value);\n        break;\n      case BenefitConstants.COUNTRY_CODE_POOL:\n        requestBody.countryCodePool = item.value;\n        break;\n      case BenefitConstants.SKU:\n        requestBody.sku = item.value;\n        break;\n      case BenefitConstants.SWAG_KIT:\n        requestBody.levelStatusName = item.value;\n        break;\n    }\n  });\n\n  try {\n    const { result, timeout }: IApiResult2<IBenefitsDataResult> | any = yield race({\n      result: call(benefitApi.searchBenefits, requestBody, action.tenant),\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\n    });\n\n    if (timeout) {\n      yield put(searchBenefitsFail(GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n\n    const parsedBody = result.parsedBody as IBenefitsResult;\n\n    switch (result.httpStatusCode) {\n      case HttpStatusCode.Ok:\n        yield put(\n          searchBenefitsSuccess(\n            parsedBody.benefitKeys,\n            action.searchPage,\n            action.pageSize,\n            parsedBody.filteredCount,\n            parsedBody.unclaimedCount\n          )\n        );\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(searchBenefitsFail((result.parsedBody as IApiErrorResult).error.message));\n        break;\n      default:\n        yield put(searchBenefitsFail(failedMessage));\n        break;\n    }\n  } catch (error) {\n    yield put(searchBenefitsFail(error));\n  }\n}\n\nexport { handleSearchBenefits };\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { call, delay, put, race } from \"redux-saga/effects\";\n\nimport * as siteContentApi from \"../../Services/SiteContentApi\";\n\nimport { GENERIC_API_TIMEOUT_ERROR } from \"../../Constants/ApplicationConstants\";\nimport { HttpStatusCode } from \"../../Constants/HttpStatusCode\";\nimport {\n  IGetClRegionsDataResult,\n  IGetClRegionsOkResult,\n} from \"../../Services/Interfaces/SiteContent\";\nimport { IApiErrorResult, IApiResult2 } from \"../../Utility/IApiResult\";\nimport { getDefaultApiTimeOutConfiguration } from \"../../Utility/Utils\";\nimport {\n  getClRegionsFailure,\n  getClRegionsSuccess,\n  getGeoDataFailure,\n  getGeoDataSuccess,\n} from \"./ClRegionAction\";\n\n/**\n * Handle load cl regions.\n * NOTE: Errors need to be caught and handled by the caller as since this is just a util, there is no telemetry instance.\n * @returns {void} void.\n */\nfunction* handleLoadClRegions() {\n  try {\n    const { result, timeout }: IApiResult2<IGetClRegionsDataResult> | any = yield race({\n      result: call(siteContentApi.fetchClRegionsList),\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\n    });\n\n    if (timeout) {\n      yield put(getClRegionsFailure(GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n\n    switch (result.httpStatusCode) {\n      case HttpStatusCode.Ok:\n        yield put(getClRegionsSuccess((result.parsedBody as IGetClRegionsOkResult).clRegions));\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(getClRegionsFailure((result.parsedBody as IApiErrorResult).error.message));\n        break;\n      case HttpStatusCode.NotFound:\n        yield put(getClRegionsFailure((result.parsedBody as IApiErrorResult).error.message));\n        break;\n      default:\n        yield put(getClRegionsFailure((result.parsedBody as IApiErrorResult).error.message));\n        break;\n    }\n  } catch (error) {\n    yield put(getClRegionsFailure(error.message));\n  }\n}\n\n/**\n * Handle load geo data.\n * NOTE: Errors need to be caught and handled by the caller as since this is just a util, there is no telemetry instance.\n * @returns {void} void.\n */\nfunction* handleLoadGeoData() {\n  try {\n    const { result, timeout }: IApiResult2<IGetClRegionsDataResult> | any = yield race({\n      result: call(siteContentApi.fetchGeoData),\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\n    });\n\n    if (timeout) {\n      yield put(getGeoDataFailure(GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n\n    switch (result.httpStatusCode) {\n      case HttpStatusCode.Ok:\n        yield put(getGeoDataSuccess((result.parsedBody as IGetClRegionsOkResult).clRegions));\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(getGeoDataFailure((result.parsedBody as IApiErrorResult).error.message));\n        break;\n      case HttpStatusCode.NotFound:\n        yield put(getGeoDataFailure((result.parsedBody as IApiErrorResult).error.message));\n        break;\n      default:\n        yield put(getGeoDataFailure((result.parsedBody as IApiErrorResult).error.message));\n        break;\n    }\n  } catch (error) {\n    yield put(getGeoDataFailure(error.message));\n  }\n}\n\nexport { handleLoadClRegions, handleLoadGeoData };\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\nimport { call, delay, put, race } from \"redux-saga/effects\";\n\nimport * as siteContentApi from \"../../Services/SiteContentApi\";\n\nimport { IGetCommonDataOkResult } from \"Services/Interfaces/SiteContent/IGetCommonDataOkResult\";\nimport { IGetCommonDataResult } from \"Services/Interfaces/SiteContent/IGetCommonDataResult\";\n\nimport { GENERIC_API_TIMEOUT_ERROR } from \"../../Constants/ApplicationConstants\";\nimport { HttpStatusCode } from \"../../Constants/HttpStatusCode\";\nimport { IApiErrorResult, IApiResult2 } from \"../../Utility/IApiResult\";\nimport { getDefaultApiTimeOutConfiguration } from \"../../Utility/Utils\";\nimport { getCommonDataFailure, getCommonDataSuccess } from \"./CommonDataAction\";\n\n/**\n * Handle load common data.\n * NOTE: Errors need to be caught and handled by the caller as since this is just a util, there is no telemetry instance.\n * @returns {void} void.\n */\nfunction* handleLoadCommonData() {\n  try {\n    const { result, timeout }: IApiResult2<IGetCommonDataResult> | any = yield race({\n      result: call(siteContentApi.fetchCommonData),\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\n    });\n\n    if (timeout) {\n      yield put(getCommonDataFailure(GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n\n    switch (result.httpStatusCode) {\n      case HttpStatusCode.Ok:\n        yield put(getCommonDataSuccess(result.parsedBody as IGetCommonDataOkResult));\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(getCommonDataFailure((result.parsedBody as IApiErrorResult).error.message));\n        break;\n      case HttpStatusCode.NotFound:\n        yield put(getCommonDataFailure((result.parsedBody as IApiErrorResult).error.message));\n        break;\n      default:\n        yield put(getCommonDataFailure((result.parsedBody as IApiErrorResult).error.message));\n        break;\n    }\n  } catch (error) {\n    yield put(getCommonDataFailure(error.message));\n  }\n}\n\nexport { handleLoadCommonData };\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\nimport { call, delay, put, race } from \"redux-saga/effects\";\nimport {\n  IGetCountryRegion,\n  getCountryRegionSuccess,\n  getCountryRegionFailure,\n} from \"./CountryRegionAction\";\nimport { IApiErrorResult, IApiResult2 } from \"../../Utility/IApiResult\";\nimport { HttpStatusCode } from \"../../Constants/HttpStatusCode\";\nimport {\n  IGetCountryDataOkResult,\n  IGetCountryDataResult,\n} from \"../../Services/Interfaces/SiteContent\";\nimport * as siteContentApi from \"../../Services/SiteContentApi\";\nimport { getDefaultApiTimeOutConfiguration } from \"../../Utility/Utils\";\nimport { GENERIC_API_TIMEOUT_ERROR } from \"../../Constants/ApplicationConstants\";\n\n/**\n * Handle load Country Regions.\n * NOTE: Errors needs to be caught and handled by the caller as since  this is just a util, there is no telemetry instance.\n * @param {IGetCountryRegion} action The IGetCountryRegion Action Type.\n * @returns {void} void.\n */\nfunction* handleLoadCountryRegions(action: IGetCountryRegion) {\n  try {\n    const { result, timeout }: IApiResult2<IGetCountryDataResult> | any = yield race({\n      result: call(siteContentApi.fetchCountryRegionList),\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\n    });\n\n    if (timeout) {\n      yield put(getCountryRegionFailure(GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n\n    switch (result.httpStatusCode) {\n      case HttpStatusCode.Ok:\n        yield put(\n          getCountryRegionSuccess((result.parsedBody as IGetCountryDataOkResult).countryRegions)\n        );\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(getCountryRegionFailure((result.parsedBody as IApiErrorResult).error.message));\n        break;\n      case HttpStatusCode.NotFound:\n        yield put(getCountryRegionFailure((result.parsedBody as IApiErrorResult).error.message));\n        break;\n      default:\n        yield put(getCountryRegionFailure((result.parsedBody as IApiErrorResult).error.message));\n        break;\n    }\n  } catch (error) {\n    yield put(getCountryRegionFailure(error.message));\n  }\n}\n\n/**\n *\n */\nexport { handleLoadCountryRegions };\n","/*!\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n */\r\n\r\nimport {\r\n  APPLICATIONS_BASE_URL,\r\n  BENEFIT_BASE_URL,\r\n  MVP_PROFILE_BASE_URL,\r\n  MVP_PROFILE_BLOCK_SHIPPING_BASE_URL,\r\n  MVP_PROGRAM_PROFILE_BASE_URL,\r\n  MVP_RETIRE_BASE_URL,\r\n} from \"Constants/SagaConstants\";\r\nimport { TenantTypesEnum } from \"Constants/TenantTypes\";\r\nimport { IClaimBenefitDataResult } from \"Interfaces/Benefits/IClaimBenefitDataResult\";\r\nimport { IExtendAzureBenefitCreditDataResult } from \"Interfaces/Benefits/IExtendAzureBenefitCreditDataResult\";\r\nimport { IM365BenefitDetail } from \"Interfaces/Benefits/IM365BenefitDetail\";\r\nimport { IM365BenefitDetailDataResult } from \"Interfaces/Benefits/IM365BenefitDetailDataResult\";\r\nimport { IMicrosoft365BenefitDetail } from \"Interfaces/Benefits/IMicrosoft365BenefitDetail\";\r\nimport { IMicrosoft365BenefitDetailDataResult } from \"Interfaces/Benefits/IMicrosoft365BenefitDetailDataResult\";\r\nimport { IProfileBenefitDataResult } from \"Interfaces/Benefits/IProfileBenefitDataResult\";\r\nimport { ICommentAddRequest } from \"Interfaces/Comments/ICommentAddRequest\";\r\nimport { ICommentAddResult } from \"Interfaces/Comments/ICommentAddResult\";\r\nimport { ICommentsGetResult } from \"Interfaces/Comments/ICommentsGetResult\";\r\nimport { ICapDataResult } from \"Interfaces/Demographics/ICapDataResult\";\r\nimport { IDemographicsRequest } from \"Interfaces/Demographics/IDemographicsRequest\";\r\nimport { IDemographicsResult } from \"Interfaces/Demographics/IDemographicsResult\";\r\nimport { IApiEmptyResult, IApiResult2 } from \"Interfaces/IApiResult\";\r\nimport { IMVPAzureBenefitClaim } from \"Interfaces/MVP/IMVPAzureBenefitClaim\";\r\nimport { IMVPProgramProfile } from \"Interfaces/MVP/IMVPProgramProfile\";\r\nimport { IMVPProgramProfileUpdateRequest } from \"Interfaces/MVP/IMVPProgramProfileUpdateRequest\";\r\nimport { IMVPRetireProfileRequest } from \"Interfaces/MVP/IMVPRetireProfileRequest\";\r\nimport { IMVPRetireProfileResponse } from \"Interfaces/MVP/IMVPRetireProfileResponse\";\r\nimport { IMVPUserProfileGetResult } from \"Interfaces/MVP/IMVPUserProfileGetResult\";\r\nimport { IMVPUserProfileSearchRequest } from \"Interfaces/MVP/IMVPUserProfileSearchRequest\";\r\nimport { IMVPUserProfileSearchResult } from \"Interfaces/MVP/IMVPUserProfileSearchResult\";\r\nimport { IUserProfileBlockShippingDataResult } from \"Interfaces/UserProfile/IUserProfileBlockShippingDataResult\";\r\nimport { IUserProfileBlockShippingRequest } from \"Interfaces/UserProfile/IUserProfileBlockShippingRequest\";\r\nimport { IUserProfileDataResult } from \"Interfaces/UserProfile/IUserProfileDataResult\";\r\nimport { get, post, put, IHttpResponse } from \"Services/ApiUtils\";\r\n\r\n/**\r\n * Fetch MVP user profile comments.\r\n * @param {number} mvpUserProfileId The user profile id to fetch.\r\n */\r\nexport async function fetchUserComments(\r\n  mvpUserProfileId: number,\r\n  fromLastRenewal?: boolean\r\n): Promise<IHttpResponse<IApiResult2<ICommentsGetResult>>> {\r\n  return await get<IApiResult2<ICommentsGetResult>>(\r\n    MVP_PROFILE_BASE_URL +\r\n      mvpUserProfileId +\r\n      \"/Comments\" +\r\n      (fromLastRenewal ? \"?fromLastRenewal=true\" : \"\"),\r\n    true\r\n  );\r\n}\r\n\r\n/**\r\n * Add MVP user profile comment.\r\n * @param {ICommentAddRequest} request The request.\r\n */\r\nexport async function addNewComment(\r\n  request: ICommentAddRequest\r\n): Promise<IHttpResponse<IApiResult2<ICommentAddResult>>> {\r\n  return await post<IApiResult2<ICommentAddResult>>(\r\n    MVP_PROFILE_BASE_URL + request.userProfileComment.userProfileId + \"/Comments\",\r\n    request,\r\n    true\r\n  );\r\n}\r\n\r\n/**\r\n * Fetch MVP user profile.\r\n * @param {ICommentAddRequest} request The request.\r\n */\r\nexport async function fetchUserProfile(\r\n  mvpUserProfileId: number\r\n): Promise<IHttpResponse<IApiResult2<IMVPUserProfileGetResult>>> {\r\n  return await get<IApiResult2<IMVPUserProfileGetResult>>(\r\n    MVP_PROFILE_BASE_URL + mvpUserProfileId,\r\n    true\r\n  );\r\n}\r\n\r\n/**\r\n * Claims the github pro benefit for the user profile.\r\n * @param {number} userProfileId The profile id.\r\n * @returns {IClaimBenefitDataResult}\r\n */\r\nexport async function claimUserProfileBenefitsGithubPro(\r\n  userProfileId: number\r\n): Promise<IHttpResponse<IApiResult2<IClaimBenefitDataResult>>> {\r\n  return await post<IApiResult2<IClaimBenefitDataResult>>(\r\n    `${BENEFIT_BASE_URL.replace(\"{tenant}\", TenantTypesEnum.MVP.toLowerCase())}github`,\r\n    { userProfileId: userProfileId },\r\n    true\r\n  );\r\n}\r\n\r\n/**\r\n * Claims the MCP benefit for the user profile.\r\n * @param {number} userProfileId The profile id.\r\n * @returns {IClaimBenefitDataResult}\r\n */\r\nexport async function claimUserProfileBenefitsMcp(\r\n  userProfileId: number\r\n): Promise<IHttpResponse<IApiResult2<IClaimBenefitDataResult>>> {\r\n  return await post<IApiResult2<IClaimBenefitDataResult>>(\r\n    `${BENEFIT_BASE_URL.replace(\"{tenant}\", TenantTypesEnum.MVP.toLowerCase())}mcp`,\r\n    { userProfileId: userProfileId },\r\n    true\r\n  );\r\n}\r\n\r\n/**\r\n * Claims the LinkedIn benefit for the user profile.\r\n * @param {number} userProfileId The profile id.\r\n */\r\nexport async function claimUserProfileBenefitsLinkedIn(\r\n  userProfileId: number\r\n): Promise<IHttpResponse<IApiResult2<IClaimBenefitDataResult>>> {\r\n  return await post<IApiResult2<IClaimBenefitDataResult>>(\r\n    `${BENEFIT_BASE_URL.replace(\"{tenant}\", TenantTypesEnum.MVP.toLowerCase())}linkedin`,\r\n    { userProfileId: userProfileId },\r\n    true\r\n  );\r\n}\r\n\r\n/**\r\n * Claims the M365 benefit for the user profile.\r\n * @param {number} userProfileId The profile id.\r\n */\r\nexport async function claimUserProfileBenefitsM365(\r\n  userProfileId: number\r\n): Promise<IHttpResponse<IApiResult2<IClaimBenefitDataResult>>> {\r\n  return await post<IApiResult2<IClaimBenefitDataResult>>(\r\n    `${BENEFIT_BASE_URL.replace(\"{tenant}\", TenantTypesEnum.MVP.toLowerCase())}M365`,\r\n    { userProfileId: userProfileId },\r\n    true\r\n  );\r\n}\r\n\r\n/**\r\n * Claims the MS365 benefit for the user profile.\r\n * @param {number} userProfileId The profile id.\r\n */\r\nexport async function claimUserProfileBenefitsMS365(\r\n  userProfileId: number\r\n): Promise<IHttpResponse<IApiResult2<IClaimBenefitDataResult>>> {\r\n  return await post<IApiResult2<IClaimBenefitDataResult>>(\r\n    `${BENEFIT_BASE_URL.replace(\"{tenant}\", TenantTypesEnum.MVP.toLowerCase())}MS365`,\r\n    { userProfileId: userProfileId },\r\n    true\r\n  );\r\n}\r\n\r\n/**\r\n * Claims the Teams benefit for the user profile.\r\n * @param {number} userProfileId The profile id.\r\n */\r\nexport async function claimUserProfileBenefitsTeams(\r\n  userProfileId: number\r\n): Promise<IHttpResponse<IApiResult2<IClaimBenefitDataResult>>> {\r\n  return await post<IApiResult2<IClaimBenefitDataResult>>(\r\n    `${BENEFIT_BASE_URL.replace(\"{tenant}\", TenantTypesEnum.MVP.toLowerCase())}teams`,\r\n    { userProfileId: userProfileId },\r\n    true\r\n  );\r\n}\r\n\r\n/**\r\n * Claims the Award Kits benefit for the user profile.\r\n * @param {number} userProfileId The profile id.\r\n */\r\nexport async function claimUserProfileBenefitsAwardKits(\r\n  userProfileId: number,\r\n  SkuId: string\r\n): Promise<IHttpResponse<IApiResult2<IClaimBenefitDataResult>>> {\r\n  return await post<IApiResult2<IClaimBenefitDataResult>>(\r\n    `${BENEFIT_BASE_URL.replace(\"{tenant}\", TenantTypesEnum.MVP.toLowerCase())}awardkit`,\r\n    { userProfileId: userProfileId, SkuId: SkuId },\r\n    true\r\n  );\r\n}\r\n\r\n/**\r\n * Fetch MVP program profile.\r\n * @param {IMVPProgramProfileGetResult} request The request.\r\n */\r\nexport async function fetchProgramProfile(\r\n  mvpUserProfileId: number\r\n): Promise<IHttpResponse<IApiResult2<IMVPProgramProfile>>> {\r\n  return await get<IApiResult2<IMVPProgramProfile>>(\r\n    MVP_PROGRAM_PROFILE_BASE_URL + mvpUserProfileId,\r\n    true\r\n  );\r\n}\r\n\r\n/**\r\n * Update MVP program profile.\r\n * @param {IMVPProgramProfileUpdateRequest} request The request.\r\n */\r\nexport async function updateProgramProfile(\r\n  request: IMVPProgramProfileUpdateRequest\r\n): Promise<IHttpResponse<IApiResult2<boolean>>> {\r\n  return await put<IApiResult2<boolean>>(MVP_PROGRAM_PROFILE_BASE_URL, request, true);\r\n}\r\n\r\n/**\r\n * Fetch retire profile.\r\n * @param {IMVPRetireProfileResponse} request The request.\r\n */\r\nexport async function fetchRetireProfile(\r\n  userProfileId: number\r\n): Promise<IHttpResponse<IApiResult2<IMVPRetireProfileResponse>>> {\r\n  return await get<IApiResult2<IMVPRetireProfileResponse>>(\r\n    MVP_RETIRE_BASE_URL + userProfileId,\r\n    true\r\n  );\r\n}\r\n\r\n/**\r\n * Update MVP program profile.\r\n * @param {IMVPProgramProfileUpdateRequest} request The request.\r\n */\r\nexport async function retireProfile(\r\n  request: IMVPRetireProfileRequest\r\n): Promise<IHttpResponse<IApiResult2<boolean>>> {\r\n  return await put<IApiResult2<boolean>>(MVP_RETIRE_BASE_URL, request, true);\r\n}\r\n\r\n/**\r\n * Update the user profile block shipping field.\r\n * @param userProfile - The request object.\r\n */\r\nexport async function updateUserProfileBlockShipping(\r\n  blockShippingRequest: IUserProfileBlockShippingRequest\r\n): Promise<IHttpResponse<IApiResult2<IUserProfileBlockShippingDataResult>>> {\r\n  return await put<IApiResult2<IUserProfileBlockShippingDataResult>>(\r\n    MVP_PROFILE_BLOCK_SHIPPING_BASE_URL,\r\n    blockShippingRequest,\r\n    true\r\n  );\r\n}\r\n\r\n/**\r\n * Gets the benefits for the user profile.\r\n * @param {number} userProfileId The profile id.\r\n * @returns {IProfileBenefitDataResult}\r\n */\r\nexport async function getProfileBenefits(\r\n  userProfileId: number\r\n): Promise<IHttpResponse<IApiResult2<IProfileBenefitDataResult>>> {\r\n  return await get<IApiResult2<IProfileBenefitDataResult>>(\r\n    `${BENEFIT_BASE_URL.replace(\"{tenant}\", TenantTypesEnum.MVP.toLowerCase())}${userProfileId}`,\r\n    true\r\n  );\r\n}\r\n\r\n/**\r\n * Search MVP user profiles.\r\n * @param searchRequest {IMVPUserProfileSearchRequest}\r\n * @returns {Promise<IHttpResponse<IApiResult2<IMVPUserProfileSearchResult>>>}\r\n */\r\nexport async function searchUserProfiles(\r\n  searchRequest: IMVPUserProfileSearchRequest\r\n): Promise<IHttpResponse<IApiResult2<IMVPUserProfileSearchResult>>> {\r\n  return await post<IApiResult2<IMVPUserProfileSearchResult>>(\r\n    MVP_PROFILE_BASE_URL + \"search\",\r\n    searchRequest,\r\n    true\r\n  );\r\n}\r\n\r\n/**\r\n * Gets a users M365 Benefit Details.\r\n * @param userProfileId the userprofile id to fetch the benefit details for.\r\n * @returns {IM365BenefitDetailDataResult}\r\n */\r\nexport async function getM365BenefitDetails(\r\n  userProfileId: number\r\n): Promise<IHttpResponse<IApiResult2<IM365BenefitDetailDataResult>>> {\r\n  return await get<IApiResult2<IM365BenefitDetailDataResult>>(\r\n    `${BENEFIT_BASE_URL.replace(\r\n      \"{tenant}\",\r\n      TenantTypesEnum.MVP.toLowerCase()\r\n    )}m365detail/${userProfileId}`,\r\n    true\r\n  );\r\n}\r\n\r\n/**\r\n * Updates the users M365 Benefit Details that helps with renewing the M365 Benefit.\r\n * @param m365BenefitDetails the m365 subscription details to update/add.\r\n * @returns {IM365BenefitDetailDataResult}\r\n */\r\nexport async function updateM365BenefitDetails(\r\n  m365BenefitDetails: IM365BenefitDetail\r\n): Promise<IHttpResponse<IApiResult2<IM365BenefitDetailDataResult>>> {\r\n  return await put<IApiResult2<IM365BenefitDetailDataResult>>(\r\n    `${BENEFIT_BASE_URL.replace(\"{tenant}\", TenantTypesEnum.MVP.toLowerCase())}m365Detail`,\r\n    m365BenefitDetails,\r\n    true\r\n  );\r\n}\r\n\r\n/**\r\n * Gets a users Microsoft 365 Benefit Details.\r\n * @param userProfileId the userprofile id to fetch the benefit details for.\r\n * @returns {IMicrosoft365BenefitDetailDataResult}\r\n */\r\nexport async function getMS365BenefitDetails(\r\n  userProfileId: number\r\n): Promise<IHttpResponse<IApiResult2<IMicrosoft365BenefitDetailDataResult>>> {\r\n  return await get<IApiResult2<IMicrosoft365BenefitDetailDataResult>>(\r\n    `${BENEFIT_BASE_URL.replace(\r\n      \"{tenant}\",\r\n      TenantTypesEnum.MVP.toLowerCase()\r\n    )}ms365detail/${userProfileId}`,\r\n    true\r\n  );\r\n}\r\n\r\n/**\r\n * Updates the users Microsoft 365 Benefit Details that helps with renewing the MS365 Benefit.\r\n * @param ms365BenefitDetails the ms365 subscription details to update/add.\r\n * @returns {IMicrosoft365BenefitDetailDataResult}\r\n */\r\nexport async function updateMS365BenefitDetails(\r\n  m365BenefitDetails: IMicrosoft365BenefitDetail\r\n): Promise<IHttpResponse<IApiResult2<IMicrosoft365BenefitDetailDataResult>>> {\r\n  return await put<IApiResult2<IMicrosoft365BenefitDetailDataResult>>(\r\n    `${BENEFIT_BASE_URL.replace(\"{tenant}\", TenantTypesEnum.MVP.toLowerCase())}ms365detail`,\r\n    m365BenefitDetails,\r\n    true\r\n  );\r\n}\r\n\r\nexport async function extendAzureBenefitCredit(\r\n  credit: number,\r\n  userProfileId: number\r\n): Promise<IHttpResponse<IApiResult2<IExtendAzureBenefitCreditDataResult>>> {\r\n  return await put<IApiResult2<IExtendAzureBenefitCreditDataResult>>(\r\n    `${BENEFIT_BASE_URL.replace(\"{tenant}\", TenantTypesEnum.MVP.toLowerCase())}azure/extend`,\r\n    { credit, userProfileId },\r\n    true\r\n  );\r\n}\r\n\r\n/**\r\n * Submits an Azure benefit claim for a user.\r\n * @param request The details of the Azure benefit claim.\r\n * @param userProfileId The ID of the user profile making the claim.\r\n */\r\nexport async function saveAzureBenefitClaim(\r\n  request: IMVPAzureBenefitClaim,\r\n  userProfileId: number\r\n): Promise<IHttpResponse<IApiResult2<boolean>>> {\r\n  return await post<IApiResult2<boolean>>(\r\n    `${BENEFIT_BASE_URL.replace(\"{tenant}\", TenantTypesEnum.MVP.toLowerCase())}azure/azureBenefit`,\r\n    { ...request, userProfileId },\r\n    true\r\n  );\r\n}\r\n\r\n/**\r\n * Updates the user profile user flag.\r\n * @param userProfileId The user profile id.\r\n * @param isPrivate The user profile flag.\r\n */\r\nexport async function updateUserProfileIsPrivate(\r\n  userProfileId: number,\r\n  isPrivate: boolean\r\n): Promise<IHttpResponse<IApiResult2<IApiEmptyResult>>> {\r\n  return await post<IApiResult2<IApiEmptyResult>>(\r\n    `${MVP_PROFILE_BASE_URL}MarkPrivate`,\r\n    { userProfileId, isPrivate },\r\n    true\r\n  );\r\n}\r\n\r\n/**\r\n * Updates the user profile is Annual Exception.\r\n * @param userProfileId The user profile id.\r\n * @param justification The justification with annual exception.\r\n */\r\nexport async function updateUserProfileAnnualException(\r\n  userProfileId: number,\r\n  justification: string\r\n): Promise<IHttpResponse<IApiResult2<IApiEmptyResult>>> {\r\n  return await post<IApiResult2<IApiEmptyResult>>(\r\n    `${MVP_PROFILE_BASE_URL}AnnualException`,\r\n    { userProfileId, justification },\r\n    true\r\n  );\r\n}\r\n\r\n/**\r\n * Gets MVP demographic data, filtered.\r\n */\r\nexport async function getFilteredDemographicsData(\r\n  request: IDemographicsRequest\r\n): Promise<IHttpResponse<IApiResult2<IDemographicsResult>>> {\r\n  return await post<IApiResult2<IDemographicsResult>>(\r\n    APPLICATIONS_BASE_URL.replace(\"{tenant}\", TenantTypesEnum.MVP) + \"demographics\",\r\n    request,\r\n    true\r\n  );\r\n}\r\n\r\n/**\r\n * Gets MVP cap data.\r\n */\r\nexport async function getCapacityData(): Promise<IHttpResponse<IApiResult2<ICapDataResult>>> {\r\n  return await get<IApiResult2<ICapDataResult>>(\r\n    APPLICATIONS_BASE_URL.replace(\"{tenant}\", TenantTypesEnum.MVP) + \"capacity\",\r\n    true\r\n  );\r\n}\r\n\r\n/**\r\n * Updates the user profile primary email.\r\n * @param userProfileId The user profile id.\r\n * @param newEmail The new email.\r\n * @param requestorEmail The requestor email.\r\n */\r\nexport async function updateUserProfilePrimaryEmail(\r\n  userProfileId: number,\r\n  newEmail: string\r\n): Promise<IHttpResponse<IApiResult2<IUserProfileDataResult>>> {\r\n  return await put<IApiResult2<IUserProfileDataResult>>(\r\n    `${MVP_PROFILE_BASE_URL}UpdatePrimaryEmail`,\r\n    { userProfileId, newEmail },\r\n    true\r\n  );\r\n}\r\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { call, delay, put, race } from \"redux-saga/effects\";\n\nimport * as ApplicationConstants from \"Constants/ApplicationConstants\";\nimport * as mvpApi from \"Services/MVP/MVPApi\";\n\nimport { FilterValueFieldNames } from \"Constants/FilterFields\";\nimport { HttpStatusCode } from \"Constants/HttpStatusCode\";\nimport { ICapDataResult } from \"Interfaces/Demographics/ICapDataResult\";\nimport { IDemographicsRequest } from \"Interfaces/Demographics/IDemographicsRequest\";\nimport { IDemographicsResult } from \"Interfaces/Demographics/IDemographicsResult\";\nimport { IApiErrorResult, IApiResult2 } from \"Interfaces/IApiResult\";\nimport { getDefaultApiTimeOutConfiguration } from \"Utility/Utils\";\n\nimport {\n  capDataLoadFail,\n  capDataLoadSuccess,\n  filterDemographicsFail,\n  filterDemographicsSuccess,\n  IFilterDemographics,\n} from \"./DemographicsAction\";\n\n/**\n * Fetch filtered demographics data.\n * @param {IFilterDemographics} action for fetching filtered demographics data.\n * @returns {void}\n */\nfunction* handleFilterDemographics(action: IFilterDemographics) {\n  const failedMessage = \"Failed to get filtered demographics.\";\n  const requestBody = {\n    countryRegionList: [],\n    clRegionList: [],\n    applicationTypes: [],\n    technologyAreaList: [],\n    awardCategoryList: [],\n    genderList: [],\n  } as IDemographicsRequest;\n\n  action.selectedDemographicsFilterValues.forEach((item) => {\n    switch (item.fieldName) {\n      case ApplicationConstants.APPLICATION_TYPE:\n        requestBody.applicationTypes.push(item.value);\n        break;\n      case ApplicationConstants.APPLICATION_COUNTRY_REGION:\n        requestBody.countryRegionList.push(item.value);\n        break;\n      case FilterValueFieldNames.REGION:\n        requestBody.clRegionList.push(item.value);\n        break;\n      case ApplicationConstants.TECHNOLOGY_AREA_GROUP:\n        requestBody.awardCategoryList.push(item.value);\n        break;\n      case ApplicationConstants.TECHNOLOGY_AREA:\n        requestBody.technologyAreaList.push(item.value);\n        break;\n      case ApplicationConstants.GENDER:\n        requestBody.genderList.push(item.value);\n        break;\n      default:\n        return;\n    }\n  });\n\n  try {\n    const { result, timeout }: IApiResult2<IDemographicsResult> | any = yield race({\n      result: call(mvpApi.getFilteredDemographicsData, requestBody),\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\n    });\n\n    if (timeout) {\n      yield put(filterDemographicsFail(ApplicationConstants.GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n\n    switch (result.httpStatusCode) {\n      case HttpStatusCode.Ok:\n        yield put(filterDemographicsSuccess(result.parsedBody));\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(filterDemographicsFail((result.parsedBody as IApiErrorResult).error.message));\n        break;\n      default:\n        yield put(filterDemographicsFail(failedMessage));\n        break;\n    }\n  } catch (error) {\n    yield put(filterDemographicsFail(error));\n  }\n}\n\n/**\n * Fetch filtered capacity data.\n * @returns {void}\n */\nfunction* handleCapData() {\n  const failedMessage = \"Failed to get filtered demographics.\";\n\n  try {\n    const { result, timeout }: IApiResult2<ICapDataResult> | any = yield race({\n      result: call(mvpApi.getCapacityData),\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\n    });\n\n    if (timeout) {\n      yield put(capDataLoadFail(ApplicationConstants.GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n\n    switch (result.httpStatusCode) {\n      case HttpStatusCode.Ok:\n        yield put(capDataLoadSuccess(result.parsedBody));\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(capDataLoadFail((result.parsedBody as IApiErrorResult).error.message));\n        break;\n      default:\n        yield put(capDataLoadFail(failedMessage));\n        break;\n    }\n  } catch (error) {\n    yield put(capDataLoadFail(error));\n  }\n}\n\nexport { handleFilterDemographics, handleCapData };\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport {\n  DISTRIBUTION_LIST_BASE_URL,\n  GENERIC_DISTRIBUTION_LIST_BASE_URL,\n} from \"Constants/SagaConstants\";\nimport {\n  IAddMicrosoftMemberToDLRequest,\n  IFetchMicrosoftMembersForDLRequest,\n  IRemoveMicrosoftMemberFromDLRequest,\n} from \"Dataflows/DistributionLists/DistributionListsAction\";\nimport { IDistributionListFetchRequest } from \"Interfaces/DistributionLists/IDistributionListFetchRequest\";\nimport { IDistributionListReviewRequest } from \"Interfaces/DistributionLists/IDistributionListReviewRequest\";\nimport { IDistributionListsDataResult } from \"Interfaces/DistributionLists/IDistributionListsDataResult\";\nimport { IDistributionListsRequest } from \"Interfaces/DistributionLists/IDistributionListsRequest\";\n\nimport { IApiEmptyResult, IApiResult2 } from \"../Interfaces/IApiResult\";\nimport { get, post, put, remove, IHttpResponse } from \"./ApiUtils\";\n\n/**\n * Search all distribution list.\n */\nexport async function searchDistributionLists(\n  searchRequest: IDistributionListsRequest,\n  tenant: string\n): Promise<IHttpResponse<IApiResult2<IDistributionListsDataResult>>> {\n  const url =\n    DISTRIBUTION_LIST_BASE_URL.replace(\"{tenant}\", tenant) +\n    `requests/${searchRequest.pageIndex}/${searchRequest.pageSize}`;\n  return await get<IApiResult2<IDistributionListsDataResult>>(url, true);\n}\n\n/**\n * Approve the dl join request.\n */\nexport async function approveOrDeclineDlJoinRequest(\n  request: IDistributionListReviewRequest\n): Promise<IHttpResponse<IApiEmptyResult>> {\n  const baseUrl = DISTRIBUTION_LIST_BASE_URL.replace(\"{tenant}\", request.tenant);\n  const url = `${baseUrl}request`;\n  return await put<IApiResult2<IDistributionListsDataResult>>(url, request, true);\n}\n\n/**\n * Fetch all DLs for a given tenant.\n */\nexport async function fetchDistributionListsByTenant(request: IDistributionListFetchRequest) {\n  const url = `${GENERIC_DISTRIBUTION_LIST_BASE_URL}search`;\n  return await post<IApiResult2<IDistributionListsDataResult>>(url, request, true);\n}\n\nexport async function fetchMicrosoftMembersForDL(request: IFetchMicrosoftMembersForDLRequest) {\n  const email = request.dlAlias.split(\"@\")[0];\n  request.dlAlias = email;\n  const dlAlias = email.replace(\"C++\", \"CPLUSPLUS\"); // Workaround: Double escape issue\n  const url =\n    DISTRIBUTION_LIST_BASE_URL.replace(\"{tenant}\", request.tenant) + `${dlAlias}/MicrosoftMembers`;\n  return await get<IApiResult2<IDistributionListsDataResult>>(url, true);\n}\n\nexport async function addMicrosoftMemberToDL(request: IAddMicrosoftMemberToDLRequest) {\n  const email = request.dlAlias.split(\"@\")[0];\n  request.dlAlias = email;\n  const dlAlias = email.replace(\"C++\", \"CPLUSPLUS\"); // Workaround: Double escape issue\n  const url = DISTRIBUTION_LIST_BASE_URL.replace(\"{tenant}\", request.tenant) + `${dlAlias}`;\n  return await post<IApiResult2<IDistributionListsDataResult>>(url, request, true);\n}\n\nexport async function removeMicrosoftMemberFromDL(request: IRemoveMicrosoftMemberFromDLRequest) {\n  const email = request.dlAlias.split(\"@\")[0];\n  request.dlAlias = email;\n  const dlAlias = email.replace(\"C++\", \"CPLUSPLUS\"); // Workaround: Double escape issue\n  const url =\n    DISTRIBUTION_LIST_BASE_URL.replace(\"{tenant}\", request.tenant) +\n    `${dlAlias}/member/${request.memberEmail}`;\n  return await remove<IApiResult2<IApiEmptyResult>>(url, request, true);\n}\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n/* eslint-disable @typescript-eslint/explicit-function-return-type */\n\nimport { call, delay, put, race } from \"redux-saga/effects\";\n\nimport * as DistributionListApi from \"Services/DistributionListApi\";\n\nimport { GENERIC_API_TIMEOUT_ERROR } from \"Constants/ApplicationConstants\";\nimport { HttpStatusCode } from \"Constants/HttpStatusCode\";\nimport { IDistributionListFetchRequest } from \"Interfaces/DistributionLists/IDistributionListFetchRequest\";\nimport { IDistributionListReviewRequest } from \"Interfaces/DistributionLists/IDistributionListReviewRequest\";\nimport { IDistributionListsByTenant } from \"Interfaces/DistributionLists/IDistributionListsByTenantResult\";\nimport { IDistributionListsDataResult } from \"Interfaces/DistributionLists/IDistributionListsDataResult\";\nimport { IDistributionListsRequest } from \"Interfaces/DistributionLists/IDistributionListsRequest\";\nimport { IDistributionListsResult } from \"Interfaces/DistributionLists/IDistributionListsResult\";\nimport { IDLMembersResult } from \"Interfaces/DistributionLists/IDLMembersResult\";\nimport { IApiEmptyResult, IApiErrorResult, IApiResult2 } from \"Interfaces/IApiResult\";\nimport { getDefaultApiTimeOutConfiguration } from \"Utility/Utils\";\n\nimport {\n  addMicrosoftMemberToDLFail,\n  addMicrosoftMemberToDLSuccess,\n  approveOrDeclineJoinRequestFail,\n  approveOrDeclineJoinRequestSuccess,\n  fetchDistributionListsByTenantFail,\n  fetchDistributionListsByTenantSuccess,\n  fetchMicrosoftMembersForDLFail,\n  fetchMicrosoftMembersForDLSuccess,\n  removeMicrosoftMemberFromDLFail,\n  removeMicrosoftMemberFromDLSuccess,\n  searchDistributionListsFail,\n  searchDistributionListsSuccess,\n  IAddMicrosoftMemberToDLRequest,\n  IApproveOrDeclineJoinRequest,\n  IFetchDistributionListByTenantRequest,\n  IFetchMicrosoftMembersForDLRequest,\n  IRemoveMicrosoftMemberFromDLRequest,\n  ISearchDistributionLists,\n} from \"./DistributionListsAction\";\n\n/**\n * Search all distribution lists\n * @param {ISearchDistributionLists} action for searching benefits\n * @returns {void}\n */\nfunction* handleSearchDistributionLists(action: ISearchDistributionLists) {\n  const failedMessage = \"Failed to search the distribution lists.\";\n  const requestBody = {\n    pageIndex: action.searchPage,\n    pageSize: action.pageSize,\n  } as unknown as IDistributionListsRequest;\n\n  try {\n    const { result, timeout }: IApiResult2<IDistributionListsDataResult> | any = yield race({\n      result: call(DistributionListApi.searchDistributionLists, requestBody, action.tenant),\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\n    });\n\n    if (timeout) {\n      yield put(searchDistributionListsFail(GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n\n    const parsedBody = result.parsedBody as IDistributionListsResult;\n\n    switch (result.httpStatusCode) {\n      case HttpStatusCode.Ok:\n        yield put(\n          searchDistributionListsSuccess(\n            parsedBody.requests,\n            action.searchPage,\n            action.pageSize,\n            parsedBody.filteredCount\n          )\n        );\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(\n          searchDistributionListsFail((result.parsedBody as IApiErrorResult).error.message)\n        );\n        break;\n      default:\n        yield put(searchDistributionListsFail(failedMessage));\n        break;\n    }\n  } catch (error) {\n    yield put(searchDistributionListsFail(error));\n  }\n}\n\n/**\n * Approve or decline join request\n * @param {IApproveOrDeclineJoinRequest} action for approving or declining a join request\n * @returns {void}\n */\nfunction* handleApproveOrDeclineJoinRequest(action: IApproveOrDeclineJoinRequest) {\n  const failedMessage = \"Failed to approve or decline the distribution list join request.\";\n\n  try {\n    const request = {\n      tenant: action.tenant,\n      requestId: action.requestId,\n      reviewAction: action.reviewAction,\n    } as IDistributionListReviewRequest;\n\n    const { result, timeout }: IApiResult2<IApiEmptyResult> | any = yield race({\n      result: call(DistributionListApi.approveOrDeclineDlJoinRequest, request),\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\n    });\n\n    if (timeout) {\n      yield put(approveOrDeclineJoinRequestFail(GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n\n    switch (result.httpStatusCode) {\n      case HttpStatusCode.Ok:\n        yield put(approveOrDeclineJoinRequestSuccess());\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(\n          approveOrDeclineJoinRequestFail((result.parsedBody as IApiErrorResult)?.error?.message)\n        );\n        break;\n      default:\n        yield put(approveOrDeclineJoinRequestFail(failedMessage));\n        break;\n    }\n  } catch (error) {\n    yield put(approveOrDeclineJoinRequestFail(error));\n  }\n}\n\n/**\n * Fetch a list of DLs for a tenant.\n * @param {IFetchDistributionListByTenantRequest} action for fetching distribution lists by tenant\n * @returns {void}\n */\nfunction* handleFetchDistributionListByTenantRequest(\n  action: IFetchDistributionListByTenantRequest\n) {\n  const failedMessage = \"Failed to fetch list of DLs for tenant.\";\n\n  try {\n    const request = {\n      tenant: action.tenant,\n      pageSize: action.pageSize,\n      pageNumber: action.pageNumber,\n    } as IDistributionListFetchRequest;\n\n    const { result, timeout }: IApiResult2<IApiEmptyResult> | any = yield race({\n      result: call(DistributionListApi.fetchDistributionListsByTenant, request),\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\n    });\n\n    if (timeout) {\n      yield put(fetchDistributionListsByTenantFail(GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n\n    const parsedBody = result.parsedBody as IDistributionListsByTenant;\n\n    switch (result.httpStatusCode) {\n      case HttpStatusCode.Ok:\n        yield put(\n          fetchDistributionListsByTenantSuccess(parsedBody.distributionGroups, parsedBody.count)\n        );\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(\n          fetchDistributionListsByTenantFail((result.parsedBody as IApiErrorResult)?.error?.message)\n        );\n        break;\n      default:\n        yield put(fetchDistributionListsByTenantFail(failedMessage));\n        break;\n    }\n  } catch (error) {\n    yield put(fetchDistributionListsByTenantFail(error));\n  }\n}\n\n/**\n * Fetch a list of microsoft members for a given distribution list.\n * @param {IFetchMicrosoftMembersForDLRequest} action for fetching list of microsoft members for a DL\n * @returns {void}\n */\nfunction* handleFetchMicrosoftMembersForDL(action: IFetchMicrosoftMembersForDLRequest) {\n  const failedMessage = \"Failed to fetch list of DLs for tenant.\";\n\n  try {\n    const request = {\n      tenant: action.tenant,\n      dlAlias: action.dlAlias,\n    } as IFetchMicrosoftMembersForDLRequest;\n\n    const { result, timeout }: IApiResult2<IApiEmptyResult> | any = yield race({\n      result: call(DistributionListApi.fetchMicrosoftMembersForDL, request),\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\n    });\n\n    if (timeout) {\n      yield put(fetchMicrosoftMembersForDLFail(GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n\n    const parsedBody = result.parsedBody as IDLMembersResult;\n\n    switch (result.httpStatusCode) {\n      case HttpStatusCode.Ok:\n        yield put(fetchMicrosoftMembersForDLSuccess(parsedBody.distributionGroupMembers));\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(\n          fetchMicrosoftMembersForDLFail((result.parsedBody as IApiErrorResult)?.error?.message)\n        );\n        break;\n      default:\n        yield put(fetchMicrosoftMembersForDLFail(failedMessage));\n        break;\n    }\n  } catch (error) {\n    yield put(fetchMicrosoftMembersForDLFail(error));\n  }\n}\n\n/**\n * Add a microsoft member to a DL.\n * @param {IAddMicrosoftMemberToDLRequest} action for adding a microsoft member to a DL.\n * @returns {void}\n */\nfunction* handleAddMicrosoftMemberToDL(action: IAddMicrosoftMemberToDLRequest) {\n  const failedMessage = \"Failed to add microsoft member to DL.\";\n\n  try {\n    const request = {\n      tenant: action.tenant,\n      dlAlias: action.dlAlias,\n      displayName: action.displayName,\n      firstName: action.firstName,\n      lastName: action.lastName,\n      email: action.email,\n    } as IAddMicrosoftMemberToDLRequest;\n\n    const { result, timeout }: IApiResult2<IApiEmptyResult> | any = yield race({\n      result: call(DistributionListApi.addMicrosoftMemberToDL, request),\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\n    });\n\n    if (timeout) {\n      yield put(addMicrosoftMemberToDLFail(GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n\n    switch (result.httpStatusCode) {\n      case HttpStatusCode.Ok:\n        yield put(addMicrosoftMemberToDLSuccess());\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(\n          addMicrosoftMemberToDLFail((result.parsedBody as IApiErrorResult)?.error?.message)\n        );\n        break;\n      default:\n        yield put(addMicrosoftMemberToDLFail(failedMessage));\n        break;\n    }\n  } catch (error) {\n    yield put(addMicrosoftMemberToDLFail(error));\n  }\n}\n\n/**\n * Remove a microsoft member from a distribution list\n * @param {IRemoveMicrosoftMemberFromDLRequest} action for removing a Microsoft member from a DL.\n * @returns {void}\n */\nfunction* handleRemoveMicrosoftMemberFromDL(action: IRemoveMicrosoftMemberFromDLRequest) {\n  const failedMessage = \"Failed to remove microsoft member from DL.\";\n\n  try {\n    const request = {\n      tenant: action.tenant,\n      dlAlias: action.dlAlias,\n      memberEmail: action.memberEmail,\n    } as IRemoveMicrosoftMemberFromDLRequest;\n\n    const { result, timeout }: IApiResult2<IApiEmptyResult> | any = yield race({\n      result: call(DistributionListApi.removeMicrosoftMemberFromDL, request),\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\n    });\n\n    if (timeout) {\n      yield put(removeMicrosoftMemberFromDLFail(GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n\n    switch (result.httpStatusCode) {\n      case HttpStatusCode.Ok:\n      case HttpStatusCode.NoContent:\n        yield put(removeMicrosoftMemberFromDLSuccess());\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(\n          removeMicrosoftMemberFromDLFail((result.parsedBody as IApiErrorResult)?.error?.message)\n        );\n        break;\n      default:\n        yield put(removeMicrosoftMemberFromDLFail(failedMessage));\n        break;\n    }\n  } catch (error) {\n    yield put(removeMicrosoftMemberFromDLFail(error));\n  }\n}\n\nexport {\n  handleSearchDistributionLists,\n  handleApproveOrDeclineJoinRequest,\n  handleFetchDistributionListByTenantRequest,\n  handleFetchMicrosoftMembersForDL,\n  handleAddMicrosoftMemberToDL,\n  handleRemoveMicrosoftMemberFromDL,\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { IIndustryFocusData } from \"Interfaces/SiteContent/IIndustryFocusData\";\n\nimport {\n  INDUSTRY_FOCUS_LOAD,\n  INDUSTRY_FOCUS_LOAD_FAILURE,\n  INDUSTRY_FOCUS_LOAD_SUCCESS,\n} from \"./IndustryFocusActionTypes\";\n\n/**\n * Action for getting the industry focuses\n */\nexport interface IGetIndustryFocus {\n  type: typeof INDUSTRY_FOCUS_LOAD;\n}\n\n/**\n * Action getting the industry focuses when successful\n */\nexport interface IGetIndustryFocusSuccess {\n  type: typeof INDUSTRY_FOCUS_LOAD_SUCCESS;\n  industryFocuses: IIndustryFocusData[];\n}\n\n/**\n * Action getting the industry focuses when failure\n */\nexport interface IGetIndustryFocusFailure {\n  type: typeof INDUSTRY_FOCUS_LOAD_FAILURE;\n  industryFocusLoadError: string;\n}\n\n/**\n * Action creator for getting the industry focuses\n */\nexport const getIndustryFocus = (): IndustryFocusActionTypes => ({\n  type: INDUSTRY_FOCUS_LOAD,\n});\n\n/**\n * Action creator for getting industry focuses when success\n * @param industryFocuses\n */\nexport const getIndustryFocusSuccess = (\n  industryFocuses: IIndustryFocusData[]\n): IndustryFocusActionTypes => ({\n  type: INDUSTRY_FOCUS_LOAD_SUCCESS,\n  industryFocuses,\n});\n\n/**\n * Action creator for getting industry focuses when failure\n * @param industryFocusLoadError\n */\nexport const getIndustryFocusFailure = (\n  industryFocusLoadError: string\n): IndustryFocusActionTypes => ({\n  type: INDUSTRY_FOCUS_LOAD_FAILURE,\n  industryFocusLoadError,\n});\n\nexport type IndustryFocusActionTypes =\n  | IGetIndustryFocus\n  | IGetIndustryFocusSuccess\n  | IGetIndustryFocusFailure;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { call, delay, put, race } from \"redux-saga/effects\";\n\nimport * as siteContentApi from \"../../Services/SiteContentApi\";\n\nimport { GENERIC_API_TIMEOUT_ERROR } from \"../../Constants/ApplicationConstants\";\nimport { HttpStatusCode } from \"../../Constants/HttpStatusCode\";\nimport {\n  IGetIndustryFocusDataResult,\n  IGetIndustryFocusOkResult,\n} from \"../../Services/Interfaces/SiteContent\";\nimport { IApiErrorResult, IApiResult2 } from \"../../Utility/IApiResult\";\nimport { getDefaultApiTimeOutConfiguration } from \"../../Utility/Utils\";\nimport { getIndustryFocusFailure, getIndustryFocusSuccess } from \"./IndustryFocusAction\";\n\n/**\n * Handle load industry focuses.\n * NOTE: Errors need to be caught and handled by the caller as since this is just a util, there is no telemetry instance.\n * @returns {void} void.\n */\nfunction* handleLoadIndustryFocuses() {\n  try {\n    const { result, timeout }: IApiResult2<IGetIndustryFocusDataResult> | any = yield race({\n      result: call(siteContentApi.fetchIndustryFocusList),\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\n    });\n\n    if (timeout) {\n      yield put(getIndustryFocusFailure(GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n\n    switch (result.httpStatusCode) {\n      case HttpStatusCode.Ok:\n        yield put(\n          getIndustryFocusSuccess((result.parsedBody as IGetIndustryFocusOkResult).industryFocuses)\n        );\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(getIndustryFocusFailure((result.parsedBody as IApiErrorResult).error.message));\n        break;\n      case HttpStatusCode.NotFound:\n        yield put(getIndustryFocusFailure((result.parsedBody as IApiErrorResult).error.message));\n        break;\n      default:\n        yield put(getIndustryFocusFailure((result.parsedBody as IApiErrorResult).error.message));\n        break;\n    }\n  } catch (error) {\n    yield put(getIndustryFocusFailure(error.message));\n  }\n}\n\nexport { handleLoadIndustryFocuses };\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport {\n  MVP_M365_COPILOT_BENEFIT_BASE_URL,\n  RD_M365_COPILOT_BENEFIT_BASE_URL,\n} from \"Constants/SagaConstants\";\nimport { IM365CopilotBenefitSearchRequest } from \"Interfaces/Benefits/IM365CopilotBenefitSearchRequest\";\nimport { IM365CopilotBenefitSearchResponse } from \"Interfaces/Benefits/IM365CopilotBenefitSearchResponse\";\nimport { IApiResult2 } from \"Interfaces/IApiResult\";\n\nimport { post, IHttpResponse } from \"./ApiUtils\";\n\n/**\n * Search MVP M365 Copilot Benefit\n * @param requestBody for searching M365 Copilot benefits\n * @returns {Promise<IHttpResponse<IApiResult2<IM365CopilotBenefitSearchResponse>>>}\n */\nexport async function searchMvpM365CopilotBenefit(\n  requestBody: IM365CopilotBenefitSearchRequest\n): Promise<IHttpResponse<IApiResult2<IM365CopilotBenefitSearchResponse>>> {\n  const url = MVP_M365_COPILOT_BENEFIT_BASE_URL + \"/search\";\n  return await post<IApiResult2<IM365CopilotBenefitSearchResponse>>(url, requestBody, true);\n}\n\n/**\n * Search RD M365 Copilot Benefit\n * @param requestBody for searching M365 Copilot benefits\n * @returns {Promise<IHttpResponse<IApiResult2<IM365CopilotBenefitSearchResponse>>>}\n */\nexport async function searchRdM365CopilotBenefit(\n  requestBody: IM365CopilotBenefitSearchRequest\n): Promise<IHttpResponse<IApiResult2<IM365CopilotBenefitSearchResponse>>> {\n  const url = RD_M365_COPILOT_BENEFIT_BASE_URL + \"/search\";\n  return await post<IApiResult2<IM365CopilotBenefitSearchResponse>>(url, requestBody, true);\n}\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { call, delay, put, race } from \"redux-saga/effects\";\n\nimport { HttpStatusCode } from \"Constants/HttpStatusCode\";\nimport { CLAIMED_FROM, CLAIMED_TO } from \"Constants/M365CopilotBenefitConstants\";\nimport { TenantTypesEnum } from \"Constants/TenantTypes\";\nimport { IM365CopilotBenefitSearchRequest } from \"Interfaces/Benefits/IM365CopilotBenefitSearchRequest\";\nimport { IM365CopilotBenefitSearchResponse } from \"Interfaces/Benefits/IM365CopilotBenefitSearchResponse\";\nimport { IApiErrorResult, IApiResult2 } from \"Interfaces/IApiResult\";\nimport {\n  searchMvpM365CopilotBenefit,\n  searchRdM365CopilotBenefit,\n} from \"Services/M365CopilotBenefitApi\";\nimport { getDefaultApiTimeOutConfiguration } from \"Utility/Utils\";\n\nimport {\n  searchM365CopilotBenefitFail,\n  searchM365CopilotBenefitSuccess,\n  ISearchM365CopilotBenefit,\n} from \"./M365CopilotBenefitAction\";\n\n/**\n * Search M365 Copilot benefits\n * @param action for searching M365 Copilot benefits\n * @returns {Generator}\n */\nfunction* handleSearchM365CopilotBenefits(action: ISearchM365CopilotBenefit): Generator {\n  const defaultErrorMessage = \"Failed to search M365 Copilot benefits\";\n  const requestBody: IM365CopilotBenefitSearchRequest = {\n    searchKey: action.searchText,\n    pageSize: action.pageSize,\n    pageIndex: action.searchPage,\n  };\n\n  action.selectedBenefitsFilterValues.forEach((item) => {\n    switch (item.fieldName) {\n      case CLAIMED_FROM:\n        requestBody.claimedFrom = new Date(item.value);\n        break;\n      case CLAIMED_TO:\n        requestBody.claimedTo = new Date(item.value);\n        break;\n    }\n  });\n\n  // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n  const apiEndpoint = ((tenant: TenantTypesEnum) => {\n    switch (tenant) {\n      case TenantTypesEnum.MVP:\n        return searchMvpM365CopilotBenefit;\n      case TenantTypesEnum.RD:\n        return searchRdM365CopilotBenefit;\n    }\n  })(action.tenant);\n\n  if (apiEndpoint === undefined) {\n    yield put(searchM365CopilotBenefitFail(defaultErrorMessage));\n    return;\n  }\n\n  try {\n    const { result, timeout }: IApiResult2<IM365CopilotBenefitSearchResponse> | any = yield race({\n      result: call(apiEndpoint, requestBody),\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\n    });\n\n    if (timeout) {\n      yield put(searchM365CopilotBenefitFail(defaultErrorMessage));\n      return;\n    }\n\n    switch (result.httpStatusCode) {\n      case HttpStatusCode.Ok:\n        const parsedBody = result.parsedBody as IM365CopilotBenefitSearchResponse;\n        yield put(searchM365CopilotBenefitSuccess(parsedBody.benefits, parsedBody.filteredCount));\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(\n          searchM365CopilotBenefitFail((result.parsedBody as IApiErrorResult).error.message)\n        );\n        break;\n      default:\n        yield put(searchM365CopilotBenefitFail(defaultErrorMessage));\n        break;\n    }\n  } catch (error) {\n    yield put(searchM365CopilotBenefitFail(error));\n  }\n}\n\nexport { handleSearchM365CopilotBenefits };\n","/*!\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n */\r\n\r\nimport { IAwardKitsBenefitDetail } from \"Interfaces/Benefits/IAwardKitsBenefitDetail\";\r\nimport { IM365BenefitDetail } from \"Interfaces/Benefits/IM365BenefitDetail\";\r\nimport { IMicrosoft365BenefitDetail } from \"Interfaces/Benefits/IMicrosoft365BenefitDetail\";\r\nimport { IProfileBenefitResult } from \"Interfaces/Benefits/IProfileBenefitResult\";\r\nimport { ITeamsBenefitDetail } from \"Interfaces/Benefits/ITeamsBenefitDetail\";\r\nimport { IFilterValue } from \"Interfaces/IFilterValue\";\r\nimport { IMVPProgramProfile } from \"Interfaces/MVP/IMVPProgramProfile\";\r\nimport { IMVPProgramProfileUpdateRequest } from \"Interfaces/MVP/IMVPProgramProfileUpdateRequest\";\r\nimport { IMVPRetireProfileRequest } from \"Interfaces/MVP/IMVPRetireProfileRequest\";\r\nimport { IMVPRetireProfileResponse } from \"Interfaces/MVP/IMVPRetireProfileResponse\";\r\nimport { IMVPUserProfile } from \"Interfaces/MVP/IMVPUserProfile\";\r\nimport { IUserProfileComment } from \"Interfaces/UserProfile/IUserProfileComment\";\r\nimport { IMVPAzureBenefitClaim } from \"Interfaces/MVP/IMVPAzureBenefitClaim\";\r\n\r\nimport {\r\n  MVP_ADD_COMMENT,\r\n  MVP_ADD_COMMENT_FAIL,\r\n  MVP_ADD_COMMENT_SUCCESS,\r\n  MVP_CLAIM_BENEFIT,\r\n  MVP_CLAIM_BENEFIT_FAIL,\r\n  MVP_CLAIM_BENEFIT_RESET,\r\n  MVP_CLAIM_BENEFIT_SUCCESS,\r\n  MVP_EXTEND_AZURE_BENEFIT_CREDIT,\r\n  MVP_EXTEND_AZURE_BENEFIT_CREDIT_FAILURE,\r\n  MVP_EXTEND_AZURE_BENEFIT_CREDIT_RESET,\r\n  MVP_EXTEND_AZURE_BENEFIT_CREDIT_SUCCESS,\r\n  MVP_FETCH_COMMENTS,\r\n  MVP_FETCH_COMMENTS_FAIL,\r\n  MVP_FETCH_COMMENTS_SUCCESS,\r\n  MVP_FETCH_PROFILE_BENEFITS,\r\n  MVP_FETCH_PROFILE_BENEFITS_FAIL,\r\n  MVP_FETCH_PROFILE_BENEFITS_SUCCESS,\r\n  MVP_FETCH_PROGRAM_PROFILE,\r\n  MVP_FETCH_PROGRAM_PROFILE_FAIL,\r\n  MVP_FETCH_PROGRAM_PROFILE_SUCCESS,\r\n  MVP_FETCH_RETIRE_PROFILE,\r\n  MVP_FETCH_RETIRE_PROFILE_FAIL,\r\n  MVP_FETCH_RETIRE_PROFILE_SUCCESS,\r\n  MVP_FETCH_USER_PROFILE,\r\n  MVP_FETCH_USER_PROFILE_FAIL,\r\n  MVP_FETCH_USER_PROFILE_SUCCESS,\r\n  MVP_GET_AWARD_KITS_BENEFIT_DETAIL,\r\n  MVP_GET_AWARD_KITS_BENEFIT_DETAIL_FAILURE,\r\n  MVP_GET_AWARD_KITS_BENEFIT_DETAIL_SUCCESS,\r\n  MVP_GET_M365_BENEFIT_DETAIL,\r\n  MVP_GET_M365_BENEFIT_DETAIL_FAILURE,\r\n  MVP_GET_M365_BENEFIT_DETAIL_SUCCESS,\r\n  MVP_GET_MS365_BENEFIT_DETAIL,\r\n  MVP_GET_MS365_BENEFIT_DETAIL_FAILURE,\r\n  MVP_GET_MS365_BENEFIT_DETAIL_SUCCESS,\r\n  MVP_GET_TEAMS_BENEFIT_DETAIL,\r\n  MVP_GET_TEAMS_BENEFIT_DETAIL_FAILURE,\r\n  MVP_GET_TEAMS_BENEFIT_DETAIL_SUCCESS,\r\n  MVP_RESET_M365_BENEFIT_DETAIL,\r\n  MVP_RESET_MS365_BENEFIT_DETAIL,\r\n  MVP_RETIRE_PROFILE,\r\n  MVP_RETIRE_PROFILE_FAIL,\r\n  MVP_RETIRE_PROFILE_SUCCESS,\r\n  MVP_UPDATE_M365_BENEFIT_DETAIL,\r\n  MVP_UPDATE_M365_BENEFIT_DETAIL_FAILURE,\r\n  MVP_UPDATE_M365_BENEFIT_DETAIL_SUCCESS,\r\n  MVP_UPDATE_MS365_BENEFIT_DETAIL,\r\n  MVP_UPDATE_MS365_BENEFIT_DETAIL_FAILURE,\r\n  MVP_UPDATE_MS365_BENEFIT_DETAIL_SUCCESS,\r\n  MVP_UPDATE_PROGRAM_PROFILE,\r\n  MVP_UPDATE_PROGRAM_PROFILE_FAIL,\r\n  MVP_UPDATE_PROGRAM_PROFILE_RESET,\r\n  MVP_UPDATE_PROGRAM_PROFILE_SUCCESS,\r\n  MVP_USER_PROFILE_FILTER_VALUE_RESET,\r\n  MVP_USER_PROFILE_SEARCH_CURRENT_PAGE_UPDATE,\r\n  MVP_USER_PROFILE_SEARCH_FILTER_VALUE_ADD,\r\n  MVP_USER_PROFILE_SEARCH_FILTER_VALUE_REMOVE,\r\n  MVP_USER_PROFILE_SEARCH_FILTER_VALUE_STATE_PROVINCE_REMOVE,\r\n  MVP_USER_PROFILE_SEARCH_FILTER_VALUE_UPDATE,\r\n  MVP_USER_PROFILE_SEARCH_FILTER_VALUES_BULK_REMOVE,\r\n  MVP_USER_PROFILE_SEARCH_PAGE_SIZE_UPDATE,\r\n  MVP_USER_PROFILE_SEARCH_SORTING_UPDATE,\r\n  MVP_USER_PROFILES_SEARCH,\r\n  MVP_USER_PROFILES_SEARCH_FAIL,\r\n  MVP_USER_PROFILES_SEARCH_SUCCESS,\r\n  MVP_USERPROFILE_UPDATE_ANNUAL_EXCEPTION,\r\n  MVP_USERPROFILE_UPDATE_ANNUAL_EXCEPTION_FAIL,\r\n  MVP_USERPROFILE_UPDATE_ANNUAL_EXCEPTION_SUCCESS,\r\n  MVP_USERPROFILE_UPDATE_BLOCK_SHIPPING,\r\n  MVP_USERPROFILE_UPDATE_BLOCK_SHIPPING_FAIL,\r\n  MVP_USERPROFILE_UPDATE_BLOCK_SHIPPING_SUCCESS,\r\n  MVP_USERPROFILE_UPDATE_IS_PRIVATE,\r\n  MVP_USERPROFILE_UPDATE_IS_PRIVATE_FAIL,\r\n  MVP_USERPROFILE_UPDATE_IS_PRIVATE_SUCCESS,\r\n  MVP_USERPROFILE_UPDATE_PRIMARY_EMAIL,\r\n  MVP_USERPROFILE_UPDATE_PRIMARY_EMAIL_FAIL,\r\n  MVP_USERPROFILE_UPDATE_PRIMARY_EMAIL_RESET,\r\n  MVP_USERPROFILE_UPDATE_PRIMARY_EMAIL_SUCCESS,\r\n  MVP_ADD_AZURE_BENEFIT_DETAIL,\r\n  MVP_ADD_AZURE_BENEFIT_DETAIL_SUCCESS,\r\n  MVP_ADD_AZURE_BENEFIT_DETAIL_FAIL,\r\n  MVP_ADD_AZURE_BENEFIT_RESET,\r\n  MVP_RETIRE_PROFILE_RESET,\r\n} from \"./MVPActionTypes\";\r\n\r\n/**\r\n * Action to reset the M365 Benefit state.\r\n * @interface\r\n */\r\nexport interface IMVPResetM365BenefitDetail {\r\n  type: typeof MVP_RESET_M365_BENEFIT_DETAIL;\r\n}\r\n\r\n/**\r\n * Action to get the users M365 Benefit Detail.\r\n * @interface\r\n */\r\nexport interface IMVPFetchM365BenefitDetail {\r\n  type: typeof MVP_GET_M365_BENEFIT_DETAIL;\r\n  userProfileId: number;\r\n}\r\n\r\n/**\r\n * Action to get the users Teams Benefit Detail.\r\n * @interface\r\n */\r\nexport interface IMVPFetchTeamsBenefitDetail {\r\n  type: typeof MVP_GET_TEAMS_BENEFIT_DETAIL;\r\n  userProfileId: number;\r\n}\r\n\r\n/**\r\n * Action to get the users Award Kits Benefit Detail.\r\n * @interface\r\n */\r\nexport interface IMVPFetchAwardKitsBenefitDetail {\r\n  type: typeof MVP_GET_AWARD_KITS_BENEFIT_DETAIL;\r\n  userProfileId: number;\r\n}\r\n\r\n/**\r\n * Action to get Fetch Success.\r\n * @interface\r\n */\r\nexport interface IMVPFetchM365BenefitDetailSuccess {\r\n  type: typeof MVP_GET_M365_BENEFIT_DETAIL_SUCCESS;\r\n  m365BenefitDetail: IM365BenefitDetail;\r\n}\r\n\r\n/**\r\n * Action to get Fetch Success.\r\n * @interface\r\n */\r\nexport interface IMVPFetchTeamsBenefitDetailSuccess {\r\n  type: typeof MVP_GET_TEAMS_BENEFIT_DETAIL_SUCCESS;\r\n  teamsBenefitDetail: ITeamsBenefitDetail;\r\n}\r\n\r\n/**\r\n * Action to get Fetch Success.\r\n * @interface\r\n */\r\nexport interface IMVPFetchAwardKitsBenefitDetailSuccess {\r\n  type: typeof MVP_GET_AWARD_KITS_BENEFIT_DETAIL_SUCCESS;\r\n  awardKitsBenefitDetail: IAwardKitsBenefitDetail;\r\n}\r\n\r\n/**\r\n * Action to get Fetch Failure.\r\n * @interface\r\n */\r\nexport interface IMVPFetchM365BenefitDetailFailure {\r\n  type: typeof MVP_GET_M365_BENEFIT_DETAIL_FAILURE;\r\n  m365FetchErrorMessage: string;\r\n}\r\n\r\n/**\r\n * Action to get Fetch Failure.\r\n * @interface\r\n */\r\nexport interface IMVPFetchTeamsBenefitDetailFailure {\r\n  type: typeof MVP_GET_TEAMS_BENEFIT_DETAIL_FAILURE;\r\n  teamsFetchErrorMessage: string;\r\n}\r\n\r\n/**\r\n * Action to get Fetch Failure.\r\n * @interface\r\n */\r\nexport interface IMVPFetchAwardKitsBenefitDetailFailure {\r\n  awardKitsFetchErrorMessage: string;\r\n  type: typeof MVP_GET_AWARD_KITS_BENEFIT_DETAIL_FAILURE;\r\n  FetchErrorMessage: string;\r\n}\r\n\r\n/**\r\n * Action to get Update M365 Benefit.\r\n * @interface\r\n */\r\nexport interface IMVPUpdateM365BenefitDetail {\r\n  type: typeof MVP_UPDATE_M365_BENEFIT_DETAIL;\r\n  m365BenefitDetail: IM365BenefitDetail;\r\n}\r\n\r\n/**\r\n * Action to get the update success details.\r\n * @interface\r\n */\r\nexport interface IMVPUpdateM365BenefitDetailSuccess {\r\n  type: typeof MVP_UPDATE_M365_BENEFIT_DETAIL_SUCCESS;\r\n  m365BenefitDetail: IM365BenefitDetail;\r\n}\r\n\r\n/**\r\n * Action to get the update failure details.\r\n * @interface\r\n */\r\nexport interface IMVPUpdateM365BenefitDetailFailure {\r\n  type: typeof MVP_UPDATE_M365_BENEFIT_DETAIL_FAILURE;\r\n  m365UpdateErrorMessage: string;\r\n}\r\n\r\n/**\r\n * Action to reset the Microsoft 365 Benefit state.\r\n * @interface\r\n */\r\nexport interface IMVPResetMS365BenefitDetail {\r\n  type: typeof MVP_RESET_MS365_BENEFIT_DETAIL;\r\n}\r\n\r\n/**\r\n * Action to get the users Microsoft 365 Benefit Detail.\r\n * @interface\r\n */\r\nexport interface IMVPFetchMS365BenefitDetail {\r\n  type: typeof MVP_GET_MS365_BENEFIT_DETAIL;\r\n  userProfileId: number;\r\n}\r\n\r\n/**\r\n * Action to get Fetch Success.\r\n * @interface\r\n */\r\nexport interface IMVPFetchMS365BenefitDetailSuccess {\r\n  type: typeof MVP_GET_MS365_BENEFIT_DETAIL_SUCCESS;\r\n  ms365BenefitDetail: IMicrosoft365BenefitDetail;\r\n}\r\n\r\n/**\r\n * Action to get Fetch Failure.\r\n * @interface\r\n */\r\nexport interface IMVPFetchMS365BenefitDetailFailure {\r\n  type: typeof MVP_GET_MS365_BENEFIT_DETAIL_FAILURE;\r\n  ms365FetchErrorMessage: string;\r\n}\r\n\r\n/**\r\n * Action to get Update Microsoft 365 Benefit.\r\n * @interface\r\n */\r\nexport interface IMVPUpdateMS365BenefitDetail {\r\n  type: typeof MVP_UPDATE_MS365_BENEFIT_DETAIL;\r\n  ms365BenefitDetail: IMicrosoft365BenefitDetail;\r\n}\r\n\r\n/**\r\n * Action to get the update success details.\r\n * @interface\r\n */\r\nexport interface IMVPUpdateMS365BenefitDetailSuccess {\r\n  type: typeof MVP_UPDATE_MS365_BENEFIT_DETAIL_SUCCESS;\r\n  ms365BenefitDetail: IMicrosoft365BenefitDetail;\r\n}\r\n\r\n/**\r\n * Action to get the update failure details.\r\n * @interface\r\n */\r\nexport interface IMVPUpdateMS365BenefitDetailFailure {\r\n  type: typeof MVP_UPDATE_MS365_BENEFIT_DETAIL_FAILURE;\r\n  ms365UpdateErrorMessage: string;\r\n}\r\n\r\n/**\r\n * Action to get Extend Azure Benefit Credit.\r\n * @interface\r\n */\r\nexport interface IMVPExtendAzureBenefitCredit {\r\n  type: typeof MVP_EXTEND_AZURE_BENEFIT_CREDIT;\r\n  credit: number;\r\n  userProfileId: number;\r\n}\r\n\r\n/**\r\n * Action to get the update success details.\r\n * @interface\r\n */\r\nexport interface IMVPExtendAzureBenefitCreditSuccess {\r\n  type: typeof MVP_EXTEND_AZURE_BENEFIT_CREDIT_SUCCESS;\r\n  capCredit: number;\r\n}\r\n\r\n/**\r\n * Action to get the update failure details.\r\n * @interface\r\n */\r\nexport interface IMVPExtendAzureBenefitCreditFailure {\r\n  type: typeof MVP_EXTEND_AZURE_BENEFIT_CREDIT_FAILURE;\r\n  error: string;\r\n}\r\n\r\n/**\r\n * Action to reset Extend Azure Benefit Credit State.\r\n */\r\nexport interface IMVPExtendAzureBenefitCreditReset {\r\n  type: typeof MVP_EXTEND_AZURE_BENEFIT_CREDIT_RESET;\r\n}\r\n\r\n/**\r\n * Action to get profile benefits.\r\n * @interface\r\n */\r\nexport interface IMVPFetchProfileBenefits {\r\n  type: typeof MVP_FETCH_PROFILE_BENEFITS;\r\n  userProfileId: number;\r\n}\r\n\r\n/**\r\n * Action to get profile benefits success.\r\n * @interface\r\n */\r\nexport interface IMVPFetchProfileBenefitsSuccess {\r\n  type: typeof MVP_FETCH_PROFILE_BENEFITS_SUCCESS;\r\n  userProfileBenefits: IProfileBenefitResult;\r\n}\r\n\r\n/**\r\n * Action to get profile benefits fail.\r\n * @interface\r\n */\r\nexport interface IMVPFetchProfileBenefitsFail {\r\n  type: typeof MVP_FETCH_PROFILE_BENEFITS_FAIL;\r\n  profileBenefitsErrorMessage: string;\r\n}\r\n\r\n/**\r\n * Action claiming the benefits for a user profile.\r\n * @interface\r\n */\r\nexport interface IMVPClaimBenefit {\r\n  type: typeof MVP_CLAIM_BENEFIT;\r\n  userProfileId: number;\r\n  benefitType: string;\r\n  Sku?: string;\r\n}\r\n\r\n/**\r\n * Action claiming the benefits for a user profile succeed.\r\n * @interface\r\n */\r\nexport interface IMVPClaimBenefitSuccess {\r\n  type: typeof MVP_CLAIM_BENEFIT_SUCCESS;\r\n}\r\n\r\n/**\r\n * Action claiming the benefits for a user profile fail.\r\n * @interface\r\n */\r\nexport interface IMVPClaimBenefitFail {\r\n  type: typeof MVP_CLAIM_BENEFIT_FAIL;\r\n  error: string;\r\n}\r\n\r\n/**\r\n * Action claiming the benefits for a user profile reset.\r\n * @interface\r\n */\r\nexport interface IMVPClaimBenefitReset {\r\n  type: typeof MVP_CLAIM_BENEFIT_RESET;\r\n}\r\n\r\n/**\r\n * Action to fetch User Profile comments\r\n * @interface\r\n */\r\nexport interface IMVPFetchComments {\r\n  type: typeof MVP_FETCH_COMMENTS;\r\n  mvpUserProfileId: number;\r\n  fromLastRenewal: boolean;\r\n}\r\n\r\n/**\r\n * Action to fetch User Profile comments success\r\n * @interface\r\n */\r\nexport interface IMVPFetchCommentsSuccess {\r\n  type: typeof MVP_FETCH_COMMENTS_SUCCESS;\r\n  userProfileComments: IUserProfileComment[];\r\n}\r\n\r\n/**\r\n * Action to fetch User Profile comments fail\r\n * @interface\r\n */\r\nexport interface IMVPFetchCommentsFail {\r\n  type: typeof MVP_FETCH_COMMENTS_FAIL;\r\n  errorMessage: string;\r\n}\r\n\r\n/**\r\n * Action to add new comment\r\n * @interface\r\n */\r\nexport interface IMVPAddNewComment {\r\n  type: typeof MVP_ADD_COMMENT;\r\n  userProfileId: number;\r\n  newComment: string;\r\n  createdBy: string;\r\n}\r\n\r\n/**\r\n * Action: add new comment success\r\n * @interface\r\n */\r\nexport interface IMVPAddNewCommentSuccess {\r\n  type: typeof MVP_ADD_COMMENT_SUCCESS;\r\n  userProfileId: number;\r\n}\r\n\r\n/**\r\n * Action: add new comment fail\r\n * @interface\r\n */\r\nexport interface IMVPAddNewCommentFail {\r\n  type: typeof MVP_ADD_COMMENT_FAIL;\r\n  errorMessage: string;\r\n}\r\n\r\n/**\r\n * Action to fetch Program Profile comments\r\n * @interface\r\n */\r\nexport interface IMVPFetchProgramProfile {\r\n  type: typeof MVP_FETCH_PROGRAM_PROFILE;\r\n  programProfileId: number;\r\n}\r\n\r\n/**\r\n * Action to fetch Program Profile comments\r\n * @interface\r\n */\r\nexport interface IMVPFetchRetireProfile {\r\n  type: typeof MVP_FETCH_RETIRE_PROFILE;\r\n  userProfileId: number;\r\n}\r\n\r\n/**\r\n * Action to fetch Program Profile success\r\n * @interface\r\n */\r\nexport interface IMVPFetchProgramProfileSuccess {\r\n  type: typeof MVP_FETCH_PROGRAM_PROFILE_SUCCESS;\r\n  programProfile: IMVPProgramProfile;\r\n}\r\n\r\n/**\r\n * Action to fetch Program Profile success\r\n * @interface\r\n */\r\nexport interface IMVPFetchRetireProfileSuccess {\r\n  type: typeof MVP_FETCH_RETIRE_PROFILE_SUCCESS;\r\n  retireProfile: IMVPRetireProfileResponse;\r\n}\r\n\r\n/**\r\n * Action to fetch Program Profile fail\r\n * @interface\r\n */\r\nexport interface IMVPFetchProgramProfileFail {\r\n  type: typeof MVP_FETCH_PROGRAM_PROFILE_FAIL;\r\n  errorMessage: string;\r\n}\r\n\r\n/**\r\n * Action to fetch Program Profile fail\r\n * @interface\r\n */\r\nexport interface IMVPFetchRetireProfileFail {\r\n  type: typeof MVP_FETCH_RETIRE_PROFILE_FAIL;\r\n  errorMessage: string;\r\n}\r\n\r\n/**\r\n * Action to update program profile.\r\n * @interface\r\n */\r\nexport interface IMVPUpdateProgramProfile {\r\n  type: typeof MVP_UPDATE_PROGRAM_PROFILE;\r\n  programProfile: IMVPProgramProfileUpdateRequest;\r\n}\r\n\r\n/**\r\n * Action to update program profile.\r\n * @interface\r\n */\r\nexport interface IMVPRetireProfile {\r\n  type: typeof MVP_RETIRE_PROFILE;\r\n  retireProfile: IMVPRetireProfileRequest;\r\n}\r\n\r\n/**\r\n * Action to update program profile success.\r\n * @interface\r\n */\r\nexport interface IMVPUpdateProgramProfileSuccess {\r\n  type: typeof MVP_UPDATE_PROGRAM_PROFILE_SUCCESS;\r\n}\r\n\r\n/**\r\n * Action to update program profile success.\r\n * @interface\r\n */\r\nexport interface IMVPRetireProfileSuccess {\r\n  type: typeof MVP_RETIRE_PROFILE_SUCCESS;\r\n}\r\n\r\n/**\r\n * Action to update program profile fail.\r\n * @interface\r\n */\r\nexport interface IMVPUpdateProgramProfileFail {\r\n  type: typeof MVP_UPDATE_PROGRAM_PROFILE_FAIL;\r\n  errorMessage: string;\r\n}\r\n\r\n/**\r\n * Action to update program profile fail.\r\n * @interface\r\n */\r\nexport interface IMVPRetireProfileFail {\r\n  type: typeof MVP_RETIRE_PROFILE_FAIL;\r\n  errorMessage: string;\r\n}\r\n\r\n/**\r\n * Action to reset the update program profile state.\r\n * @interface\r\n */\r\nexport interface IMVPUpdateProgramProfileReset {\r\n  type: typeof MVP_UPDATE_PROGRAM_PROFILE_RESET;\r\n}\r\n\r\n/**\r\n * Action to update azure Benefit Detail.\r\n * @interface\r\n */\r\nexport interface IMVPAddAzureBenefitDetail {\r\n  type: typeof MVP_ADD_AZURE_BENEFIT_DETAIL;\r\n  azureBenefit: IMVPAzureBenefitClaim;\r\n  userProfileId: number;\r\n}\r\n\r\n/**\r\n * Action to update azure Benefit Detail success.\r\n * @interface\r\n */\r\nexport interface IMVPAddAzureBenefitDetailSuccess {\r\n  type: typeof MVP_ADD_AZURE_BENEFIT_DETAIL_SUCCESS;\r\n}\r\n\r\n/**\r\n * Action to update azure Benefit Detail fail.\r\n * @interface\r\n */\r\nexport interface IMVPAddAzureBenefitDetailFail {\r\n  type: typeof MVP_ADD_AZURE_BENEFIT_DETAIL_FAIL;\r\n  errorMessage: string;\r\n}\r\n\r\nexport interface IMVPAddAzureBenefitReset {\r\n  type: typeof MVP_ADD_AZURE_BENEFIT_RESET;\r\n}\r\n\r\n/**\r\n * Action to reset the update program profile state.\r\n * @interface\r\n */\r\nexport interface IMVPRetireProfileReset {\r\n  type: typeof MVP_RETIRE_PROFILE_RESET;\r\n}\r\n\r\n/**\r\n * Action to fetch Program Profile comments\r\n * @interface\r\n */\r\nexport interface IMVPFetchUserProfile {\r\n  type: typeof MVP_FETCH_USER_PROFILE;\r\n  mvpUserProfileId: number;\r\n}\r\n\r\n/**\r\n * Action to fetch User Profile success\r\n * @interface\r\n */\r\nexport interface IMVPFetchUserProfileSuccess {\r\n  type: typeof MVP_FETCH_USER_PROFILE_SUCCESS;\r\n  userProfile: IMVPUserProfile;\r\n}\r\n\r\n/**\r\n * Action to fetch User Profile fail\r\n * @interface\r\n */\r\nexport interface IMVPFetchUserProfileFail {\r\n  type: typeof MVP_FETCH_USER_PROFILE_FAIL;\r\n  errorMessage: string;\r\n}\r\n\r\n/**\r\n * Action for searching user profiles.\r\n * @interface\r\n */\r\nexport interface IMVPUserProfilesSearch {\r\n  type: typeof MVP_USER_PROFILES_SEARCH;\r\n  searchText: string;\r\n  selectedFilterValues: IFilterValue[];\r\n  searchPage: number;\r\n  pageSize: number;\r\n  sortColumn?: string;\r\n  sortDescending?: boolean;\r\n}\r\n\r\n/**\r\n * Action for when user profiles were searched successfully.\r\n * @interface\r\n */\r\nexport interface IMVPUserProfilesSearchSuccess {\r\n  type: typeof MVP_USER_PROFILES_SEARCH_SUCCESS;\r\n  userProfiles: IMVPUserProfile[];\r\n  searchPage: number;\r\n  filteredCount: number;\r\n  pageSize: number;\r\n}\r\n\r\n/**\r\n * Action for when searching user profiles failed.\r\n * @interface\r\n */\r\nexport interface IMVPUserProfilesSearchFail {\r\n  type: typeof MVP_USER_PROFILES_SEARCH_FAIL;\r\n  errorMessage: string;\r\n}\r\n\r\n/**\r\n * Action for adding a filter value to the search.\r\n * @interface\r\n */\r\nexport interface IMVPUserProfileSearchFilterValueAdd {\r\n  type: typeof MVP_USER_PROFILE_SEARCH_FILTER_VALUE_ADD;\r\n  filterValue: IFilterValue;\r\n}\r\n\r\n/**\r\n * Action for removing a filter value from the search.\r\n * @interface\r\n */\r\nexport interface IMVPUserProfileSearchFilterValueRemove {\r\n  type: typeof MVP_USER_PROFILE_SEARCH_FILTER_VALUE_REMOVE;\r\n  filterValue: IFilterValue;\r\n}\r\n\r\n/**\r\n * Action for removing several filter values from the search.\r\n * @interface\r\n */\r\nexport interface IMVPUserProfileSearchFilterValuesBulkRemove {\r\n  type: typeof MVP_USER_PROFILE_SEARCH_FILTER_VALUES_BULK_REMOVE;\r\n  filterValues: IFilterValue[];\r\n}\r\n\r\n/**\r\n * Action for updating a filter value from the search.\r\n * @interface\r\n */\r\nexport interface IMVPUserProfileSearchFilterValueUpdate {\r\n  type: typeof MVP_USER_PROFILE_SEARCH_FILTER_VALUE_UPDATE;\r\n  filterValue: IFilterValue;\r\n}\r\n\r\n/**\r\n * Action for removing the state/province filter value from the search.\r\n * @interface\r\n */\r\nexport interface IMVPUserProfileSearchFilterValueStateProvinceRemove {\r\n  type: typeof MVP_USER_PROFILE_SEARCH_FILTER_VALUE_STATE_PROVINCE_REMOVE;\r\n}\r\n\r\n/**\r\n * Action for updating the page size for the search.\r\n * @interface\r\n */\r\nexport interface IMVPUserProfileSearchPageSizeUpdate {\r\n  type: typeof MVP_USER_PROFILE_SEARCH_PAGE_SIZE_UPDATE;\r\n  pageSize: number;\r\n}\r\n\r\n/**\r\n * Action for updating the current page for the search.\r\n * @interface\r\n */\r\nexport interface IMVPUserProfileSearchCurrentPageUpdate {\r\n  type: typeof MVP_USER_PROFILE_SEARCH_CURRENT_PAGE_UPDATE;\r\n  currentPage: number;\r\n}\r\n\r\n/**\r\n * Action: updating a user's blocked shipping status\r\n * @interface\r\n */\r\nexport interface IMVPUserProfileUpdateBlockShipping {\r\n  type: typeof MVP_USERPROFILE_UPDATE_BLOCK_SHIPPING;\r\n  isShippingBlocked: boolean;\r\n  userProfileId: number;\r\n}\r\n\r\n/**\r\n * Action: updating a user's blocked shipping status fail\r\n * @interface\r\n */\r\nexport interface IMVPUserProfileUpdateBlockShippingFail {\r\n  type: typeof MVP_USERPROFILE_UPDATE_BLOCK_SHIPPING_FAIL;\r\n  errorMessage: string;\r\n}\r\n\r\n/**\r\n * Action: updating a user's blocked shipping status success\r\n * @interface\r\n */\r\nexport interface IMVPUserProfileUpdateBlockShippingSuccess {\r\n  type: typeof MVP_USERPROFILE_UPDATE_BLOCK_SHIPPING_SUCCESS;\r\n  userProfileId: number;\r\n}\r\n\r\n/**\r\n * Action: update user's profile is private flag.\r\n * @interface\r\n */\r\nexport interface IMVPUserProfileIsPrivateUpdate {\r\n  type: typeof MVP_USERPROFILE_UPDATE_IS_PRIVATE;\r\n  isPrivate: boolean;\r\n  userProfileId: number;\r\n}\r\n\r\n/**\r\n * Action: update user's profile is private flag success.\r\n * @interface\r\n */\r\nexport interface IMVPUserProfileIsPrivateUpdateSuccess {\r\n  type: typeof MVP_USERPROFILE_UPDATE_IS_PRIVATE_SUCCESS;\r\n}\r\n\r\n/**\r\n * Action: update user's profile is private flag fail.\r\n * @interface\r\n */\r\nexport interface IMVPUserProfileIsPrivateUpdateFail {\r\n  type: typeof MVP_USERPROFILE_UPDATE_IS_PRIVATE_FAIL;\r\n  error: string;\r\n}\r\n\r\n/**\r\n * Action: update user's profile is Annual Exception.\r\n * @interface\r\n */\r\nexport interface IMVPUserProfileAnnualExceptionUpdate {\r\n  type: typeof MVP_USERPROFILE_UPDATE_ANNUAL_EXCEPTION;\r\n  justification: string;\r\n  userProfileId: number;\r\n}\r\n\r\n/**\r\n * Action: update user's profile is Annual Exception success.\r\n * @interface\r\n */\r\nexport interface IMVPUserProfileAnnualExceptionUpdateSuccess {\r\n  type: typeof MVP_USERPROFILE_UPDATE_ANNUAL_EXCEPTION_SUCCESS;\r\n}\r\n\r\n/**\r\n * Action: update user's profile is Annual Exception fail.\r\n * @interface\r\n */\r\nexport interface IMVPUserProfileAnnualExceptionUpdateFail {\r\n  type: typeof MVP_USERPROFILE_UPDATE_ANNUAL_EXCEPTION_FAIL;\r\n  error: string;\r\n}\r\n\r\n/**\r\n * Action: update user's profile is private flag fail.\r\n * @interface\r\n */\r\nexport interface IMVPUserProfileSearchSortingChange {\r\n  type: typeof MVP_USER_PROFILE_SEARCH_SORTING_UPDATE;\r\n  sortColumn?: string;\r\n  sortDescending?: boolean;\r\n}\r\n\r\n/**\r\n * Action: reset mvp user profile filter values.\r\n * @interface\r\n */\r\nexport interface IMVPUserProfileFilterValueReset {\r\n  type: typeof MVP_USER_PROFILE_FILTER_VALUE_RESET;\r\n}\r\n\r\n/**\r\n * Action: update user's primary email.\r\n * @interface\r\n */\r\nexport interface IMVPUserProfilePrimaryEmailUpdate {\r\n  type: typeof MVP_USERPROFILE_UPDATE_PRIMARY_EMAIL;\r\n  userProfileId: number;\r\n  newEmail: string;\r\n}\r\n\r\n/**\r\n * Action: update user's primary email fail.\r\n */\r\nexport interface IMVPUserProfilePrimaryEmailUpdateFail {\r\n  type: typeof MVP_USERPROFILE_UPDATE_PRIMARY_EMAIL_FAIL;\r\n  errorMessage: string;\r\n}\r\n\r\n/**\r\n * Action: update user's primary email success.\r\n */\r\nexport interface IMVPUserProfilePrimaryEmailUpdateSuccess {\r\n  type: typeof MVP_USERPROFILE_UPDATE_PRIMARY_EMAIL_SUCCESS;\r\n}\r\n\r\n/**\r\n * Action: reset user's primary email.\r\n */\r\nexport interface IMVPUserProfilePrimaryEmailUpdateReset {\r\n  type: typeof MVP_USERPROFILE_UPDATE_PRIMARY_EMAIL_RESET;\r\n}\r\n\r\n/**\r\n * Action used for reseting the state.\r\n * @returns {IMVPResetM365BenefitDetail} the action.\r\n */\r\nexport function m365BenefitDetailReset(): IMVPResetM365BenefitDetail {\r\n  return {\r\n    type: MVP_RESET_M365_BENEFIT_DETAIL,\r\n  };\r\n}\r\n\r\n/**\r\n * Action used for fetch M365 Benefit Details.\r\n * @returns {IMVPFetchM365BenefitDetail} the action.\r\n */\r\nexport function fetchM365BenefitDetail(userProfileId: number): IMVPFetchM365BenefitDetail {\r\n  return {\r\n    type: MVP_GET_M365_BENEFIT_DETAIL,\r\n    userProfileId,\r\n  };\r\n}\r\n\r\n/**\r\n * Action used for fetch success.\r\n * @returns {IMVPFetchM365BenefitDetailSuccess} the action.\r\n */\r\nexport function fetchM365BenefitDetailSuccess(\r\n  m365BenefitDetail: IM365BenefitDetail\r\n): IMVPFetchM365BenefitDetailSuccess {\r\n  return {\r\n    type: MVP_GET_M365_BENEFIT_DETAIL_SUCCESS,\r\n    m365BenefitDetail,\r\n  };\r\n}\r\n\r\n/**\r\n * Action used for fetch failure.\r\n * @returns {IMVPFetchM365BenefitDetailFailure} the action.\r\n */\r\nexport function fetchM365BenefitDetailFailure(\r\n  m365FetchErrorMessage: string\r\n): IMVPFetchM365BenefitDetailFailure {\r\n  return {\r\n    type: MVP_GET_M365_BENEFIT_DETAIL_FAILURE,\r\n    m365FetchErrorMessage,\r\n  };\r\n}\r\n\r\n/**\r\n * Action used for fetch Teams Benefit Details.\r\n * @returns {IMVPFetchTeamsBenefitDetail} the action.\r\n */\r\nexport function fetchTeamsBenefitDetail(userProfileId: number): IMVPFetchTeamsBenefitDetail {\r\n  return {\r\n    type: MVP_GET_TEAMS_BENEFIT_DETAIL,\r\n    userProfileId,\r\n  };\r\n}\r\n\r\n/**\r\n * Action used for fetch success.\r\n * @returns {IMVPFetchTeamsBenefitDetailSuccess} the action.\r\n */\r\nexport function fetchTeamsBenefitDetailSuccess(\r\n  teamsBenefitDetail: ITeamsBenefitDetail\r\n): IMVPFetchTeamsBenefitDetailSuccess {\r\n  return {\r\n    type: MVP_GET_TEAMS_BENEFIT_DETAIL_SUCCESS,\r\n    teamsBenefitDetail,\r\n  };\r\n}\r\n\r\n/**\r\n * Action used for fetch Teams Benefit Details.\r\n * @returns {IMVPFetchAwardKitsBenefitDetail} the action.\r\n */\r\nexport function fetchAwardKitsBenefitDetail(\r\n  userProfileId: number\r\n): IMVPFetchAwardKitsBenefitDetail {\r\n  return {\r\n    type: MVP_GET_AWARD_KITS_BENEFIT_DETAIL,\r\n    userProfileId,\r\n  };\r\n}\r\n\r\n/**\r\n * Action used for fetch success.\r\n * @returns {IMVPFetchAwardKitsBenefitDetailSuccess} the action.\r\n */\r\nexport function fetchAwardKitsBenefitDetailSuccess(\r\n  awardKitsBenefitDetail: IAwardKitsBenefitDetail\r\n): IMVPFetchAwardKitsBenefitDetailSuccess {\r\n  return {\r\n    type: MVP_GET_AWARD_KITS_BENEFIT_DETAIL_SUCCESS,\r\n    awardKitsBenefitDetail,\r\n  };\r\n}\r\n\r\n/**\r\n * Action used for update details.\r\n * @returns {IMVPUpdateM365BenefitDetail} the action.\r\n */\r\nexport function extendAzureBenefitCredit(\r\n  credit: number,\r\n  userProfileId: number\r\n): IMVPExtendAzureBenefitCredit {\r\n  return {\r\n    type: MVP_EXTEND_AZURE_BENEFIT_CREDIT,\r\n    credit,\r\n    userProfileId,\r\n  };\r\n}\r\n\r\n/**\r\n * Action used for update success.\r\n * @returns {IMVPUpdateM365BenefitDetailSuccess} the action.\r\n */\r\nexport function extendAzureBenefitCreditSuccess(\r\n  capCredit: number\r\n): IMVPExtendAzureBenefitCreditSuccess {\r\n  return {\r\n    type: MVP_EXTEND_AZURE_BENEFIT_CREDIT_SUCCESS,\r\n    capCredit,\r\n  };\r\n}\r\n\r\n/**\r\n * Action used for update failure.\r\n * @returns {IMVPUpdateM365BenefitDetailFailure} the action.\r\n */\r\nexport function extendAzureBenefitCreditFailure(\r\n  error: string\r\n): IMVPExtendAzureBenefitCreditFailure {\r\n  return {\r\n    type: MVP_EXTEND_AZURE_BENEFIT_CREDIT_FAILURE,\r\n    error,\r\n  };\r\n}\r\n\r\nexport function extendAzureBenefitCreditReset(): IMVPExtendAzureBenefitCreditReset {\r\n  return {\r\n    type: MVP_EXTEND_AZURE_BENEFIT_CREDIT_RESET,\r\n  };\r\n}\r\n\r\n/**\r\n * Action used for update details.\r\n * @returns {IMVPUpdateM365BenefitDetail} the action.\r\n */\r\nexport function updateM365BenefitDetail(\r\n  m365BenefitDetail: IM365BenefitDetail\r\n): IMVPUpdateM365BenefitDetail {\r\n  return {\r\n    type: MVP_UPDATE_M365_BENEFIT_DETAIL,\r\n    m365BenefitDetail,\r\n  };\r\n}\r\n\r\n/**\r\n * Action used for update success.\r\n * @returns {IMVPUpdateM365BenefitDetailSuccess} the action.\r\n */\r\nexport function updateM365BenefitDetailSuccess(\r\n  m365BenefitDetail: IM365BenefitDetail\r\n): IMVPUpdateM365BenefitDetailSuccess {\r\n  return {\r\n    type: MVP_UPDATE_M365_BENEFIT_DETAIL_SUCCESS,\r\n    m365BenefitDetail,\r\n  };\r\n}\r\n\r\n/**\r\n * Action used for update failure.\r\n * @returns {IMVPUpdateM365BenefitDetailFailure} the action.\r\n */\r\nexport function updateM365BenefitDetailFailure(\r\n  m365UpdateErrorMessage: string\r\n): IMVPUpdateM365BenefitDetailFailure {\r\n  return {\r\n    type: MVP_UPDATE_M365_BENEFIT_DETAIL_FAILURE,\r\n    m365UpdateErrorMessage,\r\n  };\r\n}\r\n\r\n/**\r\n * Action used for resetting the state.\r\n * @returns {IMVPResetMS365BenefitDetail} the action.\r\n */\r\nexport function ms365BenefitDetailReset(): IMVPResetMS365BenefitDetail {\r\n  return {\r\n    type: MVP_RESET_MS365_BENEFIT_DETAIL,\r\n  };\r\n}\r\n\r\n/**\r\n * Action used for fetch MS365 Benefit Details.\r\n * @returns {IMVPFetchMS365BenefitDetail} the action.\r\n */\r\nexport function fetchMS365BenefitDetail(userProfileId: number): IMVPFetchMS365BenefitDetail {\r\n  return {\r\n    type: MVP_GET_MS365_BENEFIT_DETAIL,\r\n    userProfileId,\r\n  };\r\n}\r\n\r\n/**\r\n * Action used for fetch success.\r\n * @returns {IMVPFetchMS365BenefitDetailSuccess} the action.\r\n */\r\nexport function fetchMS365BenefitDetailSuccess(\r\n  ms365BenefitDetail: IMicrosoft365BenefitDetail\r\n): IMVPFetchMS365BenefitDetailSuccess {\r\n  return {\r\n    type: MVP_GET_MS365_BENEFIT_DETAIL_SUCCESS,\r\n    ms365BenefitDetail,\r\n  };\r\n}\r\n\r\n/**\r\n * Action used for fetch failure.\r\n * @returns {IMVPFetchMS365BenefitDetailFailure} the action.\r\n */\r\nexport function fetchMS365BenefitDetailFailure(\r\n  ms365FetchErrorMessage: string\r\n): IMVPFetchMS365BenefitDetailFailure {\r\n  return {\r\n    type: MVP_GET_MS365_BENEFIT_DETAIL_FAILURE,\r\n    ms365FetchErrorMessage,\r\n  };\r\n}\r\n\r\n/**\r\n * Action used for update details.\r\n * @returns {IMVPUpdateMS365BenefitDetail} the action.\r\n */\r\nexport function updateMS365BenefitDetail(\r\n  ms365BenefitDetail: IMicrosoft365BenefitDetail\r\n): IMVPUpdateMS365BenefitDetail {\r\n  return {\r\n    type: MVP_UPDATE_MS365_BENEFIT_DETAIL,\r\n    ms365BenefitDetail,\r\n  };\r\n}\r\n\r\n/**\r\n * Action used for update success.\r\n * @returns {IMVPUpdateMS365BenefitDetailSuccess} the action.\r\n */\r\nexport function updateMS365BenefitDetailSuccess(\r\n  ms365BenefitDetail: IMicrosoft365BenefitDetail\r\n): IMVPUpdateMS365BenefitDetailSuccess {\r\n  return {\r\n    type: MVP_UPDATE_MS365_BENEFIT_DETAIL_SUCCESS,\r\n    ms365BenefitDetail,\r\n  };\r\n}\r\n\r\n/**\r\n * Action used for update failure.\r\n * @returns {IMVPUpdateMS365BenefitDetailFailure} the action.\r\n */\r\nexport function updateMS365BenefitDetailFailure(\r\n  ms365UpdateErrorMessage: string\r\n): IMVPUpdateMS365BenefitDetailFailure {\r\n  return {\r\n    type: MVP_UPDATE_MS365_BENEFIT_DETAIL_FAILURE,\r\n    ms365UpdateErrorMessage,\r\n  };\r\n}\r\n\r\n/**\r\n * Action used for getting a profiles benefits.\r\n * @param userProfileId the userProfileId to get benefits for.\r\n * @returns {IMVPFetchProfileBenefits} the action.\r\n */\r\nexport function fetchProfileBenefits(userProfileId: number): IMVPFetchProfileBenefits {\r\n  return {\r\n    type: MVP_FETCH_PROFILE_BENEFITS,\r\n    userProfileId,\r\n  };\r\n}\r\n\r\n/**\r\n * Action used for getting a profiles benefits success.\r\n * @param userProfileBenefits the benefits for the profile.\r\n * @returns {IMVPFetchProfileBenefitsSuccess} the action.\r\n */\r\nexport function fetchProfileBenefitsSuccess(\r\n  userProfileBenefits: IProfileBenefitResult\r\n): IMVPFetchProfileBenefitsSuccess {\r\n  return {\r\n    type: MVP_FETCH_PROFILE_BENEFITS_SUCCESS,\r\n    userProfileBenefits,\r\n  };\r\n}\r\n\r\n/**\r\n * Action used for getting a profiles benefits fail.\r\n * @param profileBenefitsErrorMessage the profileBenefitsErrorMessage to set.\r\n * @returns {IMVPFetchProfileBenefitsFail} the action.\r\n */\r\nexport function fetchProfileBenefitsFail(\r\n  profileBenefitsErrorMessage: string\r\n): IMVPFetchProfileBenefitsFail {\r\n  return {\r\n    type: MVP_FETCH_PROFILE_BENEFITS_FAIL,\r\n    profileBenefitsErrorMessage,\r\n  };\r\n}\r\n\r\n/**\r\n * Action creator for MVP_USERPROFILE_CLAIM_BENEFIT.\r\n * @param {string} benefitType The selected benefit type to claim.\r\n * @param {number} userProfileId The user profile id to claim the benefit for.\r\n * @returns {IMVPClaimBenefit}\r\n */\r\nexport function claimBenefit(\r\n  benefitType: string,\r\n  userProfileId: number,\r\n  Sku: string\r\n): IMVPClaimBenefit {\r\n  return {\r\n    type: MVP_CLAIM_BENEFIT,\r\n    benefitType,\r\n    userProfileId,\r\n    Sku,\r\n  };\r\n}\r\n\r\n/**\r\n * Action creator for MVP_USERPROFILE_CLAIM_BENEFIT_SUCCESS.\r\n * @returns {IMVPClaimBenefitSuccess}\r\n */\r\nexport function claimBenefitSuccess(): IMVPClaimBenefitSuccess {\r\n  return {\r\n    type: MVP_CLAIM_BENEFIT_SUCCESS,\r\n  };\r\n}\r\n\r\n/**\r\n * Action creator for MVP_USERPROFILE_CLAIM_BENEFIT_FAIL.\r\n * @param {string} error The error message from the API.\r\n * @returns {IMVPClaimBenefitFail}\r\n */\r\nexport function claimBenefitFail(error: string): IMVPClaimBenefitFail {\r\n  return {\r\n    type: MVP_CLAIM_BENEFIT_FAIL,\r\n    error,\r\n  };\r\n}\r\n\r\n/**\r\n * Action creator for USERPROFILE_CLAIM_BENEFIT_RESET.\r\n * @returns {IMVPClaimBenefitReset}\r\n */\r\nexport function claimBenefitReset(): IMVPClaimBenefitReset {\r\n  return {\r\n    type: MVP_CLAIM_BENEFIT_RESET,\r\n  };\r\n}\r\n\r\n/**\r\n * Action creator for MVP_FETCH_COMMENTS.\r\n * @param userProfileId The user profile id.\r\n */\r\nexport function fetchUserProfileComments(\r\n  userProfileId: number,\r\n  fromLastRenewal: boolean\r\n): MVPActionTypes {\r\n  return {\r\n    type: MVP_FETCH_COMMENTS,\r\n    mvpUserProfileId: userProfileId,\r\n    fromLastRenewal: fromLastRenewal,\r\n  };\r\n}\r\n\r\n/**\r\n * Action creator for MVP_FETCH_COMMENTS_SUCCESS.\r\n * @param userProfileComments The user profile comments.\r\n */\r\nexport function fetchUserProfileCommentsSuccess(\r\n  userProfileComments: IUserProfileComment[]\r\n): MVPActionTypes {\r\n  return {\r\n    type: MVP_FETCH_COMMENTS_SUCCESS,\r\n    userProfileComments,\r\n  };\r\n}\r\n\r\n/**\r\n * Action creator for MVP_FETCH_COMMENTS_FAIL.\r\n * @param errorMessage The error message.\r\n */\r\nexport function fetchUserProfileCommentsFail(errorMessage: string): MVPActionTypes {\r\n  return {\r\n    type: MVP_FETCH_COMMENTS_FAIL,\r\n    errorMessage,\r\n  };\r\n}\r\n\r\n/**\r\n * Action creator for MVP_ADD_COMMENT.\r\n * @param userProfileId The user profile id.\r\n * @param newComment The new comment.\r\n * @param createdBy The user who created the comment.\r\n */\r\nexport function addNewComment(\r\n  userProfileId: number,\r\n  newComment: string,\r\n  createdBy: string\r\n): MVPActionTypes {\r\n  return {\r\n    type: MVP_ADD_COMMENT,\r\n    userProfileId,\r\n    newComment,\r\n    createdBy,\r\n  };\r\n}\r\n\r\n/**\r\n * Action creator for MVP_ADD_COMMENT_SUCCESS.\r\n * @param userProfileId The user profile id.\r\n */\r\nexport function addNewCommentSuccess(userProfileId: number): MVPActionTypes {\r\n  return {\r\n    type: MVP_ADD_COMMENT_SUCCESS,\r\n    userProfileId,\r\n  };\r\n}\r\n\r\n/**\r\n * Action creator for MVP_ADD_COMMENT_FAIL.\r\n * @param errorMessage The error message.\r\n */\r\nexport function addNewCommentFail(errorMessage: string): MVPActionTypes {\r\n  return {\r\n    type: MVP_ADD_COMMENT_FAIL,\r\n    errorMessage,\r\n  };\r\n}\r\n\r\n/**\r\n * Action creator for MVP_FETCH_PROGRAM_PROFILE.\r\n * @param programProfileId The program profile id.\r\n */\r\nexport function fetchProgramProfile(programProfileId: number): IMVPFetchProgramProfile {\r\n  return {\r\n    type: MVP_FETCH_PROGRAM_PROFILE,\r\n    programProfileId,\r\n  };\r\n}\r\n\r\n/**\r\n * Action creator for MVP_FETCH_RETIRE_PROFILE.\r\n * @param userProfileId The program profile id.\r\n */\r\nexport function fetchRetireProfile(userProfileId: number): IMVPFetchRetireProfile {\r\n  return {\r\n    type: MVP_FETCH_RETIRE_PROFILE,\r\n    userProfileId,\r\n  };\r\n}\r\n\r\n/**\r\n * Action creator for MVP_FETCH_PROGRAM_PROFILE_SUCCESS.\r\n * @param userProfile The user profile.\r\n */\r\nexport function fetchProgramProfileSuccess(\r\n  programProfile: IMVPProgramProfile\r\n): IMVPFetchProgramProfileSuccess {\r\n  return {\r\n    type: MVP_FETCH_PROGRAM_PROFILE_SUCCESS,\r\n    programProfile,\r\n  };\r\n}\r\n\r\n/**\r\n * Action creator for MVP_FETCH_PROGRAM_PROFILE_SUCCESS.\r\n * @param userProfile The user profile.\r\n */\r\nexport function fetchRetireProfileSuccess(\r\n  retireProfile: IMVPRetireProfileResponse\r\n): IMVPFetchRetireProfileSuccess {\r\n  return {\r\n    type: MVP_FETCH_RETIRE_PROFILE_SUCCESS,\r\n    retireProfile,\r\n  };\r\n}\r\n\r\n/**\r\n * Action creator for MVP_FETCH_PROGRAM_PROFILE_FAIL.\r\n * @param errorMessage The error message.\r\n */\r\nexport function fetchProgramProfileFail(errorMessage: string): IMVPFetchProgramProfileFail {\r\n  return {\r\n    type: MVP_FETCH_PROGRAM_PROFILE_FAIL,\r\n    errorMessage,\r\n  };\r\n}\r\n\r\n/**\r\n * Action creator for MVP_FETCH_PROGRAM_PROFILE_FAIL.\r\n * @param errorMessage The error message.\r\n */\r\nexport function fetchRetireProfileFail(errorMessage: string): IMVPFetchRetireProfileFail {\r\n  return {\r\n    type: MVP_FETCH_RETIRE_PROFILE_FAIL,\r\n    errorMessage,\r\n  };\r\n}\r\n\r\n/**\r\n * Action creator for MVP_UPDATE_PROGRAM_PROFILE.\r\n * @param programProfile The program profile updates\r\n */\r\nexport function updateProgramProfile(\r\n  programProfile: IMVPProgramProfileUpdateRequest\r\n): IMVPUpdateProgramProfile {\r\n  return {\r\n    type: MVP_UPDATE_PROGRAM_PROFILE,\r\n    programProfile,\r\n  };\r\n}\r\n\r\n/**\r\n * Action creator for MVP_UPDATE_PROGRAM_PROFILE.\r\n * @param programProfile The program profile updates\r\n */\r\nexport function retireProfile(retireProfile: IMVPRetireProfileRequest): IMVPRetireProfile {\r\n  return {\r\n    type: MVP_RETIRE_PROFILE,\r\n    retireProfile,\r\n  };\r\n}\r\n\r\n/**\r\n * Action creator for MVP_UPDATE_PROGRAM_PROFILE_SUCCESS.\r\n */\r\nexport function updateProgramProfileSuccess(): IMVPUpdateProgramProfileSuccess {\r\n  return {\r\n    type: MVP_UPDATE_PROGRAM_PROFILE_SUCCESS,\r\n  };\r\n}\r\n\r\n/**\r\n * Action creator for MVP_UPDATE_PROGRAM_PROFILE_SUCCESS.\r\n */\r\nexport function retireProfileSuccess(): IMVPRetireProfileSuccess {\r\n  return {\r\n    type: MVP_RETIRE_PROFILE_SUCCESS,\r\n  };\r\n}\r\n\r\n/**\r\n * Action creator for MVP_UPDATE_PROGRAM_PROFILE_FAIL.\r\n * @param errorMessage The error message.\r\n */\r\nexport function updateProgramProfileFail(errorMessage: string): IMVPUpdateProgramProfileFail {\r\n  return {\r\n    type: MVP_UPDATE_PROGRAM_PROFILE_FAIL,\r\n    errorMessage,\r\n  };\r\n}\r\n\r\n/**\r\n * Action creator for MVP_UPDATE_PROGRAM_PROFILE_FAIL.\r\n * @param errorMessage The error message.\r\n */\r\nexport function retireProfileFail(errorMessage: string): IMVPRetireProfileFail {\r\n  return {\r\n    type: MVP_RETIRE_PROFILE_FAIL,\r\n    errorMessage,\r\n  };\r\n}\r\n\r\n/**\r\n * Action creator for MVP_UPDATE_PROGRAM_PROFILE_RESET.\r\n * @returns {IMVPUpdateProgramProfileReset}\r\n */\r\nexport function updateMVPProgramProfileReset(): IMVPUpdateProgramProfileReset {\r\n  return {\r\n    type: MVP_UPDATE_PROGRAM_PROFILE_RESET,\r\n  };\r\n}\r\n\r\n/**\r\n * Action creator for MVP_UPDATE_AZURE_BENEFIT_DETAIL.\r\n * @param azureBenefit The program profile updates\r\n */\r\nexport function addAzureBenefitDetail(\r\n  azureBenefit: IMVPAzureBenefitClaim,\r\n  userProfileId: number\r\n): IMVPAddAzureBenefitDetail {\r\n  return {\r\n    type: MVP_ADD_AZURE_BENEFIT_DETAIL,\r\n    azureBenefit,\r\n    userProfileId,\r\n  };\r\n}\r\n\r\n/**\r\n * Action creator for MVP_UPDATE_AZURE_BENEFIT_DETAIL_SUCCESS.\r\n */\r\nexport function addAzureBenefitDetailSuccess(): IMVPAddAzureBenefitDetailSuccess {\r\n  return {\r\n    type: MVP_ADD_AZURE_BENEFIT_DETAIL_SUCCESS,\r\n  };\r\n}\r\n\r\n/**\r\n * Action creator for MVP_UPDATE_AZURE_BENEFIT_DETAIL_FAIL.\r\n * @param errorMessage The error message.\r\n */\r\nexport function addAzureBenefitDetailFail(errorMessage: string): IMVPAddAzureBenefitDetailFail {\r\n  return {\r\n    type: MVP_ADD_AZURE_BENEFIT_DETAIL_FAIL,\r\n    errorMessage,\r\n  };\r\n}\r\n\r\nexport function addAzureBenefitReset(): IMVPAddAzureBenefitReset {\r\n  return {\r\n    type: MVP_ADD_AZURE_BENEFIT_RESET,\r\n  };\r\n}\r\n\r\n/**\r\n * Action creator for MVP_RETIRE_PROFILE_RESET.\r\n * @returns {IMVPRetireProfileReset}\r\n */\r\nexport function updateMVPRetireProfileReset(): IMVPRetireProfileReset {\r\n  return {\r\n    type: MVP_RETIRE_PROFILE_RESET,\r\n  };\r\n}\r\n\r\n/**\r\n * Action creator for MVP_FETCH_USER_PROFILE.\r\n * @param userProfileId The user profile id.\r\n */\r\nexport function fetchUserProfile(userProfileId: number): MVPActionTypes {\r\n  return {\r\n    type: MVP_FETCH_USER_PROFILE,\r\n    mvpUserProfileId: userProfileId,\r\n  };\r\n}\r\n\r\n/**\r\n * Action creator for MVP_FETCH_USER_PROFILE_SUCCESS.\r\n * @param userProfile The user profile.\r\n */\r\nexport function fetchUserProfileSuccess(userProfile: IMVPUserProfile): MVPActionTypes {\r\n  return {\r\n    type: MVP_FETCH_USER_PROFILE_SUCCESS,\r\n    userProfile,\r\n  };\r\n}\r\n\r\n/**\r\n * Action creator for MVP_FETCH_USER_PROFILE_FAIL.\r\n * @param errorMessage The error message.\r\n */\r\nexport function fetchUserProfileFail(errorMessage: string): MVPActionTypes {\r\n  return {\r\n    type: MVP_FETCH_USER_PROFILE_FAIL,\r\n    errorMessage,\r\n  };\r\n}\r\n\r\n/**\r\n * Action creator for MVP_USER_PROFILES_SEARCH.\r\n * @param searchText The search text.\r\n * @param selectedFilterValues The selected filter values.\r\n * @param searchPage The current page.\r\n * @param pageSize The number of items per page.\r\n * @returns The action.\r\n */\r\nexport function searchUserProfiles(\r\n  searchText: string,\r\n  selectedFilterValues: IFilterValue[],\r\n  searchPage: number,\r\n  pageSize: number,\r\n  sortColumn?: string,\r\n  sortDescending?: boolean\r\n): MVPActionTypes {\r\n  return {\r\n    type: MVP_USER_PROFILES_SEARCH,\r\n    searchText,\r\n    selectedFilterValues,\r\n    searchPage,\r\n    pageSize,\r\n    sortColumn,\r\n    sortDescending,\r\n  };\r\n}\r\n\r\n/**\r\n * Action creator for MVP_USER_PROFILES_SEARCH_SUCCESS.\r\n * @param filteredCount The total number of results.\r\n * @param searchPage The current page.\r\n * @param pageSize The number of items per page.\r\n * @param userProfiles The user profiles.\r\n */\r\nexport function searchUserProfileSuccess(\r\n  filteredCount: number,\r\n  searchPage: number,\r\n  pageSize: number,\r\n  userProfiles: IMVPUserProfile[]\r\n): MVPActionTypes {\r\n  return {\r\n    type: MVP_USER_PROFILES_SEARCH_SUCCESS,\r\n    filteredCount,\r\n    searchPage,\r\n    pageSize,\r\n    userProfiles,\r\n  };\r\n}\r\n\r\n/**\r\n * Action creator for MVP_USER_PROFILES_SEARCH_FAIL.\r\n * @param errorMessage The error message.\r\n */\r\nexport function searchUserProfilesFail(errorMessage: string): MVPActionTypes {\r\n  return {\r\n    type: MVP_USER_PROFILES_SEARCH_FAIL,\r\n    errorMessage,\r\n  };\r\n}\r\n\r\n/**\r\n * Action creator for MVP_USER_PROFILE_SEARCH_FILTER_VALUE_ADD.\r\n * @param filterValue The filter value.\r\n */\r\nexport function userProfileSearchFilterValueAdd(filterValue: IFilterValue): MVPActionTypes {\r\n  return {\r\n    type: MVP_USER_PROFILE_SEARCH_FILTER_VALUE_ADD,\r\n    filterValue,\r\n  };\r\n}\r\n\r\n/**\r\n * Action creator for MVP_USER_PROFILE_SEARCH_FILTER_VALUE_REMOVE.\r\n * @param filterValue The filter value.\r\n */\r\nexport function userProfileSearchFilterValueRemove(filterValue: IFilterValue): MVPActionTypes {\r\n  return {\r\n    type: MVP_USER_PROFILE_SEARCH_FILTER_VALUE_REMOVE,\r\n    filterValue,\r\n  };\r\n}\r\n\r\n/**\r\n * Action creator for MVP_USER_PROFILE_SEARCH_FILTER_VALUES_BULK_REMOVE.\r\n * @param filterValue The filter value.\r\n */\r\nexport function userProfileSearchFilterValuesBulkRemove(\r\n  filterValues: IFilterValue[]\r\n): MVPActionTypes {\r\n  return {\r\n    type: MVP_USER_PROFILE_SEARCH_FILTER_VALUES_BULK_REMOVE,\r\n    filterValues,\r\n  };\r\n}\r\n\r\n/**\r\n * Action creator for MVP_USER_PROFILE_SEARCH_FILTER_VALUE_STATE_PROVINCE_REMOVE.\r\n */\r\nexport function userProfileSearchFilterValueStateProvinceRemove(): MVPActionTypes {\r\n  return {\r\n    type: MVP_USER_PROFILE_SEARCH_FILTER_VALUE_STATE_PROVINCE_REMOVE,\r\n  };\r\n}\r\n\r\n/**\r\n * Action creator for MVP_USER_PROFILE_SEARCH_FILTER_VALUE_UPDATE.\r\n * @param filterValue The filter value.\r\n */\r\nexport function userProfileSearchFilterValueUpdate(filterValue: IFilterValue): MVPActionTypes {\r\n  return {\r\n    type: MVP_USER_PROFILE_SEARCH_FILTER_VALUE_UPDATE,\r\n    filterValue,\r\n  };\r\n}\r\n\r\n/**\r\n * Action creator for MVP_USER_PROFILE_SEARCH_CURRENT_PAGE_UPDATE.\r\n * @param filterValue The filter value.\r\n */\r\nexport function userProfileSearchCurrentPageUpdate(currentPage: number): MVPActionTypes {\r\n  return {\r\n    type: MVP_USER_PROFILE_SEARCH_CURRENT_PAGE_UPDATE,\r\n    currentPage,\r\n  };\r\n}\r\n\r\n/**\r\n * Action creator for MVP_USER_PROFILE_SEARCH_PAGE_SIZE_UPDATE.\r\n * @param filterValue The filter value.\r\n */\r\nexport function userProfileSearchPageSizeUpdate(pageSize: number): MVPActionTypes {\r\n  return {\r\n    type: MVP_USER_PROFILE_SEARCH_PAGE_SIZE_UPDATE,\r\n    pageSize,\r\n  };\r\n}\r\n\r\n/**\r\n * Action creator for USERPROFILE_UPDATE_BLOCK_SHIPPING.\r\n * @returns {IMVPUserProfileUpdateBlockShipping}\r\n */\r\nexport function userProfileUpdateBlockShipping(\r\n  isShippingBlocked: boolean,\r\n  userProfileId: number\r\n): IMVPUserProfileUpdateBlockShipping {\r\n  return {\r\n    type: MVP_USERPROFILE_UPDATE_BLOCK_SHIPPING,\r\n    userProfileId,\r\n    isShippingBlocked,\r\n  };\r\n}\r\n\r\n/**\r\n * Action creator for USERPROFILE_UPDATE_BLOCK_SHIPPING_FAIL.\r\n * @returns {IMVPUserProfileUpdateBlockShippingFail}\r\n */\r\nexport function userProfileUpdateBlockShippingFail(\r\n  errorMessage: string\r\n): IMVPUserProfileUpdateBlockShippingFail {\r\n  return {\r\n    type: MVP_USERPROFILE_UPDATE_BLOCK_SHIPPING_FAIL,\r\n    errorMessage,\r\n  };\r\n}\r\n\r\n/**\r\n * Action creator for USERPROFILE_UPDATE_BLOCK_SHIPPING_SUCCESS.\r\n * @returns {IMVPUserProfileUpdateBlockShippingSuccess}\r\n */\r\nexport function userProfileUpdateBlockShippingSuccess(\r\n  userProfileId: number\r\n): IMVPUserProfileUpdateBlockShippingSuccess {\r\n  return {\r\n    type: MVP_USERPROFILE_UPDATE_BLOCK_SHIPPING_SUCCESS,\r\n    userProfileId,\r\n  };\r\n}\r\n\r\n/**\r\n * Action creator for MVP_USERPROFILE_UPDATE_ANNUAL_EXCEPTION.\r\n * @returns {IMVPUserProfileAnnualExceptionUpdate}\r\n */\r\nexport function userProfileAnnualExceptionUpdate(\r\n  justification: string,\r\n  userProfileId: number\r\n): IMVPUserProfileAnnualExceptionUpdate {\r\n  return {\r\n    type: MVP_USERPROFILE_UPDATE_ANNUAL_EXCEPTION,\r\n    justification,\r\n    userProfileId,\r\n  };\r\n}\r\n\r\n/**\r\n * Action creator for MVP_USERPROFILE_UPDATE_ANNUAL_EXCEPTION_SUCCESS.\r\n * @returns {IMVPUserProfileAnnualExceptionUpdateSuccess}\r\n */\r\nexport function userProfileAnnualExceptionUpdateSuccess(): IMVPUserProfileAnnualExceptionUpdateSuccess {\r\n  return {\r\n    type: MVP_USERPROFILE_UPDATE_ANNUAL_EXCEPTION_SUCCESS,\r\n  };\r\n}\r\n\r\n/**\r\n * Action creator for MVP_USERPROFILE_UPDATE_ANNUAL_EXCEPTION_FAIL.\r\n * @returns {IMVPUserProfileAnnualExceptionUpdateFail}\r\n */\r\nexport function userProfileAnnualExceptionUpdateFail(\r\n  error: string\r\n): IMVPUserProfileAnnualExceptionUpdateFail {\r\n  return {\r\n    type: MVP_USERPROFILE_UPDATE_ANNUAL_EXCEPTION_FAIL,\r\n    error,\r\n  };\r\n}\r\n\r\n/**\r\n * Action creator for USERPROFILE_UPDATE_IS_PRIVATE.\r\n * @returns {IMVPUserProfileIsPrivateUpdate}\r\n */\r\nexport function userProfileIsPrivateUpdate(\r\n  isPrivate: boolean,\r\n  userProfileId: number\r\n): IMVPUserProfileIsPrivateUpdate {\r\n  return {\r\n    type: MVP_USERPROFILE_UPDATE_IS_PRIVATE,\r\n    isPrivate,\r\n    userProfileId,\r\n  };\r\n}\r\n\r\n/**\r\n * Action creator for USERPROFILE_UPDATE_IS_PRIVATE_SUCCESS.\r\n * @returns {IMVPUserProfileIsPrivateUpdateSuccess}\r\n */\r\nexport function userProfileIsPrivateUpdateSuccess(): IMVPUserProfileIsPrivateUpdateSuccess {\r\n  return {\r\n    type: MVP_USERPROFILE_UPDATE_IS_PRIVATE_SUCCESS,\r\n  };\r\n}\r\n\r\n/**\r\n * Action creator for USERPROFILE_UPDATE_IS_PRIVATE_FAIL.\r\n * @returns {IMVPUserProfileIsPrivateUpdateFail}\r\n */\r\nexport function userProfileIsPrivateUpdateFail(error: string): IMVPUserProfileIsPrivateUpdateFail {\r\n  return {\r\n    type: MVP_USERPROFILE_UPDATE_IS_PRIVATE_FAIL,\r\n    error,\r\n  };\r\n}\r\n\r\n/**\r\n * Action creator for MVP_USER_PROFILE_SEARCH_SORTING_UPDATE.\r\n * @returns {IMVPUserProfileSearchSortingChange}\r\n */\r\nexport function userProfileSearchSortingUpdate(\r\n  sortColumn?: string,\r\n  sortDescending?: boolean\r\n): IMVPUserProfileSearchSortingChange {\r\n  return {\r\n    type: MVP_USER_PROFILE_SEARCH_SORTING_UPDATE,\r\n    sortColumn,\r\n    sortDescending,\r\n  };\r\n}\r\n\r\n/**\r\n * Action creator for MVP_USER_PROFILE_FILTER_VALUE_RESET.\r\n * @returns {IMVPUserProfileFilterValueReset}\r\n */\r\nexport function userProfileFilterValueReset(): IMVPUserProfileFilterValueReset {\r\n  return {\r\n    type: MVP_USER_PROFILE_FILTER_VALUE_RESET,\r\n  };\r\n}\r\n\r\n/**\r\n * Action creator for USERPROFILE_UPDATE_PRIMARY_EMAIL.\r\n * @returns {IMVPUserProfilePrimaryEmailUpdate}\r\n */\r\nexport function userProfilePrimaryEmailUpdate(\r\n  userProfileId: number,\r\n  newEmail: string\r\n): IMVPUserProfilePrimaryEmailUpdate {\r\n  return {\r\n    type: MVP_USERPROFILE_UPDATE_PRIMARY_EMAIL,\r\n    userProfileId,\r\n    newEmail,\r\n  };\r\n}\r\n\r\n/**\r\n * Action creator for USERPROFILE_UPDATE_PRIMARY_EMAIL_FAIL.\r\n * @returns {IMVPUserProfilePrimaryEmailFailUpdate}\r\n */\r\nexport function userProfilePrimaryEmailUpdateFail(\r\n  errorMessage: string\r\n): IMVPUserProfilePrimaryEmailUpdateFail {\r\n  return {\r\n    type: MVP_USERPROFILE_UPDATE_PRIMARY_EMAIL_FAIL,\r\n    errorMessage,\r\n  };\r\n}\r\n\r\n/**\r\n * Action creator for USERPROFILE_UPDATE_PRIMARY_EMAIL_SUCCESS.\r\n * @returns {IMVPUserProfilePrimaryEmailUpdateSuccess}\r\n */\r\nexport function userProfilePrimaryEmailUpdateSuccess(): IMVPUserProfilePrimaryEmailUpdateSuccess {\r\n  return {\r\n    type: MVP_USERPROFILE_UPDATE_PRIMARY_EMAIL_SUCCESS,\r\n  };\r\n}\r\n\r\n/**\r\n * Action creator for USERPROFILE_UPDATE_PRIMARY_EMAIL_RESET.\r\n * @returns {IMVPUserProfilePrimaryEmailUpdateReset}\r\n */\r\nexport function userProfilePrimaryEmailUpdateReset(): IMVPUserProfilePrimaryEmailUpdateReset {\r\n  return {\r\n    type: MVP_USERPROFILE_UPDATE_PRIMARY_EMAIL_RESET,\r\n  };\r\n}\r\n\r\nexport type MVPActionTypes =\r\n  | IMVPAddNewComment\r\n  | IMVPAddNewCommentFail\r\n  | IMVPAddNewCommentSuccess\r\n  | IMVPClaimBenefit\r\n  | IMVPClaimBenefitFail\r\n  | IMVPClaimBenefitReset\r\n  | IMVPClaimBenefitSuccess\r\n  | IMVPFetchComments\r\n  | IMVPFetchCommentsFail\r\n  | IMVPFetchCommentsSuccess\r\n  | IMVPFetchProfileBenefits\r\n  | IMVPFetchProfileBenefitsFail\r\n  | IMVPFetchProfileBenefitsSuccess\r\n  | IMVPFetchUserProfile\r\n  | IMVPFetchUserProfileFail\r\n  | IMVPFetchUserProfileSuccess\r\n  | IMVPUserProfileSearchCurrentPageUpdate\r\n  | IMVPUserProfileSearchFilterValueAdd\r\n  | IMVPUserProfileSearchFilterValueRemove\r\n  | IMVPUserProfileSearchFilterValuesBulkRemove\r\n  | IMVPUserProfileSearchFilterValueStateProvinceRemove\r\n  | IMVPUserProfileSearchFilterValueUpdate\r\n  | IMVPUserProfileSearchPageSizeUpdate\r\n  | IMVPUserProfilesSearch\r\n  | IMVPUserProfilesSearchFail\r\n  | IMVPUserProfilesSearchSuccess\r\n  | IMVPFetchUserProfileFail\r\n  | IMVPFetchProgramProfile\r\n  | IMVPFetchProgramProfileFail\r\n  | IMVPFetchProgramProfileSuccess\r\n  | IMVPUpdateProgramProfile\r\n  | IMVPUpdateProgramProfileFail\r\n  | IMVPUpdateProgramProfileSuccess\r\n  | IMVPUpdateProgramProfileReset\r\n  | IMVPResetM365BenefitDetail\r\n  | IMVPFetchM365BenefitDetail\r\n  | IMVPFetchM365BenefitDetailFailure\r\n  | IMVPFetchM365BenefitDetailSuccess\r\n  | IMVPUpdateM365BenefitDetail\r\n  | IMVPUpdateM365BenefitDetailFailure\r\n  | IMVPUpdateM365BenefitDetailSuccess\r\n  | IMVPResetMS365BenefitDetail\r\n  | IMVPFetchMS365BenefitDetail\r\n  | IMVPFetchMS365BenefitDetailFailure\r\n  | IMVPFetchMS365BenefitDetailSuccess\r\n  | IMVPUpdateMS365BenefitDetail\r\n  | IMVPUpdateMS365BenefitDetailFailure\r\n  | IMVPUpdateMS365BenefitDetailSuccess\r\n  | IMVPFetchTeamsBenefitDetail\r\n  | IMVPFetchTeamsBenefitDetailFailure\r\n  | IMVPFetchTeamsBenefitDetailSuccess\r\n  | IMVPFetchAwardKitsBenefitDetail\r\n  | IMVPFetchAwardKitsBenefitDetailFailure\r\n  | IMVPFetchAwardKitsBenefitDetailSuccess\r\n  | IMVPUserProfileUpdateBlockShipping\r\n  | IMVPUserProfileUpdateBlockShippingFail\r\n  | IMVPUserProfileUpdateBlockShippingSuccess\r\n  | IMVPExtendAzureBenefitCredit\r\n  | IMVPExtendAzureBenefitCreditFailure\r\n  | IMVPExtendAzureBenefitCreditSuccess\r\n  | IMVPExtendAzureBenefitCreditReset\r\n  | IMVPUserProfileIsPrivateUpdate\r\n  | IMVPUserProfileIsPrivateUpdateSuccess\r\n  | IMVPUserProfileIsPrivateUpdateFail\r\n  | IMVPUserProfileAnnualExceptionUpdate\r\n  | IMVPUserProfileAnnualExceptionUpdateSuccess\r\n  | IMVPUserProfileAnnualExceptionUpdateFail\r\n  | IMVPUserProfileSearchSortingChange\r\n  | IMVPUserProfileFilterValueReset\r\n  | IMVPUserProfilePrimaryEmailUpdate\r\n  | IMVPUserProfilePrimaryEmailUpdateFail\r\n  | IMVPUserProfilePrimaryEmailUpdateSuccess\r\n  | IMVPUserProfilePrimaryEmailUpdateReset\r\n  | IMVPFetchRetireProfile\r\n  | IMVPFetchRetireProfileFail\r\n  | IMVPFetchRetireProfileSuccess\r\n  | IMVPRetireProfileReset\r\n  | IMVPRetireProfile\r\n  | IMVPRetireProfileSuccess\r\n  | IMVPRetireProfileFail\r\n  | IMVPAddAzureBenefitDetail\r\n  | IMVPAddAzureBenefitDetailSuccess\r\n  | IMVPAddAzureBenefitDetailFail\r\n  | IMVPAddAzureBenefitReset;\r\n","/* eslint-disable @typescript-eslint/explicit-function-return-type */\r\n/*!\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n */\r\n\r\nimport { call, delay, put, race } from \"redux-saga/effects\";\r\n\r\nimport * as mvpApi from \"Services/MVP/MVPApi\";\r\n\r\nimport { GENERIC_API_TIMEOUT_ERROR } from \"Constants/ApplicationConstants\";\r\nimport { BenefitNameEnum } from \"Constants/BenefitConstants\";\r\nimport { FilterValueFieldNames } from \"Constants/FilterFields\";\r\nimport { HttpStatusCode } from \"Constants/HttpStatusCode\";\r\nimport { TenantTypesEnum } from \"Constants/TenantTypes\";\r\nimport { IUserProfileUpdateBlockShipping } from \"Dataflows/UserProfile/UserProfileAction\";\r\nimport { IClaimBenefitDataResult } from \"Interfaces/Benefits/IClaimBenefitDataResult\";\r\nimport { IClaimBenefitResult } from \"Interfaces/Benefits/IClaimBenefitResult\";\r\nimport { IExtendAzureBenefitCreditResult } from \"Interfaces/Benefits/IExtendAzureBenefitCreditResult\";\r\nimport { IM365BenefitDetail } from \"Interfaces/Benefits/IM365BenefitDetail\";\r\nimport { IMicrosoft365BenefitDetail } from \"Interfaces/Benefits/IMicrosoft365BenefitDetail\";\r\nimport { IProfileBenefitDataResult } from \"Interfaces/Benefits/IProfileBenefitDataResult\";\r\nimport { ICommentAddRequest } from \"Interfaces/Comments/ICommentAddRequest\";\r\nimport { ICommentAddResult } from \"Interfaces/Comments/ICommentAddResult\";\r\nimport { ICommentsGetResult } from \"Interfaces/Comments/ICommentsGetResult\";\r\nimport { IApiEmptyResult, IApiErrorResult, IApiResult2 } from \"Interfaces/IApiResult\";\r\nimport { IFilterValue } from \"Interfaces/IFilterValue\";\r\nimport { IMVPProgramProfile } from \"Interfaces/MVP/IMVPProgramProfile\";\r\nimport { IMVPUserProfileGetResult } from \"Interfaces/MVP/IMVPUserProfileGetResult\";\r\nimport { IMVPUserProfileSearchRequest } from \"Interfaces/MVP/IMVPUserProfileSearchRequest\";\r\nimport { IMVPUserProfileSearchResult } from \"Interfaces/MVP/IMVPUserProfileSearchResult\";\r\nimport { IUserProfileBlockShippingDataResult } from \"Interfaces/UserProfile/IUserProfileBlockShippingDataResult\";\r\nimport { IUserProfileBlockShippingRequest } from \"Interfaces/UserProfile/IUserProfileBlockShippingRequest\";\r\nimport { getDefaultApiTimeOutConfiguration } from \"Utility/Utils\";\r\n\r\nimport {\r\n  addNewCommentFail,\r\n  addNewCommentSuccess,\r\n  claimBenefitFail,\r\n  claimBenefitSuccess,\r\n  extendAzureBenefitCreditFailure,\r\n  extendAzureBenefitCreditSuccess,\r\n  fetchM365BenefitDetailFailure,\r\n  fetchM365BenefitDetailSuccess,\r\n  fetchProfileBenefitsFail,\r\n  fetchProfileBenefitsSuccess,\r\n  fetchProgramProfileFail,\r\n  fetchProgramProfileSuccess,\r\n  fetchUserProfileCommentsFail,\r\n  fetchUserProfileCommentsSuccess,\r\n  fetchUserProfileFail,\r\n  fetchUserProfileSuccess,\r\n  searchUserProfilesFail,\r\n  searchUserProfileSuccess,\r\n  updateM365BenefitDetailFailure,\r\n  updateM365BenefitDetailSuccess,\r\n  updateProgramProfileFail,\r\n  updateProgramProfileSuccess,\r\n  userProfileAnnualExceptionUpdateFail,\r\n  userProfileAnnualExceptionUpdateSuccess,\r\n  userProfileIsPrivateUpdateFail,\r\n  userProfileIsPrivateUpdateSuccess,\r\n  userProfilePrimaryEmailUpdateFail,\r\n  userProfilePrimaryEmailUpdateSuccess,\r\n  userProfileUpdateBlockShippingFail,\r\n  userProfileUpdateBlockShippingSuccess,\r\n  IMVPAddNewComment,\r\n  IMVPClaimBenefit,\r\n  IMVPExtendAzureBenefitCredit,\r\n  IMVPFetchComments,\r\n  IMVPFetchM365BenefitDetail,\r\n  IMVPFetchProfileBenefits,\r\n  IMVPFetchProgramProfile,\r\n  IMVPFetchUserProfile,\r\n  IMVPUpdateM365BenefitDetail,\r\n  IMVPUpdateProgramProfile,\r\n  IMVPUserProfilesSearch,\r\n  IMVPUserProfileAnnualExceptionUpdate,\r\n  IMVPUserProfileIsPrivateUpdate,\r\n  IMVPUserProfilePrimaryEmailUpdate,\r\n  IMVPFetchRetireProfile,\r\n  fetchRetireProfileFail,\r\n  fetchRetireProfileSuccess,\r\n  IMVPRetireProfile,\r\n  retireProfileFail,\r\n  retireProfileSuccess,\r\n  IMVPAddAzureBenefitDetail,\r\n  addAzureBenefitDetailSuccess,\r\n  addAzureBenefitDetailFail,\r\n  IMVPUpdateMS365BenefitDetail,\r\n  fetchMS365BenefitDetailFailure,\r\n  fetchMS365BenefitDetailSuccess,\r\n  updateMS365BenefitDetailFailure,\r\n  updateMS365BenefitDetailSuccess,\r\n} from \"./MVPAction\";\r\nimport { IMVPRetireProfileResponse } from \"Interfaces/MVP/IMVPRetireProfileResponse\";\r\nimport { IMVPAzureBenefitClaim } from \"Interfaces/MVP/IMVPAzureBenefitClaim\";\r\n\r\n/**\r\n * Map the filter values to the request body.\r\n * @param {IFilterValue[]} filterValues The list of filters.\r\n * @return {IMVPUserProfileSearchRequest} The request to be sent.\r\n */\r\nconst mapFilterValuesToRequestBody = (\r\n  filterValues: IFilterValue[]\r\n): IMVPUserProfileSearchRequest => {\r\n  const requestBody: IMVPUserProfileSearchRequest = {\r\n    programStatusList: [],\r\n    technologyAreaGroupList: [],\r\n    technologyAreaList: [],\r\n    clRegionList: [],\r\n    countryRegionList: [],\r\n    stateProvinceList: [],\r\n    annualExceptionList: [],\r\n    awardPeriodEndDate: undefined,\r\n    awardPeriodStartDate: undefined,\r\n    ndaStatusList: [],\r\n    otherProgramMembershipList: [],\r\n    cpmList: [],\r\n  };\r\n\r\n  filterValues.forEach(function (item) {\r\n    switch (item.fieldName) {\r\n      case FilterValueFieldNames.PROGRAM_STATUS:\r\n        requestBody.programStatusList.push(item.value);\r\n        break;\r\n      case FilterValueFieldNames.TECHNOLOGY_AREA:\r\n        requestBody.technologyAreaList.push(item.value.split(\"__\")[0]); // Since the option value format is KEY__ID, we pick the first part as value.\r\n        break;\r\n      case FilterValueFieldNames.TECHNOLOGY_AREA_GROUP:\r\n        requestBody.technologyAreaGroupList.push(item.value);\r\n        break;\r\n      case FilterValueFieldNames.REGION:\r\n        requestBody.clRegionList.push(item.value);\r\n        break;\r\n      case FilterValueFieldNames.COUNTRY:\r\n        requestBody.countryRegionList.push(item.value);\r\n        break;\r\n      case FilterValueFieldNames.STATE_PROVINCE:\r\n        requestBody.stateProvinceList.push(item.value);\r\n        break;\r\n      case FilterValueFieldNames.GRANT_ANNUAL_EXCEPTION:\r\n        requestBody.annualExceptionList.push(item.value);\r\n        break;\r\n      case FilterValueFieldNames.OTHER_PROGRAM_MEMBERSHIP:\r\n        requestBody.otherProgramMembershipList.push(item.value);\r\n        break;\r\n      case FilterValueFieldNames.AWARD_PERIOD_END_DATE:\r\n        requestBody.awardPeriodEndDate = new Date(item.value);\r\n        break;\r\n      case FilterValueFieldNames.AWARD_PERIOD_START_DATE:\r\n        requestBody.awardPeriodStartDate = new Date(item.value);\r\n        break;\r\n      case FilterValueFieldNames.NDA_STATUS:\r\n        requestBody.ndaStatusList.push(item.value);\r\n        break;\r\n      case FilterValueFieldNames.AVAILABLE_CPM_LIST:\r\n        requestBody.cpmList.push(item.value);\r\n      case FilterValueFieldNames.OVDF_BLOCK:\r\n        requestBody.isOvdfBlock = item.value === \"true\";\r\n        break;\r\n      default:\r\n        return;\r\n    }\r\n  });\r\n  return requestBody;\r\n};\r\n/**\r\n * Generator function to async dispatch action to fetch a profiles benefits\r\n * @generator\r\n * @param {IMVPFetchProfileBenefits} action To fetch a profiles benefits.\r\n * @returns {void}\r\n */\r\nfunction* handleMVPFetchProfileBenefits(action: IMVPFetchProfileBenefits): Generator {\r\n  const defaultFailedErrorMessage = \"Failed to fetch profile benefits\";\r\n\r\n  try {\r\n    const { result, timeout }: IApiResult2<IProfileBenefitDataResult> | any = yield race({\r\n      result: call(mvpApi.getProfileBenefits, action.userProfileId),\r\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\r\n    });\r\n\r\n    if (timeout) {\r\n      yield put(fetchProfileBenefitsFail(GENERIC_API_TIMEOUT_ERROR));\r\n      return;\r\n    }\r\n\r\n    switch (result.status) {\r\n      case HttpStatusCode.Ok:\r\n        yield put(fetchProfileBenefitsSuccess(result.parsedBody));\r\n        break;\r\n      case HttpStatusCode.BadRequest:\r\n        yield put(fetchProfileBenefitsFail((result.body as IApiErrorResult).error.message));\r\n        break;\r\n      default:\r\n        yield put(fetchProfileBenefitsFail(defaultFailedErrorMessage));\r\n    }\r\n  } catch (error) {\r\n    yield put(fetchProfileBenefitsFail(defaultFailedErrorMessage));\r\n  }\r\n}\r\n\r\n/**\r\n * Generator function to async dispatch action\r\n * @generator\r\n * @param {IUpdateProgramProfile} action To claim program profile benefit.\r\n * @returns {void}\r\n */\r\nfunction* handleMVPClaimBenefit(action: IMVPClaimBenefit): Generator {\r\n  const failedMessage =\r\n    \"API call failed, please try again and let us know if issue is not resolved.\";\r\n\r\n  const benefitApiMap = {\r\n    [BenefitNameEnum.GitHubPro]: mvpApi.claimUserProfileBenefitsGithubPro,\r\n    [BenefitNameEnum.MCP]: mvpApi.claimUserProfileBenefitsMcp,\r\n    [BenefitNameEnum.LinkedInLearning]: mvpApi.claimUserProfileBenefitsLinkedIn,\r\n    [BenefitNameEnum.M365]: mvpApi.claimUserProfileBenefitsM365,\r\n    [BenefitNameEnum.MS365]: mvpApi.claimUserProfileBenefitsMS365,\r\n    [BenefitNameEnum.Teams]: mvpApi.claimUserProfileBenefitsTeams,\r\n    [BenefitNameEnum.AwardKits]: mvpApi.claimUserProfileBenefitsAwardKits,\r\n  };\r\n\r\n  try {\r\n    const apiCall = benefitApiMap[action.benefitType];\r\n    const { result, timeout }: IApiResult2<IClaimBenefitDataResult> | any = yield race({\r\n      result: call(apiCall, action.userProfileId, action.Sku ? action.Sku : \"\"),\r\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\r\n    });\r\n\r\n    if (timeout) {\r\n      yield put(claimBenefitFail(GENERIC_API_TIMEOUT_ERROR));\r\n      return;\r\n    }\r\n\r\n    switch (result.httpStatusCode) {\r\n      case HttpStatusCode.CreatedAt:\r\n        const requestResult = result.parsedBody as IClaimBenefitResult;\r\n        if (!requestResult.isSuccess) {\r\n          yield put(claimBenefitFail(failedMessage));\r\n        }\r\n        yield put(claimBenefitSuccess());\r\n        break;\r\n      case HttpStatusCode.BadRequest:\r\n        yield put(claimBenefitFail((result.parsedBody as IApiErrorResult).error.message));\r\n      default:\r\n        yield put(claimBenefitFail((result.parsedBody as IApiErrorResult).error.message));\r\n    }\r\n  } catch (error) {\r\n    yield put(claimBenefitFail(failedMessage));\r\n  }\r\n}\r\n\r\n/**\r\n * Generator function to async dispatch action\r\n * @generator\r\n * @param {IMVPFetchComments} action To get user's comments.\r\n * @returns {void}\r\n */\r\nfunction* handleMVPCommentsFetch(action: IMVPFetchComments) {\r\n  const defaultFailedErrorMessage = \"Failed to fetch user profile comments\";\r\n  const { mvpUserProfileId, fromLastRenewal } = action;\r\n  try {\r\n    const { result, timeout } = yield race({\r\n      result: call(mvpApi.fetchUserComments, mvpUserProfileId, fromLastRenewal),\r\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\r\n    });\r\n\r\n    if (timeout) {\r\n      yield put(fetchUserProfileCommentsFail(GENERIC_API_TIMEOUT_ERROR));\r\n      return;\r\n    }\r\n\r\n    const { userProfileComments } = result.parsedBody as ICommentsGetResult;\r\n\r\n    switch (result.status) {\r\n      case HttpStatusCode.Ok:\r\n        yield put(fetchUserProfileCommentsSuccess(userProfileComments));\r\n        break;\r\n      case HttpStatusCode.BadRequest:\r\n        yield put(fetchUserProfileCommentsFail((result.body as IApiErrorResult).error.message));\r\n        break;\r\n      default:\r\n        yield put(fetchUserProfileCommentsFail(defaultFailedErrorMessage));\r\n        break;\r\n    }\r\n  } catch (error) {\r\n    yield put(fetchUserProfileCommentsFail(defaultFailedErrorMessage));\r\n  }\r\n}\r\n\r\n/**\r\n * Generator function to async dispatch action\r\n * @generator\r\n * @param {IMVPAddNewComment} action To add comment.\r\n * @returns {void}\r\n */\r\nfunction* handleMVPAddComment(action: IMVPAddNewComment) {\r\n  const defaultFailedErrorMessage = \"Failed to comment\";\r\n  const { newComment, userProfileId, createdBy } = action;\r\n  const requestBody: ICommentAddRequest = {\r\n    userProfileComment: {\r\n      userProfileId,\r\n      text: newComment,\r\n      createdBy,\r\n      tenantName: TenantTypesEnum.MVP,\r\n    },\r\n  };\r\n\r\n  try {\r\n    const { result, timeout } = yield race({\r\n      result: call(mvpApi.addNewComment, requestBody),\r\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\r\n    });\r\n\r\n    if (timeout) {\r\n      yield put(addNewCommentFail(GENERIC_API_TIMEOUT_ERROR));\r\n      return;\r\n    }\r\n\r\n    const { userProfileId } = result.parsedBody as ICommentAddResult;\r\n\r\n    switch (result.status) {\r\n      case HttpStatusCode.Ok:\r\n        yield put(addNewCommentSuccess(userProfileId));\r\n        break;\r\n      case HttpStatusCode.BadRequest:\r\n        yield put(addNewCommentFail((result.body as IApiErrorResult).error.message));\r\n        break;\r\n      default:\r\n        yield put(addNewCommentFail(defaultFailedErrorMessage));\r\n        break;\r\n    }\r\n  } catch (error) {\r\n    yield put(addNewCommentFail(defaultFailedErrorMessage));\r\n  }\r\n}\r\n\r\n/**\r\n * Generator function to async dispatch action\r\n * @generator\r\n * @param {IMVPFetchProgramProfile} action To get Program profile.\r\n * @returns {void}\r\n */\r\nfunction* handleMVPProgramProfileFetch(action: IMVPFetchProgramProfile) {\r\n  const defaultFailedErrorMessage = \"Failed to fetch Program profile\";\r\n  const { programProfileId } = action;\r\n  try {\r\n    const { result, timeout } = yield race({\r\n      result: call(mvpApi.fetchProgramProfile, programProfileId),\r\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\r\n    });\r\n\r\n    if (timeout) {\r\n      yield put(fetchProgramProfileFail(GENERIC_API_TIMEOUT_ERROR));\r\n      return;\r\n    }\r\n\r\n    const programProfile = result.parsedBody as IMVPProgramProfile;\r\n\r\n    switch (result.status) {\r\n      case HttpStatusCode.Ok:\r\n        yield put(fetchProgramProfileSuccess(programProfile));\r\n        break;\r\n      case HttpStatusCode.BadRequest:\r\n        yield put(fetchProgramProfileFail((result.body as IApiErrorResult).error.message));\r\n        break;\r\n      default:\r\n        yield put(fetchProgramProfileFail(defaultFailedErrorMessage));\r\n        break;\r\n    }\r\n  } catch (error) {\r\n    yield put(fetchProgramProfileFail(defaultFailedErrorMessage));\r\n  }\r\n}\r\n\r\n/**\r\n * Generator function to async dispatch action\r\n * @generator\r\n * @param {IMVPFetchProgramProfile} action To get Program profile.\r\n * @returns {void}\r\n */\r\nfunction* handleMVPRetireProfileFetch(action: IMVPFetchRetireProfile) {\r\n  const defaultFailedErrorMessage = \"Failed to fetch retire profile\";\r\n  const { userProfileId } = action;\r\n  try {\r\n    const { result, timeout } = yield race({\r\n      result: call(mvpApi.fetchRetireProfile, userProfileId),\r\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\r\n    });\r\n\r\n    if (timeout) {\r\n      yield put(fetchRetireProfileFail(GENERIC_API_TIMEOUT_ERROR));\r\n      return;\r\n    }\r\n\r\n    const retireProfile = result.parsedBody as IMVPRetireProfileResponse;\r\n\r\n    switch (result.status) {\r\n      case HttpStatusCode.Ok:\r\n        yield put(fetchRetireProfileSuccess(retireProfile));\r\n        break;\r\n      case HttpStatusCode.BadRequest:\r\n        yield put(fetchRetireProfileFail((result.body as IApiErrorResult).error.message));\r\n        break;\r\n      default:\r\n        yield put(fetchRetireProfileFail(defaultFailedErrorMessage));\r\n        break;\r\n    }\r\n  } catch (error) {\r\n    yield put(fetchRetireProfileFail(defaultFailedErrorMessage));\r\n  }\r\n}\r\n\r\n/**\r\n * Generator function to async dispatch action\r\n * @generator\r\n * @param {IMVPUpdateProgramProfile} action To update program profile.\r\n * @returns {void}\r\n */\r\nfunction* handleMVPUpdateProgramProfile(action: IMVPUpdateProgramProfile) {\r\n  const defaultFailedErrorMessage = \"Failed to update program profile\";\r\n\r\n  try {\r\n    const { result, timeout } = yield race({\r\n      result: call(mvpApi.updateProgramProfile, action.programProfile),\r\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\r\n    });\r\n\r\n    if (timeout) {\r\n      yield put(updateProgramProfileFail(GENERIC_API_TIMEOUT_ERROR));\r\n      return;\r\n    }\r\n\r\n    switch (result.status) {\r\n      case HttpStatusCode.Ok:\r\n        yield put(updateProgramProfileSuccess());\r\n        break;\r\n      case HttpStatusCode.BadRequest:\r\n        yield put(updateProgramProfileFail((result.body as IApiErrorResult).error.message));\r\n        break;\r\n      default:\r\n        yield put(updateProgramProfileFail(defaultFailedErrorMessage));\r\n        break;\r\n    }\r\n  } catch (error) {\r\n    yield put(updateProgramProfileFail(defaultFailedErrorMessage));\r\n  }\r\n}\r\n\r\n/**\r\n * Generator function to async dispatch action\r\n * @generator\r\n * @param {IMVPAddAzureBenefitDetail} action To update azure benefit .\r\n * @returns {void}\r\n */\r\nfunction* handleAddAzureBenefit(action: IMVPAddAzureBenefitDetail) {\r\n  const failedMessage = \"Failed to add Azure Benefit \";\r\n  try {\r\n    const { result, timeout } = yield race({\r\n      result: call(mvpApi.saveAzureBenefitClaim, action.azureBenefit, action.userProfileId),\r\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\r\n    });\r\n\r\n    if (timeout) {\r\n      yield put(addAzureBenefitDetailFail(GENERIC_API_TIMEOUT_ERROR));\r\n    }\r\n\r\n    switch (result.httpStatusCode) {\r\n      case HttpStatusCode.Ok:\r\n        const requestResult = result.parsedBody;\r\n        if (!requestResult.isSuccess) {\r\n          yield put(addAzureBenefitDetailFail(failedMessage));\r\n        }\r\n        yield put(addAzureBenefitDetailSuccess());\r\n        break;\r\n      case HttpStatusCode.BadRequest:\r\n        yield put(addAzureBenefitDetailFail((result.parsedBody as IApiErrorResult).error.message));\r\n        break;\r\n      default:\r\n        yield put(addAzureBenefitDetailFail(failedMessage));\r\n        break;\r\n    }\r\n  } catch (error) {\r\n    yield put(addAzureBenefitDetailFail(failedMessage));\r\n  }\r\n}\r\n\r\n/**\r\n * Generator function to async dispatch action\r\n * @generator\r\n * @param {IMVPRetireProfile} action To update program profile.\r\n * @returns {void}\r\n */\r\nfunction* handleMVPRetireProfile(action: IMVPRetireProfile) {\r\n  const defaultFailedErrorMessage = \"Failed to retire profile\";\r\n\r\n  try {\r\n    const { result, timeout } = yield race({\r\n      result: call(mvpApi.retireProfile, action.retireProfile),\r\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\r\n    });\r\n\r\n    if (timeout) {\r\n      yield put(retireProfileFail(GENERIC_API_TIMEOUT_ERROR));\r\n      return;\r\n    }\r\n\r\n    switch (result.status) {\r\n      case HttpStatusCode.Ok:\r\n        yield put(retireProfileSuccess());\r\n        break;\r\n      case HttpStatusCode.BadRequest:\r\n        yield put(retireProfileFail((result.body as IApiErrorResult).error.message));\r\n        break;\r\n      default:\r\n        yield put(retireProfileFail(defaultFailedErrorMessage));\r\n        break;\r\n    }\r\n  } catch (error) {\r\n    yield put(retireProfileFail(defaultFailedErrorMessage));\r\n  }\r\n}\r\n\r\n/**\r\n * Generator function to async dispatch action\r\n * @generator\r\n * @param {IMVPFetchUserProfile} action To get user profile.\r\n * @returns {void}\r\n */\r\nfunction* handleMVPUserProfileFetch(action: IMVPFetchUserProfile) {\r\n  const defaultFailedErrorMessage = \"Failed to fetch user profile\";\r\n  const { mvpUserProfileId } = action;\r\n  try {\r\n    const { result, timeout } = yield race({\r\n      result: call(mvpApi.fetchUserProfile, mvpUserProfileId),\r\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\r\n    });\r\n\r\n    if (timeout) {\r\n      yield put(fetchUserProfileFail(GENERIC_API_TIMEOUT_ERROR));\r\n      return;\r\n    }\r\n\r\n    const { userProfile } = result.parsedBody as IMVPUserProfileGetResult;\r\n\r\n    switch (result.status) {\r\n      case HttpStatusCode.Ok:\r\n        yield put(fetchUserProfileSuccess(userProfile));\r\n        break;\r\n      case HttpStatusCode.BadRequest:\r\n        yield put(fetchUserProfileFail((result.body as IApiErrorResult).error.message));\r\n        break;\r\n      default:\r\n        yield put(fetchUserProfileFail(defaultFailedErrorMessage));\r\n        break;\r\n    }\r\n  } catch (error) {\r\n    yield put(fetchUserProfileFail(defaultFailedErrorMessage));\r\n  }\r\n}\r\n\r\n/**\r\n * Generator function to async dispatch action\r\n * @generator\r\n * @param {IMVPUserProfilesSearch} action To search user profile for given text.\r\n * @returns {void}\r\n */\r\nfunction* handleMVPSearchUserProfiles(action: IMVPUserProfilesSearch) {\r\n  const failedMessage = \"Failed to search the user profiles.\";\r\n  const requestBody = mapFilterValuesToRequestBody(action.selectedFilterValues);\r\n  requestBody.searchKey = action.searchText;\r\n  requestBody.pageIndex = action.searchPage;\r\n  requestBody.pageSize = action.pageSize;\r\n  requestBody.sortColumn = action.sortColumn;\r\n  requestBody.sortDescending = action.sortDescending;\r\n\r\n  try {\r\n    const { result, timeout } = yield race({\r\n      result: call(mvpApi.searchUserProfiles, requestBody),\r\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\r\n    });\r\n\r\n    if (timeout) {\r\n      yield put(searchUserProfilesFail(GENERIC_API_TIMEOUT_ERROR));\r\n      return;\r\n    }\r\n\r\n    const { userProfiles, filteredCount } = result.parsedBody as IMVPUserProfileSearchResult;\r\n\r\n    switch (result.httpStatusCode) {\r\n      case HttpStatusCode.Ok:\r\n        yield put(\r\n          searchUserProfileSuccess(filteredCount, action.searchPage, action.pageSize, userProfiles)\r\n        );\r\n        break;\r\n      case HttpStatusCode.BadRequest:\r\n        yield put(searchUserProfilesFail((result.parsedBody as IApiErrorResult).error.message));\r\n        break;\r\n      default:\r\n        yield put(searchUserProfilesFail(failedMessage));\r\n        break;\r\n    }\r\n  } catch (error) {\r\n    yield put(searchUserProfilesFail(failedMessage));\r\n  }\r\n}\r\n\r\n/**\r\n * Generator function to async dispatch action\r\n * @generator\r\n * @param {IMVPFetchM365BenefitDetail} action To get the users M365 Benefit Details.\r\n * @returns {void}\r\n */\r\nfunction* handleMVPGetM365BenefitDetail(action: IMVPFetchM365BenefitDetail) {\r\n  const failedMessage = \"Failed to get O365 Benefit Details\";\r\n\r\n  try {\r\n    const { result, timeout } = yield race({\r\n      result: call(mvpApi.getM365BenefitDetails, action.userProfileId),\r\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\r\n    });\r\n\r\n    if (timeout) {\r\n      yield put(fetchM365BenefitDetailFailure(GENERIC_API_TIMEOUT_ERROR));\r\n    }\r\n\r\n    switch (result.httpStatusCode) {\r\n      case HttpStatusCode.Ok:\r\n        yield put(fetchM365BenefitDetailSuccess(result.parsedBody as IM365BenefitDetail));\r\n        break;\r\n      case HttpStatusCode.BadRequest:\r\n        yield put(\r\n          fetchM365BenefitDetailFailure((result.parsedBody as IApiErrorResult).error.message)\r\n        );\r\n        break;\r\n      default:\r\n        yield put(fetchM365BenefitDetailFailure(failedMessage));\r\n        break;\r\n    }\r\n  } catch (error) {\r\n    yield put(fetchM365BenefitDetailFailure(failedMessage));\r\n  }\r\n}\r\n\r\n/**\r\n * Generator function to async dispatch action\r\n * @generator\r\n * @param {IMVPUpdateM365BenefitDetail} action To update/create the users M365 Benefit Details.\r\n * @returns {void}\r\n */\r\nfunction* handleMVPUpdateM365BenefitDetail(action: IMVPUpdateM365BenefitDetail) {\r\n  const failedMessage = \"Failed to update M365 Benefit Details\";\r\n\r\n  try {\r\n    const { result, timeout } = yield race({\r\n      result: call(mvpApi.updateM365BenefitDetails, action.m365BenefitDetail),\r\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\r\n    });\r\n\r\n    if (timeout) {\r\n      yield put(updateM365BenefitDetailFailure(GENERIC_API_TIMEOUT_ERROR));\r\n    }\r\n\r\n    switch (result.httpStatusCode) {\r\n      case HttpStatusCode.CreatedAt:\r\n        yield put(updateM365BenefitDetailSuccess(result.parsedBody as IM365BenefitDetail));\r\n        break;\r\n      case HttpStatusCode.BadRequest:\r\n        yield put(\r\n          updateM365BenefitDetailFailure((result.parsedBody as IApiErrorResult).error.message)\r\n        );\r\n        break;\r\n      default:\r\n        yield put(updateM365BenefitDetailFailure(failedMessage));\r\n        break;\r\n    }\r\n  } catch (error) {\r\n    yield put(updateM365BenefitDetailFailure(failedMessage));\r\n  }\r\n}\r\n\r\n/**\r\n * Generator function to async dispatch action\r\n * @generator\r\n * @param {IMVPFetchM365BenefitDetail} action To get the users Microsoft 365 Benefit Details.\r\n * @returns {void}\r\n */\r\nfunction* handleMVPGetMS365BenefitDetail(action: IMVPFetchM365BenefitDetail) {\r\n  const failedMessage = \"Failed to get O365 Benefit Details\";\r\n\r\n  try {\r\n    const { result, timeout } = yield race({\r\n      result: call(mvpApi.getMS365BenefitDetails, action.userProfileId),\r\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\r\n    });\r\n\r\n    if (timeout) {\r\n      yield put(fetchMS365BenefitDetailFailure(GENERIC_API_TIMEOUT_ERROR));\r\n    }\r\n\r\n    switch (result.httpStatusCode) {\r\n      case HttpStatusCode.Ok:\r\n        yield put(fetchMS365BenefitDetailSuccess(result.parsedBody as IMicrosoft365BenefitDetail));\r\n        break;\r\n      case HttpStatusCode.BadRequest:\r\n        yield put(\r\n          fetchMS365BenefitDetailFailure((result.parsedBody as IApiErrorResult).error.message)\r\n        );\r\n        break;\r\n      default:\r\n        yield put(fetchMS365BenefitDetailFailure(failedMessage));\r\n        break;\r\n    }\r\n  } catch (error) {\r\n    yield put(fetchMS365BenefitDetailFailure(failedMessage));\r\n  }\r\n}\r\n\r\n/**\r\n * Generator function to async dispatch action\r\n * @generator\r\n * @param {IMVPUpdateM365BenefitDetail} action To update/create the users Microsoft 365 Benefit Details.\r\n * @returns {void}\r\n */\r\nfunction* handleMVPUpdateMS365BenefitDetail(action: IMVPUpdateMS365BenefitDetail) {\r\n  const failedMessage = \"Failed to update M365 Benefit Details\";\r\n\r\n  try {\r\n    const { result, timeout } = yield race({\r\n      result: call(mvpApi.updateMS365BenefitDetails, action.ms365BenefitDetail),\r\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\r\n    });\r\n\r\n    if (timeout) {\r\n      yield put(updateMS365BenefitDetailFailure(GENERIC_API_TIMEOUT_ERROR));\r\n    }\r\n\r\n    switch (result.httpStatusCode) {\r\n      case HttpStatusCode.CreatedAt:\r\n        yield put(updateMS365BenefitDetailSuccess(result.parsedBody as IMicrosoft365BenefitDetail));\r\n        break;\r\n      case HttpStatusCode.BadRequest:\r\n        yield put(\r\n          updateMS365BenefitDetailFailure((result.parsedBody as IApiErrorResult).error.message)\r\n        );\r\n        break;\r\n      default:\r\n        yield put(updateMS365BenefitDetailFailure(failedMessage));\r\n        break;\r\n    }\r\n  } catch (error) {\r\n    yield put(updateMS365BenefitDetailFailure(failedMessage));\r\n  }\r\n}\r\n\r\n/**\r\n * Generator function to async dispatch action\r\n * @generator\r\n * @param {IMVPExtendAzureBenefitCredit} action To update/create the users M365 Benefit Details.\r\n * @returns {void}\r\n */\r\nfunction* handleMVPExtendAzureBenefitCredit(action: IMVPExtendAzureBenefitCredit) {\r\n  const failedMessage = \"Failed to extend Azure Benefit Credit\";\r\n\r\n  try {\r\n    const { result, timeout } = yield race({\r\n      result: call(mvpApi.extendAzureBenefitCredit, action.credit, action.userProfileId),\r\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\r\n    });\r\n\r\n    if (timeout) {\r\n      yield put(updateM365BenefitDetailFailure(GENERIC_API_TIMEOUT_ERROR));\r\n    }\r\n\r\n    switch (result.httpStatusCode) {\r\n      case HttpStatusCode.Ok:\r\n        const requestResult = result.parsedBody as IExtendAzureBenefitCreditResult;\r\n        if (!requestResult.success) {\r\n          yield put(extendAzureBenefitCreditFailure(failedMessage));\r\n        }\r\n        yield put(extendAzureBenefitCreditSuccess(requestResult.capCredit));\r\n        break;\r\n      case HttpStatusCode.BadRequest:\r\n        yield put(\r\n          extendAzureBenefitCreditFailure((result.parsedBody as IApiErrorResult).error.message)\r\n        );\r\n        break;\r\n      default:\r\n        yield put(extendAzureBenefitCreditFailure(failedMessage));\r\n        break;\r\n    }\r\n  } catch (error) {\r\n    yield put(extendAzureBenefitCreditFailure(failedMessage));\r\n  }\r\n}\r\n\r\n/**\r\n * Handle calling the api to update a user profile asynchronously.\r\n * @param {IUpdateUserProfile} action To update user profile.\r\n * @returns {Generator} the profile actions.\r\n */\r\nfunction* handleMVPUpdateUserProfileBlockShipping(\r\n  action: IUserProfileUpdateBlockShipping\r\n): Generator {\r\n  const failedMessage = \"Failed to update the shipping status for this user profile.\";\r\n\r\n  const userProfileToUpdate: IUserProfileBlockShippingRequest = {\r\n    userProfileId: action.userProfileId,\r\n    blockShipping: action.isShippingBlocked,\r\n  };\r\n\r\n  try {\r\n    const { result, timeout }: IApiResult2<IUserProfileBlockShippingDataResult> | any = yield race({\r\n      result: call(mvpApi.updateUserProfileBlockShipping, userProfileToUpdate),\r\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\r\n    });\r\n\r\n    if (timeout) {\r\n      yield put(userProfileUpdateBlockShippingFail(GENERIC_API_TIMEOUT_ERROR));\r\n      return;\r\n    }\r\n\r\n    switch (result.httpStatusCode) {\r\n      case HttpStatusCode.Ok:\r\n        yield put(userProfileUpdateBlockShippingSuccess(result.parsedBody as number));\r\n        break;\r\n      case HttpStatusCode.BadRequest:\r\n        yield put(\r\n          userProfileUpdateBlockShippingFail((result.parsedBody as IApiErrorResult).error.message)\r\n        );\r\n        break;\r\n      default:\r\n        yield put(userProfileUpdateBlockShippingFail(failedMessage));\r\n        break;\r\n    }\r\n  } catch (error) {\r\n    yield put(userProfileUpdateBlockShippingFail(error.toString()));\r\n  }\r\n}\r\n\r\n/**\r\n * Generator function to async dispatch action\r\n * @generator\r\n * @param {IUserProfileDlLoad} action To remove dl.\r\n * @returns {void}\r\n */\r\nfunction* handleMVPUserProfileIsPrivateUpdate(action: IMVPUserProfileIsPrivateUpdate) {\r\n  const failedMessage = \"Failed to set the is private flag for profile\";\r\n\r\n  try {\r\n    const { result, timeout }: IApiResult2<IApiEmptyResult> | any = yield race({\r\n      result: call(mvpApi.updateUserProfileIsPrivate, action.userProfileId, action.isPrivate),\r\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\r\n    });\r\n\r\n    if (timeout) {\r\n      yield put(userProfileIsPrivateUpdateFail(GENERIC_API_TIMEOUT_ERROR));\r\n      return;\r\n    }\r\n\r\n    switch (result.status) {\r\n      case HttpStatusCode.Ok:\r\n        yield put(userProfileIsPrivateUpdateSuccess());\r\n        break;\r\n      case HttpStatusCode.BadRequest:\r\n        yield put(\r\n          userProfileIsPrivateUpdateFail((result.parsedBody as IApiErrorResult).error.message)\r\n        );\r\n        break;\r\n      default:\r\n        yield put(userProfileIsPrivateUpdateFail(failedMessage));\r\n        break;\r\n    }\r\n  } catch (error) {\r\n    yield put(userProfileIsPrivateUpdateFail(error));\r\n  }\r\n}\r\n\r\n/**\r\n * Generator function to async dispatch action\r\n * @param action To update primary email for profile.\r\n * @returns {Generator}\r\n */\r\nfunction* handleMVPUserProfilePrimaryEmailUpdate(\r\n  action: IMVPUserProfilePrimaryEmailUpdate\r\n): Generator {\r\n  const failedMessage = \"Failed to set the primary email for profile\";\r\n\r\n  try {\r\n    const { result, timeout }: IApiResult2<IApiEmptyResult> | any = yield race({\r\n      result: call(mvpApi.updateUserProfilePrimaryEmail, action.userProfileId, action.newEmail),\r\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\r\n    });\r\n\r\n    if (timeout) {\r\n      yield put(userProfilePrimaryEmailUpdateFail(GENERIC_API_TIMEOUT_ERROR));\r\n      return;\r\n    }\r\n\r\n    switch (result.status) {\r\n      case HttpStatusCode.Ok:\r\n        yield put(userProfilePrimaryEmailUpdateSuccess());\r\n        break;\r\n      case HttpStatusCode.BadRequest:\r\n        yield put(\r\n          userProfilePrimaryEmailUpdateFail((result.parsedBody as IApiErrorResult).error.message)\r\n        );\r\n        break;\r\n      default:\r\n        yield put(userProfilePrimaryEmailUpdateFail(failedMessage));\r\n        break;\r\n    }\r\n  } catch (error) {\r\n    yield put(\r\n      userProfilePrimaryEmailUpdateFail(\r\n        `Handle Update Primary Email API failed: ${error as string}`\r\n      )\r\n    );\r\n  }\r\n}\r\n\r\n/**\r\n * Generator function to async dispatch action\r\n * @generator\r\n * @param {IMVPUserProfileAnnualExceptionUpdate} action To update userprofile annual exception.\r\n * @returns {void}\r\n */\r\nfunction* handleMVPUserProfileAnnualExceptionUpdate(action: IMVPUserProfileAnnualExceptionUpdate) {\r\n  const failedMessage =\r\n    \"Failed to set the annual exception, please check if this user is eligible for renewal and renew application exists\";\r\n\r\n  try {\r\n    const { result, timeout }: IApiResult2<IApiEmptyResult> | any = yield race({\r\n      result: call(\r\n        mvpApi.updateUserProfileAnnualException,\r\n        action.userProfileId,\r\n        action.justification\r\n      ),\r\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\r\n    });\r\n\r\n    if (timeout) {\r\n      yield put(userProfileAnnualExceptionUpdateFail(GENERIC_API_TIMEOUT_ERROR));\r\n      return;\r\n    }\r\n\r\n    switch (result.status) {\r\n      case HttpStatusCode.Ok:\r\n        yield put(userProfileAnnualExceptionUpdateSuccess());\r\n        break;\r\n      case HttpStatusCode.BadRequest:\r\n        yield put(\r\n          userProfileAnnualExceptionUpdateFail((result.parsedBody as IApiErrorResult).error.message)\r\n        );\r\n        break;\r\n      default:\r\n        yield put(userProfileAnnualExceptionUpdateFail(failedMessage));\r\n        break;\r\n    }\r\n  } catch (error) {\r\n    yield put(userProfileAnnualExceptionUpdateFail(error));\r\n  }\r\n}\r\n\r\nexport {\r\n  handleMVPSearchUserProfiles,\r\n  handleMVPFetchProfileBenefits,\r\n  handleMVPClaimBenefit,\r\n  handleMVPCommentsFetch,\r\n  handleMVPAddComment,\r\n  handleMVPUserProfileFetch,\r\n  handleMVPProgramProfileFetch,\r\n  handleMVPRetireProfileFetch,\r\n  handleMVPUpdateProgramProfile,\r\n  handleAddAzureBenefit,\r\n  handleMVPRetireProfile,\r\n  handleMVPGetM365BenefitDetail,\r\n  handleMVPUpdateM365BenefitDetail,\r\n  handleMVPGetMS365BenefitDetail,\r\n  handleMVPUpdateMS365BenefitDetail,\r\n  handleMVPUpdateUserProfileBlockShipping,\r\n  handleMVPExtendAzureBenefitCredit,\r\n  handleMVPUserProfileIsPrivateUpdate,\r\n  handleMVPUserProfilePrimaryEmailUpdate,\r\n  handleMVPUserProfileAnnualExceptionUpdate,\r\n};\r\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { call, delay, put, race } from \"redux-saga/effects\";\n\nimport * as siteContentApi from \"../../Services/SiteContentApi\";\n\nimport { IGetProgramLanguageDataResult } from \"Services/Interfaces/SiteContent/IGetProgramLanguageDataResult\";\nimport { IGetProgramLanguageOkResult } from \"Services/Interfaces/SiteContent/IGetProgramLanguageOkResult\";\n\nimport { GENERIC_API_TIMEOUT_ERROR } from \"../../Constants/ApplicationConstants\";\nimport { HttpStatusCode } from \"../../Constants/HttpStatusCode\";\nimport { IApiErrorResult, IApiResult2 } from \"../../Utility/IApiResult\";\nimport { getDefaultApiTimeOutConfiguration } from \"../../Utility/Utils\";\nimport { getProgramLanguageFailure, getProgramLanguageSuccess } from \"./ProgramLanguageAction\";\n\n/**\n * Handle load program language\n * NOTE: Errors need to be caught and handled by the caller as since this is just a util, there is no telemetry instance.\n * @returns {void} void.\n */\nfunction* handleLoadProgramLanguage() {\n  try {\n    const { result, timeout }: IApiResult2<IGetProgramLanguageDataResult> | any = yield race({\n      result: call(siteContentApi.fetchProgramLanguageList),\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\n    });\n\n    if (timeout) {\n      yield put(getProgramLanguageFailure(GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n\n    switch (result.httpStatusCode) {\n      case HttpStatusCode.Ok:\n        yield put(\n          getProgramLanguageSuccess(\n            (result.parsedBody as IGetProgramLanguageOkResult).programLanguages\n          )\n        );\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(getProgramLanguageFailure((result.parsedBody as IApiErrorResult).error.message));\n        break;\n      case HttpStatusCode.NotFound:\n        yield put(getProgramLanguageFailure((result.parsedBody as IApiErrorResult).error.message));\n        break;\n      default:\n        yield put(getProgramLanguageFailure((result.parsedBody as IApiErrorResult).error.message));\n        break;\n    }\n  } catch (error) {\n    yield put(getProgramLanguageFailure(error.message));\n  }\n}\n\nexport { handleLoadProgramLanguage };\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport {\n  BENEFIT_BASE_URL,\n  RD_PROFILE_BASE_URL,\n  RD_PROGRAM_PROFILE_BASE_URL,\n} from \"Constants/SagaConstants\";\nimport { TenantTypesEnum } from \"Constants/TenantTypes\";\nimport { IClaimBenefitDataResult } from \"Interfaces/Benefits/IClaimBenefitDataResult\";\nimport { IExtendAzureBenefitCreditDataResult } from \"Interfaces/Benefits/IExtendAzureBenefitCreditDataResult\";\nimport { IM365BenefitDetail } from \"Interfaces/Benefits/IM365BenefitDetail\";\nimport { IM365BenefitDetailDataResult } from \"Interfaces/Benefits/IM365BenefitDetailDataResult\";\nimport { IMicrosoft365BenefitDetail } from \"Interfaces/Benefits/IMicrosoft365BenefitDetail\";\nimport { IMicrosoft365BenefitDetailDataResult } from \"Interfaces/Benefits/IMicrosoft365BenefitDetailDataResult\";\nimport { IProfileBenefitDataResult } from \"Interfaces/Benefits/IProfileBenefitDataResult\";\nimport { ICommentAddRequest } from \"Interfaces/Comments/ICommentAddRequest\";\nimport { ICommentAddResult } from \"Interfaces/Comments/ICommentAddResult\";\nimport { ICommentsGetResult } from \"Interfaces/Comments/ICommentsGetResult\";\nimport { IApiEmptyResult, IApiResult2 } from \"Interfaces/IApiResult\";\nimport { IProgramProfileUpdateRequest } from \"Interfaces/ProgramProfile/IProgramProfileUpdateRequest\";\nimport { IProgramProfileUpdateResult } from \"Interfaces/ProgramProfile/IProgramProfileUpdateResult\";\nimport { IGetRDUserProfilesRequest } from \"Interfaces/RD/UserProfile/IGetRDUserProfilesRequest\";\nimport { IRDAzureBenefitClaim } from \"Interfaces/RD/IRDAzureBenefitClaim\";\nimport { IRDUserProfileGetResult } from \"Interfaces/RD/UserProfile/IRDUserProfileGetResult\";\nimport { IRDUserProfilesSearchResult } from \"Interfaces/RD/UserProfile/IRDUserProfilesSearchResult\";\nimport { IUserProfileDataResult } from \"Interfaces/UserProfile/IUserProfileDataResult\";\nimport { get, post, put, IHttpResponse } from \"Services/ApiUtils\";\n\n/**\n * Search all the user profiles for entered text.\n * @param {IGetRDUserProfilesRequest} searchRequest - The search request\n */\nexport async function searchRDUserProfiles(\n  searchRequest: IGetRDUserProfilesRequest\n): Promise<IHttpResponse<IApiResult2<IRDUserProfilesSearchResult>>> {\n  return await post<IApiResult2<IRDUserProfilesSearchResult>>(\n    RD_PROFILE_BASE_URL + \"search\",\n    searchRequest,\n    true\n  );\n}\n\n/**\n * Download user profiles.\n * @param {IGetRDUserProfilesRequest} request The request\n */\nexport async function downloadRDUserProfiles(\n  request: IGetRDUserProfilesRequest\n): Promise<IHttpResponse<IApiResult2<string>>> {\n  return await post<IApiResult2<string>>(RD_PROFILE_BASE_URL + \"download\", request, true, false, {\n    method: \"POST\",\n    body: JSON.stringify(request),\n    headers: { \"Content-Type\": \"application/octet-stream\" },\n  });\n}\n\n/**\n * Fetch RD user profile.\n * @param {number} rdUserProfileId The user profile id to fetch.\n */\nexport async function fetchRDUserProfile(\n  rdUserProfileId: number\n): Promise<IHttpResponse<IApiResult2<IRDUserProfileGetResult>>> {\n  return await get<IApiResult2<IRDUserProfileGetResult>>(\n    RD_PROFILE_BASE_URL + rdUserProfileId,\n    true\n  );\n}\n\n/**\n * Fetch RD user profile comments.\n * @param {number} rdUserProfileId The user profile id to fetch.\n */\nexport async function fetchRDUserProfileComments(\n  rdUserProfileId: number\n): Promise<IHttpResponse<IApiResult2<ICommentsGetResult>>> {\n  return await get<IApiResult2<ICommentsGetResult>>(\n    RD_PROFILE_BASE_URL + rdUserProfileId + \"/Comments\",\n    true\n  );\n}\n\n/**\n * Add RD user profile comment.\n * @param {ICommentAddRequest} request The request.\n */\nexport async function addRDUserProfileComment(\n  request: ICommentAddRequest\n): Promise<IHttpResponse<IApiResult2<ICommentAddResult>>> {\n  return await post<IApiResult2<ICommentAddResult>>(\n    RD_PROFILE_BASE_URL + request.userProfileComment.userProfileId + \"/Comments\",\n    request,\n    true\n  );\n}\n\n/**\n * Get RD Program profile.\n * @param {userProfileId} number The request.\n */\nexport async function getRDProgramProfile(\n  userProfileId: number\n): Promise<IHttpResponse<IApiResult2<any>>> {\n  return await get<IApiResult2<any>>(RD_PROGRAM_PROFILE_BASE_URL + userProfileId, true);\n}\n\n/**\n * Update RD Program profile.\n * @param {IProgramProfileUpdateRequest} request The request.\n */\nexport async function updateRDProgramProfile(\n  request: IProgramProfileUpdateRequest\n): Promise<IHttpResponse<IApiResult2<IProgramProfileUpdateResult>>> {\n  return await put<IApiResult2<IProgramProfileUpdateResult>>(\n    RD_PROGRAM_PROFILE_BASE_URL,\n    request,\n    true\n  );\n}\n\n/**\n * Claims the github pro benefit for the user profile.\n * @param {number} userProfileId The profile id.\n * @returns {IClaimBenefitDataResult}\n */\nexport async function claimUserProfileBenefitsGithubPro(\n  userProfileId: number\n): Promise<IHttpResponse<IApiResult2<IClaimBenefitDataResult>>> {\n  return await post<IApiResult2<IClaimBenefitDataResult>>(\n    `${BENEFIT_BASE_URL.replace(\"{tenant}\", TenantTypesEnum.RD.toLowerCase())}github`,\n    { userProfileId: userProfileId },\n    true\n  );\n}\n\n/**\n * Claims the linkedin benefit for the user profile.\n * @param userProfileId the profile id.\n * @returns {IClaimBenefitDataResult}\n */\nexport async function claimUserProfileBenefitsLinkedIn(\n  userProfileId: number\n): Promise<IHttpResponse<IApiResult2<IClaimBenefitDataResult>>> {\n  return await post<IApiResult2<IClaimBenefitDataResult>>(\n    `${BENEFIT_BASE_URL.replace(\"{tenant}\", TenantTypesEnum.RD.toLowerCase())}linkedin`,\n    { userProfileId: userProfileId },\n    true\n  );\n}\n\n/**\n * Claims the M365 benefit for the user.\n * @param userProfileId the user profile to claim the benefit for.\n * @returns {IClaimBenefitDataResult}\n */\nexport async function claimUserProfileBenefitsM365(\n  userProfileId: number\n): Promise<IHttpResponse<IApiResult2<IClaimBenefitDataResult>>> {\n  return await post<IApiResult2<IClaimBenefitDataResult>>(\n    `${BENEFIT_BASE_URL.replace(\"{tenant}\", TenantTypesEnum.RD.toLowerCase())}m365`,\n    { userProfileId: userProfileId },\n    true\n  );\n}\n\n/**\n * Claims the MS365 benefit for the user.\n * @param userProfileId the user profile to claim the benefit for.\n * @returns {IClaimBenefitDataResult}\n */\nexport async function claimUserProfileBenefitsMS365(\n  userProfileId: number\n): Promise<IHttpResponse<IApiResult2<IClaimBenefitDataResult>>> {\n  return await post<IApiResult2<IClaimBenefitDataResult>>(\n    `${BENEFIT_BASE_URL.replace(\"{tenant}\", TenantTypesEnum.RD.toLowerCase())}ms365`,\n    { userProfileId: userProfileId },\n    true\n  );\n}\n\n/**\n * Gets a users Microsoft 365 Benefit Details.\n * @param userProfileId the userprofile id to fetch the benefit details for.\n * @returns {IMicrosoft365BenefitDetailDataResult}\n */\nexport async function getMS365BenefitDetails(\n  userProfileId: number\n): Promise<IHttpResponse<IApiResult2<IMicrosoft365BenefitDetailDataResult>>> {\n  return await get<IApiResult2<IMicrosoft365BenefitDetailDataResult>>(\n    `${BENEFIT_BASE_URL.replace(\n      \"{tenant}\",\n      TenantTypesEnum.RD.toLowerCase()\n    )}ms365detail/${userProfileId}`,\n    true\n  );\n}\n\n/**\n * Updates the users Microsoft 365 Benefit Details that helps with renewing the MS365 Benefit.\n * @param ms365BenefitDetails the ms365 subscription details to update/add.\n * @returns {IMicrosoft365BenefitDetailDataResult}\n */\nexport async function updateMS365BenefitDetails(\n  m365BenefitDetails: IMicrosoft365BenefitDetail\n): Promise<IHttpResponse<IApiResult2<IMicrosoft365BenefitDetailDataResult>>> {\n  return await put<IApiResult2<IMicrosoft365BenefitDetailDataResult>>(\n    `${BENEFIT_BASE_URL.replace(\"{tenant}\", TenantTypesEnum.RD.toLowerCase())}ms365detail`,\n    m365BenefitDetails,\n    true\n  );\n}\n\n/**\n * Claims the Teams benefit for the user.\n * @param userProfileId the user profile to claim the benefit for.\n * @returns {IClaimBenefitDataResult}\n */\nexport async function claimUserProfileBenefitsTeams(\n  userProfileId: number\n): Promise<IHttpResponse<IApiResult2<IClaimBenefitDataResult>>> {\n  return await post<IApiResult2<IClaimBenefitDataResult>>(\n    `${BENEFIT_BASE_URL.replace(\"{tenant}\", TenantTypesEnum.RD.toLowerCase())}teams`,\n    { userProfileId: userProfileId },\n    true\n  );\n}\n\n/**\n * Gets the benefits for the user profile.\n * @param {number} userProfileId The profile id.\n * @returns {IProfileBenefitDataResult}\n */\nexport async function getProfileBenefits(\n  userProfileId: number\n): Promise<IHttpResponse<IApiResult2<IProfileBenefitDataResult>>> {\n  return await get<IApiResult2<IProfileBenefitDataResult>>(\n    `${BENEFIT_BASE_URL.replace(\"{tenant}\", TenantTypesEnum.RD.toLowerCase())}${userProfileId}`,\n    true\n  );\n}\n\n/**\n * Gets a users M365 Benefit Details.\n * @param userProfileId the userprofile id to fetch the benefit details for.\n * @returns {IM365BenefitDetailDataResult}\n */\nexport async function getM365BenefitDetails(\n  userProfileId: number\n): Promise<IHttpResponse<IApiResult2<IM365BenefitDetailDataResult>>> {\n  return await get<IApiResult2<IM365BenefitDetailDataResult>>(\n    `${BENEFIT_BASE_URL.replace(\n      \"{tenant}\",\n      TenantTypesEnum.RD.toLowerCase()\n    )}m365detail/${userProfileId}`,\n    true\n  );\n}\n\n/**\n * Updates the users M365 Benefit Details that helps with renewing the M365 Benefit.\n * @param m365BenefitDetails the m365 subscription details to update/add.\n * @returns {IM365BenefitDetailDataResult}\n */\nexport async function updateM365BenefitDetails(\n  m365BenefitDetails: IM365BenefitDetail\n): Promise<IHttpResponse<IApiResult2<IM365BenefitDetailDataResult>>> {\n  return await put<IApiResult2<IM365BenefitDetailDataResult>>(\n    `${BENEFIT_BASE_URL.replace(\"{tenant}\", TenantTypesEnum.RD.toLowerCase())}m365detail`,\n    m365BenefitDetails,\n    true\n  );\n}\n\nexport async function extendAzureBenefitCredit(\n  credit: number,\n  userProfileId: number\n): Promise<IHttpResponse<IApiResult2<IExtendAzureBenefitCreditDataResult>>> {\n  return await put<IApiResult2<IExtendAzureBenefitCreditDataResult>>(\n    `${BENEFIT_BASE_URL.replace(\"{tenant}\", TenantTypesEnum.RD.toLowerCase())}azure/extend`,\n    { credit, userProfileId },\n    true\n  );\n}\n\n/**\n * Updates the user profile user flag.\n * @param userProfileId The user profile id.\n * @param isPrivate The user profile flag.\n */\nexport async function updateUserProfileIsPrivate(\n  userProfileId: number,\n  isPrivate: boolean\n): Promise<IHttpResponse<IApiResult2<IApiEmptyResult>>> {\n  return await post<IApiResult2<IApiEmptyResult>>(\n    `${RD_PROFILE_BASE_URL}MarkPrivate`,\n    { userProfileId, isPrivate },\n    true\n  );\n}\n\n/**\n * Updates the user profile primary email.\n * @param userProfileId The user profile id.\n * @param newEmail The new email.\n * @param requestorEmail The requestor email.\n */\nexport async function updateUserProfilePrimaryEmail(\n  userProfileId: number,\n  newEmail: string\n): Promise<IHttpResponse<IApiResult2<IUserProfileDataResult>>> {\n  return await put<IApiResult2<IUserProfileDataResult>>(\n    `${RD_PROFILE_BASE_URL}UpdatePrimaryEmail`,\n    { userProfileId, newEmail },\n    true\n  );\n}\n\n/**\n * Submits an Azure benefit claim for a user.\n * @param request The details of the Azure benefit claim.\n * @param userProfileId The ID of the user profile making the claim.\n */\nexport async function saveAzureBenefitClaim(\n  request: IRDAzureBenefitClaim,\n  userProfileId: number\n): Promise<IHttpResponse<IApiResult2<boolean>>> {\n  return await post<IApiResult2<boolean>>(\n    `${BENEFIT_BASE_URL.replace(\"{tenant}\", TenantTypesEnum.RD.toLowerCase())}azure/azureBenefit`,\n    { ...request, userProfileId },\n    true\n  );\n}\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { IM365BenefitDetail } from \"Interfaces/Benefits/IM365BenefitDetail\";\nimport { IMicrosoft365BenefitDetail } from \"Interfaces/Benefits/IMicrosoft365BenefitDetail\";\nimport { IProfileBenefitResult } from \"Interfaces/Benefits/IProfileBenefitResult\";\nimport { IFilterValue } from \"Interfaces/IFilterValue\";\nimport { IRDProgramProfile } from \"Interfaces/RD/ProgramProfile/IRDProgramProfile\";\nimport { IRDUserProfile } from \"Interfaces/RD/UserProfile/IRDUserProfile\";\nimport { IRDUserProfileDetail } from \"Interfaces/RD/UserProfile/IRDUserProfileDetail\";\nimport { IUserProfileComment } from \"Interfaces/UserProfile/IUserProfileComment\";\n\nimport {\n  RD_ADD_AZURE_BENEFIT_DETAIL,\n  RD_ADD_AZURE_BENEFIT_DETAIL_FAIL,\n  RD_ADD_AZURE_BENEFIT_DETAIL_SUCCESS,\n  RD_ADD_AZURE_BENEFIT_RESET,\n  RD_ADD_USER_PROFILE_COMMENT,\n  RD_ADD_USER_PROFILE_COMMENT_FAIL,\n  RD_ADD_USER_PROFILE_COMMENT_RESET_VALUES,\n  RD_ADD_USER_PROFILE_COMMENT_SUCCESS,\n  RD_DOWNLOAD_TO_CSV,\n  RD_DOWNLOAD_TO_CSV_FAIL,\n  RD_DOWNLOAD_TO_CSV_SUCCESS,\n  RD_EXTEND_AZURE_BENEFIT_CREDIT,\n  RD_EXTEND_AZURE_BENEFIT_CREDIT_FAILURE,\n  RD_EXTEND_AZURE_BENEFIT_CREDIT_RESET,\n  RD_EXTEND_AZURE_BENEFIT_CREDIT_SUCCESS,\n  RD_FETCH_PROGRAM_PROFILE,\n  RD_FETCH_PROGRAM_PROFILE_FAIL,\n  RD_FETCH_PROGRAM_PROFILE_SUCCESS,\n  RD_FETCH_USER_PROFILE,\n  RD_FETCH_USER_PROFILE_COMMENTS,\n  RD_FETCH_USER_PROFILE_COMMENTS_FAIL,\n  RD_FETCH_USER_PROFILE_COMMENTS_SUCCESS,\n  RD_FETCH_USER_PROFILE_FAIL,\n  RD_FETCH_USER_PROFILE_SUCCESS,\n  RD_GET_M365_BENEFIT_DETAIL,\n  RD_GET_M365_BENEFIT_DETAIL_FAILURE,\n  RD_GET_M365_BENEFIT_DETAIL_SUCCESS,\n  RD_GET_MS365_BENEFIT_DETAIL,\n  RD_GET_MS365_BENEFIT_DETAIL_FAILURE,\n  RD_GET_MS365_BENEFIT_DETAIL_SUCCESS,\n  RD_GET_PROFILE_BENEFITS,\n  RD_GET_PROFILE_BENEFITS_FAIL,\n  RD_GET_PROFILE_BENEFITS_SUCCESS,\n  RD_GET_TEAMS_BENEFIT_DETAIL,\n  RD_GET_TEAMS_BENEFIT_DETAIL_FAILURE,\n  RD_GET_TEAMS_BENEFIT_DETAIL_SUCCESS,\n  RD_PROGRAM_PROFILE_UPDATE_RESET_STATUS,\n  RD_RESET_FILE_DOWNLOAD_STATUS,\n  RD_RESET_M365_BENEFIT_DETAIL,\n  RD_RESET_MS365_BENEFIT_DETAIL,\n  RD_UPDATE_LISTING_CURRENT_PAGE,\n  RD_UPDATE_LISTING_PAGE_SIZE,\n  RD_UPDATE_LISTING_SORTING,\n  RD_UPDATE_M365_BENEFIT_DETAIL,\n  RD_UPDATE_M365_BENEFIT_DETAIL_FAILURE,\n  RD_UPDATE_M365_BENEFIT_DETAIL_SUCCESS,\n  RD_UPDATE_MS365_BENEFIT_DETAIL,\n  RD_UPDATE_MS365_BENEFIT_DETAIL_FAILURE,\n  RD_UPDATE_MS365_BENEFIT_DETAIL_SUCCESS,\n  RD_UPDATE_PROGRAM_PROFILE,\n  RD_UPDATE_PROGRAM_PROFILE_FAIL,\n  RD_UPDATE_PROGRAM_PROFILE_SUCCESS,\n  RD_UPDATE_USER_PROFILE_ID,\n  RD_USER_PROFILE_CLAIM_BENEFIT,\n  RD_USER_PROFILE_CLAIM_BENEFIT_FAIL,\n  RD_USER_PROFILE_CLAIM_BENEFIT_RESET,\n  RD_USER_PROFILE_CLAIM_BENEFIT_SUCCESS,\n  RD_USER_PROFILE_UPDATE_PRIMARY_EMAIL,\n  RD_USER_PROFILE_UPDATE_PRIMARY_EMAIL_FAIL,\n  RD_USER_PROFILE_UPDATE_PRIMARY_EMAIL_RESET,\n  RD_USER_PROFILE_UPDATE_PRIMARY_EMAIL_SUCCESS,\n  RD_USER_PROFILES_FILTER_PROVINCE_VALUE_REMOVE,\n  RD_USER_PROFILES_FILTER_VALUE_ADD,\n  RD_USER_PROFILES_FILTER_VALUE_REMOVE,\n  RD_USER_PROFILES_FILTER_VALUE_RESET,\n  RD_USER_PROFILES_FILTER_VALUE_UPDATE,\n  RD_USER_PROFILES_SEARCH,\n  RD_USER_PROFILES_SEARCH_FAIL,\n  RD_USER_PROFILES_SEARCH_SUCCESS,\n  RD_USERPROFILE_UPDATE_IS_PRIVATE,\n  RD_USERPROFILE_UPDATE_IS_PRIVATE_FAIL,\n  RD_USERPROFILE_UPDATE_IS_PRIVATE_SUCCESS,\n} from \"./RDUserProfileActionTypes\";\nimport { ITeamsBenefitDetail } from \"Interfaces/Benefits/ITeamsBenefitDetail\";\nimport { IRDAzureBenefitClaim } from \"Interfaces/RD/IRDAzureBenefitClaim\";\n\n/*\n * Action to Reset the M365 Benefit Detail State.\n * @interface\n */\nexport interface IRDResetM365BenefitDetail {\n  type: typeof RD_RESET_M365_BENEFIT_DETAIL;\n}\n\n/*\n * Action to get the users M365 Details.\n * @interface\n */\nexport interface IRDFetchM365BenefitDetail {\n  type: typeof RD_GET_M365_BENEFIT_DETAIL;\n  userProfileId: number;\n}\n\n/*\n * Action to get the success fetch details.\n * @interface\n */\nexport interface IRDFetchM365BenefitDetailSuccess {\n  type: typeof RD_GET_M365_BENEFIT_DETAIL_SUCCESS;\n  m365BenefitDetail: IM365BenefitDetail;\n}\n\n/*\n * Action to get the failure fetch details.\n * @interface\n */\nexport interface IRDFetchM365BenefitDetailFailure {\n  type: typeof RD_GET_M365_BENEFIT_DETAIL_FAILURE;\n  m365FetchErrorMessage: string;\n}\n\n/*\n * Action to get the users Teams Details.\n * @interface\n */\nexport interface IRDFetchTeamsBenefitDetail {\n  type: typeof RD_GET_TEAMS_BENEFIT_DETAIL;\n  userProfileId: number;\n}\n\n/*\n * Action to get the success fetch details.\n * @interface\n */\nexport interface IRDFetchTeamsBenefitDetailSuccess {\n  type: typeof RD_GET_TEAMS_BENEFIT_DETAIL_SUCCESS;\n  teamsBenefitDetail: ITeamsBenefitDetail;\n}\n\n/*\n * Action to get the failure fetch details.\n * @interface\n */\nexport interface IRDFetchTeamsBenefitDetailFailure {\n  type: typeof RD_GET_TEAMS_BENEFIT_DETAIL_FAILURE;\n  teamsFetchErrorMessage: string;\n}\n\n/*\n * Action to get the update details.\n * @interface\n */\nexport interface IRDUpdateM365BenefitDetail {\n  type: typeof RD_UPDATE_M365_BENEFIT_DETAIL;\n  m365BenefitDetail: IM365BenefitDetail;\n}\n\n/*\n * Action to get the success details.\n * @interface\n */\nexport interface IRDUpdateM365BenefitDetailSuccess {\n  type: typeof RD_UPDATE_M365_BENEFIT_DETAIL_SUCCESS;\n  m365BenefitDetail: IM365BenefitDetail;\n}\n\n/*\n * Action to get the failure details.\n * @interface\n */\nexport interface IRDUpdateM365BenefitDetailFailure {\n  type: typeof RD_UPDATE_M365_BENEFIT_DETAIL_FAILURE;\n  m365UpdateErrorMessage: string;\n}\n\n/* 976959\n * Action to Reset the Microsoft 365 Benefit Detail State.\n * @interface\n */\nexport interface IRDResetMS365BenefitDetail {\n  type: typeof RD_RESET_MS365_BENEFIT_DETAIL;\n}\n\n/**\n * Action to get the users Microsoft 365 Benefit Detail.\n * @interface\n */\nexport interface IRDFetchMS365BenefitDetail {\n  type: typeof RD_GET_MS365_BENEFIT_DETAIL;\n  userProfileId: number;\n}\n\n/*\n * Action to get the success fetch details.\n * @interface\n */\nexport interface IRDFetchMS365BenefitDetailSuccess {\n  type: typeof RD_GET_MS365_BENEFIT_DETAIL_SUCCESS;\n  ms365BenefitDetail: IMicrosoft365BenefitDetail;\n}\n\n/*\n * Action to get the failure fetch details.\n * @interface\n */\nexport interface IRDFetchMS365BenefitDetailFailure {\n  type: typeof RD_GET_MS365_BENEFIT_DETAIL_FAILURE;\n  ms365FetchErrorMessage: string;\n}\n\n/*\n * Action to get the update details.\n * @interface\n */\nexport interface IRDUpdateMS365BenefitDetail {\n  type: typeof RD_UPDATE_MS365_BENEFIT_DETAIL;\n  ms365BenefitDetail: IMicrosoft365BenefitDetail;\n}\n\n/*\n * Action to get the success details.\n * @interface\n */\nexport interface IRDUpdateMS365BenefitDetailSuccess {\n  type: typeof RD_UPDATE_MS365_BENEFIT_DETAIL_SUCCESS;\n  ms365BenefitDetail: IMicrosoft365BenefitDetail;\n}\n\n/*\n * Action to get the failure details.\n * @interface\n */\nexport interface IRDUpdateMS365BenefitDetailFailure {\n  type: typeof RD_UPDATE_MS365_BENEFIT_DETAIL_FAILURE;\n  ms365UpdateErrorMessage: string;\n}\n\n/**\n * Action to get Extend Azure Benefit Credit.\n * @interface\n */\nexport interface IRDExtendAzureBenefitCredit {\n  type: typeof RD_EXTEND_AZURE_BENEFIT_CREDIT;\n  credit: number;\n  userProfileId: number;\n}\n\n/**\n * Action to get the update success details.\n * @interface\n */\nexport interface IRDExtendAzureBenefitCreditSuccess {\n  type: typeof RD_EXTEND_AZURE_BENEFIT_CREDIT_SUCCESS;\n  capCredit: number;\n}\n\n/**\n * Action to get the update failure details.\n * @interface\n */\nexport interface IRDExtendAzureBenefitCreditFailure {\n  type: typeof RD_EXTEND_AZURE_BENEFIT_CREDIT_FAILURE;\n  error: string;\n}\n\n/**\n * Action to reset Extend Azure Benefit Credit State.\n */\nexport interface IRDExtendAzureBenefitCreditReset {\n  type: typeof RD_EXTEND_AZURE_BENEFIT_CREDIT_RESET;\n}\n\n/*\n * Action to get profile benefits.\n * @interface\n */\nexport interface IRDGetProfileBenefits {\n  type: typeof RD_GET_PROFILE_BENEFITS;\n  userProfileId: number;\n}\n\n/**\n * Action to get profile benefits success.\n * @interface\n */\nexport interface IRDGetProfileBenefitsSuccess {\n  type: typeof RD_GET_PROFILE_BENEFITS_SUCCESS;\n  userProfileBenefits: IProfileBenefitResult;\n}\n\n/**\n * Action to get profile benefits fail.\n * @interface\n */\nexport interface IRDGetProfileBenefitsFail {\n  type: typeof RD_GET_PROFILE_BENEFITS_FAIL;\n  profileBenefitsErrorMessage: string;\n}\n\n/**\n * Action to Reset values\n * @interface\n */\nexport interface IRDAddUserProfileCommentResetValues {\n  type: typeof RD_ADD_USER_PROFILE_COMMENT_RESET_VALUES;\n}\n\n/**\n * Action to update selected user profile id.\n */\nexport interface IRDUpdateUserProfileId {\n  type: typeof RD_UPDATE_USER_PROFILE_ID;\n  selectedUserProfileId: number;\n}\n\n/**\n * Action to Reset values\n * @interface\n */\nexport interface IRDProgramProfileUpdateResetStatus {\n  type: typeof RD_PROGRAM_PROFILE_UPDATE_RESET_STATUS;\n}\n\n/**\n * Action to update program profile.\n * @interface\n */\nexport interface IRDUpdateProgramProfile {\n  type: typeof RD_UPDATE_PROGRAM_PROFILE;\n  rdUserProfileId: number;\n  programProfileStatus: string;\n  modifiedBy: string;\n}\n\n/**\n * Action to update program profile success.\n * @interface\n */\nexport interface IRDUpdateProgramProfileSuccess {\n  type: typeof RD_UPDATE_PROGRAM_PROFILE_SUCCESS;\n  savedProgramProfileStatusName: string;\n}\n\n/**\n * Action to update program profile fail.\n * @interface\n */\nexport interface IRDUpdateProgramProfileFail {\n  type: typeof RD_UPDATE_PROGRAM_PROFILE_FAIL;\n  errorMessage: string;\n}\n\n/**\n * Action to add User Profile comment\n * @interface\n */\nexport interface IRDAddUserProfileComment {\n  type: typeof RD_ADD_USER_PROFILE_COMMENT;\n  rdUserProfileId: number;\n  textValue: string;\n  createdBy: string;\n}\n\n/**\n * Action to add User Profile comment success\n * @interface\n */\nexport interface IRDAddUserProfileCommentSuccess {\n  type: typeof RD_ADD_USER_PROFILE_COMMENT_SUCCESS;\n  rdUserProfileId: number;\n}\n\n/**\n * Action to add User Profile comment fail\n * @interface\n */\nexport interface IRDAddUserProfileCommentFail {\n  type: typeof RD_ADD_USER_PROFILE_COMMENT_FAIL;\n  errorMessage: string;\n}\n\n/**\n * Action to fetch User Profile comments\n * @interface\n */\nexport interface IRDFetchUserProfileComments {\n  type: typeof RD_FETCH_USER_PROFILE_COMMENTS;\n  rdUserProfileId: number;\n}\n\n/**\n * Action to fetch User Profile comments success\n * @interface\n */\nexport interface IRDFetchUserProfileCommentsSuccess {\n  type: typeof RD_FETCH_USER_PROFILE_COMMENTS_SUCCESS;\n  userProfileComments: IUserProfileComment[];\n}\n\n/**\n * Action to fetch User Profile comments fail\n * @interface\n */\nexport interface IRDFetchUserProfileCommentsFail {\n  type: typeof RD_FETCH_USER_PROFILE_COMMENTS_FAIL;\n  errorMessage: string;\n}\n\n/**\n * Action to fetch User Profile\n * @interface\n */\nexport interface IRDFetchUserProfile {\n  type: typeof RD_FETCH_USER_PROFILE;\n  rdUserProfileId: number;\n}\n\n/**\n * Action to fetch User Profile Fail\n * @interface\n */\nexport interface IRDFetchUserProfileFail {\n  type: typeof RD_FETCH_USER_PROFILE_FAIL;\n  errorMessage: string;\n}\n\n/**\n * Action to fetch User Profile Success\n * @interface\n */\nexport interface IRDFetchUserProfileSuccess {\n  type: typeof RD_FETCH_USER_PROFILE_SUCCESS;\n  rdUserProfile: IRDUserProfileDetail;\n}\n\n/**\n * Action for when downloading results to CSV\n * @interface\n */\nexport interface IRDDownloadToCSV {\n  type: typeof RD_DOWNLOAD_TO_CSV;\n  searchText: string;\n  selectedUserProfilesFilterValues: IFilterValue[];\n}\n\n/**\n * Action for when downloading results to CSV success\n * @interface\n */\nexport interface IRDDownloadToCSVSuccess {\n  type: typeof RD_DOWNLOAD_TO_CSV_SUCCESS;\n  csvFile: string;\n}\n\n/**\n * Action for when downloading results to CSV failed\n * @interface\n */\nexport interface IRDDownloadToCSVFail {\n  type: typeof RD_DOWNLOAD_TO_CSV_FAIL;\n  errorMessage: string;\n}\n\n/**\n * Action for when updating listing current page\n * @interface\n */\nexport interface IRDUpdateCurrentPage {\n  type: typeof RD_UPDATE_LISTING_CURRENT_PAGE;\n  currentPage: number;\n}\n\n/**\n * Action for when updating listing page size\n * @interface\n */\nexport interface IRDUpdatePageSize {\n  type: typeof RD_UPDATE_LISTING_PAGE_SIZE;\n  pageSize: number;\n}\n\n/**\n * Action to update azure Benefit Detail.\n * @interface\n */\nexport interface IRDAddAzureBenefitDetail {\n  type: typeof RD_ADD_AZURE_BENEFIT_DETAIL;\n  azureBenefit: IRDAzureBenefitClaim;\n  userProfileId: number;\n}\n\n/**\n * Action to update azure Benefit Detail success.\n * @interface\n */\nexport interface IRDAddAzureBenefitDetailSuccess {\n  type: typeof RD_ADD_AZURE_BENEFIT_DETAIL_SUCCESS;\n}\n\n/**\n * Action to update azure Benefit Detail fail.\n * @interface\n */\nexport interface IRDAddAzureBenefitDetailFail {\n  type: typeof RD_ADD_AZURE_BENEFIT_DETAIL_FAIL;\n  errorMessage: string;\n}\n\n/**\n * Action to update azure Benefit Detail Reset.\n * @interface\n */\nexport interface IRDAddAzureBenefitReset {\n  type: typeof RD_ADD_AZURE_BENEFIT_RESET;\n}\n\n/**\n * Action for when updating listing sorting\n * @interface\n */\nexport interface IRDUpdateSorting {\n  type: typeof RD_UPDATE_LISTING_SORTING;\n  sortColumn?: string;\n  sortDescending?: boolean;\n}\n\n/**\n * Action for when reset file download status\n * @interface\n */\nexport interface IRDResetFileDownloadStatus {\n  type: typeof RD_RESET_FILE_DOWNLOAD_STATUS;\n}\n\n/**\n * Action for when searching rd profiles.\n * @interface\n */\nexport interface IRDProfilesSearch {\n  type: typeof RD_USER_PROFILES_SEARCH;\n  searchText: string;\n  selectedUserProfilesFilterValues: IFilterValue[];\n  searchPage: number;\n  pageSize: number;\n  sortColumn?: string;\n  sortDescending?: boolean;\n}\n\n/**\n * Action for when user profiles were searched successfully.\n * @interface\n */\nexport interface IRDProfilesSuccess {\n  type: typeof RD_USER_PROFILES_SEARCH_SUCCESS;\n  userProfiles: IRDUserProfile[];\n  searchPage: number;\n  filteredCount: number;\n  pageSize: number;\n}\n\n/**\n * Action for when searching user profiles failed.\n * @interface\n */\nexport interface IRDProfilesFail {\n  type: typeof RD_USER_PROFILES_SEARCH_FAIL;\n  error: string;\n}\n\n/**\n * Action for when adding selected filter value.\n * @interface\n */\nexport interface IRDUserProfilesFilterValueAdd {\n  type: typeof RD_USER_PROFILES_FILTER_VALUE_ADD;\n  filterValue: IFilterValue;\n}\n\n/**\n * Action for when removing selected filter value.\n * @interface\n */\nexport interface IRDUserProfilesFilterValueRemove {\n  type: typeof RD_USER_PROFILES_FILTER_VALUE_REMOVE;\n  filterValue: IFilterValue;\n}\n\n/**\n * Action for when removing selected province filter value.\n * @interface\n */\nexport interface IRDUserProfilesFilterProvinceValueRemove {\n  type: typeof RD_USER_PROFILES_FILTER_PROVINCE_VALUE_REMOVE;\n}\n\n/**\n * Action for when updating selected filter value.\n * @interface\n */\nexport interface IRDUserProfilesFilterValueUpdate {\n  type: typeof RD_USER_PROFILES_FILTER_VALUE_UPDATE;\n  filterValue: IFilterValue;\n}\n\n/**\n * Action claiming the benefits for a user profile.\n * @interface\n */\nexport interface IRDClaimBenefit {\n  type: typeof RD_USER_PROFILE_CLAIM_BENEFIT;\n  userProfileId: number;\n  benefitType: string;\n}\n\n/**\n * Action claiming the benefits for a user profile succeed.\n * @interface\n */\nexport interface IRDClaimBenefitSuccess {\n  type: typeof RD_USER_PROFILE_CLAIM_BENEFIT_SUCCESS;\n}\n\n/**\n * Action claiming the benefits for a user profile fail.\n * @interface\n */\nexport interface IRDClaimBenefitFail {\n  type: typeof RD_USER_PROFILE_CLAIM_BENEFIT_FAIL;\n  error: string;\n}\n\n/**\n * Action to fetch Program Profile comments\n * @interface\n */\nexport interface IRDFetchProgramProfile {\n  type: typeof RD_FETCH_PROGRAM_PROFILE;\n  programProfileId: number;\n}\n\n/**\n * Action to fetch Program Profile success\n * @interface\n */\nexport interface IRDFetchProgramProfileSuccess {\n  type: typeof RD_FETCH_PROGRAM_PROFILE_SUCCESS;\n  programProfile: IRDProgramProfile;\n}\n\n/**\n * Action to fetch Program Profile fail\n * @interface\n */\nexport interface IRDFetchProgramProfileFail {\n  type: typeof RD_FETCH_PROGRAM_PROFILE_FAIL;\n  errorMessage: string;\n}\n\n/**\n * Action claiming the benefits for a user profile reset.\n * @interface\n */\nexport interface IRDClaimBenefitReset {\n  type: typeof RD_USER_PROFILE_CLAIM_BENEFIT_RESET;\n}\n\n/**\n * Action used for reseting the benefit details state.\n * @returns {IRDResetM365BenefditDetail} the action.\n */\nexport function m365BenefitDetailReset(): IRDResetM365BenefitDetail {\n  return {\n    type: RD_RESET_M365_BENEFIT_DETAIL,\n  };\n}\n\n/**\n * Action: update user's profile is private flag.\n * @interface\n */\nexport interface IRDUserProfileIsPrivateUpdate {\n  type: typeof RD_USERPROFILE_UPDATE_IS_PRIVATE;\n  isPrivate: boolean;\n  userProfileId: number;\n}\n\n/**\n * Action: update user's profile is private flag success.\n * @interface\n */\nexport interface IRDUserProfileIsPrivateUpdateSuccess {\n  type: typeof RD_USERPROFILE_UPDATE_IS_PRIVATE_SUCCESS;\n}\n\n/**\n * Action: update user's profile is private flag fail.\n * @interface\n */\nexport interface IRDUserProfileIsPrivateUpdateFail {\n  type: typeof RD_USERPROFILE_UPDATE_IS_PRIVATE_FAIL;\n  error: string;\n}\n\n/**\n * Action: reset rd user profile filter value.\n * @interface\n */\nexport interface IRDUserProfileFilterValueReset {\n  type: typeof RD_USER_PROFILES_FILTER_VALUE_RESET;\n}\n\n/**\n * Action: update user's profile primary email.\n * @interface\n */\nexport interface IRDUserProfilePrimaryEmailUpdate {\n  type: typeof RD_USER_PROFILE_UPDATE_PRIMARY_EMAIL;\n  userProfileId: number;\n  newEmail: string;\n}\n\n/**\n * Action: update user's profile primary email success.\n * @interface\n */\nexport interface IRDUserProfilePrimaryEmailUpdateSuccess {\n  type: typeof RD_USER_PROFILE_UPDATE_PRIMARY_EMAIL_SUCCESS;\n}\n\n/**\n * Action: update user's profile primary email fail.\n * @interface\n */\nexport interface IRDUserProfilePrimaryEmailUpdateFail {\n  type: typeof RD_USER_PROFILE_UPDATE_PRIMARY_EMAIL_FAIL;\n  error: string;\n}\n\n/**\n * Action: reset user's profile primary email update.\n * @interface\n */\nexport interface IRDUserProfilePrimaryEmailUpdateReset {\n  type: typeof RD_USER_PROFILE_UPDATE_PRIMARY_EMAIL_RESET;\n}\n\n/**\n * Action used for M365 Fetch.\n * @returns {IRDFetchM365BenefitDetail} the action.\n */\nexport function fetchM365BenefitDetail(userProfileId: number): IRDFetchM365BenefitDetail {\n  return {\n    type: RD_GET_M365_BENEFIT_DETAIL,\n    userProfileId,\n  };\n}\n\n/**\n * Action used for M365 Fetch Success.\n * @returns {IRDFetchM365BenefitDetailSuccess} the action.\n */\nexport function fetchM365BenefitDetailSuccess(\n  m365BenefitDetail: IM365BenefitDetail\n): IRDFetchM365BenefitDetailSuccess {\n  return {\n    type: RD_GET_M365_BENEFIT_DETAIL_SUCCESS,\n    m365BenefitDetail,\n  };\n}\n\n/**\n * Action used for M365 Fetch Failure.\n * @returns {IRDFetchM365BenefitDetailFailure} the action.\n */\nexport function fetchM365BenefitDetailFailure(\n  m365FetchErrorMessage: string\n): IRDFetchM365BenefitDetailFailure {\n  return {\n    type: RD_GET_M365_BENEFIT_DETAIL_FAILURE,\n    m365FetchErrorMessage,\n  };\n}\n\n/**\n * Action used for updating the M365 Detail.\n * @returns {IRDUpdateM365BenefitDetail} the action.\n */\nexport function updateM365BenefitDetail(\n  m365BenefitDetail: IM365BenefitDetail\n): IRDUpdateM365BenefitDetail {\n  return {\n    type: RD_UPDATE_M365_BENEFIT_DETAIL,\n    m365BenefitDetail,\n  };\n}\n\n/**\n * Action used for update m365 benefit success.\n * @returns {IRDUpdateM365BenefitDetailSuccess} the action.\n */\nexport function updateM365BenefitDetailSuccess(\n  m365BenefitDetail: IM365BenefitDetail\n): IRDUpdateM365BenefitDetailSuccess {\n  return {\n    type: RD_UPDATE_M365_BENEFIT_DETAIL_SUCCESS,\n    m365BenefitDetail,\n  };\n}\n\n/**\n * Action used for update m365 failure.\n * @returns {IRDUpdateM365BenefitDetailFailure} the action.\n */\nexport function updateM365BenefitDetailFailure(\n  m365UpdateErrorMessage: string\n): IRDUpdateM365BenefitDetailFailure {\n  return {\n    type: RD_UPDATE_M365_BENEFIT_DETAIL_FAILURE,\n    m365UpdateErrorMessage,\n  };\n}\n\n/**\n * Action used for resetting the state.\n * @returns {IRDResetMS365BenefitDetail} the action.\n */\nexport function ms365BenefitDetailReset(): IRDResetMS365BenefitDetail {\n  return {\n    type: RD_RESET_MS365_BENEFIT_DETAIL,\n  };\n}\n\n/**\n * Action used for fetch MS365 Benefit Details.\n * @returns {IRDFetchMS365BenefitDetail} the action.\n */\nexport function fetchMS365BenefitDetail(userProfileId: number): IRDFetchMS365BenefitDetail {\n  return {\n    type: RD_GET_MS365_BENEFIT_DETAIL,\n    userProfileId,\n  };\n}\n\n/**\n * Action used for fetch success.\n * @returns {IRDFetchMS365BenefitDetailSuccess} the action.\n */\nexport function fetchMS365BenefitDetailSuccess(\n  ms365BenefitDetail: IMicrosoft365BenefitDetail\n): IRDFetchMS365BenefitDetailSuccess {\n  return {\n    type: RD_GET_MS365_BENEFIT_DETAIL_SUCCESS,\n    ms365BenefitDetail,\n  };\n}\n\n/**\n * Action used for fetch failure.\n * @returns {IRDFetchMS365BenefitDetailFailure} the action.\n */\nexport function fetchMS365BenefitDetailFailure(\n  ms365FetchErrorMessage: string\n): IRDFetchMS365BenefitDetailFailure {\n  return {\n    type: RD_GET_MS365_BENEFIT_DETAIL_FAILURE,\n    ms365FetchErrorMessage,\n  };\n}\n\n/**\n * Action used for update details.\n * @returns {IRDUpdateMS365BenefitDetail} the action.\n */\nexport function updateMS365BenefitDetail(\n  ms365BenefitDetail: IMicrosoft365BenefitDetail\n): IRDUpdateMS365BenefitDetail {\n  return {\n    type: RD_UPDATE_MS365_BENEFIT_DETAIL,\n    ms365BenefitDetail,\n  };\n}\n\n/**\n * Action used for update success.\n * @returns {IRDUpdateMS365BenefitDetailSuccess} the action.\n */\nexport function updateMS365BenefitDetailSuccess(\n  ms365BenefitDetail: IMicrosoft365BenefitDetail\n): IRDUpdateMS365BenefitDetailSuccess {\n  return {\n    type: RD_UPDATE_MS365_BENEFIT_DETAIL_SUCCESS,\n    ms365BenefitDetail,\n  };\n}\n\n/**\n * Action used for update failure.\n * @returns {IRDUpdateMS365BenefitDetailFailure} the action.\n */\nexport function updateMS365BenefitDetailFailure(\n  ms365UpdateErrorMessage: string\n): IRDUpdateMS365BenefitDetailFailure {\n  return {\n    type: RD_UPDATE_MS365_BENEFIT_DETAIL_FAILURE,\n    ms365UpdateErrorMessage,\n  };\n}\n\n/**\n * Action used for update details.\n * @returns {IRDUpdateM365BenefitDetail} the action.\n */\nexport function extendAzureBenefitCredit(\n  credit: number,\n  userProfileId: number\n): IRDExtendAzureBenefitCredit {\n  return {\n    type: RD_EXTEND_AZURE_BENEFIT_CREDIT,\n    credit,\n    userProfileId,\n  };\n}\n\n/**\n * Action used for Teams Fetch.\n * @returns {IRDFetchTeamsBenefitDetail} the action.\n */\nexport function fetchTeamsBenefitDetail(userProfileId: number): IRDFetchTeamsBenefitDetail {\n  return {\n    type: RD_GET_TEAMS_BENEFIT_DETAIL,\n    userProfileId,\n  };\n}\n\n/**\n * Action used for Teams Fetch Success.\n * @returns {IRDFetchTeamsBenefitDetailSuccess} the action.\n */\nexport function fetchTeamsBenefitDetailSuccess(\n  teamsBenefitDetail: ITeamsBenefitDetail\n): IRDFetchTeamsBenefitDetailSuccess {\n  return {\n    type: RD_GET_TEAMS_BENEFIT_DETAIL_SUCCESS,\n    teamsBenefitDetail,\n  };\n}\n\n/**\n * Action used for Teams Fetch Failure.\n * @returns {IRDFetchTeamsBenefitDetailFailure} the action.\n */\nexport function fetchTeamsBenefitDetailFailure(\n  teamsFetchErrorMessage: string\n): IRDFetchTeamsBenefitDetailFailure {\n  return {\n    type: RD_GET_TEAMS_BENEFIT_DETAIL_FAILURE,\n    teamsFetchErrorMessage,\n  };\n}\n\n/**\n * Action used for update success.\n * @returns {IRDUpdateM365BenefitDetailSuccess} the action.\n */\nexport function extendAzureBenefitCreditSuccess(\n  capCredit: number\n): IRDExtendAzureBenefitCreditSuccess {\n  return {\n    type: RD_EXTEND_AZURE_BENEFIT_CREDIT_SUCCESS,\n    capCredit,\n  };\n}\n\n/**\n * Action used for update failure.\n * @returns {IRDUpdateM365BenefitDetailFailure} the action.\n */\nexport function extendAzureBenefitCreditFailure(error: string): IRDExtendAzureBenefitCreditFailure {\n  return {\n    type: RD_EXTEND_AZURE_BENEFIT_CREDIT_FAILURE,\n    error,\n  };\n}\n\nexport function extendAzureBenefitCreditReset(): IRDExtendAzureBenefitCreditReset {\n  return {\n    type: RD_EXTEND_AZURE_BENEFIT_CREDIT_RESET,\n  };\n}\n\n/**\n * Action used for getting a profiles benefits.\n * @param userProfileId the userProfileId to get benefits for.\n * @returns {IRDGetProfileBenefits} the action.\n */\nexport function getProfileBenefits(userProfileId: number): IRDGetProfileBenefits {\n  return {\n    type: RD_GET_PROFILE_BENEFITS,\n    userProfileId,\n  };\n}\n\n/**\n * Action used for getting a profiles benefits success.\n * @param userProfileBenefits the benefits for the profile.\n * @returns {IRDGetProfileBenefitsSuccess} the action.\n */\nexport function getProfileBenefitsSuccess(\n  userProfileBenefits: IProfileBenefitResult\n): RDUserProfileActionTypes {\n  return {\n    type: RD_GET_PROFILE_BENEFITS_SUCCESS,\n    userProfileBenefits,\n  };\n}\n\n/**\n * Action used for getting a profiles benefits fail.\n * @param profileBenefitsErrorMessage the profileBenefitsErrorMessage to set.\n * @returns {IRDGetProfileBenefitsFail} the action.\n */\nexport function profileBenefitsFail(profileBenefitsErrorMessage: string): RDUserProfileActionTypes {\n  return {\n    type: RD_GET_PROFILE_BENEFITS_FAIL,\n    profileBenefitsErrorMessage,\n  };\n}\n\n/**\n * Action creator for UPDATE_LISTING_CURRENT_PAGE.\n */\nexport function updateRDCurrentPage(currentPage: number): RDUserProfileActionTypes {\n  return {\n    type: RD_UPDATE_LISTING_CURRENT_PAGE,\n    currentPage,\n  };\n}\n\n/**\n * Action creator for UPDATE_LISTING_PAGE_SIZE.\n */\nexport function updateRDPageSize(pageSize: number): RDUserProfileActionTypes {\n  return {\n    type: RD_UPDATE_LISTING_PAGE_SIZE,\n    pageSize,\n  };\n}\n\n/**\n * Action creator for UPDATE_LISTING_PAGE_SIZE.\n */\nexport function updateRDSorting(\n  sortColumn?: string,\n  sortDescending?: boolean\n): RDUserProfileActionTypes {\n  return {\n    type: RD_UPDATE_LISTING_SORTING,\n    sortColumn,\n    sortDescending,\n  };\n}\n\n/**\n * Action creator for RD_RESET_FILE_DOWNLOAD_STATUS.\n */\nexport function resetFileDownloadStatus(): RDUserProfileActionTypes {\n  return {\n    type: RD_RESET_FILE_DOWNLOAD_STATUS,\n  };\n}\n\n/**\n * Action creator for RD_DOWNLOAD_TO_CSV.\n */\nexport function downloadRDUserProfilesToCSV(\n  searchText: string,\n  selectedUserProfilesFilterValues: IFilterValue[]\n): RDUserProfileActionTypes {\n  return {\n    type: RD_DOWNLOAD_TO_CSV,\n    searchText,\n    selectedUserProfilesFilterValues,\n  };\n}\n\n/**\n * Action creator for RD_DOWNLOAD_TO_CSV_SUCCESS.\n */\nexport function downloadRDUserProfilesToCSVSuccess(csvFile: string): RDUserProfileActionTypes {\n  return {\n    type: RD_DOWNLOAD_TO_CSV_SUCCESS,\n    csvFile,\n  };\n}\n\n/**\n * Action creator for RD_DOWNLOAD_TO_CSV_FAIL.\n */\nexport function downloadRDUserProfilesToCSVFail(errorMessage: string): RDUserProfileActionTypes {\n  return {\n    type: RD_DOWNLOAD_TO_CSV_FAIL,\n    errorMessage,\n  };\n}\n\n/**\n * Action creator for RD_USER_PROFILES_SEARCH.\n */\nexport function searchRDUserProfiles(\n  searchText: string,\n  selectedUserProfilesFilterValues: IFilterValue[],\n  searchPage: number,\n  pageSize: number,\n  sortColumn?: string,\n  sortDescending?: boolean\n): RDUserProfileActionTypes {\n  return {\n    type: RD_USER_PROFILES_SEARCH,\n    searchText,\n    selectedUserProfilesFilterValues,\n    searchPage,\n    pageSize,\n    sortColumn,\n    sortDescending,\n  };\n}\n\n/**\n * Action creator for RD_USER_PROFILES_SEARCH_SUCCESS.\n * @param userProfiles the user profiles successfully searched.\n */\nexport function searchUserRDProfilesSuccess(\n  userProfiles: IRDUserProfile[],\n  searchPage: number,\n  pageSize: number,\n  filteredCount: number\n): RDUserProfileActionTypes {\n  return {\n    type: RD_USER_PROFILES_SEARCH_SUCCESS,\n    userProfiles,\n    searchPage,\n    filteredCount,\n    pageSize,\n  };\n}\n\n/**\n * Action creator for RD_USER_PROFILES_SEARCH_FAIL.\n * @param error the error message from the API.\n */\nexport function searchRDUserProfilesFail(error: string): RDUserProfileActionTypes {\n  return {\n    type: RD_USER_PROFILES_SEARCH_FAIL,\n    error,\n  };\n}\n\n/**\n * Action creator for RD_USER_PROFILES_FILTER_VALUE_ADD.\n * @param error the error message from the API.\n */\nexport function addUserProfilesFilterValue(filterValue: IFilterValue): RDUserProfileActionTypes {\n  return {\n    type: RD_USER_PROFILES_FILTER_VALUE_ADD,\n    filterValue,\n  };\n}\n\n/**\n * Action creator for RD_USER_PROFILES_FILTER_VALUE_REMOVE.\n * @param error the error message from the API.\n */\nexport function removeUserProfilesFilterValue(filterValue: IFilterValue): RDUserProfileActionTypes {\n  return {\n    type: RD_USER_PROFILES_FILTER_VALUE_REMOVE,\n    filterValue,\n  };\n}\n\n/**\n * Action creator for RD_USER_PROFILES_FILTER_PROVINCE_VALUE_REMOVE.\n */\nexport function removeUserProfilesFilterProvinceValue(): RDUserProfileActionTypes {\n  return {\n    type: RD_USER_PROFILES_FILTER_PROVINCE_VALUE_REMOVE,\n  };\n}\n\n/**\n * Action creator for RD_USER_PROFILES_FILTER_VALUE_UPDATE.\n * @param error the error message from the API.\n */\nexport function updateUserProfilesFilterValue(filterValue: IFilterValue): RDUserProfileActionTypes {\n  return {\n    type: RD_USER_PROFILES_FILTER_VALUE_UPDATE,\n    filterValue,\n  };\n}\n\n/**\n * Action creator for RD_FETCH_USER_PROFILE.\n * @param rdUserProfileId The user profile id to fetch.\n */\nexport function fetchUserProfile(rdUserProfileId: number): RDUserProfileActionTypes {\n  return {\n    type: RD_FETCH_USER_PROFILE,\n    rdUserProfileId,\n  };\n}\n\n/**\n * Action creator for RD_FETCH_USER_PROFILE_SUCCESS.\n * @param rdUserProfile The user profile.\n */\nexport function fetchUserProfileSuccess(\n  rdUserProfile: IRDUserProfileDetail\n): RDUserProfileActionTypes {\n  return {\n    type: RD_FETCH_USER_PROFILE_SUCCESS,\n    rdUserProfile,\n  };\n}\n\n/**\n * Action creator for RD_FETCH_USER_PROFILE_FAIL.\n * @param errorMessage The error message.\n */\nexport function fetchUserProfileFail(errorMessage: string): RDUserProfileActionTypes {\n  return {\n    type: RD_FETCH_USER_PROFILE_FAIL,\n    errorMessage,\n  };\n}\n\n/**\n * Action creator for UPDATE_USER_PROFILE_ID.\n */\nexport function updateSelectedUserProfileId(\n  selectedUserProfileId: number\n): RDUserProfileActionTypes {\n  return {\n    type: RD_UPDATE_USER_PROFILE_ID,\n    selectedUserProfileId,\n  };\n}\n\n/**\n * Action creator for RD_UPDATE_PROGRAM_PROFILE.\n * @param rdUserProfileId The user profile id.\n * @param programProfileStatus Program Profile name.\n * @param modifiedBy Admin user who modified program profile.\n */\nexport function updateRDProgramProfile(\n  rdUserProfileId: number,\n  programProfileStatus: string,\n  modifiedBy: string\n): RDUserProfileActionTypes {\n  return {\n    type: RD_UPDATE_PROGRAM_PROFILE,\n    rdUserProfileId,\n    programProfileStatus,\n    modifiedBy,\n  };\n}\n\n/**\n * Action creator for RD_UPDATE_PROGRAM_PROFILE_SUCCESS.\n * @param savedProgramProfileStatusName The saved program profile status name.\n */\nexport function updateRDProgramProfileSuccess(\n  savedProgramProfileStatusName: string\n): RDUserProfileActionTypes {\n  return {\n    type: RD_UPDATE_PROGRAM_PROFILE_SUCCESS,\n    savedProgramProfileStatusName,\n  };\n}\n\n/**\n * Action creator for RD_UPDATE_PROGRAM_PROFILE_FAIL.\n * @param errorMessage The error message.\n */\nexport function updateRDProgramProfileFail(errorMessage: string): RDUserProfileActionTypes {\n  return {\n    type: RD_UPDATE_PROGRAM_PROFILE_FAIL,\n    errorMessage,\n  };\n}\n\n/**\n * Action creator for RD_FETCH_PROGRAM_PROFILE.\n * @param programProfileId The program profile id.\n */\nexport function fetchProgramProfile(programProfileId: number): IRDFetchProgramProfile {\n  return {\n    type: RD_FETCH_PROGRAM_PROFILE,\n    programProfileId,\n  };\n}\n\n/**\n * Action creator for RD_FETCH_PROGRAM_PROFILE_SUCCESS.\n * @param userProfile The user profile.\n */\nexport function fetchProgramProfileSuccess(\n  programProfile: IRDProgramProfile\n): IRDFetchProgramProfileSuccess {\n  return {\n    type: RD_FETCH_PROGRAM_PROFILE_SUCCESS,\n    programProfile,\n  };\n}\n\n/**\n * Action creator for RD_FETCH_PROGRAM_PROFILE_FAIL.\n * @param errorMessage The error message.\n */\nexport function fetchProgramProfileFail(errorMessage: string): IRDFetchProgramProfileFail {\n  return {\n    type: RD_FETCH_PROGRAM_PROFILE_FAIL,\n    errorMessage,\n  };\n}\n\n/**\n * Action creator for RD_ADD_USER_PROFILE_COMMENT.\n * @param rdUserProfileId The user profile id.\n * @param textValue Text value.\n * @param createdBy Admin user who created comment.\n */\nexport function addUserProfileComment(\n  rdUserProfileId: number,\n  textValue: string,\n  createdBy: string\n): RDUserProfileActionTypes {\n  return {\n    type: RD_ADD_USER_PROFILE_COMMENT,\n    rdUserProfileId,\n    textValue,\n    createdBy,\n  };\n}\n\n/**\n * Action creator for RD_ADD_USER_PROFILE_COMMENT_SUCCESS.\n * @param rdUserProfileId The user profile id.\n */\nexport function addUserProfileCommentSuccess(rdUserProfileId: number): RDUserProfileActionTypes {\n  return {\n    type: RD_ADD_USER_PROFILE_COMMENT_SUCCESS,\n    rdUserProfileId,\n  };\n}\n\n/**\n * Action creator for RD_ADD_USER_PROFILE_COMMENT_FAIL.\n * @param errorMessage The error message.\n */\nexport function addUserProfileCommentFail(errorMessage: string): RDUserProfileActionTypes {\n  return {\n    type: RD_ADD_USER_PROFILE_COMMENT_FAIL,\n    errorMessage,\n  };\n}\n\n/**\n * Action creator for RD_ADD_USER_PROFILE_COMMENT_RESET_VALUES.\n */\nexport function resetAddUserProfileCommentValues(): RDUserProfileActionTypes {\n  return {\n    type: RD_ADD_USER_PROFILE_COMMENT_RESET_VALUES,\n  };\n}\n\n/**\n * Action creator for RD_PROGRAM_PROFILE_UPDATE_RESET_STATUS.\n */\nexport function resetUpdateProgramProfileUpdateStatus(): RDUserProfileActionTypes {\n  return {\n    type: RD_PROGRAM_PROFILE_UPDATE_RESET_STATUS,\n  };\n}\n\n/**\n * Action creator for RD_FETCH_USER_PROFILE_COMMENTS.\n * @param rdUserProfileId The user profile id.\n */\nexport function fetchUserProfileComments(rdUserProfileId: number): RDUserProfileActionTypes {\n  return {\n    type: RD_FETCH_USER_PROFILE_COMMENTS,\n    rdUserProfileId,\n  };\n}\n\n/**\n * Action creator for RD_FETCH_USER_PROFILE_COMMENTS_SUCCESS.\n * @param userProfileComments The user profile comments.\n */\nexport function fetchUserProfileCommentsSuccess(\n  userProfileComments: IUserProfileComment[]\n): RDUserProfileActionTypes {\n  return {\n    type: RD_FETCH_USER_PROFILE_COMMENTS_SUCCESS,\n    userProfileComments,\n  };\n}\n\n/**\n * Action creator for RD_FETCH_USER_PROFILE_COMMENTS_FAIL.\n * @param errorMessage The error message.\n */\nexport function fetchUserProfileCommentsFail(errorMessage: string): RDUserProfileActionTypes {\n  return {\n    type: RD_FETCH_USER_PROFILE_COMMENTS_FAIL,\n    errorMessage,\n  };\n}\n\n/**\n * Action creator for RD_USERPROFILE_CLAIM_BENEFIT.\n * @param {string} benefitType The selected benefit type to claim.\n * @param {number} userProfileId The user profile id to claim the benefit for.\n * @returns {RDUserProfileActionTypes}\n */\nexport function claimRdBenefit(benefitType: string, userProfileId: number): IRDClaimBenefit {\n  return {\n    type: RD_USER_PROFILE_CLAIM_BENEFIT,\n    benefitType,\n    userProfileId,\n  };\n}\n\n/**\n * Action creator for RD_USERPROFILE_CLAIM_BENEFIT_SUCCESS.\n * @returns {RDUserProfileActionTypes}\n */\nexport function claimRdBenefitSuccess(): RDUserProfileActionTypes {\n  return {\n    type: RD_USER_PROFILE_CLAIM_BENEFIT_SUCCESS,\n  };\n}\n\n/**\n * Action creator for RD_USERPROFILE_CLAIM_BENEFIT_FAIL.\n * @param {string} error The error message from the API.\n * @returns {RDUserProfileActionTypes}\n */\nexport function claimRdBenefitFail(error: string): RDUserProfileActionTypes {\n  return {\n    type: RD_USER_PROFILE_CLAIM_BENEFIT_FAIL,\n    error,\n  };\n}\n\n/**\n * Action creator for USERPROFILE_CLAIM_BENEFIT_RESET.\n * @returns {RDUserProfileActionTypes}\n */\nexport function claimRdBenefitReset(): IRDClaimBenefitReset {\n  return {\n    type: RD_USER_PROFILE_CLAIM_BENEFIT_RESET,\n  };\n}\n\n/**\n * Action creator for USERPROFILE_UPDATE_IS_PRIVATE.\n * @returns {IRDUserProfileIsPrivateUpdate}\n */\nexport function userProfileIsPrivateUpdate(\n  isPrivate: boolean,\n  userProfileId: number\n): IRDUserProfileIsPrivateUpdate {\n  return {\n    type: RD_USERPROFILE_UPDATE_IS_PRIVATE,\n    isPrivate,\n    userProfileId,\n  };\n}\n\n/**\n * Action creator for USERPROFILE_UPDATE_IS_PRIVATE_SUCCESS.\n * @returns {IRDUserProfileIsPrivateUpdateSuccess}\n */\nexport function userProfileIsPrivateUpdateSuccess(): IRDUserProfileIsPrivateUpdateSuccess {\n  return {\n    type: RD_USERPROFILE_UPDATE_IS_PRIVATE_SUCCESS,\n  };\n}\n\n/**\n * Action creator for USERPROFILE_UPDATE_IS_PRIVATE_FAIL.\n * @returns {IRDUserProfileIsPrivateUpdateFail}\n */\nexport function userProfileIsPrivateUpdateFail(error: string): IRDUserProfileIsPrivateUpdateFail {\n  return {\n    type: RD_USERPROFILE_UPDATE_IS_PRIVATE_FAIL,\n    error,\n  };\n}\n\n/**\n * Action creator for USER_PROFILES_FILTER_VALUE_RESET.\n * @returns {IRDUserProfileFilterValueReset}\n */\nexport function userProfileFilterValueReset(): IRDUserProfileFilterValueReset {\n  return {\n    type: RD_USER_PROFILES_FILTER_VALUE_RESET,\n  };\n}\n\n/**\n * Action creator for USER_PROFILE_UPDATE_PRIMARY_EMAIL.\n * @returns {IRDUserProfilePrimaryEmailUpdate}\n */\nexport function userProfilePrimaryEmailUpdate(\n  userProfileId: number,\n  newEmail: string\n): IRDUserProfilePrimaryEmailUpdate {\n  return {\n    type: RD_USER_PROFILE_UPDATE_PRIMARY_EMAIL,\n    userProfileId,\n    newEmail,\n  };\n}\n\n/**\n * Action creator for USER_PROFILE_UPDATE_PRIMARY_EMAIL_SUCCESS.\n * @returns {IRDUserProfilePrimaryEmailUpdateSuccess}\n */\nexport function userProfilePrimaryEmailUpdateSuccess(): IRDUserProfilePrimaryEmailUpdateSuccess {\n  return {\n    type: RD_USER_PROFILE_UPDATE_PRIMARY_EMAIL_SUCCESS,\n  };\n}\n\n/**\n * Action creator for USER_PROFILE_UPDATE_PRIMARY_EMAIL_FAIL.\n * @returns {IRDUserProfilePrimaryEmailUpdateFail}\n */\nexport function userProfilePrimaryEmailUpdateFail(\n  error: string\n): IRDUserProfilePrimaryEmailUpdateFail {\n  return {\n    type: RD_USER_PROFILE_UPDATE_PRIMARY_EMAIL_FAIL,\n    error,\n  };\n}\n\n/**\n * Action creator for USER_PROFILE_UPDATE_PRIMARY_EMAIL_RESET.\n * @returns {IRDUserProfilePrimaryEmailUpdateReset}\n */\nexport function userProfilePrimaryEmailUpdateReset(): IRDUserProfilePrimaryEmailUpdateReset {\n  return {\n    type: RD_USER_PROFILE_UPDATE_PRIMARY_EMAIL_RESET,\n  };\n}\n\n/**\n * Action creator for MVP_UPDATE_AZURE_BENEFIT_DETAIL.\n * @param azureBenefit The program profile updates\n */\nexport function addAzureBenefitDetail(\n  azureBenefit: IRDAzureBenefitClaim,\n  userProfileId: number\n): IRDAddAzureBenefitDetail {\n  return {\n    type: RD_ADD_AZURE_BENEFIT_DETAIL,\n    azureBenefit,\n    userProfileId,\n  };\n}\n\n/**\n * Action creator for MVP_UPDATE_AZURE_BENEFIT_DETAIL_SUCCESS.\n */\nexport function addAzureBenefitDetailSuccess(): IRDAddAzureBenefitDetailSuccess {\n  return {\n    type: RD_ADD_AZURE_BENEFIT_DETAIL_SUCCESS,\n  };\n}\n\n/**\n * Action creator for MVP_UPDATE_AZURE_BENEFIT_DETAIL_FAIL.\n * @param errorMessage The error message.\n */\nexport function addAzureBenefitDetailFail(errorMessage: string): IRDAddAzureBenefitDetailFail {\n  return {\n    type: RD_ADD_AZURE_BENEFIT_DETAIL_FAIL,\n    errorMessage,\n  };\n}\n\nexport function addAzureBenefitReset(): IRDAddAzureBenefitReset {\n  return {\n    type: RD_ADD_AZURE_BENEFIT_RESET,\n  };\n}\n\nexport type RDUserProfileActionTypes =\n  | IRDAddUserProfileCommentResetValues\n  | IRDProgramProfileUpdateResetStatus\n  | IRDUpdateUserProfileId\n  | IRDUpdateProgramProfile\n  | IRDUpdateProgramProfileSuccess\n  | IRDUpdateProgramProfileFail\n  | IRDAddUserProfileComment\n  | IRDAddUserProfileCommentFail\n  | IRDAddUserProfileCommentSuccess\n  | IRDDownloadToCSV\n  | IRDDownloadToCSVFail\n  | IRDDownloadToCSVSuccess\n  | IRDFetchUserProfile\n  | IRDFetchUserProfileComments\n  | IRDFetchUserProfileCommentsFail\n  | IRDFetchUserProfileCommentsSuccess\n  | IRDFetchUserProfileFail\n  | IRDFetchUserProfileSuccess\n  | IRDProfilesFail\n  | IRDProfilesSearch\n  | IRDProfilesSuccess\n  | IRDUpdateCurrentPage\n  | IRDUpdatePageSize\n  | IRDResetFileDownloadStatus\n  | IRDUserProfilesFilterProvinceValueRemove\n  | IRDUserProfilesFilterValueAdd\n  | IRDUserProfilesFilterValueRemove\n  | IRDUserProfilesFilterValueUpdate\n  | IRDClaimBenefit\n  | IRDClaimBenefitSuccess\n  | IRDClaimBenefitFail\n  | IRDClaimBenefitReset\n  | IRDGetProfileBenefits\n  | IRDGetProfileBenefitsFail\n  | IRDGetProfileBenefitsSuccess\n  | IRDResetM365BenefitDetail\n  | IRDFetchM365BenefitDetail\n  | IRDFetchM365BenefitDetailFailure\n  | IRDFetchM365BenefitDetailSuccess\n  | IRDUpdateM365BenefitDetail\n  | IRDUpdateM365BenefitDetailFailure\n  | IRDUpdateM365BenefitDetailSuccess\n  | IRDResetMS365BenefitDetail\n  | IRDFetchMS365BenefitDetail\n  | IRDFetchMS365BenefitDetailFailure\n  | IRDFetchMS365BenefitDetailSuccess\n  | IRDUpdateMS365BenefitDetail\n  | IRDUpdateMS365BenefitDetailFailure\n  | IRDUpdateMS365BenefitDetailSuccess\n  | IRDFetchTeamsBenefitDetail\n  | IRDFetchTeamsBenefitDetailFailure\n  | IRDFetchTeamsBenefitDetailSuccess\n  | IRDFetchProgramProfileSuccess\n  | IRDFetchProgramProfileFail\n  | IRDFetchProgramProfile\n  | IRDExtendAzureBenefitCredit\n  | IRDExtendAzureBenefitCreditSuccess\n  | IRDExtendAzureBenefitCreditFailure\n  | IRDExtendAzureBenefitCreditReset\n  | IRDUserProfileIsPrivateUpdate\n  | IRDUserProfileIsPrivateUpdateSuccess\n  | IRDUserProfileIsPrivateUpdateFail\n  | IRDUpdateSorting\n  | IRDUserProfileFilterValueReset\n  | IRDUserProfilePrimaryEmailUpdate\n  | IRDUserProfilePrimaryEmailUpdateSuccess\n  | IRDUserProfilePrimaryEmailUpdateFail\n  | IRDUserProfilePrimaryEmailUpdateReset\n  | IRDAddAzureBenefitDetail\n  | IRDAddAzureBenefitDetailSuccess\n  | IRDAddAzureBenefitDetailFail\n  | IRDAddAzureBenefitReset;\n","/* eslint-disable @typescript-eslint/explicit-function-return-type */\n/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { call, delay, put, race } from \"redux-saga/effects\";\n\nimport { isEmpty } from \"lodash\";\n\nimport * as rdUserProfileApi from \"Services/RD/RDApi\";\n\nimport { GENERIC_API_TIMEOUT_ERROR } from \"Constants/ApplicationConstants\";\nimport { BenefitNameEnum } from \"Constants/BenefitConstants\";\nimport { FilterValueFieldNames } from \"Constants/FilterFields\";\nimport { HttpStatusCode } from \"Constants/HttpStatusCode\";\nimport { defaultListingPageSize } from \"Constants/ProfileConstants\";\nimport { TenantTypesEnum } from \"Constants/TenantTypes\";\nimport { IClaimBenefitDataResult } from \"Interfaces/Benefits/IClaimBenefitDataResult\";\nimport { IClaimBenefitResult } from \"Interfaces/Benefits/IClaimBenefitResult\";\nimport { IExtendAzureBenefitCreditResult } from \"Interfaces/Benefits/IExtendAzureBenefitCreditResult\";\nimport { IM365BenefitDetail } from \"Interfaces/Benefits/IM365BenefitDetail\";\nimport { IMicrosoft365BenefitDetail } from \"Interfaces/Benefits/IMicrosoft365BenefitDetail\";\nimport { IM365BenefitDetailDataResult } from \"Interfaces/Benefits/IM365BenefitDetailDataResult\";\nimport { IProfileBenefitDataResult } from \"Interfaces/Benefits/IProfileBenefitDataResult\";\nimport { ICommentAddRequest } from \"Interfaces/Comments/ICommentAddRequest\";\nimport { ICommentAddResult } from \"Interfaces/Comments/ICommentAddResult\";\nimport { ICommentsGetResult } from \"Interfaces/Comments/ICommentsGetResult\";\nimport { IApiEmptyResult, IApiErrorResult, IApiResult2 } from \"Interfaces/IApiResult\";\nimport { IFilterValue } from \"Interfaces/IFilterValue\";\nimport { IProgramProfileUpdateRequest } from \"Interfaces/ProgramProfile/IProgramProfileUpdateRequest\";\nimport { IProgramProfileUpdateResult } from \"Interfaces/ProgramProfile/IProgramProfileUpdateResult\";\nimport { IRDProgramProfile } from \"Interfaces/RD/ProgramProfile/IRDProgramProfile\";\nimport { IGetRDUserProfilesRequest } from \"Interfaces/RD/UserProfile/IGetRDUserProfilesRequest\";\nimport { IRDUserProfileGetResult } from \"Interfaces/RD/UserProfile/IRDUserProfileGetResult\";\nimport { IRDUserProfilesSearchResult } from \"Interfaces/RD/UserProfile/IRDUserProfilesSearchResult\";\nimport { getDefaultApiTimeOutConfiguration } from \"Utility/Utils\";\n\nimport {\n  addUserProfileCommentFail,\n  addUserProfileCommentSuccess,\n  addAzureBenefitDetailFail,\n  addAzureBenefitDetailSuccess,\n  claimRdBenefitFail,\n  claimRdBenefitSuccess,\n  downloadRDUserProfilesToCSVFail,\n  downloadRDUserProfilesToCSVSuccess,\n  extendAzureBenefitCreditFailure,\n  extendAzureBenefitCreditSuccess,\n  fetchM365BenefitDetailFailure,\n  fetchM365BenefitDetailSuccess,\n  fetchProgramProfileFail,\n  fetchProgramProfileSuccess,\n  fetchUserProfileCommentsFail,\n  fetchUserProfileCommentsSuccess,\n  fetchUserProfileFail,\n  fetchUserProfileSuccess,\n  getProfileBenefitsSuccess,\n  profileBenefitsFail,\n  searchRDUserProfilesFail,\n  searchUserRDProfilesSuccess,\n  updateM365BenefitDetailFailure,\n  updateM365BenefitDetailSuccess,\n  updateRDProgramProfileFail,\n  updateRDProgramProfileSuccess,\n  userProfileIsPrivateUpdateFail,\n  userProfileIsPrivateUpdateSuccess,\n  userProfilePrimaryEmailUpdateFail,\n  userProfilePrimaryEmailUpdateSuccess,\n  IRDAddUserProfileComment,\n  IRDClaimBenefit,\n  IRDDownloadToCSV,\n  IRDExtendAzureBenefitCredit,\n  IRDFetchM365BenefitDetail,\n  IRDFetchProgramProfile,\n  IRDFetchUserProfile,\n  IRDFetchUserProfileComments,\n  IRDGetProfileBenefits,\n  IRDProfilesSearch,\n  IRDUpdateM365BenefitDetail,\n  IRDUpdateProgramProfile,\n  IRDUserProfileIsPrivateUpdate,\n  IRDUserProfilePrimaryEmailUpdate,\n  IRDUpdateMS365BenefitDetail,\n  fetchMS365BenefitDetailFailure,\n  fetchMS365BenefitDetailSuccess,\n  updateMS365BenefitDetailFailure,\n  updateMS365BenefitDetailSuccess,\n  IRDAddAzureBenefitDetail,\n} from \"./RDUserProfileAction\";\n\n/**\n * Updates the request body with filter values.\n * @param {IFilterValue[]} filterValues The list of filters.\n * @return {IGetRDUserProfilesRequest} The request to be sent.\n */\nconst updateFilterValues = (filterValues: IFilterValue[]): IGetRDUserProfilesRequest => {\n  const requestBody: IGetRDUserProfilesRequest = {\n    programStatusList: [],\n    industryFocusList: [],\n    technicalExpertiseList: [],\n    clRegionList: [],\n    countryRegionList: [],\n    stateProvinceList: [],\n    otherProgramMembershipList: [],\n    awardPeriodStartDate: undefined,\n    awardPeriodEndDate: undefined,\n  };\n\n  filterValues.forEach(function (item) {\n    switch (item.fieldName) {\n      case \"programStatus\":\n        requestBody.programStatusList.push(item.value);\n        break;\n      case \"industryFocus\":\n        requestBody.industryFocusList.push(item.value);\n        break;\n      case \"technicalExpertise\":\n        requestBody.technicalExpertiseList.push(item.value);\n        break;\n      case \"clRegion\":\n        requestBody.clRegionList.push(item.value);\n        break;\n      case \"country\":\n        requestBody.countryRegionList.push(item.value);\n        break;\n      case \"stateOrProvince\":\n        requestBody.stateProvinceList.push(item.value);\n        break;\n      case \"otherProgramMembership\":\n        requestBody.otherProgramMembershipList.push(item.value);\n        break;\n      case FilterValueFieldNames.AWARD_PERIOD_START_DATE:\n        requestBody.awardPeriodStartDate = new Date(item.value);\n        break;\n      case FilterValueFieldNames.AWARD_PERIOD_END_DATE:\n        requestBody.awardPeriodEndDate = new Date(item.value);\n        break;\n      default:\n        return;\n    }\n  });\n  return requestBody;\n};\n\n/**\n * Generator function to async dispatch action\n * @generator\n * @param {ISearchUserProfiles} action To search user profile for given text.\n * @returns {void}\n */\nfunction* handleRDSearchUserProfiles(action: IRDProfilesSearch): Generator {\n  const failedMessage = \"Failed to search the user profiles.\";\n  const requestBody = updateFilterValues(action.selectedUserProfilesFilterValues);\n  requestBody.searchKey = action.searchText;\n  requestBody.pageIndex = action.searchPage;\n  requestBody.pageSize = action.pageSize;\n  requestBody.sortColumn = action.sortColumn;\n  requestBody.sortDescending = action.sortDescending;\n\n  try {\n    const { result, timeout }: IApiResult2<IRDUserProfilesSearchResult> | any = yield race({\n      result: call(rdUserProfileApi.searchRDUserProfiles, requestBody),\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\n    });\n\n    if (timeout) {\n      yield put(searchRDUserProfilesFail(GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n\n    const { userProfiles, filteredCount } = result.parsedBody as IRDUserProfilesSearchResult;\n\n    switch (result.httpStatusCode) {\n      case HttpStatusCode.Ok:\n        // TODO: if null result, response code is 200 and \"userProfile\" returned.\n        // If backend updated to instead return \"userProfiles\" we can clean this up some\n        if (isEmpty(userProfiles)) {\n          yield put(searchUserRDProfilesSuccess([], 1, defaultListingPageSize, 0));\n        } else {\n          yield put(\n            searchUserRDProfilesSuccess(\n              userProfiles,\n              action.searchPage,\n              action.pageSize,\n              filteredCount\n            )\n          );\n        }\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(searchRDUserProfilesFail((result.parsedBody as IApiErrorResult).error.message));\n        break;\n      default:\n        yield put(searchRDUserProfilesFail(failedMessage));\n        break;\n    }\n  } catch (error) {\n    // TODO: getting bad request and error returned when no users found and falling into this catch\n    yield put(searchRDUserProfilesFail(error as string));\n  }\n}\n\n/**\n * Generator function to async dispatch action\n * @generator\n * @param {IRDDownloadToCSV} action To download user profiles.\n * @returns {void}\n */\nfunction* handleRDUserProfileDownload(action: IRDDownloadToCSV) {\n  const defaultFailedErrorMessage = \"Failed to download user profiles\";\n  const requestBody = updateFilterValues(action.selectedUserProfilesFilterValues);\n  requestBody.searchKey = action.searchText;\n\n  try {\n    const { result, timeout } = yield race({\n      result: call(rdUserProfileApi.downloadRDUserProfiles, requestBody),\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\n    });\n\n    if (timeout) {\n      yield put(downloadRDUserProfilesToCSVFail(GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n\n    const data = yield result.text();\n\n    switch (result.status) {\n      case HttpStatusCode.Ok:\n        yield put(downloadRDUserProfilesToCSVSuccess(data));\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(downloadRDUserProfilesToCSVFail((result.body as IApiErrorResult).error.message));\n        break;\n      default:\n        yield put(downloadRDUserProfilesToCSVFail(defaultFailedErrorMessage));\n        break;\n    }\n  } catch (error) {\n    yield put(downloadRDUserProfilesToCSVFail(defaultFailedErrorMessage));\n  }\n}\n\n/**\n * Generator function to async dispatch action\n * @generator\n * @param {IRDFetchUserProfile} action To get user profile .\n * @returns {void}\n */\nfunction* handleRDUserProfileFetch(action: IRDFetchUserProfile) {\n  const defaultFailedErrorMessage = \"Failed to fetch user profile\";\n  const { rdUserProfileId } = action;\n\n  try {\n    const { result, timeout } = yield race({\n      result: call(rdUserProfileApi.fetchRDUserProfile, rdUserProfileId),\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\n    });\n\n    if (timeout) {\n      yield put(fetchUserProfileFail(GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n\n    const { userProfile } = result.parsedBody as IRDUserProfileGetResult;\n\n    switch (result.status) {\n      case HttpStatusCode.Ok:\n        yield put(fetchUserProfileSuccess(userProfile));\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(fetchUserProfileFail((result.body as IApiErrorResult).error.message));\n        break;\n      default:\n        yield put(fetchUserProfileFail(defaultFailedErrorMessage));\n        break;\n    }\n  } catch (error) {\n    yield put(fetchUserProfileFail(defaultFailedErrorMessage));\n  }\n}\n\n/**\n * Generator function to async dispatch action\n * @generator\n * @param {IRDFetchProgramProfile} action To get Program profile.\n * @returns {void}\n */\nfunction* handleRDProgramProfileFetch(action: IRDFetchProgramProfile) {\n  const defaultFailedErrorMessage = \"Failed to fetch Program profile\";\n  const { programProfileId } = action;\n  try {\n    const { result, timeout } = yield race({\n      result: call(rdUserProfileApi.getRDProgramProfile, programProfileId),\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\n    });\n\n    if (timeout) {\n      yield put(fetchProgramProfileFail(GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n\n    const programProfile = result.parsedBody as IRDProgramProfile;\n\n    switch (result.status) {\n      case HttpStatusCode.Ok:\n        yield put(fetchProgramProfileSuccess(programProfile));\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(fetchProgramProfileFail((result.body as IApiErrorResult).error.message));\n        break;\n      default:\n        yield put(fetchProgramProfileFail(defaultFailedErrorMessage));\n        break;\n    }\n  } catch (error) {\n    yield put(fetchProgramProfileFail(defaultFailedErrorMessage));\n  }\n}\n\n/**\n * Generator function to async dispatch action\n * @generator\n * @param {IRDFetchUserProfileComments} action To get user profile comments .\n * @returns {void}\n */\nfunction* handleRDUserProfileCommentsFetch(action: IRDFetchUserProfileComments) {\n  const defaultFailedErrorMessage = \"Failed to fetch user profile comments\";\n  const { rdUserProfileId } = action;\n  try {\n    const { result, timeout } = yield race({\n      result: call(rdUserProfileApi.fetchRDUserProfileComments, rdUserProfileId),\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\n    });\n\n    if (timeout) {\n      yield put(fetchUserProfileCommentsFail(GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n\n    const { userProfileComments } = result.parsedBody as ICommentsGetResult;\n\n    switch (result.status) {\n      case HttpStatusCode.Ok:\n        yield put(fetchUserProfileCommentsSuccess(userProfileComments));\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(fetchUserProfileCommentsFail((result.body as IApiErrorResult).error.message));\n        break;\n      default:\n        yield put(fetchUserProfileCommentsFail(defaultFailedErrorMessage));\n        break;\n    }\n  } catch (error) {\n    yield put(fetchUserProfileCommentsFail(defaultFailedErrorMessage));\n  }\n}\n\n/**\n * Generator function to async dispatch action\n * @generator\n * @param {IRDAddUserProfileComment} action To add user profile comment.\n * @returns {void}\n */\nfunction* handleRDAddUserProfileComment(action: IRDAddUserProfileComment) {\n  const defaultFailedErrorMessage = \"Failed to add user profile comment\";\n  const { rdUserProfileId, textValue, createdBy } = action;\n  const requestBody: ICommentAddRequest = {\n    userProfileComment: {\n      userProfileId: rdUserProfileId,\n      text: textValue,\n      createdBy,\n      tenantName: TenantTypesEnum.RD,\n    },\n  };\n\n  try {\n    const { result, timeout } = yield race({\n      result: call(rdUserProfileApi.addRDUserProfileComment, requestBody),\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\n    });\n\n    if (timeout) {\n      yield put(addUserProfileCommentFail(GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n\n    const { userProfileId } = result.parsedBody as ICommentAddResult;\n\n    switch (result.status) {\n      case HttpStatusCode.Ok:\n        yield put(addUserProfileCommentSuccess(userProfileId));\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(addUserProfileCommentFail((result.body as IApiErrorResult).error.message));\n        break;\n      default:\n        yield put(addUserProfileCommentFail(defaultFailedErrorMessage));\n        break;\n    }\n  } catch (error) {\n    yield put(addUserProfileCommentFail(defaultFailedErrorMessage));\n  }\n}\n\n/**\n * Generator function to async dispatch action\n * @generator\n * @param {IRDUpdateProgramProfile} action To update program profile.\n * @returns {void}\n */\nfunction* handleRDUpdateProgramProfile(action: IRDUpdateProgramProfile) {\n  const defaultFailedErrorMessage = \"Failed to update program profile\";\n  const { rdUserProfileId, programProfileStatus, modifiedBy } = action;\n  const requestBody: IProgramProfileUpdateRequest = {\n    programProfile: {\n      userProfileId: rdUserProfileId,\n      programProfileStatus: programProfileStatus,\n      modifiedBy,\n      tenantName: TenantTypesEnum.RD,\n    },\n  };\n\n  try {\n    const { result, timeout } = yield race({\n      result: call(rdUserProfileApi.updateRDProgramProfile, requestBody),\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\n    });\n\n    if (timeout) {\n      yield put(updateRDProgramProfileFail(GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n\n    const { programProfile } = result.parsedBody as IProgramProfileUpdateResult;\n\n    switch (result.status) {\n      case HttpStatusCode.Ok:\n        yield put(updateRDProgramProfileSuccess(programProfile.programProfileStatusName));\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(updateRDProgramProfileFail((result.body as IApiErrorResult).error.message));\n        break;\n      default:\n        yield put(updateRDProgramProfileFail(defaultFailedErrorMessage));\n        break;\n    }\n  } catch (error) {\n    yield put(updateRDProgramProfileFail(defaultFailedErrorMessage));\n  }\n}\n\n/**\n * Generator function to async dispatch action\n * @generator\n * @param {IUpdateProgramProfile} action To claim program profile benefit.\n * @returns {void}\n */\nfunction* handleRDClaimBenefit(action: IRDClaimBenefit): Generator {\n  const failedMessage =\n    \"API call failed, please try again and let us know if issue is not resolved.\";\n\n  const benefitApiMap = {\n    [BenefitNameEnum.GitHubPro]: rdUserProfileApi.claimUserProfileBenefitsGithubPro,\n    [BenefitNameEnum.LinkedInLearning]: rdUserProfileApi.claimUserProfileBenefitsLinkedIn,\n    [BenefitNameEnum.M365]: rdUserProfileApi.claimUserProfileBenefitsM365,\n    [BenefitNameEnum.MS365]: rdUserProfileApi.claimUserProfileBenefitsMS365,\n    [BenefitNameEnum.Teams]: rdUserProfileApi.claimUserProfileBenefitsTeams,\n  };\n\n  try {\n    const apiCall = benefitApiMap[action.benefitType];\n    const { result, timeout }: IApiResult2<IClaimBenefitDataResult> | any = yield race({\n      result: call(apiCall, action.userProfileId),\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\n    });\n\n    if (timeout) {\n      yield put(claimRdBenefitFail(GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n\n    switch (result.httpStatusCode) {\n      case HttpStatusCode.CreatedAt:\n        const requestResult = result.parsedBody as IClaimBenefitResult;\n        if (!requestResult.isSuccess) {\n          yield put(claimRdBenefitFail(failedMessage));\n        }\n        yield put(claimRdBenefitSuccess());\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(claimRdBenefitFail((result.parsedBody as IApiErrorResult).error.message));\n      default:\n        yield put(claimRdBenefitFail((result.parsedBody as IApiErrorResult).error.message));\n    }\n  } catch (error) {\n    yield put(claimRdBenefitFail(failedMessage));\n  }\n}\n\n/**\n * Generator function to async dispatch action to fetch a profiles benefits\n * @generator\n * @param {IRDGetProfileBenefits} action To fetch a profiles benefits.\n * @returns {void}\n */\nfunction* handleRDGetProfileBenefits(action: IRDGetProfileBenefits): Generator {\n  const defaultFailedErrorMessage = \"Failed to fetch profile benefits\";\n\n  try {\n    const { result, timeout }: IApiResult2<IProfileBenefitDataResult> | any = yield race({\n      result: call(rdUserProfileApi.getProfileBenefits, action.userProfileId),\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\n    });\n\n    if (timeout) {\n      yield put(profileBenefitsFail(GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n\n    switch (result.status) {\n      case HttpStatusCode.Ok:\n        yield put(getProfileBenefitsSuccess(result.parsedBody));\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(profileBenefitsFail((result.body as IApiErrorResult).error.message));\n        break;\n      default:\n        yield put(profileBenefitsFail(defaultFailedErrorMessage));\n    }\n  } catch (error) {\n    yield put(profileBenefitsFail(defaultFailedErrorMessage));\n  }\n}\n\n/**\n * Generator function to async dispatch action to fetch the RD M365 Detail.\n * @generator\n * @param {IRDGetProfileBenefits} action To fetch a profiles benefits.\n * @returns {void}\n */\nfunction* handleRDGetM365BenefitDetail(action: IRDFetchM365BenefitDetail): Generator {\n  const failedMessage = \"Failed to get O365 Benefit Details\";\n\n  try {\n    const { result, timeout }: IApiResult2<IM365BenefitDetailDataResult> | any = yield race({\n      result: call(rdUserProfileApi.getM365BenefitDetails, action.userProfileId),\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\n    });\n\n    if (timeout) {\n      yield put(fetchM365BenefitDetailFailure(GENERIC_API_TIMEOUT_ERROR));\n    }\n\n    switch (result.httpStatusCode) {\n      case HttpStatusCode.Ok:\n        yield put(fetchM365BenefitDetailSuccess(result.parsedBody as IM365BenefitDetail));\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(\n          fetchM365BenefitDetailFailure((result.parsedBody as IApiErrorResult).error.message)\n        );\n        break;\n      default:\n        yield put(fetchM365BenefitDetailFailure(failedMessage));\n        break;\n    }\n  } catch (error) {\n    yield put(fetchM365BenefitDetailFailure(failedMessage));\n  }\n}\n\n/**\n * Generator function to async dispatch action\n * @generator\n * @param {IRDFetchM365BenefitDetail} action To get the users Microsoft 365 Benefit Details.\n * @returns {void}\n */\nfunction* handleRDGetMS365BenefitDetail(action: IRDFetchM365BenefitDetail) {\n  const failedMessage = \"Failed to get O365 Benefit Details\";\n\n  try {\n    const { result, timeout } = yield race({\n      result: call(rdUserProfileApi.getMS365BenefitDetails, action.userProfileId),\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\n    });\n\n    if (timeout) {\n      yield put(fetchMS365BenefitDetailFailure(GENERIC_API_TIMEOUT_ERROR));\n    }\n\n    switch (result.httpStatusCode) {\n      case HttpStatusCode.Ok:\n        yield put(fetchMS365BenefitDetailSuccess(result.parsedBody as IMicrosoft365BenefitDetail));\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(\n          fetchMS365BenefitDetailFailure((result.parsedBody as IApiErrorResult).error.message)\n        );\n        break;\n      default:\n        yield put(fetchMS365BenefitDetailFailure(failedMessage));\n        break;\n    }\n  } catch (error) {\n    yield put(fetchMS365BenefitDetailFailure(failedMessage));\n  }\n}\n\n/**\n * Generator function to async dispatch action\n * @generator\n * @param {IRDUpdateM365BenefitDetail} action To update/create the users Microsoft 365 Benefit Details.\n * @returns {void}\n */\nfunction* handleRDUpdateMS365BenefitDetail(action: IRDUpdateMS365BenefitDetail) {\n  const failedMessage = \"Failed to update M365 Benefit Details\";\n\n  try {\n    const { result, timeout } = yield race({\n      result: call(rdUserProfileApi.updateMS365BenefitDetails, action.ms365BenefitDetail),\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\n    });\n\n    if (timeout) {\n      yield put(updateMS365BenefitDetailFailure(GENERIC_API_TIMEOUT_ERROR));\n    }\n\n    switch (result.httpStatusCode) {\n      case HttpStatusCode.CreatedAt:\n        yield put(updateMS365BenefitDetailSuccess(result.parsedBody as IMicrosoft365BenefitDetail));\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(\n          updateMS365BenefitDetailFailure((result.parsedBody as IApiErrorResult).error.message)\n        );\n        break;\n      default:\n        yield put(updateMS365BenefitDetailFailure(failedMessage));\n        break;\n    }\n  } catch (error) {\n    yield put(updateMS365BenefitDetailFailure(failedMessage));\n  }\n}\n\n/**\n * Generator function to async dispatch action to update the M365 Benefit Detail.\n * @generator\n * @param {IRDGetProfileBenefits} action To fetch a profiles benefits.\n * @returns {void}\n */\nfunction* handleRDUpdateM365BenefitDetail(action: IRDUpdateM365BenefitDetail): Generator {\n  const failedMessage = \"Failed to update M365 Benefit Details\";\n\n  try {\n    const { result, timeout }: IApiResult2<IM365BenefitDetailDataResult> | any = yield race({\n      result: call(rdUserProfileApi.updateM365BenefitDetails, action.m365BenefitDetail),\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\n    });\n\n    if (timeout) {\n      yield put(updateM365BenefitDetailFailure(GENERIC_API_TIMEOUT_ERROR));\n    }\n\n    switch (result.httpStatusCode) {\n      case HttpStatusCode.CreatedAt:\n        yield put(updateM365BenefitDetailSuccess(result.parsedBody as IM365BenefitDetail));\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(\n          updateM365BenefitDetailFailure((result.parsedBody as IApiErrorResult).error.message)\n        );\n        break;\n      default:\n        yield put(updateM365BenefitDetailFailure(failedMessage));\n        break;\n    }\n  } catch (error) {\n    yield put(updateM365BenefitDetailFailure(failedMessage));\n  }\n}\n\n/**\n * Generator function to async dispatch action\n * @generator\n * @param {IRDExtendAzureBenefitCredit} action To update/create the users M365 Benefit Details.\n * @returns {void}\n */\nfunction* handleRDExtendAzureBenefitCredit(action: IRDExtendAzureBenefitCredit) {\n  const failedMessage = \"Failed to extend Azure Benefit Credit\";\n\n  try {\n    const { result, timeout } = yield race({\n      result: call(rdUserProfileApi.extendAzureBenefitCredit, action.credit, action.userProfileId),\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\n    });\n\n    if (timeout) {\n      yield put(updateM365BenefitDetailFailure(GENERIC_API_TIMEOUT_ERROR));\n    }\n\n    switch (result.httpStatusCode) {\n      case HttpStatusCode.Ok:\n        const requestResult = result.parsedBody as IExtendAzureBenefitCreditResult;\n        if (!requestResult.success) {\n          yield put(extendAzureBenefitCreditFailure(failedMessage));\n        }\n        yield put(extendAzureBenefitCreditSuccess(requestResult.capCredit));\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(\n          extendAzureBenefitCreditFailure((result.parsedBody as IApiErrorResult).error.message)\n        );\n        break;\n      default:\n        yield put(extendAzureBenefitCreditFailure(failedMessage));\n        break;\n    }\n  } catch (error) {\n    yield put(extendAzureBenefitCreditFailure(failedMessage));\n  }\n}\n\n/**\n * Generator function to async dispatch action\n * @generator\n * @param {IUserProfileDlLoad} action To remove dl.\n * @returns {void}\n */\nfunction* handleRDUserProfileIsPrivateUpdate(action: IRDUserProfileIsPrivateUpdate) {\n  const failedMessage = \"Failed to set the is private flag for profile\";\n\n  try {\n    const { result, timeout }: IApiResult2<IApiEmptyResult> | any = yield race({\n      result: call(\n        rdUserProfileApi.updateUserProfileIsPrivate,\n        action.userProfileId,\n        action.isPrivate\n      ),\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\n    });\n\n    if (timeout) {\n      yield put(userProfileIsPrivateUpdateFail(GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n\n    switch (result.status) {\n      case HttpStatusCode.Ok:\n        yield put(userProfileIsPrivateUpdateSuccess());\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(\n          userProfileIsPrivateUpdateFail((result.parsedBody as IApiErrorResult).error.message)\n        );\n        break;\n      default:\n        yield put(userProfileIsPrivateUpdateFail(failedMessage));\n        break;\n    }\n  } catch (error) {\n    yield put(userProfileIsPrivateUpdateFail(error));\n  }\n}\n\n/**\n * Generator function to async dispatch action.\n * @generator\n * @param {IRDUserProfilePrimaryEmailUpdate} action The action to update the primary email.\n * @returns {void}\n */\nfunction* handleRDUserProfilePrimaryEmailUpdate(action: IRDUserProfilePrimaryEmailUpdate) {\n  const failedMessage = \"Failed to update primary email\";\n\n  try {\n    const { result, timeout }: IApiResult2<IApiEmptyResult> | any = yield race({\n      result: call(\n        rdUserProfileApi.updateUserProfilePrimaryEmail,\n        action.userProfileId,\n        action.newEmail\n      ),\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\n    });\n\n    if (timeout) {\n      yield put(userProfilePrimaryEmailUpdateFail(GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n\n    switch (result.status) {\n      case HttpStatusCode.Ok:\n        yield put(userProfilePrimaryEmailUpdateSuccess());\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(\n          userProfilePrimaryEmailUpdateFail((result.parsedBody as IApiErrorResult).error.message)\n        );\n        break;\n      default:\n        yield put(userProfilePrimaryEmailUpdateFail(failedMessage));\n        break;\n    }\n  } catch (error) {\n    yield put(\n      userProfilePrimaryEmailUpdateFail(\n        `Handle Update Primary Email API failed: ${error as string}`\n      )\n    );\n  }\n}\n\n/**\n * Generator function to async dispatch action\n * @generator\n * @param {IRDAddAzureBenefitDetail} action To update program profile.\n * @returns {void}\n */\nfunction* handleRDAddAzureBenefit(action: IRDAddAzureBenefitDetail) {\n  const failedMessage = \"Failed to add Azure Benefit \";\n  try {\n    const { result, timeout } = yield race({\n      result: call(\n        rdUserProfileApi.saveAzureBenefitClaim,\n        action.azureBenefit,\n        action.userProfileId\n      ),\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\n    });\n\n    if (timeout) {\n      yield put(addAzureBenefitDetailFail(GENERIC_API_TIMEOUT_ERROR));\n    }\n\n    switch (result.httpStatusCode) {\n      case HttpStatusCode.Ok:\n        const requestResult = result.parsedBody as boolean;\n        if (!requestResult) {\n          yield put(addAzureBenefitDetailFail(failedMessage));\n        }\n        yield put(addAzureBenefitDetailSuccess());\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(addAzureBenefitDetailFail((result.parsedBody as IApiErrorResult).error.message));\n        break;\n      default:\n        yield put(addAzureBenefitDetailFail(failedMessage));\n        break;\n    }\n  } catch (error) {\n    yield put(addAzureBenefitDetailFail(failedMessage));\n  }\n}\n\nexport {\n  handleRDClaimBenefit,\n  handleRDSearchUserProfiles,\n  handleRDUserProfileDownload,\n  handleRDUserProfileFetch,\n  handleRDUpdateProgramProfile,\n  handleRDUserProfileCommentsFetch,\n  handleRDAddUserProfileComment,\n  handleRDGetProfileBenefits,\n  handleRDGetM365BenefitDetail,\n  handleRDUpdateM365BenefitDetail,\n  handleRDGetMS365BenefitDetail,\n  handleRDUpdateMS365BenefitDetail,\n  handleRDProgramProfileFetch,\n  handleRDExtendAzureBenefitCredit,\n  handleRDUserProfileIsPrivateUpdate,\n  handleRDUserProfilePrimaryEmailUpdate,\n  handleRDAddAzureBenefit,\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport {\n  REGIONDATA_LOAD,\n  REGIONDATA_LOAD_FAILURE,\n  REGIONDATA_LOAD_SUCCESS,\n} from \"Constants/ActionTypes\";\nimport { IRegionData } from \"Interfaces/SiteContent\";\n\n/**\n * Interface for getting\n * a CL Region.\n * @interface\n */\nexport interface IGetRegion {\n  type: typeof REGIONDATA_LOAD;\n}\n\n/**\n * Interface for getting\n * a CL Region successfully.\n * @interface\n */\n\nexport interface IGetRegionSuccess {\n  type: typeof REGIONDATA_LOAD_SUCCESS;\n  regions: IRegionData[];\n}\n\n/**\n * Interface for the failure\n * to get a CL region.\n * @interface\n */\n\nexport interface IGetRegionFailure {\n  type: typeof REGIONDATA_LOAD_FAILURE;\n  regionLoadError: string;\n}\n\n/**\n * Action creator for REGIONDATA_LOAD.\n */\nexport const getRegion = (): RegionActionTypes => ({\n  type: REGIONDATA_LOAD,\n});\n\n/**\n * Action creator for REGIONDATA_LOAD_SUCCESS.\n * @param regions the CL regions successfully loaded.\n */\nexport const getRegionSuccess = (regions: IRegionData[]): RegionActionTypes => ({\n  type: REGIONDATA_LOAD_SUCCESS,\n  regions,\n});\n\n/**\n * Action creator for REGIONDATA_LOAD_FAILURE.\n * @param errorMessage the error message from the server.\n */\nexport const getRegionFailure = (regionLoadError: string): RegionActionTypes => ({\n  type: REGIONDATA_LOAD_FAILURE,\n  regionLoadError,\n});\n\nexport type RegionActionTypes = IGetRegion | IGetRegionSuccess | IGetRegionFailure;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\nimport { call, delay, put, race } from \"redux-saga/effects\";\n\nimport * as siteContentApi from \"Services/SiteContentApi\";\n\nimport { GENERIC_API_TIMEOUT_ERROR } from \"Constants/ApplicationConstants\";\nimport { HttpStatusCode } from \"Constants/HttpStatusCode\";\nimport { IGetRegionDataOkResult, IGetRegionDataResult } from \"Services/Interfaces/SiteContent\";\nimport { IApiErrorResult, IApiResult2 } from \"Utility/IApiResult\";\nimport { getDefaultApiTimeOutConfiguration } from \"Utility/Utils\";\n\nimport { getRegionFailure, getRegionSuccess, IGetRegion } from \"./RegionAction\";\n\n/**\n * Handle load CL Regions.\n * NOTE: Errors needs to be caught and handled by the caller as since  this is just a util, there is no telemetry instance.\n * @param {IGetRegion} _ The IGetRegion Action Type.\n * @returns {Generator} resulting function generated\n */\nfunction* handleLoadRegions(_: IGetRegion): Generator {\n  try {\n    const { result, timeout }: IApiResult2<IGetRegionDataResult> | any = yield race({\n      result: call(siteContentApi.fetchRegionList),\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\n    });\n\n    if (timeout) {\n      yield put(getRegionFailure(GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n\n    switch (result.httpStatusCode) {\n      case HttpStatusCode.Ok:\n        yield put(getRegionSuccess((result.parsedBody as IGetRegionDataOkResult).regions));\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(getRegionFailure((result.parsedBody as IApiErrorResult).error.message));\n        break;\n      case HttpStatusCode.NotFound:\n        yield put(getRegionFailure((result.parsedBody as IApiErrorResult).error.message));\n        break;\n      default:\n        yield put(getRegionFailure((result.parsedBody as IApiErrorResult).error.message));\n        break;\n    }\n  } catch (error) {\n    yield put(getRegionFailure(error.message));\n  }\n}\n\n/**\n *\n */\nexport { handleLoadRegions };\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\nimport { call, delay, put, race } from \"redux-saga/effects\";\nimport { IGetSchools, getSchoolDataSuccess, getSchoolDataFailure } from \"./SchoolDataAction\";\nimport { IApiErrorResult, IApiResult2 } from \"../../Utility/IApiResult\";\nimport { HttpStatusCode } from \"../../Constants/HttpStatusCode\";\nimport { IGetSchoolDataResult, IGetSchoolsOkResult } from \"../../Services/Interfaces/SiteContent\";\nimport * as siteContentApi from \"../../Services/SiteContentApi\";\nimport { GENERIC_API_TIMEOUT_ERROR } from \"../../Constants/ApplicationConstants\";\nimport { getDefaultApiTimeOutConfiguration } from \"../../Utility/Utils\";\n\nfunction* handleLoadSchools(action: IGetSchools) {\n  try {\n    const { result, timeout }: IApiResult2<IGetSchoolDataResult> | any = yield race({\n      result: call(siteContentApi.fetchSchoolList, action.countryRegionName),\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\n    });\n\n    if (timeout) {\n      yield put(getSchoolDataFailure(GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n\n    switch (result.httpStatusCode) {\n      case HttpStatusCode.Ok:\n        yield put(getSchoolDataSuccess((result.parsedBody as IGetSchoolsOkResult).schools));\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(getSchoolDataFailure((result.parsedBody as IApiErrorResult).error.message));\n        break;\n      case HttpStatusCode.NotFound:\n        yield put(getSchoolDataFailure((result.parsedBody as IApiErrorResult).error.message));\n        break;\n      default:\n        yield put(getSchoolDataFailure((result.parsedBody as IApiErrorResult).error.message));\n        break;\n    }\n  } catch (error) {\n    yield put(getSchoolDataFailure(error.message));\n  }\n}\n\n/**\n *\n */\nexport { handleLoadSchools };\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\nimport { call, delay, put, race } from \"redux-saga/effects\";\nimport {\n  IGetSocialNetwork,\n  getSocialNetworkSuccess,\n  getSocialNetworkFailure,\n} from \"./SocialNetworkAction\";\nimport { IApiErrorResult, IApiResult2 } from \"../../Utility/IApiResult\";\nimport { HttpStatusCode } from \"../../Constants/HttpStatusCode\";\nimport {\n  IGetSocialNetworkOkResult,\n  IGetSocialNetworkDataResult,\n} from \"../../Services/Interfaces/SiteContent\";\nimport * as siteContentApi from \"../../Services/SiteContentApi\";\nimport { getDefaultApiTimeOutConfiguration } from \"../../Utility/Utils\";\nimport { GENERIC_API_TIMEOUT_ERROR } from \"../../Constants/ApplicationConstants\";\n\n/**\n * Handle load Social Networks.\n * NOTE: Errors need to be caught and handled by the caller as since this is just a util, there is no telemetry instance.\n * @param {IGetSocialNetwork} action The IGetSocialNetwork Action Type.\n * @returns {void} void.\n */\nfunction* handleLoadSocialNetworks(action: IGetSocialNetwork) {\n  try {\n    const { result, timeout }: IApiResult2<IGetSocialNetworkDataResult> | any = yield race({\n      result: call(siteContentApi.fetchSocialNetworkList),\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\n    });\n\n    if (timeout) {\n      yield put(getSocialNetworkFailure(GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n\n    switch (result.httpStatusCode) {\n      case HttpStatusCode.Ok:\n        yield put(\n          getSocialNetworkSuccess((result.parsedBody as IGetSocialNetworkOkResult).socialNetworks)\n        );\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(getSocialNetworkFailure((result.parsedBody as IApiErrorResult).error.message));\n        break;\n      case HttpStatusCode.NotFound:\n        yield put(getSocialNetworkFailure((result.parsedBody as IApiErrorResult).error.message));\n        break;\n      default:\n        yield put(getSocialNetworkFailure((result.parsedBody as IApiErrorResult).error.message));\n        break;\n    }\n  } catch (error) {\n    yield put(getSocialNetworkFailure(error.message));\n  }\n}\n\nexport { handleLoadSocialNetworks };\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\nimport { call, delay, put, race } from \"redux-saga/effects\";\nimport {\n  IGetStateProvince,\n  IGetStateProvinceSchool,\n  IGetStateProvinceShipping,\n  getStateProvinceFailure,\n  getStateProvinceSuccess,\n  getStateProvinceShippingFailure,\n  getStateProvinceShippingSuccess,\n  getStateProvinceSchoolFailure,\n  getStateProvinceSchoolSuccess,\n} from \"./StateProvinceAction\";\nimport { IApiErrorResult, IApiResult2 } from \"../../Utility/IApiResult\";\nimport { HttpStatusCode } from \"../../Constants/HttpStatusCode\";\nimport {\n  IGetStateProvinceDataResult,\n  IGetStateProvinceOkResult,\n} from \"../../Services/Interfaces/SiteContent\";\nimport * as siteContentApi from \"../../Services/SiteContentApi\";\nimport { GENERIC_API_TIMEOUT_ERROR } from \"../../Constants/ApplicationConstants\";\nimport { getDefaultApiTimeOutConfiguration } from \"../../Utility/Utils\";\n\nfunction* handleLoadStateProvincesSchool(action: IGetStateProvinceSchool) {\n  try {\n    const { result, timeout }: IApiResult2<IGetStateProvinceDataResult> | any = yield race({\n      result: call(siteContentApi.fetchStateProvinceList, action.countryRegionName),\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\n    });\n\n    if (timeout) {\n      yield put(getStateProvinceSchoolFailure(GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n\n    switch (result.httpStatusCode) {\n      case HttpStatusCode.Ok:\n        yield put(\n          getStateProvinceSchoolSuccess(\n            (result.parsedBody as IGetStateProvinceOkResult).stateProvinces\n          )\n        );\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(\n          getStateProvinceSchoolFailure((result.parsedBody as IApiErrorResult).error.message)\n        );\n        break;\n      default:\n        yield put(\n          getStateProvinceSchoolFailure((result.parsedBody as IApiErrorResult).error.message)\n        );\n        break;\n    }\n  } catch (error) {\n    yield put(getStateProvinceSchoolFailure(error.message));\n  }\n}\n\nfunction* handleLoadStateProvincesShipping(action: IGetStateProvinceShipping) {\n  try {\n    const { result, timeout }: IApiResult2<IGetStateProvinceDataResult> | any = yield race({\n      result: call(siteContentApi.fetchStateProvinceList, action.countryRegionName),\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\n    });\n\n    if (timeout) {\n      yield put(getStateProvinceShippingFailure(GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n\n    switch (result.httpStatusCode) {\n      case HttpStatusCode.Ok:\n        yield put(\n          getStateProvinceShippingSuccess(\n            (result.parsedBody as IGetStateProvinceOkResult).stateProvinces\n          )\n        );\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(\n          getStateProvinceShippingFailure((result.parsedBody as IApiErrorResult).error.message)\n        );\n        break;\n      case HttpStatusCode.NotFound:\n        yield put(\n          getStateProvinceShippingFailure((result.parsedBody as IApiErrorResult).error.message)\n        );\n        break;\n      default:\n        yield put(\n          getStateProvinceShippingFailure((result.parsedBody as IApiErrorResult).error.message)\n        );\n        break;\n    }\n  } catch (error) {\n    yield put(getStateProvinceShippingFailure(error.message));\n  }\n}\n\nfunction* handleLoadStateProvinces(action: IGetStateProvince) {\n  try {\n    const { result, timeout }: IApiResult2<IGetStateProvinceDataResult> | any = yield race({\n      result: call(siteContentApi.fetchStateProvinceList, action.countryRegionName),\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\n    });\n\n    if (timeout) {\n      yield put(getStateProvinceFailure(GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n\n    switch (result.httpStatusCode) {\n      case HttpStatusCode.Ok:\n        yield put(\n          getStateProvinceSuccess((result.parsedBody as IGetStateProvinceOkResult).stateProvinces)\n        );\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(getStateProvinceFailure((result.parsedBody as IApiErrorResult).error.message));\n        break;\n      case HttpStatusCode.NotFound:\n        yield put(getStateProvinceFailure((result.parsedBody as IApiErrorResult).error.message));\n        break;\n      default:\n        yield put(getStateProvinceFailure((result.parsedBody as IApiErrorResult).error.message));\n        break;\n    }\n  } catch (error) {\n    yield put(getStateProvinceFailure(error.message));\n  }\n}\n\n/**\n *\n */\nexport {\n  handleLoadStateProvinces,\n  handleLoadStateProvincesShipping,\n  handleLoadStateProvincesSchool,\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { ITechnicalExpertiseData } from \"Interfaces/SiteContent/ITechnicalExpertiseData\";\n\nimport {\n  TECHNICAL_EXPERTISE_LOAD,\n  TECHNICAL_EXPERTISE_LOAD_FAILURE,\n  TECHNICAL_EXPERTISE_LOAD_SUCCESS,\n} from \"./TechnicalExpertiseTypes\";\n\n/**\n * Action for getting the industry focuses\n */\nexport interface IGetTechnicalExpertise {\n  type: typeof TECHNICAL_EXPERTISE_LOAD;\n}\n\n/**\n * Action getting the industry focuses when successful\n */\nexport interface IGetTechnicalExpertiseSuccess {\n  type: typeof TECHNICAL_EXPERTISE_LOAD_SUCCESS;\n  technicalExpertise: ITechnicalExpertiseData[];\n}\n\n/**\n * Action getting the industry focuses when failure\n */\nexport interface IGetTechnicalExpertiseFailure {\n  type: typeof TECHNICAL_EXPERTISE_LOAD_FAILURE;\n  technicalExpertiseLoadError: string;\n}\n\n/**\n * Action creator for getting the industry focuses\n */\nexport const getTechnicalExpertise = (): TechnicalExpertiseActionTypes => ({\n  type: TECHNICAL_EXPERTISE_LOAD,\n});\n\n/**\n * Action creator for getting industry focuses when success\n * @param technicalExpertise\n */\nexport const getTechnicalExpertiseSuccess = (\n  technicalExpertise: ITechnicalExpertiseData[]\n): TechnicalExpertiseActionTypes => ({\n  type: TECHNICAL_EXPERTISE_LOAD_SUCCESS,\n  technicalExpertise,\n});\n\n/**\n * Action creator for getting industry focuses when failure\n * @param TechnicalExpertiseLoadError\n */\nexport const getTechnicalExpertiseFailure = (\n  technicalExpertiseLoadError: string\n): TechnicalExpertiseActionTypes => ({\n  type: TECHNICAL_EXPERTISE_LOAD_FAILURE,\n  technicalExpertiseLoadError,\n});\n\nexport type TechnicalExpertiseActionTypes =\n  | IGetTechnicalExpertise\n  | IGetTechnicalExpertiseSuccess\n  | IGetTechnicalExpertiseFailure;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { call, delay, put, race } from \"redux-saga/effects\";\n\nimport * as siteContentApi from \"../../Services/SiteContentApi\";\n\nimport { GENERIC_API_TIMEOUT_ERROR } from \"../../Constants/ApplicationConstants\";\nimport { HttpStatusCode } from \"../../Constants/HttpStatusCode\";\nimport {\n  IGetTechnicalExpertiseDataResult,\n  IGetTechnicalExpertiseOkResult,\n} from \"../../Services/Interfaces/SiteContent\";\nimport { IApiErrorResult, IApiResult2 } from \"../../Utility/IApiResult\";\nimport { getDefaultApiTimeOutConfiguration } from \"../../Utility/Utils\";\nimport {\n  getTechnicalExpertiseFailure,\n  getTechnicalExpertiseSuccess,\n} from \"./TechnicalExpertiseAction\";\n\n/**\n * Handle load technical expertise.\n * NOTE: Errors need to be caught and handled by the caller as since this is just a util, there is no telemetry instance.\n * @returns {void} void.\n */\nfunction* handleLoadTechnicalExpertise() {\n  try {\n    const { result, timeout }: IApiResult2<IGetTechnicalExpertiseDataResult> | any = yield race({\n      result: call(siteContentApi.fetchTechnicalExpertiseList),\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\n    });\n\n    if (timeout) {\n      yield put(getTechnicalExpertiseFailure(GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n\n    switch (result.httpStatusCode) {\n      case HttpStatusCode.Ok:\n        yield put(\n          getTechnicalExpertiseSuccess(\n            (result.parsedBody as IGetTechnicalExpertiseOkResult).technicalExpertises\n          )\n        );\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(\n          getTechnicalExpertiseFailure((result.parsedBody as IApiErrorResult).error.message)\n        );\n        break;\n      case HttpStatusCode.NotFound:\n        yield put(\n          getTechnicalExpertiseFailure((result.parsedBody as IApiErrorResult).error.message)\n        );\n        break;\n      default:\n        yield put(\n          getTechnicalExpertiseFailure((result.parsedBody as IApiErrorResult).error.message)\n        );\n        break;\n    }\n  } catch (error) {\n    yield put(getTechnicalExpertiseFailure(error.message));\n  }\n}\n\nexport { handleLoadTechnicalExpertise };\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\nimport { call, delay, put, race } from \"redux-saga/effects\";\n\nimport * as siteContentApi from \"Services/SiteContentApi\";\n\nimport { GENERIC_API_TIMEOUT_ERROR } from \"Constants/ApplicationConstants\";\nimport { HttpStatusCode } from \"Constants/HttpStatusCode\";\nimport { IGetTechAreaOkResult } from \"Services/Interfaces/SiteContent/IGetTechAreaOkResult\";\nimport { IGetTechAreaResult } from \"Services/Interfaces/SiteContent/IGetTechAreaResult\";\nimport { IApiErrorResult, IApiResult2 } from \"Utility/IApiResult\";\nimport { getDefaultApiTimeOutConfiguration } from \"Utility/Utils\";\n\nimport {\n  getTechnologyAreaFailure,\n  getTechnologyAreaSuccess,\n  IGetTechnologyAreas,\n} from \"./TechnologyAreaAction\";\n\n/**\n * Handle load tech area actions.\n * NOTE: Errors need to be caught and handled by the caller as since this is just a util, there is no telemetry instance.\n * @param {IGetTechnologyAreas} action The IGetTechnologyArea Action Type.\n * @returns {void} void.\n */\nfunction* handleLoadTechAreaResults(action: IGetTechnologyAreas) {\n  try {\n    const { result, timeout }: IApiResult2<IGetTechAreaResult> | any = yield race({\n      result: call(siteContentApi.fetchTechnologyAreaList, action.tenant),\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\n    });\n\n    if (timeout) {\n      yield put(getTechnologyAreaFailure(GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n\n    switch (result.httpStatusCode) {\n      case HttpStatusCode.Ok:\n        yield put(\n          getTechnologyAreaSuccess((result.parsedBody as IGetTechAreaOkResult).techFocusAreas)\n        );\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(getTechnologyAreaFailure((result.parsedBody as IApiErrorResult).error.message));\n        break;\n      case HttpStatusCode.NotFound:\n        yield put(getTechnologyAreaFailure((result.parsedBody as IApiErrorResult).error.message));\n        break;\n      default:\n        yield put(getTechnologyAreaFailure((result.parsedBody as IApiErrorResult).error.message));\n        break;\n    }\n  } catch (error) {\n    yield put(getTechnologyAreaFailure(error.message));\n  }\n}\n\nexport { handleLoadTechAreaResults };\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport {\n  BENEFIT_BASE_URL,\n  DISTRIBUTION_LIST_BASE_URL,\n  PROFILE_BASE_URL,\n  PROFILE_BLOCK_SHIPPING_BASE_URL,\n  PROGRAM_PROFILE_BASE_URL,\n} from \"Constants/SagaConstants\";\nimport { TenantTypesEnum } from \"Constants/TenantTypes\";\nimport {\n  IProgramDetailsDataResult,\n  IProgramDetailsRequest,\n} from \"Dataflows/UserProfile/UserProfileSaga\";\nimport { IClaimBenefitDataResult } from \"Interfaces/Benefits/IClaimBenefitDataResult\";\nimport { IProfileBenefitDataResult } from \"Interfaces/Benefits/IProfileBenefitDataResult\";\nimport { IApiEmptyResult, IApiResult2 } from \"Interfaces/IApiResult\";\nimport { IDistributionListsDataResult } from \"Interfaces/UserProfile/DistributionLists/IDistributionListsDataResult\";\nimport { INewUserProfileCommentRequest } from \"Interfaces/UserProfile/INewUserProfileCommentRequest\";\nimport { IProgramProfileDataResult } from \"Interfaces/UserProfile/IProgramProfileDataResult\";\nimport { IUserProfileBlockShippingDataResult } from \"Interfaces/UserProfile/IUserProfileBlockShippingDataResult\";\nimport { IUserProfileBlockShippingRequest } from \"Interfaces/UserProfile/IUserProfileBlockShippingRequest\";\nimport { IUserProfileCommentDataResult } from \"Interfaces/UserProfile/IUserProfileCommentDataResult\";\nimport { IUserProfileCommentRequest } from \"Interfaces/UserProfile/IUserProfileCommentRequest\";\nimport { IUserProfileCommentsDataResult } from \"Interfaces/UserProfile/IUserProfileCommentsDataResult\";\nimport { IUserProfileDataResult } from \"Interfaces/UserProfile/IUserProfileDataResult\";\nimport { IUserProfileRequest } from \"Interfaces/UserProfile/IUserProfileRequest\";\nimport { IUserProfilesSearchDataResult } from \"Interfaces/UserProfile/IUserProfilesSearchDataResult\";\nimport { IUserProfilesSearchRequest } from \"Interfaces/UserProfile/IUserProfilesSearchRequest\";\nimport { IUserProfileVSBenefitsDataResult } from \"Interfaces/UserProfile/IUserProfileVSBenefitsDataResult\";\n\nimport { get, post, put, remove, IHttpResponse } from \"./ApiUtils\";\n\n/**\n * Updates the users Program Details.\n * @param programDetailsRequest - the users program details to update.\n */\nexport async function updateProgramProfile(\n  programDetailsRequest: IProgramDetailsRequest\n): Promise<IHttpResponse<IApiResult2<IProgramDetailsDataResult>>> {\n  return await put<IApiResult2<IProgramDetailsDataResult>>(\n    PROGRAM_PROFILE_BASE_URL,\n    programDetailsRequest,\n    true\n  );\n}\n\n/**\n * Get the user profile.\n * @param userProfileId - The profile id\n */\nexport async function getUserProfile(\n  userProfileId: number\n): Promise<IHttpResponse<IApiResult2<IUserProfileDataResult>>> {\n  return await get<IApiResult2<IUserProfileDataResult>>(PROFILE_BASE_URL + userProfileId, true);\n}\n\n/**\n * Get the user profile by email address.\n * @param email - The email address.\n */\nexport async function getUserProfileByEmail(\n  email: string\n): Promise<IHttpResponse<IApiResult2<IUserProfileDataResult>>> {\n  return await get<IApiResult2<IUserProfileDataResult>>(PROFILE_BASE_URL + email, true);\n}\n\n/**\n * Update the user profile.\n * @param userProfile - The request object.\n */\nexport async function updateUserProfile(\n  userProfile: IUserProfileRequest\n): Promise<IHttpResponse<IApiResult2<IUserProfileDataResult>>> {\n  return await put<IApiResult2<IUserProfileDataResult>>(PROFILE_BASE_URL, userProfile, true);\n}\n\n/**\n * Update the user profile block shipping field.\n * @param userProfile - The request object.\n */\nexport async function updateUserProfileBlockShipping(\n  blockShippingRequest: IUserProfileBlockShippingRequest\n): Promise<IHttpResponse<IApiResult2<IUserProfileBlockShippingDataResult>>> {\n  return await put<IApiResult2<IUserProfileBlockShippingDataResult>>(\n    PROFILE_BLOCK_SHIPPING_BASE_URL,\n    blockShippingRequest,\n    true\n  );\n}\n\n/**\n * Search all the user profiles for entered text.\n * @param searchRequest - The search request\n */\nexport async function searchUserProfiles(\n  searchRequest: IUserProfilesSearchRequest\n): Promise<IHttpResponse<IApiResult2<IUserProfilesSearchDataResult>>> {\n  return await post<IApiResult2<IUserProfilesSearchDataResult>>(\n    PROFILE_BASE_URL + \"search\",\n    searchRequest,\n    true\n  );\n}\n\n/**\n * Get comments for the user profile.\n * @param userProfileId - The profile id\n */\nexport async function getUserProfileComments(\n  userProfileId: number\n): Promise<IHttpResponse<IApiResult2<IUserProfileCommentsDataResult>>> {\n  return await get<IApiResult2<IUserProfileCommentsDataResult>>(\n    PROFILE_BASE_URL + userProfileId + \"/Comments\",\n    true\n  );\n}\n\n/**\n * Create the user profile comment.\n * @param userProfileId number\n * @param userProfileComment - The comment to create\n */\nexport async function createUserProfileComment(\n  userProfileId: number,\n  newUserProfileComment: INewUserProfileCommentRequest\n): Promise<IHttpResponse<IApiResult2<IUserProfileCommentDataResult>>> {\n  return await post<IApiResult2<IUserProfileCommentDataResult>>(\n    PROFILE_BASE_URL + userProfileId + \"/Comments\",\n    newUserProfileComment,\n    true\n  );\n}\n\n/**\n * Update a user profile comment.\n * @param userProfileId number\n * @param userProfileComment - The comment to update\n */\nexport async function updateUserProfileComment(\n  userProfileId: number,\n  userProfileComment: IUserProfileCommentRequest\n): Promise<IHttpResponse<IApiResult2<IUserProfileCommentDataResult>>> {\n  return await put<IApiResult2<IUserProfileCommentDataResult>>(\n    PROFILE_BASE_URL + userProfileId + \"/Comments\",\n    userProfileComment,\n    true\n  );\n}\n\n/**\n * Get benefits for the user profile.\n * @param userProfileId - The profile id\n */\nexport async function getUserProfileVSBenefits(\n  userProfileId: number\n): Promise<IHttpResponse<IApiResult2<IUserProfileVSBenefitsDataResult>>> {\n  return await get<IApiResult2<IUserProfileVSBenefitsDataResult>>(\n    PROFILE_BASE_URL + userProfileId + \"/Benefits/VsBenefit\",\n    true\n  );\n}\n\n/**\n * Provision the user's benefit\n * @param userProfileId - The profile id\n */\nexport async function provisionUserProfileVSBenefits(\n  userProfileId: number\n): Promise<IHttpResponse<IApiResult2<IUserProfileVSBenefitsDataResult>>> {\n  return await post<IApiResult2<IUserProfileVSBenefitsDataResult>>(\n    PROFILE_BASE_URL + userProfileId + \"/Benefits/ProvisionVsBenefit\",\n    { userProfileId: userProfileId },\n    true\n  );\n}\n\n/**\n * Extend the user's benefit\n * @param userProfileId - The profile id\n */\nexport async function extendUserProfileVSBenefits(\n  userProfileId: number\n): Promise<IHttpResponse<IApiResult2<IUserProfileVSBenefitsDataResult>>> {\n  return await post<IApiResult2<IUserProfileVSBenefitsDataResult>>(\n    PROFILE_BASE_URL + userProfileId + \"/Benefits/ExtendVsBenefit\",\n    { userProfileId: userProfileId },\n    true\n  );\n}\n\n/**\n * End the user's benefit\n * @param userProfileId - The profile id\n */\nexport async function endUserProfileVSBenefits(\n  userProfileId: number\n): Promise<IHttpResponse<IApiResult2<IUserProfileVSBenefitsDataResult>>> {\n  return await post<IApiResult2<IUserProfileVSBenefitsDataResult>>(\n    PROFILE_BASE_URL + userProfileId + \"/Benefits/EndVsBenefit\",\n    { userProfileId: userProfileId },\n    true\n  );\n}\n\n/**\n * Claims the github pro benefit for the user profile.\n * @param {number} userProfileId The profile id.\n * @param {string} tenant The selected tenant.\n * @returns {IClaimBenefitDataResult}\n */\nexport async function claimUserProfileBenefitsGithubPro(\n  userProfileId: number,\n  tenant: string\n): Promise<IHttpResponse<IApiResult2<IClaimBenefitDataResult>>> {\n  return await post<IApiResult2<IClaimBenefitDataResult>>(\n    `${BENEFIT_BASE_URL.replace(\"{tenant}\", tenant.toLowerCase())}github`,\n    { userProfileId: userProfileId },\n    true\n  );\n}\n\n/**\n * Claims the SwagKit benefit for the user profile.\n * @param {number} userProfileId The profile id.\n * @param {string} swagKitType  The selected swag-kit.\n * @returns {IClaimBenefitDataResult}\n */\nexport async function claimUserProfileBenefitSwagkit(\n  userProfileId: number,\n  swagKitType: string\n): Promise<IHttpResponse<IApiResult2<IClaimBenefitDataResult>>> {\n  return await post<IApiResult2<IClaimBenefitDataResult>>(\n    `${BENEFIT_BASE_URL.replace(\"{tenant}\", TenantTypesEnum.MLSA.toLowerCase())}swagkit`,\n    { userProfileId: userProfileId, swagKitType: swagKitType },\n    true\n  );\n}\n\n/**\n * Gets the profile benefits from the api for the user profileid.\n * @param {number} userProfileId The profile id.\n * @param {string} tenant The selected tenant.\n * @returns {IProfileBenefitDataResult}\n */\nexport async function getProfileBenefits(\n  userProfileId: number\n): Promise<IHttpResponse<IApiResult2<IProfileBenefitDataResult>>> {\n  return await get<IApiResult2<IProfileBenefitDataResult>>(\n    `${BENEFIT_BASE_URL.replace(\"{tenant}\", TenantTypesEnum.MLSA.toLowerCase())}${userProfileId}`,\n    true\n  );\n}\n\nexport async function fetchProgramProfile(\n  programProfileId: number\n): Promise<IHttpResponse<IApiResult2<IProgramProfileDataResult>>> {\n  return await get<IApiResult2<IProgramProfileDataResult>>(\n    PROGRAM_PROFILE_BASE_URL + programProfileId,\n    true\n  );\n}\n\n/**\n * Load the user profile's dl.\n * @param userProfileId number\n * @param tenant string\n */\nexport async function loadDistributionLists(\n  userProfileId: number,\n  tenant: string\n): Promise<IHttpResponse<IApiResult2<IDistributionListsDataResult>>> {\n  return await get<IApiResult2<IDistributionListsDataResult>>(\n    `${DISTRIBUTION_LIST_BASE_URL.replace(\"{tenant}\", tenant.toLocaleLowerCase())}${userProfileId}`,\n    true\n  );\n}\n\n/**\n * Remove the user profile's dl.\n * @param dlGroup string\n * @param userEmail string\n * @param tenant string\n */\nexport async function removeDistributionLists(\n  dlGroup: string,\n  userEmail: string,\n  tenant: string\n): Promise<IHttpResponse<IApiResult2<IApiEmptyResult>>> {\n  return await remove<IApiResult2<IApiEmptyResult>>(\n    `${DISTRIBUTION_LIST_BASE_URL.replace(\"{tenant}\", tenant.toLocaleLowerCase())}email`,\n    { distributionGroup: dlGroup, userEmail },\n    true\n  );\n}\n\n/**\n * Remove the user profile's dl.\n * @param dlGroup string\n * @param userEmail string\n * @param tenant string\n */\nexport async function removeAllDistributionLists(\n  userProfileId: number,\n  tenant: string\n): Promise<IHttpResponse<IApiResult2<IApiEmptyResult>>> {\n  return await remove<IApiResult2<IApiEmptyResult>>(\n    `${DISTRIBUTION_LIST_BASE_URL.replace(\n      \"{tenant}\",\n      tenant.toLocaleLowerCase()\n    )}contactFromTenant`,\n    { userProfileId },\n    true\n  );\n}\n\n/**\n * Updates the user profile user flag.\n * @param userProfileId The user profile id.\n * @param isPrivate The user profile flag.\n */\nexport async function updateUserProfileIsPrivate(\n  userProfileId: number,\n  isPrivate: boolean\n): Promise<IHttpResponse<IApiResult2<IApiEmptyResult>>> {\n  return await post<IApiResult2<IApiEmptyResult>>(\n    `${PROFILE_BASE_URL}MarkPrivate`,\n    { userProfileId, isPrivate },\n    true\n  );\n}\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { call, delay, put, race } from \"redux-saga/effects\";\n\nimport { isEmpty } from \"lodash\";\n\nimport * as userProfileApi from \"Services/UserProfileApi\";\n\nimport { GENERIC_API_TIMEOUT_ERROR } from \"Constants/ApplicationConstants\";\nimport { HttpStatusCode } from \"Constants/HttpStatusCode\";\nimport {\n  defaultListingPageSize,\n  APPLICATION_STATUS,\n  AVAILABLE_CPM_LIST,\n  PROGRAM_STATUS,\n} from \"Constants/ProfileConstants\";\nimport { IClaimBenefitDataResult } from \"Interfaces/Benefits/IClaimBenefitDataResult\";\nimport { IClaimBenefitResult } from \"Interfaces/Benefits/IClaimBenefitResult\";\nimport { IProfileBenefitDataResult } from \"Interfaces/Benefits/IProfileBenefitDataResult\";\nimport { IProfileBenefitResult } from \"Interfaces/Benefits/IProfileBenefitResult\";\nimport { IApiEmptyResult, IApiErrorResult, IApiResult2 } from \"Interfaces/IApiResult\";\nimport { IProgramProfile } from \"Interfaces/ProgramProfile/IProgramProfile\";\nimport { IDistributionListsResult } from \"Interfaces/UserProfile/DistributionLists/IDistributionListsResult\";\nimport { INewUserProfileCommentRequest } from \"Interfaces/UserProfile/INewUserProfileCommentRequest\";\nimport { IUserProfileBlockShippingDataResult } from \"Interfaces/UserProfile/IUserProfileBlockShippingDataResult\";\nimport { IUserProfileBlockShippingRequest } from \"Interfaces/UserProfile/IUserProfileBlockShippingRequest\";\nimport { IUserProfileCommentDataResult } from \"Interfaces/UserProfile/IUserProfileCommentDataResult\";\nimport { IUserProfileCommentRequest } from \"Interfaces/UserProfile/IUserProfileCommentRequest\";\nimport { IUserProfileCommentsDataResult } from \"Interfaces/UserProfile/IUserProfileCommentsDataResult\";\nimport { IUserProfileCommentsRequest } from \"Interfaces/UserProfile/IUserProfileCommentsRequest\";\nimport { IUserProfileDataResult } from \"Interfaces/UserProfile/IUserProfileDataResult\";\nimport { IUserProfileRequest } from \"Interfaces/UserProfile/IUserProfileRequest\";\nimport { IUserProfilesSearchDataResult } from \"Interfaces/UserProfile/IUserProfilesSearchDataResult\";\nimport { IUserProfilesSearchRequest } from \"Interfaces/UserProfile/IUserProfilesSearchRequest\";\nimport { IUserProfilesSearchResult } from \"Interfaces/UserProfile/IUserProfilesSearchResult\";\nimport { IUserProfileVSBenefit } from \"Interfaces/UserProfile/IUserProfileVSBenefit\";\nimport { IUserProfileVSBenefitsDataResult } from \"Interfaces/UserProfile/IUserProfileVSBenefitsDataResult\";\nimport { IUserProfileVSBenefitsUpdateDataResult } from \"Interfaces/UserProfile/IUserProfileVSBenefitsUpdateDataResult\";\nimport { IUserProfileVSBenefitsUpdateRequest } from \"Interfaces/UserProfile/IUserProfileVSBenefitsUpdateRequest\";\nimport { addDateTimeOffset } from \"Utility/FormatHelper\";\nimport { getDefaultApiTimeOutConfiguration } from \"Utility/Utils\";\n\nimport { getSchoolData } from \"../School/SchoolDataAction\";\nimport {\n  getStateProvince,\n  getStateProvinceSchool,\n  getStateProvinceShipping,\n} from \"../StateProvince/StateProvinceAction\";\nimport {\n  addNewCommentFail,\n  addNewCommentSuccess,\n  claimBenefitFail,\n  claimBenefitSuccess,\n  endUserProfileVSBenefitFail,\n  endUserProfileVSBenefitSuccess,\n  extendUserProfileVSBenefitFail,\n  extendUserProfileVSBenefitSuccess,\n  fetchProgramProfileFail,\n  fetchProgramProfileSuccess,\n  getProfileBenefitsSuccess,\n  loadUserProfileCommentsFail,\n  loadUserProfileCommentsSuccess,\n  loadUserProfileFail,\n  loadUserProfileSuccess,\n  loadUserProfileVSBenefitFail,\n  loadUserProfileVSBenefitSuccess,\n  profileBenefitsFail,\n  provisionUserProfileVSBenefitFail,\n  provisionUserProfileVSBenefitSuccess,\n  searchUserProfilesFail,\n  searchUserProfilesSuccess,\n  updateProgramProfileFailure,\n  updateProgramProfileSuccess,\n  updateUserProfileFail,\n  updateUserProfileSuccess,\n  userProfileDlLoadFail,\n  userProfileDlLoadSuccess,\n  userProfileDlRemoveAllFail,\n  userProfileDlRemoveAllSuccess,\n  userProfileDlRemoveFail,\n  userProfileDlRemoveSuccess,\n  userProfileIsPrivateUpdateFail,\n  userProfileIsPrivateUpdateSuccess,\n  userProfileUpdateBlockShippingFail,\n  userProfileUpdateBlockShippingSuccess,\n  IAddNewComment,\n  IClaimBenefit,\n  IEndUserProfileVSBenefits,\n  IExtendUserProfileVSBenefits,\n  IFetchProgramProfile,\n  IGetProfileBenefits,\n  ILoadUserProfile,\n  ILoadUserProfileByEmail,\n  ILoadUserProfileComments,\n  ILoadUserProfileVSBenefits,\n  IProvisionUserProfileVSBenefits,\n  ISearchUserProfiles,\n  IUpdateProgramProfile,\n  IUpdateUserProfile,\n  IUpdateUserProfileComment,\n  IUserProfileDlLoad,\n  IUserProfileDlRemove,\n  IUserProfileDlRemoveAll,\n  IUserProfileIsPrivateUpdate,\n  IUserProfileUpdateBlockShipping,\n} from \"./UserProfileAction\";\nimport { BenefitNameEnum } from \"Constants/BenefitConstants\";\n\nexport interface IProgramDetailsResult {\n  programProfile: IProgramProfile;\n}\n\nexport interface IProgramDetailsRequest {\n  programProfile: IProgramProfile;\n}\n\nexport type IProgramDetailsDataResult = IProgramDetailsResult | IApiErrorResult;\n\n/**\n * Generator function to async dispatch action\n * @generator\n * @param {ISearchUserProfiles} action To search user profile for given text.\n * @returns {Generator}\n */\nfunction* handleSearchUserProfiles(action: ISearchUserProfiles): Generator {\n  const failedMessage = \"Failed to search the user profiles.\";\n\n  const requestBody = {\n    SearchKey: action.searchText,\n    PageIndex: action.searchPage,\n    PageSize: action.pageSize,\n    applicationStatusList: [],\n    programStatusList: [],\n    milestoneList: [],\n    benefitsProvisionedList: [],\n    cpm: [],\n    countryRegionList: [],\n    stateProvinceList: [],\n    otherProgramMembershipList: [],\n    programStartDate: undefined,\n    programEndDate: undefined,\n  } as unknown as IUserProfilesSearchRequest;\n\n  action.selectedUserProfilesFilterValues.forEach(function (item) {\n    switch (item.fieldName) {\n      case APPLICATION_STATUS:\n        requestBody.applicationStatusList.push(item.value);\n        break;\n      case \"milestone\":\n        requestBody.milestoneList.push(item.value);\n        break;\n      case PROGRAM_STATUS:\n        requestBody.programStatusList.push(item.value);\n        break;\n      case \"provisioned\":\n        requestBody.benefitsProvisionedList.push(item.value);\n        break;\n      case AVAILABLE_CPM_LIST:\n        requestBody.cpm.push(item.value);\n        break;\n      case \"country\":\n        requestBody.countryRegionList.push(item.value);\n        break;\n      case \"regionState\":\n        requestBody.stateProvinceList.push(item.value);\n        break;\n      case \"otherProgramMembership\":\n        requestBody.otherProgramMembershipList.push(item.value);\n        break;\n      case \"programStartDate\":\n        requestBody.programStartDate = new Date(item.value);\n        break;\n      case \"programEndDate\":\n        requestBody.programEndDate = new Date(item.value);\n        break;\n      default:\n        return;\n    }\n  });\n\n  try {\n    const { result, timeout }: IApiResult2<IUserProfilesSearchDataResult> | any = yield race({\n      result: call(userProfileApi.searchUserProfiles, requestBody),\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\n    });\n\n    if (timeout) {\n      yield put(searchUserProfilesFail(GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n\n    const { userProfiles, filteredCount } = result.parsedBody as IUserProfilesSearchResult;\n\n    switch (result.httpStatusCode) {\n      case HttpStatusCode.Ok:\n        // TODO: if null result, response code is 200 and \"userProfile\" returned.\n        // If backend updated to instead return \"userProfiles\" we can clean this up some\n        if (isEmpty(userProfiles)) {\n          yield put(searchUserProfilesSuccess([], 1, defaultListingPageSize, 0));\n        } else {\n          yield put(\n            searchUserProfilesSuccess(\n              userProfiles,\n              action.searchPage,\n              action.pageSize,\n              filteredCount\n            )\n          );\n        }\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(searchUserProfilesFail((result.parsedBody as IApiErrorResult).error.message));\n        break;\n      default:\n        yield put(searchUserProfilesFail(failedMessage));\n        break;\n    }\n  } catch (error) {\n    // TODO: getting bad request and error returned when no users found and falling into this catch\n    yield put(searchUserProfilesFail(error));\n  }\n}\n\n/**\n * Generator function to async dispatch action\n * @generator\n * @param {ILoadUserProfile} action To load user profile by id.\n * @returns {Generator}\n */\nfunction* handleLoadUserProfile(action: ILoadUserProfile): Generator {\n  const failedMessage = \"Failed to load the user profile.\";\n  const { userProfileId } = action;\n\n  try {\n    const { result, timeout }: IApiResult2<IUserProfileDataResult> | any = yield race({\n      result: call(userProfileApi.getUserProfile, userProfileId),\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\n    });\n\n    if (timeout) {\n      yield put(loadUserProfileFail(GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n\n    const userProfile = (result.parsedBody as IUserProfileRequest).userProfile;\n\n    switch (result.httpStatusCode) {\n      case HttpStatusCode.Ok:\n        yield put(loadUserProfileSuccess(userProfile));\n        if (!!userProfile.addressCountryOrRegionName) {\n          yield put(getStateProvince(userProfile.addressCountryOrRegionName));\n        }\n\n        if (!!userProfile.shippingCountryOrRegionName) {\n          yield put(getStateProvinceShipping(userProfile.shippingCountryOrRegionName));\n        }\n\n        // TODO: hard coded index since MSP can only have 1 school.\n        if (!!userProfile.userProfileSchool && userProfile.userProfileSchool.length > 0) {\n          if (!!userProfile.userProfileSchool[0]?.schoolCountryRegionName) {\n            yield put(\n              getStateProvinceSchool(userProfile.userProfileSchool[0].schoolCountryRegionName)\n            );\n            yield put(getSchoolData(userProfile.userProfileSchool[0].schoolCountryRegionName));\n          }\n        }\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(loadUserProfileFail((result.parsedBody as IApiErrorResult).error.message));\n        break;\n      default:\n        yield put(loadUserProfileFail(failedMessage));\n        break;\n    }\n  } catch (error) {\n    yield put(loadUserProfileFail(error));\n  }\n}\n\n/**\n * Generator function to async dispatch action\n * @generator\n * @param {ILoadUserProfileByEmail} action To load user profile by email.\n * @returns {Generator}\n */\nfunction* handleLoadUserProfileByEmail(action: ILoadUserProfileByEmail): Generator {\n  const failedMessage = \"Failed to load the user profile.\";\n  const { email } = action;\n\n  try {\n    const { result, timeout }: IApiResult2<IUserProfileDataResult> | any = yield race({\n      result: call(userProfileApi.getUserProfileByEmail, email),\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\n    });\n\n    if (timeout) {\n      yield put(loadUserProfileFail(GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n\n    const userProfile = (result.parsedBody as IUserProfileRequest).userProfile;\n\n    switch (result.httpStatusCode) {\n      case HttpStatusCode.Ok:\n        yield put(loadUserProfileSuccess(userProfile));\n        if (!!userProfile.addressCountryOrRegionName) {\n          yield put(getStateProvince(userProfile.addressCountryOrRegionName));\n        }\n\n        if (!!userProfile.shippingCountryOrRegionName) {\n          yield put(getStateProvinceShipping(userProfile.shippingCountryOrRegionName));\n        }\n\n        // TODO: hard coded index since MSP can only have 1 school.\n        if (!!userProfile.userProfileSchool && userProfile.userProfileSchool.length > 0) {\n          if (!!userProfile.userProfileSchool[0]?.schoolCountryRegionName) {\n            yield put(\n              getStateProvinceSchool(userProfile.userProfileSchool[0].schoolCountryRegionName)\n            );\n            yield put(getSchoolData(userProfile.userProfileSchool[0].schoolCountryRegionName));\n          }\n        }\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(loadUserProfileFail((result.parsedBody as IApiErrorResult).error.message));\n        break;\n      default:\n        yield put(loadUserProfileFail(failedMessage));\n        break;\n    }\n  } catch (error) {\n    yield put(loadUserProfileFail(error));\n  }\n}\n\n/**\n * Handle calling the api to update a user profile asynchronously.\n * @param {IUpdateUserProfile} action To update user profile.\n * @returns {Generator} the profile actions.\n */\nfunction* handleUpdateUserProfile(action: IUpdateUserProfile): Generator {\n  const failedMessage = \"Failed to update the user profile\";\n  const userProfileToUpdate: IUserProfileRequest = {\n    userProfile: {\n      ...action.userProfile,\n      dateOfBirth: addDateTimeOffset(action.userProfile.dateOfBirth),\n    },\n  };\n  try {\n    const { result, timeout }: IApiResult2<IUserProfileDataResult> | any = yield race({\n      result: call(userProfileApi.updateUserProfile, userProfileToUpdate),\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\n    });\n\n    if (timeout) {\n      yield put(updateUserProfileFail(GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n\n    switch (result.httpStatusCode) {\n      case HttpStatusCode.Ok:\n        yield put(updateUserProfileSuccess((result.parsedBody as IUserProfileRequest).userProfile));\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(updateUserProfileFail((result.parsedBody as IApiErrorResult).error.message));\n        break;\n      default:\n        yield put(updateUserProfileFail(failedMessage));\n        break;\n    }\n  } catch (error) {\n    yield put(updateUserProfileFail(error.toString()));\n  }\n}\n\n/**\n * Handle calling the api to update a user profile asynchronously.\n * @param {IUpdateUserProfile} action To update user profile.\n * @returns {Generator} the profile actions.\n */\nfunction* handleUpdateUserProfileBlockShipping(action: IUserProfileUpdateBlockShipping): Generator {\n  const failedMessage = \"Failed to update the shipping status for this user profile.\";\n\n  const userProfileToUpdate: IUserProfileBlockShippingRequest = {\n    userProfileId: action.userProfileId,\n    blockShipping: action.isShippingBlocked,\n  };\n\n  try {\n    const { result, timeout }: IApiResult2<IUserProfileBlockShippingDataResult> | any = yield race({\n      result: call(userProfileApi.updateUserProfileBlockShipping, userProfileToUpdate),\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\n    });\n\n    if (timeout) {\n      yield put(userProfileUpdateBlockShippingFail(GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n\n    switch (result.httpStatusCode) {\n      case HttpStatusCode.Ok:\n        yield put(userProfileUpdateBlockShippingSuccess(result.parsedBody as number));\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(\n          userProfileUpdateBlockShippingFail((result.parsedBody as IApiErrorResult).error.message)\n        );\n        break;\n      default:\n        yield put(userProfileUpdateBlockShippingFail(failedMessage));\n        break;\n    }\n  } catch (error) {\n    yield put(userProfileUpdateBlockShippingFail(error.toString()));\n  }\n}\n\n/**\n * Generator function to async dispatch action\n * @generator\n * @param {ILoadUserProfileComments} action To load user profile comments.\n * @returns {Generator}\n */\nfunction* handleLoadUserProfileComments(action: ILoadUserProfileComments): Generator {\n  const failedMessage = \"Failed to load the user's profile comments.\";\n  const { userProfileId } = action;\n\n  try {\n    const { result, timeout }: IApiResult2<IUserProfileCommentsDataResult> | any = yield race({\n      result: call(userProfileApi.getUserProfileComments, userProfileId),\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\n    });\n\n    if (timeout) {\n      yield put(loadUserProfileCommentsFail(GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n\n    const userProfileComments =\n      (result.parsedBody as IUserProfileCommentsRequest)?.userProfileComments || [];\n\n    switch (result.httpStatusCode) {\n      case HttpStatusCode.Ok:\n        yield put(loadUserProfileCommentsSuccess(userProfileComments));\n        break;\n      case HttpStatusCode.NoContent:\n        yield put(loadUserProfileCommentsSuccess([]));\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(\n          loadUserProfileCommentsFail((result.parsedBody as IApiErrorResult).error.message)\n        );\n        break;\n      default:\n        yield put(loadUserProfileCommentsFail(failedMessage));\n        break;\n    }\n  } catch (error) {\n    yield put(loadUserProfileCommentsFail(error));\n  }\n}\n\n/**\n * Generator function to async dispatch action\n * @generator\n * @param {IUpdateUserProfileComment} action To update user profile comment.\n * @returns {Generator}\n */\nfunction* handleUpdateUserProfileComment(action: IUpdateUserProfileComment): Generator {\n  const failedMessage = \"Failed to update the user profile comment\";\n  const userProfileCommentToUpdate: IUserProfileCommentRequest = {\n    userProfileComment: action.userProfileComment,\n  };\n  const userProfileId = action.userProfileComment.userProfileId;\n\n  try {\n    const { result, timeout }: IApiResult2<IUserProfileDataResult> | any = yield race({\n      result: call(\n        userProfileApi.updateUserProfileComment,\n        userProfileId,\n        userProfileCommentToUpdate\n      ),\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\n    });\n\n    if (timeout) {\n      yield put(updateUserProfileFail(GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n\n    switch (result.httpStatusCode) {\n      case HttpStatusCode.Ok:\n        yield put(updateUserProfileSuccess((result.parsedBody as IUserProfileRequest).userProfile));\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(updateUserProfileFail((result.parsedBody as IApiErrorResult).error.message));\n        break;\n      default:\n        yield put(updateUserProfileFail(failedMessage));\n        break;\n    }\n  } catch (error) {\n    yield put(updateUserProfileFail(error));\n  }\n}\n\n/**\n * Generator function to async dispatch action\n * TODO: This function gets VsBenefits (as IUserProfileVSBenefit) rather than UserProfileVSBenefits.\n * TODO: This will need to be changed if we need to get more types of benefits than VsBenefits.\n * @generator\n * @param {ILoadUserProfileVSBenefits} action To load user profile benefits.\n * @returns {Generator}\n */\nfunction* handleLoadUserProfileVSBenefits(action: ILoadUserProfileVSBenefits): Generator {\n  const failedMessage = \"Failed to load the user's profile benefits.\";\n  const { userProfileId } = action;\n\n  try {\n    const { result, timeout }: IApiResult2<IUserProfileVSBenefitsDataResult> | any = yield race({\n      result: call(userProfileApi.getUserProfileVSBenefits, userProfileId),\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\n    });\n\n    if (timeout) {\n      yield put(loadUserProfileVSBenefitFail(GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n\n    const userProfileVSBenefit = result.parsedBody as IUserProfileVSBenefit;\n\n    switch (result.httpStatusCode) {\n      case HttpStatusCode.Ok:\n        yield put(loadUserProfileVSBenefitSuccess(userProfileVSBenefit));\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(\n          loadUserProfileVSBenefitFail((result.parsedBody as IApiErrorResult).error.message)\n        );\n        break;\n      default:\n        yield put(loadUserProfileVSBenefitFail(failedMessage));\n        break;\n    }\n  } catch (error) {\n    yield put(loadUserProfileVSBenefitFail(error));\n  }\n}\n\n/**\n * Generator function to async dispatch action\n * @generator\n * @param {IProvisionUserProfileVSBenefits} action To provision a user profile visual studio benefits.\n * @returns {Generator}\n */\nfunction* handleProvisionUserProfileVSBenefits(action: IProvisionUserProfileVSBenefits): Generator {\n  const failedMessage = \"Failed to provision the user's profile benefits.\";\n  const { userProfileId } = action;\n\n  try {\n    const { result, timeout }: IApiResult2<IUserProfileVSBenefitsUpdateDataResult> | any =\n      yield race({\n        result: call(userProfileApi.provisionUserProfileVSBenefits, userProfileId),\n        timeout: delay(getDefaultApiTimeOutConfiguration()),\n      });\n\n    if (timeout) {\n      yield put(provisionUserProfileVSBenefitFail(GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n\n    const userProfileVSBenefit = result.parsedBody as IUserProfileVSBenefitsUpdateRequest;\n\n    switch (result.httpStatusCode) {\n      case HttpStatusCode.Ok:\n        yield put(provisionUserProfileVSBenefitSuccess(userProfileVSBenefit));\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(\n          provisionUserProfileVSBenefitFail((result.parsedBody as IApiErrorResult).error.message)\n        );\n        break;\n      default:\n        yield put(provisionUserProfileVSBenefitFail(failedMessage));\n        break;\n    }\n  } catch (error) {\n    yield put(provisionUserProfileVSBenefitFail(failedMessage));\n  }\n}\n\n/**\n * Generator function to async dispatch action\n * @generator\n * @param {IExtendUserProfileVSBenefits} action To extend a user profile visual studio benefits.\n * @returns {Generator}\n */\nfunction* handleExtendUserProfileVSBenefits(action: IExtendUserProfileVSBenefits): Generator {\n  const failedMessage = \"Failed to extend the user's profile benefits.\";\n  const { userProfileId } = action;\n\n  try {\n    const { result, timeout }: IApiResult2<IUserProfileVSBenefitsUpdateDataResult> | any =\n      yield race({\n        result: call(userProfileApi.extendUserProfileVSBenefits, userProfileId),\n        timeout: delay(getDefaultApiTimeOutConfiguration()),\n      });\n\n    if (timeout) {\n      yield put(extendUserProfileVSBenefitFail(GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n\n    const userProfileVSBenefit = result.parsedBody as IUserProfileVSBenefitsUpdateRequest;\n\n    switch (result.httpStatusCode) {\n      case HttpStatusCode.Ok:\n        yield put(extendUserProfileVSBenefitSuccess(userProfileVSBenefit));\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(\n          extendUserProfileVSBenefitFail((result.parsedBody as IApiErrorResult).error.message)\n        );\n        break;\n      default:\n        yield put(extendUserProfileVSBenefitFail(failedMessage));\n        break;\n    }\n  } catch (error) {\n    yield put(extendUserProfileVSBenefitFail(failedMessage));\n  }\n}\n\n/**\n * Generator function to async dispatch action\n * @generator\n * @param {IEndUserProfileVSBenefits} action To end a user profile visual studio benefits.\n * @returns {Generator}\n */\nfunction* handleEndUserProfileVSBenefits(action: IEndUserProfileVSBenefits): Generator {\n  const failedMessage = \"Failed to end the user's profile benefits.\";\n  const { userProfileId } = action;\n\n  try {\n    const { result, timeout }: IApiResult2<IUserProfileVSBenefitsUpdateDataResult> | any =\n      yield race({\n        result: call(userProfileApi.endUserProfileVSBenefits, userProfileId),\n        timeout: delay(getDefaultApiTimeOutConfiguration()),\n      });\n\n    if (timeout) {\n      yield put(endUserProfileVSBenefitFail(GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n\n    const userProfileVSBenefit = result.parsedBody as IUserProfileVSBenefitsUpdateRequest;\n\n    switch (result.httpStatusCode) {\n      case HttpStatusCode.Ok:\n        yield put(endUserProfileVSBenefitSuccess(userProfileVSBenefit));\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(\n          endUserProfileVSBenefitFail((result.parsedBody as IApiErrorResult).error.message)\n        );\n        break;\n      default:\n        yield put(endUserProfileVSBenefitFail(failedMessage));\n        break;\n    }\n  } catch (error) {\n    yield put(endUserProfileVSBenefitFail(failedMessage));\n  }\n}\n\n/**\n * Generator function to async dispatch action\n * @generator\n * @param {IUpdateProgramProfile} action To update program profile.\n * @returns {Generator}\n */\nfunction* handleUpdateProgramProfile(action: IUpdateProgramProfile): Generator {\n  const failedMessage = \"Failed to update Program Details.\";\n\n  const programDetailsRequest: IProgramDetailsRequest = {\n    programProfile: action.programProfile,\n  };\n\n  try {\n    const { result, timeout }: IApiResult2<IProgramDetailsDataResult> | any = yield race({\n      result: call(userProfileApi.updateProgramProfile, programDetailsRequest),\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\n    });\n\n    if (timeout) {\n      yield put(updateProgramProfileFailure(GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n\n    switch (result.httpStatusCode) {\n      case HttpStatusCode.Ok:\n        const programProfile = (result.parsedBody as IProgramDetailsResult).programProfile;\n        yield put(updateProgramProfileSuccess(programProfile));\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(\n          updateProgramProfileFailure((result.parsedBody as IApiErrorResult).error.message)\n        );\n      default:\n        yield put(\n          updateProgramProfileFailure((result.parsedBody as IApiErrorResult).error.message)\n        );\n    }\n  } catch (error) {\n    yield put(updateProgramProfileFailure(failedMessage));\n  }\n}\n\n/**\n * Generator function to async dispatch action\n * @generator\n * @param {IUpdateProgramProfile} action To claim program profile benefit.\n * @returns {void}\n */\nfunction* handleClaimBenefit(action: IClaimBenefit) {\n  const failedMessage =\n    \"API call failed, please try again and let us know if issue is not resolved.\";\n\n  //TODO: no MLSA benefits yet. Revist when we have them.\n  const benefitApiMap = {\n    [BenefitNameEnum.SwagKit]: userProfileApi.claimUserProfileBenefitSwagkit,\n  };\n\n  try {\n    const apiCall = benefitApiMap[action.benefitType];\n\n    const { result, timeout }: IApiResult2<IClaimBenefitDataResult> | any = yield race({\n      result: call(apiCall, action.userProfileId, action.tenant),\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\n    });\n\n    if (timeout) {\n      yield put(claimBenefitFail(GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n\n    switch (result.httpStatusCode) {\n      case HttpStatusCode.CreatedAt:\n        const requestResult = result.parsedBody as IClaimBenefitResult;\n        if (!requestResult.isSuccess) {\n          yield put(claimBenefitFail(failedMessage));\n        }\n        yield put(claimBenefitSuccess());\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(claimBenefitFail((result.parsedBody as IApiErrorResult).error.message));\n      default:\n        yield put(claimBenefitFail((result.parsedBody as IApiErrorResult).error.message));\n    }\n  } catch (error) {\n    yield put(claimBenefitFail(failedMessage));\n  }\n}\n\nfunction* handleGetProfileBenefits(action: IGetProfileBenefits): Generator {\n  const defaultFailedErrorMessage = \"Failed to get profile benefits.\";\n\n  try {\n    const { result, timeout }: IApiResult2<IProfileBenefitDataResult> | any = yield race({\n      result: call(userProfileApi.getProfileBenefits, action.userProfileId),\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\n    });\n\n    if (timeout) {\n      yield put(profileBenefitsFail(GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n\n    switch (result.httpStatusCode) {\n      case HttpStatusCode.Ok:\n        yield put(getProfileBenefitsSuccess(result.parsedBody as IProfileBenefitResult));\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(profileBenefitsFail((result.parsedBody as IApiErrorResult).error.message));\n        break;\n      default:\n        yield put(profileBenefitsFail(defaultFailedErrorMessage));\n    }\n  } catch (error) {\n    yield put(profileBenefitsFail(defaultFailedErrorMessage));\n  }\n}\n\n/**\n * Generator function to async dispatch action\n * @generator\n * @param {IMVPFetchProgramProfile} action To get Program profile.\n * @returns {void}\n */\nfunction* handleProgramProfileFetch(action: IFetchProgramProfile) {\n  const defaultFailedErrorMessage = \"Failed to fetch Program profile\";\n  const { programProfileId } = action;\n  try {\n    const { result, timeout } = yield race({\n      result: call(userProfileApi.fetchProgramProfile, programProfileId),\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\n    });\n\n    if (timeout) {\n      yield put(fetchProgramProfileFail(GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n\n    const programProfile = result.parsedBody as IProgramProfile;\n\n    switch (result.status) {\n      case HttpStatusCode.Ok:\n        yield put(fetchProgramProfileSuccess(programProfile));\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(fetchProgramProfileFail((result.body as IApiErrorResult).error.message));\n        break;\n      default:\n        yield put(fetchProgramProfileFail(defaultFailedErrorMessage));\n        break;\n    }\n  } catch (error) {\n    yield put(fetchProgramProfileFail(defaultFailedErrorMessage));\n  }\n}\n\n/**\n * Generator function to async dispatch action\n * @generator\n * @param {IAddNewComment} action To add comment.\n * @returns {void}\n */\nfunction* handleAddComment(action: IAddNewComment) {\n  const failedMessage = \"Failed to create the user profile comment\";\n  const userProfileCommentToCreate: INewUserProfileCommentRequest = {\n    userProfileComment: {\n      userProfileId: action.userProfileId,\n      text: action.newComment,\n      createdBy: action.createdBy,\n    },\n  };\n\n  try {\n    const { result, timeout }: IApiResult2<IUserProfileCommentDataResult> | any = yield race({\n      result: call(\n        userProfileApi.createUserProfileComment,\n        action.userProfileId,\n        userProfileCommentToCreate\n      ),\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\n    });\n\n    if (timeout) {\n      yield put(addNewCommentFail(GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n\n    switch (result.status) {\n      case HttpStatusCode.Ok:\n        yield put(addNewCommentSuccess(action.userProfileId));\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(addNewCommentFail((result.parsedBody as IApiErrorResult).error.message));\n        break;\n      default:\n        yield put(addNewCommentFail(failedMessage));\n        break;\n    }\n  } catch (error) {\n    yield put(addNewCommentFail(error));\n  }\n}\n\n/**\n * Generator function to async dispatch action\n * @generator\n * @param {IUserProfileDlLoad} action To load dl.\n * @returns {void}\n */\nfunction* handleDlLoad(action: IUserProfileDlLoad) {\n  const failedMessage = \"Failed to create to load dl for profile\";\n\n  try {\n    const { result, timeout }: IApiResult2<IUserProfileCommentDataResult> | any = yield race({\n      result: call(userProfileApi.loadDistributionLists, action.userProfileId, action.tenant),\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\n    });\n\n    if (timeout) {\n      yield put(userProfileDlLoadFail(GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n\n    const distributionLists = result.parsedBody as IDistributionListsResult;\n\n    switch (result.status) {\n      case HttpStatusCode.Ok:\n        yield put(userProfileDlLoadSuccess(distributionLists.details));\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(userProfileDlLoadFail((result.parsedBody as IApiErrorResult).error.message));\n        break;\n      default:\n        yield put(userProfileDlLoadFail(failedMessage));\n        break;\n    }\n  } catch (error) {\n    yield put(userProfileDlLoadFail(error));\n  }\n}\n\n/**\n * Generator function to async dispatch action\n * @generator\n * @param {IUserProfileDlLoad} action To remove dl.\n * @returns {void}\n */\nfunction* handleDlRemove(action: IUserProfileDlRemove) {\n  const failedMessage = \"Failed to remove the distribution list for the profile.\";\n  try {\n    const { result, timeout }: IApiResult2<IApiEmptyResult> | any = yield race({\n      result: call(\n        userProfileApi.removeDistributionLists,\n        action.dlGroup,\n        action.userEmail,\n        action.tenant\n      ),\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\n    });\n    if (timeout) {\n      yield put(userProfileDlRemoveFail(GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n    switch (result.status) {\n      case HttpStatusCode.Ok:\n        yield put(userProfileDlRemoveSuccess());\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(userProfileDlRemoveFail((result.parsedBody as IApiErrorResult)?.error?.message));\n        break;\n      default:\n        yield put(userProfileDlRemoveFail(failedMessage));\n        break;\n    }\n  } catch (error) {\n    yield put(userProfileDlRemoveFail(error));\n  }\n}\n\n/**\n * Generator function to async dispatch action\n * @generator\n * @param {IUserProfileDlLoad} action To remove dl.\n * @returns {void}\n */\nfunction* handleDlRemoveAll(action: IUserProfileDlRemoveAll) {\n  const failedMessage = \"Failed to remove all dl for profile\";\n\n  try {\n    const { result, timeout }: IApiResult2<IApiEmptyResult> | any = yield race({\n      result: call(userProfileApi.removeAllDistributionLists, action.userProfileId, action.tenant),\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\n    });\n\n    if (timeout) {\n      yield put(userProfileDlRemoveAllFail(GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n\n    switch (result.status) {\n      case HttpStatusCode.Ok:\n        yield put(userProfileDlRemoveAllSuccess());\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(userProfileDlRemoveAllFail((result.parsedBody as IApiErrorResult).error.message));\n        break;\n      default:\n        yield put(userProfileDlRemoveAllFail(failedMessage));\n        break;\n    }\n  } catch (error) {\n    yield put(userProfileDlRemoveAllFail(error));\n  }\n}\n\n/**\n * Generator function to async dispatch action\n * @generator\n * @param {IUserProfileDlLoad} action To remove dl.\n * @returns {void}\n */\nfunction* handleUserProfileIsPrivateUpdate(action: IUserProfileIsPrivateUpdate) {\n  const failedMessage = \"Failed to set the is private flag for profile\";\n\n  try {\n    const { result, timeout }: IApiResult2<IApiEmptyResult> | any = yield race({\n      result: call(\n        userProfileApi.updateUserProfileIsPrivate,\n        action.userProfileId,\n        action.isPrivate\n      ),\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\n    });\n\n    if (timeout) {\n      yield put(userProfileIsPrivateUpdateFail(GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n\n    switch (result.status) {\n      case HttpStatusCode.Ok:\n        yield put(userProfileIsPrivateUpdateSuccess());\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(\n          userProfileIsPrivateUpdateFail((result.parsedBody as IApiErrorResult).error.message)\n        );\n        break;\n      default:\n        yield put(userProfileIsPrivateUpdateFail(failedMessage));\n        break;\n    }\n  } catch (error) {\n    yield put(userProfileIsPrivateUpdateFail(error));\n  }\n}\n\nexport {\n  handleSearchUserProfiles,\n  handleLoadUserProfile,\n  handleLoadUserProfileByEmail,\n  handleUpdateUserProfile,\n  handleUpdateUserProfileBlockShipping,\n  handleLoadUserProfileComments,\n  handleUpdateUserProfileComment,\n  handleLoadUserProfileVSBenefits,\n  handleProvisionUserProfileVSBenefits,\n  handleExtendUserProfileVSBenefits,\n  handleEndUserProfileVSBenefits,\n  handleUpdateProgramProfile,\n  handleClaimBenefit,\n  handleGetProfileBenefits,\n  handleProgramProfileFetch,\n  handleAddComment,\n  handleDlLoad,\n  handleDlRemove,\n  handleDlRemoveAll,\n  handleUserProfileIsPrivateUpdate,\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { IVisualStudioBenefitsDataResult } from \"Interfaces/VisualStudioBenefits/IVisualStudioBenefitsDataResult\";\nimport { IVisualStudioBenefitsRequest } from \"Interfaces/VisualStudioBenefits/IVisualStudioBenefitsRequest\";\n\nimport {\n  VISUAL_STUDIO_BENEFIT_BASE_URL,\n  VISUAL_STUDIO_BENEFIT_DOWNLOAD_URL,\n} from \"../Constants/SagaConstants\";\nimport { IApiResult2 } from \"../Interfaces/IApiResult\";\nimport { post, IHttpResponse } from \"./ApiUtils\";\n\n/**\n * Search all visual studio benefits for the given tenant.\n */\nexport async function searchVisualStudioBenefits(\n  searchRequest: IVisualStudioBenefitsRequest,\n  tenant: string\n): Promise<IHttpResponse<IApiResult2<IVisualStudioBenefitsDataResult>>> {\n  const url = VISUAL_STUDIO_BENEFIT_BASE_URL.replace(\"{tenant}\", tenant) + \"/search\";\n  return await post<IApiResult2<IVisualStudioBenefitsDataResult>>(url, searchRequest, true);\n}\n\n/**\n * Download visual studio benefit requests for a given tenant.\n */\nexport async function downloadRequestsToCsv(\n  tenant: string\n): Promise<IHttpResponse<IApiResult2<string>>> {\n  const url = VISUAL_STUDIO_BENEFIT_DOWNLOAD_URL.replace(\"{tenant}\", tenant.toLocaleLowerCase());\n  return await post<IApiResult2<string>>(url, {}, true, false, {\n    method: \"POST\",\n    body: \"\",\n    headers: { \"Content-Type\": \"application/octet-stream\" },\n  });\n}\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n/* eslint-disable @typescript-eslint/explicit-function-return-type */\n\nimport { call, delay, put, race } from \"redux-saga/effects\";\n\nimport * as BenefitConstants from \"../../Constants/BenefitConstants\";\nimport * as visualStudioBenefitApi from \"../../Services/VisualStudioBenefitApi\";\n\nimport { GENERIC_API_TIMEOUT_ERROR } from \"Constants/ApplicationConstants\";\nimport { HttpStatusCode } from \"Constants/HttpStatusCode\";\nimport { IVisualStudioBenefitsDataResult } from \"Interfaces/VisualStudioBenefits/IVisualStudioBenefitsDataResult\";\nimport { IVisualStudioBenefitsRequest } from \"Interfaces/VisualStudioBenefits/IVisualStudioBenefitsRequest\";\nimport { IVisualStudioBenefitsResult } from \"Interfaces/VisualStudioBenefits/IVisualStudioBenefitsResult\";\nimport { getDefaultApiTimeOutConfiguration } from \"Utility/Utils\";\n\nimport { IApiErrorResult, IApiResult2 } from \"../../Interfaces/IApiResult\";\nimport {\n  downloadRequestsToCSVFail,\n  downloadRequestsToCSVSuccess,\n  searchVisualStudioBenefitsFail,\n  searchVisualStudioBenefitsSuccess,\n  IDownloadRequests,\n  ISearchVisualStudioBenefits,\n} from \"./VisualStudioBenefitAction\";\n\n/**\n * Search all benefits for given text\n * @param {ISearchVisualStudioBenefits} action for searching benefits\n * @returns {void}\n */\nfunction* handleSearchVisualStudioBenefits(action: ISearchVisualStudioBenefits) {\n  const failedMessage = \"Failed to search visual studio benefits.\";\n  const requestBody = {\n    searchKey: action.searchText,\n    pageIndex: action.searchPage,\n    pageSize: action.pageSize,\n    awardPeriodList: [],\n    benefitStatusList: [],\n    expirationStartDate: undefined,\n    expirationEndDate: undefined,\n    tenant: action.tenant,\n  } as unknown as IVisualStudioBenefitsRequest;\n\n  action.selectedBenefitsFilterValues.forEach(function (item) {\n    switch (item.fieldName) {\n      case BenefitConstants.BENEFIT_STATUS:\n        requestBody.benefitStatusList.push(item.value);\n        break;\n      case BenefitConstants.AWARD_PERIOD:\n        requestBody.awardPeriodList.push(item.value);\n        break;\n      case BenefitConstants.EXPIRATION_START_DATE:\n        requestBody.expirationStartDate = new Date(item.value);\n        break;\n      case BenefitConstants.EXPIRATION_END_DATE:\n        requestBody.expirationEndDate = new Date(item.value);\n        break;\n    }\n  });\n\n  try {\n    const { result, timeout }: IApiResult2<IVisualStudioBenefitsDataResult> | any = yield race({\n      result: call(visualStudioBenefitApi.searchVisualStudioBenefits, requestBody, action.tenant),\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\n    });\n\n    if (timeout) {\n      yield put(searchVisualStudioBenefitsFail(GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n\n    const parsedBody = result.parsedBody as IVisualStudioBenefitsResult;\n\n    switch (result.httpStatusCode) {\n      case HttpStatusCode.Ok:\n        yield put(\n          searchVisualStudioBenefitsSuccess(\n            parsedBody.vsBenefits,\n            action.searchPage,\n            action.pageSize,\n            parsedBody.filteredCount\n          )\n        );\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(\n          searchVisualStudioBenefitsFail((result.parsedBody as IApiErrorResult).error.message)\n        );\n        break;\n      default:\n        yield put(searchVisualStudioBenefitsFail(failedMessage));\n        break;\n    }\n  } catch (error) {\n    yield put(searchVisualStudioBenefitsFail(error));\n  }\n}\n\n/**\n * Generator function to async dispatch action\n * @generator\n * @param {IDownloadRequests} action To download visual studio benefit requests.\n * @returns {void}\n */\nfunction* handleDownloadRequestsToCSV(action: IDownloadRequests) {\n  const defaultFailedErrorMessage = \"Failed to download requetss\";\n\n  try {\n    const { result, timeout } = yield race({\n      result: call(visualStudioBenefitApi.downloadRequestsToCsv, action.tenant),\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\n    });\n\n    if (timeout) {\n      yield put(downloadRequestsToCSVFail(GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n\n    const data = yield result.text();\n\n    switch (result.status) {\n      case HttpStatusCode.Ok:\n        yield put(downloadRequestsToCSVSuccess(data));\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(downloadRequestsToCSVFail((result.body as IApiErrorResult).error.message));\n        break;\n      default:\n        yield put(downloadRequestsToCSVFail(defaultFailedErrorMessage));\n        break;\n    }\n  } catch (error) {\n    yield put(downloadRequestsToCSVFail(defaultFailedErrorMessage));\n  }\n}\n\nexport { handleDownloadRequestsToCSV, handleSearchVisualStudioBenefits };\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { EVENT_BASE_URL } from \"../Constants/SagaConstants\";\nimport { IEventDataResult } from \"../Interfaces/Event/IEventDataResult\";\nimport { IEventsDataResult } from \"../Interfaces/Event/IEventsDataResult\";\nimport { IEventsRequest } from \"../Interfaces/Event/IEventsRequest\";\nimport { IEventStatus } from \"../Interfaces/Event/IEventStatus\";\nimport { IEventUpdateStatusDataResult } from \"../Interfaces/Event/IEventUpdateStatusDataResult\";\nimport { IApiResult2 } from \"../Interfaces/IApiResult\";\nimport { get, post, put, IHttpResponse } from \"./ApiUtils\";\n\n/**\n * Get full detail of individual event\n */\nexport async function getEvent(\n  selectedEventId: string\n): Promise<IHttpResponse<IApiResult2<IEventDataResult>>> {\n  return await get<IApiResult2<IEventDataResult>>(EVENT_BASE_URL + selectedEventId, true);\n}\n\n/**\n * Search all events for the given text.\n */\nexport async function searchEvents(\n  searchRequest: IEventsRequest\n): Promise<IHttpResponse<IApiResult2<IEventsDataResult>>> {\n  return await post<IApiResult2<IEventsDataResult>>(EVENT_BASE_URL + \"search\", searchRequest, true);\n}\n\n/**\n * Update an event's status\n */\nexport async function updateEventStatus(\n  eventStatus: IEventStatus\n): Promise<IHttpResponse<IApiResult2<IEventUpdateStatusDataResult>>> {\n  return await put<IApiResult2<IEventUpdateStatusDataResult>>(\n    EVENT_BASE_URL + \"UpdateEventStatus/\",\n    eventStatus,\n    true\n  );\n}\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n/* eslint-disable @typescript-eslint/explicit-function-return-type */\nimport { call, delay, put, race } from \"redux-saga/effects\";\n\nimport * as EventConstants from \"../../Constants/EventConstants\";\nimport * as eventApi from \"../../Services/EventApi\";\n\nimport { GENERIC_API_TIMEOUT_ERROR } from \"../../Constants/ApplicationConstants\";\nimport { HttpStatusCode } from \"../../Constants/HttpStatusCode\";\nimport { IEvent } from \"../../Interfaces/Event/IEvent\";\nimport { IEventDataResult } from \"../../Interfaces/Event/IEventDataResult\";\nimport { IEventsDataResult } from \"../../Interfaces/Event/IEventsDataResult\";\nimport { IEventsRequest } from \"../../Interfaces/Event/IEventsRequest\";\nimport { IEventsResult } from \"../../Interfaces/Event/IEventsResult\";\nimport { IEventUpdateStatusDataResult } from \"../../Interfaces/Event/IEventUpdateStatusDataResult\";\nimport { IApiErrorResult, IApiResult2 } from \"../../Interfaces/IApiResult\";\nimport { getDefaultApiTimeOutConfiguration } from \"../../Utility/Utils\";\nimport {\n  loadEventFail,\n  loadEventSuccess,\n  searchEventsFail,\n  searchEventsSuccess,\n  updateEventStatusFail,\n  updateEventStatusSuccess,\n  ILoadEvent,\n  ISearchEvents,\n  IUpdateEventStatus,\n} from \"./EventAction\";\n\n/**\n * Load an individual events\n * @param {ILoadEvent} action for loading an event\n * @returns {void}\n */\nfunction* handleLoadEvent(action: ILoadEvent) {\n  const failedMessage = \"Failed to load the selected event.\";\n  const { selectedEventId } = action;\n\n  try {\n    const { result, timeout }: IApiResult2<IEventDataResult> | any = yield race({\n      result: call(eventApi.getEvent, selectedEventId),\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\n    });\n\n    if (timeout) {\n      yield put(loadEventFail(GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n\n    const event = result.parsedBody as IEvent;\n\n    switch (result.httpStatusCode) {\n      case HttpStatusCode.Ok:\n        yield put(loadEventSuccess(event));\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(loadEventFail((result.parsedBody as IApiErrorResult).error.message));\n        break;\n      default:\n        yield put(loadEventFail(failedMessage));\n        break;\n    }\n  } catch (error) {\n    yield put(loadEventFail(error));\n  }\n}\n\n/**\n * Search all events for given text\n * @param {ISearchEvents} action for searching events\n * @returns {void}\n */\nfunction* handleSearchEvents(action: ISearchEvents) {\n  const failedMessage = \"Failed to search the events.\";\n  const requestBody = {\n    searchKey: action.searchText,\n    pageIndex: action.searchPage,\n    pageSize: action.pageSize,\n    eventsStatus: [],\n    eventsType: [],\n    eventsFormat: [],\n    eventsCountry: [],\n    eventsState: [],\n    eventsLastReviewedBy: [],\n    eventsStudentMilestone: [],\n    eventsStartDate: undefined,\n    eventsEndDate: undefined,\n  } as unknown as IEventsRequest;\n\n  action.selectedEventsFilterValues.forEach(function (item) {\n    switch (item.fieldName) {\n      case EventConstants.EVENT_STATUS:\n        requestBody.eventsStatus.push(item.value);\n        break;\n      case EventConstants.EVENT_TYPE:\n        requestBody.eventsType.push(item.value);\n        break;\n      case EventConstants.EVENT_FORMAT:\n        requestBody.eventsFormat.push(item.value);\n        break;\n      case EventConstants.EVENT_COUNTRY_REGION:\n        requestBody.eventsCountry.push(item.value);\n        break;\n      case EventConstants.EVENT_STATE_PROVINCE:\n        requestBody.eventsState.push(item.value);\n        break;\n      case EventConstants.EVENT_LAST_REVIEWED_BY:\n        requestBody.eventsLastReviewedBy.push(item.value);\n        break;\n      case EventConstants.EVENT_STUDENT_MILESTONE:\n        requestBody.eventsStudentMilestone.push(item.value);\n        break;\n      case EventConstants.EVENT_START_DATE:\n        requestBody.eventsStartDate = new Date(item.value);\n        break;\n      case EventConstants.EVENT_END_DATE:\n        requestBody.eventsEndDate = new Date(item.value);\n        break;\n    }\n  });\n\n  try {\n    const { result, timeout }: IApiResult2<IEventsDataResult> | any = yield race({\n      result: call(eventApi.searchEvents, requestBody),\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\n    });\n\n    if (timeout) {\n      yield put(searchEventsFail(GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n\n    const parsedBody = result.parsedBody as IEventsResult;\n\n    switch (result.httpStatusCode) {\n      case HttpStatusCode.Ok:\n        yield put(\n          searchEventsSuccess(\n            parsedBody.events,\n            action.searchPage,\n            action.pageSize,\n            parsedBody.filteredCount\n          )\n        );\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(searchEventsFail((result.parsedBody as IApiErrorResult).error.message));\n        break;\n      default:\n        yield put(searchEventsFail(failedMessage));\n        break;\n    }\n  } catch (error) {\n    yield put(searchEventsFail(error));\n  }\n}\n\n/**\n * Update an event status\n * @param {IUpdateEventStatus} action for updating an event's status\n * @returns {void}\n */\nfunction* handleEventStatusUpdate(action: IUpdateEventStatus) {\n  const failedMessage = \"Failed to update the event's status.\";\n  const { eventStatus } = action;\n\n  try {\n    const { result, timeout }: IApiResult2<IEventUpdateStatusDataResult> | any = yield race({\n      result: call(eventApi.updateEventStatus, eventStatus),\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\n    });\n\n    if (timeout) {\n      yield put(updateEventStatusFail(GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n\n    const event = result.parsedBody as IEvent;\n\n    switch (result.httpStatusCode) {\n      case HttpStatusCode.Ok:\n        yield put(updateEventStatusSuccess(event));\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(updateEventStatusFail((result.parsedBody as IApiErrorResult).error.message));\n        break;\n      default:\n        yield put(updateEventStatusFail(failedMessage));\n        break;\n    }\n  } catch (error) {\n    yield put(updateEventStatusFail(error));\n  }\n}\n\nexport { handleLoadEvent, handleSearchEvents, handleEventStatusUpdate };\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport {\n  SUBMIT_CSV_FILE_SA_REGISTRATION_STATUS,\n  UPLOAD_CSV_FILE_SA_REGISTRATION_STATUS,\n  SUBMIT_CSV_FILE_SA_PROGRAM_STATUS,\n  UPLOAD_CSV_FILE_SA_PROGRAM_STATUS,\n} from \"Constants/SagaConstants\";\nimport { IApiResult2 } from \"Interfaces/IApiResult\";\nimport { ISubmitCSVFileRequest, IUploadCSVFileRequest } from \"Interfaces/SA/IUploadCSVFileRequest\";\nimport { IHttpResponse, post } from \"Services/ApiUtils\";\n\n/**\n * Uploads the csv file.\n * @param fileString CsvBase64 file as string.\n */\nexport async function uploadCSVFile(\n  fileString: IUploadCSVFileRequest\n): Promise<IHttpResponse<IApiResult2<string>>> {\n  return await post<IApiResult2<string>>(UPLOAD_CSV_FILE_SA_REGISTRATION_STATUS, fileString, true);\n}\n\n/**\n * Submits the csv file.\n * @param fileId it is expected to hold a textual identifier (likely representing the ID of a CSV file).\n */\nexport async function submitCSVFile(\n  fileId: ISubmitCSVFileRequest\n): Promise<IHttpResponse<IApiResult2<string>>> {\n  return await post<IApiResult2<string>>(SUBMIT_CSV_FILE_SA_REGISTRATION_STATUS, fileId, true);\n}\n\n/**\n * Uploads the csv file for Program Status update\n * @param fileString CsvBase64 file as string.\n */\nexport async function uploadProgramStatusCSVFile(\n  fileString: IUploadCSVFileRequest\n): Promise<IHttpResponse<IApiResult2<string>>> {\n  return await post<IApiResult2<string>>(UPLOAD_CSV_FILE_SA_PROGRAM_STATUS, fileString, true);\n}\n\n/**\n * Submits the csv file Program Status update.\n * @param fileId it is expected to hold a textual identifier (likely representing the ID of a CSV file).\n */\nexport async function submitProgramStatusCSVFile(\n  fileId: ISubmitCSVFileRequest\n): Promise<IHttpResponse<IApiResult2<string>>> {\n  return await post<IApiResult2<string>>(SUBMIT_CSV_FILE_SA_PROGRAM_STATUS, fileId, true);\n}\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\nimport {\n  ISubmitCsvFileStatus,\n  IUploadCSVFileRequest,\n  IUploadCsvFileValidation,\n} from \"Interfaces/SA/IUploadCSVFileRequest\";\nimport { ISubmitCSVFileRequest } from \"Interfaces/SA/ISubmitCSVFileRequest\";\nimport {\n  SA_CSV_FILE_UPLOAD,\n  SA_CSV_FILE_UPLOAD_SUCCESS,\n  SA_CSV_FILE_UPLOAD_FAIL,\n  SA_CSV_FILE_SUBMIT,\n  SA_CSV_FILE_SUBMIT_SUCCESS,\n  SA_CSV_FILE_SUBMIT_FAIL,\n  SA_CSV_FILE_UPLOAD_RESET,\n} from \"./UpdateSARegistrationStatusActionType\";\n\n/**\n * Action to upload csv file.\n * @interface\n */\nexport interface IUploadCsvFile {\n  type: typeof SA_CSV_FILE_UPLOAD;\n  uploadCsv: IUploadCSVFileRequest;\n}\n\n/**\n * Action to upload csv file success.\n * @interface\n */\nexport interface IUploadCsvFileSuccess {\n  type: typeof SA_CSV_FILE_UPLOAD_SUCCESS;\n  validationResponse: IUploadCsvFileValidation;\n}\n\n/**\n * Action to upload csv file fail.\n * @interface\n */\nexport interface IUploadCsvFileFail {\n  type: typeof SA_CSV_FILE_UPLOAD_FAIL;\n  errorMessage: string;\n}\n/**\n * Action to upload csv file fail reset.\n * @interface\n */\nexport interface IUploadCsvFileReset {\n  type: typeof SA_CSV_FILE_UPLOAD_RESET;\n}\n\n/**\n * Action to submit csv file.\n * @interface\n */\nexport interface ISubmitCsvFile {\n  type: typeof SA_CSV_FILE_SUBMIT;\n  fileId: ISubmitCSVFileRequest;\n}\n/**\n * Action to submit csv file success.\n * @interface\n */\nexport interface ISubmitCsvFileSuccess {\n  type: typeof SA_CSV_FILE_SUBMIT_SUCCESS;\n  submitResponse: ISubmitCsvFileStatus;\n}\n/**\n * Action to submit csv file fail.\n * @interface\n */\nexport interface ISubmitCsvFileFail {\n  type: typeof SA_CSV_FILE_SUBMIT_FAIL;\n  errorMessage: string;\n}\n\n/**\n * Action creator for SA_CSV_FILE_UPLOAD.\n */\nexport function uploadCsvFile(uploadCsv: IUploadCSVFileRequest): IUploadCsvFile {\n  return {\n    type: SA_CSV_FILE_UPLOAD,\n    uploadCsv,\n  };\n}\n/**\n * Action creator for SA_CSV_FILE_UPLOAD_SUCCESS.\n */\nexport function uploadCsvFileSuccess(\n  validationResponse: IUploadCsvFileValidation\n): IUploadCsvFileSuccess {\n  return {\n    type: SA_CSV_FILE_UPLOAD_SUCCESS,\n    validationResponse,\n  };\n}\n\n/**\n * Action creator for SA_CSV_FILE_UPLOAD_SUCCESS.\n * @param validationResponse\n * @returns Response Object.\n */\nexport function uploadCsvFileBadRequest(\n  validationResponse: IUploadCsvFileValidation\n): IUploadCsvFileSuccess {\n  return {\n    type: SA_CSV_FILE_UPLOAD_SUCCESS,\n    validationResponse,\n  };\n}\n\n/**\n * Action creator for SA_CSV_FILE_UPLOAD_FAIL.\n * @param errorMessage The error message.\n */\nexport function uploadCsvFileFail(errorMessage: string): IUploadCsvFileFail {\n  return {\n    type: SA_CSV_FILE_UPLOAD_FAIL,\n    errorMessage,\n  };\n}\n\n/**\n * Action creator for SA_CSV_FILE_UPLOAD_RESET.\n * @param errorMessage The error message.\n */\nexport function uploadCsvFileReset(): IUploadCsvFileReset {\n  return {\n    type: SA_CSV_FILE_UPLOAD_RESET,\n  };\n}\n\n/**\n * Action creator for SA_CSV_FILE_SUBMIT.\n */\nexport function submitCsvFile(fileId: ISubmitCSVFileRequest): ISubmitCsvFile {\n  return {\n    type: SA_CSV_FILE_SUBMIT,\n    fileId,\n  };\n}\n/**\n * Action creator for SA_CSV_FILE_SUBMIT_SUCCESS.\n */\nexport function submitCsvFileSuccess(submitResponse: ISubmitCsvFileStatus): ISubmitCsvFileSuccess {\n  return {\n    type: SA_CSV_FILE_SUBMIT_SUCCESS,\n    submitResponse,\n  };\n}\n\n/**\n * Action creator for SA_CSV_FILE_SUBMIT_FAIL.\n * @param errorMessage The error message.\n */\nexport function submitCsvFileFail(errorMessage: string): ISubmitCsvFileFail {\n  return {\n    type: SA_CSV_FILE_SUBMIT_FAIL,\n    errorMessage,\n  };\n}\nexport type UpdateSARegistrationActionTypes =\n  | IUploadCsvFile\n  | IUploadCsvFileSuccess\n  | IUploadCsvFileFail\n  | IUploadCsvFileReset\n  | ISubmitCsvFile\n  | ISubmitCsvFileSuccess\n  | ISubmitCsvFileFail;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { call, delay, put, race } from \"redux-saga/effects\";\nimport * as sAApi from \"Services/SA/SAApi\";\nimport {\n  uploadCsvFileSuccess,\n  uploadCsvFileFail,\n  IUploadCsvFile,\n  ISubmitCsvFile,\n  submitCsvFileFail,\n  submitCsvFileSuccess,\n  uploadCsvFileBadRequest,\n} from \"./UpdateSARegistrationStatusAction\";\nimport { IApiErrorResult, IApiResult2 } from \"Interfaces/IApiResult\";\nimport { HttpStatusCode } from \"Constants/HttpStatusCode\";\nimport { IUploadCSVFileDataRequest } from \"Interfaces/SA/IUploadCSVFileDataRequest\";\nimport { getDefaultApiTimeOutConfiguration } from \"Utility/Utils\";\nimport { GENERIC_API_TIMEOUT_ERROR } from \"Constants/ApplicationConstants\";\nimport { ISubmitCSVFileDataRequest } from \"Interfaces/SA/ISubmitCSVFileDataRequest\";\n\n/**\n * Handle calling the api to upload user profile.\n * @param {IUploadCsvFile} action the Update csv file action.\n * @returns {Generator} the profile actions.\n */\nfunction* handleCsvFileUpload(action: IUploadCsvFile): Generator {\n  const failedMessage = \"Failed to upload the csv file, Please try again.\";\n\n  try {\n    const { result, timeout }: IApiResult2<IUploadCSVFileDataRequest> | any = yield race({\n      result: call(sAApi.uploadCSVFile, action.uploadCsv),\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\n    });\n\n    if (timeout) {\n      yield put(uploadCsvFileFail(GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n\n    switch (result.httpStatusCode) {\n      case HttpStatusCode.Ok:\n        yield put(uploadCsvFileSuccess(result.parsedBody));\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(uploadCsvFileBadRequest(result.parsedBody));\n        break;\n      default:\n        yield put(uploadCsvFileFail(failedMessage));\n    }\n  } catch (error) {\n    yield put(uploadCsvFileFail(failedMessage));\n  }\n}\n\n/**\n * Handle calling the api to submit csv file.\n * @param {ISubmitCsvFile} action the Update csv file action.\n * @returns {Generator} the profile actions.\n */\nfunction* handleCsvFileSubmit(action: ISubmitCsvFile): Generator {\n  const failedMessage = \"Failed to upload the csv file, Please try again.\";\n\n  try {\n    const { result, timeout }: IApiResult2<ISubmitCSVFileDataRequest> | any = yield race({\n      result: call(sAApi.submitCSVFile, action.fileId),\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\n    });\n\n    if (timeout) {\n      yield put(submitCsvFileFail(GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n\n    switch (result.httpStatusCode) {\n      case HttpStatusCode.Ok:\n        yield put(submitCsvFileSuccess(result.parsedBody));\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(submitCsvFileFail(failedMessage));\n        break;\n      default:\n        yield put(submitCsvFileFail(failedMessage));\n    }\n  } catch (error) {\n    yield put(submitCsvFileFail(failedMessage));\n  }\n}\n\nexport { handleCsvFileUpload, handleCsvFileSubmit };\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\nimport {\n  ISubmitCsvFileStatus,\n  IUploadCSVFileRequest,\n  IUploadCsvFileValidation,\n} from \"Interfaces/SA/IUploadCSVFileRequest\";\nimport { ISubmitCSVFileRequest } from \"Interfaces/SA/ISubmitCSVFileRequest\";\nimport {\n  SA_PROGRAM_CSV_FILE_UPLOAD,\n  SA_PROGRAM_CSV_FILE_UPLOAD_SUCCESS,\n  SA_PROGRAM_CSV_FILE_UPLOAD_FAIL,\n  SA_PROGRAM_CSV_FILE_SUBMIT,\n  SA_PROGRAM_CSV_FILE_SUBMIT_SUCCESS,\n  SA_PROGRAM_CSV_FILE_SUBMIT_FAIL,\n  SA_PROGRAM_CSV_FILE_UPLOAD_RESET,\n  SA_PROGRAM_CSV_FILE_UPLOAD_BAD_REQUEST,\n} from \"./UpdateSAProgramStatusActionType\";\n\n/**\n * Action to upload csv file.\n * @interface\n */\nexport interface IUploadCsvFile {\n  type: typeof SA_PROGRAM_CSV_FILE_UPLOAD;\n  uploadCsv: IUploadCSVFileRequest;\n}\n\n/**\n * Action to upload csv file success.\n * @interface\n */\nexport interface IUploadCsvFileSuccess {\n  type: typeof SA_PROGRAM_CSV_FILE_UPLOAD_SUCCESS;\n  validationResponse: IUploadCsvFileValidation;\n}\n\n/**\n * Action to upload csv file bad request.\n * @interface\n */\nexport interface IUploadCsvFileBadRequest {\n  type: typeof SA_PROGRAM_CSV_FILE_UPLOAD_BAD_REQUEST;\n  validationResponse: IUploadCsvFileValidation;\n}\n\n/**\n * Action to upload csv file fail.\n * @interface\n */\nexport interface IUploadCsvFileFail {\n  type: typeof SA_PROGRAM_CSV_FILE_UPLOAD_FAIL;\n  errorMessage: string;\n}\n/**\n * Action to upload csv file fail reset.\n * @interface\n */\nexport interface IUploadCsvFileReset {\n  type: typeof SA_PROGRAM_CSV_FILE_UPLOAD_RESET;\n}\n\n/**\n * Action to submit csv file.\n * @interface\n */\nexport interface ISubmitCsvFile {\n  type: typeof SA_PROGRAM_CSV_FILE_SUBMIT;\n  fileId: ISubmitCSVFileRequest;\n}\n/**\n * Action to submit csv file success.\n * @interface\n */\nexport interface ISubmitCsvFileSuccess {\n  type: typeof SA_PROGRAM_CSV_FILE_SUBMIT_SUCCESS;\n  submitResponse: ISubmitCsvFileStatus;\n}\n/**\n * Action to submit csv file fail.\n * @interface\n */\nexport interface ISubmitCsvFileFail {\n  type: typeof SA_PROGRAM_CSV_FILE_SUBMIT_FAIL;\n  errorMessage: string;\n}\n\n/**\n * Action creator for SA_CSV_FILE_UPLOAD.\n */\nexport function uploadCsvFile(uploadCsv: IUploadCSVFileRequest): IUploadCsvFile {\n  return {\n    type: SA_PROGRAM_CSV_FILE_UPLOAD,\n    uploadCsv,\n  };\n}\n/**\n * Action creator for SA_PROGRAM_CSV_FILE_UPLOAD_SUCCESS.\n */\nexport function uploadCsvFileSuccess(\n  validationResponse: IUploadCsvFileValidation\n): IUploadCsvFileSuccess {\n  return {\n    type: SA_PROGRAM_CSV_FILE_UPLOAD_SUCCESS,\n    validationResponse,\n  };\n}\n\n/**\n * Action creator for SA_PROGRAM_CSV_FILE_UPLOAD_BAD_REQUEST.\n * @param validationResponse\n * @returns Response Object.\n */\nexport function uploadCsvFileBadRequest(\n  validationResponse: IUploadCsvFileValidation\n): IUploadCsvFileBadRequest {\n  return {\n    type: SA_PROGRAM_CSV_FILE_UPLOAD_BAD_REQUEST,\n    validationResponse,\n  };\n}\n\n/**\n * Action creator for SA_PROGRAM_CSV_FILE_UPLOAD_FAIL.\n * @param errorMessage The error message.\n */\nexport function uploadCsvFileFail(errorMessage: string): IUploadCsvFileFail {\n  return {\n    type: SA_PROGRAM_CSV_FILE_UPLOAD_FAIL,\n    errorMessage,\n  };\n}\n\n/**\n * Action creator for SA_PROGRAM_CSV_FILE_UPLOAD_RESET.\n * @param errorMessage The error message.\n */\nexport function uploadCsvFileReset(): IUploadCsvFileReset {\n  return {\n    type: SA_PROGRAM_CSV_FILE_UPLOAD_RESET,\n  };\n}\n\n/**\n * Action creator for SA_PROGRAM_CSV_FILE_SUBMIT.\n */\nexport function submitCsvFile(fileId: ISubmitCSVFileRequest): ISubmitCsvFile {\n  return {\n    type: SA_PROGRAM_CSV_FILE_SUBMIT,\n    fileId,\n  };\n}\n/**\n * Action creator for SA_PROGRAM_CSV_FILE_SUBMIT_SUCCESS.\n */\nexport function submitCsvFileSuccess(submitResponse: ISubmitCsvFileStatus): ISubmitCsvFileSuccess {\n  return {\n    type: SA_PROGRAM_CSV_FILE_SUBMIT_SUCCESS,\n    submitResponse,\n  };\n}\n\n/**\n * Action creator for SA_PROGRAM_CSV_FILE_SUBMIT_FAIL.\n * @param errorMessage The error message.\n */\nexport function submitCsvFileFail(errorMessage: string): ISubmitCsvFileFail {\n  return {\n    type: SA_PROGRAM_CSV_FILE_SUBMIT_FAIL,\n    errorMessage,\n  };\n}\nexport type UpdateSAProgramActionTypes =\n  | IUploadCsvFile\n  | IUploadCsvFileSuccess\n  | IUploadCsvFileBadRequest\n  | IUploadCsvFileFail\n  | IUploadCsvFileReset\n  | ISubmitCsvFile\n  | ISubmitCsvFileSuccess\n  | ISubmitCsvFileFail;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { call, delay, put, race } from \"redux-saga/effects\";\nimport * as sAApi from \"Services/SA/SAApi\";\nimport {\n  uploadCsvFileSuccess,\n  uploadCsvFileFail,\n  IUploadCsvFile,\n  ISubmitCsvFile,\n  submitCsvFileFail,\n  submitCsvFileSuccess,\n  uploadCsvFileBadRequest,\n} from \"./UpdateSAProgramStatusAction\";\nimport { IApiErrorResult, IApiResult2 } from \"Interfaces/IApiResult\";\nimport { HttpStatusCode } from \"Constants/HttpStatusCode\";\nimport { IUploadCSVFileDataRequest } from \"Interfaces/SA/IUploadCSVFileDataRequest\";\nimport { getDefaultApiTimeOutConfiguration } from \"Utility/Utils\";\nimport { GENERIC_API_TIMEOUT_ERROR } from \"Constants/ApplicationConstants\";\nimport { ISubmitCSVFileDataRequest } from \"Interfaces/SA/ISubmitCSVFileDataRequest\";\n\n/**\n * Handle calling the api to upload user profile.\n * @param {IUploadCsvFile} action the Update csv file action.\n * @returns {Generator} the profile actions.\n */\nfunction* handleProgramCsvFileUpload(action: IUploadCsvFile): Generator {\n  const failedMessage = \"Failed to upload the csv file, Please try again.\";\n\n  try {\n    const { result, timeout }: IApiResult2<IUploadCSVFileDataRequest> | any = yield race({\n      result: call(sAApi.uploadProgramStatusCSVFile, action.uploadCsv),\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\n    });\n\n    if (timeout) {\n      yield put(uploadCsvFileFail(GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n\n    switch (result.httpStatusCode) {\n      case HttpStatusCode.Ok:\n        yield put(uploadCsvFileSuccess(result.parsedBody));\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(uploadCsvFileBadRequest(result.parsedBody));\n        break;\n      default:\n        yield put(uploadCsvFileFail(failedMessage));\n    }\n  } catch (error) {\n    yield put(uploadCsvFileFail(failedMessage));\n  }\n}\n\n/**\n * Handle calling the api to submit csv file.\n * @param {ISubmitCsvFile} action the Update csv file action.\n * @returns {Generator} the profile actions.\n */\nfunction* handleProgramCsvFileSubmit(action: ISubmitCsvFile): Generator {\n  const failedMessage = \"Failed to upload the csv file, Please try again.\";\n\n  try {\n    const { result, timeout }: IApiResult2<ISubmitCSVFileDataRequest> | any = yield race({\n      result: call(sAApi.submitProgramStatusCSVFile, action.fileId),\n      timeout: delay(getDefaultApiTimeOutConfiguration()),\n    });\n\n    if (timeout) {\n      yield put(submitCsvFileFail(GENERIC_API_TIMEOUT_ERROR));\n      return;\n    }\n\n    switch (result.httpStatusCode) {\n      case HttpStatusCode.Ok:\n        yield put(submitCsvFileSuccess(result.parsedBody));\n        break;\n      case HttpStatusCode.BadRequest:\n        yield put(submitCsvFileFail(failedMessage));\n        break;\n      default:\n        yield put(submitCsvFileFail(failedMessage));\n    }\n  } catch (error) {\n    yield put(submitCsvFileFail(failedMessage));\n  }\n}\n\nexport { handleProgramCsvFileUpload, handleProgramCsvFileSubmit };\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { all, takeEvery } from \"redux-saga/effects\";\n\nimport {\n  APPLICATION_LOAD,\n  APPLICATIONS_SEARCH,\n  ASSIGN_APPLICATION,\n  CAPACITY_DATA_LOAD,\n  COUNTRYDATA_LOAD,\n  CREATE_USER,\n  DEMOGRAPHICS_FILTER,\n  DOWNLOAD_APPLICATIONS_TO_CSV,\n  EVENT_LOAD,\n  EVENTS_SEARCH,\n  FLAG_APPLICATION,\n  GET_ASSIGN_APPLICATION,\n  PROGRAM_LANGUAGE_LOAD,\n  REGIONDATA_LOAD,\n  SCHOOLDATA_LOAD,\n  SCORE_APPLICATION,\n  SOCIALNETWORKDATA_LOAD,\n  STATEPROVINCEDATA_LOAD,\n  STATEPROVINCESCHOOL_LOAD,\n  STATEPROVINCESHIPPING_LOAD,\n  UPDATE_EVENT_STATUS,\n  UPDATE_USER_STATUS,\n  USER_ROLE_CREATE,\n  USER_ROLE_DELETE,\n  USER_ROLE_UPDATE,\n  USER_ROLES_LOAD,\n  USERPROFILE_ADD_COMMENT,\n  USERPROFILE_CLAIM_BENEFIT,\n  USERPROFILE_DL_LOAD,\n  USERPROFILE_DL_REMOVE,\n  USERPROFILE_DL_REMOVE_ALL,\n  USERPROFILE_END_VSBENEFITS,\n  USERPROFILE_EXTEND_VSBENEFITS,\n  USERPROFILE_FETCH_PROGRAM_PROFILE,\n  USERPROFILE_GET_PROFILE_BENEFITS,\n  USERPROFILE_LOAD,\n  USERPROFILE_LOAD_BY_EMAIL,\n  USERPROFILE_LOAD_COMMENTS,\n  USERPROFILE_LOAD_VSBENEFITS,\n  USERPROFILE_PROVISION_VSBENEFITS,\n  USERPROFILE_UPDATE,\n  USERPROFILE_UPDATE_BLOCK_SHIPPING,\n  USERPROFILE_UPDATE_COMMENT,\n  USERPROFILE_UPDATE_IS_PRIVATE,\n  USERPROFILE_UPDATE_PROGRAM_PROFILE,\n  USERPROFILES_SEARCH,\n  USERS_SEARCH,\n} from \"Constants/ActionTypes\";\nimport {\n  handleCreateUser,\n  handleCreateUserRole,\n  handleDeleteUserRole,\n  handleLoadUserRoles,\n  handleSearchAccessUsers,\n  handleUpdateUserRole,\n  handleUpdateUserStatus,\n} from \"Dataflows/AccessControl/AccessControlSaga\";\nimport { ACTIVITY_TYPE_EVENT_TYPE_DATA_LOAD } from \"Dataflows/ActivityEventTypes/ActivityEventTypesActionTypes\";\nimport { handleLoadActivityEventTypesResults } from \"Dataflows/ActivityEventTypes/ActivityEventTypesSaga\";\nimport {\n  handleAssignApplication,\n  handleDownloadApplicationsToCSV,\n  handleFlagApplication,\n  handleLoadApplication,\n  handleLoadAssignApplication,\n  handleScoreApplication,\n  handleSearchApplications,\n} from \"Dataflows/Application/ApplicationSaga\";\nimport {\n  GET_ACTIVITY_EVENT_BY_ID,\n  GET_ADDITIONAL_ACTIVITIES_EVENTS_BY_SELECTED_USERPROFILE_ID,\n  GET_APPLICATION_FLAGS_BY_SELECTED_APPLICATION_ID,\n  GET_APPLICATION_QUESTIONS_BY_SELECTED_APPLICATION_ID,\n  GET_HIGHLIGHTED_ACTIVITIES_EVENTS_BY_SELECTED_APPLICATION_ID,\n  GET_USER_PROFILE_BY_SELECTED_APPLICATION_ID,\n  UPDATE_APPLICATION_STATUSES_AND_REMOVE_FLAGS,\n  UPDATE_APPLICATION_TECHNOLOGY_AREA_AND_RESET_SCORES,\n} from \"Dataflows/ApplicationDetails/ApplicationDetailsActionTypes\";\nimport {\n  handleActivityEventFetchById,\n  handleAdditionalActivitiesEventsFetchByUserprofileId,\n  handleApplicationQuestionsFetchByApplicationId,\n  handleFetchApplicationFlagsByApplicationId,\n  handleHighlightedActivitiesEventsFetchByApplicationId,\n  handleUpdateApplicationStatusesAndRemoveFlags,\n  handleUpdateApplicationTechnologyAreaAndResetScores,\n  handleUserProfileFetchByApplicationId,\n} from \"Dataflows/ApplicationDetails/ApplicationDetailsSaga\";\nimport { AWARD_PERIOD_LOAD } from \"Dataflows/AwardPeriod/AwardPeriodActionTypes\";\nimport { handleLoadAwardPeriods } from \"Dataflows/AwardPeriod/AwardPeriodSaga\";\nimport { AWARD_KIT_SKU_LOAD } from \"Dataflows/AwardKitSku/AwardKitSkuActionTypes\";\nimport { handleLoadAwardKitSku } from \"Dataflows/AwardKitSku/AwardKitSkuSaga\";\nimport {\n  AZURE_BENEFIT_REQUEST_APPROVE_OR_DECLINE,\n  AZURE_BENEFIT_REQUESTS_SEARCH,\n  GET_AZURE_BENEFIT_REQUEST_DETAILS,\n} from \"Dataflows/AzureBenefitRequests/AzureBenefitRequestsActionTypes\";\nimport {\n  handleApproveOrDenyAzureBenefitRequest,\n  handleGetAzureBenefitRequestDetails,\n  handleSearchAzureBenefitRequests,\n} from \"Dataflows/AzureBenefitRequests/AzureBenefitRequestsSaga\";\nimport { BENEFITS_SEARCH } from \"Dataflows/Benefit/BenefitActionTypes\";\nimport { handleSearchBenefits } from \"Dataflows/Benefit/BenefitSaga\";\nimport { CL_REGION_LOAD, GEO_DATA_LOAD } from \"Dataflows/ClRegion/ClRegionActionTypes\";\nimport { handleLoadClRegions, handleLoadGeoData } from \"Dataflows/ClRegion/ClRegionsSaga\";\nimport { COMMON_DATA_LOAD } from \"Dataflows/CommonData/CommonDataActionTypes\";\nimport { handleLoadCommonData } from \"Dataflows/CommonData/CommonDataSaga\";\nimport { handleLoadCountryRegions } from \"Dataflows/CountryRegion/CountryRegionSaga\";\nimport { handleCapData, handleFilterDemographics } from \"Dataflows/Demographics/DemographicsSaga\";\nimport {\n  ADD_MICROSOFT_MEMBER_TO_DL,\n  APPROVE_OR_DECLINE_DISTRIBUTION_LIST_JOIN_REQUEST,\n  DISTRIBUTION_LISTS_SEARCH,\n  FETCH_DISTRIBUTION_LISTS_BY_TENANT_REQUEST,\n  FETCH_MICROSOFT_MEMBERS_FOR_DL,\n  REMOVE_MICROSOFT_MEMBER_FROM_DL,\n} from \"Dataflows/DistributionLists/DistributionListsActionTypes\";\nimport {\n  handleAddMicrosoftMemberToDL,\n  handleApproveOrDeclineJoinRequest,\n  handleFetchDistributionListByTenantRequest,\n  handleFetchMicrosoftMembersForDL,\n  handleRemoveMicrosoftMemberFromDL,\n  handleSearchDistributionLists,\n} from \"Dataflows/DistributionLists/DistributionListsSaga\";\nimport { INDUSTRY_FOCUS_LOAD } from \"Dataflows/IndustryFocus/IndustryFocusActionTypes\";\nimport { handleLoadIndustryFocuses } from \"Dataflows/IndustryFocus/IndustryFocusSaga\";\nimport { M365_COPILOT_BENEFITS_SEARCH } from \"Dataflows/M365CopilotBenefit/M365CopilotBenefitActionType\";\nimport { handleSearchM365CopilotBenefits } from \"Dataflows/M365CopilotBenefit/M365CopilotBenefitSaga\";\nimport {\n  MVP_ADD_AZURE_BENEFIT_DETAIL,\n  MVP_ADD_COMMENT,\n  MVP_CLAIM_BENEFIT,\n  MVP_EXTEND_AZURE_BENEFIT_CREDIT,\n  MVP_FETCH_COMMENTS,\n  MVP_FETCH_PROFILE_BENEFITS,\n  MVP_FETCH_PROGRAM_PROFILE,\n  MVP_FETCH_RETIRE_PROFILE,\n  MVP_FETCH_USER_PROFILE,\n  MVP_GET_M365_BENEFIT_DETAIL,\n  MVP_RETIRE_PROFILE,\n  MVP_UPDATE_M365_BENEFIT_DETAIL,\n  MVP_GET_MS365_BENEFIT_DETAIL,\n  MVP_UPDATE_MS365_BENEFIT_DETAIL,\n  MVP_UPDATE_PROGRAM_PROFILE,\n  MVP_USER_PROFILES_SEARCH,\n  MVP_USERPROFILE_UPDATE_ANNUAL_EXCEPTION,\n  MVP_USERPROFILE_UPDATE_BLOCK_SHIPPING,\n  MVP_USERPROFILE_UPDATE_IS_PRIVATE,\n  MVP_USERPROFILE_UPDATE_PRIMARY_EMAIL,\n} from \"Dataflows/MVP/MVPActionTypes\";\nimport {\n  handleAddAzureBenefit,\n  handleMVPAddComment,\n  handleMVPClaimBenefit,\n  handleMVPCommentsFetch,\n  handleMVPExtendAzureBenefitCredit,\n  handleMVPFetchProfileBenefits,\n  handleMVPGetM365BenefitDetail,\n  handleMVPGetMS365BenefitDetail,\n  handleMVPProgramProfileFetch,\n  handleMVPRetireProfile,\n  handleMVPRetireProfileFetch,\n  handleMVPSearchUserProfiles,\n  handleMVPUpdateM365BenefitDetail,\n  handleMVPUpdateMS365BenefitDetail,\n  handleMVPUpdateProgramProfile,\n  handleMVPUpdateUserProfileBlockShipping,\n  handleMVPUserProfileAnnualExceptionUpdate,\n  handleMVPUserProfileFetch,\n  handleMVPUserProfileIsPrivateUpdate,\n  handleMVPUserProfilePrimaryEmailUpdate,\n} from \"Dataflows/MVP/MVPSaga\";\nimport { handleLoadProgramLanguage } from \"Dataflows/ProgramLanguage/ProgramLanguageSaga\";\nimport {\n  RD_ADD_AZURE_BENEFIT_DETAIL,\n  RD_ADD_USER_PROFILE_COMMENT,\n  RD_DOWNLOAD_TO_CSV,\n  RD_EXTEND_AZURE_BENEFIT_CREDIT,\n  RD_FETCH_PROGRAM_PROFILE,\n  RD_FETCH_USER_PROFILE,\n  RD_FETCH_USER_PROFILE_COMMENTS,\n  RD_GET_M365_BENEFIT_DETAIL,\n  RD_GET_PROFILE_BENEFITS,\n  RD_UPDATE_M365_BENEFIT_DETAIL,\n  RD_UPDATE_PROGRAM_PROFILE,\n  RD_USER_PROFILE_CLAIM_BENEFIT,\n  RD_USER_PROFILE_UPDATE_PRIMARY_EMAIL,\n  RD_USER_PROFILES_SEARCH,\n  RD_USERPROFILE_UPDATE_IS_PRIVATE,\n  RD_GET_MS365_BENEFIT_DETAIL,\n  RD_UPDATE_MS365_BENEFIT_DETAIL,\n} from \"Dataflows/RD/UserProfile/RDUserProfileActionTypes\";\nimport {\n  handleRDAddUserProfileComment,\n  handleRDClaimBenefit,\n  handleRDExtendAzureBenefitCredit,\n  handleRDGetM365BenefitDetail,\n  handleRDGetMS365BenefitDetail,\n  handleRDGetProfileBenefits,\n  handleRDProgramProfileFetch,\n  handleRDSearchUserProfiles,\n  handleRDUpdateM365BenefitDetail,\n  handleRDUpdateMS365BenefitDetail,\n  handleRDUpdateProgramProfile,\n  handleRDUserProfileCommentsFetch,\n  handleRDUserProfileDownload,\n  handleRDUserProfileFetch,\n  handleRDUserProfileIsPrivateUpdate,\n  handleRDUserProfilePrimaryEmailUpdate,\n  handleRDAddAzureBenefit,\n} from \"Dataflows/RD/UserProfile/RDUserProfileSaga\";\nimport { handleLoadRegions } from \"Dataflows/Region/RegionSaga\";\nimport { handleLoadSchools } from \"Dataflows/School/SchoolSaga\";\nimport { handleLoadSocialNetworks } from \"Dataflows/SocialNetwork/SocialNetworkSaga\";\nimport {\n  handleLoadStateProvinces,\n  handleLoadStateProvincesSchool,\n  handleLoadStateProvincesShipping,\n} from \"Dataflows/StateProvince/StateProvinceSaga\";\nimport { handleLoadTechnicalExpertise } from \"Dataflows/TechnicalExpertise/TechnicalExpertiseSaga\";\nimport { TECHNICAL_EXPERTISE_LOAD } from \"Dataflows/TechnicalExpertise/TechnicalExpertiseTypes\";\nimport { handleLoadTechAreaResults } from \"Dataflows/TechnologyArea/TechnologyAreaSaga\";\nimport { TECHAREADATA_LOAD } from \"Dataflows/TechnologyArea/TechnologyAreaTypes\";\nimport {\n  handleAddComment,\n  handleClaimBenefit,\n  handleDlLoad,\n  handleDlRemove,\n  handleDlRemoveAll,\n  handleEndUserProfileVSBenefits,\n  handleExtendUserProfileVSBenefits,\n  handleGetProfileBenefits,\n  handleLoadUserProfile,\n  handleLoadUserProfileByEmail,\n  handleLoadUserProfileComments,\n  handleLoadUserProfileVSBenefits,\n  handleProgramProfileFetch,\n  handleProvisionUserProfileVSBenefits,\n  handleSearchUserProfiles,\n  handleUpdateProgramProfile,\n  handleUpdateUserProfile,\n  handleUpdateUserProfileBlockShipping,\n  handleUpdateUserProfileComment,\n  handleUserProfileIsPrivateUpdate,\n} from \"Dataflows/UserProfile/UserProfileSaga\";\nimport {\n  DOWNLOAD_REQUESTS_TO_CSV,\n  VISUAL_STUDIO_BENEFITS_SEARCH,\n} from \"Dataflows/VisualStudioBenefit/VisualStudioBenefitActionTypes\";\nimport {\n  handleDownloadRequestsToCSV,\n  handleSearchVisualStudioBenefits,\n} from \"Dataflows/VisualStudioBenefit/VisualStudioBenefitSaga\";\n\nimport { handleEventStatusUpdate, handleLoadEvent, handleSearchEvents } from \"../Event/EventSaga\";\nimport {\n  SA_CSV_FILE_SUBMIT,\n  SA_CSV_FILE_UPLOAD,\n} from \"Dataflows/SA/UpdateSARegistrationStatus/UpdateSARegistrationStatusActionType\";\nimport {\n  handleCsvFileSubmit,\n  handleCsvFileUpload,\n} from \"Dataflows/SA/UpdateSARegistrationStatus/UpdateSARegistrationStatusSaga\";\nimport {\n  SA_PROGRAM_CSV_FILE_SUBMIT,\n  SA_PROGRAM_CSV_FILE_UPLOAD,\n} from \"Dataflows/SA/UpdateSAProgramStatus/UpdateSAProgramStatusActionType\";\nimport {\n  handleProgramCsvFileSubmit,\n  handleProgramCsvFileUpload,\n} from \"Dataflows/SA/UpdateSAProgramStatus/UpdateSAProgramStatusSaga\";\n\n/**\n * The root saga watches all saga activated actions by using \"effects\"\n * @generator\n * @returns {void} - TODO: figure out return type of generator functions.\n */\n// eslint-disable-next-line @typescript-eslint/explicit-function-return-type\nfunction* watchAll() {\n  yield all([\n    takeEvery(APPLICATION_LOAD, handleLoadApplication),\n    takeEvery(GET_USER_PROFILE_BY_SELECTED_APPLICATION_ID, handleUserProfileFetchByApplicationId),\n    takeEvery(\n      GET_APPLICATION_FLAGS_BY_SELECTED_APPLICATION_ID,\n      handleFetchApplicationFlagsByApplicationId\n    ),\n    takeEvery(\n      GET_APPLICATION_QUESTIONS_BY_SELECTED_APPLICATION_ID,\n      handleApplicationQuestionsFetchByApplicationId\n    ),\n    takeEvery(\n      GET_HIGHLIGHTED_ACTIVITIES_EVENTS_BY_SELECTED_APPLICATION_ID,\n      handleHighlightedActivitiesEventsFetchByApplicationId\n    ),\n    takeEvery(\n      GET_ADDITIONAL_ACTIVITIES_EVENTS_BY_SELECTED_USERPROFILE_ID,\n      handleAdditionalActivitiesEventsFetchByUserprofileId\n    ),\n    takeEvery(GET_ACTIVITY_EVENT_BY_ID, handleActivityEventFetchById),\n    takeEvery(ACTIVITY_TYPE_EVENT_TYPE_DATA_LOAD, handleLoadActivityEventTypesResults),\n    takeEvery(GET_ASSIGN_APPLICATION, handleLoadAssignApplication),\n    takeEvery(ASSIGN_APPLICATION, handleAssignApplication),\n    takeEvery(SCORE_APPLICATION, handleScoreApplication),\n    takeEvery(FLAG_APPLICATION, handleFlagApplication),\n    takeEvery(APPLICATIONS_SEARCH, handleSearchApplications),\n    takeEvery(AZURE_BENEFIT_REQUESTS_SEARCH, handleSearchAzureBenefitRequests),\n    takeEvery(AZURE_BENEFIT_REQUEST_APPROVE_OR_DECLINE, handleApproveOrDenyAzureBenefitRequest),\n    takeEvery(GET_AZURE_BENEFIT_REQUEST_DETAILS, handleGetAzureBenefitRequestDetails),\n    takeEvery(BENEFITS_SEARCH, handleSearchBenefits),\n    takeEvery(VISUAL_STUDIO_BENEFITS_SEARCH, handleSearchVisualStudioBenefits),\n    takeEvery(DOWNLOAD_REQUESTS_TO_CSV, handleDownloadRequestsToCSV),\n    takeEvery(AWARD_PERIOD_LOAD, handleLoadAwardPeriods),\n    takeEvery(AWARD_KIT_SKU_LOAD, handleLoadAwardKitSku),\n    takeEvery(CL_REGION_LOAD, handleLoadClRegions),\n    takeEvery(REGIONDATA_LOAD, handleLoadRegions),\n    takeEvery(COUNTRYDATA_LOAD, handleLoadCountryRegions),\n    takeEvery(CREATE_USER, handleCreateUser),\n    takeEvery(DOWNLOAD_APPLICATIONS_TO_CSV, handleDownloadApplicationsToCSV),\n    takeEvery(EVENT_LOAD, handleLoadEvent),\n    takeEvery(EVENTS_SEARCH, handleSearchEvents),\n    takeEvery(INDUSTRY_FOCUS_LOAD, handleLoadIndustryFocuses),\n    takeEvery(MVP_FETCH_PROFILE_BENEFITS, handleMVPFetchProfileBenefits),\n    takeEvery(MVP_CLAIM_BENEFIT, handleMVPClaimBenefit),\n    takeEvery(MVP_ADD_COMMENT, handleMVPAddComment),\n    takeEvery(MVP_FETCH_COMMENTS, handleMVPCommentsFetch),\n    takeEvery(MVP_EXTEND_AZURE_BENEFIT_CREDIT, handleMVPExtendAzureBenefitCredit),\n    takeEvery(RD_EXTEND_AZURE_BENEFIT_CREDIT, handleRDExtendAzureBenefitCredit),\n    takeEvery(MVP_ADD_AZURE_BENEFIT_DETAIL, handleAddAzureBenefit),\n    takeEvery(MVP_FETCH_PROGRAM_PROFILE, handleMVPProgramProfileFetch),\n    takeEvery(MVP_FETCH_RETIRE_PROFILE, handleMVPRetireProfileFetch),\n    takeEvery(MVP_UPDATE_PROGRAM_PROFILE, handleMVPUpdateProgramProfile),\n    takeEvery(MVP_RETIRE_PROFILE, handleMVPRetireProfile),\n    takeEvery(MVP_FETCH_USER_PROFILE, handleMVPUserProfileFetch),\n    takeEvery(MVP_GET_M365_BENEFIT_DETAIL, handleMVPGetM365BenefitDetail),\n    takeEvery(MVP_UPDATE_M365_BENEFIT_DETAIL, handleMVPUpdateM365BenefitDetail),\n    takeEvery(RD_GET_M365_BENEFIT_DETAIL, handleRDGetM365BenefitDetail),\n    takeEvery(RD_UPDATE_M365_BENEFIT_DETAIL, handleRDUpdateM365BenefitDetail),\n    takeEvery(MVP_GET_MS365_BENEFIT_DETAIL, handleMVPGetMS365BenefitDetail),\n    takeEvery(MVP_UPDATE_MS365_BENEFIT_DETAIL, handleMVPUpdateMS365BenefitDetail),\n    takeEvery(RD_GET_MS365_BENEFIT_DETAIL, handleRDGetMS365BenefitDetail),\n    takeEvery(RD_UPDATE_MS365_BENEFIT_DETAIL, handleRDUpdateMS365BenefitDetail),\n    takeEvery(MVP_USER_PROFILES_SEARCH, handleMVPSearchUserProfiles),\n    takeEvery(RD_ADD_USER_PROFILE_COMMENT, handleRDAddUserProfileComment),\n    takeEvery(RD_DOWNLOAD_TO_CSV, handleRDUserProfileDownload),\n    takeEvery(RD_FETCH_USER_PROFILE_COMMENTS, handleRDUserProfileCommentsFetch),\n    takeEvery(RD_FETCH_USER_PROFILE, handleRDUserProfileFetch),\n    takeEvery(RD_FETCH_PROGRAM_PROFILE, handleRDProgramProfileFetch),\n    takeEvery(RD_GET_PROFILE_BENEFITS, handleRDGetProfileBenefits),\n    takeEvery(RD_UPDATE_PROGRAM_PROFILE, handleRDUpdateProgramProfile),\n    takeEvery(RD_USER_PROFILE_CLAIM_BENEFIT, handleRDClaimBenefit),\n    takeEvery(RD_USER_PROFILES_SEARCH, handleRDSearchUserProfiles),\n    takeEvery(SCHOOLDATA_LOAD, handleLoadSchools),\n    takeEvery(SOCIALNETWORKDATA_LOAD, handleLoadSocialNetworks),\n    takeEvery(PROGRAM_LANGUAGE_LOAD, handleLoadProgramLanguage),\n    takeEvery(STATEPROVINCEDATA_LOAD, handleLoadStateProvinces),\n    takeEvery(STATEPROVINCESCHOOL_LOAD, handleLoadStateProvincesSchool),\n    takeEvery(STATEPROVINCESHIPPING_LOAD, handleLoadStateProvincesShipping),\n    takeEvery(TECHAREADATA_LOAD, handleLoadTechAreaResults),\n    takeEvery(TECHNICAL_EXPERTISE_LOAD, handleLoadTechnicalExpertise),\n    takeEvery(UPDATE_EVENT_STATUS, handleEventStatusUpdate),\n    takeEvery(UPDATE_USER_STATUS, handleUpdateUserStatus),\n    takeEvery(\n      UPDATE_APPLICATION_STATUSES_AND_REMOVE_FLAGS,\n      handleUpdateApplicationStatusesAndRemoveFlags\n    ),\n    takeEvery(\n      UPDATE_APPLICATION_TECHNOLOGY_AREA_AND_RESET_SCORES,\n      handleUpdateApplicationTechnologyAreaAndResetScores\n    ),\n    takeEvery(USER_ROLES_LOAD, handleLoadUserRoles),\n    takeEvery(USER_ROLE_DELETE, handleDeleteUserRole),\n    takeEvery(USER_ROLE_CREATE, handleCreateUserRole),\n    takeEvery(GEO_DATA_LOAD, handleLoadGeoData),\n    takeEvery(USER_ROLE_UPDATE, handleUpdateUserRole),\n    takeEvery(USERPROFILE_CLAIM_BENEFIT, handleClaimBenefit),\n    takeEvery(USERPROFILE_END_VSBENEFITS, handleEndUserProfileVSBenefits),\n    takeEvery(USERPROFILE_EXTEND_VSBENEFITS, handleExtendUserProfileVSBenefits),\n    takeEvery(USERPROFILE_FETCH_PROGRAM_PROFILE, handleProgramProfileFetch),\n    takeEvery(USERPROFILE_GET_PROFILE_BENEFITS, handleGetProfileBenefits),\n    takeEvery(USERPROFILE_LOAD_BY_EMAIL, handleLoadUserProfileByEmail),\n    takeEvery(USERPROFILE_LOAD_COMMENTS, handleLoadUserProfileComments),\n    takeEvery(USERPROFILE_LOAD_VSBENEFITS, handleLoadUserProfileVSBenefits),\n    takeEvery(USERPROFILE_LOAD, handleLoadUserProfile),\n    takeEvery(USERPROFILE_PROVISION_VSBENEFITS, handleProvisionUserProfileVSBenefits),\n    takeEvery(USERPROFILE_UPDATE_COMMENT, handleUpdateUserProfileComment),\n    takeEvery(USERPROFILE_UPDATE_PROGRAM_PROFILE, handleUpdateProgramProfile),\n    takeEvery(USERPROFILE_UPDATE, handleUpdateUserProfile),\n    takeEvery(USERPROFILE_UPDATE_BLOCK_SHIPPING, handleUpdateUserProfileBlockShipping),\n    takeEvery(MVP_USERPROFILE_UPDATE_BLOCK_SHIPPING, handleMVPUpdateUserProfileBlockShipping),\n    takeEvery(USERPROFILES_SEARCH, handleSearchUserProfiles),\n    takeEvery(USERPROFILE_ADD_COMMENT, handleAddComment),\n    takeEvery(USERS_SEARCH, handleSearchAccessUsers),\n    takeEvery(USERPROFILE_DL_LOAD, handleDlLoad),\n    takeEvery(USERPROFILE_DL_REMOVE, handleDlRemove),\n    takeEvery(USERPROFILE_DL_REMOVE_ALL, handleDlRemoveAll),\n    takeEvery(DISTRIBUTION_LISTS_SEARCH, handleSearchDistributionLists),\n    takeEvery(\n      FETCH_DISTRIBUTION_LISTS_BY_TENANT_REQUEST,\n      handleFetchDistributionListByTenantRequest\n    ),\n    takeEvery(APPROVE_OR_DECLINE_DISTRIBUTION_LIST_JOIN_REQUEST, handleApproveOrDeclineJoinRequest),\n    takeEvery(FETCH_MICROSOFT_MEMBERS_FOR_DL, handleFetchMicrosoftMembersForDL),\n    takeEvery(ADD_MICROSOFT_MEMBER_TO_DL, handleAddMicrosoftMemberToDL),\n    takeEvery(REMOVE_MICROSOFT_MEMBER_FROM_DL, handleRemoveMicrosoftMemberFromDL),\n    takeEvery(USERPROFILE_UPDATE_IS_PRIVATE, handleUserProfileIsPrivateUpdate),\n    takeEvery(MVP_USERPROFILE_UPDATE_IS_PRIVATE, handleMVPUserProfileIsPrivateUpdate),\n    takeEvery(MVP_USERPROFILE_UPDATE_ANNUAL_EXCEPTION, handleMVPUserProfileAnnualExceptionUpdate),\n    takeEvery(RD_USERPROFILE_UPDATE_IS_PRIVATE, handleRDUserProfileIsPrivateUpdate),\n    takeEvery(DEMOGRAPHICS_FILTER, handleFilterDemographics),\n    takeEvery(CAPACITY_DATA_LOAD, handleCapData),\n    takeEvery(COMMON_DATA_LOAD, handleLoadCommonData),\n    takeEvery(MVP_USERPROFILE_UPDATE_PRIMARY_EMAIL, handleMVPUserProfilePrimaryEmailUpdate),\n    takeEvery(RD_USER_PROFILE_UPDATE_PRIMARY_EMAIL, handleRDUserProfilePrimaryEmailUpdate),\n    takeEvery(RD_ADD_AZURE_BENEFIT_DETAIL, handleRDAddAzureBenefit),\n    takeEvery(M365_COPILOT_BENEFITS_SEARCH, handleSearchM365CopilotBenefits),\n    takeEvery(SA_CSV_FILE_UPLOAD, handleCsvFileUpload),\n    takeEvery(SA_CSV_FILE_SUBMIT, handleCsvFileSubmit),\n    takeEvery(SA_PROGRAM_CSV_FILE_UPLOAD, handleProgramCsvFileUpload),\n    takeEvery(SA_PROGRAM_CSV_FILE_SUBMIT, handleProgramCsvFileSubmit),\n  ]);\n}\n\nexport default watchAll;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { compose } from \"redux\";\nimport createSagaMiddleware from \"redux-saga\";\n\nimport { configureStore } from \"@reduxjs/toolkit\";\n\nimport { getCountryRegion } from \"Dataflows/CountryRegion/CountryRegionAction\";\nimport { awardCategoriesApi } from \"Services/AwardCategoriesApi\";\n\nimport rootReducer from \"../Dataflows/Reducers\";\nimport watchAll from \"../Dataflows/Sagas\";\n\nconst sagaMiddleware = createSagaMiddleware();\n\n// TODO: Figure out how we are going to run it in Production\ndeclare global {\n  // eslint-disable-next-line @typescript-eslint/interface-name-prefix\n  interface Window {\n    __REDUX_DEVTOOLS_EXTENSION_COMPOSE__?: typeof compose;\n  }\n}\n\nconst store = configureStore({\n  reducer: rootReducer,\n  middleware: (getDefaultMiddleware: any) =>\n    getDefaultMiddleware({\n      thunk: true,\n      serializableCheck: false,\n    })\n      .concat(sagaMiddleware)\n      .concat(awardCategoriesApi.middleware),\n});\n\nsagaMiddleware.run(watchAll);\n\nstore.dispatch(getCountryRegion());\n\nexport default store;\nexport type AppState = ReturnType<typeof rootReducer>;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport compact from \"lodash/compact\";\nimport filter from \"lodash/filter\";\nimport map from \"lodash/map\";\nimport some from \"lodash/some\";\n\nimport { FilterValueFieldNames } from \"Constants/FilterFields\";\nimport { OperationStatus } from \"Constants/OperationStatus\";\nimport { AppState } from \"Dataflows/Reducers\";\nimport { IApplicationFlagResponse } from \"Interfaces/Application/IApplicationFlagResponse\";\nimport { IApplicationFormActivityEvent } from \"Interfaces/Application/IApplicationFormActivityEvent\";\nimport { IApplicationQuestionResponse } from \"Interfaces/Application/IApplicationQuestionResponse\";\nimport { IApplicationUserProfileInformation } from \"Interfaces/Application/IApplicationUserProfileInformation\";\nimport { IFilterValue } from \"Interfaces/IFilterValue\";\nimport store from \"Store\";\n\nexport const getSelectedHighlightedActivitiesEventsFilterValues = (\n  state: AppState\n): IFilterValue[] =>\n  state.applicationDetailsState.highlightedActivitiesEventsState.activitiesEventsFilterValues;\n\nexport const getSelectedAdditionalActivitiesEventsFilterValues = (\n  state: AppState\n): IFilterValue[] =>\n  state.applicationDetailsState.additionalActivitiesEventsState.activitiesEventsFilterValues;\n\nexport const selectTechnologyAreaFilterValuesByAreaGroups = (\n  areaGroups: string[]\n): IFilterValue[] => {\n  const rootState = store.getState();\n  const techAreas = filter(rootState.technologyAreaDataState.technologyAreaData, (y) =>\n    some(areaGroups, (x) => x === y.technologyFocusAreaGroupName)\n  );\n  return compact(\n    map(techAreas, (item) => {\n      return { fieldName: FilterValueFieldNames.TECHNOLOGY_AREA, value: item.technologyName };\n    })\n  );\n};\n\nexport const getHighlightedActivitiesEventsCurrentPage = (state: AppState): number =>\n  state.applicationDetailsState.highlightedActivitiesEventsState.currentPage;\n\nexport const getHighlightedActivitiesEventsFilteredCount = (state: AppState): number =>\n  state.applicationDetailsState.highlightedActivitiesEventsState.filteredCount;\n\nexport const getHighlightedActivitiesEventsPageSize = (state: AppState): number =>\n  state.applicationDetailsState.highlightedActivitiesEventsState.pageSize;\n\nexport const getAdditionalActivitiesEventsCurrentPage = (state: AppState): number =>\n  state.applicationDetailsState.additionalActivitiesEventsState.currentPage;\n\nexport const getAdditionalActivitiesEventsFilteredCount = (state: AppState): number =>\n  state.applicationDetailsState.additionalActivitiesEventsState.filteredCount;\n\nexport const getAdditionalActivitiesEventsPageSize = (state: AppState): number =>\n  state.applicationDetailsState.additionalActivitiesEventsState.pageSize;\n\n/**\n * Returns the boolean value for whether or not the user profile information is still being loaded.\n * @param {AppState} state The application state.\n * @returns {boolean} True if the user profile information is still being loaded.\n */\nexport const isLoadingUserProfileInfoBySelectedApplicationId = (state: AppState): boolean =>\n  state.applicationDetailsState.selectedUserProfileInformationOpStatus?.read ===\n  OperationStatus.Pending;\n\n/**\n * Returns the error message for the user profile information fetch by application id.\n * @param {AppState} state The application state.\n * @returns {string | undefined} The error message for the user profile information fetch by application id.\n */\nexport const getUserProfileInfoBySelectedApplicationIdErrorMessage = (\n  state: AppState\n): string | undefined => state.applicationDetailsState.selectedUserProfileInformationErrorMessage;\n\n/**\n * Returns the user profile information for the selected application id.\n * @param {AppState} state The application state.\n * @returns {IApplicationUserProfileInformation | undefined} The user profile information for the selected application id.\n */\nexport const getUserProfileInfoBySelectedApplicationId = (\n  state: AppState\n): IApplicationUserProfileInformation | undefined =>\n  state.applicationDetailsState.selectedUserProfileInformation;\n\n/**\n * Returns the application questions for the selected application id.\n * @param {AppState} state The application state.\n * @returns {IApplicationQuestionResponse[] | undefined} The application questions for the selected application id.\n */\nexport const getApplicationQuestionsBySelectedApplicationId = (\n  state: AppState\n): IApplicationQuestionResponse[] | undefined =>\n  state.applicationDetailsState.selectedApplicationQuestions;\n\n/**\n * Returns the error message for the application questions fetch by application id.\n * @param {AppState} state The application state.\n * @returns {string | undefined} The error message for the application questions fetch by application id.\n */\nexport const getApplicationQuestionsBySelectedApplicationIdErrorMessage = (\n  state: AppState\n): string | undefined => state.applicationDetailsState.selectedApplicationQuestionsErrorMessage;\n\n/**\n * Returns the boolean value for whether or not the application questions are still being loaded.\n * @param {AppState} state The application state.\n * @returns {boolean} True if the application questions are still being loaded.\n */\nexport const getIsLoadingApplicationQuestionsBySelectedApplicationId = (state: AppState): boolean =>\n  state.applicationDetailsState.selectedApplicationQuestionsOpStatus?.read ===\n  OperationStatus.Pending;\n\n/**\n * Returns the highlighted activities or events for the selected application id.\n * @param {AppState} state The application state.\n * @returns {IApplicationFormActivityEvent[] | undefined} The highlighted activities or events for the selected application id.\n */\nexport const getHighlightedActivitiesEventsBySelectedApplicationId = (\n  state: AppState\n): IApplicationFormActivityEvent[] | undefined =>\n  state.applicationDetailsState.highlightedActivitiesEventsState.activitiesEvents;\n\n/**\n * Returns the error message for the highlighted activities or events fetch by application id.\n * @param {AppState} state The application state.\n * @returns {string | undefined} The error message for the highlighted activities or events fetch by application id.\n */\nexport const getHighlightedActivitiesEventsBySelectedApplicationIdErrorMessage = (\n  state: AppState\n): string | undefined =>\n  state.applicationDetailsState.highlightedActivitiesEventsState.activitiesEventsErrorMessage;\n\n/**\n * Returns the boolean value for whether or not the highlighted activities or events are still being loaded.\n * @param {AppState} state The application state.\n * @returns {boolean} True if the highlighted activities or events are still being loaded.\n */\nexport const getIsLoadingHighlightedActivitiesEventsBySelectedApplicationId = (\n  state: AppState\n): boolean =>\n  state.applicationDetailsState.highlightedActivitiesEventsState.activitiesEventsOpStatus?.read ===\n  OperationStatus.Pending;\n\n/**\n * Returns the highlighted activities or events for the selected application id.\n * @param {AppState} state The application state.\n * @returns {IApplicationFormActivityEvent[] | undefined} The highlighted activities or events for the selected application id.\n */\nexport const getAdditionalActivitiesEventsBySelectedApplicationId = (\n  state: AppState\n): IApplicationFormActivityEvent[] | undefined =>\n  state.applicationDetailsState.additionalActivitiesEventsState.activitiesEvents;\n\n/**\n * Returns the error message for the highlighted activities or events fetch by application id.\n * @param {AppState} state The application state.\n * @returns {string | undefined} The error message for the highlighted activities or events fetch by application id.\n */\nexport const getAdditionalActivitiesEventsBySelectedApplicationIdErrorMessage = (\n  state: AppState\n): string | undefined =>\n  state.applicationDetailsState.additionalActivitiesEventsState.activitiesEventsErrorMessage;\n\n/**\n * Returns the boolean value for whether or not the highlighted activities or events are still being loaded.\n * @param {AppState} state The application state.\n * @returns {boolean} True if the highlighted activities or events are still being loaded.\n */\nexport const getIsLoadingAdditionalActivitiesEventsBySelectedApplicationId = (\n  state: AppState\n): boolean =>\n  state.applicationDetailsState.additionalActivitiesEventsState.activitiesEventsOpStatus?.read ===\n  OperationStatus.Pending;\n\nexport const getIsLoadingActivityEventDetails = (state: AppState): boolean =>\n  state.applicationDetailsState.selectedActivityEventOpStatus?.read === OperationStatus.Pending;\n\nexport const getSelectedActivityEvent = (\n  state: AppState\n): IApplicationFormActivityEvent | undefined => state.applicationDetailsState.selectedActivityEvent;\n\nexport const getSelectedActivityEventErrorMessage = (state: AppState): string | undefined =>\n  state.applicationDetailsState.selectedActivityEventErrorMessage;\n\nexport const getApplicationFlagsBySelectedApplicationId = (\n  state: AppState\n): IApplicationFlagResponse[] | undefined => state.applicationDetailsState.selectedApplicationFlags;\n\nexport const getIsLoadingApplicationFlagsBySelectedApplicationId = (state: AppState): boolean =>\n  state.applicationDetailsState.selectedApplicationFlagsOpStatus?.read === OperationStatus.Pending;\n\nexport const getApplicationFlagsBySelectedApplicationIdErrorMessage = (\n  state: AppState\n): string | undefined => state.applicationDetailsState.selectedApplicationFlagsErrorMessage;\n\nexport const getSelectedUserProfileApplicationId = (state: AppState): number | undefined =>\n  state.applicationDetailsState.selectedUserProfileInformation?.applicationFormId;\n\nexport const getManageApplicationOperationStatus = (state: AppState): OperationStatus | undefined =>\n  state.applicationDetailsState.manageApplicationOpStatus?.update;\n\nexport const manageApplicationErrorMessage = (state: AppState): string | undefined =>\n  state.applicationDetailsState.manageApplicationErrorMessage;\n\nexport const getUpdateTechnologyAreaOperationStatus = (\n  state: AppState\n): OperationStatus | undefined =>\n  state.applicationDetailsState.updateTechnologyAreaOpStatus?.update;\n\nexport const updateTechnologyAreaErrorMessage = (state: AppState): string | undefined =>\n  state.applicationDetailsState.updateTechnologyAreaErrorMessage;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { ReactElement } from \"react\";\n\nimport { useSelector } from \"react-redux\";\n\nimport { Label, Link, Spinner, SpinnerSize, Stack, StackItem, Text } from \"@fluentui/react\";\n\nimport { SidePanel } from \"Components/SidePanel/SidePanel\";\nimport {\n  getIsLoadingActivityEventDetails,\n  getSelectedActivityEvent,\n  getSelectedActivityEventErrorMessage,\n} from \"Dataflows/ApplicationDetails/ApplicationDetailsSelector\";\nimport {\n  formatDateAsString,\n  getEventDateAsLocalDateString,\n  getEventTimeText,\n} from \"Utility/FormatHelper\";\n\nimport {\n  detailsHeaderTextStyles,\n  detailsStackItemStyles,\n  detailsStackTokens,\n  detailsTextStyles,\n} from \"./ApplicationDetails.styles\";\nimport { IActivityEventDetailsSidePanelProps } from \"./IActivityEventDetailsSidePanelProps\";\n\nexport const ActivityEventDetailsSidePanel = (\n  props: IActivityEventDetailsSidePanelProps\n): ReactElement => {\n  const { isPanelOpen, setIsPanelOpen } = props;\n\n  const isLoading = useSelector(getIsLoadingActivityEventDetails);\n  const selectedActivityEvent = useSelector(getSelectedActivityEvent);\n  const errorMessage = useSelector(getSelectedActivityEventErrorMessage);\n  const isEvent = selectedActivityEvent?.contributionType === \"Event\";\n\n  return (\n    <SidePanel\n      isOpen={isPanelOpen}\n      title={!!selectedActivityEvent ? `${selectedActivityEvent.contributionType} Details` : \"\"}\n      onDismiss={(): void => setIsPanelOpen(false)}\n    >\n      {!!isLoading ? (\n        <Spinner size={SpinnerSize.large} />\n      ) : !!errorMessage ? (\n        <p>{errorMessage}</p>\n      ) : (\n        <Stack>\n          <Stack>\n            <Text styles={detailsHeaderTextStyles}>{selectedActivityEvent?.contributionType}</Text>\n          </Stack>\n          <Stack tokens={detailsStackTokens}>\n            {isEvent && (\n              <Stack horizontal tokens={detailsStackTokens}>\n                <StackItem styles={detailsStackItemStyles}>\n                  <Label>Classification</Label>\n                  <Text>\n                    {!!selectedActivityEvent?.isPrivate\n                      ? \"Private: This event is not publicly searchable\"\n                      : \"Public: This event is publicly searchable\"}\n                  </Text>\n                </StackItem>\n              </Stack>\n            )}\n            <Stack horizontal tokens={detailsStackTokens}>\n              <StackItem styles={detailsStackItemStyles}>\n                <Label>Title</Label>\n                <Text>{selectedActivityEvent?.activityEventName}</Text>\n              </StackItem>\n              <StackItem styles={detailsStackItemStyles}>\n                <Label>{`${selectedActivityEvent?.contributionType} Type`}</Label>\n                <Text>{selectedActivityEvent?.activityEventType}</Text>\n              </StackItem>\n            </Stack>\n            <Stack horizontal tokens={detailsStackTokens}>\n              <StackItem styles={detailsStackItemStyles}>\n                <Label>Description</Label>\n                <Text styles={detailsTextStyles}>{selectedActivityEvent?.description}</Text>\n              </StackItem>\n              {!!selectedActivityEvent?.privateDescription && (\n                <StackItem styles={detailsStackItemStyles}>\n                  <Label>Private Description</Label>\n                  <Text>{selectedActivityEvent?.privateDescription}</Text>\n                </StackItem>\n              )}\n            </Stack>\n            <Stack horizontal tokens={detailsStackTokens}>\n              <StackItem styles={detailsStackItemStyles}>\n                <Label>Target Audiences</Label>\n                <Text>{selectedActivityEvent?.targetAudiences.join(\", \")}</Text>\n              </StackItem>\n              {isEvent && (\n                <StackItem styles={detailsStackItemStyles}>\n                  <Label>Event Format</Label>\n                  <Text>{selectedActivityEvent?.eventFormat}</Text>\n                </StackItem>\n              )}\n            </Stack>\n            <Stack horizontal tokens={detailsStackTokens}>\n              <StackItem styles={detailsStackItemStyles}>\n                <Label>Primary Technology Area</Label>\n                <Text>{selectedActivityEvent?.technologyArea}</Text>\n              </StackItem>\n              {!!selectedActivityEvent?.additionalTechnologyAreas &&\n                selectedActivityEvent?.additionalTechnologyAreas.length > 0 && (\n                  <StackItem styles={detailsStackItemStyles}>\n                    <Label>Additional Technology Areas</Label>\n                    <Text>{selectedActivityEvent?.additionalTechnologyAreas.join(\", \")}</Text>\n                  </StackItem>\n                )}\n            </Stack>\n            <Stack horizontal tokens={detailsStackTokens}>\n              <StackItem styles={detailsStackItemStyles}>\n                <Label>{`${selectedActivityEvent?.contributionType} URL`}</Label>\n                <Link href={selectedActivityEvent?.activityOrEventUrl} target=\"_blank\">\n                  {selectedActivityEvent?.activityOrEventUrl}\n                </Link>\n              </StackItem>\n              {isEvent && (\n                <StackItem styles={detailsStackItemStyles}>\n                  <Label>Photos/Recording URL</Label>\n                  <Link href={selectedActivityEvent?.photosRecordingUrl} target=\"_blank\">\n                    {selectedActivityEvent?.photosRecordingUrl}\n                  </Link>\n                </StackItem>\n              )}\n            </Stack>\n            <Stack horizontal tokens={detailsStackTokens}>\n              <StackItem styles={detailsStackItemStyles}>\n                <Label>Quantity</Label>\n                <Text>{selectedActivityEvent?.quantity}</Text>\n              </StackItem>\n            </Stack>\n            <Stack horizontal tokens={detailsStackTokens}>\n              {!isEvent && (\n                <StackItem styles={detailsStackItemStyles}>\n                  <Label>Live Stream Views</Label>\n                  <Text>{selectedActivityEvent?.liveStreamViews}</Text>\n                </StackItem>\n              )}\n              {isEvent && (\n                <StackItem styles={detailsStackItemStyles}>\n                  <Label>Live Online Views</Label>\n                  <Text>{selectedActivityEvent?.liveOnlineViews}</Text>\n                </StackItem>\n              )}\n              <StackItem styles={detailsStackItemStyles}>\n                <Label>In-Person Attendees</Label>\n                <Text>{selectedActivityEvent?.inPersonAttendees}</Text>\n              </StackItem>\n              <StackItem styles={detailsStackItemStyles}>\n                <Label>On-Demand Views</Label>\n                <Text>{selectedActivityEvent?.onDemandViews}</Text>\n              </StackItem>\n            </Stack>\n            {!isEvent && (\n              <Stack horizontal tokens={detailsStackTokens}>\n                <StackItem styles={detailsStackItemStyles}>\n                  <Label>Subscriber Base</Label>\n                  <Text>{selectedActivityEvent?.subscriberBase}</Text>\n                </StackItem>\n                <StackItem styles={detailsStackItemStyles}>\n                  <Label>Number Of Sessions</Label>\n                  <Text>{selectedActivityEvent?.numberOfSessions}</Text>\n                </StackItem>\n                <StackItem styles={detailsStackItemStyles}>\n                  <Label>Number Of Views</Label>\n                  <Text>{selectedActivityEvent?.numberOfViews}</Text>\n                </StackItem>\n              </Stack>\n            )}\n            <Stack horizontal tokens={detailsStackTokens}>\n              {isEvent ? (\n                <StackItem styles={detailsStackItemStyles}>\n                  <Label>Time Zone</Label>\n                  <Text>{selectedActivityEvent?.eventTimeZone}</Text>\n                </StackItem>\n              ) : (\n                <StackItem styles={detailsStackItemStyles}>\n                  <Label>Published Date</Label>\n                  <Text>\n                    {selectedActivityEvent?.activityPublishedDate &&\n                      formatDateAsString(selectedActivityEvent.activityPublishedDate)}\n                  </Text>\n                </StackItem>\n              )}\n            </Stack>\n            {isEvent && (\n              <Stack horizontal tokens={detailsStackTokens}>\n                {!!selectedActivityEvent?.eventStartDateTimeUtc && (\n                  <StackItem styles={detailsStackItemStyles}>\n                    <Label>Start Date</Label>\n                    <Text>\n                      {getEventDateAsLocalDateString(\n                        selectedActivityEvent?.eventStartDateTimeUtc,\n                        selectedActivityEvent.timeZoneOffset\n                      )}\n                    </Text>\n                  </StackItem>\n                )}\n                {!!selectedActivityEvent?.eventEndDateTimeUtc && (\n                  <StackItem styles={detailsStackItemStyles}>\n                    <Label>End Date</Label>\n                    <Text>\n                      {getEventDateAsLocalDateString(\n                        selectedActivityEvent?.eventEndDateTimeUtc,\n                        selectedActivityEvent.timeZoneOffset\n                      )}\n                    </Text>\n                  </StackItem>\n                )}\n              </Stack>\n            )}\n            {isEvent && (\n              <Stack horizontal tokens={detailsStackTokens}>\n                {!!selectedActivityEvent?.eventStartDateTimeUtc && (\n                  <StackItem styles={detailsStackItemStyles}>\n                    <Label>Start Time</Label>\n                    <Text>\n                      {getEventTimeText(\n                        selectedActivityEvent?.eventStartDateTimeUtc,\n                        selectedActivityEvent.timeZoneOffset\n                      )}\n                    </Text>\n                  </StackItem>\n                )}\n                {!!selectedActivityEvent?.eventEndDateTimeUtc && (\n                  <StackItem styles={detailsStackItemStyles}>\n                    <Label>End Time</Label>\n                    <Text>\n                      {getEventTimeText(\n                        selectedActivityEvent?.eventEndDateTimeUtc,\n                        selectedActivityEvent.timeZoneOffset\n                      )}\n                    </Text>\n                  </StackItem>\n                )}\n              </Stack>\n            )}\n          </Stack>\n        </Stack>\n      )}\n    </SidePanel>\n  );\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { useEffect, useState, ReactElement } from \"react\";\n\nimport { useDispatch, useSelector } from \"react-redux\";\n\nimport map from \"lodash/map\";\nimport Pagination from \"rc-pagination\";\n\nimport {\n  DetailsList,\n  DetailsListLayoutMode,\n  Dropdown,\n  IColumn,\n  IDetailsRowProps,\n  PrimaryButton,\n  SelectionMode,\n  Spinner,\n  SpinnerSize,\n  Stack,\n  StackItem,\n  Text,\n} from \"@fluentui/react\";\n\nimport ChevronIcon from \"Components/Common/ChevronIcon/ChevronIcon\";\nimport { PaginationRow } from \"Components/Common/Pagination/Pagination.styles\";\nimport {\n  filterButtonStyles,\n  highActivitiesEventsDetailsHeaderStyles,\n} from \"Components/Common/SharedListStyles.styles\";\nimport {\n  bodyContainerStackTokens,\n  headerStackStyles,\n  headerTextStyles,\n  ContainerWrapper,\n  eventsAndActivityBodyContainerStackStyles,\n} from \"Components/Common/SharedTableStyles.styles\";\nimport {\n  defaultActivitiesEventsFilterValues,\n  defaultListingPageSize,\n  mvpActivitiesEventsFilterFields,\n} from \"Constants/ApplicationConstants\";\nimport { TenantTypesEnum } from \"Constants/TenantTypes\";\nimport { buttonStackTokens } from \"Containers/Common/CommonContainer.styles\";\nimport SideBarContainer from \"Containers/SideBarContainer/SideBarContainer\";\nimport { getActivityEventTypes } from \"Dataflows/ActivityEventTypes/ActivityEventTypesAction\";\nimport {\n  addActivitiesEventsFilterValue,\n  fetchActivityEventById,\n  fetchAdditionalActivitiesEventsBySelectedUserprofileId,\n  removeActivitiesEventsFilterValue,\n  removeMultipleActivitiesEventsFilterValues,\n  resetActivitiesEventsFilterValues,\n  updateActivitiesEventsCurrentPage,\n  updateActivitiesEventsPageSize,\n  ActivitiesEventsActionTypes,\n} from \"Dataflows/ApplicationDetails/ApplicationDetailsAction\";\nimport {\n  getAdditionalActivitiesEventsBySelectedApplicationId,\n  getAdditionalActivitiesEventsBySelectedApplicationIdErrorMessage,\n  getAdditionalActivitiesEventsCurrentPage,\n  getAdditionalActivitiesEventsFilteredCount,\n  getAdditionalActivitiesEventsPageSize,\n  getIsLoadingAdditionalActivitiesEventsBySelectedApplicationId,\n  getSelectedAdditionalActivitiesEventsFilterValues,\n  getUserProfileInfoBySelectedApplicationId,\n  selectTechnologyAreaFilterValuesByAreaGroups,\n} from \"Dataflows/ApplicationDetails/ApplicationDetailsSelector\";\nimport { getTechnologyAreas } from \"Dataflows/TechnologyArea/TechnologyAreaAction\";\nimport { IApplicationFormActivityEvent } from \"Interfaces/Application/IApplicationFormActivityEvent\";\nimport { IFilterValue } from \"Interfaces/IFilterValue\";\n\nimport { ActivityEventDetailsSidePanel } from \"../ActivityEventDetailsSidePanel\";\n\nconst AdditionalActivitiesEvents = (): ReactElement => {\n  const dispatch = useDispatch();\n  const additionalActivitiesEvents: IApplicationFormActivityEvent[] | undefined = useSelector(\n    getAdditionalActivitiesEventsBySelectedApplicationId\n  );\n  const errorMessage = useSelector(\n    getAdditionalActivitiesEventsBySelectedApplicationIdErrorMessage\n  );\n  const isLoading = useSelector(getIsLoadingAdditionalActivitiesEventsBySelectedApplicationId);\n  const userProfileInfo = useSelector(getUserProfileInfoBySelectedApplicationId);\n  const selectedFilterValues = useSelector(getSelectedAdditionalActivitiesEventsFilterValues);\n  const pageSize: number = useSelector(getAdditionalActivitiesEventsPageSize);\n  const currentPage: number = useSelector(getAdditionalActivitiesEventsCurrentPage);\n  const totalCount = useSelector(getAdditionalActivitiesEventsFilteredCount);\n  const [techAreaGroupsRemoved, setTechAreaGroupsRemoved] = useState([\"\"]);\n  const [isActivityEventDetailsPanelOpen, setIsActivityEventDetailsPanelOpen] = useState(false);\n  const [lastSelectedSortColum, setLastSelectedSortColumn] = useState('');\n  const [isSelectedSortColumDesc, setIsSelectedSortColumnDesc] = useState(false);\n\n  const columns: IColumn[] = [\n    {\n      key: \"activityEventName\",\n      name: \"Title\",\n      ariaLabel: \"The Activity Event Title\",\n      fieldName: \"activityEventName\",\n      minWidth: 100,\n      isResizable: true,\n      flexGrow: 1,\n      isSorted: lastSelectedSortColum == 'activityEventName',\n      isSortedDescending: isSelectedSortColumDesc && lastSelectedSortColum == 'activityEventName',\n    },\n    {\n      key: \"contributionType\",\n      name: \"Type\",\n      ariaLabel: \"The type\",\n      fieldName: \"contributionType\",\n      minWidth: 50,\n      isResizable: true,\n      flexGrow: 1,\n    },\n    {\n      key: \"activityEventType\",\n      name: \"Activity/Event Type\",\n      ariaLabel: \"The activity/event type.\",\n      fieldName: \"activityEventType\",\n      minWidth: 90,\n      isResizable: true,\n      flexGrow: 1,\n    },\n    {\n      key: \"awardCategory\",\n      name: \"Award Category\",\n      ariaLabel: \"The award category\",\n      fieldName: \"awardCategory\",\n      minWidth: 90,\n      isResizable: true,\n      flexGrow: 1,\n      isSorted: lastSelectedSortColum == 'awardCategory',\n      isSortedDescending: isSelectedSortColumDesc && lastSelectedSortColum == 'awardCategory',\n    },\n    {\n      key: \"technologyArea\",\n      name: \"Primary Technology Area\",\n      ariaLabel: \"The technology area\",\n      fieldName: \"technologyArea\",\n      minWidth: 120,\n      isResizable: true,\n      flexGrow: 1,\n      isSorted: lastSelectedSortColum == 'technologyArea',\n      isSortedDescending: isSelectedSortColumDesc && lastSelectedSortColum == 'technologyArea',\n    },\n    {\n      key: \"quantity\",\n      name: \"Quantity\",\n      ariaLabel: \"The quantity\",\n      fieldName: \"quantity\",\n      minWidth: 50,\n      isResizable: true,\n      flexGrow: 1,\n      isSorted: lastSelectedSortColum == 'quantity',\n      isSortedDescending: isSelectedSortColumDesc && lastSelectedSortColum == 'quantity',\n    },\n    {\n      key: \"liveStreamViews\",\n      name: \"Live Stream Views\",\n      ariaLabel: \"The liveStreamViews\",\n      fieldName: \"liveStreamViews\",\n      minWidth: 50,\n      flexGrow: 1,\n      isResizable: true,\n      isSorted: lastSelectedSortColum == 'liveStreamViews',\n      isSortedDescending: isSelectedSortColumDesc && lastSelectedSortColum == 'liveStreamViews',\n    },\n    {\n      key: \"liveOnlineViews\",\n      name: \"Live Online Views\",\n      ariaLabel: \"The liveOnlineViews\",\n      fieldName: \"liveOnlineViews\",\n      minWidth: 50,\n      flexGrow: 1,\n      isResizable: true,\n      isSorted: lastSelectedSortColum == 'liveOnlineViews',\n      isSortedDescending: isSelectedSortColumDesc && lastSelectedSortColum == 'liveOnlineViews',\n    },\n    {\n      key: \"inPersonAttendees\",\n      name: \"In-Person Attendees\",\n      ariaLabel: \"The inPersonAttendees\",\n      fieldName: \"inPersonAttendees\",\n      minWidth: 50,\n      flexGrow: 1,\n      isResizable: true,\n      isSorted: lastSelectedSortColum == 'inPersonAttendees',\n      isSortedDescending: isSelectedSortColumDesc && lastSelectedSortColum == 'inPersonAttendees',\n    },\n    {\n      key: \"onDemandViews\",\n      name: \"On-Demand Views\",\n      ariaLabel: \"The onDemandViews\",\n      fieldName: \"onDemandViews\",\n      minWidth: 50,\n      flexGrow: 1,\n      isResizable: true,\n      isSorted: lastSelectedSortColum == 'onDemandViews',\n      isSortedDescending: isSelectedSortColumDesc && lastSelectedSortColum == 'onDemandViews',\n    },\n    {\n      key: \"subscriberBase\",\n      name: \"Subscriber Base\",\n      ariaLabel: \"The aubscriberBase\",\n      fieldName: \"subscriberBase\",\n      minWidth: 50,\n      flexGrow: 1,\n      isResizable: true,\n      isSorted: lastSelectedSortColum == 'subscriberBase',\n      isSortedDescending: isSelectedSortColumDesc && lastSelectedSortColum == 'subscriberBase',\n    },\n    {\n      key: \"numberOfSessions\",\n      name: \"Number Of Sessions\",\n      ariaLabel: \"The numberOfSessions\",\n      fieldName: \"numberOfSessions\",\n      minWidth: 50,\n      flexGrow: 1,\n      isResizable: true,\n      isSorted: lastSelectedSortColum == 'numberOfSessions',\n      isSortedDescending: isSelectedSortColumDesc && lastSelectedSortColum == 'numberOfSessions',\n    },\n    {\n      key: \"numberOfViews\",\n      name: \"Number Of Views\",\n      ariaLabel: \"The numberOfViews\",\n      fieldName: \"numberOfViews\",\n      minWidth: 50,\n      flexGrow: 1,\n      isResizable: true,\n      isSorted: lastSelectedSortColum == 'numberOfViews',\n      isSortedDescending: isSelectedSortColumDesc && lastSelectedSortColum == 'numberOfViews',\n    },\n  ];\n\n\n  const addFilterValue = (filter: IFilterValue): ActivitiesEventsActionTypes => {\n    setTechAreaGroupsRemoved([\"\"]);\n    return dispatch(addActivitiesEventsFilterValue(filter, false));\n  };\n  const removeFilterValue = (filter: IFilterValue): ActivitiesEventsActionTypes =>\n    dispatch(removeActivitiesEventsFilterValue(filter, false));\n  const removeMultipleFilterValues = (filters: IFilterValue[]): ActivitiesEventsActionTypes =>\n    dispatch(removeMultipleActivitiesEventsFilterValues(filters, false));\n  const getSelectedActivityEvent = (\n    selectedItem: IApplicationFormActivityEvent\n  ): ActivitiesEventsActionTypes =>\n    dispatch(fetchActivityEventById(selectedItem.activityEventId, selectedItem.contributionType));\n\n  const onItemClicked = (selectedItem: IApplicationFormActivityEvent): void => {\n    setIsActivityEventDetailsPanelOpen(true);\n    getSelectedActivityEvent(selectedItem);\n  };\n  const onTechAreaGroupFilterValuesRemovedOrAdded = (filtersNotSelected: IFilterValue[]): void =>\n    setTechAreaGroupsRemoved(map(filtersNotSelected, (f) => f.value));\n  const techAreasByAreaGroup = useSelector(() =>\n    selectTechnologyAreaFilterValuesByAreaGroups(techAreaGroupsRemoved)\n  );\n  const techAreasToRemove = techAreasByAreaGroup.filter((fl) =>\n    selectedFilterValues.some((sfv) => sfv.value === fl.value)\n  );\n\n  const onRenderRow = (props?: IDetailsRowProps, defaultRender?: any): React.ReactElement => {\n    const selectedItem = props && (props.item as IApplicationFormActivityEvent);\n    return defaultRender({\n      ...props,\n      item: selectedItem,\n      onClick: () => !!selectedItem && onItemClicked(selectedItem),\n    });\n  };\n\n  const onRenderColumn = (\n    item: IApplicationFormActivityEvent,\n    index?: number,\n    column?: IColumn\n  ): React.ReactElement => {\n    const fieldContent = item[column?.fieldName as keyof IApplicationFormActivityEvent];\n    switch (column?.key) {\n      case \"additionalTechnologyAreas\":\n      case \"targetAudiences\":\n        return <span>{(fieldContent as string[]).join(\", \")}</span>;\n\n      default:\n        return <span>{fieldContent}</span>;\n    }\n  };\n\n  const handleSearch = (\n    selectedFilterValues: IFilterValue[],\n    page: number,\n    pageSize: number,\n    sortFieldName?: string,\n    isDescendingSort?: boolean\n  ): void => {\n    !!userProfileInfo?.userProfileId &&\n      dispatch(\n        fetchAdditionalActivitiesEventsBySelectedUserprofileId(\n          Number(userProfileInfo?.userProfileId),\n          String(page),\n          String(pageSize),\n          selectedFilterValues,\n          TenantTypesEnum.MVP,\n          sortFieldName,\n          isDescendingSort\n        )\n      );\n  };\n\n  const onSortColumn = (column?: IColumn) => {\n    const fieldNamesToSort = ['activityEventName', 'awardCategory', 'technologyArea', 'quantity', 'liveStreamViews', 'liveOnlineViews', 'inPersonAttendees', 'onDemandViews', 'subscriberBase', 'numberOfSessions', 'numberOfViews'];\n\n    if (column && column.fieldName && fieldNamesToSort.includes(column.fieldName)) {\n      const fieldName = column.fieldName;\n      const isDesc = column.isSortedDescending ?? false;\n      setLastSelectedSortColumn(fieldName);\n      setIsSelectedSortColumnDesc(!isDesc);\n      handleSearch(selectedFilterValues, currentPage, pageSize, fieldName, isDesc);\n    }\n  };\n\n  /**\n   * Call to reset filter values.\n   * @method\n   */\n  const resetFilterValues = (): void => {\n    dispatch(resetActivitiesEventsFilterValues(false));\n\n    handleSearch(defaultActivitiesEventsFilterValues, 1, defaultListingPageSize);\n  };\n\n  useEffect(() => {\n    dispatch(getTechnologyAreas(TenantTypesEnum.MVP));\n    dispatch(getActivityEventTypes(TenantTypesEnum.MVP));\n  }, []);\n\n  useEffect(() => {\n    if (techAreasToRemove.length > 0) {\n      removeMultipleFilterValues(techAreasToRemove);\n    }\n  }, [techAreasToRemove]);\n\n  useEffect(() => {\n    handleSearch(selectedFilterValues, currentPage, pageSize);\n  }, [currentPage, pageSize]);\n\n  return !!isLoading ? (\n    <Spinner size={SpinnerSize.large} />\n  ) : !!errorMessage ? (\n    <p>{errorMessage}</p>\n  ) : (\n    <Stack>\n      <ContainerWrapper>\n        <Stack styles={headerStackStyles}>\n          <Text styles={headerTextStyles}>Additional Activities/Events</Text>\n        </Stack>\n        <Stack styles={eventsAndActivityBodyContainerStackStyles} tokens={bodyContainerStackTokens}>\n          <Stack horizontal horizontalAlign=\"space-between\" tokens={{}}>\n            <StackItem styles={{ root: { flexGrow: \"1\" } }}>\n              <>\n                <SideBarContainer\n                  addFilterValue={addFilterValue}\n                  removeFilterValue={removeFilterValue}\n                  updateFilterValue={() => {\n                    return;\n                  }} // this prop is required, but we don't need it for this instance.\n                  onTechAreaGroupFilterValueChanged={onTechAreaGroupFilterValuesRemovedOrAdded}\n                  selectedFilterValues={selectedFilterValues}\n                  filterFields={mvpActivitiesEventsFilterFields}\n                />\n                <Stack horizontal tokens={buttonStackTokens}>\n                  <PrimaryButton\n                    styles={filterButtonStyles}\n                    text=\"Apply\"\n                    onClick={(): void => handleSearch(selectedFilterValues, 1, pageSize)} // Reset to page 1, since we are applying new filters\n                  />\n                  <PrimaryButton\n                    styles={filterButtonStyles}\n                    text=\"Reset\"\n                    onClick={resetFilterValues}\n                  />\n                </Stack>\n              </>\n            </StackItem>\n            <StackItem styles={{ root: { flexGrow: \"3\" } }}>\n              <DetailsList\n                items={additionalActivitiesEvents || []}\n                columns={columns}\n                selectionMode={SelectionMode.none}\n                getKey={(item: any): string =>\n                  `${(item as IApplicationFormActivityEvent).activityEventId}`\n                }\n                setKey=\"none\"\n                layoutMode={DetailsListLayoutMode.justified}\n                isHeaderVisible={true}\n                onRenderRow={onRenderRow}\n                onRenderItemColumn={onRenderColumn}\n                enterModalSelectionOnTouch={true}\n                styles={highActivitiesEventsDetailsHeaderStyles}\n                onColumnHeaderClick={(e, column) => { onSortColumn(column) }}\n              />\n              <PaginationRow>\n                <Pagination\n                  total={totalCount}\n                  onChange={(page): void => {\n                    dispatch(updateActivitiesEventsCurrentPage(page, false));\n                  }}\n                  showTitle={false}\n                  current={currentPage}\n                  prevIcon={ChevronIcon(\"ChevronLeft\")}\n                  nextIcon={ChevronIcon(\"ChevronRight\")}\n                  pageSize={pageSize}\n                  showSizeChanger\n                />\n                <Dropdown\n                  options={[\n                    { key: 16, text: \"Show 16 results\" },\n                    { key: 32, text: \"Show 32 results\" },\n                    { key: 48, text: \"Show 48 results\" },\n                  ]}\n                  onChange={(_e, op): void => {\n                    dispatch(updateActivitiesEventsPageSize(op?.key as number, false));\n                  }}\n                  selectedKey={pageSize}\n                  className=\"pagination-dropdown\"\n                  title=\"Page Size Dropdown\"\n                />\n              </PaginationRow>\n            </StackItem>\n          </Stack>\n        </Stack>\n      </ContainerWrapper>\n      {userProfileInfo && (\n        <ActivityEventDetailsSidePanel\n          isPanelOpen={isActivityEventDetailsPanelOpen}\n          setIsPanelOpen={setIsActivityEventDetailsPanelOpen}\n        />\n      )}\n    </Stack>\n  );\n};\n\nexport default AdditionalActivitiesEvents;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { useEffect, ReactElement } from \"react\";\n\nimport { useDispatch, useSelector } from \"react-redux\";\n\nimport { FontWeights, Spinner, SpinnerSize, Stack, Text } from \"@fluentui/react\";\n\nimport { FlexCol, FlexRow } from \"Components/Common/Layout/Layout\";\nimport {\n  bodyContainerStackStyles,\n  bodyContainerStackTokens,\n  headerStackStyles,\n  headerTextStyles,\n  ContainerWrapper,\n} from \"Components/Common/SharedTableStyles.styles\";\nimport { REASON_FOR_FLAG_DROPDOWN_OPTIONS } from \"Constants/ApplicationConstants\";\nimport { OperationStatus } from \"Constants/OperationStatus\";\nimport { getFlagApplicationStatus } from \"Dataflows/Application/ApplicationSelector\";\nimport { fetchApplicationFlagsBySelectedApplicationId } from \"Dataflows/ApplicationDetails/ApplicationDetailsAction\";\nimport {\n  getApplicationFlagsBySelectedApplicationId,\n  getApplicationFlagsBySelectedApplicationIdErrorMessage,\n  getIsLoadingApplicationFlagsBySelectedApplicationId,\n  getSelectedUserProfileApplicationId,\n} from \"Dataflows/ApplicationDetails/ApplicationDetailsSelector\";\nimport { formatDate } from \"Utility/FormatHelper\";\n\nconst ApplicationFlags = (): ReactElement => {\n  const dispatch = useDispatch();\n  const isLoadingFlags = useSelector(getIsLoadingApplicationFlagsBySelectedApplicationId);\n  const applicationFlagsErrorMessage = useSelector(\n    getApplicationFlagsBySelectedApplicationIdErrorMessage\n  );\n  const flags = useSelector(getApplicationFlagsBySelectedApplicationId);\n  const applicationFormId = useSelector(getSelectedUserProfileApplicationId);\n  const flagApplicationStatus = useSelector(getFlagApplicationStatus);\n\n  useEffect(() => {\n    if (applicationFormId) {\n      dispatch(fetchApplicationFlagsBySelectedApplicationId(applicationFormId));\n    }\n  }, []);\n\n  useEffect(() => {\n    if (applicationFormId) {\n      dispatch(fetchApplicationFlagsBySelectedApplicationId(applicationFormId));\n    }\n  }, [flagApplicationStatus == OperationStatus.Succeeded]);\n\n  if (isLoadingFlags) {\n    return <Spinner size={SpinnerSize.large} />;\n  }\n\n  if (applicationFlagsErrorMessage) {\n    return <Text>{applicationFlagsErrorMessage}</Text>;\n  }\n\n  /**\n   * This function will find reason text from constant\n   * @param flagKey input string from api response\n   * @returns text for reason\n   */\n  function getFlagReasonText(flagKey: any) {\n    const flagReason = REASON_FOR_FLAG_DROPDOWN_OPTIONS.find((item: any) => item.key == flagKey);\n    const reasonText = flagReason && flagReason.text ? flagReason.text : \"\";\n    return reasonText;\n  }\n\n  return (\n    <Stack>\n      {!!flags && flags?.length > 0 ? (\n        flags.map((flag) => (\n          <ContainerWrapper key={`open-flag-${flags.indexOf(flag)}`}>\n            <Stack styles={headerStackStyles}>\n              <Text styles={headerTextStyles}>{`Open Flag ${flags.indexOf(flag) + 1}`}</Text>\n            </Stack>\n            <Stack styles={bodyContainerStackStyles} tokens={bodyContainerStackTokens}>\n              <FlexCol>\n                <FlexRow style={{ marginBottom: \"1rem\" }}>\n                  <FlexCol style={{ width: \"50%\" }}>\n                    <Text styles={{ root: { fontWeight: FontWeights.semibold } }}>\n                      Submitted By\n                    </Text>\n                    <Text>{flag.createdBy}</Text>\n                  </FlexCol>\n                  <FlexCol>\n                    <Text styles={{ root: { fontWeight: FontWeights.semibold } }}>\n                      Submitted On\n                    </Text>\n                    <Text>{formatDate(flag.dateCreated)}</Text>\n                  </FlexCol>\n                </FlexRow>\n                <FlexRow style={{ marginBottom: \"1rem\" }}>\n                  <FlexCol style={{ width: \"50%\" }}>\n                    <Text styles={{ root: { fontWeight: FontWeights.semibold } }}>\n                      Justification\n                    </Text>\n                    <Text>{flag.justificationText}</Text>\n                  </FlexCol>\n                  <FlexCol>\n                    <Text styles={{ root: { fontWeight: FontWeights.semibold } }}>\n                      Reason for flag\n                    </Text>\n                    {flag.flagReasonId ? <Text>{getFlagReasonText(flag.flagReasonId)}</Text> : null}\n                  </FlexCol>\n                </FlexRow>\n              </FlexCol>\n            </Stack>\n          </ContainerWrapper>\n        ))\n      ) : (\n        <Stack styles={bodyContainerStackStyles} tokens={bodyContainerStackTokens}>\n          <Text>There are no flags on this application.</Text>\n        </Stack>\n      )}\n    </Stack>\n  );\n};\n\nexport default ApplicationFlags;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { useEffect, ReactElement } from \"react\";\n\nimport { useDispatch, useSelector } from \"react-redux\";\n\nimport _ from \"lodash\";\n\nimport { Label, Spinner, SpinnerSize, Stack, StackItem, Text } from \"@fluentui/react\";\n\nimport {\n  bodyContainerStackStyles,\n  bodyContainerStackTokens,\n  headerStackStyles,\n  headerTextStyles,\n  labelStyles,\n  ContainerWrapper,\n} from \"Components/Common/SharedTableStyles.styles\";\nimport { TenantTypesEnum } from \"Constants/TenantTypes\";\nimport { fetchApplicationQuestionsBySelectedApplicationId } from \"Dataflows/ApplicationDetails/ApplicationDetailsAction\";\nimport {\n  getApplicationQuestionsBySelectedApplicationId,\n  getApplicationQuestionsBySelectedApplicationIdErrorMessage,\n  getIsLoadingApplicationQuestionsBySelectedApplicationId,\n  getUserProfileInfoBySelectedApplicationId,\n} from \"Dataflows/ApplicationDetails/ApplicationDetailsSelector\";\nimport { IApplicationQuestionResponse } from \"Interfaces/Application/IApplicationQuestionResponse\";\nimport { GetApplicationQuestionsGroupBySectionAndByQuestionId } from \"Utility/Utils\";\n\nconst ApplicationQuestions = (): ReactElement => {\n  const dispatch = useDispatch();\n  const applicationQuestions: IApplicationQuestionResponse[] | undefined = useSelector(\n    getApplicationQuestionsBySelectedApplicationId\n  );\n  const errorMessage = useSelector(getApplicationQuestionsBySelectedApplicationIdErrorMessage);\n  const isLoading = useSelector(getIsLoadingApplicationQuestionsBySelectedApplicationId);\n  const userProfileInfo = useSelector(getUserProfileInfoBySelectedApplicationId);\n  const applicationQuestionsGroupBySectionAndByQuestionId =\n    GetApplicationQuestionsGroupBySectionAndByQuestionId(applicationQuestions);\n\n  useEffect(() => {\n    if (!applicationQuestions && !isLoading && !!userProfileInfo?.applicationFormId) {\n      dispatch(\n        fetchApplicationQuestionsBySelectedApplicationId(\n          userProfileInfo.applicationFormId,\n          TenantTypesEnum.MVP\n        )\n      );\n    }\n  }, [applicationQuestions, dispatch, isLoading]);\n\n  return !!isLoading ? (\n    <Spinner size={SpinnerSize.large} />\n  ) : !!errorMessage ? (\n    <p>{errorMessage}</p>\n  ) : (\n    <Stack>\n      <ContainerWrapper>\n        <Stack styles={headerStackStyles}>\n          <Text styles={headerTextStyles}>Technology Area</Text>\n        </Stack>\n        <Stack styles={bodyContainerStackStyles} tokens={bodyContainerStackTokens}>\n          {applicationQuestionsGroupBySectionAndByQuestionId[\"Technology Area\"]?.map((question) => (\n            <StackItem key={question.questionId}>\n              <Label styles={labelStyles}>{question.questionText}</Label>\n              <Text>{question.questionResponseText}</Text>\n            </StackItem>\n          ))}\n        </Stack>\n      </ContainerWrapper>\n      <ContainerWrapper>\n        <Stack styles={headerStackStyles}>\n          <Text styles={headerTextStyles}>Application Questions</Text>\n        </Stack>\n        <Stack horizontal wrap styles={bodyContainerStackStyles} tokens={bodyContainerStackTokens}>\n          {applicationQuestionsGroupBySectionAndByQuestionId[\"Application Questions\"]\n            ?.map((question) => (\n              <StackItem\n                key={question.questionId}\n                grow={question.questionLocKey === \"MVP_APP_WHY_BE_MVP\" ? 2 : 1}\n                styles={{\n                  root: {\n                    width: question.questionLocKey === \"MVP_APP_WHY_BE_MVP\" ? \"100%\" : \"40%\",\n                  },\n                }}\n              >\n                <Label styles={labelStyles}>{question.questionText}</Label>\n                <Text>{question.questionResponseText}</Text>\n              </StackItem>\n            ))\n            // Sort by grow, so that MVP_APP_WHY_BE_MVP in effect is always last.\n            .sort((a, b) => {\n              if (a.props.grow === b.props.grow) {\n                return 0;\n              }\n              return a.props.grow < b.props.grow ? -1 : 1;\n            })}\n        </Stack>\n      </ContainerWrapper>\n      <ContainerWrapper>\n        <Stack styles={headerStackStyles}>\n          <Text styles={headerTextStyles}>Technical Expertise</Text>\n        </Stack>\n        <Stack styles={bodyContainerStackStyles} tokens={bodyContainerStackTokens}>\n          {applicationQuestionsGroupBySectionAndByQuestionId[\"Technical Expertise\"]?.map(\n            (question) => (\n              <StackItem key={question.questionId}>\n                <Label styles={labelStyles}>{question.questionText}</Label>\n                <Text>{question.questionResponseText}</Text>\n              </StackItem>\n            )\n          )}\n        </Stack>\n      </ContainerWrapper>\n    </Stack>\n  );\n};\n\nexport default ApplicationQuestions;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { useEffect, useState, ReactElement } from \"react\";\n\nimport { useDispatch, useSelector } from \"react-redux\";\n\nimport map from \"lodash/map\";\nimport Pagination from \"rc-pagination\";\n\nimport {\n  DetailsList,\n  DetailsListLayoutMode,\n  Dropdown,\n  IColumn,\n  IDetailsRowProps,\n  PrimaryButton,\n  SelectionMode,\n  Spinner,\n  SpinnerSize,\n  Stack,\n  StackItem,\n  Text,\n} from \"@fluentui/react\";\n\nimport ChevronIcon from \"Components/Common/ChevronIcon/ChevronIcon\";\nimport { PaginationRow } from \"Components/Common/Pagination/Pagination.styles\";\nimport {\n  filterButtonStyles,\n  highActivitiesEventsDetailsHeaderStyles,\n} from \"Components/Common/SharedListStyles.styles\";\nimport {\n  bodyContainerStackStyles,\n  bodyContainerStackTokens,\n  headerStackStyles,\n  headerTextStyles,\n  ContainerWrapper,\n  eventsAndActivityBodyContainerStackStyles,\n} from \"Components/Common/SharedTableStyles.styles\";\nimport {\n  defaultActivitiesEventsFilterValues,\n  defaultListingPageSize,\n  mvpActivitiesEventsFilterFields,\n} from \"Constants/ApplicationConstants\";\nimport { TenantTypesEnum } from \"Constants/TenantTypes\";\nimport { buttonStackTokens } from \"Containers/Common/CommonContainer.styles\";\nimport SideBarContainer from \"Containers/SideBarContainer/SideBarContainer\";\nimport { getActivityEventTypes } from \"Dataflows/ActivityEventTypes/ActivityEventTypesAction\";\nimport {\n  addActivitiesEventsFilterValue,\n  fetchActivityEventById,\n  fetchHighlightedActivitiesEventsBySelectedApplicationId,\n  removeActivitiesEventsFilterValue,\n  removeMultipleActivitiesEventsFilterValues,\n  resetActivitiesEventsFilterValues,\n  updateActivitiesEventsCurrentPage,\n  updateActivitiesEventsPageSize,\n  ActivitiesEventsActionTypes,\n} from \"Dataflows/ApplicationDetails/ApplicationDetailsAction\";\nimport {\n  getHighlightedActivitiesEventsBySelectedApplicationId,\n  getHighlightedActivitiesEventsBySelectedApplicationIdErrorMessage,\n  getHighlightedActivitiesEventsCurrentPage,\n  getHighlightedActivitiesEventsFilteredCount,\n  getHighlightedActivitiesEventsPageSize,\n  getIsLoadingHighlightedActivitiesEventsBySelectedApplicationId,\n  getSelectedHighlightedActivitiesEventsFilterValues,\n  getUserProfileInfoBySelectedApplicationId,\n  selectTechnologyAreaFilterValuesByAreaGroups,\n} from \"Dataflows/ApplicationDetails/ApplicationDetailsSelector\";\nimport { getTechnologyAreas } from \"Dataflows/TechnologyArea/TechnologyAreaAction\";\nimport { IApplicationFormActivityEvent } from \"Interfaces/Application/IApplicationFormActivityEvent\";\nimport { IFilterValue } from \"Interfaces/IFilterValue\";\n\nimport { ActivityEventDetailsSidePanel } from \"../ActivityEventDetailsSidePanel\";\n\nconst HighlightedActivitiesEvents = (): ReactElement => {\n  const dispatch = useDispatch();\n  const highlightedActivitiesEvents: IApplicationFormActivityEvent[] | undefined = useSelector(\n    getHighlightedActivitiesEventsBySelectedApplicationId\n  );\n  const errorMessage = useSelector(\n    getHighlightedActivitiesEventsBySelectedApplicationIdErrorMessage\n  );\n  const isLoading = useSelector(getIsLoadingHighlightedActivitiesEventsBySelectedApplicationId);\n  const selectedFilterValues = useSelector(getSelectedHighlightedActivitiesEventsFilterValues);\n  const userProfileInfo = useSelector(getUserProfileInfoBySelectedApplicationId);\n  const pageSize: number = useSelector(getHighlightedActivitiesEventsPageSize);\n  const currentPage: number = useSelector(getHighlightedActivitiesEventsCurrentPage);\n  const totalCount = useSelector(getHighlightedActivitiesEventsFilteredCount);\n  const [isActivityEventDetailsPanelOpen, setIsActivityEventDetailsPanelOpen] = useState(false);\n  const [techAreaGroupsRemoved, setTechAreaGroupsRemoved] = useState([\"\"]);\n  const [lastSelectedSortColum, setLastSelectedSortColumn] = useState(\"\");\n  const [isSelectedSortColumDesc, setIsSelectedSortColumnDesc] = useState(false);\n  const columns: IColumn[] = [\n    {\n      key: \"activityEventName\",\n      name: \"Title\",\n      ariaLabel: \"The Activity Event Title\",\n      fieldName: \"activityEventName\",\n      minWidth: 100,\n      isResizable: true,\n      flexGrow: 1,\n      isSorted: lastSelectedSortColum == \"activityEventName\",\n      isSortedDescending: isSelectedSortColumDesc && lastSelectedSortColum == \"activityEventName\",\n    },\n    {\n      key: \"contributionType\",\n      name: \"Type\",\n      ariaLabel: \"The type\",\n      fieldName: \"contributionType\",\n      minWidth: 50,\n      isResizable: true,\n      flexGrow: 1,\n    },\n    {\n      key: \"activityEventType\",\n      name: \"Activity/Event Type\",\n      ariaLabel: \"The activity/event type.\",\n      fieldName: \"activityEventType\",\n      minWidth: 90,\n      isResizable: true,\n      flexGrow: 1,\n    },\n    {\n      key: \"awardCategory\",\n      name: \"Award Category\",\n      ariaLabel: \"The award category\",\n      fieldName: \"awardCategory\",\n      minWidth: 90,\n      isResizable: true,\n      flexGrow: 1,\n      isSorted: lastSelectedSortColum == \"awardCategory\",\n      isSortedDescending: isSelectedSortColumDesc && lastSelectedSortColum == \"awardCategory\",\n    },\n    {\n      key: \"technologyArea\",\n      name: \"Primary Technology Area\",\n      ariaLabel: \"The technology area\",\n      fieldName: \"technologyArea\",\n      minWidth: 120,\n      isResizable: true,\n      flexGrow: 1,\n      isSorted: lastSelectedSortColum == \"technologyArea\",\n      isSortedDescending: isSelectedSortColumDesc && lastSelectedSortColum == \"technologyArea\",\n    },\n    {\n      key: \"quantity\",\n      name: \"Quantity\",\n      ariaLabel: \"The quantity\",\n      fieldName: \"quantity\",\n      minWidth: 50,\n      isResizable: true,\n      flexGrow: 1,\n      isSorted: lastSelectedSortColum == \"quantity\",\n      isSortedDescending: isSelectedSortColumDesc && lastSelectedSortColum == \"quantity\",\n    },\n    {\n      key: \"liveStreamViews\",\n      name: \"Live Stream Views\",\n      ariaLabel: \"The liveStreamViews\",\n      fieldName: \"liveStreamViews\",\n      minWidth: 50,\n      flexGrow: 1,\n      isResizable: true,\n      isSorted: lastSelectedSortColum == \"liveStreamViews\",\n      isSortedDescending: isSelectedSortColumDesc && lastSelectedSortColum == \"liveStreamViews\",\n    },\n    {\n      key: \"liveOnlineViews\",\n      name: \"Live Online Views\",\n      ariaLabel: \"The liveOnlineViews\",\n      fieldName: \"liveOnlineViews\",\n      minWidth: 50,\n      flexGrow: 1,\n      isResizable: true,\n      isSorted: lastSelectedSortColum == \"liveOnlineViews\",\n      isSortedDescending: isSelectedSortColumDesc && lastSelectedSortColum == \"liveOnlineViews\",\n    },\n    {\n      key: \"inPersonAttendees\",\n      name: \"In-Person Attendees\",\n      ariaLabel: \"The inPersonAttendees\",\n      fieldName: \"inPersonAttendees\",\n      minWidth: 50,\n      flexGrow: 1,\n      isResizable: true,\n      isSorted: lastSelectedSortColum == \"inPersonAttendees\",\n      isSortedDescending: isSelectedSortColumDesc && lastSelectedSortColum == \"inPersonAttendees\",\n    },\n    {\n      key: \"onDemandViews\",\n      name: \"On-Demand Views\",\n      ariaLabel: \"The onDemandViews\",\n      fieldName: \"onDemandViews\",\n      minWidth: 50,\n      flexGrow: 1,\n      isResizable: true,\n      isSorted: lastSelectedSortColum == \"onDemandViews\",\n      isSortedDescending: isSelectedSortColumDesc && lastSelectedSortColum == \"onDemandViews\",\n    },\n    {\n      key: \"subscriberBase\",\n      name: \"Subscriber Base\",\n      ariaLabel: \"The aubscriberBase\",\n      fieldName: \"subscriberBase\",\n      minWidth: 50,\n      flexGrow: 1,\n      isResizable: true,\n      isSorted: lastSelectedSortColum == \"subscriberBase\",\n      isSortedDescending: isSelectedSortColumDesc && lastSelectedSortColum == \"subscriberBase\",\n    },\n    {\n      key: \"numberOfSessions\",\n      name: \"Number Of Sessions\",\n      ariaLabel: \"The numberOfSessions\",\n      fieldName: \"numberOfSessions\",\n      minWidth: 50,\n      flexGrow: 1,\n      isResizable: true,\n      isSorted: lastSelectedSortColum == \"numberOfSessions\",\n      isSortedDescending: isSelectedSortColumDesc && lastSelectedSortColum == \"numberOfSessions\",\n    },\n    {\n      key: \"numberOfViews\",\n      name: \"Number Of Views\",\n      ariaLabel: \"The numberOfViews\",\n      fieldName: \"numberOfViews\",\n      minWidth: 50,\n      flexGrow: 1,\n      isResizable: true,\n      isSorted: lastSelectedSortColum == \"numberOfViews\",\n      isSortedDescending: isSelectedSortColumDesc && lastSelectedSortColum == \"numberOfViews\",\n    },\n  ];\n  const addFilterValue = (filter: IFilterValue): ActivitiesEventsActionTypes => {\n    setTechAreaGroupsRemoved([\"\"]);\n    return dispatch(addActivitiesEventsFilterValue(filter, true));\n  };\n  const removeFilterValue = (filter: IFilterValue): ActivitiesEventsActionTypes =>\n    dispatch(removeActivitiesEventsFilterValue(filter, true));\n  const removeMultipleFilterValues = (filters: IFilterValue[]): ActivitiesEventsActionTypes =>\n    dispatch(removeMultipleActivitiesEventsFilterValues(filters, true));\n  const getSelectedActivityEvent = (\n    selectedItem: IApplicationFormActivityEvent\n  ): ActivitiesEventsActionTypes =>\n    dispatch(fetchActivityEventById(selectedItem.activityEventId, selectedItem.contributionType));\n  const onItemClicked = (selectedItem: IApplicationFormActivityEvent): void => {\n    setIsActivityEventDetailsPanelOpen(true);\n    getSelectedActivityEvent(selectedItem);\n  };\n  const onTechAreaGroupFilterValuesRemovedOrAdded = (filtersNotSelected: IFilterValue[]): void =>\n    setTechAreaGroupsRemoved(map(filtersNotSelected, (f) => f.value));\n  const techAreasByAreaGroup = useSelector(() =>\n    selectTechnologyAreaFilterValuesByAreaGroups(techAreaGroupsRemoved)\n  );\n  const techAreasToRemove = techAreasByAreaGroup.filter((fl) =>\n    selectedFilterValues.some((sfv) => sfv.value === fl.value)\n  );\n  const onRenderRow = (props?: IDetailsRowProps, defaultRender?: any): React.ReactElement => {\n    const selectedItem = props && (props.item as IApplicationFormActivityEvent);\n    return defaultRender({\n      ...props,\n      item: selectedItem,\n      onClick: () => !!selectedItem && onItemClicked(selectedItem),\n    });\n  };\n  const onRenderColumn = (\n    item: IApplicationFormActivityEvent,\n    index?: number,\n    column?: IColumn\n  ): React.ReactElement => {\n    const fieldContent = item[column?.fieldName as keyof IApplicationFormActivityEvent];\n    switch (column?.key) {\n      case \"additionalTechnologyAreas\":\n      case \"targetAudiences\":\n        return <span>{(fieldContent as string[]).join(\", \")}</span>;\n      default:\n        return <span>{fieldContent}</span>;\n    }\n  };\n  const handleSearch = (\n    selectedFilterValues: IFilterValue[],\n    page: number,\n    pageSize: number,\n    sortFieldName?: string,\n    isDescendingSort?: boolean\n  ): void => {\n    !!userProfileInfo?.applicationFormId &&\n      dispatch(\n        fetchHighlightedActivitiesEventsBySelectedApplicationId(\n          Number(userProfileInfo?.applicationFormId),\n          String(page),\n          String(pageSize),\n          selectedFilterValues,\n          TenantTypesEnum.MVP,\n          sortFieldName,\n          isDescendingSort\n        )\n      );\n  };\n  const onSortColumn = (column?: IColumn) => {\n    const fieldNamesToSort = [\n      \"activityEventName\",\n      \"awardCategory\",\n      \"technologyArea\",\n      \"quantity\",\n      \"liveStreamViews\",\n      \"liveOnlineViews\",\n      \"inPersonAttendees\",\n      \"onDemandViews\",\n      \"subscriberBase\",\n      \"numberOfSessions\",\n      \"numberOfViews\",\n    ];\n    if (column && column.fieldName && fieldNamesToSort.includes(column.fieldName)) {\n      const fieldName = column.fieldName;\n      const isDesc = column.isSortedDescending ?? false;\n      setLastSelectedSortColumn(fieldName);\n      setIsSelectedSortColumnDesc(!isDesc);\n      handleSearch(selectedFilterValues, currentPage, pageSize, fieldName, isDesc);\n    }\n  };\n\n  /**\n   * Call to reset filter values.\n   * @method\n   */\n  const resetFilterValues = (): void => {\n    dispatch(resetActivitiesEventsFilterValues(true));\n\n    handleSearch(defaultActivitiesEventsFilterValues, 1, defaultListingPageSize);\n  };\n\n  useEffect(() => {\n    dispatch(getTechnologyAreas(TenantTypesEnum.MVP));\n    dispatch(getActivityEventTypes(TenantTypesEnum.MVP));\n  }, []);\n\n  useEffect(() => {\n    if (techAreasToRemove.length > 0) {\n      removeMultipleFilterValues(techAreasToRemove);\n    }\n  }, [techAreasToRemove]);\n\n  useEffect(() => {\n    handleSearch(selectedFilterValues, currentPage, pageSize);\n  }, [currentPage, pageSize]);\n\n  return !!isLoading ? (\n    <Spinner size={SpinnerSize.large} />\n  ) : !!errorMessage ? (\n    <p>{errorMessage}</p>\n  ) : (\n    <Stack>\n      <ContainerWrapper>\n        <Stack styles={headerStackStyles}>\n          <Text styles={headerTextStyles}>Highlighted Activities/Events</Text>\n        </Stack>\n        <Stack styles={eventsAndActivityBodyContainerStackStyles} tokens={bodyContainerStackTokens}>\n          <Stack horizontal horizontalAlign=\"space-between\" tokens={{}}>\n            <StackItem styles={{ root: { flexGrow: \"1\" } }}>\n              <>\n                <SideBarContainer\n                  addFilterValue={addFilterValue}\n                  removeFilterValue={removeFilterValue}\n                  updateFilterValue={() => {\n                    return;\n                  }} // this prop is required, but we don't need it for this instance.\n                  onTechAreaGroupFilterValueChanged={onTechAreaGroupFilterValuesRemovedOrAdded}\n                  selectedFilterValues={selectedFilterValues}\n                  filterFields={mvpActivitiesEventsFilterFields}\n                />\n                <Stack horizontal tokens={buttonStackTokens}>\n                  <PrimaryButton\n                    styles={filterButtonStyles}\n                    text=\"Apply\"\n                    onClick={(): void => handleSearch(selectedFilterValues, 1, pageSize)} // Reset to page 1, since we are applying new filters\n                  />\n                  <PrimaryButton\n                    styles={filterButtonStyles}\n                    text=\"Reset\"\n                    onClick={(): void => resetFilterValues()}\n                  />\n                </Stack>\n              </>\n            </StackItem>\n            <StackItem styles={{ root: { flexGrow: \"3\" } }}>\n              <DetailsList\n                items={highlightedActivitiesEvents || []}\n                columns={columns}\n                selectionMode={SelectionMode.none}\n                getKey={(item: any): string =>\n                  `${(item as IApplicationFormActivityEvent).activityEventId}`\n                }\n                setKey=\"none\"\n                layoutMode={DetailsListLayoutMode.justified}\n                isHeaderVisible={true}\n                onRenderRow={onRenderRow}\n                onRenderItemColumn={onRenderColumn}\n                enterModalSelectionOnTouch={true}\n                styles={highActivitiesEventsDetailsHeaderStyles}\n                onColumnHeaderClick={(e, column) => {\n                  onSortColumn(column);\n                }}\n              />\n              <PaginationRow>\n                <Pagination\n                  total={totalCount}\n                  onChange={(page): void => {\n                    dispatch(updateActivitiesEventsCurrentPage(page, true));\n                  }}\n                  showTitle={false}\n                  current={currentPage}\n                  prevIcon={ChevronIcon(\"ChevronLeft\")}\n                  nextIcon={ChevronIcon(\"ChevronRight\")}\n                  pageSize={pageSize}\n                  showSizeChanger\n                />\n                <Dropdown\n                  options={[\n                    { key: 16, text: \"Show 16 results\" },\n                    { key: 32, text: \"Show 32 results\" },\n                    { key: 48, text: \"Show 48 results\" },\n                  ]}\n                  onChange={(_e, op): void => {\n                    dispatch(updateActivitiesEventsPageSize(op?.key as number, true));\n                  }}\n                  selectedKey={pageSize}\n                  className=\"pagination-dropdown\"\n                  title=\"Page Size Dropdown\"\n                />\n              </PaginationRow>\n            </StackItem>\n          </Stack>\n        </Stack>\n      </ContainerWrapper>\n      {userProfileInfo && (\n        <ActivityEventDetailsSidePanel\n          isPanelOpen={isActivityEventDetailsPanelOpen}\n          setIsPanelOpen={setIsActivityEventDetailsPanelOpen}\n        />\n      )}\n    </Stack>\n  );\n};\n\nexport default HighlightedActivitiesEvents;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { ReactElement } from \"react\";\n\nimport { useSelector } from \"react-redux\";\nimport { Link } from \"react-router-dom\";\n\nimport { Label, Stack, StackItem, Text } from \"@fluentui/react\";\n\nimport {\n  bodyColumnStackItemStyles,\n  bodyContainerStackStyles,\n  bodyContainerStackTokens,\n  bodyRowStackStyles,\n  headerStackStyles,\n  headerTextStyles,\n  labelStyles,\n  ContainerWrapper,\n} from \"Components/Common/SharedTableStyles.styles\";\nimport { TenantTypesEnum } from \"Constants/TenantTypes\";\nimport { getUserProfileInfoBySelectedApplicationId } from \"Dataflows/ApplicationDetails/ApplicationDetailsSelector\";\n\nconst Nomination = (): ReactElement => {\n  const profileInfo = useSelector(getUserProfileInfoBySelectedApplicationId);\n  const nominatorForm = profileInfo?.nominatorForm;\n  // As we know the current admin user has MVP access, prefer the nominator's MVP profile.\n  const userProfileTenant = nominatorForm?.userProfileTenants.some(\n    (tenant) => tenant.toLowerCase() == TenantTypesEnum.MVP.toLowerCase()\n  )\n    ? TenantTypesEnum.MVP.toLowerCase()\n    : nominatorForm?.userProfileTenants[0]?.toLowerCase();\n\n  return (\n    <Stack>\n      <ContainerWrapper>\n        <Stack styles={headerStackStyles}>\n          <Text styles={headerTextStyles}>Nominator Information</Text>\n        </Stack>\n        <Stack styles={bodyContainerStackStyles} tokens={bodyContainerStackTokens}>\n          <Stack horizontal styles={bodyRowStackStyles}>\n            <StackItem styles={bodyColumnStackItemStyles}>\n              <Label styles={labelStyles}>First Name</Label>\n              <Text>{nominatorForm?.firstName}</Text>\n            </StackItem>\n            <StackItem styles={bodyColumnStackItemStyles}>\n              <Label styles={labelStyles}>Last Name</Label>\n              <Text>{nominatorForm?.lastName}</Text>\n            </StackItem>\n          </Stack>\n          {nominatorForm?.microsoftEmail && nominatorForm?.microsoftEmail && (\n            <Stack horizontal styles={bodyRowStackStyles}>\n              <StackItem styles={bodyColumnStackItemStyles}>\n                <Label styles={labelStyles}>Email Address</Label>\n                <Text>{nominatorForm?.microsoftEmail}</Text>\n              </StackItem>\n              <StackItem styles={bodyColumnStackItemStyles}>\n                <Label styles={labelStyles}>Role at Microsoft</Label>\n                <Text>{nominatorForm?.microsoftRole}</Text>\n              </StackItem>\n            </Stack>\n          )}\n          {nominatorForm?.userProfileId && (\n            <Stack horizontal styles={bodyRowStackStyles}>\n              <StackItem styles={bodyColumnStackItemStyles}>\n                <Label styles={labelStyles}>Admin Center Profile Link</Label>\n                <Link\n                  to={`/${userProfileTenant?.toLowerCase()}/details/${\n                    nominatorForm?.userProfileId\n                  }`}\n                >\n                  {userProfileTenant?.toUpperCase()} User Profile {nominatorForm?.userProfileId}\n                </Link>\n              </StackItem>\n            </Stack>\n          )}\n        </Stack>\n      </ContainerWrapper>\n      <ContainerWrapper>\n        <Stack styles={headerStackStyles}>\n          <Text styles={headerTextStyles}>Nominee Information</Text>\n        </Stack>\n        <Stack styles={bodyContainerStackStyles} tokens={bodyContainerStackTokens}>\n          {nominatorForm?.nominatorReasons.map((reason) => (\n            <Stack key={reason.id} horizontal styles={bodyRowStackStyles}>\n              <StackItem>\n                <Label styles={labelStyles}>{reason.questionText}</Label>\n                <Text style={{ wordBreak: \"break-word\" }}>{reason.answerText}</Text>\n              </StackItem>\n            </Stack>\n          ))}\n        </Stack>\n      </ContainerWrapper>\n    </Stack>\n  );\n};\n\nexport default Nomination;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { useEffect, ReactElement } from \"react\";\n\nimport { useDispatch, useSelector } from \"react-redux\";\n\nimport _ from \"lodash\";\n\nimport { Label, Stack, StackItem, Text } from \"@fluentui/react\";\n\nimport {\n  bodyColumnStackItemStyles,\n  bodyContainerStackStyles,\n  bodyContainerStackTokens,\n  bodyRowStackStyles,\n  headerStackStyles,\n  headerTextStyles,\n  labelStyles,\n  ContainerWrapper,\n} from \"Components/Common/SharedTableStyles.styles\";\nimport { TenantTypesEnum } from \"Constants/TenantTypes\";\nimport { fetchApplicationQuestionsBySelectedApplicationId } from \"Dataflows/ApplicationDetails/ApplicationDetailsAction\";\nimport {\n  getApplicationQuestionsBySelectedApplicationId,\n  getIsLoadingApplicationQuestionsBySelectedApplicationId,\n  getUserProfileInfoBySelectedApplicationId,\n} from \"Dataflows/ApplicationDetails/ApplicationDetailsSelector\";\nimport { IApplicationQuestionResponse } from \"Interfaces/Application/IApplicationQuestionResponse\";\nimport { formatDate } from \"Utility/FormatHelper\";\nimport { GetApplicationQuestionsGroupBySectionAndByQuestionId } from \"Utility/Utils\";\nimport { OrderBy, QuestionsFormSectionStringEnum } from \"Constants/ApplicationConstants\";\n\nconst ProfileInformation = (): ReactElement => {\n  const dispatch = useDispatch();\n  const applicationQuestions: IApplicationQuestionResponse[] | undefined = useSelector(\n    getApplicationQuestionsBySelectedApplicationId\n  );\n  const isLoading = useSelector(getIsLoadingApplicationQuestionsBySelectedApplicationId);\n  const userProfileInfo = useSelector(getUserProfileInfoBySelectedApplicationId);\n  const applicationQuestionsGroupBySectionAndByQuestionId =\n    GetApplicationQuestionsGroupBySectionAndByQuestionId(applicationQuestions);\n  const sortedApplicationQuestions = _.orderBy(\n    applicationQuestionsGroupBySectionAndByQuestionId[\n      QuestionsFormSectionStringEnum.PROFILE_INFORMATION\n    ],\n    [OrderBy]\n  );\n\n  useEffect(() => {\n    if (!applicationQuestions && !isLoading && !!userProfileInfo?.applicationFormId) {\n      dispatch(\n        fetchApplicationQuestionsBySelectedApplicationId(\n          userProfileInfo.applicationFormId,\n          TenantTypesEnum.MVP\n        )\n      );\n    }\n  }, [applicationQuestions, dispatch, isLoading]);\n  const profileInfo = useSelector(getUserProfileInfoBySelectedApplicationId);\n  return (\n    <Stack>\n      <ContainerWrapper>\n        <Stack styles={headerStackStyles}>\n          <Text styles={headerTextStyles}>Profile Information</Text>\n        </Stack>\n        <Stack styles={bodyContainerStackStyles} tokens={bodyContainerStackTokens}>\n          <Stack horizontal styles={bodyRowStackStyles}>\n            <StackItem styles={bodyColumnStackItemStyles}>\n              <Label styles={labelStyles}>First Name</Label>\n              <Text>{profileInfo?.firstName}</Text>\n            </StackItem>\n            <StackItem styles={bodyColumnStackItemStyles}>\n              <Label styles={labelStyles}>Last Name</Label>\n              <Text>{profileInfo?.lastName}</Text>\n            </StackItem>\n          </Stack>\n          <Stack horizontal styles={bodyRowStackStyles}>\n            <StackItem styles={bodyColumnStackItemStyles}>\n              <Label styles={labelStyles}>Title</Label>\n              <Text>{profileInfo?.titleName}</Text>\n            </StackItem>\n            <StackItem styles={bodyColumnStackItemStyles}>\n              <Label styles={labelStyles}>Date of birth</Label>\n              {!!profileInfo?.dateOfBirth ? (\n                <Text>{formatDate(new Date(profileInfo?.dateOfBirth))}</Text>\n              ) : (\n                <></>\n              )}\n            </StackItem>\n          </Stack>\n          <Stack horizontal styles={bodyRowStackStyles}>\n            <StackItem styles={bodyColumnStackItemStyles}>\n              <Label styles={labelStyles}>Primary Email Address</Label>\n              <Text>{profileInfo?.siteEmailAddress}</Text>\n            </StackItem>\n            <StackItem styles={bodyColumnStackItemStyles}>\n              <Label styles={labelStyles}>Preferred Contact Email Address</Label>\n              <Text>{profileInfo?.preferredContactEmailAddress}</Text>\n            </StackItem>\n          </Stack>\n          <Stack horizontal styles={bodyRowStackStyles}>\n            <StackItem styles={bodyColumnStackItemStyles}>\n              <Label styles={labelStyles}>Gender</Label>\n              <Text>{profileInfo?.genderName}</Text>\n            </StackItem>\n            <StackItem styles={bodyColumnStackItemStyles}>\n              <Label styles={labelStyles}>Pronoun</Label>\n              <Text>{profileInfo?.genderPronounPreferenceName}</Text>\n            </StackItem>\n          </Stack>\n          <Stack horizontal styles={bodyRowStackStyles}>\n            <StackItem styles={bodyColumnStackItemStyles}>\n              <Label styles={labelStyles}>Country/Region</Label>\n              <Text>{profileInfo?.addressCountryOrRegionName}</Text>\n            </StackItem>\n            <StackItem styles={bodyColumnStackItemStyles}>\n              <Label styles={labelStyles}>State/Province</Label>\n              <Text>{profileInfo?.addressStateOrProvince}</Text>\n            </StackItem>\n          </Stack>\n          <Stack horizontal styles={bodyRowStackStyles}>\n            <StackItem styles={bodyColumnStackItemStyles}>\n              <Label styles={labelStyles}>Phone Code</Label>\n              <Text>{profileInfo?.primaryPhoneCountryOrRegionName}</Text>\n            </StackItem>\n            <StackItem styles={bodyColumnStackItemStyles}>\n              <Label styles={labelStyles}>Phone Number</Label>\n              <Text>{profileInfo?.primaryPhone}</Text>\n            </StackItem>\n          </Stack>\n          <Stack horizontal styles={bodyRowStackStyles}>\n            <StackItem styles={bodyColumnStackItemStyles}>\n              <Label styles={labelStyles}>Languages</Label>\n              <Text>{profileInfo?.languages?.join(\", \")}</Text>\n            </StackItem>\n          </Stack>\n          <Stack horizontal styles={bodyRowStackStyles}>\n            <StackItem styles={bodyColumnStackItemStyles}>\n              <Label styles={labelStyles}>Preferred Programming Language</Label>\n              <Text>{profileInfo?.userProfileProgramLanguage?.join(\", \")}</Text>\n            </StackItem>\n            <StackItem styles={bodyColumnStackItemStyles}>\n              <Label styles={labelStyles}>Functional Role</Label>\n              <Text>{profileInfo?.userProfileFunctionalRole?.join(\", \")}</Text>\n            </StackItem>\n          </Stack>\n          {profileInfo?.userProfileSocialNetwork.map((x) => (\n            <Stack key={x.id} horizontal styles={bodyRowStackStyles}>\n              <StackItem styles={bodyColumnStackItemStyles}>\n                <Label styles={labelStyles}>Network</Label>\n                <Text>{x?.socialNetworkName}</Text>\n              </StackItem>\n              <StackItem styles={bodyColumnStackItemStyles}>\n                <Label styles={labelStyles}>Link/URL</Label>\n                <Text>{x?.socialNetworkImageLink}</Text>\n              </StackItem>\n            </Stack>\n          ))}\n          <Stack>\n            {sortedApplicationQuestions.map((question) => (\n              <StackItem key={question.questionId}>\n                <Label styles={labelStyles}>{question.questionText}</Label>\n                <Text>{question.questionResponseText}</Text>\n              </StackItem>\n            ))}\n          </Stack>\n          <Stack>\n            <StackItem>\n              <Label styles={labelStyles}>\n                {profileInfo?.leveragingNetworkAndInfluenceQuestion}\n              </Label>\n              <Text>{profileInfo?.leveragingNetworkAndInfluenceQuestionResponse}</Text>\n            </StackItem>\n          </Stack>\n        </Stack>\n      </ContainerWrapper>\n    </Stack>\n  );\n};\n\nexport default ProfileInformation;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { FontWeights, IStackItemStyles, ITextStyles } from \"@fluentui/react\";\n\nexport const flexColumnStackStyles: IStackItemStyles = {\n  root: {\n    display: \"flex\",\n    flexDirection: \"column\",\n  },\n};\n\nexport const tfaTitleStyles: ITextStyles = {\n  root: {\n    fontWeight: FontWeights.semibold,\n    fontSize: \"1rem\",\n    margin: \"0.125rem 0\",\n  },\n};\n\nexport const tfaTextStyles: ITextStyles = {\n  root: {\n    margin: \"0.125rem 0\",\n  },\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { useEffect, ReactElement } from \"react\";\n\nimport { useForm } from \"react-hook-form\";\nimport { useDispatch, useSelector } from \"react-redux\";\n\nimport * as Yup from \"yup\";\n\nimport { Stack, StackItem, Text } from \"@fluentui/react\";\nimport { yupResolver } from \"@hookform/resolvers/yup\";\n\nimport TextFieldController from \"Components/ReactHookForm/TextFieldController/TextFieldController\";\nimport { SidePanel } from \"Components/SidePanel/SidePanel\";\nimport { OperationStatus } from \"Constants/OperationStatus\";\nimport { flagApplication, flagApplicationReset } from \"Dataflows/Application/ApplicationAction\";\nimport {\n  getFlagApplicationErrorMessage,\n  getFlagApplicationStatus,\n} from \"Dataflows/Application/ApplicationSelector\";\n\nimport {\n  flexColumnStackStyles,\n  tfaTextStyles,\n  tfaTitleStyles,\n} from \"./ApplicationFlaggingSidePanel.styles\";\nimport { IApplicationFlaggingSidePanelProps } from \"./IApplicationFlaggingSidePanel\";\nimport ComboBoxController from \"Components/ReactHookForm/ComboBoxController/ComboBoxController\";\nimport { REASON_FOR_FLAG_DROPDOWN_OPTIONS } from \"Constants/ApplicationConstants\";\n\nexport const ApplicationFlaggingSidePanel = (\n  props: IApplicationFlaggingSidePanelProps\n): ReactElement => {\n  const { isPanelOpen, setIsPanelOpen, applicationFormId, applicationTechnologyFocusAreas } = props;\n  const dispatch = useDispatch();\n\n  const flagApplicationErrorMessage = useSelector(getFlagApplicationErrorMessage);\n  const flagApplicationStatus = useSelector(getFlagApplicationStatus);\n\n  const {\n    control,\n    handleSubmit,\n    reset,\n    formState: { errors },\n  } = useForm({\n    resolver: yupResolver(\n      Yup.object().shape({\n        justification: Yup.string().required(\"Justification is required\").max(3900),\n        flagReasonId: Yup.string().required(\"Please select the reason\"),\n      })\n    ),\n  });\n\n  // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n  const save = () =>\n    handleSubmit((formData) => {\n      dispatch(flagApplication(applicationFormId, formData.justification, formData.flagReasonId));\n    });\n\n  const dismissPanel = (): void => {\n    setIsPanelOpen(false);\n    dispatch(flagApplicationReset());\n    reset();\n  };\n\n  useEffect(() => {\n    if (flagApplicationStatus === OperationStatus.Succeeded) {\n      dismissPanel();\n    }\n  }, [flagApplicationStatus]);\n\n  /**\n   * filtered out default record(any)\n   */\n  const flagReasonOption = REASON_FOR_FLAG_DROPDOWN_OPTIONS.filter((option: any) => option.key);\n\n  return (\n    <form onSubmit={save()}>\n      <SidePanel\n        isOpen={isPanelOpen}\n        title=\"Flag for Additional Review\"\n        saveButtonLabel=\"Save\"\n        error={flagApplicationErrorMessage}\n        disableActions={flagApplicationStatus === OperationStatus.Pending}\n        onDismiss={dismissPanel}\n        onSave={save()}\n      >\n        <Stack tokens={{ childrenGap: \"1rem\" }}>\n          {applicationTechnologyFocusAreas &&\n            applicationTechnologyFocusAreas.length > 0 &&\n            applicationTechnologyFocusAreas.map((tfa) => (\n              <StackItem\n                key={applicationTechnologyFocusAreas.indexOf(tfa)}\n                styles={flexColumnStackStyles}\n              >\n                <Text styles={tfaTitleStyles}>{tfa.technologyFocusAreaName}</Text>\n                <Text styles={tfaTextStyles}>Score: {tfa.technologyFocusAreaScore}</Text>\n                {tfa.technologyFocusAreaStatus && (\n                  <Text styles={tfaTextStyles}>\n                    Status: {tfa.technologyFocusAreaStatus.replace(/-/g, \" \")}\n                  </Text>\n                )}\n              </StackItem>\n            ))}\n          <StackItem>\n            <ComboBoxController\n              control={control}\n              errors={errors}\n              placeholderText=\"Pick reason from the drop-down list\"\n              inputName=\"flagReasonId\"\n              isRequired={true}\n              labelDisplayName=\"Reason for Flag\"\n              options={flagReasonOption}\n            />\n          </StackItem>\n          <StackItem>\n            <TextFieldController\n              inputName=\"justification\"\n              control={control}\n              errors={errors}\n              isRequired\n              isMultiline\n              hasTooltip\n              labelDisplayName=\"Justification\"\n              toolTipDisplayText=\"Please explain why this application needs additional review\"\n              characterCountLimit={3900}\n            />\n          </StackItem>\n        </Stack>\n      </SidePanel>\n    </form>\n  );\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { IChoiceGroupStyles, IIconStyles } from \"@fluentui/react\";\n\n/**\n * Styling for RadioSelect.\n * @type {Partial<IChoiceGroupStyles>}\n */\nexport const choiceGroupStyles: Partial<IChoiceGroupStyles> = {\n  label: {\n    width: \"100%\",\n  },\n};\n\n/**\n * Styling for Icon control.\n * @type {Partial<IIconStyles>}\n * @param {boolean} hasAsterisk The value to determine if control label has required asterisk.\n */\nexport const getIconStyles: (hasAsterisk: boolean) => Partial<IIconStyles> = (hasAsterisk) => {\n  return { root: { paddingLeft: !hasAsterisk ? \"10px\" : \"\" } };\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React from \"react\";\n\nimport { Controller } from \"react-hook-form\";\n\nimport { ChoiceGroup, Icon, Label, TooltipHost } from \"@fluentui/react\";\n\nimport { FlexCol, FlexRow } from \"Components/Common/Layout/Layout\";\nimport { HookErrorMessage } from \"Components/ReactHookForm/HookErrorMessage/HookErrorMessage\";\n\nimport { IRadioSelectControllerProps } from \"./IRadioSelectControllerProps\";\nimport { choiceGroupStyles, getIconStyles } from \"./RadioSelectController.styles\";\n\n/**\n * RadioSelectController.\n * @component\n * @param {IRadioSelectControllerProps} props The component props.\n * @returns {React.ReactElement} RadioSelectController.\n */\nconst RadioSelectController: (props: IRadioSelectControllerProps) => React.ReactElement = (\n  props: IRadioSelectControllerProps\n): React.ReactElement => {\n  const {\n    inputName,\n    labelDisplayName,\n    toolTipDisplayText,\n    control,\n    isDisabled,\n    errors,\n    options,\n    onChange,\n    isRequired,\n  } = props;\n\n  return (\n    <FlexCol>\n      <FlexRow>\n        <Label htmlFor={inputName} required={isRequired}>\n          {labelDisplayName}\n        </Label>\n        {!!toolTipDisplayText && (\n          <TooltipHost id={inputName} content={toolTipDisplayText || labelDisplayName}>\n            <Icon\n              aria-label=\"information\"\n              iconName=\"info\"\n              role=\"img\"\n              styles={getIconStyles(!!isRequired)}\n              tabIndex={0}\n            />\n          </TooltipHost>\n        )}\n      </FlexRow>\n      <FlexRow>\n        <Controller\n          name={inputName}\n          control={control}\n          //error={errors}\n          render={({ field }): JSX.Element => {\n            return (\n              <ChoiceGroup\n                {...field}\n                aria-labelledby={labelDisplayName}\n                styles={choiceGroupStyles}\n                disabled={isDisabled}\n                selectedKey={field.value}\n                onChange={(e, option): void => {\n                  field.onChange(option?.key);\n                  !!onChange && !!option && onChange(e, option);\n                }}\n                defaultSelectedKey={\"0\"}\n                options={options}\n              />\n            );\n          }}\n        />\n      </FlexRow>\n      <HookErrorMessage errors={errors} inputName={inputName} />\n    </FlexCol>\n  );\n};\n\nexport default RadioSelectController;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { useEffect, ReactElement } from \"react\";\n\nimport { useForm } from \"react-hook-form\";\nimport { useDispatch, useSelector } from \"react-redux\";\n\nimport * as Yup from \"yup\";\n\nimport { Stack, StackItem } from \"@fluentui/react\";\nimport { yupResolver } from \"@hookform/resolvers/yup\";\n\nimport RadioSelectController from \"Components/ReactHookForm/RadioSelectController/RadioSelectController\";\nimport TextFieldController from \"Components/ReactHookForm/TextFieldController/TextFieldController\";\nimport { SidePanel } from \"Components/SidePanel/SidePanel\";\nimport { OperationStatus } from \"Constants/OperationStatus\";\nimport { TenantTypesEnum } from \"Constants/TenantTypes\";\nimport { scoreApplication, scoreApplicationReset } from \"Dataflows/Application/ApplicationAction\";\nimport {\n  getScoreApplicationErrorMessage,\n  getScoreApplicationStatus,\n} from \"Dataflows/Application/ApplicationSelector\";\n\nimport { IApplicationScoringSidePanelProps } from \"./IApplicationScoringSidePanel\";\n\nexport const ApplicationScoringSidePanel = (\n  props: IApplicationScoringSidePanelProps\n): ReactElement => {\n  const { isPanelOpen, setIsPanelOpen, technologyAreaName, applicationFormId, onSubmitSuccess } =\n    props;\n  const dispatch = useDispatch();\n\n  const scoreApplicationErrorMessage = useSelector(getScoreApplicationErrorMessage);\n  const scoreApplicationStatus = useSelector(getScoreApplicationStatus);\n\n  const {\n    control,\n    handleSubmit,\n    reset,\n    formState: { errors },\n  } = useForm({\n    resolver: yupResolver(\n      Yup.object().shape({\n        score: Yup.number().typeError(\"Score must be a number\").required(\"Score is required\"),\n        justification: Yup.string().required(\"Justification is required\").max(3900),\n      })\n    ),\n  });\n\n  // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n  const save = () =>\n    handleSubmit((formData) => {\n      dispatch(\n        scoreApplication(\n          applicationFormId,\n          technologyAreaName,\n          formData.score,\n          formData.justification,\n          TenantTypesEnum.MVP\n        )\n      );\n    });\n\n  const dismissPanel = (): void => {\n    setIsPanelOpen(false);\n    dispatch(scoreApplicationReset());\n    reset();\n  };\n\n  useEffect(() => {\n    if (scoreApplicationStatus === OperationStatus.Succeeded) {\n      dismissPanel();\n      onSubmitSuccess();\n    }\n  }, [scoreApplicationStatus]);\n\n  const scoreOptions = [\n    {\n      key: \"1\",\n      text: \"1: Candidate's technical expertise is far below minimum program requirements.\",\n    },\n    {\n      key: \"2\",\n      text: \"2: Candidate's technical expertise does not meet the program requirements.\",\n    },\n    {\n      key: \"3\",\n      text: \"3: Candidate's technical expertise meets the program requirements.\",\n    },\n    {\n      key: \"4\",\n      text: \"4: Candidate's technical expertise is above program requirements.\",\n    },\n    {\n      key: \"5\",\n      text: \"5: Candidate is highly technical, far above program requirements.\",\n    },\n  ];\n\n  return (\n    <form onSubmit={save()}>\n      <SidePanel\n        isOpen={isPanelOpen}\n        title={`Review ${technologyAreaName}`}\n        saveButtonLabel=\"Save\"\n        error={scoreApplicationErrorMessage}\n        disableActions={scoreApplicationStatus === OperationStatus.Pending}\n        onDismiss={dismissPanel}\n        onSave={save()}\n      >\n        <Stack tokens={{ childrenGap: \"1rem\" }}>\n          <StackItem>\n            <RadioSelectController\n              inputName=\"score\"\n              control={control}\n              errors={errors}\n              isRequired\n              labelDisplayName=\"Score\"\n              options={scoreOptions}\n            />\n          </StackItem>\n          <StackItem>\n            <TextFieldController\n              inputName=\"justification\"\n              control={control}\n              errors={errors}\n              isRequired\n              isMultiline\n              hasTooltip\n              labelDisplayName=\"Justification\"\n              toolTipDisplayText=\"Please let us know why you chose this score for the candidate.\"\n              characterCountLimit={3900}\n            />\n          </StackItem>\n        </Stack>\n      </SidePanel>\n    </form>\n  );\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { useEffect, useState, ReactElement } from \"react\";\n\nimport { useFieldArray, useForm } from \"react-hook-form\";\nimport { useDispatch, useSelector } from \"react-redux\";\n\nimport * as Yup from \"yup\";\n\nimport { Checkbox, Stack, StackItem } from \"@fluentui/react\";\nimport { yupResolver } from \"@hookform/resolvers/yup\";\n\nimport ComboBoxController from \"Components/ReactHookForm/ComboBoxController/ComboBoxController\";\nimport TextFieldController from \"Components/ReactHookForm/TextFieldController/TextFieldController\";\nimport { SidePanel } from \"Components/SidePanel/SidePanel\";\nimport { TechnologyAreaStatusEnum } from \"Constants/ApplicationConstants\";\nimport { APPLICATION_STATUS_DROPDOWN_OPTIONS } from \"Constants/ApplicationStatusTypes\";\nimport { OperationStatus } from \"Constants/OperationStatus\";\nimport {\n  fetchApplicationFlagsBySelectedApplicationId,\n  updateApplicationStatusesAndRemoveFlags,\n  updateApplicationStatusesAndRemoveFlagsReset,\n} from \"Dataflows/ApplicationDetails/ApplicationDetailsAction\";\nimport {\n  getApplicationFlagsBySelectedApplicationId,\n  getManageApplicationOperationStatus,\n  manageApplicationErrorMessage,\n} from \"Dataflows/ApplicationDetails/ApplicationDetailsSelector\";\nimport { IApplicationFormTechnologyFocusAreaStatusUpdateData } from \"Interfaces/Application/IApplicationFormTechnologyFocusAreaStatusUpdateData\";\n\nimport { IManageApplicationSidePanelProps } from \"./IManageApplicationSidePanel\";\n\nexport const ManageApplicationSidePanel = (\n  props: IManageApplicationSidePanelProps\n): ReactElement => {\n  const { isPanelOpen, setIsPanelOpen, applicationFormId, applicationTechnologyFocusAreas } = props;\n  const dispatch = useDispatch();\n  const applicationFlags = useSelector(getApplicationFlagsBySelectedApplicationId);\n  const manageApplicationOpStatus = useSelector(getManageApplicationOperationStatus);\n  const manageApplicationError = useSelector(manageApplicationErrorMessage);\n  const [shouldRemoveFlags, setShouldRemoveFlags] = useState(false);\n\n  const {\n    control,\n    handleSubmit,\n    reset,\n    formState: { errors },\n  } = useForm({\n    defaultValues: {\n      justification: \"\",\n      applicationTechnologyFocusAreas: applicationTechnologyFocusAreas,\n    },\n    resolver: yupResolver(\n      Yup.object().shape({\n        justification: Yup.string().required(\"Justification is required\").max(3900),\n        applicationTechnologyFocusAreas: Yup.array().of(\n          Yup.object().shape({\n            technologyFocusAreaStatus: Yup.string().test(\n              \"Validate decision\",\n              \"Cannot revert to Decision Pending.\",\n              function (value): boolean {\n                return value !== TechnologyAreaStatusEnum.DecisionPending;\n              }\n            ),\n          })\n        ),\n      })\n    ),\n  });\n\n  // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n  const save = () => {\n    return handleSubmit((formData) => {\n      // Format data for API endpoint request\n      const tfaStatusUpdateData = (): IApplicationFormTechnologyFocusAreaStatusUpdateData[] => {\n        return formData.applicationTechnologyFocusAreas.map((item) => {\n          const temp = {\n            technologyFocusAreaId: 0,\n            currentTechnologyFocusAreaStatusName: \"\",\n            newTechnologyFocusAreaStatusName: \"\",\n          };\n          temp.technologyFocusAreaId = item.technologyFocusAreaId;\n          temp.currentTechnologyFocusAreaStatusName = applicationTechnologyFocusAreas.filter(\n            (x) => x.technologyFocusAreaName === item.technologyFocusAreaName\n          )[0].technologyFocusAreaStatus;\n          temp.newTechnologyFocusAreaStatusName = formData.applicationTechnologyFocusAreas.filter(\n            (tfa) => tfa.technologyFocusAreaId === item.technologyFocusAreaId\n          )[0].technologyFocusAreaStatus;\n          return temp;\n        });\n      };\n\n      dispatch(\n        updateApplicationStatusesAndRemoveFlags(\n          applicationFormId,\n          tfaStatusUpdateData(),\n          shouldRemoveFlags,\n          formData.justification\n        )\n      );\n    });\n  };\n\n  const dismissPanel = (): void => {\n    setIsPanelOpen(false);\n    dispatch(updateApplicationStatusesAndRemoveFlagsReset());\n    reset();\n  };\n\n  useEffect(() => {\n    if (manageApplicationOpStatus === OperationStatus.Succeeded) {\n      dismissPanel();\n    }\n  }, [manageApplicationOpStatus]);\n\n  useEffect(() => {\n    // If we don't have application flags in state, fetch them\n    if (applicationFlags === undefined && applicationFormId) {\n      dispatch(fetchApplicationFlagsBySelectedApplicationId(applicationFormId));\n    }\n  }, []);\n\n  const { fields } = useFieldArray({ control, name: \"applicationTechnologyFocusAreas\" });\n\n  return (\n    <form onSubmit={save()}>\n      <SidePanel\n        isOpen={isPanelOpen}\n        title=\"Update Application Status\"\n        saveButtonLabel=\"Save\"\n        error={manageApplicationError}\n        disableActions={manageApplicationOpStatus === OperationStatus.Pending}\n        onDismiss={dismissPanel}\n        onSave={save()}\n      >\n        <Stack tokens={{ childrenGap: \"1rem\" }}>\n          <Stack.Item>\n            {fields.map((field, index) => {\n              return (\n                <StackItem key={field.id} styles={{ root: { paddingBottom: \"10px\" } }}>\n                  <ComboBoxController\n                    control={control}\n                    errors={errors}\n                    inputName={`applicationTechnologyFocusAreas[${index}].technologyFocusAreaStatus`}\n                    isRequired={false}\n                    labelDisplayName={field.technologyFocusAreaName}\n                    options={APPLICATION_STATUS_DROPDOWN_OPTIONS}\n                    isDisabled={manageApplicationOpStatus === OperationStatus.Pending}\n                    defaultSelectedKey={\n                      APPLICATION_STATUS_DROPDOWN_OPTIONS.filter(\n                        (opt) => opt.text === field.technologyFocusAreaStatus\n                      )[0].text\n                    }\n                  />\n                </StackItem>\n              );\n            })}\n          </Stack.Item>\n          <StackItem>\n            <Checkbox\n              label=\"Remove Flags\"\n              checked={shouldRemoveFlags}\n              onChange={() => setShouldRemoveFlags(!shouldRemoveFlags)}\n              disabled={applicationFlags === undefined || applicationFlags.length === 0}\n            />\n          </StackItem>\n          <StackItem>\n            <TextFieldController\n              inputName=\"justification\"\n              control={control}\n              errors={errors}\n              isRequired\n              isMultiline\n              hasTooltip\n              labelDisplayName=\"Justification\"\n              toolTipDisplayText=\"Please explain further\"\n              characterCountLimit={3900}\n            />\n          </StackItem>\n        </Stack>\n      </SidePanel>\n    </form>\n  );\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { OperationStatus } from \"Constants/OperationStatus\";\nimport { AppState } from \"Dataflows/Reducers\";\nimport { IUserProfileComment } from \"Interfaces/UserProfile/IUserProfileComment\";\n\n/**\n * Returns user profile comments.\n * @param appState\n */\nexport const getComments = (state: AppState): IUserProfileComment[] =>\n  state.mvpState.commentsState.userProfileComments;\n\n/**\n * Returns loading status of user profile comments.\n * @param appState\n * @returns {boolean}\n */\nexport const getCommentsIsLoadingStatus = (state: AppState): boolean =>\n  state.mvpState.commentsState.commentsOperationStatus?.read === OperationStatus.Pending;\n\n/**\n * Returns loading status of user profile comments.\n * @param appState\n * @returns {boolean}\n */\nexport const getAddCommentOperationStatus = (state: AppState): OperationStatus | undefined =>\n  state.mvpState.commentsState.commentsOperationStatus?.create;\n\n/**\n * Returns error message returned when user profile comments fails.\n * @param appState\n * @returns {string}\n */\nexport const getCommentsErrorMessage = (state: AppState): string =>\n  state.mvpState.commentsState.commentsOperationStatus?.read === OperationStatus.Failed &&\n  !!state.mvpState.commentsState.commentsErrorMessage\n    ? state.mvpState.commentsState.commentsErrorMessage\n    : \"\";\n","/*!\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n */\r\n\r\nimport React, { useEffect, ReactElement } from \"react\";\r\n\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport { Redirect } from \"react-router-dom\";\r\n\r\nimport { useAuth } from \"Authentication/AuthProvider\";\r\nimport { AddComment } from \"Components/AddComment/AddComment\";\r\nimport { CommentsHistory } from \"Components/CommentsHistory/CommentsHistory\";\r\nimport { OperationStatus } from \"Constants/OperationStatus\";\r\nimport { PermissionsEnum } from \"Constants/RolesPermissionsConstants\";\r\nimport { TenantTypesEnum } from \"Constants/TenantTypes\";\r\nimport { DetailWrapper } from \"Containers/Common/CommonContainer.styles\";\r\nimport { getFlagApplicationStatus } from \"Dataflows/Application/ApplicationSelector\";\r\nimport {\r\n  getAddCommentOperationStatus,\r\n  getComments,\r\n  getCommentsErrorMessage,\r\n  getCommentsIsLoadingStatus,\r\n} from \"Dataflows/MVP/Comments/MVPCommentsSelector\";\r\nimport { addNewComment, fetchUserProfileComments } from \"Dataflows/MVP/MVPAction\";\r\n\r\nimport IMostValuableProfessionalCommentsProps from \"./IMostValuableProfessionalCommentsProps\";\r\n\r\n/**\r\n * The Most Valuable Professional Comments component\r\n * @method\r\n * @returns {ReactElement} The Most Valuable Professional Comments component\r\n */\r\nconst MostValuableProfessionalComments = (\r\n  props: IMostValuableProfessionalCommentsProps\r\n): ReactElement => {\r\n  const { isUserLoggedIn, loading, hasAnyRoles, account, hasPermission } = useAuth();\r\n  const { userProfileId, fromLastRenewal } = props;\r\n  const dispatch = useDispatch();\r\n  const addCommentOpStatus = useSelector(getAddCommentOperationStatus);\r\n  const userProfileComments = useSelector(getComments);\r\n  const isLoading = useSelector(getCommentsIsLoadingStatus);\r\n  const errorMessage = useSelector(getCommentsErrorMessage);\r\n  const flagApplicationStatus = useSelector(getFlagApplicationStatus);\r\n\r\n  useEffect(() => {\r\n    if (!!userProfileId) {\r\n      dispatch(fetchUserProfileComments(userProfileId, fromLastRenewal ?? false));\r\n    }\r\n  }, [\r\n    userProfileId,\r\n    addCommentOpStatus === OperationStatus.Succeeded,\r\n    flagApplicationStatus === OperationStatus.Succeeded,\r\n  ]);\r\n\r\n  if (isUserLoggedIn && !hasAnyRoles && !loading) {\r\n    return <Redirect to=\"/unauthorized\" />;\r\n  }\r\n\r\n  const onAddCommentClicked = (newComment): void => {\r\n    if (!!userProfileId && !!newComment && !!account.userName) {\r\n      dispatch(addNewComment(userProfileId, newComment, account.userName));\r\n    }\r\n  };\r\n\r\n  const canAddComments =\r\n    hasPermission(TenantTypesEnum.MVP, PermissionsEnum.MVP_UPDATE_USERS) ||\r\n    hasPermission(TenantTypesEnum.MVP, PermissionsEnum.MVP_VIEW_APPLICATIONS);\r\n\r\n  return (\r\n    <DetailWrapper>\r\n      {canAddComments && (\r\n        <AddComment\r\n          onAddCommentClicked={onAddCommentClicked}\r\n          addCommentStatus={addCommentOpStatus}\r\n        />\r\n      )}\r\n      <CommentsHistory\r\n        userProfileComments={userProfileComments}\r\n        isLoading={isLoading}\r\n        errorMessage={errorMessage}\r\n      />\r\n    </DetailWrapper>\r\n  );\r\n};\r\n\r\nexport default MostValuableProfessionalComments;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n */\r\n\r\nimport React from \"react\";\r\n\r\nimport { Stack, StackItem, Text } from \"@fluentui/react\";\r\n\r\nimport { COMPETITOR_MESSAGE, GOVERNMENT_EMPLOYEE_MESSAGE } from \"Constants/ApplicationConstants\";\r\n\r\nimport { IProfileHeaderProps } from \"./IProfileHeaderProps\";\r\nimport {\r\n  applicationContentStackStyles,\r\n  bolderTextStylesSmall,\r\n  contentStackTokens,\r\n  headerStackStyles,\r\n  headerStackTokens,\r\n  isCompetitorTextStylesSmall,\r\n  normalTextStyles,\r\n  privateProfileTextStyles,\r\n} from \"./ProfileHeader.styles\";\r\n\r\nconst ApplicationProfileHeader = (props: Partial<IProfileHeaderProps>): React.ReactElement => {\r\n  const {\r\n    firstName,\r\n    lastName,\r\n    isPrivate,\r\n    technologyAreas,\r\n    isCompetitor,\r\n    isGovtEmployee,\r\n    companyName,\r\n    jobTitle,\r\n    applicationId,\r\n    awardedTechnologyAreas,\r\n    yearsInProgram,\r\n  } = props;\r\n\r\n  return (\r\n    <Stack styles={headerStackStyles} tokens={headerStackTokens}>\r\n      <Stack horizontal tokens={contentStackTokens}>\r\n        <StackItem styles={applicationContentStackStyles}>\r\n          <Text\r\n            styles={bolderTextStylesSmall}\r\n          >{`${firstName} ${lastName} [${applicationId}]`}</Text>\r\n        </StackItem>\r\n        {!!technologyAreas && technologyAreas.length > 0 && (\r\n          <StackItem styles={applicationContentStackStyles}>\r\n            <Text styles={bolderTextStylesSmall}>Applying To:</Text>\r\n          </StackItem>\r\n        )}\r\n      </Stack>\r\n      <Stack horizontal tokens={contentStackTokens}>\r\n        <Stack styles={applicationContentStackStyles}>\r\n          <StackItem>\r\n            <Text styles={bolderTextStylesSmall}>\r\n              <Text styles={bolderTextStylesSmall}>Current Awards</Text>\r\n            </Text>\r\n          </StackItem>\r\n          {awardedTechnologyAreas?.map((techAreas, index) => (\r\n            <StackItem>\r\n              <Text>{`Awarded TA ${index + 1}: ${techAreas}`}</Text>\r\n            </StackItem>\r\n          ))}\r\n          {!!isPrivate && (\r\n            <StackItem>\r\n              <Text styles={privateProfileTextStyles}>{\"Private Profile\"}</Text>\r\n            </StackItem>\r\n          )}\r\n        </Stack>\r\n\r\n        {technologyAreas?.map((technologyArea, index) => (\r\n          <Stack styles={applicationContentStackStyles}>\r\n            <StackItem key={technologyArea.technologyFocusAreaName}>\r\n              <StackItem>\r\n                <Text styles={bolderTextStylesSmall}>{technologyArea.technologyFocusAreaName}</Text>\r\n              </StackItem>\r\n              <StackItem>\r\n                <Text>\r\n                  Score:{\" \"}\r\n                  {technologyArea.technologyFocusAreaScore !== 0\r\n                    ? technologyArea.technologyFocusAreaScore\r\n                    : \"Unscored\"}\r\n                </Text>\r\n              </StackItem>\r\n              <StackItem>\r\n                <Text>Status: {technologyArea.technologyFocusAreaStatus ?? \"N/A\"}</Text>\r\n              </StackItem>\r\n            </StackItem>\r\n          </Stack>\r\n        ))}\r\n        <Stack styles={applicationContentStackStyles}>\r\n          {!!isCompetitor ? (\r\n            <StackItem styles={applicationContentStackStyles}>\r\n              <Text styles={isCompetitorTextStylesSmall}>{COMPETITOR_MESSAGE}</Text>\r\n            </StackItem>\r\n          ) : (\r\n            <br />\r\n          )}\r\n          {!!isGovtEmployee ? (\r\n            <StackItem styles={applicationContentStackStyles}>\r\n              <Text styles={isCompetitorTextStylesSmall}>{GOVERNMENT_EMPLOYEE_MESSAGE}</Text>\r\n            </StackItem>\r\n          ) : (\r\n            <br />\r\n          )}\r\n          {!!jobTitle && (\r\n            <StackItem>\r\n              <Text styles={normalTextStyles}>{`Job Title: ${jobTitle}`}</Text>\r\n            </StackItem>\r\n          )}\r\n          {!!companyName && (\r\n            <StackItem>\r\n              <Text\r\n                styles={normalTextStyles}\r\n              >{`Current Employer/Organization: ${companyName}`}</Text>\r\n            </StackItem>\r\n          )}\r\n        </Stack>\r\n      </Stack>\r\n      <Stack horizontal tokens={contentStackTokens}>\r\n        <Stack styles={applicationContentStackStyles}>\r\n          <StackItem>\r\n            <Text styles={bolderTextStylesSmall}>\r\n              <Text styles={bolderTextStylesSmall}>{`Consecutive years: ${yearsInProgram}`}</Text>\r\n            </Text>\r\n          </StackItem>\r\n        </Stack>\r\n      </Stack>\r\n    </Stack>\r\n  );\r\n};\r\n\r\nexport default ApplicationProfileHeader;\r\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { useEffect, useState, ReactElement } from \"react\";\n\nimport { useFieldArray, useForm } from \"react-hook-form\";\nimport { useDispatch, useSelector } from \"react-redux\";\n\nimport * as Yup from \"yup\";\n\nimport {\n  MessageBar,\n  MessageBarType,\n  Spinner,\n  SpinnerSize,\n  Stack,\n  StackItem,\n} from \"@fluentui/react\";\nimport { yupResolver } from \"@hookform/resolvers/yup\";\n\nimport CheckboxController from \"Components/ReactHookForm/CheckboxController/CheckboxController\";\nimport ComboBoxController from \"Components/ReactHookForm/ComboBoxController/ComboBoxController\";\nimport TextFieldController from \"Components/ReactHookForm/TextFieldController/TextFieldController\";\nimport { SidePanel } from \"Components/SidePanel/SidePanel\";\nimport { SidePanelConstants } from \"Constants/ApplicationConstants\";\nimport { OperationStatus } from \"Constants/OperationStatus\";\nimport { TenantTypesEnum } from \"Constants/TenantTypes\";\nimport {\n  updateApplicationStatusesAndRemoveFlagsReset,\n  updateApplicationTechnologyAreaAndResetScores,\n} from \"Dataflows/ApplicationDetails/ApplicationDetailsAction\";\nimport {\n  getUpdateTechnologyAreaOperationStatus,\n  updateTechnologyAreaErrorMessage,\n} from \"Dataflows/ApplicationDetails/ApplicationDetailsSelector\";\nimport { getTechnologyAreas } from \"Dataflows/TechnologyArea/TechnologyAreaAction\";\nimport { getAllTechnologyAreaOptionList } from \"Dataflows/TechnologyArea/TechnologyAreaSelector\";\nimport { IApplicationFormTechnologyFocusAreaUpdateData } from \"Interfaces/Application/IApplicationFormTechnologyFocusAreaUpdateData\";\n\nimport { IUpdateTechnologyAreaSitePanelProps } from \"./IUpdateTechnologyAreaSitePanel\";\n\nexport const UpdateTechnologyAreaSitePanel = (\n  props: IUpdateTechnologyAreaSitePanelProps\n): ReactElement => {\n  const { isPanelOpen, setIsPanelOpen, applicationFormId, applicationTechnologyFocusAreas } = props;\n  const dispatch = useDispatch();\n  const updateTechnologyAreaOpStatus = useSelector(getUpdateTechnologyAreaOperationStatus);\n  const updateTechnologyAreaError = useSelector(updateTechnologyAreaErrorMessage);\n  const technologyAreaOptions = useSelector(getAllTechnologyAreaOptionList);\n  const [isLoadingTechnologyAreas, setIsLoadingTechnologyAreas] = useState(false);\n\n  const {\n    control,\n    handleSubmit,\n    reset,\n    formState: { errors },\n  } = useForm({\n    defaultValues: {\n      justification: \"\",\n      applicationTechnologyFocusAreas: applicationTechnologyFocusAreas,\n      isResetScores: [false, false],\n    },\n    resolver: yupResolver(\n      Yup.object().shape({\n        justification: Yup.string().required(\"Justification is required\").max(3900),\n        applicationTechnologyFocusAreas: Yup.array().test(\n          \"SecondTA\",\n          \"Second Technology Area is the same as the first Technology Area.\",\n          function (value: any) {\n            if (\n              value.length === 2 &&\n              value[0].technologyFocusAreaName === value[1].technologyFocusAreaName\n            ) {\n              return this.createError({\n                path: \"applicationTechnologyFocusAreas[1].technologyFocusAreaName\",\n                message: \"Second Technology Area is the same as the first Technology Area.\",\n              });\n            }\n            return true;\n          }\n        ),\n      })\n    ),\n  });\n\n  // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n  const save = () => {\n    return handleSubmit((formData) => {\n      // Format data for API endpoint request\n      const tfaUpdateData = (): IApplicationFormTechnologyFocusAreaUpdateData[] => {\n        return formData.applicationTechnologyFocusAreas.map((item, i) => {\n          const temp = {\n            currentTechnologyFocusAreaName: \"\",\n            newTechnologyFocusAreaName: item.technologyFocusAreaName,\n            isResetScore: formData.isResetScores[i],\n          };\n          temp.currentTechnologyFocusAreaName = applicationTechnologyFocusAreas.filter(\n            (x) => x.technologyFocusAreaId === item.technologyFocusAreaId\n          )[0].technologyFocusAreaName;\n          return temp;\n        });\n      };\n\n      dispatch(\n        updateApplicationTechnologyAreaAndResetScores(\n          applicationFormId,\n          tfaUpdateData(),\n          formData.justification\n        )\n      );\n    });\n  };\n\n  const dismissPanel = (): void => {\n    setIsPanelOpen(false);\n    dispatch(updateApplicationStatusesAndRemoveFlagsReset());\n    reset();\n  };\n\n  useEffect(() => {\n    if (updateTechnologyAreaOpStatus === OperationStatus.Succeeded) {\n      dismissPanel();\n    }\n  }, [updateTechnologyAreaOpStatus]);\n\n  useEffect(() => {\n    // If we don't have technology areas in state, fetch them\n    if (technologyAreaOptions.length === 0 && !isLoadingTechnologyAreas && isPanelOpen) {\n      dispatch(getTechnologyAreas(TenantTypesEnum.MVP));\n      setIsLoadingTechnologyAreas(true);\n    }\n  }, [technologyAreaOptions, isLoadingTechnologyAreas, isPanelOpen]);\n\n  const { fields } = useFieldArray({ control, name: \"applicationTechnologyFocusAreas\" });\n\n  return (\n    <form onSubmit={save()}>\n      <SidePanel\n        isOpen={isPanelOpen}\n        title=\"Update the Technology Area\"\n        saveButtonLabel=\"Save\"\n        error={updateTechnologyAreaError}\n        disableActions={updateTechnologyAreaOpStatus === OperationStatus.Pending}\n        onDismiss={dismissPanel}\n        onSave={save()}\n      >\n        <Stack tokens={{ childrenGap: \"1rem\" }}>\n          <MessageBar messageBarType={MessageBarType.info}>\n            {SidePanelConstants.UpdateTechnologyAreaSidePanelInformation}\n          </MessageBar>\n          {technologyAreaOptions.length === 0 ? (\n            <Spinner size={SpinnerSize.large} />\n          ) : (\n            <>\n              {fields.map((field, index) => {\n                return (\n                  <Stack.Item key={field.id}>\n                    <StackItem styles={{ root: { paddingBottom: \"1.3rem\" } }}>\n                      <ComboBoxController\n                        control={control}\n                        errors={errors}\n                        inputName={`applicationTechnologyFocusAreas[${index}].technologyFocusAreaName`}\n                        isRequired={false}\n                        labelDisplayName={field.technologyFocusAreaName}\n                        options={technologyAreaOptions}\n                        isDisabled={updateTechnologyAreaOpStatus === OperationStatus.Pending}\n                        defaultSelectedKey={\n                          technologyAreaOptions.find(\n                            (opt) => opt.text === field.technologyFocusAreaName\n                          )?.text\n                        }\n                      />\n                    </StackItem>\n\n                    <StackItem>\n                      <CheckboxController\n                        control={control}\n                        errors={errors}\n                        labelDisplayName=\"Reset Score\"\n                        inputName={`isResetScores[${index}]`}\n                      />\n                    </StackItem>\n                  </Stack.Item>\n                );\n              })}\n              <StackItem>\n                <TextFieldController\n                  inputName=\"justification\"\n                  control={control}\n                  errors={errors}\n                  isRequired\n                  isMultiline\n                  hasTooltip\n                  labelDisplayName=\"Justification\"\n                  toolTipDisplayText=\"Please explain why this application needs additional review\"\n                  characterCountLimit={3900}\n                />\n              </StackItem>\n            </>\n          )}\n        </Stack>\n      </SidePanel>\n    </form>\n  );\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\n/**\n * Brand constants\n */\nexport const BrandLabel = {\n  CL: \"Community Leaders\",\n  MSA: \"Learn Student Ambassadors\",\n  RD: \"Regional Directors\",\n  MVP: \"Most Valuable Professionals\",\n  AMPLIFY: \"Amplify\",\n};\n\nexport const YES = \"Yes\";\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { useEffect, useState, ReactElement } from \"react\";\n\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { useParams } from \"react-router-dom\";\n\nimport {\n  CommandBar,\n  CommandBarButton,\n  ICommandBarItemProps,\n  Pivot,\n  PivotItem,\n  Spinner,\n  SpinnerSize,\n  Stack,\n  TooltipHost,\n} from \"@fluentui/react\";\nimport { useId } from \"@fluentui/react-hooks\";\n\nimport { useAuth } from \"Authentication/AuthProvider\";\nimport { ApplicationAssignSidePanel } from \"Components/ApplicationAssignSidePanel/ApplicationAssignSidePanel\";\nimport AdditionalActivitiesEvents from \"Components/ApplicationDetails/MVP/AdditionalActivitiesEvents\";\nimport ApplicationFlags from \"Components/ApplicationDetails/MVP/ApplicationFlags\";\nimport ApplicationQuestions from \"Components/ApplicationDetails/MVP/ApplicationQuestions\";\nimport HighlightedActivitiesEvents from \"Components/ApplicationDetails/MVP/HighlightedActivitiesEvents\";\nimport Nomination from \"Components/ApplicationDetails/MVP/Nomination\";\nimport ProfileInformation from \"Components/ApplicationDetails/MVP/ProfileInformation\";\nimport { ApplicationFlaggingSidePanel } from \"Components/ApplicationFlaggingSidePanel/ApplicationFlaggingSidePanel\";\nimport { ApplicationScoringSidePanel } from \"Components/ApplicationScoringSidePanel/ApplicationScoringSidePanel\";\nimport { ManageApplicationSidePanel } from \"Components/ManageApplicationSidePanel/ManageApplicationSidePanel\";\nimport MostValuableProfessionalComments from \"Components/MostValuableProfessionalComments/MostValuableProfessionalComments\";\nimport ApplicationProfileHeader from \"Components/ProfileHeader/ApplicationProfileHeader\";\nimport { UpdateTechnologyAreaSitePanel } from \"Components/UpdateTechnologyAreaSitePanel/UpdateTechnologyAreaSitePanel\";\nimport { ApplicationTabs } from \"Constants/ApplicationConstants\";\nimport { ApplicationStatusTypesEnum } from \"Constants/ApplicationStatusTypes\";\nimport { OperationStatus } from \"Constants/OperationStatus\";\nimport { ApplicationReviewStatusesEnum, RolesEnum } from \"Constants/RolesPermissionsConstants\";\nimport { YES } from \"Constants/SiteConstants\";\nimport { TenantTypesEnum } from \"Constants/TenantTypes\";\nimport {\n  commandBarStyles,\n  containerStackTokens,\n  wrapperStackStyles,\n  DetailWrapper,\n} from \"Containers/Common/CommonContainer.styles\";\nimport {\n  clearApplicationDetailsState,\n  getUserProfileBySelectedApplicationId,\n  ActivitiesEventsActionTypes,\n} from \"Dataflows/ApplicationDetails/ApplicationDetailsAction\";\nimport {\n  getManageApplicationOperationStatus,\n  getUpdateTechnologyAreaOperationStatus,\n  getUserProfileInfoBySelectedApplicationId,\n  getUserProfileInfoBySelectedApplicationIdErrorMessage,\n  isLoadingUserProfileInfoBySelectedApplicationId,\n} from \"Dataflows/ApplicationDetails/ApplicationDetailsSelector\";\nimport { useApplicationTabs } from \"Utility/CustomTabHooks\";\nimport { date } from \"yup\";\n\n/**\n * MostValuableProfessionalApplicationDetailsContainer\n * @returns {React.ReactElement} rendered MVP application details container\n */\nconst MostValuableProfessionalApplicationDetailsContainer = (): ReactElement => {\n  const dispatch = useDispatch();\n  const auth = useAuth();\n\n  // This is needed if link to MVP application details is directly accessed\n  const { id } = useParams<{ id: string }>();\n  const tooltipId = useId(\"tooltip\");\n  const { selectedTab, setSelectedTab } = useApplicationTabs();\n  const isUserProfileLoading = useSelector(isLoadingUserProfileInfoBySelectedApplicationId);\n  const errorMessage = useSelector(getUserProfileInfoBySelectedApplicationIdErrorMessage);\n  const userProfileInfo = useSelector(getUserProfileInfoBySelectedApplicationId);\n  const manageApplicationOpStatus = useSelector(getManageApplicationOperationStatus);\n  const updateTechnologyAreaOperationStatus = useSelector(getUpdateTechnologyAreaOperationStatus);\n\n  const [isAssignPanelOpen, setIsAssignPanelOpen] = useState(false);\n  const [isScorePanelOpen, setIsScorePanelOpen] = useState(false);\n  const [isFlagApplicationPanelOpen, setisFlagApplicationPanelOpen] = useState(false);\n  const [isManageApplicationPanelOpen, setIsManageApplicationPanelOpen] = useState(false);\n  const [isUpdateTechnologyAreaPanelOpen, setIsUpdateTechnologyAreaPanelOpen] = useState(false);\n  const [techAreaBeingScored, setTechAreaBeingScored] = useState(\"\");\n\n  const { hasRole } = useAuth();\n\n  /**\n   * Determines if the assign button should be disabled based on the user's roles and application review status.\n   * If the user is an MVP Program Owner or MVP Tech Area Validator and the application is under PG review, the assign button is enabled.\n   * @returns {boolean} True if the assign button should be disabled, false otherwise.\n   */\n  const assignIsDisabled = (): boolean => {\n    const today = new Date();\n\n    // Normalize the dates to remove the time component\n    const normalizeDate = (date: Date): Date =>\n      new Date(date.getFullYear(), date.getMonth(), date.getDate());\n\n    const normalizedToday = normalizeDate(today);\n    const normalizedEnrollmentEndDate = userProfileInfo?.enrollmentEndDate\n      ? normalizeDate(new Date(userProfileInfo.enrollmentEndDate))\n      : null;\n\n    return (\n      (!hasRole(RolesEnum.MVP_PROGRAM_OWNER) && !hasRole(RolesEnum.MVP_TECH_AREA_VALIDATOR)) ||\n      userProfileInfo?.reviewStatus !== ApplicationReviewStatusesEnum.PG_REVIEW ||\n      !(\n        userProfileInfo?.formStatus === ApplicationStatusTypesEnum.Submitted ||\n        userProfileInfo?.formStatus === ApplicationStatusTypesEnum.UNDER_REVIEW ||\n        userProfileInfo?.formStatus === ApplicationStatusTypesEnum.REVIEW_ELIGIBLE\n      ) ||\n      userProfileInfo?.isAnnualException ||\n      (userProfileInfo?.isRenewalApplication === true &&\n        !(normalizedEnrollmentEndDate && normalizedEnrollmentEndDate <= normalizedToday)) // Enrollment end date is in the past or today only when isRenewalApplication is true\n    );\n  };\n\n  /**\n   * Determines if the flag button should be disabled based on the user's roles and application review status.\n   * If the user is a MVP Reviewer (CPM) and the application is under CPM review, the assign button is enabled.\n   * @returns {boolean} True if the flag is disabled, false otherwise.\n   */\n  const flagApplicationIsDisabled = (): boolean => {\n    // If user is an MVP Reviewer (CPM) and the application form is under CPM review, flag button enabled\n    if (\n      hasRole(RolesEnum.MVP_REVIEWER) &&\n      userProfileInfo?.reviewStatus === ApplicationReviewStatusesEnum.CPM_REVIEW &&\n      !!userProfileInfo?.isInReview\n    ) {\n      return false;\n    }\n\n    return true;\n  };\n\n  // BGs can only use the command in BG review stage, from the CPM cutoff date(22th) until the end of the month.\n  const applicationIsInCorrectWindow = (): boolean =>\n    userProfileInfo?.reviewStatus === ApplicationReviewStatusesEnum.BG_FINAL_REVIEW;\n\n  // NOTE: button is disabled with a tooltip on hover when application is outside eligible update time\n  const showManageApplicationButton = (): boolean => {\n    return (\n      (hasRole(RolesEnum.MVP_PROGRAM_OWNER) || hasRole(RolesEnum.MVP_BUSINESS_GROUP)) &&\n      !!userProfileInfo?.isInReview\n    );\n  };\n\n  const showUpdateTechnologyAreaButton = (): boolean => {\n    return (\n      (hasRole(RolesEnum.MVP_PROGRAM_OWNER) || hasRole(RolesEnum.MVP_BUSINESS_GROUP)) &&\n      !!userProfileInfo?.isInReview &&\n      userProfileInfo?.reviewStatus === ApplicationReviewStatusesEnum.BG_FINAL_REVIEW\n    );\n  };\n\n  const scoringIsDisabled = (technologyFocusArea: string): boolean => {\n    const value = userProfileInfo?.applicationAssignees.find(\n      (x) => x.technologyFocusArea === technologyFocusArea\n    );\n\n    return (\n      value?.emailAddress.toLowerCase() !== auth.account.userName.toLowerCase() ||\n      userProfileInfo?.reviewStatus != ApplicationReviewStatusesEnum.PG_REVIEW\n    );\n  };\n\n  const hasScored = (technologyFocusArea: string): boolean => {\n    const assignee = userProfileInfo?.applicationAssignees.find((assignee) => {\n      return assignee.technologyFocusArea === technologyFocusArea;\n    });\n\n    return assignee?.hasScore ?? false;\n  };\n\n  const formatManageApplicationButton = () => {\n    // If we're in the eligible update period, show button without tooltip\n    if (applicationIsInCorrectWindow()) {\n      return (\n        <CommandBarButton\n          key=\"manageApplication\"\n          text=\"Update Application Status\"\n          iconProps={{ iconName: \"AccountManagement\" }}\n          disabled={!applicationIsInCorrectWindow()}\n          onClick={() => setIsManageApplicationPanelOpen(true)}\n        />\n      );\n    }\n\n    return (\n      <TooltipHost\n        content=\"Cannot update after the announcement date.\"\n        closeDelay={500}\n        id={tooltipId}\n      >\n        <CommandBarButton\n          key=\"manageApplication\"\n          text=\"Update Application Status\"\n          iconProps={{ iconName: \"AccountManagement\" }}\n          disabled={!applicationIsInCorrectWindow()}\n          onClick={() => setIsManageApplicationPanelOpen(true)}\n        />\n      </TooltipHost>\n    );\n  };\n\n  const commandBarItems: ICommandBarItemProps[] = [];\n\n  if (!assignIsDisabled()) {\n    commandBarItems.push({\n      key: \"assignApplication\",\n      text: \"Assign\",\n      iconProps: { iconName: \"Assign\" },\n      onClick: (_, item) => setIsAssignPanelOpen(true),\n    });\n  }\n\n  if (!!userProfileInfo?.applicationFormTechnologyFocusArea) {\n    commandBarItems.push(\n      ...userProfileInfo?.applicationFormTechnologyFocusArea\n        ?.filter(\n          (technologyFocusArea) => !scoringIsDisabled(technologyFocusArea.technologyFocusAreaName)\n        )\n        .map((technologyFocusArea) => ({\n          key: technologyFocusArea.technologyFocusAreaName,\n          text: hasScored(technologyFocusArea.technologyFocusAreaName)\n            ? `Update Application Score - [${technologyFocusArea.technologyFocusAreaName}]`\n            : `Submit Application Score - [${technologyFocusArea.technologyFocusAreaName}]`,\n          iconProps: { iconName: \"DocumentApproval\" },\n          onClick: (_, item) => {\n            setTechAreaBeingScored(technologyFocusArea.technologyFocusAreaName);\n            setIsScorePanelOpen(true);\n          },\n          disabled: scoringIsDisabled(technologyFocusArea.technologyFocusAreaName),\n        }))\n    );\n  }\n\n  if (!flagApplicationIsDisabled()) {\n    commandBarItems.push({\n      key: \"flagApplication\",\n      text: \"Flag for Additional Review\",\n      iconProps: { iconName: \"Flag\" },\n      onClick: (_, item) => setisFlagApplicationPanelOpen(true),\n    });\n  }\n\n  if (showManageApplicationButton()) {\n    commandBarItems.push({\n      key: \"manageApplication\",\n      onClick: (_, item) => setIsManageApplicationPanelOpen(true),\n      onRender: (): React.ReactElement => {\n        return formatManageApplicationButton();\n      },\n    });\n  }\n\n  if (showUpdateTechnologyAreaButton()) {\n    commandBarItems.push({\n      key: \"updateTechnologyArea\",\n      text: \"Update the Technology Area\",\n      iconProps: { iconName: \"AccountManagement\" },\n      onClick: (_, item) => setIsUpdateTechnologyAreaPanelOpen(true),\n    });\n  }\n\n  // We fetch the user profile info only if it is not already fetched, e.g. when user refreshes the page or directly accesses the link\n  useEffect(() => {\n    !isUserProfileLoading &&\n      !userProfileInfo &&\n      !errorMessage &&\n      dispatch(getUserProfileBySelectedApplicationId(Number(id), TenantTypesEnum.MVP));\n  }, [isUserProfileLoading, userProfileInfo]);\n\n  // Re-fetch application after manage application succeeds;\n  // Gives us the updated ApplicationFormTechnologyFocusAreaStatuses, updated flags, and updated comments\n  useEffect(() => {\n    dispatch(getUserProfileBySelectedApplicationId(Number(id), TenantTypesEnum.MVP));\n  }, [\n    manageApplicationOpStatus === OperationStatus.Succeeded,\n    updateTechnologyAreaOperationStatus == OperationStatus.Succeeded,\n  ]);\n\n  // clear the application details data when user navigates away from the page\n  useEffect(() => {\n    return (): void => {\n      dispatch(clearApplicationDetailsState());\n    };\n  }, []);\n\n  return (\n    <Stack styles={wrapperStackStyles}>\n      {isUserProfileLoading ? (\n        <Spinner size={SpinnerSize.large} />\n      ) : !!errorMessage ? (\n        <h5>{errorMessage}</h5>\n      ) : (\n        <Stack tokens={containerStackTokens}>\n          {!!userProfileInfo && (\n            <ApplicationProfileHeader\n              userProfileId={userProfileInfo.userProfileId}\n              firstName={userProfileInfo.firstName}\n              lastName={userProfileInfo.lastName}\n              primaryEmail={userProfileInfo.siteEmailAddress}\n              secondaryEmail={userProfileInfo.preferredContactEmailAddress}\n              technologyAreas={userProfileInfo.applicationFormTechnologyFocusArea}\n              companyName={userProfileInfo.currentEmployerName}\n              isCompetitor={!!userProfileInfo?.isCurrentEmployerCompetitor}\n              isGovtEmployee={userProfileInfo?.isGovernmentEmployeeQuestionResponse == YES}\n              yearsInProgram={userProfileInfo.yearsInProgram}\n              jobTitle={userProfileInfo.jobTitle}\n              applicationId={userProfileInfo.applicationFormId}\n              awardedTechnologyAreas={userProfileInfo.awardedTechnologyAreas}\n            />\n          )}\n          <Stack>\n            <DetailWrapper>\n              <Pivot\n                selectedKey={selectedTab}\n                onLinkClick={(item: PivotItem | undefined): void => {\n                  setSelectedTab(\n                    (item?.props.itemKey as ApplicationTabs) || ApplicationTabs.ProfileInformation\n                  );\n                }}\n              >\n                <PivotItem\n                  headerText=\"Profile Information\"\n                  itemKey={ApplicationTabs.ProfileInformation}\n                >\n                  <CommandBar\n                    items={commandBarItems}\n                    ariaLabel=\"Edit application actions\"\n                    styles={commandBarStyles}\n                  />\n                  <ProfileInformation />\n                </PivotItem>\n                <PivotItem headerText=\"Nomination\" itemKey={ApplicationTabs.Nomination}>\n                  <CommandBar\n                    items={commandBarItems}\n                    ariaLabel=\"Edit application actions\"\n                    styles={commandBarStyles}\n                  />\n                  <Nomination />\n                </PivotItem>\n                <PivotItem\n                  headerText=\"Application Questions\"\n                  itemKey={ApplicationTabs.ApplicationQuestions}\n                >\n                  <CommandBar\n                    items={commandBarItems}\n                    ariaLabel=\"Edit application actions\"\n                    styles={commandBarStyles}\n                  />\n                  <ApplicationQuestions />\n                </PivotItem>\n                <PivotItem\n                  headerText=\"Highlighted Activities/Events\"\n                  itemKey={ApplicationTabs.HighlightedActivitiesEvents}\n                >\n                  <CommandBar\n                    items={commandBarItems}\n                    ariaLabel=\"Edit application actions\"\n                    styles={commandBarStyles}\n                  />\n                  <HighlightedActivitiesEvents />\n                </PivotItem>\n                {userProfileInfo?.isRenewalApplication && (\n                  <PivotItem\n                    headerText=\"Additional Activities/Events\"\n                    itemKey={ApplicationTabs.AdditionalActivitiesEvents}\n                  >\n                    <CommandBar\n                      items={commandBarItems}\n                      ariaLabel=\"Edit application actions\"\n                      styles={commandBarStyles}\n                    />\n                    <AdditionalActivitiesEvents />\n                  </PivotItem>\n                )}\n                <PivotItem headerText=\"Flags\" itemKey={ApplicationTabs.ApplicationFlags}>\n                  <CommandBar\n                    items={commandBarItems}\n                    ariaLabel=\"Edit application actions\"\n                    styles={commandBarStyles}\n                  />\n                  <ApplicationFlags />\n                </PivotItem>\n              </Pivot>\n            </DetailWrapper>\n          </Stack>\n          <MostValuableProfessionalComments\n            userProfileId={userProfileInfo?.userProfileId}\n            fromLastRenewal\n          />\n          {userProfileInfo && (\n            <ApplicationAssignSidePanel\n              isPanelOpen={isAssignPanelOpen}\n              onSubmitSuccess={(): ActivitiesEventsActionTypes =>\n                dispatch(getUserProfileBySelectedApplicationId(Number(id), TenantTypesEnum.MVP))\n              }\n              setIsPanelOpen={setIsAssignPanelOpen}\n              applicationFormId={userProfileInfo?.applicationFormId}\n            />\n          )}\n          {userProfileInfo && (\n            <ApplicationScoringSidePanel\n              isPanelOpen={isScorePanelOpen}\n              onSubmitSuccess={(): ActivitiesEventsActionTypes =>\n                dispatch(getUserProfileBySelectedApplicationId(Number(id), TenantTypesEnum.MVP))\n              }\n              setIsPanelOpen={setIsScorePanelOpen}\n              technologyAreaName={techAreaBeingScored}\n              applicationFormId={userProfileInfo?.applicationFormId}\n            />\n          )}\n          {userProfileInfo && (\n            <ApplicationFlaggingSidePanel\n              isPanelOpen={isFlagApplicationPanelOpen}\n              applicationTechnologyFocusAreas={userProfileInfo?.applicationFormTechnologyFocusArea}\n              setIsPanelOpen={setisFlagApplicationPanelOpen}\n              technologyAreaName={techAreaBeingScored}\n              applicationFormId={userProfileInfo?.applicationFormId}\n            />\n          )}\n          {userProfileInfo && (\n            <ManageApplicationSidePanel\n              isPanelOpen={isManageApplicationPanelOpen}\n              applicationTechnologyFocusAreas={userProfileInfo?.applicationFormTechnologyFocusArea}\n              setIsPanelOpen={setIsManageApplicationPanelOpen}\n              applicationFormId={userProfileInfo?.applicationFormId}\n            />\n          )}\n          {userProfileInfo && (\n            <UpdateTechnologyAreaSitePanel\n              isPanelOpen={isUpdateTechnologyAreaPanelOpen}\n              applicationTechnologyFocusAreas={userProfileInfo?.applicationFormTechnologyFocusArea}\n              setIsPanelOpen={setIsUpdateTechnologyAreaPanelOpen}\n              applicationFormId={userProfileInfo?.applicationFormId}\n            />\n          )}\n        </Stack>\n      )}\n    </Stack>\n  );\n};\n\nexport default MostValuableProfessionalApplicationDetailsContainer;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport {\n  getTheme,\n  mergeStyleSets,\n  IButtonStyles,\n  IStackTokens,\n  ITextStyles,\n} from \"@fluentui/react\";\n\nconst theme = getTheme();\n\nexport const buttonStyles: IButtonStyles = {\n  root: { marginRight: 8 },\n};\n\nexport const deleteButtonStyles: IButtonStyles = {\n  root: {\n    marginRight: 8,\n    border: `1px solid ${theme.palette.blue}`,\n    color: theme.palette.blue,\n  },\n  rootHovered: {\n    backgroundColor: theme.palette.white,\n    color: theme.palette.blue,\n  },\n  rootPressed: {\n    backgroundColor: theme.palette.blue,\n    color: theme.palette.blue,\n  },\n};\n\nexport const deleteButtonDangerStyles: IButtonStyles = {\n  root: {\n    marginRight: 8,\n    border: `1px solid ${theme.palette.red}`,\n    backgroundColor: theme.palette.red,\n    color: theme.palette.white,\n  },\n  rootHovered: {\n    backgroundColor: theme.palette.white,\n    color: theme.palette.red,\n  },\n  rootPressed: {\n    backgroundColor: theme.palette.red,\n    color: theme.palette.red,\n  },\n};\n\nexport const panelHeaderStyles: ITextStyles = {\n  root: {\n    fontWeight: \"600\",\n    fontSize: \"32px\",\n    lineHeight: \"40px\",\n    flexGrow: 1,\n    margin: \"24px\",\n  },\n};\n\nexport const popupTitleStyles: ITextStyles = {\n  root: {\n    color: theme.palette.blue,\n    fontWeight: \"600\",\n    fontSize: \"20px\",\n    lineHeight: \"28px\",\n  },\n};\n\nexport const popupTitleDangerStyles: ITextStyles = {\n  root: {\n    color: theme.palette.red,\n    fontWeight: \"600\",\n    fontSize: \"20px\",\n    lineHeight: \"28px\",\n  },\n};\n\nexport const popupContentStyles: ITextStyles = {\n  root: {\n    color: theme.palette.neutralPrimary,\n    fontWeight: \"400\",\n    fontSize: \"16px\",\n    lineHeight: \"22px\",\n  },\n};\n\nexport const popupStyles = mergeStyleSets({\n  root: {\n    background: \"rgba(0, 0, 0, 0.2)\",\n    bottom: \"0\",\n    left: \"0\",\n    position: \"fixed\",\n    right: \"0\",\n    top: \"0\",\n  },\n  content: {\n    borderTopStyle: \"solid\",\n    borderTopColor: theme.palette.blue,\n    background: \"white\",\n    left: \"50%\",\n    maxWidth: \"300px\",\n    padding: \"0 1em 1em\",\n    position: \"absolute\",\n    top: \"50%\",\n    transform: \"translate(-50%, -50%)\",\n  },\n  contentDanger: {\n    borderTopStyle: \"solid\",\n    borderTopColor: theme.palette.white,\n    background: \"white\",\n    left: \"50%\",\n    maxWidth: \"500px\",\n    padding: \"0 1em 1em\",\n    position: \"absolute\",\n    top: \"50%\",\n    transform: \"translate(-50%, -50%)\",\n  },\n});\n\nexport const popupHorizontalGapStackTokens: IStackTokens = {\n  childrenGap: 10,\n  padding: 10,\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { ReactElement } from \"react\";\n\nimport {\n  DefaultButton,\n  FocusTrapZone,\n  Layer,\n  Overlay,\n  Popup,\n  PrimaryButton,\n  Stack,\n  Text,\n} from \"@fluentui/react\";\n\nimport {\n  deleteButtonStyles,\n  popupContentStyles,\n  popupHorizontalGapStackTokens,\n  popupStyles,\n  popupTitleStyles,\n} from \"./ConfirmationPopup.styles\";\nimport { IConfirmationPopupProps } from \"./IConfirmationPopupProps\";\n\nconst ConfirmationPopup = (props: IConfirmationPopupProps): ReactElement => {\n  const {\n    title,\n    description,\n    confirmButtonText,\n    cancelButtonText,\n    disableActions,\n    onConfirm,\n    onCancel,\n    onDismiss,\n  } = props;\n  return (\n    <Layer>\n      <Popup className={popupStyles.root} role=\"dialog\" aria-modal=\"true\" onDismiss={onDismiss}>\n        <Overlay onClick={onDismiss} />\n        <FocusTrapZone>\n          <div role=\"document\" className={popupStyles.content}>\n            <Stack tokens={popupHorizontalGapStackTokens}>\n              <Stack.Item>\n                <Text styles={popupTitleStyles}>{title}</Text>\n              </Stack.Item>\n              <Stack.Item>\n                <Text styles={popupContentStyles}>{description}</Text>\n              </Stack.Item>\n              <Stack horizontal horizontalAlign=\"end\">\n                <DefaultButton\n                  onClick={onConfirm}\n                  styles={deleteButtonStyles}\n                  disabled={disableActions}\n                >\n                  {!!confirmButtonText ? confirmButtonText : \"Confirm\"}\n                </DefaultButton>\n                <PrimaryButton onClick={onCancel} disabled={disableActions}>\n                  {!!cancelButtonText ? cancelButtonText : \"Cancel\"}\n                </PrimaryButton>\n              </Stack>\n            </Stack>\n          </div>\n        </FocusTrapZone>\n      </Popup>\n    </Layer>\n  );\n};\n\nexport default ConfirmationPopup;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport styled from \"styled-components\";\n\nimport { getTheme } from \"@fluentui/react\";\n\nconst theme = getTheme();\n\nexport const CommandBarWrapper = styled.div`\n  margin-top: 0.5rem !important; // Needed to override a stack style\n`;\n\nexport const TableWrapper = styled.div<{ commandBarButtonPresent: boolean }>`\n  border: ${`1px solid ${theme.palette.neutralTertiaryAlt}`};\n  border-radius: 0.5rem;\n  padding: 0.6rem 1.5rem;\n  boxshadow: 0px 1px 6px rgba(0, 0, 0, 0.2);\n  margin: ${(props) =>\n    props.commandBarButtonPresent\n      ? \"0.5rem 1rem 1rem 1rem !important\"\n      : \"1rem !important\"}; // Needed to override a stack style\n`;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { useEffect, useState, ReactElement } from \"react\";\n\nimport { delay } from \"lodash\";\n\nimport {\n  CheckboxVisibility,\n  CommandBar,\n  DetailsList,\n  DetailsListLayoutMode,\n  IColumn,\n  ICommandBarItemProps,\n  IDetailsRowProps,\n  Stack,\n  StackItem,\n  Text,\n} from \"@fluentui/react\";\n\nimport {\n  detailsListStyles,\n  headerStackStyles,\n  headerTextStyles,\n  ContainerWrapper,\n} from \"Components/Common/SharedTableStyles.styles\";\nimport ConfirmationPopup from \"Components/ConfirmationPopup/ConfirmationPopup\";\nimport { SidePanel } from \"Components/SidePanel/SidePanel\";\nimport { OperationStatus } from \"Constants/OperationStatus\";\nimport { defaultDelay } from \"Constants/ProfileConstants\";\nimport { IDistributionList } from \"Interfaces/UserProfile/DistributionLists/IDistributionLists\";\n\nimport { CommandBarWrapper, TableWrapper } from \"./UserProfileDistributionList.styles\";\nimport { IUserProfileDistributionListProps } from \"./UserProfileDistributionListProps\";\n\n/**\n * The User Profile Distribution Lists component\n * @method\n * @returns {ReactElement} The User Profile Distribution Lists component\n */\nconst UserProfileDistributionList = (props: IUserProfileDistributionListProps): ReactElement => {\n  const {\n    distributionLists,\n    allowEditing,\n    dlRemoveStatus,\n    dlRemoveError,\n    dlRemoveAllStatus,\n    dlRemoveAllError,\n    onRemoveDl,\n    onRemoveAllDl,\n  } = props;\n\n  const [isPanelOpen, setIsPanelOpen] = useState(false);\n  const [isConfirmationOpen, setIsConfirmationOpen] = useState(false);\n  const [selectedDl, setSelectedDl] = useState<IDistributionList>();\n\n  const columns = [\n    {\n      key: \"dlDisplayName\",\n      name: \"DL Name\",\n      fieldName: \"dlDisplayName\",\n      minWidth: 100,\n      maxWidth: 400,\n      isResizable: true,\n    },\n    {\n      key: \"dlMail\",\n      name: \"DL Email\",\n      fieldName: \"dlMail\",\n      minWidth: 100,\n      maxWidth: 400,\n      isResizable: true,\n    },\n    {\n      key: \"joinedEmail\",\n      name: \"User Email\",\n      fieldName: \"joinedEmail\",\n      minWidth: 100,\n      maxWidth: 400,\n      isResizable: true,\n    },\n  ];\n\n  const openConfirmationModal = (): void => {\n    setIsConfirmationOpen(true);\n  };\n\n  const dismissConfirmationModal = (): void => {\n    setIsConfirmationOpen(false);\n  };\n\n  const onClickRemove = (distributionList: IDistributionList): void => {\n    if (!allowEditing) return;\n\n    setIsPanelOpen(true);\n    setSelectedDl(distributionList);\n  };\n\n  const dismissPanel = (): void => {\n    setIsPanelOpen(false);\n  };\n\n  const renderItemColumn = (item: IDistributionList, _?: number, column?: IColumn): JSX.Element => {\n    const fieldContent = item[column?.fieldName as keyof IDistributionList] as string;\n    return <span>{fieldContent}</span>;\n  };\n\n  const onRenderRow = (props?: IDetailsRowProps, defaultRender?: any): React.ReactElement => {\n    const distributionList = props!.item as IDistributionList;\n\n    return defaultRender!({\n      ...props,\n      item: distributionList,\n      onClick: () => onClickRemove(distributionList),\n    });\n  };\n\n  const isRemovingDl = dlRemoveStatus === OperationStatus.Pending;\n  const isRemovingAllDl = dlRemoveAllStatus === OperationStatus.Pending;\n\n  const items: ICommandBarItemProps[] = [\n    {\n      key: \"removeUserFromDl\",\n      text: \"Remove all\",\n      iconProps: { iconName: \"UserRemove\" },\n      disabled: distributionLists.length === 0,\n      onClick: (): void => {\n        openConfirmationModal();\n      },\n    },\n  ];\n\n  useEffect(() => {\n    if (\n      dlRemoveStatus === OperationStatus.Succeeded ||\n      dlRemoveAllStatus === OperationStatus.Succeeded\n    ) {\n      delay(dismissPanel, defaultDelay);\n    }\n  }, [\n    dlRemoveStatus === OperationStatus.Succeeded,\n    dlRemoveAllStatus === OperationStatus.Succeeded,\n  ]);\n\n  return (\n    <>\n      <ContainerWrapper>\n        <Stack>\n          <Stack styles={headerStackStyles}>\n            <Text styles={headerTextStyles}>DL membership</Text>\n          </Stack>\n          {allowEditing && (\n            <CommandBarWrapper>\n              <CommandBar items={items} ariaLabel=\"Remove all\" />\n            </CommandBarWrapper>\n          )}\n          <TableWrapper commandBarButtonPresent={allowEditing}>\n            <DetailsList\n              items={distributionLists}\n              columns={columns}\n              setKey=\"set\"\n              layoutMode={DetailsListLayoutMode.justified}\n              ariaLabelForSelectionColumn=\"Toggle selection\"\n              ariaLabelForSelectAllCheckbox=\"Toggle selection for all items\"\n              checkButtonAriaLabel=\"select row\"\n              checkboxVisibility={CheckboxVisibility.hidden}\n              onRenderRow={onRenderRow}\n              onRenderItemColumn={renderItemColumn}\n              styles={detailsListStyles}\n            />\n            {distributionLists.length < 1 && <>No distribution lists for this user.</>}\n          </TableWrapper>\n        </Stack>\n      </ContainerWrapper>\n\n      {isConfirmationOpen && (\n        <ConfirmationPopup\n          title=\"Join Request\"\n          description=\"This action will remove the user from all DLs and the Exchange tenant, are you sure?\"\n          confirmButtonText=\"Proceed\"\n          disableActions={isRemovingAllDl}\n          onDismiss={dismissConfirmationModal}\n          onConfirm={onRemoveAllDl}\n          onCancel={dismissConfirmationModal}\n        />\n      )}\n\n      <SidePanel\n        isOpen={isPanelOpen}\n        title={selectedDl?.dlDisplayName ?? \"\"}\n        saveButtonLabel=\"Remove\"\n        error={dlRemoveError}\n        disableActions={isRemovingDl}\n        onDismiss={dismissPanel}\n        onSave={(): void => {\n          onRemoveDl(selectedDl as IDistributionList);\n        }}\n      >\n        <Stack tokens={{ childrenGap: \"1rem\" }}>\n          <StackItem>You can remove the user from this DL by clicking Remove.</StackItem>\n        </Stack>\n      </SidePanel>\n    </>\n  );\n};\n\nexport default UserProfileDistributionList;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { OperationStatus } from \"Constants/OperationStatus\";\nimport { AppState } from \"Dataflows/Reducers\";\nimport { IMVPUserProfile } from \"Interfaces/MVP/IMVPUserProfile\";\n\n/**\n * Returns selected user profile.\n * @param appState\n */\nexport const getSelectedUserProfile = (state: AppState): IMVPUserProfile | undefined =>\n  state.mvpState.selectedUserProfileState.selectedUserProfile;\n\n/**\n * Returns loading status of user profile.\n * @param appState\n * @returns {boolean}\n */\nexport const getUserProfileIsLoadingStatus = (state: AppState): boolean =>\n  state.mvpState.selectedUserProfileState.userProfileOperationStatus.read ===\n  OperationStatus.Pending;\n\n/**\n * Returns error message fetch user profile fails.\n * @param appState\n * @returns {string}\n */\nexport const getFetchUserProfileErrorMessage = (state: AppState): string =>\n  state.mvpState.selectedUserProfileState.userProfileOperationStatus.read ===\n    OperationStatus.Failed && !!state.mvpState.selectedUserProfileState.fetchUserProfileErrorMessage\n    ? state.mvpState.selectedUserProfileState.fetchUserProfileErrorMessage\n    : \"\";\n\nexport const getUserProfileUpdateBlockShippingStatus = (state: AppState): string =>\n  state.mvpState.selectedUserProfileState.updateBlockShippingOperationStatus;\n\n/**\n * Returns update user profile is private error.\n * @param appState\n * @returns {string}\n */\nexport const getUserProfileUpdateIsPrivateError = (state: AppState): string =>\n  state.mvpState.selectedUserProfileState.updateIsPrivateProfileError;\n\n/**\n * Returns update user profile is private operation status.\n * @param appState\n * @returns {OperationStatus}\n */\nexport const getUserProfileUpdateIsPrivateOperationStatus = (state: AppState): OperationStatus =>\n  state.mvpState.selectedUserProfileState.updateIsPrivateProfileStatus;\n\n/**\n * Returns update user profile primary email operation status.\n * @param appState\n * @returns {OperationStatus}\n */\nexport const getUserProfileUpdatePrimaryEmailStatus = (state: AppState): OperationStatus =>\n  state.mvpState.selectedUserProfileState.updatePrimaryEmailStatus;\n\n/**\n * Returns update user profile primary email error.\n * @param appState\n * @returns {string}\n */\nexport const getUserProfileUpdatePrimaryEmailErrorMessage = (state: AppState): string =>\n  state.mvpState.selectedUserProfileState.updatePrimaryEmailErrorMessage;\n\n/**\n * Returns update user profile annual exception error.\n * @param appState\n * @returns {string}\n */\nexport const getUserProfileUpdateAnnualExceptionError = (state: AppState): string =>\n  state.mvpState.selectedUserProfileState.updateAnnualExceptionProfileError;\n\n/**\n * Returns update user profile annual exception operation status.\n * @param appState\n * @returns {OperationStatus}\n */\nexport const getUserProfileUpdateAnnualExceptionOperationStatus = (\n  state: AppState\n): OperationStatus => state.mvpState.selectedUserProfileState.updateAnnualExceptionProfileStatus;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { useEffect, ReactElement } from \"react\";\n\nimport { useDispatch, useSelector } from \"react-redux\";\n\nimport { delay } from \"lodash\";\n\nimport { Spinner, SpinnerSize } from \"@fluentui/react\";\n\nimport { useAuth } from \"Authentication/AuthProvider\";\nimport UserProfileDistributionList from \"Components/DistributionLists/UserProfileDistributionList\";\nimport { OperationStatus } from \"Constants/OperationStatus\";\nimport { defaultDelay } from \"Constants/ProfileConstants\";\nimport { PermissionsEnum } from \"Constants/RolesPermissionsConstants\";\nimport { TenantTypesEnum } from \"Constants/TenantTypes\";\nimport { getSelectedUserProfile } from \"Dataflows/MVP/UserProfile/MVPUserProfileSelector\";\nimport {\n  userProfileDlLoad,\n  userProfileDlRemove,\n  userProfileDlRemoveAll,\n} from \"Dataflows/UserProfile/UserProfileAction\";\nimport {\n  getUserProfileDl,\n  getUserProfileDlLoadStatus,\n  getUserProfileDlRemoveAllError,\n  getUserProfileDlRemoveAllStatus,\n  getUserProfileDlRemoveError,\n  getUserProfileDlRemoveStatus,\n} from \"Dataflows/UserProfile/UserProfileSelector\";\nimport { IDistributionList } from \"Interfaces/UserProfile/DistributionLists/IDistributionLists\";\n\n/**\n * The Most Valuable Professional Distribution Lists component\n * @method\n * @returns {ReactElement} The Most Valuable Professional Distribution Lists component\n */\nconst MostValuableProfessionalDistributionLists = (): ReactElement => {\n  const { hasPermission } = useAuth();\n  const dispatch = useDispatch();\n  const distributionList = useSelector(getUserProfileDl);\n  const distributionListLoadStatus = useSelector(getUserProfileDlLoadStatus);\n  const distributionListRemoveStatus = useSelector(getUserProfileDlRemoveStatus);\n  const distributionListRemoveError = useSelector(getUserProfileDlRemoveError);\n  const distributionListRemoveAllStatus = useSelector(getUserProfileDlRemoveAllStatus);\n  const distributionListRemoveAllError = useSelector(getUserProfileDlRemoveAllError);\n  const userProfileId = useSelector(getSelectedUserProfile)?.id as number;\n\n  const canEditDistributionListMembership = hasPermission(\n    TenantTypesEnum.MVP,\n    PermissionsEnum.MVP_UPDATE_DISTRIBUTIONS_LIST\n  );\n\n  const handleLoadDl = (): void => {\n    dispatch(userProfileDlLoad(userProfileId, TenantTypesEnum.MVP));\n  };\n\n  const handleRemove = (distributionList: IDistributionList): void => {\n    dispatch(\n      userProfileDlRemove(\n        distributionList.dlDisplayName,\n        distributionList.joinedEmail,\n        TenantTypesEnum.MVP\n      )\n    );\n  };\n\n  const handleRemoveAll = (): void => {\n    dispatch(userProfileDlRemoveAll(userProfileId, TenantTypesEnum.MVP));\n  };\n\n  useEffect(() => {\n    if (distributionListLoadStatus !== OperationStatus.Pending) {\n      handleLoadDl();\n    }\n  }, []);\n\n  useEffect(() => {\n    if (\n      distributionListRemoveStatus === OperationStatus.Succeeded ||\n      distributionListRemoveAllStatus === OperationStatus.Succeeded\n    ) {\n      delay(handleLoadDl, defaultDelay);\n    }\n  }, [distributionListRemoveStatus, distributionListRemoveAllStatus]);\n\n  if (distributionListLoadStatus === OperationStatus.Pending)\n    return <Spinner size={SpinnerSize.large} />;\n\n  return (\n    <UserProfileDistributionList\n      distributionLists={distributionList}\n      allowEditing={canEditDistributionListMembership}\n      onRemoveDl={handleRemove}\n      onRemoveAllDl={handleRemoveAll}\n      dlRemoveStatus={distributionListRemoveStatus}\n      dlRemoveError={distributionListRemoveError}\n      dlRemoveAllStatus={distributionListRemoveAllStatus}\n      dlRemoveAllError={distributionListRemoveAllError}\n    />\n  );\n};\n\nexport default MostValuableProfessionalDistributionLists;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React from \"react\";\n\nimport { useForm } from \"react-hook-form\";\n\nimport * as Yup from \"yup\";\n\nimport { Link, Stack, StackItem, Text } from \"@fluentui/react\";\nimport { yupResolver } from \"@hookform/resolvers/yup\";\n\nimport { bodyContainerStackStyles } from \"Components/Common/SharedTableStyles.styles\";\nimport TextFieldController from \"Components/ReactHookForm/TextFieldController/TextFieldController\";\nimport { SidePanel } from \"Components/SidePanel/SidePanel\";\nimport { OperationStatus } from \"Constants/OperationStatus\";\n\nimport IGrantAnnualExceptionSidePanelProps from \"./IGrantAnnualExceptionSidePanelProps\";\n\nexport const GrantAnnualExceptionSidePanel: React.FunctionComponent<\n  IGrantAnnualExceptionSidePanelProps\n> = (props: IGrantAnnualExceptionSidePanelProps) => {\n  const { isOpen, updateStatus, updateError, onDismiss, onSave } = props;\n\n  const title = \"Grant Annual Exception\";\n\n  const disableActions = updateStatus === OperationStatus.Pending;\n\n  const {\n    control,\n    handleSubmit,\n    reset,\n    formState: { errors },\n  } = useForm({\n    resolver: yupResolver(\n      Yup.object().shape({\n        justification: Yup.string().required(\"Justification is required\").max(3900),\n      })\n    ),\n  });\n\n  const dismissPanel = (): void => {\n    !!onDismiss && onDismiss();\n    reset();\n  };\n\n  const save = () =>\n    handleSubmit((formData) => {\n      !!onSave && onSave(formData.justification);\n    });\n\n  return (\n    <form onSubmit={save()}>\n      <SidePanel\n        isOpen={isOpen}\n        title={title}\n        saveButtonLabel=\"Save\"\n        error={updateError}\n        disableActions={disableActions}\n        onDismiss={dismissPanel}\n        onSave={save()}\n      >\n        <Stack styles={bodyContainerStackStyles} tokens={{ childrenGap: \"1rem\" }}>\n          <StackItem>\n            <Text>\n              This function will exclude the user from the annual review, and they will renew in the\n              program at the end of the Award Period. Please review\n              <Link\n                href=\"https://dev.azure.com/devrel/mvp/_wiki/wikis/MVP.wiki/3291/Renewal-for-MVPs-with-special-circumstances\"\n                target=\"_blank\"\n              >\n                {\" Renewal for MVPs with special circumstances \"}\n              </Link>\n              to provide\n            </Text>\n          </StackItem>\n          <StackItem>\n            <TextFieldController\n              inputName=\"justification\"\n              control={control}\n              errors={errors}\n              isRequired\n              isMultiline\n              hasTooltip\n              labelDisplayName=\"Justification\"\n              characterCountLimit={3900}\n            />\n          </StackItem>\n        </Stack>\n      </SidePanel>\n    </form>\n  );\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport {\n  getTheme,\n  FontSizes,\n  FontWeights,\n  ICommandBarStyles,\n  ILabelStyles,\n  IStackItemStyles,\n  IStackStyles,\n  IStackTokens,\n  ITextStyles,\n} from \"@fluentui/react\";\n\nconst theme = getTheme();\n\n/**\n * Token for the body stack\n */\nexport const bodyContainerStackTokens = (): IStackTokens => {\n  return { childrenGap: \"1rem\" };\n};\n\n/**\n * Styling for the body row stack\n */\nexport const bodyRowStackStyles = (): IStackStyles => {\n  return { root: { display: \"flex\", justifyContent: \"space-between\" } };\n};\n\n/**\n * Styling for the body column stack\n */\nexport const bodyColumnStackItemStyles = (): IStackItemStyles => {\n  return { root: { width: \"50%\" } };\n};\n\n/**\n * Styling for the header text\n */\nexport const subHeaderTextStyles = (): ITextStyles => {\n  return {\n    root: {\n      fontWeight: 600,\n      fontSize: FontSizes.size18,\n      padding: \"1rem 1.5rem\",\n    },\n  };\n};\n\n/**\n * Styling for the label\n */\nexport const labelStyles = (): ILabelStyles => {\n  return { root: { fontWeight: 600 } };\n};\n\n/**\n * Styling for the label without bold\n */\nexport const labelStylesNormal = (): ILabelStyles => {\n  return { root: { fontWeight: \"normal\" } };\n};\n\nexport const commandBarStyles: ICommandBarStyles = {\n  root: {\n    borderRadius: \"8px\",\n    boxShadow: \" 0px 1px 4px rgba(0, 0, 0, 0.2)\",\n    margin: \"1rem 0.5rem 0\",\n    padding: \"0.75rem\",\n    selectors: {\n      [\"button\"]: {\n        marginRight: \"36px\",\n      },\n      [\".ms-Button-label\"]: {\n        fontSize: \"14px\",\n        fontWeight: FontWeights.semibold,\n      },\n    },\n  },\n};\n\nexport const commandBarBlockShippingCommandStyle = {\n  color: theme.palette.red,\n};\n\nexport const commandBarUnblockStyles: ICommandBarStyles = {\n  root: {\n    borderRadius: \"8px\",\n    boxShadow: \" 0px 1px 4px rgba(0, 0, 0, 0.2)\",\n    margin: \"1rem 0.5rem 0\",\n    padding: \"0.75rem\",\n    selectors: {\n      [\"button\"]: {\n        marginRight: \"36px\",\n      },\n      [\".ms-Button-label\"]: {\n        fontSize: \"14px\",\n        fontWeight: FontWeights.semibold,\n      },\n    },\n  },\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { useEffect, useState, ReactElement } from \"react\";\n\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { Redirect } from \"react-router-dom\";\n\nimport { find } from \"lodash\";\n\nimport { CommandBar, ICommandBarItemProps, Label, Stack, StackItem, Text } from \"@fluentui/react\";\n\nimport { useAuth } from \"Authentication/AuthProvider\";\nimport {\n  bodyContainerStackStyles,\n  headerStackStyles,\n  headerTextStyles,\n  ContainerWrapper,\n} from \"Components/Common/SharedTableStyles.styles\";\nimport { GrantAnnualExceptionSidePanel } from \"Components/GrantAnnualExceptionSidePanel/GrantAnnualExceptionSidePanel\";\nimport { SetProfileToPrivateSidePanel } from \"Components/SetProfileToPrivateSidePanel/SetProfileToPrivateSidePanel\";\nimport { OperationStatus } from \"Constants/OperationStatus\";\nimport { namesLocalized } from \"Constants/ProfileConstants\";\nimport { RolesEnum } from \"Constants/RolesPermissionsConstants\";\nimport {\n  fetchUserProfile,\n  userProfileAnnualExceptionUpdate,\n  userProfileIsPrivateUpdate,\n} from \"Dataflows/MVP/MVPAction\";\nimport {\n  getSelectedUserProfile,\n  getUserProfileUpdateAnnualExceptionError,\n  getUserProfileUpdateAnnualExceptionOperationStatus,\n  getUserProfileUpdateIsPrivateError,\n  getUserProfileUpdateIsPrivateOperationStatus,\n} from \"Dataflows/MVP/UserProfile/MVPUserProfileSelector\";\nimport { formatDate } from \"Utility/FormatHelper\";\n\nimport {\n  bodyColumnStackItemStyles,\n  bodyContainerStackTokens,\n  bodyRowStackStyles,\n  commandBarStyles,\n  commandBarUnblockStyles,\n  labelStyles,\n  subHeaderTextStyles,\n} from \"./MostValuableProfessionalProfile.styles\";\n\n/**\n * The Most Valuable Professional Profile component\n * @method\n * @returns {ReactElement} The Most Valuable Professional Profile Details component\n */\nconst MostValuableProfessionalProfile = (): ReactElement => {\n  const { isUserLoggedIn, loading, hasAnyRoles, hasRole } = useAuth();\n  const [isSetToPrivatePanelOpen, setIsSetToPrivatePanelOpen] = useState(false);\n  const [isGrantAnnualExceptionPanelOpen, setIsGrantAnnualExceptionPanelOpen] = useState(false);\n  const profileInfo = useSelector(getSelectedUserProfile);\n  const userProfileIsPrivateUpdateStatus = useSelector(\n    getUserProfileUpdateIsPrivateOperationStatus\n  );\n  const userProfileIsPrivateUpdateError = useSelector(getUserProfileUpdateIsPrivateError);\n\n  const userProfileAnnualExceptionUpdateStatus = useSelector(\n    getUserProfileUpdateAnnualExceptionOperationStatus\n  );\n  const userProfileAnnualExceptionUpdateError = useSelector(\n    getUserProfileUpdateAnnualExceptionError\n  );\n\n  const dispatch = useDispatch();\n\n  if (isUserLoggedIn && !hasAnyRoles && !loading) {\n    return <Redirect to=\"/unauthorized\" />;\n  }\n\n  useEffect(() => {\n    if (userProfileIsPrivateUpdateStatus === OperationStatus.Succeeded && profileInfo?.id) {\n      setIsSetToPrivatePanelOpen(false);\n      dispatch(fetchUserProfile(profileInfo.id));\n    }\n  }, [userProfileIsPrivateUpdateStatus]);\n\n  useEffect(() => {\n    if (userProfileAnnualExceptionUpdateStatus === OperationStatus.Succeeded && profileInfo?.id) {\n      setIsGrantAnnualExceptionPanelOpen(false);\n      dispatch(fetchUserProfile(profileInfo.id));\n    }\n  }, [userProfileAnnualExceptionUpdateStatus]);\n\n  const handleSetProfileToPrivateTogglePanel = (): void => {\n    if (profileInfo && profileInfo.id) {\n      setIsSetToPrivatePanelOpen(!isSetToPrivatePanelOpen);\n    }\n  };\n\n  const handleGrantAnnualExceptionTogglePanel = (): void => {\n    if (profileInfo && profileInfo.id) {\n      setIsGrantAnnualExceptionPanelOpen(!isGrantAnnualExceptionPanelOpen);\n    }\n  };\n\n  const handleSetProfileToPrivateSave = (): void => {\n    if (profileInfo && profileInfo.id) {\n      dispatch(userProfileIsPrivateUpdate(!profileInfo.isPrivate, profileInfo.id));\n    }\n  };\n\n  const handleGrantAnnualExceptionSave = (justification): void => {\n    if (profileInfo && profileInfo.id) {\n      dispatch(userProfileAnnualExceptionUpdate(justification, profileInfo.id));\n    }\n  };\n\n  const canEditUser =\n    hasRole(RolesEnum.MVP_BENEFITS_MANAGER) || hasRole(RolesEnum.MVP_PROGRAM_OWNER);\n  const canGrantAnnualException =\n    (hasRole(RolesEnum.MVP_BUSINESS_GROUP) || hasRole(RolesEnum.MVP_PROGRAM_OWNER)) &&\n    profileInfo?.isInCurrentCohort;\n\n  const commandBarItems: ICommandBarItemProps[] = [];\n  if (canEditUser) {\n    commandBarItems.push({\n      key: \"setProfileToPrivate\",\n      text: `Set Profile to ${profileInfo?.isPrivate ? \"Public\" : \"Private\"}`,\n      iconProps: { iconName: `${profileInfo?.isPrivate ? \"UserFollowed\" : \"UserRemove\"}` },\n      onClick: (): void => {\n        handleSetProfileToPrivateTogglePanel();\n      },\n    });\n  }\n\n  if (canGrantAnnualException) {\n    commandBarItems.push({\n      key: \"grantAnnualException\",\n      text: \"Grant Annual Exception\",\n      disabled: profileInfo?.isAnnualException,\n      onClick: (): void => {\n        handleGrantAnnualExceptionTogglePanel();\n      },\n    });\n  }\n\n  return (\n    <>\n      <Stack tokens={{ childrenGap: \"1.5rem\" }}>\n        {(canEditUser || canGrantAnnualException) && (\n          <CommandBar\n            items={commandBarItems}\n            ariaLabel=\"Edit user actions\"\n            styles={profileInfo?.isShippingBlocked ? commandBarUnblockStyles : commandBarStyles}\n          />\n        )}\n\n        <ContainerWrapper>\n          <Stack styles={headerStackStyles}>\n            <Text styles={headerTextStyles}>Personal Information</Text>\n          </Stack>\n          <Stack styles={bodyContainerStackStyles} tokens={bodyContainerStackTokens}>\n            <Stack horizontal styles={bodyRowStackStyles}>\n              <StackItem styles={bodyColumnStackItemStyles}>\n                <Label styles={labelStyles}>First Name</Label>\n                <Text>{profileInfo?.firstName}</Text>\n              </StackItem>\n              <StackItem styles={bodyColumnStackItemStyles}>\n                <Label styles={labelStyles}>Last Name</Label>\n                <Text>{profileInfo?.lastName}</Text>\n              </StackItem>\n            </Stack>\n            <Stack horizontal styles={bodyRowStackStyles}>\n              <StackItem styles={bodyColumnStackItemStyles}>\n                <Label styles={labelStyles}>Localized First Name</Label>\n                <Text>{profileInfo?.localizedFirstName}</Text>\n              </StackItem>\n              <StackItem styles={bodyColumnStackItemStyles}>\n                <Label styles={labelStyles}>Localized Last Name</Label>\n                <Text>{profileInfo?.localizedLastName}</Text>\n              </StackItem>\n            </Stack>\n            <Stack horizontal styles={bodyRowStackStyles}>\n              <StackItem styles={bodyColumnStackItemStyles}>\n                <Label styles={labelStyles}>Print Name</Label>\n                <Text>\n                  {find(namesLocalized, (o) => o.key === !!profileInfo?.awardNameLocalized)?.text}\n                </Text>\n              </StackItem>\n              <StackItem styles={bodyColumnStackItemStyles}>\n                <Label styles={labelStyles}>Display Name</Label>\n                <Text>\n                  {find(namesLocalized, (o) => o.key === !!profileInfo?.screenNameLocalized)?.text}\n                </Text>\n              </StackItem>\n            </Stack>\n            <Stack horizontal styles={bodyRowStackStyles}>\n              <StackItem styles={bodyColumnStackItemStyles}>\n                <Label styles={labelStyles}>Title</Label>\n                <Text>{profileInfo?.titleName}</Text>\n              </StackItem>\n              <StackItem styles={bodyColumnStackItemStyles}>\n                <Label styles={labelStyles}>Date of birth</Label>\n                {!!profileInfo?.dateOfBirth ? (\n                  <Text>{formatDate(new Date(profileInfo?.dateOfBirth))}</Text>\n                ) : (\n                  <></>\n                )}\n              </StackItem>\n            </Stack>\n            <Stack horizontal styles={bodyRowStackStyles}>\n              <StackItem styles={bodyColumnStackItemStyles}>\n                <Label styles={labelStyles}>Gender</Label>\n                <Text>{profileInfo?.genderName}</Text>\n              </StackItem>\n              <StackItem styles={bodyColumnStackItemStyles}>\n                <Label styles={labelStyles}>Pronoun</Label>\n                <Text>{profileInfo?.genderPronounPreferenceName}</Text>\n              </StackItem>\n            </Stack>\n            <Stack horizontal styles={bodyRowStackStyles}>\n              <StackItem styles={bodyColumnStackItemStyles}>\n                <Label styles={labelStyles}>Shirt Fit Type</Label>\n                <Text>{profileInfo?.shirtFitType}</Text>\n              </StackItem>\n              <StackItem styles={bodyColumnStackItemStyles}>\n                <Label styles={labelStyles}>Shirt Size</Label>\n                <Text>{profileInfo?.shirtSize}</Text>\n              </StackItem>\n            </Stack>\n            <Stack horizontal styles={bodyRowStackStyles}>\n              <StackItem styles={bodyColumnStackItemStyles}>\n                <Label styles={labelStyles}>Languages</Label>\n                <Text>{profileInfo?.languages?.join(\", \")}</Text>\n              </StackItem>\n            </Stack>\n            <Stack horizontal styles={bodyRowStackStyles}>\n              <StackItem styles={bodyColumnStackItemStyles}>\n                <Label styles={labelStyles}>Current Employer/Organization</Label>\n                <Text>{profileInfo?.currentEmployerName}</Text>\n              </StackItem>\n              <StackItem styles={bodyColumnStackItemStyles}>\n                <Label styles={labelStyles}>Job Title</Label>\n                <Text>{profileInfo?.jobTitle}</Text>\n              </StackItem>\n            </Stack>\n            <Stack horizontal styles={bodyRowStackStyles}>\n              <StackItem styles={bodyColumnStackItemStyles}>\n                <Label styles={labelStyles}>Company Type</Label>\n                <Text>{profileInfo?.companyTypeName}</Text>\n              </StackItem>\n            </Stack>\n            <Stack horizontal styles={bodyRowStackStyles}>\n              <StackItem styles={bodyColumnStackItemStyles}>\n                <Label styles={labelStyles}>Preferred Programming Language</Label>\n                <Text>{profileInfo?.userProfileProgramLanguage?.join(\", \")}</Text>\n              </StackItem>\n              <StackItem styles={bodyColumnStackItemStyles}>\n                <Label styles={labelStyles}>Functional Role</Label>\n                <Text>{profileInfo?.userProfileFunctionalRole?.join(\", \")}</Text>\n              </StackItem>\n            </Stack>\n          </Stack>\n        </ContainerWrapper>\n        <ContainerWrapper>\n          <Stack styles={headerStackStyles}>\n            <Text styles={headerTextStyles}>Biography</Text>\n          </Stack>\n          <Stack styles={bodyContainerStackStyles} tokens={bodyContainerStackTokens}>\n            <Stack horizontal styles={bodyRowStackStyles}>\n              <StackItem styles={bodyColumnStackItemStyles}>\n                <Label styles={labelStyles}>Headline</Label>\n                <Text>{profileInfo?.headline}</Text>\n              </StackItem>\n              <StackItem styles={bodyColumnStackItemStyles}>\n                <Label styles={labelStyles}>Biography</Label>\n                <Text>{profileInfo?.biography}</Text>\n              </StackItem>\n            </Stack>\n          </Stack>\n        </ContainerWrapper>\n        <ContainerWrapper>\n          <Stack styles={headerStackStyles}>\n            <Text styles={headerTextStyles}>Address</Text>\n          </Stack>\n          <Stack>\n            <Text styles={subHeaderTextStyles}>Primary Address</Text>\n          </Stack>\n          <Stack styles={bodyContainerStackStyles} tokens={bodyContainerStackTokens}>\n            <Stack horizontal styles={bodyRowStackStyles}>\n              <StackItem styles={bodyColumnStackItemStyles}>\n                <Label styles={labelStyles}>Country Code</Label>\n                <Text>{profileInfo?.primaryPhoneCountryOrRegionName}</Text>\n              </StackItem>\n              <StackItem styles={bodyColumnStackItemStyles}>\n                <Label styles={labelStyles}>Phone number</Label>\n                <Text>{profileInfo?.primaryPhone}</Text>\n              </StackItem>\n            </Stack>\n            <Stack horizontal styles={bodyRowStackStyles}>\n              <StackItem styles={bodyColumnStackItemStyles}>\n                <Label styles={labelStyles}>Address Line 1</Label>\n                <Text>{profileInfo?.address1}</Text>\n              </StackItem>\n              <StackItem styles={bodyColumnStackItemStyles}>\n                <Label styles={labelStyles}>Address Line 2</Label>\n                <Text>{profileInfo?.address2}</Text>\n              </StackItem>\n            </Stack>\n            <Stack horizontal styles={bodyRowStackStyles}>\n              <StackItem styles={bodyColumnStackItemStyles}>\n                <Label styles={labelStyles}>City</Label>\n                <Text>{profileInfo?.addressCity}</Text>\n              </StackItem>\n              <StackItem styles={bodyColumnStackItemStyles}>\n                <Label styles={labelStyles}>State/Province</Label>\n                <Text>{profileInfo?.addressStateOrProvince}</Text>\n              </StackItem>\n            </Stack>\n            <Stack horizontal styles={bodyRowStackStyles}>\n              <StackItem styles={bodyColumnStackItemStyles}>\n                <Label styles={labelStyles}>Post code</Label>\n                <Text>{profileInfo?.addressPostCode}</Text>\n              </StackItem>\n              <StackItem styles={bodyColumnStackItemStyles}>\n                <Label styles={labelStyles}>Country Region</Label>\n                <Text>{profileInfo?.addressCountryOrRegionName}</Text>\n              </StackItem>\n            </Stack>\n          </Stack>\n          {!profileInfo?.shippingSameAsAddress ? (\n            <>\n              <Stack>\n                <Text styles={subHeaderTextStyles}>Shipping Address</Text>\n              </Stack>\n              <Stack styles={bodyContainerStackStyles} tokens={bodyContainerStackTokens}>\n                <Stack horizontal styles={bodyRowStackStyles}>\n                  <StackItem styles={bodyColumnStackItemStyles}>\n                    <Label styles={labelStyles}>Country Code</Label>\n                    <Text>{profileInfo?.shippingPhoneCountryOrRegionName}</Text>\n                  </StackItem>\n                  <StackItem styles={bodyColumnStackItemStyles}>\n                    <Label styles={labelStyles}>Phone number</Label>\n                    <Text>{profileInfo?.shippingPhoneNumber}</Text>\n                  </StackItem>\n                </Stack>\n                <Stack horizontal styles={bodyRowStackStyles}>\n                  <StackItem styles={bodyColumnStackItemStyles}>\n                    <Label styles={labelStyles}>Address Line 1</Label>\n                    <Text>{profileInfo?.shippingAddress1}</Text>\n                  </StackItem>\n                  <StackItem styles={bodyColumnStackItemStyles}>\n                    <Label styles={labelStyles}>Address Line 2</Label>\n                    <Text>{profileInfo?.shippingAddress2}</Text>\n                  </StackItem>\n                </Stack>\n                <Stack horizontal styles={bodyRowStackStyles}>\n                  <StackItem styles={bodyColumnStackItemStyles}>\n                    <Label styles={labelStyles}>City</Label>\n                    <Text>{profileInfo?.shippingCity}</Text>\n                  </StackItem>\n                  <StackItem styles={bodyColumnStackItemStyles}>\n                    <Label styles={labelStyles}>State/Province</Label>\n                    <Text>{profileInfo?.shippingStateOrProvince}</Text>\n                  </StackItem>\n                </Stack>\n\n                <Stack horizontal styles={bodyRowStackStyles}>\n                  <StackItem styles={bodyColumnStackItemStyles}>\n                    <Label styles={labelStyles}>Post code</Label>\n                    <Text>{profileInfo?.shippingPostCode}</Text>\n                  </StackItem>\n                  <StackItem styles={bodyColumnStackItemStyles}>\n                    <Label styles={labelStyles}>Country Region</Label>\n                    <Text>{profileInfo?.shippingCountryOrRegionName}</Text>\n                  </StackItem>\n                </Stack>\n              </Stack>\n            </>\n          ) : (\n            <></>\n          )}\n        </ContainerWrapper>\n        <ContainerWrapper>\n          <Stack styles={headerStackStyles}>\n            <Text styles={headerTextStyles}>Social Media</Text>\n          </Stack>\n          <Stack styles={bodyContainerStackStyles} tokens={bodyContainerStackTokens}>\n            {profileInfo?.userProfileSocialNetwork.map((x) => (\n              <Stack key={x.id} horizontal styles={bodyRowStackStyles}>\n                <StackItem styles={bodyColumnStackItemStyles}>\n                  <Label styles={labelStyles}>Network</Label>\n                  <Text>{x?.socialNetworkName}</Text>\n                </StackItem>\n                <StackItem styles={bodyColumnStackItemStyles}>\n                  <Label styles={labelStyles}>Link/URL</Label>\n                  <Text>{x?.socialNetworkImageLink}</Text>\n                </StackItem>\n              </Stack>\n            ))}\n          </Stack>\n        </ContainerWrapper>\n      </Stack>\n      <SetProfileToPrivateSidePanel\n        userProfileId={profileInfo?.id ?? 0}\n        isPrivate={profileInfo?.isPrivate ?? false}\n        isOpen={isSetToPrivatePanelOpen}\n        updateStatus={userProfileIsPrivateUpdateStatus}\n        updateError={userProfileIsPrivateUpdateError}\n        onDismiss={handleSetProfileToPrivateTogglePanel}\n        onSave={handleSetProfileToPrivateSave}\n      />\n      <GrantAnnualExceptionSidePanel\n        userProfileId={profileInfo?.id ?? 0}\n        isOpen={isGrantAnnualExceptionPanelOpen}\n        updateStatus={userProfileAnnualExceptionUpdateStatus}\n        updateError={userProfileAnnualExceptionUpdateError}\n        onDismiss={handleGrantAnnualExceptionTogglePanel}\n        onSave={handleGrantAnnualExceptionSave}\n      />\n    </>\n  );\n};\n\nexport default MostValuableProfessionalProfile;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport {\n  IDropdownStyles,\n  IDropdownStyleProps,\n  IIconStyles,\n  IStyleFunctionOrObject,\n} from \"@fluentui/react\";\n\n/**\n * Styling for text field control.\n * @type {IStyleFunctionOrObject<IDropdownStyleProps, IDropdownStyles>}\n */\nexport const dropdownStyles: IStyleFunctionOrObject<IDropdownStyleProps, IDropdownStyles> = {\n  root: { width: \"100%\" },\n};\n\n/**\n * Styling for Icon control.\n * @type {Partial<IIconStyles>}\n * @param {boolean} hasAsterisk The value to determine if control label has required asterisk.\n */\nexport const getIconStyles: (hasAsterisk: boolean) => Partial<IIconStyles> = (hasAsterisk) => {\n  return { root: { paddingLeft: !hasAsterisk ? \"10px\" : \"\", cursor: \"default\" } };\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { useEffect, useState } from \"react\";\n\nimport { Controller } from \"react-hook-form\";\n\nimport { Dropdown, IDropdownOption } from \"office-ui-fabric-react/lib/Dropdown\";\nimport { Label } from \"office-ui-fabric-react/lib/Label\";\nimport { TooltipHost } from \"office-ui-fabric-react/lib/Tooltip\";\n\nimport { Icon } from \"@fluentui/react/lib/Icon\";\n\nimport { FlexCol, FlexRow } from \"Components/Common/Layout/Layout\";\nimport { HookErrorMessage } from \"Components/ReactHookForm/HookErrorMessage/HookErrorMessage\";\n\nimport { IMultiDropdownControllerProps } from \"./IMultiDropdownControllerProps\";\nimport { dropdownStyles, getIconStyles } from \"./MultiDropdownController.styles\";\n\n/**\n * MultiDropdownController.\n * @component\n * @param {IMultiDropdownControllerProps} props The component props.\n * @returns {React.ReactElement} MultiDropdownController\n */\nexport const MultiDropdownController = (\n  props: IMultiDropdownControllerProps\n): React.ReactElement => {\n  const [count, setCount] = useState(0);\n  const [dropdownOptions, setDropdownOptions] = useState(props.options);\n  const [selectedItems, setSelectedItems] = useState<(string | number)[]>(\n    props.defaultValues || []\n  );\n\n  useEffect(() => {\n    setSelectedItems(props.defaultValues || []);\n    setCount(props.defaultValues?.length || 0);\n  }, []);\n\n  useEffect(() => {\n    if (!!props.maxLimit) {\n      if (count >= props.maxLimit) {\n        // where it's not the answer selected.\n        dropdownOptions.forEach((option) => {\n          if (!selectedItems.includes(option.key)) option.disabled = true;\n        });\n      } else {\n        dropdownOptions.forEach((option) => (option.disabled = false));\n      }\n      setDropdownOptions((dropdownOptions) => [...dropdownOptions]);\n    }\n  }, [count]);\n\n  /**\n   *\n   * @param {void} formOnChange React hook form onChange\n   * @param {React.FormEvent<HTMLDivElement>} _event event when user selects/deselects\n   * @param {IDropdownOption | undefined} item item clicked\n   * @param {(string | number)[]} values values selected\n   * @returns {void} onchange for multi select\n   */\n  const onChange = (\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    formOnChange: (...event: any[]) => void,\n    _event: React.FormEvent<HTMLDivElement>,\n    item: IDropdownOption | undefined,\n    values: (string | number)[]\n  ): void => {\n    const newSelectedItems = [...values];\n    if (!!item) {\n      const currIndex = newSelectedItems.indexOf(item.key);\n      if (item.selected) {\n        !!props.onItemSelected && props.onItemSelected(item, currIndex);\n        // add the option if it's checked\n        newSelectedItems.push(item.key);\n      } else {\n        // remove the option if it's unchecked\n        if (currIndex > -1) {\n          !!props.onItemRemoved && props.onItemRemoved(item, currIndex);\n          newSelectedItems.splice(currIndex, 1);\n        }\n      }\n    }\n    setSelectedItems(newSelectedItems);\n    setCount(newSelectedItems.length);\n    formOnChange(newSelectedItems);\n  };\n\n  return (\n    <FlexCol>\n      <FlexRow>\n        <Label htmlFor={props.inputName} required={props.isRequired} styles={props.labelStyles}>\n          {props.labelDisplayName}\n        </Label>\n        {props.hasTooltip && (\n          <TooltipHost\n            id={props.inputName}\n            content={props.toolTipDisplayText || props.labelDisplayName}\n          >\n            <Icon\n              aria-label=\"information\"\n              iconName=\"info\"\n              role=\"img\"\n              styles={getIconStyles(!!props.isRequired)}\n              tabIndex={0}\n            />\n          </TooltipHost>\n        )}\n      </FlexRow>\n      <FlexRow>\n        <Controller\n          name={props.inputName}\n          control={props.control}\n          render={({ field }): JSX.Element => (\n            <Dropdown\n              styles={dropdownStyles}\n              ariaLabel={props.labelDisplayName}\n              selectedKeys={selectedItems as string[] | number[]}\n              onChange={(e, option): void => {\n                onChange(field.onChange, e, option, selectedItems);\n              }}\n              options={dropdownOptions}\n              disabled={props.isDisabled}\n              multiSelect={true}\n              placeholder={props.placeholderText}\n            />\n          )}\n        />\n      </FlexRow>\n      <HookErrorMessage errors={props.errors} inputName={props.inputName} />\n    </FlexCol>\n  );\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { OperationStatus } from \"Constants/OperationStatus\";\nimport { AppState } from \"Dataflows/Reducers\";\nimport { IOperationStatusType } from \"Interfaces/IOperationStatusType\";\nimport { IMVPProgramProfile } from \"Interfaces/MVP/IMVPProgramProfile\";\n\n/**\n * Returns program profile.\n * @param appState\n */\nexport const getProgramProfile = (state: AppState): IMVPProgramProfile | undefined =>\n  state.mvpState.programProfileState.programProfile;\n\nexport const getProgramProfileOperationStatus = (state: AppState): IOperationStatusType =>\n  state.mvpState.programProfileState.programProfileOperationStatus;\n\n/**\n * Returns save status of program profile.\n * @param appState\n * @returns {boolean}\n */\nexport const getProgramProfileStatus = (state: AppState): boolean =>\n  state.mvpState.programProfileState.programProfileOperationStatus?.update ===\n  OperationStatus.Pending;\n\n/**\n * Returns error message program profile fails.\n * @param appState\n * @returns {string}\n */\nexport const getProgramProfileErrorMessage = (state: AppState): string =>\n  state?.mvpState?.programProfileState?.programProfileErrorMessage || \"\";\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { useEffect, ReactElement } from \"react\";\n\nimport { useForm } from \"react-hook-form\";\nimport { useDispatch, useSelector } from \"react-redux\";\n\nimport * as Yup from \"yup\";\n\nimport { IPersonaProps, Stack, StackItem } from \"@fluentui/react\";\nimport { yupResolver } from \"@hookform/resolvers/yup\";\n\nimport ComboBoxController from \"Components/ReactHookForm/ComboBoxController/ComboBoxController\";\nimport DatePickerController from \"Components/ReactHookForm/DatePickerController/DatePickerController\";\nimport { MultiDropdownController } from \"Components/ReactHookForm/MultiDropdownController/MultiDropdownController\";\nimport { SidePanel } from \"Components/SidePanel/SidePanel\";\nimport { OperationStatus } from \"Constants/OperationStatus\";\nimport { mvpProgramProfileStatuses, mvpProgramProfileStrengths } from \"Constants/ProfileConstants\";\nimport {\n  fetchProgramProfile,\n  updateMVPProgramProfileReset,\n  updateProgramProfile,\n} from \"Dataflows/MVP/MVPAction\";\nimport {\n  getProgramProfileErrorMessage,\n  getProgramProfileOperationStatus,\n} from \"Dataflows/MVP/ProgramProfile/IMVPProgramProfileSelector\";\nimport { IMVPProgramProfileUpdateRequest } from \"Interfaces/MVP/IMVPProgramProfileUpdateRequest\";\n\nimport { IMostValuableProfessionalProgramProfileEditFormProps } from \"./IMostValuableProfessionalProgramProfileEditFormProps\";\nimport PeoplePickerController from \"Components/ReactHookForm/PeoplePickerController/PeoplePickerController\";\nimport { IAssignee } from \"Interfaces/IAssignee\";\n\nexport const MostValuableProfessionalProgramProfileEditForm = (\n  props: IMostValuableProfessionalProgramProfileEditFormProps\n): ReactElement => {\n  const { isPanelOpen, setIsPanelOpen, defaultValues } = props;\n\n  const {\n    control,\n    handleSubmit,\n    reset,\n    formState: { errors },\n  } = useForm({\n    defaultValues,\n    resolver: yupResolver(\n      Yup.object().shape({\n        programProfileStatus: Yup.string().required(\"Program Profile Status is required\"),\n        cpm: Yup.string().required(\"CPM is required\"),\n        firstAwardDate: Yup.date().required(\"First Award Date is required\"),\n      })\n    ),\n  });\n\n  const dispatch = useDispatch();\n  const programProfileErrorMessage = useSelector(getProgramProfileErrorMessage);\n\n  const dismissPanel = (): void => {\n    setIsPanelOpen(false);\n    reset();\n    dispatch(updateMVPProgramProfileReset());\n  };\n\n  // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n  const save = () =>\n    handleSubmit((data) => {\n      return dispatch(updateProgramProfile(data as IMVPProgramProfileUpdateRequest));\n    });\n\n  const programProfileOperationStatus = useSelector(getProgramProfileOperationStatus);\n\n  useEffect(() => {\n    if (programProfileOperationStatus.update === OperationStatus.Succeeded) {\n      dispatch(fetchProgramProfile(defaultValues.userProfileId as number));\n      dismissPanel();\n    }\n  }, [programProfileOperationStatus.update === OperationStatus.Succeeded]);\n\n  const isSaving = programProfileOperationStatus.update === OperationStatus.Pending;\n\n  const mapAssigneesToOptions = (assignees: IAssignee[]): IPersonaProps[] => {\n    return assignees.map((assignee) => {\n      return {\n        text: `${assignee.firstName} ${assignee.lastName}`,\n        secondaryText: assignee.emailAddress,\n      };\n    });\n  };\n\n  return (\n    <form onSubmit={save()}>\n      <SidePanel\n        isOpen={isPanelOpen}\n        title=\"Edit Program Details\"\n        saveButtonLabel=\"Save\"\n        error={programProfileErrorMessage}\n        disableActions={isSaving}\n        onDismiss={dismissPanel}\n        onSave={save()}\n      >\n        <Stack tokens={{ childrenGap: \"1rem\" }}>\n          <StackItem>\n            <ComboBoxController\n              control={control}\n              errors={errors}\n              inputName=\"programProfileStatus\"\n              isRequired={true}\n              labelDisplayName=\"Program Profile Status\"\n              options={mvpProgramProfileStatuses}\n              isDisabled={isSaving}\n            />\n          </StackItem>\n          {defaultValues.availableCommunityProgramManagers && (\n            <StackItem>\n              <PeoplePickerController\n                control={control}\n                inputName=\"cpm\"\n                errors={errors}\n                labelDisplayName=\"CPM\"\n                isDisabled={false}\n                options={mapAssigneesToOptions(defaultValues.availableCommunityProgramManagers)}\n                keyPropertyName=\"secondaryText\"\n                defaultSelectedKey={defaultValues.cpm}\n                isRequired={true}\n                hasTooltip={true}\n                toolTipDisplayText=\"Select the Community Program Manager\"\n              />\n            </StackItem>\n          )}\n          <StackItem>\n            <DatePickerController\n              control={control}\n              errors={errors}\n              inputName=\"firstAwardDate\"\n              isRequired={true}\n              labelDisplayName=\"First Award Date\"\n              startDate={defaultValues.firstAwardDate}\n              isDisabled={isSaving}\n            />\n          </StackItem>\n          <StackItem>\n            <MultiDropdownController\n              control={control}\n              errors={errors}\n              inputName=\"strengths\"\n              labelDisplayName=\"Strengths\"\n              options={mvpProgramProfileStrengths}\n              defaultValues={defaultValues.strengths}\n              isDisabled={isSaving}\n            />\n          </StackItem>\n        </Stack>\n      </SidePanel>\n    </form>\n  );\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { OperationStatus } from \"Constants/OperationStatus\";\nimport { AppState } from \"Dataflows/Reducers\";\nimport { IOperationStatusType } from \"Interfaces/IOperationStatusType\";\nimport { IMVPRetireProfileResponse } from \"Interfaces/MVP/IMVPRetireProfileResponse\";\n\n/**\n * Returns program profile.\n * @param appState\n */\nexport const getRetireProfile = (state: AppState): IMVPRetireProfileResponse | undefined =>\n  state.mvpState.retireProfileState.retireProfile;\n\nexport const getRetireProfileOperationStatus = (state: AppState): IOperationStatusType =>\n  state.mvpState.retireProfileState.operationStatus;\n\n/**\n * Returns save status of program profile.\n * @param appState\n * @returns {boolean}\n */\nexport const getRetireProfileStatus = (state: AppState): boolean =>\n  state.mvpState.retireProfileState.operationStatus?.update === OperationStatus.Pending;\n\n/**\n * Returns error message program profile fails.\n * @param appState\n * @returns {string}\n */\nexport const getRetireProfileErrorMessage = (state: AppState): string =>\n  state?.mvpState?.retireProfileState?.errorMessage || \"\";\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { useEffect, ReactElement, useState } from \"react\";\n\nimport { useForm } from \"react-hook-form\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport {\n  Stack,\n  StackItem,\n  Text,\n  Label,\n  TextField,\n  Layer,\n  Popup,\n  Overlay,\n  FocusTrapZone,\n  DefaultButton,\n  PrimaryButton,\n  Spinner,\n  SpinnerSize,\n} from \"@fluentui/react\";\nimport ComboBoxController from \"Components/ReactHookForm/ComboBoxController/ComboBoxController\";\nimport { SidePanel } from \"Components/SidePanel/SidePanel\";\nimport { OperationStatus } from \"Constants/OperationStatus\";\nimport { mvpProgramProfileRetireStatuses } from \"Constants/ProfileConstants\";\nimport {\n  fetchProgramProfile,\n  updateMVPRetireProfileReset,\n  retireProfile,\n} from \"Dataflows/MVP/MVPAction\";\nimport {\n  getRetireProfileErrorMessage,\n  getRetireProfileOperationStatus,\n} from \"Dataflows/MVP/RetireProfile/IMVPRetireProfileSelector\";\n\nimport { IMostValuableProfessionalRetireEditFormProps } from \"./IMostValuableProfessionalRetireEditFormProps\";\nimport { labelStylesNormal } from \"Components/MostValuableProfessionalProfile/MostValuableProfessionalProfile.styles\";\nimport {\n  deleteButtonDangerStyles,\n  popupContentStyles,\n  popupHorizontalGapStackTokens,\n  popupStyles,\n  popupTitleDangerStyles,\n} from \"Components/ConfirmationPopup/ConfirmationPopup.styles\";\n\nexport const MostValuableProfessionalRetireEditForm = (\n  props: IMostValuableProfessionalRetireEditFormProps\n): ReactElement => {\n  const { isPanelOpen, setIsPanelOpen, defaultValues } = props;\n  const [customErrorMessage, setCustomErrorMessage] = useState(\"\");\n  const [isConfirmationOpen, setIsConfirmationOpen] = useState(false);\n  const [additionalInformation, setAdditionalInformation] = useState(\n    defaultValues.additionalInformation\n  );\n\n  const {\n    control,\n    formState: { errors },\n  } = useForm();\n\n  const dispatch = useDispatch();\n  const programProfileErrorMessage = useSelector(getRetireProfileErrorMessage);\n\n  const dismissPanel = (): void => {\n    setIsPanelOpen(false);\n    dispatch(updateMVPRetireProfileReset());\n  };\n\n  const onRetire = () => {\n    return dispatch(retireProfile(defaultValues));\n  };\n\n  const dismissConfirmationModal = () => {\n    setIsConfirmationOpen(false);\n  };\n\n  const showConfirmationModal = () => {\n    setCustomErrorMessage(\"\");\n    if (!defaultValues.userProfileId) {\n      setCustomErrorMessage(\"User profile id is required\");\n    } else if (!defaultValues.reasonForRemoval) {\n      setCustomErrorMessage(\"Reason for removal is required\");\n    } else if (defaultValues.userProfileId && defaultValues.reasonForRemoval) {\n      setIsConfirmationOpen(true);\n    }\n  };\n\n  const operationStatus = useSelector(getRetireProfileOperationStatus);\n\n  useEffect(() => {\n    if (operationStatus.update === OperationStatus.Succeeded) {\n      dispatch(fetchProgramProfile(defaultValues.userProfileId as number));\n      dismissPanel();\n    }\n  }, [operationStatus.update === OperationStatus.Succeeded]);\n\n  const isSaving = operationStatus.update === OperationStatus.Pending;\n\n  return (\n    <SidePanel\n      isOpen={isPanelOpen}\n      title=\"Retire a member\"\n      saveButtonLabel=\"Save\"\n      error={customErrorMessage || programProfileErrorMessage}\n      disableActions={isSaving}\n      onDismiss={dismissPanel}\n      onSave={(): void => {\n        showConfirmationModal();\n      }}\n    >\n      <StackItem align=\"start\">\n        <Text>\n          Retiring a member will revoke their access to the active program experience, cancel any\n          system managed benefit and remove the user from all distribution lists.\n        </Text>\n      </StackItem>\n      <StackItem>\n        <Stack tokens={{ childrenGap: \"1rem\" }} horizontal={true} horizontalAlign=\"space-evenly\">\n          <StackItem align=\"center\" grow={100}>\n            <Label htmlFor=\"retireStatus\" required={true} styles={labelStylesNormal}>\n              Reason for retirement\n            </Label>\n          </StackItem>\n          <StackItem align=\"start\" grow={100}>\n            <ComboBoxController\n              onChange={(_e, op): void => {\n                defaultValues.reasonForRemoval = _e.key as string;\n              }}\n              control={control}\n              errors={errors}\n              inputName=\"retireStatus\"\n              options={mvpProgramProfileRetireStatuses}\n              isDisabled={isSaving}\n            />\n          </StackItem>\n        </Stack>\n      </StackItem>\n      <StackItem>\n        <Label htmlFor=\"retireStatus\" styles={labelStylesNormal}>\n          Additional Information:\n        </Label>\n      </StackItem>\n      <StackItem>\n        <TextField\n          multiline\n          resizable={false}\n          rows={10}\n          value={additionalInformation}\n          onChange={(_, newValue) => {\n            setAdditionalInformation(newValue);\n            defaultValues.additionalInformation = newValue;\n          }}\n        />\n      </StackItem>\n      {isConfirmationOpen && (\n        <Layer>\n          <Popup\n            className={popupStyles.root}\n            role=\"dialog\"\n            aria-modal=\"true\"\n            onDismiss={dismissConfirmationModal}\n          >\n            <Overlay onClick={dismissConfirmationModal} />\n            <FocusTrapZone>\n              <div role=\"document\" className={popupStyles.contentDanger}>\n                <Stack tokens={popupHorizontalGapStackTokens}>\n                  <Stack.Item>\n                    <Text styles={popupTitleDangerStyles}>Remove user data</Text>\n                  </Stack.Item>\n                  <Stack.Item>\n                    <Text styles={popupContentStyles}>\n                      This will remove the user from the program, cancel their system-managed\n                      benefits and delete their data. This is an irreversible action, Are you sure\n                      want to proceed?\n                    </Text>\n                  </Stack.Item>\n                  <Stack horizontal horizontalAlign=\"end\">\n                    <PrimaryButton\n                      onClick={onRetire}\n                      styles={deleteButtonDangerStyles}\n                      disabled={isSaving}\n                    >\n                      {isSaving ? <Spinner size={SpinnerSize.small} /> : \"Yes\"}\n                    </PrimaryButton>\n                    <DefaultButton disabled={isSaving} onClick={dismissConfirmationModal}>\n                      Cancel\n                    </DefaultButton>\n                  </Stack>\n                </Stack>\n              </div>\n            </FocusTrapZone>\n          </Popup>\n        </Layer>\n      )}\n    </SidePanel>\n  );\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport {\n  getTheme,\n  ILabelStyles,\n  IStackItemStyles,\n  IStackStyles,\n  IStackTokens,\n} from \"@fluentui/react\";\n\nconst theme = getTheme();\n\n/**\n * Token for the body stack\n */\nexport const bodyContainerStackTokens = (): IStackTokens => {\n  return { childrenGap: \"1rem\" };\n};\n\n/**\n * Styling for the body row stack\n */\nexport const bodyRowStackStyles = (): IStackStyles => {\n  return { root: { display: \"flex\", justifyContent: \"space-between\" } };\n};\n\n/**\n * Styling for the body column stack\n */\nexport const bodyColumnStackItemStyles = (): IStackItemStyles => {\n  return { root: { width: \"50%\" } };\n};\n\n/**\n * Styling for the label\n */\nexport const labelStyles = (): ILabelStyles => {\n  return { root: { fontWeight: 600 } };\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { useEffect, useState, ReactElement } from \"react\";\n\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { Redirect } from \"react-router-dom\";\n\nimport {\n  CommandBar,\n  ICommandBarItemProps,\n  Label,\n  Spinner,\n  SpinnerSize,\n  Stack,\n  StackItem,\n  Text,\n} from \"@fluentui/react\";\n\nimport { useAuth } from \"Authentication/AuthProvider\";\nimport { spinnerStyles } from \"Components/Common/SharedListStyles.styles\";\nimport {\n  bodyContainerStackStyles,\n  commandBarStyles,\n  headerStackStyles,\n  headerTextStyles,\n  ContainerWrapper,\n} from \"Components/Common/SharedTableStyles.styles\";\nimport { MostValuableProfessionalProgramProfileEditForm } from \"Components/MostValuableProfessionalProgramProfileEditForm/MostValuableProfessionalProgramProfileEditForm\";\nimport { MostValuableProfessionalRetireEditForm } from \"Components/MostValuableProfessionalRetireEditForm/MostValuableProfessionalRetireEditForm\";\nimport { OperationStatus } from \"Constants/OperationStatus\";\nimport { RolesEnum } from \"Constants/RolesPermissionsConstants\";\nimport { fetchProgramProfile } from \"Dataflows/MVP/MVPAction\";\nimport {\n  getProgramProfile,\n  getProgramProfileErrorMessage,\n  getProgramProfileOperationStatus,\n} from \"Dataflows/MVP/ProgramProfile/IMVPProgramProfileSelector\";\nimport { formatDate } from \"Utility/FormatHelper\";\n\nimport { IMostValuableProfessionalProgramProfileProps } from \"./IMostValuableProfessionalProgramProfileProps\";\nimport {\n  bodyColumnStackItemStyles,\n  bodyContainerStackTokens,\n  bodyRowStackStyles,\n  labelStyles,\n} from \"./MostValuableProfessionalProgramProfile.styles\";\nimport { IMVPRetireProfileRequest } from \"Interfaces/MVP/IMVPRetireProfileRequest\";\n\nconst MostValuableProfessionalProgramProfile = (\n  props: IMostValuableProfessionalProgramProfileProps\n): ReactElement => {\n  const { userProfileId } = props;\n\n  const { isUserLoggedIn, loading, hasAnyRoles } = useAuth();\n  if (isUserLoggedIn && !hasAnyRoles && !loading) {\n    return <Redirect to=\"/unauthorized\" />;\n  }\n\n  const dispatch = useDispatch();\n  const programProfile = useSelector(getProgramProfile);\n  const programProfileOperationStatus = useSelector(getProgramProfileOperationStatus);\n  const programProfileErrorMessage = useSelector(getProgramProfileErrorMessage);\n\n  const [isPanelOpen, setIsPanelOpen] = useState(false);\n  const [isRetirePanelOpen, setIsRetirePanelOpen] = useState(false);\n\n  useEffect(() => {\n    if (!!userProfileId) {\n      dispatch(fetchProgramProfile(userProfileId));\n    }\n  }, []);\n\n  const editProgramInformationClicked = (): void => {\n    setIsPanelOpen(true);\n  };\n\n  const editRetireClicked = (): void => {\n    setIsRetirePanelOpen(true);\n  };\n\n  const formatDateOrUndefined = (date: Date | undefined): string => {\n    if (!!date) {\n      return formatDate(date);\n    } else {\n      return \"\";\n    }\n  };\n\n  const { hasRole } = useAuth();\n  const renderCommand = (): ICommandBarItemProps[] => {\n    const items: ICommandBarItemProps[] = [];\n    if (hasRole(RolesEnum.MVP_REVIEWER) || hasRole(RolesEnum.MVP_PROGRAM_OWNER)) {\n      items.push({\n        key: \"editProgramInformation\",\n        text: \"Edit Program Details\",\n        iconProps: { iconName: \"Edit\" },\n        onClick: (): void => {\n          editProgramInformationClicked();\n        },\n      });\n    }\n    if (hasRole(RolesEnum.MVP_PROGRAM_OWNER) || hasRole(RolesEnum.MVP_BENEFITS_MANAGER)) {\n      items.push({\n        key: \"editRetire\",\n        text: \"Retire\",\n        iconProps: { iconName: \"Edit\" },\n        onClick: (): void => {\n          editRetireClicked();\n        },\n      });\n    }\n    return items;\n  };\n\n  if (programProfileOperationStatus?.read === OperationStatus.Pending) {\n    return <Spinner size={SpinnerSize.large} styles={spinnerStyles} />;\n  } else if (\n    programProfileOperationStatus?.read === OperationStatus.Failed &&\n    programProfileErrorMessage\n  ) {\n    return <div>{programProfileErrorMessage}</div>;\n  }\n\n  return (\n    <>\n      {!programProfile ? (\n        <Spinner size={SpinnerSize.large} styles={spinnerStyles} />\n      ) : (\n        <>\n          {\n            <StackItem>\n              <CommandBar\n                items={renderCommand()}\n                ariaLabel=\"Benefit actions\"\n                styles={commandBarStyles}\n              />\n            </StackItem>\n          }\n          <ContainerWrapper>\n            <Stack styles={headerStackStyles}>\n              <Text styles={headerTextStyles}>Program Details</Text>\n            </Stack>\n            <Stack styles={bodyContainerStackStyles} tokens={bodyContainerStackTokens}>\n              <Stack horizontal styles={bodyRowStackStyles}>\n                <StackItem styles={bodyColumnStackItemStyles}>\n                  <Label styles={labelStyles}>Application Status</Label>\n                  <Text>{programProfile?.applicationStatus}</Text>\n                </StackItem>\n              </Stack>\n              <Stack horizontal styles={bodyRowStackStyles}>\n                <StackItem styles={bodyColumnStackItemStyles}>\n                  <Label styles={labelStyles}>Date Last Modified</Label>\n                  <Text>{formatDateOrUndefined(programProfile?.dateLastModified)}</Text>\n                </StackItem>\n                <StackItem styles={bodyColumnStackItemStyles}>\n                  <Label styles={labelStyles}>Date Submitted</Label>\n                  <Text>{formatDateOrUndefined(programProfile?.dateSubmitted)}</Text>\n                </StackItem>\n              </Stack>\n              <Stack horizontal styles={bodyRowStackStyles}>\n                <StackItem styles={bodyColumnStackItemStyles}>\n                  <Label styles={labelStyles}>Program Profile Status</Label>\n                  <Text>{programProfile?.programProfileStatus}</Text>\n                </StackItem>\n                <StackItem styles={bodyColumnStackItemStyles}>\n                  <Label styles={labelStyles}>Program End Date</Label>\n                  <Text>{formatDateOrUndefined(programProfile?.programEndDate)}</Text>\n                </StackItem>\n              </Stack>\n              <Stack horizontal styles={bodyRowStackStyles}>\n                <StackItem styles={bodyColumnStackItemStyles}>\n                  <Label styles={labelStyles}>CPM</Label>\n                  <Text>{programProfile?.cpm}</Text>\n                </StackItem>\n              </Stack>\n              <Stack horizontal styles={bodyRowStackStyles}>\n                <StackItem styles={bodyColumnStackItemStyles}>\n                  <Label styles={labelStyles}>Award Category #1</Label>\n                  <Text>{programProfile?.technologyAreaGroups?.[0]}</Text>\n                </StackItem>\n                <StackItem styles={bodyColumnStackItemStyles}>\n                  <Label styles={labelStyles}>Technology Area #1</Label>\n                  <Text>{programProfile?.technologyAreas?.[0]}</Text>\n                </StackItem>\n              </Stack>\n              <Stack horizontal styles={bodyRowStackStyles}>\n                <StackItem styles={bodyColumnStackItemStyles}>\n                  <Label styles={labelStyles}>Award Category #2</Label>\n                  <Text>{programProfile?.technologyAreaGroups?.[1]}</Text>\n                </StackItem>\n                <StackItem styles={bodyColumnStackItemStyles}>\n                  <Label styles={labelStyles}>Technology Area #2</Label>\n                  <Text>{programProfile?.technologyAreas?.[1]}</Text>\n                </StackItem>\n              </Stack>\n              <Stack horizontal styles={bodyRowStackStyles}>\n                <StackItem styles={bodyColumnStackItemStyles}>\n                  <Label styles={labelStyles}>First Award Date</Label>\n                  <Text>{formatDateOrUndefined(programProfile?.firstAwardDate)}</Text>\n                </StackItem>\n                <StackItem styles={bodyColumnStackItemStyles}>\n                  <Label styles={labelStyles}>Consecutive Awards</Label>\n                  <Text>{programProfile?.consecutiveAwards}</Text>\n                </StackItem>\n              </Stack>\n              <Stack horizontal styles={bodyRowStackStyles}>\n                <StackItem styles={bodyColumnStackItemStyles}>\n                  <Label styles={labelStyles}>NDA Status</Label>\n                  <Text>{programProfile?.ndaStatus}</Text>\n                </StackItem>\n                <StackItem styles={bodyColumnStackItemStyles}>\n                  <Label styles={labelStyles}>Strengths</Label>\n                  <Text>{programProfile?.strengths?.join(\", \")}</Text>\n                </StackItem>\n              </Stack>\n              <Stack horizontal styles={bodyRowStackStyles}>\n                <StackItem styles={bodyColumnStackItemStyles}>\n                  <Label styles={labelStyles}>Contributor ID</Label>\n                  <Text>{programProfile?.microsoftReferralId}</Text>\n                </StackItem>\n                <StackItem styles={bodyColumnStackItemStyles}>\n                  <Label styles={labelStyles}>MVP Legacy ID</Label>\n                  <Text>{programProfile?.mvpLegacyId}</Text>\n                </StackItem>\n              </Stack>\n            </Stack>\n          </ContainerWrapper>\n        </>\n      )}\n      {isPanelOpen && (\n        <MostValuableProfessionalProgramProfileEditForm\n          isPanelOpen={isPanelOpen}\n          setIsPanelOpen={setIsPanelOpen}\n          defaultValues={{\n            userProfileId,\n            programProfileStatus: programProfile?.programProfileStatus,\n            firstAwardDate: programProfile?.firstAwardDate\n              ? new Date(programProfile?.firstAwardDate as Date)\n              : undefined,\n            cpm: programProfile?.cpm || \"\",\n            strengths: programProfile?.strengths,\n            availableCommunityProgramManagers: programProfile?.availableCommunityProgramManagers,\n          }}\n        />\n      )}\n      {isRetirePanelOpen && (\n        <MostValuableProfessionalRetireEditForm\n          isPanelOpen={isRetirePanelOpen}\n          setIsPanelOpen={setIsRetirePanelOpen}\n          defaultValues={\n            {\n              userProfileId: userProfileId,\n            } as IMVPRetireProfileRequest\n          }\n        />\n      )}\n    </>\n  );\n};\n\nexport default MostValuableProfessionalProgramProfile;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { OperationStatus } from \"Constants/OperationStatus\";\nimport { AppState } from \"Dataflows/Reducers\";\nimport { IAwardKitsBenefitDetail } from \"Interfaces/Benefits/IAwardKitsBenefitDetail\";\nimport { IM365BenefitDetail } from \"Interfaces/Benefits/IM365BenefitDetail\";\nimport { IMicrosoft365BenefitDetail } from \"Interfaces/Benefits/IMicrosoft365BenefitDetail\";\nimport { IProfileBenefitResult } from \"Interfaces/Benefits/IProfileBenefitResult\";\nimport { ITeamsBenefitDetail } from \"Interfaces/Benefits/ITeamsBenefitDetail\";\nimport { IOperationStatusType } from \"Interfaces/IOperationStatusType\";\nimport { IMVPAzureBenefitClaim } from \"Interfaces/MVP/IMVPAzureBenefitClaim\";\n\n/**\n * Returns the getProfileBenefits value.\n * @param {AppState} state\n * @returns {IProfileBenefitResult}\n */\nexport const getProfileBenefits = (state: AppState): IProfileBenefitResult =>\n  state.mvpState.benefitsState.profileBenefits;\n\n/**\n * Returns loading status of user profile comments.\n * @param appState\n * @returns {boolean}\n */\nexport const getProfileBenefitsStatus = (state: AppState): OperationStatus | undefined =>\n  state.mvpState.benefitsState.benefitsOperationStatus?.read;\n\n/**\n * Returns loading status of user profile comments.\n * @param appState\n * @returns {boolean}\n */\nexport const getAddCommentOperationStatus = (state: AppState): OperationStatus | undefined =>\n  state.mvpState.benefitsState.benefitsOperationStatus?.create;\n\n/**\n * Returns error message returned when user profile comments fails.\n * @param appState\n * @returns {string}\n */\nexport const getProfileBenefitsErrorMessage = (state: AppState): string =>\n  state.mvpState.benefitsState.benefitsOperationStatus?.read === OperationStatus.Failed &&\n  !!state.mvpState.benefitsState.profileBenefitsErrorMessage\n    ? state.mvpState.benefitsState.profileBenefitsErrorMessage\n    : \"\";\n\n/**\n * Returns the isClaimingBenefitSuccess value.\n * @param {AppState} state\n * @returns {OperationStatus}\n */\nexport const getIsClaimingBenefitStatus = (state: AppState): OperationStatus | undefined =>\n  state.mvpState.benefitsState.benefitsOperationStatus?.create;\n\n/**\n * Returns the isClaimingBenefitError value.\n * @param {AppState} state\n * @returns {string}\n */\nexport const getIsClaimingBenefitsError = (state: AppState): string =>\n  state.mvpState.benefitsState.benefitsOperationStatus?.create === OperationStatus.Failed &&\n  !!state.mvpState.benefitsState.claimBenefitError\n    ? state.mvpState.benefitsState.claimBenefitError\n    : \"\";\n\n/**\n * Gets the M365 Benefit Detail from state.\n * @param {AppState} state\n * @returns {IM365BenefitDetail}\n */\nexport const m365GetBenefitDetail = (state: AppState): IM365BenefitDetail =>\n  state.mvpState.m365BenefitDetailState.m365BenefitDetail;\n\n/**\n * Gets the M365 Update Operation Status.\n * @param {AppState} state\n * @returns {OperationStatus}\n */\nexport const m365UpdateStatus = (state: AppState): OperationStatus | undefined =>\n  state.mvpState.m365BenefitDetailState.m365OperationStatus?.update;\n\n/**\n * Gets the M365 Fetch Operation Status.\n * @param {AppState} state\n * @returns {OperationStatus}\n */\nexport const m365FetchStatus = (state: AppState): OperationStatus | undefined =>\n  state.mvpState.m365BenefitDetailState.m365OperationStatus?.read;\n\n/**\n * Gets the M365 Fetch Error message.\n * @param {AppState} state\n * @returns {string}\n */\nexport const m365FetchErrorMessage = (state: AppState): string =>\n  state.mvpState.m365BenefitDetailState.m365FetchErrorMessage;\n\n/**\n * Gets the M365 Update Error message\n * @param {AppState} state\n * @returns {string}\n */\nexport const m365UpdateErrorMessage = (state: AppState): string =>\n  state.mvpState.m365BenefitDetailState.m365UpdateErrorMessage;\n\n/**\n * Gets the MS365 Benefit Detail from state.\n * @param {AppState} state\n * @returns {IMicrosoft365BenefitDetail}\n */\nexport const ms365GetBenefitDetail = (state: AppState): IMicrosoft365BenefitDetail =>\n  state.mvpState.ms365BenefitDetailState.ms365BenefitDetail;\n\n/**\n * Gets the MS365 Fetch Error message.\n * @param {AppState} state\n * @returns {string}\n */\nexport const ms365FetchErrorMessage = (state: AppState): string =>\n  state.mvpState.ms365BenefitDetailState.ms365FetchErrorMessage;\n\n/**\n * Gets the MS365 Update Error message\n * @param {AppState} state\n * @returns {string}\n */\nexport const ms365UpdateErrorMessage = (state: AppState): string =>\n  state.mvpState.ms365BenefitDetailState.ms365UpdateErrorMessage;\n\n/**\n * Gets the MS365 Fetch Operation Status.\n * @param {AppState} state\n * @returns {OperationStatus}\n */\nexport const ms365FetchStatus = (state: AppState): OperationStatus | undefined =>\n  state.mvpState.ms365BenefitDetailState.ms365OperationStatus?.read;\n\n/**\n * Gets the MS365 Update Operation Status.\n * @param {AppState} state\n * @returns {OperationStatus}\n */\nexport const ms365UpdateStatus = (state: AppState): OperationStatus | undefined =>\n  state.mvpState.ms365BenefitDetailState.ms365OperationStatus?.update;\n\n/**\n * Gets the M365 Benefit Detail from state.\n * @param {AppState} state\n * @returns {ITeamsBenefitDetail}\n */\nexport const teamsGetBenefitDetail = (state: AppState): ITeamsBenefitDetail =>\n  state.mvpState.teamsBenefitDetailState.teamsBenefitDetail;\n\n/**\n * Gets the Award Kits Benefit Detail from state.\n * @param {AppState} state\n * @returns {IAwardKitsBenefitDetail}\n */\nexport const awardKitsGetBenefitDetail = (state: AppState): IAwardKitsBenefitDetail =>\n  state.mvpState.awardKitsBenefitDetailState.awardKitsBenefitDetail;\n\n/**\n * Gets the Teams Fetch Operation Status.\n * @param {AppState} state\n * @returns {OperationStatus}\n */\nexport const teamsFetchStatus = (state: AppState): OperationStatus | undefined =>\n  state.mvpState.teamsBenefitDetailState.teamsOperationStatus?.read;\n\n/**\n * Gets the Award Kits Fetch Operation Status.\n * @param {AppState} state\n * @returns {OperationStatus}\n */\nexport const awardKitsFetchStatus = (state: AppState): OperationStatus | undefined =>\n  state.mvpState.awardKitsBenefitDetailState.awardKitsOperationStatus?.read;\n\n/**\n * Gets the Teams Fetch Error message.\n * @param {AppState} state\n * @returns {string}\n */\nexport const teamsFetchErrorMessage = (state: AppState): string =>\n  state.mvpState.teamsBenefitDetailState.teamsFetchErrorMessage;\n\n/**\n * Gets the Award Kits Fetch Error message.\n * @param {AppState} state\n * @returns {string}\n */\nexport const awardKitsFetchErrorMessage = (state: AppState): string =>\n  state.mvpState.awardKitsBenefitDetailState.awardKitsFetchErrorMessage;\n\nexport const azureBenefitUpdateStatus = (state: AppState): OperationStatus | undefined =>\n  state.mvpState.azureBenefitExtendCreditState.extendAzureCreditOperationStatus?.update;\n\nexport const azureBenefitUpdateErrorMessage = (state: AppState): string =>\n  state.mvpState.azureBenefitExtendCreditState.extendAzureCreditError;\n\n/**\n * Returns azure benefit.\n * @param appState\n */\nexport const getAddAzureBenefit = (state: AppState): IMVPAzureBenefitClaim | undefined =>\n  state.mvpState.azureBenefitAddState.azureBenefit;\n\nexport const getAddAzureBenefitOperationStatus = (state: AppState): IOperationStatusType =>\n  state.mvpState.azureBenefitAddState.addAzureBenefitOperationStatus;\n\n/**\n * Returns save status of azure benefit.\n * @param appState\n * @returns {boolean}\n */\nexport const getAddAzureBenefitStatus = (state: AppState): boolean =>\n  state.mvpState.azureBenefitAddState.addAzureBenefitOperationStatus?.update ===\n  OperationStatus.Pending;\n\n/**\n * Returns error message azure benefit fails.\n * @param appState\n * @returns {string}\n */\nexport const getAddAzureBenefitErrorMessage = (state: AppState): string =>\n  state?.mvpState?.azureBenefitAddState?.addAzureBenefitError || \"\";\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { ReactElement } from \"react\";\n\nimport { useForm } from \"react-hook-form\";\n\nimport * as Yup from \"yup\";\n\nimport { Stack, StackItem } from \"@fluentui/react\";\nimport { yupResolver } from \"@hookform/resolvers/yup\";\n\nimport TextFieldController from \"Components/ReactHookForm/TextFieldController/TextFieldController\";\nimport { SidePanel } from \"Components/SidePanel/SidePanel\";\n\nimport {\n  IAzureBenefitExtendCredit,\n  IAzureBenefitExtendCreditFormProps,\n} from \"./IAzureBenefitExtendCreditFormProps\";\n\nexport const AzureBenefitExtendCreditForm = (\n  props: IAzureBenefitExtendCreditFormProps\n): ReactElement => {\n  const { isPanelOpen, setIsPanelOpen, isSaving, errorMessage, extendAzureBenefitCredit } = props;\n\n  const {\n    control,\n    handleSubmit,\n    reset,\n    formState: { errors },\n  } = useForm<IAzureBenefitExtendCredit>({\n    //defaultValues,\n    resolver: yupResolver(\n      Yup.object().shape({\n        credit: Yup.number()\n          .typeError(\"Additional Credit must be a number\")\n          .required(\"Additional Credit is required\")\n          .min(1000, \"Additional Credit must be greater than or equal to 1000\")\n          .max(10000, \"Additional Credit must be less than or equal to 10000\"),\n      })\n    ),\n  });\n\n  const dismissPanel = (): void => {\n    setIsPanelOpen(false);\n    reset();\n  };\n\n  // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n  const save = () =>\n    handleSubmit((formData) => {\n      return extendAzureBenefitCredit(formData.credit);\n    });\n\n  return (\n    <form onSubmit={save()}>\n      <SidePanel\n        isOpen={isPanelOpen}\n        title=\"Extend Credit\"\n        saveButtonLabel=\"Save\"\n        error={errorMessage}\n        disableActions={isSaving}\n        onDismiss={dismissPanel}\n        onSave={save()}\n      >\n        <Stack tokens={{ childrenGap: \"1rem\" }}>\n          <StackItem>You can assign additional credits to this user via the input below</StackItem>\n          <StackItem>\n            <TextFieldController\n              control={control}\n              inputName=\"credit\"\n              errors={errors}\n              isRequired={true}\n              textFieldType=\"number\"\n              labelDisplayName=\"Additional Credit\"\n              prefix=\"$\"\n              isDisabled={isSaving}\n            />\n          </StackItem>\n        </Stack>\n      </SidePanel>\n    </form>\n  );\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { IIconStyles } from \"office-ui-fabric-react/lib/Icon\";\n\nimport { getTheme } from \"@fluentui/react\";\n\nconst theme = getTheme();\n\nexport const copyIconStyles: IIconStyles = {\n  root: {\n    position: \"absolute\",\n    right: 0,\n    top: \"50%\",\n    transform: \"translateY(-50%)\",\n    color: theme.palette.blue,\n  },\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React from \"react\";\n\nimport {\n  CheckboxVisibility,\n  DetailsList,\n  DetailsListLayoutMode,\n  IColumn,\n  Stack,\n  Text,\n} from \"@fluentui/react\";\n\nimport {\n  headerStackStyles,\n  headerTextStyles,\n  ContainerWrapper,\n  DetailsListWrapper,\n  TableTextWrapper,\n} from \"Components/Common/SharedTableStyles.styles\";\nimport CopyButton from \"Components/CopyButton/CopyButton\";\nimport { BenefitDisplayNameEnum } from \"Constants/BenefitConstants\";\nimport { IM365CopilotBenefitDetail } from \"Interfaces/Benefits/IM365CopilotBenefitDetail\";\n\nimport { IM365CopilotBenefitDetailProps } from \"./IM365CopilotBenefitDetailProps\";\nimport { copyIconStyles } from \"./M365CopilotBenefitDetail.styles\";\n\nconst M365CopilotBenefitDetail: React.FunctionComponent<IM365CopilotBenefitDetailProps> = (\n  props: IM365CopilotBenefitDetailProps\n) => {\n  const { benefits } = props;\n\n  const columns = [\n    {\n      key: \"copilotTenantId\",\n      name: \"Tenant ID\",\n      fieldName: \"copilotTenantId\",\n      minWidth: 200,\n      maxWidth: 300,\n      isResizable: true,\n    },\n    {\n      key: \"status\",\n      name: \"Status\",\n      fieldName: \"status\",\n      minWidth: 100,\n      maxWidth: 200,\n      isResizable: true,\n    },\n    {\n      key: \"claimedDate\",\n      name: \"Claimed Date\",\n      fieldName: \"claimedDate\",\n      minWidth: 100,\n      maxWidth: 200,\n      isResizable: true,\n    },\n    {\n      key: \"awardPeriod\",\n      name: \"Award Period\",\n      fieldName: \"awardPeriod\",\n      minWidth: 100,\n      maxWidth: 250,\n      isResizable: true,\n    },\n  ];\n\n  const renderItemColumn = (\n    item: IM365CopilotBenefitDetail,\n    index?: number,\n    column?: IColumn\n  ): JSX.Element => {\n    switch (column?.key) {\n      //add a copy button to the registration id value to clipboard\n      case \"copilotTenantId\":\n        return (\n          <Stack horizontal verticalAlign=\"center\">\n            <span>{item.copilotTenantId}</span>\n            <CopyButton styles={copyIconStyles} text={item.copilotTenantId} showCopyText={true} />\n          </Stack>\n        );\n      case \"claimedDate\":\n        if (item.claimedDate === null) {\n          return <span></span>;\n        }\n\n        const claimedDate = new Date(item.claimedDate).toDateString();\n        return <span>{claimedDate}</span>;\n      default:\n        const fieldContent = item[column?.fieldName as keyof IM365CopilotBenefitDetail] as string;\n        return <span>{fieldContent}</span>;\n    }\n  };\n\n  return (\n    <ContainerWrapper>\n      <Stack styles={headerStackStyles}>\n        <Text styles={headerTextStyles}>{BenefitDisplayNameEnum.M365Copilot}</Text>\n      </Stack>\n      <DetailsListWrapper>\n        <DetailsList\n          items={benefits}\n          columns={columns}\n          setKey=\"set\"\n          layoutMode={DetailsListLayoutMode.justified}\n          ariaLabelForSelectionColumn=\"Toggle selection\"\n          ariaLabelForSelectAllCheckbox=\"Toggle selection for all items\"\n          checkButtonAriaLabel=\"select row\"\n          checkboxVisibility={CheckboxVisibility.hidden}\n          onRenderItemColumn={renderItemColumn}\n        />\n      </DetailsListWrapper>\n      {benefits && benefits.length < 1 && (\n        <TableTextWrapper>No {BenefitDisplayNameEnum.M365Copilot} for this user.</TableTextWrapper>\n      )}\n    </ContainerWrapper>\n  );\n};\n\nexport default M365CopilotBenefitDetail;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { useEffect, ReactElement } from \"react\";\n\nimport { useForm } from \"react-hook-form\";\n\nimport * as Yup from \"yup\";\n\nimport { Stack, StackItem } from \"@fluentui/react\";\nimport { yupResolver } from \"@hookform/resolvers/yup\";\n\nimport TextFieldController from \"Components/ReactHookForm/TextFieldController/TextFieldController\";\nimport { SidePanel } from \"Components/SidePanel/SidePanel\";\nimport { IM365BenefitDetail } from \"Interfaces/Benefits/IM365BenefitDetail\";\nimport { IMicrosoft365BenefitDetail } from \"Interfaces/Benefits/IMicrosoft365BenefitDetail\";\n\nimport { IM365DetailsEditFormProps } from \"./IM365DetailsEditFormProps\";\n\nimport { BenefitNameEnum, BenefitDisplayNameEnum } from \"Constants/BenefitConstants\";\nimport { GUID_REG_EX } from \"Constants/ValidationMessages\";\n\nexport const M365DetailsEditForm = (props: IM365DetailsEditFormProps): ReactElement => {\n  const {\n    isEditM365PanelOpen,\n    setIsEditM365PanelOpen,\n    m365UpdateErrorMessage,\n    dismissPanel,\n    updateM365BenefitDetail,\n    m365BenefitDetail,\n    updateMS365BenefitDetail,\n    benefitType,\n  } = props;\n\n  const isSaving = false;\n\n  // handle Yup validation dynamically as subscriptionId is not available for O365.\n  let validation = {\n    tenantId: Yup.string().optional().required(\"Tenant Id is required\"),\n    tenantName: Yup.string().required(\"Tenant Name is required\"),\n  };\n  if (benefitType === BenefitNameEnum.MS365) {\n    const copyObject = Object.assign(validation);\n    copyObject.subscriptionId = Yup.string()\n      .required(\"Subscription Id is required\")\n      .matches(\n        GUID_REG_EX,\n        \"Subscription ID should be in GUID format: [11111111-2222-3333-4444-555555555555]\"\n      );\n    validation = copyObject;\n  }\n\n  /**\n   * Format subscription Id\n   * @param {IMicrosoft365BenefitDetail} values MS365 details\n   * @returns {void}\n   */\n  const FormatSubscriptionId = (values: IMicrosoft365BenefitDetail) => {\n    // set SubscriptionId from 11111111222233334444555555555555 to 11111111-2222-3333-4444-555555555555\n    if (values.subscriptionId.length < 36) {\n      const hyphenNumbers = [8, 13, 18, 23];\n      hyphenNumbers.forEach((item) => {\n        if (values.subscriptionId.slice(item, item + 1) != \"-\") {\n          values.subscriptionId =\n            values.subscriptionId.slice(0, item) + \"-\" + values.subscriptionId.slice(item);\n        }\n      });\n    }\n  };\n\n  const {\n    control,\n    handleSubmit,\n    reset,\n    formState: { errors },\n  } = useForm({\n    resolver: yupResolver(\n      Yup.object().shape({\n        ...validation,\n      })\n    ),\n  });\n\n  const defaultValues:\n    | IM365BenefitDetail\n    | IMicrosoft365BenefitDetail\n    | undefined = m365BenefitDetail;\n\n  useEffect(() => {\n    reset({ ...defaultValues });\n  }, [defaultValues, reset]);\n\n  const save = () =>\n    handleSubmit((data) => {\n      updateM365BenefitDetail && updateM365BenefitDetail(data as IM365BenefitDetail);\n\n      benefitType === BenefitNameEnum.MS365 &&\n        FormatSubscriptionId(data as IMicrosoft365BenefitDetail);\n      updateMS365BenefitDetail && updateMS365BenefitDetail(data as IMicrosoft365BenefitDetail);\n\n      setIsEditM365PanelOpen(false);\n    });\n\n  return (\n    <form onSubmit={save()}>\n      <SidePanel\n        isOpen={isEditM365PanelOpen}\n        title={`Edit ${BenefitDisplayNameEnum[benefitType]} Details`}\n        saveButtonLabel=\"Save\"\n        error=\"\"\n        disableActions={isSaving}\n        onDismiss={dismissPanel}\n        onSave={save()}\n      >\n        <Stack tokens={{ childrenGap: \"1rem\" }}>\n          {benefitType === BenefitNameEnum.MS365 && (\n            <StackItem>\n              <TextFieldController\n                control={control}\n                inputName=\"subscriptionId\"\n                errors={errors}\n                isRequired={true}\n                labelDisplayName=\"Subscription Id:\"\n                hasTooltip={true}\n                toolTipDisplayText={`The Tenant Id of your ${BenefitDisplayNameEnum[benefitType]} Benefit Subscription.`}\n                textFieldType=\"text\"\n                placeholderText=\"Enter Subscription Id\"\n                isDisabled={isSaving}\n              />\n            </StackItem>\n          )}\n          <StackItem>\n            <TextFieldController\n              control={control}\n              inputName=\"tenantId\"\n              errors={errors}\n              isRequired={true}\n              labelDisplayName=\"Tenant Id:\"\n              hasTooltip={true}\n              toolTipDisplayText={`The Tenant Id of your ${BenefitDisplayNameEnum[benefitType]} Benefit Subscription.`}\n              textFieldType=\"text\"\n              placeholderText=\"Enter Tenant Id\"\n              isDisabled={isSaving}\n            />\n          </StackItem>\n          <StackItem>\n            <TextFieldController\n              control={control}\n              inputName=\"tenantName\"\n              errors={errors}\n              isRequired={true}\n              labelDisplayName=\"Tenant/Domain Name:\"\n              hasTooltip={true}\n              toolTipDisplayText={`The Tenant/Domain name of your ${BenefitDisplayNameEnum[benefitType]} Subscription.`}\n              textFieldType=\"text\"\n              placeholderText=\"Enter Tenant/Domain Name\"\n              isDisabled={isSaving}\n            />\n          </StackItem>\n          <StackItem>\n            {m365UpdateErrorMessage && m365UpdateErrorMessage.length > 0 && m365UpdateErrorMessage}\n          </StackItem>\n        </Stack>\n      </SidePanel>\n    </form>\n  );\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport styled from \"styled-components\";\n\nimport { IIconStyles } from \"office-ui-fabric-react/lib/Icon\";\n\nimport {\n  getTheme,\n  FontSizes,\n  FontWeights,\n  ICommandBarStyles,\n  IStackItemStyles,\n  IStackStyles,\n  ITextStyles,\n} from \"@fluentui/react\";\n\nconst theme = getTheme();\n\nexport const wrapperStyles: IStackStyles = {\n  root: {\n    border: `1px solid ${theme.palette.neutralTertiaryAlt}`,\n    borderRadius: \"0.5rem\",\n    padding: \"2.25rem 1.5rem\",\n    boxShadow: \"0px 1px 6px rgba(0, 0, 0, 0.2)\",\n    marginTop: \"1.5rem\",\n  },\n};\n\nexport const titleStyles: IStackItemStyles = {\n  root: {\n    padding: \"1.5rem\",\n    background: theme.palette.neutralLight,\n    borderRadius: \"0.5rem\",\n  },\n};\n\nexport const titleTextStyles: ITextStyles = {\n  root: {\n    fontSize: FontSizes.size20,\n    fontWeight: 600,\n  },\n};\n\nexport const commandBarStyles: ICommandBarStyles = {\n  root: {\n    marginTop: \"1.5rem\",\n  },\n};\n\nexport const copyIconStyles: IIconStyles = {\n  root: {\n    position: \"absolute\",\n    right: 0,\n    top: \"50%\",\n    transform: \"translateY(-50%)\",\n    color: theme.palette.blue,\n  },\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { useEffect } from \"react\";\n\nimport {\n  CheckboxVisibility,\n  CommandBar,\n  DetailsList,\n  DetailsListLayoutMode,\n  IColumn,\n  ICommandBarItemProps,\n  Stack,\n  StackItem,\n  Text,\n} from \"@fluentui/react\";\n\nimport {\n  headerStackStyles,\n  headerTextStyles,\n  ContainerWrapper,\n  DetailsListWrapper,\n  TableTextWrapper,\n} from \"Components/Common/SharedTableStyles.styles\";\nimport ProfileBenefitOtherTenant from \"Components/ProfileBenefitOtherTenant/ProfileBenefitOtherTenant\";\nimport { BenefitDisplayNameEnum } from \"Constants/BenefitConstants\";\nimport { IProfileAzureBenefitDetail } from \"Interfaces/Benefits/IProfileAzureBenefitDetail\";\n\nimport { IProfileAzureBenefitDetailProps } from \"./IProfileAzureBenefitDetailProps\";\nimport { commandBarStyles, copyIconStyles } from \"./ProfileAzureBenefitDetail.styles\";\nimport CopyButton from \"Components/CopyButton/CopyButton\";\n\nconst VisualStudioBenefitDetail: React.FunctionComponent<IProfileAzureBenefitDetailProps> = (\n  props: IProfileAzureBenefitDetailProps\n) => {\n  const {\n    benefitType,\n    benefits,\n    canManageBenefits,\n    extendBenefitClicked,\n    benefitOtherTenantName,\n    addAzureBenefitClicked,\n  } = props;\n\n  const items: ICommandBarItemProps[] = [\n    {\n      key: \"extendCredit\",\n      text: \"Extend Credit\",\n      iconProps: { iconName: \"Add\" },\n      onClick: (): void => {\n        extendBenefitClicked(benefitType);\n      },\n    },\n    {\n      key: \"addRecord\",\n      text: \"Add a record\",\n      iconProps: { iconName: \"Add\" },\n      onClick: (): void => {\n        addAzureBenefitClicked(benefitType);\n      },\n    },\n  ];\n\n  const columns = [\n    {\n      key: \"registrationId\",\n      name: \"Registration ID\",\n      fieldName: \"registrationId\",\n      minWidth: 200,\n      maxWidth: 300,\n      isResizable: true,\n    },\n    {\n      key: \"startDate\",\n      name: \"Activation Date\",\n      fieldName: \"startDate\",\n      minWidth: 100,\n      maxWidth: 200,\n      isResizable: true,\n    },\n    {\n      key: \"capCredit\",\n      name: \"Assigned Credits\",\n      fieldName: \"capCredit\",\n      minWidth: 100,\n      maxWidth: 200,\n      isResizable: true,\n    },\n    {\n      key: \"expirationDate\",\n      name: \"Credit Expiration Date\",\n      fieldName: \"expirationDate\",\n      minWidth: 100,\n      maxWidth: 250,\n      isResizable: true,\n    },\n    {\n      key: \"email\",\n      name: \"Email\",\n      fieldName: \"email\",\n      minWidth: 200,\n      maxWidth: 300,\n      isResizable: true,\n    },\n    {\n      key: \"isModernSponsorship\",\n      name: \"Is Modern Sponsorship\",\n      fieldName: \"isModernSponsorship\",\n      minWidth: 100,\n      maxWidth: 200,\n      isResizable: true,\n    },\n  ];\n\n  const renderItemColumn = (\n    item: IProfileAzureBenefitDetail,\n    index?: number,\n    column?: IColumn\n  ): JSX.Element => {\n    switch (column?.key) {\n      //add a copy button to the registration id value to clipboard\n      case \"registrationId\":\n        return (\n          <Stack horizontal verticalAlign=\"center\">\n            <span>{item.registrationId}</span>\n            <CopyButton styles={copyIconStyles} text={item.registrationId} showCopyText={true} />\n          </Stack>\n        );\n      case \"capCredits\":\n        return <span>${item.capCredit}</span>;\n      case \"startDate\":\n        if (item.startDate === null) {\n          return <span></span>;\n        }\n\n        const startDate = new Date(item.startDate).toDateString();\n        return <span>{startDate}</span>;\n      case \"expirationDate\":\n        if (item.expirationDate === null) {\n          return <span></span>;\n        }\n\n        const expirationDate = new Date(item.expirationDate).toDateString();\n        return <span>{expirationDate}</span>;\n      case \"isModernSponsorship\":\n        return <span>{item.isModernSponsorship ? \"Yes\" : \"No\"}</span>;\n      default:\n        const fieldContent = item[column?.fieldName as keyof IProfileAzureBenefitDetail] as string;\n        return <span>{fieldContent}</span>;\n    }\n  };\n\n  return (\n    <ContainerWrapper>\n      <Stack styles={headerStackStyles}>\n        <Text styles={headerTextStyles}>{BenefitDisplayNameEnum.Azure}</Text>\n      </Stack>\n      {benefitOtherTenantName ? (\n        <ProfileBenefitOtherTenant tenantName={benefitOtherTenantName} />\n      ) : (\n        <>\n          {canManageBenefits && !!benefits.length && (\n            <StackItem>\n              <CommandBar styles={commandBarStyles} items={items} ariaLabel=\"Benefit actions\" />\n            </StackItem>\n          )}\n          {canManageBenefits && !benefits.length && (\n            <StackItem>\n              <CommandBar\n                styles={commandBarStyles}\n                items={[items[1]]}\n                ariaLabel=\"Benefit actions\"\n              />\n            </StackItem>\n          )}\n          <DetailsListWrapper>\n            <DetailsList\n              items={benefits}\n              columns={columns}\n              setKey=\"set\"\n              layoutMode={DetailsListLayoutMode.justified}\n              ariaLabelForSelectionColumn=\"Toggle selection\"\n              ariaLabelForSelectAllCheckbox=\"Toggle selection for all items\"\n              checkButtonAriaLabel=\"select row\"\n              checkboxVisibility={CheckboxVisibility.hidden}\n              onRenderItemColumn={renderItemColumn}\n            />\n          </DetailsListWrapper>\n          {benefits && benefits.length < 1 && (\n            <TableTextWrapper>No {BenefitDisplayNameEnum.Azure} for this user.</TableTextWrapper>\n          )}\n        </>\n      )}\n    </ContainerWrapper>\n  );\n};\n\nexport default VisualStudioBenefitDetail;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { OperationStatus } from \"Constants/OperationStatus\";\nimport { AppState } from \"Dataflows/Reducers\";\nimport { IM365BenefitDetail } from \"Interfaces/Benefits/IM365BenefitDetail\";\nimport { IMicrosoft365BenefitDetail } from \"Interfaces/Benefits/IMicrosoft365BenefitDetail\";\nimport { IProfileBenefitResult } from \"Interfaces/Benefits/IProfileBenefitResult\";\nimport { ITeamsBenefitDetail } from \"Interfaces/Benefits/ITeamsBenefitDetail\";\nimport { IFilterValue } from \"Interfaces/IFilterValue\";\nimport { IOperationStatusType } from \"Interfaces/IOperationStatusType\";\nimport { IRDAzureBenefitClaim } from \"Interfaces/RD/IRDAzureBenefitClaim\";\nimport { IRDProgramProfile } from \"Interfaces/RD/ProgramProfile/IRDProgramProfile\";\nimport { IRDUserProfile } from \"Interfaces/RD/UserProfile/IRDUserProfile\";\nimport { IRDUserProfileDetail } from \"Interfaces/RD/UserProfile/IRDUserProfileDetail\";\nimport { IUserProfileComment } from \"Interfaces/UserProfile/IUserProfileComment\";\n\nexport const getState = (state: AppState): AppState => state;\n\n/**\n * Returns current value from state for: currentPage\n * @param {AppState} state\n * @returns {number}\n */\nexport const getCurrentPage = (state: AppState): number => state.rdUserProfileState.currentPage;\n\n/**\n * Returns current value from state for: pageSize\n * @param {AppState} state\n * @returns {number}\n */\nexport const getPageSize = (state: AppState): number => state.rdUserProfileState.pageSize;\n\n/**\n * Returns current value from state for: searchText\n * @param {AppState} state\n * @returns {string}\n */\nexport const getSearchText = (state: AppState): string => state.rdUserProfileState.searchText;\n\n/**\n * Returns the filtered count.\n * @param {AppState} state\n *  @returns {number}\n */\nexport const getFilteredCount = (state: AppState): number => state.rdUserProfileState.filteredCount;\n\n/**\n * Returns current value from state for: isUserProfilesLoading\n * @param {AppState} state\n * @returns {boolean}\n */\nexport const isUserProfilesLoading = (state: AppState): boolean =>\n  state.rdUserProfileState.isUserProfilesLoading;\n\n/**\n * Returns current value from state for: userProfiles\n * @param {AppState} state\n * @returns {IRDUserProfile[]}\n */\nexport const getUserProfiles = (state: AppState): IRDUserProfile[] =>\n  state.rdUserProfileState.userProfiles;\n\n/**\n * Returns file down load data.\n * @param {AppState} state\n * @returns {string|undefined}\n */\nexport const getFileDownloadData = (state: AppState): string | undefined =>\n  state.rdUserProfileState.fileDownloadData;\n\n/**\n * Returns file down load status.\n * @param {AppState} state\n * @returns {OperationStatus}\n */\nexport const getFileDownloadStatus = (state: AppState): OperationStatus =>\n  state.rdUserProfileState.fileDownloadStatus;\n\n/**\n * Returns current value from state for: userProfiles\n * @param userProfileState\n * @returns {IRDUserProfile[]}\n */\nexport const getUserProfilesFilterValues = (state: AppState): IFilterValue[] =>\n  state.rdUserProfileState.userProfileFilterValues;\n\n/**\n * Returns selected user profile id.\n * @param userProfileState\n * @returns {number|undefined}\n */\nexport const getUserProfileId = (state: AppState): number | undefined =>\n  state.rdUserProfileState.selectedUserProfileId;\n\n/**\n * Returns selected user profile.\n * @param userProfileState\n * @returns {IRDUserProfileDetail|undefined}\n */\nexport const getSelectedUserProfile = (state: AppState): IRDUserProfileDetail =>\n  state.rdUserProfileState.selectedUserProfile;\n\n/**\n * Returns loading status of selected user profile.\n * @param userProfileState\n * @returns {boolean}\n */\nexport const getSelectedUserProfileIsLoadingStatus = (state: AppState): boolean =>\n  state.rdUserProfileState.fetchUserProfileOperationStatus === OperationStatus.Pending;\n\n/**\n * Returns error message returned when fetching a user profile fails.\n * @param userProfileState\n * @returns {string}\n */\nexport const getFetchUserProfileErrorMessage = (state: AppState): string =>\n  state.rdUserProfileState.fetchUserProfileOperationStatus === OperationStatus.Failed &&\n  !!state.rdUserProfileState.fetchUserProfileErrorMessage\n    ? state.rdUserProfileState.fetchUserProfileErrorMessage\n    : \"\";\n\n/**\n * Returns user profile comments.\n * @param userProfileState\n */\nexport const getUserProfileComments = (state: AppState): IUserProfileComment[] =>\n  state.rdUserProfileState.userProfileComments;\n\n/**\n * Returns loading status of user profile comments.\n * @param userProfileState\n * @returns {boolean}\n */\nexport const getUserProfileCommentsIsLoadingStatus = (state: AppState): boolean =>\n  state.rdUserProfileState.fetchUserProfileCommentsStatus === OperationStatus.Pending;\n\n/**\n * Returns error message returned when user profile comments fails.\n * @param userProfileState\n * @returns {string}\n */\nexport const getUserProfileCommentsErrorMessage = (state: AppState): string =>\n  state.rdUserProfileState.fetchUserProfileCommentsStatus === OperationStatus.Failed &&\n  !!state.rdUserProfileState.fetchUserProfileCommentsErrorMessage\n    ? state.rdUserProfileState.fetchUserProfileCommentsErrorMessage\n    : \"\";\n\n/**\n * Returns progress status of program profile update.\n * @param userProfileState\n * @returns {OperationStatus}\n */\nexport const getProgramProfileUpdateStatus = (state: AppState): OperationStatus =>\n  state.rdUserProfileState.updateProgramProfileOperationStatus;\n\nexport const getProgramProfile = (state: AppState): IRDProgramProfile | undefined =>\n  state.rdUserProfileState.selectedUserProfile?.programProfile;\n\nexport const getFetchProgramProfileErrorMessage = (state: AppState): string =>\n  state.rdUserProfileState.fetchProgramProfileErrorMessage;\n\nexport const getUpdateProgramProfileErrorMessage = (state: AppState): string | undefined =>\n  state.rdUserProfileState.updateProgramProfileErrorMessage;\n\n/**\n * Returns in progress status of user profile comment add.\n * @param userProfileState\n * @returns {OperationStatus}\n */\nexport const getUserProfileAddCommentInProgressStatus = (state: AppState): OperationStatus =>\n  state.rdUserProfileState.addUserProfileCommentOperationStatus;\n\n/**\n * Returns error message returned if user profile comment add fails.\n * @param userProfileState\n * @returns {string}\n */\nexport const getUserProfileAddCommentErrorMessage = (state: AppState): string =>\n  state.rdUserProfileState.addUserProfileCommentOperationStatus === OperationStatus.Failed &&\n  !!state.rdUserProfileState.addUserProfileCommentErrorMessage\n    ? state.rdUserProfileState.addUserProfileCommentErrorMessage\n    : \"\";\n\n/**\n * Returns the isClaimingBenefit value.\n * @param {AppState} state\n * @returns {boolean}\n */\nexport const getIsClaimingBenefits = (state: AppState): boolean =>\n  state.rdUserProfileState.isClaimingBenefit;\n\n/**\n * Returns the isClaimingBenefitSuccess value.\n * @param {AppState} state\n * @returns {OperationStatus}\n */\nexport const getIsClaimingBenefitStatus = (state: AppState): OperationStatus =>\n  state.rdUserProfileState.isClaimingBenefitStatus;\n\n/**\n * Returns the isClaimingBenefitError value.\n * @param {AppState} state\n * @returns {string}\n */\nexport const getIsClaimingBenefitsError = (state: AppState): string =>\n  state.rdUserProfileState.claimBenefitError;\n\n/**\n * Returns the getProfileBenefits value.\n * @param {AppState} state\n * @returns {IProfileBenefitResult}\n */\nexport const getProfileBenefits = (state: AppState): IProfileBenefitResult =>\n  state.rdUserProfileState.profileBenefits;\n\n/**\n * Returns the getProfileBenefitsStatus value.\n * @param {AppState} state\n * @returns {OperationStatus}\n */\nexport const getProfileBenefitsStatus = (state: AppState): OperationStatus =>\n  state.rdUserProfileState.profileBenefitsStatus;\n\n/**\n * Returns the getProfileBenefitsErrorMessage value.\n * @param {AppState} state\n * @returns {string}\n */\nexport const getProfileBenefitsErrorMessage = (state: AppState): string =>\n  state.rdUserProfileState.profileBenefitsErrorMessage;\n\n/**\n * Gets the users M365 Benefit Detail object in state.\n * @param {AppState} state\n * @returns {IM365BenefitDetail}\n */\nexport const m365GetBenefitDetail = (state: AppState): IM365BenefitDetail =>\n  state.rdUserProfileState.m365BenefitDetailState.m365BenefitDetail;\n\n/**\n * Gets the M365 Update Operation Status.\n * @param {AppState} state\n * @returns {OperationStatus | undefined}\n */\nexport const m365UpdateStatus = (state: AppState): OperationStatus | undefined =>\n  state.rdUserProfileState.m365BenefitDetailState.m365OperationStatus?.update;\n\n/**\n * Gets the M365 Fetch Operation Status.\n * @param {AppState} state\n * @returns {OperationStatus | undefined}\n */\nexport const m365FetchStatus = (state: AppState): OperationStatus | undefined =>\n  state.rdUserProfileState.m365BenefitDetailState.m365OperationStatus?.read;\n\n/**\n * Gets the M365 Fetch Error message from state.\n * @param {AppState} state\n * @returns {string}\n */\nexport const m365FetchErrorMessage = (state: AppState): string =>\n  state.rdUserProfileState.m365BenefitDetailState.m365FetchErrorMessage;\n\n/**\n * Gets the MS365 Benefit Detail from state.\n * @param {AppState} state\n * @returns {IMicrosoft365BenefitDetail}\n */\nexport const ms365GetBenefitDetail = (state: AppState): IMicrosoft365BenefitDetail =>\n  state.rdUserProfileState.ms365BenefitDetailState.ms365BenefitDetail;\n\n/**\n * Gets the MS365 Fetch Error message.\n * @param {AppState} state\n * @returns {string}\n */\nexport const ms365FetchErrorMessage = (state: AppState): string =>\n  state.rdUserProfileState.ms365BenefitDetailState.ms365FetchErrorMessage;\n\n/**\n * Gets the MS365 Update Error message\n * @param {AppState} state\n * @returns {string}\n */\nexport const ms365UpdateErrorMessage = (state: AppState): string =>\n  state.rdUserProfileState.ms365BenefitDetailState.ms365UpdateErrorMessage;\n\n/**\n * Gets the MS365 Fetch Operation Status.\n * @param {AppState} state\n * @returns {OperationStatus}\n */\nexport const ms365FetchStatus = (state: AppState): OperationStatus | undefined =>\n  state.rdUserProfileState.ms365BenefitDetailState.ms365OperationStatus?.read;\n\n/**\n * Gets the MS365 Update Operation Status.\n * @param {AppState} state\n * @returns {OperationStatus}\n */\nexport const ms365UpdateStatus = (state: AppState): OperationStatus | undefined =>\n  state.rdUserProfileState.ms365BenefitDetailState.ms365OperationStatus?.update;\n\n/**\n * Gets the Teams Fetch Operation Status.\n * @param {AppState} state\n * @returns {OperationStatus | undefined}\n */\nexport const teamsFetchStatus = (state: AppState): OperationStatus | undefined =>\n  state.rdUserProfileState.teamsBenefitDetailState.teamsOperationStatus?.read;\n\n/**\n * Gets the users Teams Benefit Detail object in state.\n * @param {AppState} state\n * @returns {ITeamsBenefitDetail}\n */\nexport const teamsGetBenefitDetail = (state: AppState): ITeamsBenefitDetail =>\n  state.rdUserProfileState.teamsBenefitDetailState.teamsBenefitDetail;\n\n/**\n * Gets the M365 Fetch Error message from state.\n * @param {AppState} state\n * @returns {string}\n */\nexport const teamsFetchErrorMessage = (state: AppState): string =>\n  state.rdUserProfileState.teamsBenefitDetailState.teamsFetchErrorMessage;\n\n/**\n * Gets the M365 Update Error Message from state.\n * @param {AppState} state\n * @returns {string}\n */\nexport const m365UpdateErrorMessage = (state: AppState): string =>\n  state.rdUserProfileState.m365BenefitDetailState.m365UpdateErrorMessage;\n\nexport const azureBenefitUpdateStatus = (state: AppState): OperationStatus | undefined =>\n  state.rdUserProfileState.azureBenefitExtendCreditState.extendAzureCreditOperationStatus?.update;\n\nexport const azureBenefitUpdateErrorMessage = (state: AppState): string =>\n  state.rdUserProfileState.azureBenefitExtendCreditState.extendAzureCreditError;\n\n/**\n * Returns update user profile is private error.\n * @param appState\n * @returns {string}\n */\nexport const getUserProfileUpdateIsPrivateError = (state: AppState): string =>\n  state.rdUserProfileState.updateIsPrivateProfileError;\n\n/**\n * Returns update user profile is private operation status.\n * @param appState\n * @returns {OperationStatus}\n */\nexport const getUserProfileUpdateIsPrivateOperationStatus = (state: AppState): OperationStatus =>\n  state.rdUserProfileState.updateIsPrivateProfileStatus;\n\n/**\n * Returns current value from state for: sortColumn\n * @param {AppState} state\n * @returns {string}\n */\nexport const getCurrentSortColumn = (state: AppState): string | undefined =>\n  state.rdUserProfileState.sortColumn;\n\n/**\n * Returns current value from state for: sortDescending\n * @param {AppState} state\n * @returns {boolean}\n */\nexport const getCurrentSortDescending = (state: AppState): boolean | undefined =>\n  state.rdUserProfileState.sortDescending;\n\n/**\n * Returns the update primary email status.\n * @param {AppState} state\n * @returns {OperationStatus}\n */\nexport const getUserProfileUpdatePrimaryEmailStatus = (state: AppState): OperationStatus =>\n  state.rdUserProfileState.updatePrimaryEmailStatus;\n\n/**\n * Returns the update primary email error.\n * @param {AppState} state\n * @returns {string}\n */\nexport const getUserProfileUpdatePrimaryEmailError = (state: AppState): string =>\n  state.rdUserProfileState.updatePrimaryEmailError;\n\n/**\n * Returns  azure benefit.\n * @param appState\n */\nexport const getAddAzureBenefit = (state: AppState): IRDAzureBenefitClaim | undefined =>\n  state.rdUserProfileState.azureBenefitAddState.azureBenefit;\n\n/**\n * Returns the  azure benefit.\n * @param {AppState} state\n * @returns {OperationStatus}\n */\nexport const getAddAzureBenefitOperationStatus = (state: AppState): IOperationStatusType =>\n  state.rdUserProfileState.azureBenefitAddState.addAzureBenefitOperationStatus;\n\n/**\n * Returns save status of azure benefit.\n * @param appState\n * @returns {boolean}\n */\nexport const getAddAzureBenefitStatus = (state: AppState): boolean =>\n  state.rdUserProfileState.azureBenefitAddState.addAzureBenefitOperationStatus?.update ===\n  OperationStatus.Pending;\n\n/**\n * Returns error message azure benefit fails.\n * @param appState\n * @returns {string}\n */\nexport const getAddAzureBenefitErrorMessage = (state: AppState): string =>\n  state?.rdUserProfileState?.azureBenefitAddState?.addAzureBenefitError || \"\";\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { useEffect, ReactElement } from \"react\";\n\nimport { useForm } from \"react-hook-form\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { useParams } from \"react-router-dom\";\n\nimport * as MVPActions from \"Dataflows/MVP/MVPAction\";\nimport * as RDUserProfileAction from \"Dataflows/RD/UserProfile/RDUserProfileAction\";\n\nimport * as Yup from \"yup\";\n\nimport { IPersonaProps, Stack, StackItem, TextField } from \"@fluentui/react\";\nimport { yupResolver } from \"@hookform/resolvers/yup\";\n\nimport ComboBoxController from \"Components/ReactHookForm/ComboBoxController/ComboBoxController\";\nimport DatePickerController from \"Components/ReactHookForm/DatePickerController/DatePickerController\";\nimport { SidePanel } from \"Components/SidePanel/SidePanel\";\nimport { OperationStatus } from \"Constants/OperationStatus\";\nimport { mvpAnnualExceptionOptions } from \"Constants/ProfileConstants\";\n\nimport { IAzureBenefitAddRecordProps } from \"./IAzureBenefitAddRecordFormProps\";\nimport TextFieldController from \"Components/ReactHookForm/TextFieldController/TextFieldController\";\nimport { getAddAzureBenefitOperationStatus as getAddAzureBenefitOperationStatusMVP } from \"Dataflows/MVP/Benefits/MVPBenefitsSelector\";\nimport { getAddAzureBenefitOperationStatus as getAddAzureBenefitOperationStatusRD } from \"Dataflows/RD/UserProfile/RDUserProfileSelector\";\nimport { IMVPAzureBenefitClaim } from \"Interfaces/MVP/IMVPAzureBenefitClaim\";\n\nexport const AzureBenefitAddRecordForm = (props: IAzureBenefitAddRecordProps): ReactElement => {\n  const {\n    isPanelOpen,\n    setIsPanelOpen,\n    isSaving,\n    errorMessage,\n    addAzureBenefitCredit,\n    dismissPanel,\n  } = props;\n\n  const {\n    control,\n    handleSubmit,\n    reset,\n    formState: { errors },\n  } = useForm({\n    resolver: yupResolver(\n      Yup.object().shape({\n        registrationId: Yup.string().required().required(\"Registration ID is required\"),\n      })\n    ),\n  });\n\n  const dispatch = useDispatch();\n  const addAzureBenefitStatusMVP = useSelector(getAddAzureBenefitOperationStatusMVP);\n  const addAzureBenefitStatusRD = useSelector(getAddAzureBenefitOperationStatusRD);\n  const { id } = useParams<{ id: string }>();\n\n  useEffect(() => {\n    if (isPanelOpen) {\n      if (addAzureBenefitStatusMVP.update === OperationStatus.Succeeded) {\n        dispatch(MVPActions.fetchProfileBenefits(parseInt(id)));\n      } else if (addAzureBenefitStatusRD.update === OperationStatus.Succeeded) {\n        dispatch(RDUserProfileAction.getProfileBenefits(parseInt(id)));\n      }\n      dismissPanel();\n    }\n  }, [\n    addAzureBenefitStatusMVP.update === OperationStatus.Succeeded,\n    addAzureBenefitStatusRD.update === OperationStatus.Succeeded,\n  ]);\n\n  const save = () =>\n    handleSubmit((data) => {\n      return addAzureBenefitCredit(data as IMVPAzureBenefitClaim);\n    });\n\n  return (\n    <form onSubmit={save()}>\n      <SidePanel\n        isOpen={isPanelOpen}\n        title=\"Add a Record\"\n        saveButtonLabel=\"Save\"\n        error={errorMessage}\n        disableActions={isSaving}\n        onDismiss={dismissPanel}\n        onSave={save()}\n      >\n        <>You can add a new record via the input below</>\n        <Stack tokens={{ childrenGap: \"1rem\" }}>\n          <StackItem>\n            <TextFieldController\n              control={control}\n              errors={errors}\n              inputName=\"registrationId\"\n              isRequired={true}\n              labelDisplayName=\"Registration ID\"\n              isDisabled={isSaving}\n            />\n          </StackItem>\n          <StackItem>\n            <DatePickerController\n              control={control}\n              errors={errors}\n              inputName=\"startDate\"\n              isRequired={true}\n              labelDisplayName=\"Activation Date\"\n              isDisabled={isSaving}\n            />\n          </StackItem>\n          <StackItem>\n            <TextFieldController\n              control={control}\n              inputName=\"capCredit\"\n              errors={errors}\n              isRequired={true}\n              textFieldType=\"number\"\n              labelDisplayName=\"Additional Credit\"\n              prefix=\"$\"\n              isDisabled={isSaving}\n            />\n          </StackItem>\n          <StackItem>\n            <DatePickerController\n              control={control}\n              errors={errors}\n              inputName=\"expirationDate\"\n              isRequired={true}\n              labelDisplayName=\"Credit expiration date\"\n              isDisabled={isSaving}\n            />\n          </StackItem>\n          <StackItem>\n            <TextFieldController\n              inputName=\"email\"\n              control={control}\n              errors={errors}\n              isRequired\n              hasTooltip\n              labelDisplayName=\"Email Address\"\n              toolTipDisplayText=\"Please enter the new login email.\"\n            />\n          </StackItem>\n          <StackItem>\n            <ComboBoxController\n              control={control}\n              errors={errors}\n              inputName=\"isModernSponsorship\"\n              isRequired={true}\n              labelDisplayName=\"Is Modern\"\n              options={mvpAnnualExceptionOptions}\n              isDisabled={isSaving}\n            />\n          </StackItem>\n        </Stack>\n      </SidePanel>\n    </form>\n  );\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { useEffect, useState } from \"react\";\n\nimport { useDispatch } from \"react-redux\";\nimport { useParams } from \"react-router-dom\";\n\nimport { Spinner, SpinnerSize, Stack, StackItem, Text } from \"@fluentui/react\";\n\nimport { AzureBenefitExtendCreditForm } from \"Components/AzureBenefitExtendCreditForm/AzureBenefitExtendCreditForm\";\nimport KeyBenefitsList from \"Components/KeyBenefitsList/KeyBenefitsList\";\nimport M365CopilotBenefitDetail from \"Components/M365CopilotBenefitDetail/M365CopilotBenefitDetail\";\nimport { M365DetailsEditForm } from \"Components/M365DetailsEditForm/M365DetailsEditForm\";\nimport ProfileAzureBenefitDetail from \"Components/ProfileAzureBenefitDetail/ProfileAzureBenefitDetail\";\nimport { SidePanel } from \"Components/SidePanel/SidePanel\";\nimport VisualStudioBenefitDetail from \"Components/VisualStudioBenefitDetail/VisualStudioBenefitDetail\";\nimport {\n  benefitNameToResultMap,\n  tenantBenefitTypes,\n  BenefitDisplayNameEnum,\n  BenefitNameEnum,\n} from \"Constants/BenefitConstants\";\nimport { OperationStatus } from \"Constants/OperationStatus\";\nimport { TenantTypesEnum } from \"Constants/TenantTypes\";\nimport { IM365BenefitDetail } from \"Interfaces/Benefits/IM365BenefitDetail\";\nimport { IMicrosoft365BenefitDetail } from \"Interfaces/Benefits/IMicrosoft365BenefitDetail\";\nimport { getTenant } from \"Utility/Utils\";\n\nimport { IProfileBenefitDetailsProps } from \"./IProfileBenefitDetailsProps\";\nimport {\n  benefitLabelStyles,\n  containerStyles,\n  horizontalGapStackTokens,\n} from \"./ProfileBenefitDetails.styles\";\nimport { AzureBenefitAddRecordForm } from \"Components/AzureBenefitAddRecordForm/AzureBenefitAddRecordForm\";\nimport { IMVPAzureBenefitClaim } from \"Interfaces/MVP/IMVPAzureBenefitClaim\";\nimport { IRDAzureBenefitClaim } from \"Interfaces/RD/IRDAzureBenefitClaim\";\nimport { AwardkitMilestone } from \"Constants/ProfileConstants\";\nimport { useForm } from \"react-hook-form\";\nimport { yupResolver } from \"@hookform/resolvers/yup\";\nimport * as Yup from \"yup\";\nimport ComboBoxController from \"Components/ReactHookForm/ComboBoxController/ComboBoxController\";\nconst ProfileBenefitDetails = (props: IProfileBenefitDetailsProps): React.ReactElement => {\n  const {\n    profileBenefits,\n    profileBenefitsErrorMessage,\n    profileBenefitsStatus,\n    isClaimingBenefitStatus,\n    claimingBenefitError,\n    canManageBenefits,\n    getProfileBenefits,\n    claimBenefitReset,\n    claimBenefit,\n    tenantName,\n    m365GetBenefitDetail,\n    m365UpdateBenefitDetail,\n    m365BenefitDetailReset,\n    m365BenefitDetail,\n    m365FetchStatus,\n    m365UpdateStatus,\n    m365FetchErrorMessage,\n    m365UpdateErrorMessage,\n    ms365GetBenefitDetail,\n    ms365UpdateBenefitDetail,\n    ms365BenefitDetailReset,\n    ms365BenefitDetail,\n    ms365FetchStatus,\n    ms365UpdateStatus,\n    ms365FetchErrorMessage,\n    ms365UpdateErrorMessage,\n    teamsGetBenefitDetail,\n    teamsBenefitDetail,\n    teamsFetchStatus,\n    teamsFetchErrorMessage,\n    awardKitsGetBenefitDetail,\n    awardKitsBenefitDetail,\n    awardKitsFetchStatus,\n    awardKitsFetchErrorMessage,\n    extendAzureBenefitCredit,\n    extendAzureBenefitCreditUpdateStatus,\n    extendAzureBenefitCreditErrorMessage,\n    extendAzureBenefitCreditReset,\n    addAzureBenefits,\n    addAzureBenefitsUpdateStatus,\n    addAzureBenefitsErrorMessage,\n    addAzureBenefitReset,\n  } = props;\n  const [isAssignPanelOpen, setIsAssignPanelOpen] = useState(false);\n  const [isEditM365PanelOpen, setIsEditM365PanelOpen] = useState(false);\n  const [isEditMS365PanelOpen, setIsEditMS365PanelOpen] = useState(false);\n  const [isExtendAzureCreditPanelOpen, setIsExtendAzureCreditPanelOpen] = useState(false);\n  const [isAddAzureBenefitPanelOpen, setIsAddAzureBenefitPanelOpen] = useState(false);\n\n  const [benefitToClaim, setBenefitToClaim] = useState(\"\");\n  const { id } = useParams<{ id: string }>();\n  const [Sku, setSku] = useState(AwardkitMilestone[0].key);\n  const isClaimingBenefit = isClaimingBenefitStatus === OperationStatus.Pending;\n\n  const dispatch = useDispatch();\n\n  useEffect(() => {\n    dispatch(getProfileBenefits(parseInt(id)));\n    if (m365GetBenefitDetail) {\n      dispatch(m365GetBenefitDetail(parseInt(id)));\n    }\n    if (ms365GetBenefitDetail) {\n      dispatch(ms365GetBenefitDetail(parseInt(id)));\n    }\n    if (teamsGetBenefitDetail) {\n      dispatch(teamsGetBenefitDetail(parseInt(id)));\n    }\n    awardKitsGetBenefitDetail && dispatch(awardKitsGetBenefitDetail(parseInt(id)));\n  }, [id]);\n\n  const assignBenefitClicked = (benefitType: string): void => {\n    setIsAssignPanelOpen(true);\n    setBenefitToClaim(benefitType);\n  };\n\n  const editM365DetailsClicked = (): void => {\n    setIsEditM365PanelOpen(true);\n  };\n\n  const dismissEditM365Panel = (): void => {\n    setIsEditM365PanelOpen(false);\n    if (m365GetBenefitDetail) {\n      dispatch(m365GetBenefitDetail(parseInt(id)));\n    }\n    if (m365BenefitDetailReset) {\n      dispatch(m365BenefitDetailReset());\n    }\n  };\n\n  const editMS365DetailsClicked = (): void => {\n    setIsEditMS365PanelOpen(true);\n  };\n\n  const dismissEditMS365Panel = (): void => {\n    setIsEditMS365PanelOpen(false);\n    if (ms365GetBenefitDetail) {\n      dispatch(ms365GetBenefitDetail(parseInt(id)));\n    }\n    if (ms365BenefitDetailReset) {\n      dispatch(ms365BenefitDetailReset());\n    }\n  };\n\n  const updateMS365BenefitDetail = (ms365BenefitDetail: IMicrosoft365BenefitDetail): void => {\n    if (ms365UpdateBenefitDetail) {\n      dispatch(ms365UpdateBenefitDetail(ms365BenefitDetail));\n    }\n    if (ms365UpdateStatus === OperationStatus.Succeeded) {\n      dismissEditMS365Panel();\n    }\n  };\n\n  const dismissAssignPanel = (): void => {\n    setIsAssignPanelOpen(false);\n    dispatch(getProfileBenefits(parseInt(id)));\n    if (m365GetBenefitDetail) {\n      dispatch(m365GetBenefitDetail(parseInt(id)));\n    }\n    dispatch(claimBenefitReset());\n  };\n\n  const manageAzureBenefitCreditClicked = (benefitType: string): void => {\n    setIsExtendAzureCreditPanelOpen(true);\n  };\n  const manageAddAzureBenefitClicked = (benefitType: string): void => {\n    setIsAddAzureBenefitPanelOpen(true);\n  };\n\n  const dismissExtendAzureBenefitCreditPanel = (): void => {\n    setIsExtendAzureCreditPanelOpen(false);\n    dispatch(getProfileBenefits(parseInt(id)));\n    if (m365GetBenefitDetail) {\n      dispatch(m365GetBenefitDetail(parseInt(id)));\n    }\n    if (extendAzureBenefitCreditReset) {\n      dispatch(extendAzureBenefitCreditReset());\n    }\n  };\n  const {\n    control,\n    formState: { errors, isValid },\n  } = useForm();\n\n  const dismissAddAzureBenefitPanel = (): void => {\n    setIsAddAzureBenefitPanelOpen(false);\n    dispatch(getProfileBenefits(parseInt(id)));\n    if (m365GetBenefitDetail) {\n      dispatch(m365GetBenefitDetail(parseInt(id)));\n    }\n    addAzureBenefitReset && dispatch(addAzureBenefitReset());\n  };\n\n  const extendAzureBenefitCreditDispatch = (credit: number): void => {\n    if (extendAzureBenefitCredit) {\n      dispatch(extendAzureBenefitCredit(credit, parseInt(id)));\n    }\n  };\n  const addAzureBenefitsDispatch = (\n    azureBenefit: IMVPAzureBenefitClaim | IRDAzureBenefitClaim\n  ): void => {\n    addAzureBenefits && dispatch(addAzureBenefits(azureBenefit, parseInt(id)));\n  };\n\n  const claimBenefitDispatch = (): void => {\n    const skuValue = benefitToClaim === BenefitNameEnum.AwardKits ? Sku : \"\";\n    dispatch(claimBenefit(benefitToClaim, parseInt(id), skuValue));\n  };\n\n  const updateM365BenefitDetail = (m365BenefitDetail: IM365BenefitDetail): void => {\n    if (m365UpdateBenefitDetail) {\n      dispatch(m365UpdateBenefitDetail(m365BenefitDetail));\n    }\n    if (m365UpdateStatus === OperationStatus.Succeeded) {\n      dismissEditM365Panel();\n    }\n  };\n\n  const getAvailableBenefitTypes = (): BenefitNameEnum[] => {\n    return tenantBenefitTypes[tenantName];\n  };\n\n  const getBenefitOtherTenantName = (benefitType: BenefitNameEnum): string | undefined => {\n    if (!profileBenefits.benefitTenant) return undefined;\n\n    const benefitTenant = getTenant(profileBenefits.benefitTenant[benefitType]);\n\n    if (benefitTenant?.toLowerCase() === tenantName.toLowerCase()) {\n      return undefined;\n    }\n\n    return benefitTenant;\n  };\n\n  const benefitLists = getAvailableBenefitTypes().map((benefitType, index) => {\n    if (benefitType === BenefitNameEnum.Azure) {\n      return (\n        <ProfileAzureBenefitDetail\n          benefitType={BenefitNameEnum.Azure}\n          benefits={profileBenefits[benefitNameToResultMap[benefitType]] ?? []}\n          extendBenefitClicked={manageAzureBenefitCreditClicked}\n          addAzureBenefitClicked={manageAddAzureBenefitClicked}\n          canManageBenefits={canManageBenefits}\n          benefitOtherTenantName={getBenefitOtherTenantName(benefitType)}\n        />\n      );\n    } else if (benefitType === BenefitNameEnum.VisualStudio) {\n      return (\n        <VisualStudioBenefitDetail\n          key={index}\n          benefitType={BenefitNameEnum.VisualStudio}\n          benefits={profileBenefits[benefitNameToResultMap[benefitType]] ?? []}\n          assignBenefitClicked={assignBenefitClicked}\n          canManageBenefits={canManageBenefits && tenantName === TenantTypesEnum.MSP}\n          benefitOtherTenantName={getBenefitOtherTenantName(benefitType)}\n        />\n      );\n    } else if (benefitType === BenefitNameEnum.M365Copilot) {\n      return (\n        <M365CopilotBenefitDetail\n          benefits={profileBenefits[benefitNameToResultMap[benefitType]] ?? []}\n        />\n      );\n    } else {\n      return (\n        <KeyBenefitsList\n          key={index}\n          benefitType={benefitType}\n          benefits={profileBenefits[benefitNameToResultMap[benefitType]] ?? []}\n          assignBenefitClicked={assignBenefitClicked}\n          canManageBenefits={canManageBenefits}\n          userProfileId={parseInt(id)}\n          editM365DetailsClicked={editM365DetailsClicked}\n          m365FetchErrorMessage={m365FetchErrorMessage}\n          m365FetchStatus={m365FetchStatus}\n          m365BenefitDetail={m365BenefitDetail}\n          editMS365DetailsClicked={editMS365DetailsClicked}\n          ms365FetchErrorMessage={ms365FetchErrorMessage}\n          ms365FetchStatus={ms365FetchStatus}\n          ms365BenefitDetail={ms365BenefitDetail}\n          teamsFetchStatus={teamsFetchStatus}\n          teamsFetchErrorMessage={teamsFetchErrorMessage}\n          awardKitsFetchStatus={awardKitsFetchStatus}\n          awardKitsFetchErrorMessage={awardKitsFetchErrorMessage}\n          benefitOtherTenantName={getBenefitOtherTenantName(benefitType)}\n        />\n      );\n    }\n  });\n\n  useEffect(() => {\n    if (isClaimingBenefitStatus === OperationStatus.Succeeded) {\n      dismissAssignPanel();\n    }\n  }, [isClaimingBenefit, isClaimingBenefitStatus, claimingBenefitError]);\n\n  // if the M365 Update Detail is succeed, close the side panel.\n  useEffect(() => {\n    if (m365UpdateStatus === OperationStatus.Succeeded) {\n      dismissEditM365Panel();\n    }\n  }, [m365UpdateStatus, m365UpdateErrorMessage]);\n\n  useEffect(() => {\n    if (extendAzureBenefitCreditUpdateStatus === OperationStatus.Succeeded) {\n      dismissExtendAzureBenefitCreditPanel();\n    }\n  }, [extendAzureBenefitCreditUpdateStatus]);\n\n  useEffect(() => {\n    if (addAzureBenefitsUpdateStatus === OperationStatus.Succeeded) {\n      dismissAddAzureBenefitPanel();\n    }\n  }, [addAzureBenefitsUpdateStatus]);\n  const onChangeOfSku = (option: any) => setSku(option.key);\n\n  /**\n   * Get benefit name\n   * @returns Title of Assign Side Panel\n   */\n  const getBenefitDisplayTitle = (): string => {\n    const title =\n      benefitToClaim === BenefitNameEnum.M365\n        ? BenefitDisplayNameEnum.O365\n        : benefitToClaim === BenefitNameEnum.MS365\n        ? BenefitDisplayNameEnum.MS365\n        : benefitToClaim;\n    return title;\n  };\n\n  return (\n    <>\n      {profileBenefitsStatus === OperationStatus.Failed ? (\n        <Text>{profileBenefitsErrorMessage}</Text>\n      ) : profileBenefitsStatus === OperationStatus.Pending ? (\n        <Spinner size={SpinnerSize.large} />\n      ) : (\n        <>\n          <SidePanel\n            isOpen={isAssignPanelOpen}\n            title=\"Add Benefits\"\n            saveButtonLabel=\"Claim\"\n            error={claimingBenefitError}\n            disableActions={isClaimingBenefit}\n            onDismiss={dismissAssignPanel}\n            onSave={claimBenefitDispatch}\n          >\n            <Stack>\n              <Text>You can claim a benefit and assign to active users</Text>\n            </Stack>\n            <Stack horizontal tokens={horizontalGapStackTokens}>\n              <StackItem>\n                <Text styles={benefitLabelStyles}>Benefit:</Text>\n              </StackItem>\n              <StackItem>\n                <Text>{getBenefitDisplayTitle()}</Text>\n              </StackItem>\n            </Stack>\n            <Stack styles={containerStyles}>\n              {benefitToClaim === BenefitNameEnum.AwardKits && (\n                <>\n                  <ComboBoxController\n                    control={control}\n                    errors={errors}\n                    inputName=\"AwardType\"\n                    labelDisplayName=\"Award Type\"\n                    options={AwardkitMilestone}\n                    defaultSelectedKey={Sku}\n                    onChange={(_e): void => {\n                      onChangeOfSku(_e);\n                    }}\n                  />\n                </>\n              )}\n            </Stack>\n            <Stack>\n              <Text>\n                {`Assign a ${getBenefitDisplayTitle()} code to a Community Leader. This code will be available\n                for the user under Account - Benefits - ${getBenefitDisplayTitle()}. You should notify\n                the user that a new code has been assigned.`}\n              </Text>\n            </Stack>\n          </SidePanel>\n\n          {isEditM365PanelOpen && (\n            <M365DetailsEditForm\n              benefitType={BenefitNameEnum.O365}\n              isEditM365PanelOpen={isEditM365PanelOpen}\n              setIsEditM365PanelOpen={setIsEditM365PanelOpen}\n              userProfileId={parseInt(id)}\n              dismissPanel={dismissEditM365Panel}\n              m365UpdateErrorMessage={m365UpdateErrorMessage}\n              updateM365BenefitDetail={updateM365BenefitDetail}\n              m365BenefitDetail={m365BenefitDetail}\n            />\n          )}\n\n          {isEditMS365PanelOpen && (\n            <M365DetailsEditForm\n              benefitType={BenefitNameEnum.MS365}\n              isEditM365PanelOpen={isEditMS365PanelOpen}\n              setIsEditM365PanelOpen={setIsEditMS365PanelOpen}\n              userProfileId={parseInt(id)}\n              dismissPanel={dismissEditMS365Panel}\n              m365UpdateErrorMessage={ms365UpdateErrorMessage}\n              updateMS365BenefitDetail={updateMS365BenefitDetail}\n              m365BenefitDetail={ms365BenefitDetail}\n            />\n          )}\n\n          <AzureBenefitExtendCreditForm\n            isPanelOpen={isExtendAzureCreditPanelOpen}\n            setIsPanelOpen={setIsExtendAzureCreditPanelOpen}\n            dismissPanel={dismissExtendAzureBenefitCreditPanel}\n            extendAzureBenefitCredit={extendAzureBenefitCreditDispatch}\n            errorMessage={extendAzureBenefitCreditErrorMessage}\n            isSaving={extendAzureBenefitCreditUpdateStatus === OperationStatus.Pending}\n          />\n          <AzureBenefitAddRecordForm\n            isPanelOpen={isAddAzureBenefitPanelOpen}\n            setIsPanelOpen={setIsAddAzureBenefitPanelOpen}\n            dismissPanel={dismissAddAzureBenefitPanel}\n            addAzureBenefitCredit={addAzureBenefitsDispatch}\n            errorMessage={addAzureBenefitsErrorMessage}\n            isSaving={addAzureBenefitsUpdateStatus === OperationStatus.Pending}\n          />\n\n          <>{benefitLists}</>\n        </>\n      )}\n    </>\n  );\n};\n\nexport default ProfileBenefitDetails;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React from \"react\";\n\nimport { useSelector } from \"react-redux\";\n\nimport * as MVPBenefitsSelector from \"Dataflows/MVP/Benefits/MVPBenefitsSelector\";\nimport * as MVPActions from \"Dataflows/MVP/MVPAction\";\n\nimport { useAuth } from \"Authentication/AuthProvider\";\nimport ProfileBenefitDetails from \"Components/ProfileBenefitDetails/ProfileBenefitDetails\";\nimport { OperationStatus } from \"Constants/OperationStatus\";\nimport { RolesEnum } from \"Constants/RolesPermissionsConstants\";\nimport { TenantTypesEnum } from \"Constants/TenantTypes\";\n\nconst MostValuableProfessionalBenefitDetails = (): React.ReactElement => {\n  const profileBenefits = useSelector(MVPBenefitsSelector.getProfileBenefits);\n  const profileBenefitsErrorMessage = useSelector(\n    MVPBenefitsSelector.getProfileBenefitsErrorMessage\n  );\n  const profileBenefitsStatus = useSelector(MVPBenefitsSelector.getProfileBenefitsStatus);\n  const isClaimingBenefitStatus = useSelector(MVPBenefitsSelector.getIsClaimingBenefitStatus);\n  const claimingBenefitError = useSelector(MVPBenefitsSelector.getIsClaimingBenefitsError);\n\n  const m365BenefitDetail = useSelector(MVPBenefitsSelector.m365GetBenefitDetail);\n  const m365FetchErrorMessage = useSelector(MVPBenefitsSelector.m365FetchErrorMessage);\n  const m365UpdateErrorMessage = useSelector(MVPBenefitsSelector.m365UpdateErrorMessage);\n  const m365FetchStatus = useSelector(MVPBenefitsSelector.m365FetchStatus);\n  const m365UpdateStatus = useSelector(MVPBenefitsSelector.m365UpdateStatus);\n  const ms365BenefitDetail = useSelector(MVPBenefitsSelector.ms365GetBenefitDetail);\n  const ms365FetchErrorMessage = useSelector(MVPBenefitsSelector.ms365FetchErrorMessage);\n  const ms365UpdateErrorMessage = useSelector(MVPBenefitsSelector.ms365UpdateErrorMessage);\n  const ms365FetchStatus = useSelector(MVPBenefitsSelector.ms365FetchStatus);\n  const ms365UpdateStatus = useSelector(MVPBenefitsSelector.ms365UpdateStatus);\n  const teamsBenefitDetail = useSelector(MVPBenefitsSelector.teamsGetBenefitDetail);\n  const teamsFetchStatus = useSelector(MVPBenefitsSelector.teamsFetchStatus);\n  const teamsFetchErrorMessage = useSelector(MVPBenefitsSelector.teamsFetchErrorMessage);\n  const awardKitsBenefitDetail = useSelector(MVPBenefitsSelector.awardKitsGetBenefitDetail);\n  const awardKitsFetchStatus = useSelector(MVPBenefitsSelector.awardKitsFetchStatus);\n  const awardKitsFetchErrorMessage = useSelector(MVPBenefitsSelector.awardKitsFetchErrorMessage);\n\n  const azureBenefitExtendCreditError = useSelector(\n    MVPBenefitsSelector.azureBenefitUpdateErrorMessage\n  );\n  const addAzureBenefitError = useSelector(MVPBenefitsSelector.getAddAzureBenefitErrorMessage);\n\n  const azureBenefitExtendCreditStatus = useSelector(MVPBenefitsSelector.azureBenefitUpdateStatus);\n\n  const { hasRole } = useAuth();\n\n  const canManageBenefits =\n    hasRole(RolesEnum.MVP_BENEFITS_MANAGER) || hasRole(RolesEnum.MVP_PROGRAM_OWNER);\n\n  return (\n    <ProfileBenefitDetails\n      profileBenefits={profileBenefits}\n      profileBenefitsErrorMessage={profileBenefitsErrorMessage}\n      profileBenefitsStatus={profileBenefitsStatus as OperationStatus}\n      isClaimingBenefitStatus={isClaimingBenefitStatus as OperationStatus}\n      claimingBenefitError={claimingBenefitError}\n      canManageBenefits={canManageBenefits}\n      getProfileBenefits={MVPActions.fetchProfileBenefits}\n      claimBenefitReset={MVPActions.claimBenefitReset}\n      claimBenefit={MVPActions.claimBenefit}\n      tenantName={TenantTypesEnum.MVP}\n      m365GetBenefitDetail={MVPActions.fetchM365BenefitDetail}\n      m365UpdateBenefitDetail={MVPActions.updateM365BenefitDetail}\n      m365BenefitDetailReset={MVPActions.m365BenefitDetailReset}\n      m365FetchErrorMessage={m365FetchErrorMessage}\n      m365UpdateErrorMessage={m365UpdateErrorMessage}\n      m365FetchStatus={m365FetchStatus as OperationStatus}\n      m365UpdateStatus={m365UpdateStatus as OperationStatus}\n      m365BenefitDetail={m365BenefitDetail}\n      ms365GetBenefitDetail={MVPActions.fetchMS365BenefitDetail}\n      ms365UpdateBenefitDetail={MVPActions.updateMS365BenefitDetail}\n      ms365BenefitDetailReset={MVPActions.ms365BenefitDetailReset}\n      ms365FetchErrorMessage={ms365FetchErrorMessage}\n      ms365UpdateErrorMessage={ms365UpdateErrorMessage}\n      ms365FetchStatus={ms365FetchStatus as OperationStatus}\n      ms365UpdateStatus={ms365UpdateStatus as OperationStatus}\n      ms365BenefitDetail={ms365BenefitDetail}\n      teamsGetBenefitDetail={MVPActions.fetchTeamsBenefitDetail}\n      teamsFetchStatus={teamsFetchStatus as OperationStatus}\n      teamsBenefitDetail={teamsBenefitDetail}\n      teamsFetchErrorMessage={teamsFetchErrorMessage}\n      awardKitsGetBenefitDetail={MVPActions.fetchAwardKitsBenefitDetail}\n      awardKitsFetchStatus={awardKitsFetchStatus as OperationStatus}\n      awardKitsBenefitDetail={awardKitsBenefitDetail}\n      awardKitsFetchErrorMessage={awardKitsFetchErrorMessage}\n      extendAzureBenefitCredit={MVPActions.extendAzureBenefitCredit}\n      extendAzureBenefitCreditReset={MVPActions.extendAzureBenefitCreditReset}\n      extendAzureBenefitCreditUpdateStatus={azureBenefitExtendCreditStatus as OperationStatus}\n      extendAzureBenefitCreditErrorMessage={azureBenefitExtendCreditError}\n      addAzureBenefits={MVPActions.addAzureBenefitDetail}\n      addAzureBenefitReset={MVPActions.addAzureBenefitReset}\n      addAzureBenefitsUpdateStatus={azureBenefitExtendCreditStatus as OperationStatus}\n      addAzureBenefitsErrorMessage={addAzureBenefitError}\n    />\n  );\n};\n\nexport default MostValuableProfessionalBenefitDetails;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { useEffect, ReactElement } from \"react\";\n\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { useHistory, useParams, Redirect } from \"react-router-dom\";\n\nimport { ActionButton, Pivot, PivotItem, Spinner, SpinnerSize, Stack } from \"@fluentui/react\";\n\nimport { useAuth } from \"Authentication/AuthProvider\";\nimport MostValuableProfessionalComments from \"Components/MostValuableProfessionalComments/MostValuableProfessionalComments\";\nimport MostValuableProfessionalDistributionLists from \"Components/MostValuableProfessionalDistributionLists/MostValuableProfessionalDistributionLists\";\nimport MostValuableProfessionalProfile from \"Components/MostValuableProfessionalProfile/MostValuableProfessionalProfile\";\nimport MostValuableProfessionalProgramProfile from \"Components/MostValuableProfessionalProgramProfile/MostValuableProfessionalProgramProfile\";\nimport ProfileHeader from \"Components/ProfileHeader/ProfileHeader\";\nimport { ProfileTabs } from \"Constants/ProfileConstants\";\nimport { PermissionsEnum, RolesEnum } from \"Constants/RolesPermissionsConstants\";\nimport { TenantTypesEnum } from \"Constants/TenantTypes\";\nimport { DetailWrapper } from \"Containers/Common/CommonContainer.styles\";\nimport {\n  fetchUserProfile,\n  userProfilePrimaryEmailUpdate,\n  userProfilePrimaryEmailUpdateReset,\n} from \"Dataflows/MVP/MVPAction\";\nimport {\n  getFetchUserProfileErrorMessage,\n  getSelectedUserProfile,\n  getUserProfileIsLoadingStatus,\n  getUserProfileUpdatePrimaryEmailErrorMessage,\n  getUserProfileUpdatePrimaryEmailStatus,\n} from \"Dataflows/MVP/UserProfile/MVPUserProfileSelector\";\nimport { useProfileTabs } from \"Utility/CustomTabHooks\";\n\nimport MostValuableProfessionalBenefitDetails from \"../../../Components/MostValuableProfessionalProfileBenefits/MostValuableProfessionalBenefitDetails\";\nimport {\n  containerStackTokens,\n  wrapperStackStyles,\n} from \"./MostValuableProfessionalDetailsContainer.styles\";\n\n/**\n * The Most Valuable Professional Details Container component\n * @method\n * @returns {ReactElement} The Most Valuable Professional Details Container component\n */\nconst MostValuableProfessionalDetailsContainer = (): ReactElement => {\n  const dispatch = useDispatch();\n\n  const { isUserLoggedIn, loading, hasAnyRoles, hasPermission, hasRole } = useAuth();\n  const history = useHistory();\n  const isUserProfileLoading = useSelector(getUserProfileIsLoadingStatus);\n  const fetchErrorMessage = useSelector(getFetchUserProfileErrorMessage);\n  const partialProfileInfo = useSelector(getSelectedUserProfile);\n\n  const updatePrimaryEmailStatus = useSelector(getUserProfileUpdatePrimaryEmailStatus);\n\n  const updatePrimaryEmailError = useSelector(getUserProfileUpdatePrimaryEmailErrorMessage);\n\n  const onPrimaryEmailUpdate = (userProfileId: number, newEmail: string): void => {\n    dispatch(userProfilePrimaryEmailUpdate(userProfileId, newEmail));\n  };\n\n  const onPrimaryEmailUpdateReset = (): void => {\n    dispatch(userProfilePrimaryEmailUpdateReset());\n  };\n\n  const loadUserProfile = (userProfileId: number): void => {\n    dispatch(fetchUserProfile(userProfileId));\n  };\n\n  if (isUserLoggedIn && !hasAnyRoles && !loading) {\n    return <Redirect to=\"/unauthorized\" />;\n  }\n\n  // We don't want MVP Tech Area Validators / Product Group Partners to be able to see Benefits.\n  const canViewBenefits =\n    hasPermission(TenantTypesEnum.MVP, PermissionsEnum.MVP_VIEW_BENEFITS) &&\n    (!hasRole(RolesEnum.MVP_TECH_AREA_VALIDATOR) ||\n      hasRole(RolesEnum.MVP_PROGRAM_OWNER) ||\n      hasRole(RolesEnum.MVP_BENEFITS_MANAGER) ||\n      hasRole(RolesEnum.MVP_REVIEWER));\n  const canViewDistributionLists = hasPermission(\n    TenantTypesEnum.MVP,\n    PermissionsEnum.MVP_VIEW_DISTRIBUTIONS_LIST\n  );\n\n  const canUpdatePrimaryEmail =\n    (hasRole(RolesEnum.MVP_PROGRAM_OWNER) || hasRole(RolesEnum.MVP_BENEFITS_MANAGER)) &&\n    hasPermission(TenantTypesEnum.MVP, PermissionsEnum.MVP_UPDATE_PRIMARY_EMAIL);\n\n  const { id } = useParams<{ id: string }>();\n  const { selectedTab, setSelectedTab } = useProfileTabs();\n\n  useEffect(() => {\n    dispatch(fetchUserProfile(Number.parseInt(id)));\n  }, [dispatch, id]);\n\n  /**\n   * Handler for when the back button is clicked.\n   * @returns {void} void no return for function.\n   */\n  const onBackClickEvent = (): void => {\n    history.goBack();\n  };\n\n  return (\n    <Stack styles={wrapperStackStyles}>\n      <Stack>\n        <ActionButton\n          iconProps={{ iconName: \"RevToggleKey\" }}\n          ariaLabel=\"Back\"\n          onClick={onBackClickEvent}\n        >\n          Back\n        </ActionButton>\n      </Stack>\n      {isUserProfileLoading ? (\n        <Spinner size={SpinnerSize.large} />\n      ) : !!fetchErrorMessage ? (\n        <>Unable to load user at this time.</>\n      ) : (\n        <Stack tokens={containerStackTokens}>\n          {!!partialProfileInfo && (\n            <ProfileHeader\n              userProfileId={partialProfileInfo.id}\n              firstName={partialProfileInfo.firstName}\n              lastName={partialProfileInfo.lastName}\n              primaryEmail={partialProfileInfo.siteEmailAddress}\n              secondaryEmail={partialProfileInfo.preferredContactEmailAddress}\n              tenants={partialProfileInfo.tenants}\n              currentTenant={TenantTypesEnum.MVP}\n              isOvdfBlock={partialProfileInfo?.isOvdfBlock}\n              isPrivate={partialProfileInfo?.isPrivate}\n              canUpdatePrimaryEmail={canUpdatePrimaryEmail}\n              updatePrimaryEmailStatus={updatePrimaryEmailStatus}\n              updatePrimaryEmailError={updatePrimaryEmailError}\n              onPrimaryEmailUpdate={onPrimaryEmailUpdate}\n              onPrimaryEmailUpdateReset={onPrimaryEmailUpdateReset}\n              loadUserProfile={loadUserProfile}\n            />\n          )}\n          <Stack>\n            <DetailWrapper>\n              <Pivot\n                selectedKey={selectedTab}\n                onLinkClick={(item: PivotItem | undefined): void => {\n                  setSelectedTab((item?.props.itemKey as ProfileTabs) || ProfileTabs.Profile);\n                }}\n              >\n                <PivotItem headerText=\"Profile\" itemKey={ProfileTabs.Profile}>\n                  <MostValuableProfessionalProfile />\n                </PivotItem>\n                <PivotItem\n                  headerText=\"Program Information\"\n                  itemKey={ProfileTabs.ProgramInformation}\n                >\n                  <MostValuableProfessionalProgramProfile userProfileId={partialProfileInfo?.id} />\n                </PivotItem>\n                {canViewBenefits && (\n                  <PivotItem headerText=\"Benefits\" itemKey={ProfileTabs.Benefits}>\n                    <MostValuableProfessionalBenefitDetails />\n                  </PivotItem>\n                )}\n                {canViewDistributionLists && (\n                  <PivotItem\n                    headerText=\"Distribution Lists\"\n                    itemKey={ProfileTabs.DistributionLists}\n                  >\n                    <MostValuableProfessionalDistributionLists />\n                  </PivotItem>\n                )}\n                <PivotItem headerText=\"Comments\" itemKey={ProfileTabs.Comments}>\n                  <MostValuableProfessionalComments userProfileId={partialProfileInfo?.id ?? 0} />\n                </PivotItem>\n              </Pivot>\n            </DetailWrapper>\n          </Stack>\n        </Stack>\n      )}\n    </Stack>\n  );\n};\n\nexport default MostValuableProfessionalDetailsContainer;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport compact from \"lodash/compact\";\nimport filter from \"lodash/filter\";\nimport map from \"lodash/map\";\nimport some from \"lodash/some\";\n\nimport { FilterValueFieldNames } from \"Constants/FilterFields\";\nimport { OperationStatus } from \"Constants/OperationStatus\";\nimport { AppState } from \"Dataflows/Reducers\";\nimport { IFilterValue } from \"Interfaces/IFilterValue\";\nimport { IMVPUserProfile } from \"Interfaces/MVP/IMVPUserProfile\";\nimport store from \"Store\";\n\n/**\n * Returns loading status of user profile.\n * @param appState\n * @returns {boolean}\n */\nexport const getIsLoadingStatus = (state: AppState): boolean =>\n  state.mvpState.userProfilesSearchState.searchOperationStatus.read === OperationStatus.Pending;\n\n/**\n * Returns the filtered user profiles.\n * @param appState\n * @returns {boolean}\n */\nexport const getFilteredUserProfiles = (state: AppState): IMVPUserProfile[] =>\n  state.mvpState.userProfilesSearchState.filteredUserProfiles;\n\n/**\n * Returns the filtered count of user profiles.\n * @param appState\n * @returns {boolean}\n */\nexport const getFilteredCount = (state: AppState): number =>\n  state.mvpState.userProfilesSearchState.filteredCount;\n\n/**\n * Returns the selected filters.\n * @param appState\n * @returns {IFilterValue[]}\n */\nexport const getSelectedFilterValues = (state: AppState): IFilterValue[] =>\n  state.mvpState.userProfilesSearchState.searchFilterValues;\n\n/**\n * Returns the search text.\n * @param appState\n * @returns {string}\n */\nexport const getSearchTextValue = (state: AppState): string =>\n  state.mvpState.userProfilesSearchState.searchText;\n\n/**\n * Returns the pagination page size.\n * @param appState\n * @returns {number}\n */\nexport const getPaginationPageSize = (state: AppState): number =>\n  state.mvpState.userProfilesSearchState.pageSize;\n\n/**\n * Returns the pagination current page.\n * @param appState\n * @returns {number}\n */\nexport const getPaginationCurrentPage = (state: AppState): number =>\n  state.mvpState.userProfilesSearchState.currentPage;\n\n/**\n * Returns the sort column.\n * @param appState\n * @returns {string}\n */\nexport const getSortColumn = (state: AppState): string | undefined =>\n  state.mvpState.userProfilesSearchState.sortColumn;\n\n/**\n * Returns the sort descending.\n * @param appState\n * @returns {boolean}\n */\nexport const getSortDescending = (state: AppState): boolean | undefined =>\n  state.mvpState.userProfilesSearchState.sortDescending;\n\n/**\n * Selects the technology area filter values by area groups.\n * @param {string[]} areaGroups\n * @returns {IFilterValue[]}\n */\nexport const selectTechnologyAreaFilterValuesByAreaGroups = (\n  areaGroups: string[]\n): IFilterValue[] => {\n  const rootState = store.getState();\n  const techAreas = filter(rootState.technologyAreaDataState.technologyAreaData, (y) =>\n    some(areaGroups, (x) => x === y.technologyFocusAreaGroupName)\n  );\n  return compact(\n    map(techAreas, (item) => {\n      return { fieldName: FilterValueFieldNames.TECHNOLOGY_AREA, value: item.technologyName };\n    })\n  );\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { useEffect, useState, ReactElement } from \"react\";\n\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { useHistory, Redirect } from \"react-router-dom\";\n\nimport Pagination from \"rc-pagination\";\n\nimport {\n  DetailsList,\n  DetailsListLayoutMode,\n  Dropdown,\n  IColumn,\n  IDetailsRowProps,\n  Link,\n  SelectionMode,\n  Spinner,\n  SpinnerSize,\n  TooltipHost,\n} from \"@fluentui/react\";\n\nimport { useAuth } from \"Authentication/AuthProvider\";\nimport ChevronIcon from \"Components/Common/ChevronIcon/ChevronIcon\";\nimport { PaginationRow } from \"Components/Common/Pagination/Pagination.styles\";\nimport { detailListStyles, spinnerStyles } from \"Components/Common/SharedListStyles.styles\";\nimport StatusElement from \"Components/Common/Status/StatusElement\";\nimport { SortingColumns } from \"Constants/AdminConstants\";\nimport {\n  userProfileSearchCurrentPageUpdate,\n  userProfileSearchPageSizeUpdate,\n  userProfileSearchSortingUpdate,\n} from \"Dataflows/MVP/MVPAction\";\nimport {\n  getFilteredCount,\n  getFilteredUserProfiles,\n  getIsLoadingStatus,\n  getPaginationCurrentPage,\n  getPaginationPageSize,\n} from \"Dataflows/MVP/Search/MVPUserProfileSearchSelector\";\nimport { formatDate } from \"Utility/FormatHelper\";\n\nconst headerTooltip = (columnName: string): React.ReactElement => {\n  return (\n    <TooltipHost id={columnName} content={columnName}>\n      <span>{columnName}</span>\n    </TooltipHost>\n  );\n};\n\nconst idLink = (id: number): React.ReactElement => {\n  return <Link>{id}</Link>;\n};\n\nconst formatStatusColumn = (statusKey: string): React.ReactElement => {\n  return <StatusElement statusValue={statusKey} />;\n};\n\n/**\n * The Most Valuable Professional List component\n * @method\n * @returns {ReactElement} The Most Valuable Professional List component\n */\nconst MostValuableProfessionalList = (): ReactElement => {\n  const history = useHistory();\n  const dispatch = useDispatch();\n  const userProfiles = useSelector(getFilteredUserProfiles);\n  const totalCount = useSelector(getFilteredCount);\n  const isLoadingUsers = useSelector(getIsLoadingStatus);\n  const { isUserLoggedIn, loading, hasAnyRoles } = useAuth();\n\n  const [columns, setColumns] = useState<IColumn[]>([\n    {\n      key: \"id\",\n      name: \"ID\",\n      ariaLabel: \"ID\",\n      fieldName: \"id\",\n      minWidth: 30,\n      isResizable: true,\n      onRender: (item, _index, _column): React.ReactElement => idLink(item.id),\n    },\n    {\n      key: \"firstName\",\n      name: \"First Name\",\n      ariaLabel: \"First Name\",\n      fieldName: \"firstName\",\n      minWidth: 80,\n      isResizable: true,\n      onRenderHeader: (props): React.ReactElement => headerTooltip(props?.column?.name || \"\"),\n    },\n    {\n      key: \"lastName\",\n      name: \"Last Name\",\n      ariaLabel: \"Last name\",\n      fieldName: \"lastName\",\n      minWidth: 80,\n      isResizable: true,\n      onRenderHeader: (props): React.ReactElement => headerTooltip(props?.column?.name || \"\"),\n    },\n    {\n      key: \"technologyCategory1\",\n      name: \"Award Category #1\",\n      ariaLabel: \"Award Category #1\",\n      fieldName: \"technologyCategory1\",\n      minWidth: 100,\n      isResizable: true,\n      onRenderHeader: (props): React.ReactElement => headerTooltip(props?.column?.name || \"\"),\n    },\n    {\n      key: \"technologyArea1\",\n      name: \"Technology Area #1\",\n      ariaLabel: \"Technology Area #1\",\n      fieldName: \"technologyArea1\",\n      minWidth: 100,\n      isResizable: true,\n      onRenderHeader: (props): React.ReactElement => headerTooltip(props?.column?.name || \"\"),\n    },\n    {\n      key: \"technologyCategory2\",\n      name: \"Award Category #2\",\n      ariaLabel: \"Award Category #2\",\n      fieldName: \"technologyCategory2\",\n      minWidth: 100,\n      isResizable: true,\n      onRenderHeader: (props): React.ReactElement => headerTooltip(props?.column?.name || \"\"),\n    },\n    {\n      key: \"technologyArea2\",\n      name: \"Technology Area #2\",\n      ariaLabel: \"Technology Area #2\",\n      fieldName: \"technologyArea2\",\n      minWidth: 100,\n      isResizable: true,\n      onRenderHeader: (props): React.ReactElement => headerTooltip(props?.column?.name || \"\"),\n    },\n    {\n      key: \"ndaStatus\",\n      name: \"NDA Status\",\n      ariaLabel: \"NDA Status\",\n      fieldName: \"ndaStatus\",\n      minWidth: 70,\n      isResizable: true,\n      onRenderHeader: (props): React.ReactElement => headerTooltip(props?.column?.name || \"\"),\n    },\n    {\n      key: \"siteEmailAddress\",\n      name: \"Site Email\",\n      ariaLabel: \"Site Email\",\n      fieldName: \"siteEmailAddress\",\n      minWidth: 100,\n      isResizable: true,\n      onRenderHeader: (props): React.ReactElement => headerTooltip(props?.column?.name || \"\"),\n    },\n    {\n      key: \"country\",\n      name: \"Country\",\n      ariaLabel: \"Country\",\n      fieldName: \"countryRegion\",\n      minWidth: 70,\n      isResizable: true,\n      onRenderHeader: (props): React.ReactElement => headerTooltip(props?.column?.name || \"\"),\n    },\n    {\n      key: \"cpm\",\n      name: \"CPM\",\n      ariaLabel: \"CPM\",\n      fieldName: \"cpmEmailAddress\",\n      minWidth: 50,\n      isResizable: true,\n      onRenderHeader: (props): React.ReactElement => headerTooltip(props?.column?.name || \"\"),\n    },\n    {\n      key: \"awardPeriodStart\",\n      name: \"Award Period Start\",\n      ariaLabel: \"Award Period Start\",\n      fieldName: \"awardPeriodStartDate\",\n      minWidth: 90,\n      isResizable: true,\n      onRenderHeader: (props): React.ReactElement => headerTooltip(props?.column?.name || \"\"),\n      onRender: (item) => formatDate(item.awardPeriodStartDate),\n    },\n    {\n      key: \"awardPeriodEndDate\",\n      name: \"Award Period End\",\n      ariaLabel: \"Award Period End\",\n      fieldName: \"awardPeriodEndDate\",\n      minWidth: 90,\n      isResizable: true,\n      onRenderHeader: (props): React.ReactElement => headerTooltip(props?.column?.name || \"\"),\n      onRender: (item) => formatDate(item.awardPeriodEndDate),\n    },\n    {\n      key: \"applicationProfileStatus\",\n      name: \"Application Status\",\n      ariaLabel: \"Application status\",\n      fieldName: \"applicationStatus\",\n      minWidth: 70,\n      isResizable: true,\n      onRenderHeader: (props): React.ReactElement => headerTooltip(props?.column?.name || \"\"),\n      onRender: (item: any) => formatStatusColumn(item.applicationStatus),\n    },\n    {\n      key: \"programStatus\",\n      name: \"Program Status\",\n      ariaLabel: \"Program status\",\n      fieldName: \"programProfileStatus\",\n      minWidth: 70,\n      isResizable: true,\n      onRenderHeader: (props): React.ReactElement => headerTooltip(props?.column?.name || \"\"),\n      onRender: (item: any) => formatStatusColumn(item.programProfileStatus),\n    },\n  ]);\n\n  const pageSize: number = useSelector(getPaginationPageSize);\n  const currentPage: number = useSelector(getPaginationCurrentPage);\n\n  const onUserProfileSelected = (userProfileId: number): void => {\n    history.push(`/mvp/details/${userProfileId}`);\n  };\n\n  const onSortingUpdate = (sortColumn?: string, sortDescending?: boolean): void => {\n    dispatch(userProfileSearchSortingUpdate(sortColumn, sortDescending));\n  };\n\n  const onColumnClickHandler = (ev: React.MouseEvent<HTMLElement>, column: IColumn): void => {\n    columns.forEach((col: IColumn) => {\n      if (col.key == column.key) {\n        const isSortedDescending = !col.isSortedDescending;\n        col.isSortedDescending = isSortedDescending;\n        col.isSorted = true;\n        onSortingUpdate(col.fieldName, isSortedDescending);\n      } else {\n        col.isSorted = false;\n        col.isSortedDescending = true;\n      }\n    });\n  };\n\n  useEffect(() => {\n    const newColumns: IColumn[] = [];\n    const sortingColumns = [\n      SortingColumns.FirstName,\n      SortingColumns.LastName,\n      \"ndaStatus\",\n      SortingColumns.Country,\n      \"awardPeriodStartDate\",\n      \"awardPeriodEndDate\",\n    ];\n    columns.forEach((col) => {\n      if (sortingColumns.filter((c) => c === col.fieldName).length > 0) {\n        col.onColumnClick = onColumnClickHandler;\n      }\n      newColumns.push(col);\n    });\n    setColumns(newColumns);\n  }, []);\n\n  if (isUserLoggedIn && !hasAnyRoles && !loading) {\n    return <Redirect to=\"/unauthorized\" />;\n  }\n\n  const onRenderRow = (props?: IDetailsRowProps, defaultRender?: any): React.ReactElement => {\n    const profileId = props?.item.id;\n    return defaultRender({\n      ...props,\n      onClick: () => onUserProfileSelected(profileId),\n    });\n  };\n\n  if (isLoadingUsers) {\n    return <Spinner size={SpinnerSize.large} styles={spinnerStyles} />;\n  }\n\n  return (\n    <>\n      <DetailsList\n        items={userProfiles}\n        columns={columns}\n        selectionMode={SelectionMode.none}\n        layoutMode={DetailsListLayoutMode.fixedColumns}\n        isHeaderVisible={true}\n        styles={detailListStyles}\n        onRenderRow={onRenderRow}\n        enterModalSelectionOnTouch={true}\n      />\n      <PaginationRow>\n        <Pagination\n          total={totalCount}\n          onChange={(page): void => {\n            dispatch(userProfileSearchCurrentPageUpdate(page));\n          }}\n          showTitle={false}\n          current={currentPage}\n          prevIcon={ChevronIcon(\"ChevronLeft\")}\n          nextIcon={ChevronIcon(\"ChevronRight\")}\n          pageSize={pageSize}\n          showSizeChanger\n        />\n        <Dropdown\n          options={[\n            { key: 16, text: \"Show 16 results\" },\n            { key: 32, text: \"Show 32 results\" },\n            { key: 48, text: \"Show 48 results\" },\n          ]}\n          onChange={(_e, op): void => {\n            dispatch(userProfileSearchPageSizeUpdate(Number(op?.key)));\n          }}\n          selectedKey={pageSize}\n          className=\"pagination-dropdown\"\n          title=\"Page Size Dropdown\"\n        />\n      </PaginationRow>\n    </>\n  );\n};\n\nexport default MostValuableProfessionalList;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { useEffect, useState, ReactElement } from \"react\";\n\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { Redirect } from \"react-router-dom\";\n\nimport map from \"lodash/map\";\n\nimport { getTheme } from \"@fluentui/react\";\nimport { PrimaryButton } from \"@fluentui/react/lib/Button\";\nimport { SearchBox } from \"@fluentui/react/lib/SearchBox\";\nimport { Stack, StackItem } from \"@fluentui/react/lib/Stack\";\nimport { Text } from \"@fluentui/react/lib/Text\";\n\nimport { useAuth } from \"Authentication/AuthProvider\";\nimport ListCounts from \"Components/Common/ListCounts/ListCounts\";\nimport MostValuableProfessionalList from \"Components/MostValuableProfessionalList/MostValuableProfessionalList\";\nimport {\n  defaultListingPageSize,\n  defaultMvpFilterValues,\n  mvpSidebarFilterFields,\n} from \"Constants/ProfileConstants\";\nimport { BrandLabel } from \"Constants/SiteConstants\";\nimport { TenantTypesEnum } from \"Constants/TenantTypes\";\nimport {\n  buttonStackTokens,\n  containerStackStyles,\n  filterButtonStyles,\n  listStackStyles,\n  searchBoxStyles,\n  tableStackStyles,\n  RDFlexRow,\n  RDPaddedFlexRow,\n  RDTextStyles,\n} from \"Containers/Common/CommonContainer.styles\";\nimport SideBarContainer from \"Containers/SideBarContainer/SideBarContainer\";\nimport { getClRegions } from \"Dataflows/ClRegion/ClRegionAction\";\nimport { loadCommonData } from \"Dataflows/CommonData/CommonDataAction\";\nimport { getIndustryFocus } from \"Dataflows/IndustryFocus/IndustryFocusAction\";\nimport {\n  searchUserProfiles,\n  userProfileFilterValueReset,\n  userProfileSearchFilterValuesBulkRemove,\n  userProfileSearchFilterValueAdd,\n  userProfileSearchFilterValueRemove,\n  userProfileSearchFilterValueStateProvinceRemove,\n  userProfileSearchFilterValueUpdate,\n  MVPActionTypes,\n} from \"Dataflows/MVP/MVPAction\";\nimport {\n  getFilteredCount,\n  getIsLoadingStatus,\n  getPaginationCurrentPage,\n  getPaginationPageSize,\n  getSearchTextValue,\n  getSelectedFilterValues,\n  getSortColumn,\n  getSortDescending,\n  selectTechnologyAreaFilterValuesByAreaGroups,\n} from \"Dataflows/MVP/Search/MVPUserProfileSearchSelector\";\nimport { getTechnicalExpertise } from \"Dataflows/TechnicalExpertise/TechnicalExpertiseAction\";\nimport { getTechnologyAreas } from \"Dataflows/TechnologyArea/TechnologyAreaAction\";\nimport { IFilterValue } from \"Interfaces/IFilterValue\";\n\n/**\n * The Most Valuable Professional Search Container component\n * @method\n * @returns {ReactElement} The Most Valuable Professional Search Container component\n */\nconst MostValuableProfessionalSearchContainer = (): ReactElement => {\n  const { isUserLoggedIn, loading, hasAnyRoles } = useAuth();\n  if (isUserLoggedIn && !hasAnyRoles && !loading) {\n    return <Redirect to=\"/unauthorized\" />;\n  }\n\n  const dispatch = useDispatch();\n  const theme = getTheme();\n  const selectedFilterValues = useSelector(getSelectedFilterValues);\n  const pageSize: number = useSelector(getPaginationPageSize);\n  const currentPage: number = useSelector(getPaginationCurrentPage);\n  const sortColumn = useSelector(getSortColumn);\n  const sortDescending = useSelector(getSortDescending);\n  const totalCount = useSelector(getFilteredCount);\n  const isUserProfilesLoading = useSelector(getIsLoadingStatus);\n  const [searchText, setSearchText] = useState(useSelector(getSearchTextValue));\n\n  const handleSearch = (\n    searchValue: string,\n    selectedUserProfilesFilterValues: IFilterValue[],\n    page: number,\n    pageSize: number,\n    sortColumn?: string,\n    sortDescending?: boolean\n  ): void => {\n    dispatch(\n      searchUserProfiles(\n        searchValue,\n        selectedUserProfilesFilterValues,\n        page,\n        pageSize,\n        sortColumn,\n        sortDescending\n      )\n    );\n  };\n\n  /**\n   * Call to reset filter values.\n   * @method\n   */\n  const resetFilterValues = (): void => {\n    dispatch(userProfileFilterValueReset());\n\n    setSearchText(\"\");\n    handleSearch(\"\", defaultMvpFilterValues, 1, defaultListingPageSize);\n  };\n\n  useEffect(() => {\n    dispatch(getTechnologyAreas(TenantTypesEnum.MVP));\n    dispatch(getClRegions());\n    dispatch(getIndustryFocus());\n    dispatch(getTechnicalExpertise());\n    dispatch(loadCommonData());\n  }, []);\n\n  useEffect(() => {\n    handleSearch(\n      searchText,\n      selectedFilterValues,\n      currentPage,\n      pageSize,\n      sortColumn,\n      sortDescending\n    );\n  }, [currentPage, pageSize, sortColumn, sortDescending]);\n\n  const [techAreaGroupsRemoved, setTechAreaGroupsRemoved] = useState([\"\"]);\n\n  const addFilterValue = (filter: IFilterValue): MVPActionTypes => {\n    setTechAreaGroupsRemoved([\"\"]);\n    return dispatch(userProfileSearchFilterValueAdd(filter));\n  };\n\n  const removeUserProfilesFilterValue = (filter: IFilterValue): MVPActionTypes =>\n    dispatch(userProfileSearchFilterValueRemove(filter));\n\n  const removeMultipleUserProfilesFilterValues = (filters: IFilterValue[]): MVPActionTypes =>\n    dispatch(userProfileSearchFilterValuesBulkRemove(filters));\n\n  const updateUserProfilesFilterValue = (filter: IFilterValue): MVPActionTypes =>\n    dispatch(userProfileSearchFilterValueUpdate(filter));\n\n  const removeUserProfilesProvinceFilterValue = (): MVPActionTypes =>\n    dispatch(userProfileSearchFilterValueStateProvinceRemove());\n\n  const onTechAreaGroupFilterValuesRemovedOrAdded = (filtersNotSelected: IFilterValue[]): void =>\n    setTechAreaGroupsRemoved(map(filtersNotSelected, (f) => f.value));\n\n  const techAreasByAreaGroup = useSelector(() =>\n    selectTechnologyAreaFilterValuesByAreaGroups(techAreaGroupsRemoved)\n  );\n\n  const techAreasToRemove = techAreasByAreaGroup.filter((fl) =>\n    selectedFilterValues.some((sfv) => sfv.value === fl.value)\n  );\n\n  useEffect(() => {\n    if (techAreasToRemove.length > 0) {\n      removeMultipleUserProfilesFilterValues(techAreasToRemove);\n    }\n  }, [techAreasToRemove]);\n\n  return (\n    <Stack horizontal styles={containerStackStyles}>\n      <StackItem disableShrink>\n        <SideBarContainer\n          addFilterValue={addFilterValue}\n          removeFilterValue={removeUserProfilesFilterValue}\n          updateFilterValue={updateUserProfilesFilterValue}\n          removeFilterProvinceValue={removeUserProfilesProvinceFilterValue}\n          onTechAreaGroupFilterValueChanged={onTechAreaGroupFilterValuesRemovedOrAdded}\n          selectedFilterValues={selectedFilterValues}\n          filterFields={mvpSidebarFilterFields}\n        />\n        <Stack horizontal tokens={buttonStackTokens}>\n          <PrimaryButton\n            styles={filterButtonStyles()}\n            text=\"Apply\"\n            onClick={(): void => handleSearch(searchText, selectedFilterValues, 1, pageSize)}\n          />\n          <PrimaryButton styles={filterButtonStyles()} text=\"Reset\" onClick={resetFilterValues} />\n        </Stack>\n      </StackItem>\n      <Stack.Item grow styles={listStackStyles()}>\n        <Stack styles={tableStackStyles}>\n          <RDPaddedFlexRow>\n            <Text styles={RDTextStyles}>{BrandLabel.MVP}</Text>\n            <RDFlexRow>\n              <ListCounts total={totalCount} loading={isUserProfilesLoading} />\n            </RDFlexRow>\n          </RDPaddedFlexRow>\n          <SearchBox\n            placeholder=\"Search most valuable professionals\"\n            value={searchText}\n            onSearch={(searchValue: string): void =>\n              handleSearch(searchValue, selectedFilterValues, 1, pageSize)\n            }\n            onChange={(event?: React.ChangeEvent<HTMLInputElement>, newValue?: string): void =>\n              setSearchText(newValue || \"\")\n            }\n            onClear={() => handleSearch(\"\", selectedFilterValues, 1, pageSize)}\n            styles={searchBoxStyles}\n          />\n          <MostValuableProfessionalList />\n        </Stack>\n      </Stack.Item>\n    </Stack>\n  );\n};\n\nexport default MostValuableProfessionalSearchContainer;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { Navbar, NavbarBrand, NavLink } from \"react-bootstrap\";\n\nimport { getTheme } from \"office-ui-fabric-react\";\nimport styled from \"styled-components\";\n\nconst theme = getTheme();\n\nexport const AdminNavbar = styled(Navbar)`\n  background-color: #0066ff;\n  padding: 1px;\n  & .mscom-divider {\n    padding-right: 15px;\n  }\n  & .mscom-siteLogo {\n    padding-left: 10px;\n  }\n`;\n\nexport const AdminNavLink = styled(NavLink)`\n  color: ${theme.palette.white} !important;\n`;\n\nexport const AdminNavBrand = styled(NavbarBrand)`\n  color: ${theme.palette.white} !important;\n`;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { ReactElement } from \"react\";\n\nimport { Nav, Navbar } from \"react-bootstrap\";\nimport { Link } from \"react-router-dom\";\n\nimport { INavigationProps } from \"./INavigationProps\";\nimport { AdminNavbar, AdminNavBrand, AdminNavLink } from \"./Navigation.styles\";\n\nconst Navigation = ({\n  isUserAuthenticated,\n  onSignInClicked,\n  onSignOutClicked,\n}: INavigationProps): ReactElement => {\n  const renderSignIn = (): ReactElement => {\n    if (isUserAuthenticated) {\n      return (\n        <AdminNavLink key=\"signout\" id=\"sign-out\" onClick={onSignOutClicked}>\n          Sign Out\n        </AdminNavLink>\n      );\n    } else {\n      return (\n        <AdminNavLink key=\"signin\" id=\"sign-in\" onClick={onSignInClicked}>\n          Sign In\n        </AdminNavLink>\n      );\n    }\n  };\n\n  return (\n    <AdminNavbar expand=\"lg\">\n      <Navbar.Brand href=\"https://www.microsoft.com/\">\n        <img\n          src=\"/microsoft-logo.png\"\n          alt=\"Microsoft - Official Home Page\"\n          title=\"Microsoft - Official Home Page\"\n          className=\"mscom-siteLogo\"\n        />\n      </Navbar.Brand>\n      <AdminNavBrand to=\"\" as={Link}>\n        <span className=\"mscom-divider\">&#124;</span>\n        <span>MVP Communities Admin Center</span>\n      </AdminNavBrand>\n      <Navbar.Toggle aria-controls=\"responsive-navbar-nav\" />\n      <Navbar.Collapse id=\"responsive-navbar-nav\">\n        <Nav className=\"ml-auto\">\n          <Nav.Item>{renderSignIn()}</Nav.Item>\n        </Nav>\n      </Navbar.Collapse>\n    </AdminNavbar>\n  );\n};\n\nexport default Navigation;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { ReactElement } from \"react\";\n\nimport { useAuth } from \"Authentication/AuthProvider\";\n\nimport Navigation from \"../../Components/Navigation/Navigation\";\n\nconst NavigationContainer = (): ReactElement => {\n  const { isUserLoggedIn, onSignIn, onSignOut } = useAuth();\n\n  return (\n    <Navigation\n      isUserAuthenticated={isUserLoggedIn}\n      onSignInClicked={onSignIn}\n      onSignOutClicked={onSignOut}\n    />\n  );\n};\n\nexport default NavigationContainer;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React from \"react\";\n\nimport { DetailWrapper } from \"Containers/Common/CommonContainer.styles\";\n\n/**\n * Page not found Container.\n * Container for page not found.\n * @returns {React.ReactElement} rendered container\n */\nconst PageNotFoundContainer = (): React.ReactElement => {\n  return <DetailWrapper>Page not found</DetailWrapper>;\n};\n\nexport default PageNotFoundContainer;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { ReactElement } from \"react\";\n\nimport { Redirect } from \"react-router-dom\";\n\nimport { Text } from \"@fluentui/react\";\n\nimport { useAuth } from \"Authentication/AuthProvider\";\nimport { DetailWrapper } from \"Containers/Common/CommonContainer.styles\";\n\nconst RegionalDirectorsEventContainer = (): ReactElement => {\n  const { isUserLoggedIn, loading, hasAnyRoles } = useAuth();\n  if (isUserLoggedIn && !hasAnyRoles && !loading) {\n    return <Redirect to=\"/unauthorized\" />;\n  }\n\n  return (\n    <DetailWrapper>\n      <div>\n        <Text>Regional Directors Event Container</Text>\n      </div>\n      <div>\n        <Text>Coming Soon</Text>\n      </div>\n    </DetailWrapper>\n  );\n};\n\nexport default RegionalDirectorsEventContainer;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { ReactElement } from \"react\";\n\nimport { Redirect } from \"react-router-dom\";\n\nimport { Text } from \"@fluentui/react\";\n\nimport { useAuth } from \"Authentication/AuthProvider\";\nimport { DetailWrapper } from \"Containers/Common/CommonContainer.styles\";\n\nconst RdHomeContainer = (): ReactElement => {\n  const { isUserLoggedIn, loading, hasAnyRoles } = useAuth();\n  if (isUserLoggedIn && !hasAnyRoles && !loading) {\n    return <Redirect to=\"/unauthorized\" />;\n  }\n  return (\n    <DetailWrapper>\n      <div>\n        <Text>Regional Directors Admin Landing</Text>\n      </div>\n      <div>\n        <Text>Please choose a sub menu</Text>\n      </div>\n    </DetailWrapper>\n  );\n};\n\nexport default RdHomeContainer;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React from \"react\";\n\nimport { useSelector } from \"react-redux\";\n\nimport * as RDUserProfilesActions from \"Dataflows/RD/UserProfile/RDUserProfileAction\";\nimport * as RDUserProfileSelector from \"Dataflows/RD/UserProfile/RDUserProfileSelector\";\n\nimport { useAuth } from \"Authentication/AuthProvider\";\nimport ProfileBenefitDetails from \"Components/ProfileBenefitDetails/ProfileBenefitDetails\";\nimport { OperationStatus } from \"Constants/OperationStatus\";\nimport { RolesEnum } from \"Constants/RolesPermissionsConstants\";\nimport { TenantTypesEnum } from \"Constants/TenantTypes\";\n\nconst RegionalDirectorBenefitDetails = (): React.ReactElement => {\n  const profileBenefits = useSelector(RDUserProfileSelector.getProfileBenefits);\n  const profileBenefitsErrorMessage = useSelector(\n    RDUserProfileSelector.getProfileBenefitsErrorMessage\n  );\n  const profileBenefitsStatus = useSelector(RDUserProfileSelector.getProfileBenefitsStatus);\n  const isClaimingBenefitStatus = useSelector(RDUserProfileSelector.getIsClaimingBenefitStatus);\n  const claimingBenefitError = useSelector(RDUserProfileSelector.getIsClaimingBenefitsError);\n\n  const m365BenefitDetail = useSelector(RDUserProfileSelector.m365GetBenefitDetail);\n  const m365FetchErrorMessage = useSelector(RDUserProfileSelector.m365FetchErrorMessage);\n  const m365UpdateErrorMessage = useSelector(RDUserProfileSelector.m365UpdateErrorMessage);\n  const m365FetchStatus = useSelector(RDUserProfileSelector.m365FetchStatus);\n  const teamsFetchStatus = useSelector(RDUserProfileSelector.teamsFetchStatus);\n  const m365UpdateStatus = useSelector(RDUserProfileSelector.m365UpdateStatus);\n\n  const teamsBenefitDetail = useSelector(RDUserProfileSelector.teamsGetBenefitDetail);\n  const teamsFetchErrorMessage = useSelector(RDUserProfileSelector.teamsFetchErrorMessage);\n\n  const ms365BenefitDetail = useSelector(RDUserProfileSelector.ms365GetBenefitDetail);\n  const ms365FetchErrorMessage = useSelector(RDUserProfileSelector.ms365FetchErrorMessage);\n  const ms365UpdateErrorMessage = useSelector(RDUserProfileSelector.ms365UpdateErrorMessage);\n  const ms365FetchStatus = useSelector(RDUserProfileSelector.ms365FetchStatus);\n  const ms365UpdateStatus = useSelector(RDUserProfileSelector.ms365UpdateStatus);\n\n  const azureBenefitExtendCreditError = useSelector(\n    RDUserProfileSelector.azureBenefitUpdateErrorMessage\n  );\n  const azureBenefitExtendCreditStatus = useSelector(\n    RDUserProfileSelector.azureBenefitUpdateStatus\n  );\n\n  const addAzureBenefitError = useSelector(RDUserProfileSelector.getAddAzureBenefitErrorMessage);\n\n  const { hasRole } = useAuth();\n\n  const canManageBenefits =\n    hasRole(RolesEnum.RD_BENEFITS_MANAGER) || hasRole(RolesEnum.RD_PROGRAM_OWNER);\n\n  return (\n    <ProfileBenefitDetails\n      profileBenefits={profileBenefits}\n      profileBenefitsErrorMessage={profileBenefitsErrorMessage}\n      profileBenefitsStatus={profileBenefitsStatus}\n      isClaimingBenefitStatus={isClaimingBenefitStatus}\n      claimingBenefitError={claimingBenefitError}\n      canManageBenefits={canManageBenefits}\n      getProfileBenefits={RDUserProfilesActions.getProfileBenefits}\n      claimBenefitReset={RDUserProfilesActions.claimRdBenefitReset}\n      claimBenefit={RDUserProfilesActions.claimRdBenefit}\n      tenantName={TenantTypesEnum.RD}\n      m365GetBenefitDetail={RDUserProfilesActions.fetchM365BenefitDetail}\n      m365UpdateBenefitDetail={RDUserProfilesActions.updateM365BenefitDetail}\n      m365BenefitDetailReset={RDUserProfilesActions.m365BenefitDetailReset}\n      m365FetchErrorMessage={m365FetchErrorMessage}\n      m365UpdateErrorMessage={m365UpdateErrorMessage}\n      m365FetchStatus={m365FetchStatus as OperationStatus}\n      m365UpdateStatus={m365UpdateStatus as OperationStatus}\n      m365BenefitDetail={m365BenefitDetail}\n      ms365GetBenefitDetail={RDUserProfilesActions.fetchMS365BenefitDetail}\n      ms365UpdateBenefitDetail={RDUserProfilesActions.updateMS365BenefitDetail}\n      ms365BenefitDetailReset={RDUserProfilesActions.ms365BenefitDetailReset}\n      ms365FetchErrorMessage={ms365FetchErrorMessage}\n      ms365UpdateErrorMessage={ms365UpdateErrorMessage}\n      ms365FetchStatus={ms365FetchStatus as OperationStatus}\n      ms365UpdateStatus={ms365UpdateStatus as OperationStatus}\n      ms365BenefitDetail={ms365BenefitDetail}\n      teamsGetBenefitDetail={RDUserProfilesActions.fetchTeamsBenefitDetail}\n      teamsFetchErrorMessage={teamsFetchErrorMessage}\n      teamsFetchStatus={teamsFetchStatus as OperationStatus}\n      teamsBenefitDetail={teamsBenefitDetail}\n      extendAzureBenefitCredit={RDUserProfilesActions.extendAzureBenefitCredit}\n      extendAzureBenefitCreditReset={RDUserProfilesActions.extendAzureBenefitCreditReset}\n      extendAzureBenefitCreditUpdateStatus={azureBenefitExtendCreditStatus as OperationStatus}\n      extendAzureBenefitCreditErrorMessage={azureBenefitExtendCreditError}\n      addAzureBenefits={RDUserProfilesActions.addAzureBenefitDetail}\n      addAzureBenefitReset={RDUserProfilesActions.addAzureBenefitReset}\n      addAzureBenefitsUpdateStatus={azureBenefitExtendCreditStatus as OperationStatus}\n      addAzureBenefitsErrorMessage={addAzureBenefitError}\n    />\n  );\n};\n\nexport default RegionalDirectorBenefitDetails;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\nimport styled from \"styled-components\";\n\nexport const CommentContainer = styled.div`\n  margin: 1rem 0;\n  padding: 10px;\n`;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { useEffect, ReactElement } from \"react\";\n\nimport { useDispatch } from \"react-redux\";\nimport { Redirect } from \"react-router\";\n\nimport * as UserProfilesActions from \"Dataflows/RD/UserProfile/RDUserProfileAction\";\n\nimport { useAuth } from \"Authentication/AuthProvider\";\nimport { AddComment } from \"Components/AddComment/AddComment\";\nimport { OperationStatus } from \"Constants/OperationStatus\";\nimport { PermissionsEnum } from \"Constants/RolesPermissionsConstants\";\nimport { TenantTypesEnum } from \"Constants/TenantTypes\";\n\nimport { CommentsHistory } from \"../CommentsHistory/CommentsHistory\";\nimport { IRegionalDirectorCommentsProps } from \"../RegionalDirectorComments/IRegionalDirectorCommentsProps\";\nimport { CommentContainer } from \"./RegionalDirectorComments.styles\";\n\n/**\n * The regional director comments tab.\n * @param {IRegionalDirectorCommentsProps} props The props.\n */\nexport const RegionalDirectorComments = (props: IRegionalDirectorCommentsProps): ReactElement => {\n  const { isUserLoggedIn, loading, hasAnyRoles, account, hasPermission } = useAuth();\n  const dispatch = useDispatch();\n  const {\n    userProfileId,\n    userProfileComments,\n    fetchUserProfileComments,\n    errorMessage,\n    isLoading,\n    onAddCommentClicked,\n    addCommentStatus,\n  } = props;\n\n  useEffect(() => {\n    if (\n      addCommentStatus === OperationStatus.Succeeded ||\n      addCommentStatus === OperationStatus.Idle\n    ) {\n      fetchUserProfileComments(userProfileId);\n    }\n  }, [addCommentStatus]);\n\n  useEffect(() => {\n    return () => {\n      dispatch(UserProfilesActions.resetAddUserProfileCommentValues());\n    };\n  }, []);\n\n  if (isUserLoggedIn && !hasAnyRoles && !loading) {\n    return <Redirect to=\"/unauthorized\" />;\n  }\n\n  const canAddComments = hasPermission(TenantTypesEnum.RD, PermissionsEnum.RD_UPDATE_USERS);\n\n  return (\n    <CommentContainer>\n      {canAddComments && (\n        <AddComment onAddCommentClicked={onAddCommentClicked} addCommentStatus={addCommentStatus} />\n      )}\n      <CommentsHistory\n        userProfileComments={userProfileComments}\n        errorMessage={errorMessage}\n        isLoading={isLoading}\n      />\n    </CommentContainer>\n  );\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport {\n  getTheme,\n  FontSizes,\n  FontWeights,\n  ICommandBarStyles,\n  ILabelStyles,\n  IStackItemStyles,\n  IStackStyles,\n  IStackTokens,\n  ITextStyles,\n} from \"@fluentui/react\";\n\nconst theme = getTheme();\n\n/**\n * Token for the body stack\n */\nexport const bodyContainerStackTokens = (): IStackTokens => {\n  return { childrenGap: \"1rem\" };\n};\n\n/**\n * Styling for the body row stack\n */\nexport const bodyRowStackStyles = (): IStackStyles => {\n  return { root: { display: \"flex\", justifyContent: \"space-between\" } };\n};\n\n/**\n * Styling for the body column stack\n */\nexport const bodyColumnStackItemStyles = (): IStackItemStyles => {\n  return { root: { width: \"50%\" } };\n};\n\n/**\n * Styling for the command bar\n */\nexport const commandBarStyles: ICommandBarStyles = {\n  root: {\n    borderRadius: \"8px\",\n    boxShadow: \" 0px 1px 4px rgba(0, 0, 0, 0.2)\",\n    margin: \"1rem 0.5rem 0\",\n    padding: \"0.75rem\",\n    selectors: {\n      [\"button\"]: {\n        marginRight: \"36px\",\n      },\n      [\".ms-Button-label\"]: {\n        fontSize: \"14px\",\n        fontWeight: FontWeights.semibold,\n      },\n    },\n  },\n};\n\n/**\n * Styling for the header text\n */\nexport const subHeaderTextStyles = (): ITextStyles => {\n  return {\n    root: {\n      fontWeight: 600,\n      fontSize: FontSizes.size18,\n      padding: \"1rem 1.5rem\",\n    },\n  };\n};\n\n/**\n * Styling for the label\n */\nexport const labelStyles = (): ILabelStyles => {\n  return { root: { fontWeight: 600 } };\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { useEffect, useState, ReactElement } from \"react\";\n\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { Redirect } from \"react-router-dom\";\n\nimport { find } from \"lodash\";\n\nimport { CommandBar, Label, Stack, StackItem, Text } from \"@fluentui/react\";\n\nimport { useAuth } from \"Authentication/AuthProvider\";\nimport {\n  bodyContainerStackStyles,\n  headerStackStyles,\n  headerTextStyles,\n  ContainerWrapper,\n} from \"Components/Common/SharedTableStyles.styles\";\nimport { SetProfileToPrivateSidePanel } from \"Components/SetProfileToPrivateSidePanel/SetProfileToPrivateSidePanel\";\nimport { OperationStatus } from \"Constants/OperationStatus\";\nimport { namesLocalized } from \"Constants/ProfileConstants\";\nimport { RolesEnum } from \"Constants/RolesPermissionsConstants\";\nimport { userProfileIsPrivateUpdate } from \"Dataflows/RD/UserProfile/RDUserProfileAction\";\nimport {\n  getSelectedUserProfile,\n  getUserProfileUpdateIsPrivateError,\n  getUserProfileUpdateIsPrivateOperationStatus,\n} from \"Dataflows/RD/UserProfile/RDUserProfileSelector\";\nimport { formatDate } from \"Utility/FormatHelper\";\n\nimport {\n  bodyColumnStackItemStyles,\n  bodyContainerStackTokens,\n  bodyRowStackStyles,\n  commandBarStyles,\n  labelStyles,\n  subHeaderTextStyles,\n} from \"./RegionalDirectorProfile.styles\";\n\n/**\n * The Most Valuable Professional Profile component\n * @method\n * @returns {ReactElement} The Most Valuable Professional Profile Details component\n */\nconst RegionalDirectorProfile = (): ReactElement => {\n  const { isUserLoggedIn, loading, hasAnyRoles, hasRole } = useAuth();\n  const dispatch = useDispatch();\n  const profileInfo = useSelector(getSelectedUserProfile);\n  const [isSetToPrivatePanelOpen, setIsSetToPrivatePanelOpen] = useState(false);\n  const userProfileIsPrivateUpdateError = useSelector(getUserProfileUpdateIsPrivateError);\n  const userProfileIsPrivateUpdateStatus = useSelector(\n    getUserProfileUpdateIsPrivateOperationStatus\n  );\n\n  if (isUserLoggedIn && !hasAnyRoles && !loading) {\n    return <Redirect to=\"/unauthorized\" />;\n  }\n\n  useEffect(() => {\n    if (userProfileIsPrivateUpdateStatus === OperationStatus.Succeeded) {\n      setIsSetToPrivatePanelOpen(false);\n    }\n  }, [userProfileIsPrivateUpdateStatus]);\n\n  const handleSetProfileToPrivateTogglePanel = () => {\n    if (profileInfo && profileInfo.id) {\n      setIsSetToPrivatePanelOpen(!isSetToPrivatePanelOpen);\n    }\n  };\n\n  const handleSetProfileToPrivateSave = () => {\n    if (profileInfo && profileInfo.id) {\n      dispatch(userProfileIsPrivateUpdate(!profileInfo.isPrivate, profileInfo.id));\n    }\n  };\n\n  useEffect(() => {\n    if (userProfileIsPrivateUpdateStatus === OperationStatus.Succeeded) {\n      setIsSetToPrivatePanelOpen(false);\n    }\n  }, [userProfileIsPrivateUpdateStatus]);\n\n  const canEditUser = hasRole(RolesEnum.RD_PROGRAM_OWNER);\n\n  const commandBarItems = [\n    {\n      key: \"setProfileToPrivate\",\n      text: `Set Profile to ${profileInfo?.isPrivate ? \"Public\" : \"Private\"}`,\n      iconProps: { iconName: `${profileInfo?.isPrivate ? \"UserFollowed\" : \"UserRemove\"}` },\n      onClick: (): void => {\n        handleSetProfileToPrivateTogglePanel();\n      },\n    },\n  ];\n\n  return (\n    <>\n      <Stack tokens={{ childrenGap: \"1.5rem\" }}>\n        {canEditUser && (\n          <CommandBar\n            items={commandBarItems}\n            ariaLabel=\"Edit user actions\"\n            styles={commandBarStyles}\n          />\n        )}\n\n        <ContainerWrapper>\n          <Stack styles={headerStackStyles}>\n            <Text styles={headerTextStyles}>Personal Information</Text>\n          </Stack>\n          <Stack styles={bodyContainerStackStyles} tokens={bodyContainerStackTokens}>\n            <Stack horizontal styles={bodyRowStackStyles}>\n              <StackItem styles={bodyColumnStackItemStyles}>\n                <Label styles={labelStyles}>First Name</Label>\n                <Text>{profileInfo?.firstName}</Text>\n              </StackItem>\n              <StackItem styles={bodyColumnStackItemStyles}>\n                <Label styles={labelStyles}>Last Name</Label>\n                <Text>{profileInfo?.lastName}</Text>\n              </StackItem>\n            </Stack>\n            <Stack horizontal styles={bodyRowStackStyles}>\n              <StackItem styles={bodyColumnStackItemStyles}>\n                <Label styles={labelStyles}>Localized First Name</Label>\n                <Text>{profileInfo?.localizedFirstName}</Text>\n              </StackItem>\n              <StackItem styles={bodyColumnStackItemStyles}>\n                <Label styles={labelStyles}>Localized Last Name</Label>\n                <Text>{profileInfo?.localizedLastName}</Text>\n              </StackItem>\n            </Stack>\n            <Stack horizontal styles={bodyRowStackStyles}>\n              <StackItem styles={bodyColumnStackItemStyles}>\n                <Label styles={labelStyles}>Print Name</Label>\n                <Text>\n                  {find(namesLocalized, (o) => o.key === !!profileInfo?.awardNameLocalized)?.text}\n                </Text>\n              </StackItem>\n              <StackItem styles={bodyColumnStackItemStyles}>\n                <Label styles={labelStyles}>Display Name</Label>\n                <Text>\n                  {find(namesLocalized, (o) => o.key === !!profileInfo?.screenNameLocalized)?.text}\n                </Text>\n              </StackItem>\n            </Stack>\n            <Stack horizontal styles={bodyRowStackStyles}>\n              <StackItem styles={bodyColumnStackItemStyles}>\n                <Label styles={labelStyles}>Title</Label>\n                <Text>{profileInfo?.titleName}</Text>\n              </StackItem>\n              <StackItem styles={bodyColumnStackItemStyles}>\n                <Label styles={labelStyles}>Date of birth</Label>\n                {!!profileInfo?.dateOfBirth ? (\n                  <Text>{formatDate(new Date(profileInfo?.dateOfBirth))}</Text>\n                ) : (\n                  <></>\n                )}\n              </StackItem>\n            </Stack>\n            <Stack horizontal styles={bodyRowStackStyles}>\n              <StackItem styles={bodyColumnStackItemStyles}>\n                <Label styles={labelStyles}>Gender</Label>\n                <Text>{profileInfo?.genderName}</Text>\n              </StackItem>\n              <StackItem styles={bodyColumnStackItemStyles}>\n                <Label styles={labelStyles}>Pronoun</Label>\n                <Text>{profileInfo?.genderPronounPreferenceName}</Text>\n              </StackItem>\n            </Stack>\n            <Stack horizontal styles={bodyRowStackStyles}>\n              <StackItem styles={bodyColumnStackItemStyles}>\n                <Label styles={labelStyles}>Shirt Fit Type</Label>\n                <Text>{profileInfo?.shirtFitType}</Text>\n              </StackItem>\n              <StackItem styles={bodyColumnStackItemStyles}>\n                <Label styles={labelStyles}>Shirt Size</Label>\n                <Text>{profileInfo?.shirtSize}</Text>\n              </StackItem>\n            </Stack>\n            <Stack horizontal styles={bodyRowStackStyles}>\n              <StackItem styles={bodyColumnStackItemStyles}>\n                <Label styles={labelStyles}>Site Email</Label>\n                <Text>{profileInfo?.primaryEmail}</Text>\n              </StackItem>\n              <StackItem styles={bodyColumnStackItemStyles}>\n                <Label styles={labelStyles}>Preferred Email</Label>\n                <Text>{profileInfo?.secondaryEmail}</Text>\n              </StackItem>\n            </Stack>\n            <Stack horizontal styles={bodyRowStackStyles}>\n              <StackItem styles={bodyColumnStackItemStyles}>\n                <Label styles={labelStyles}>Languages</Label>\n                <Text>{profileInfo?.languages?.join(\", \")}</Text>\n              </StackItem>\n            </Stack>\n            <Stack horizontal styles={bodyRowStackStyles}>\n              <StackItem styles={bodyColumnStackItemStyles}>\n                <Label styles={labelStyles}>Current Employer/Organization</Label>\n                <Text>{profileInfo?.currentEmployerName}</Text>\n              </StackItem>\n              <StackItem styles={bodyColumnStackItemStyles}>\n                <Label styles={labelStyles}>Job Title</Label>\n                <Text>{profileInfo?.jobTitle}</Text>\n              </StackItem>\n            </Stack>\n            <Stack horizontal styles={bodyRowStackStyles}>\n              <StackItem styles={bodyColumnStackItemStyles}>\n                <Label styles={labelStyles}>Company Type</Label>\n                <Text>{profileInfo?.companyTypeName}</Text>\n              </StackItem>\n            </Stack>\n            <Stack horizontal styles={bodyRowStackStyles}>\n              <StackItem styles={bodyColumnStackItemStyles}>\n                <Label styles={labelStyles}>Preferred Programming Language</Label>\n                <Text>{profileInfo?.userProfileProgramLanguage?.join(\", \")}</Text>\n              </StackItem>\n              <StackItem styles={bodyColumnStackItemStyles}>\n                <Label styles={labelStyles}>Functional Role</Label>\n                <Text>{profileInfo?.userProfileFunctionalRole?.join(\", \")}</Text>\n              </StackItem>\n            </Stack>\n          </Stack>\n        </ContainerWrapper>\n        <ContainerWrapper>\n          <Stack styles={headerStackStyles}>\n            <Text styles={headerTextStyles}>Biography</Text>\n          </Stack>\n          <Stack styles={bodyContainerStackStyles} tokens={bodyContainerStackTokens}>\n            <Stack horizontal styles={bodyRowStackStyles}>\n              <StackItem styles={bodyColumnStackItemStyles}>\n                <Label styles={labelStyles}>Headline</Label>\n                <Text>{profileInfo?.headline}</Text>\n              </StackItem>\n              <StackItem styles={bodyColumnStackItemStyles}>\n                <Label styles={labelStyles}>Biography</Label>\n                <Text>{profileInfo?.biography}</Text>\n              </StackItem>\n            </Stack>\n          </Stack>\n        </ContainerWrapper>\n        <ContainerWrapper>\n          <Stack styles={headerStackStyles}>\n            <Text styles={headerTextStyles}>Address</Text>\n          </Stack>\n          <Stack>\n            <Text styles={subHeaderTextStyles}>Primary Address</Text>\n          </Stack>\n          <Stack styles={bodyContainerStackStyles} tokens={bodyContainerStackTokens}>\n            <Stack horizontal styles={bodyRowStackStyles}>\n              <StackItem styles={bodyColumnStackItemStyles}>\n                <Label styles={labelStyles}>Country Code</Label>\n                <Text>{profileInfo?.primaryPhoneCountryOrRegionName}</Text>\n              </StackItem>\n              <StackItem styles={bodyColumnStackItemStyles}>\n                <Label styles={labelStyles}>Phone number</Label>\n                <Text>{profileInfo?.primaryPhone}</Text>\n              </StackItem>\n            </Stack>\n            <Stack horizontal styles={bodyRowStackStyles}>\n              <StackItem styles={bodyColumnStackItemStyles}>\n                <Label styles={labelStyles}>Address Line 1</Label>\n                <Text>{profileInfo?.address1}</Text>\n              </StackItem>\n              <StackItem styles={bodyColumnStackItemStyles}>\n                <Label styles={labelStyles}>Address Line 2</Label>\n                <Text>{profileInfo?.address2}</Text>\n              </StackItem>\n            </Stack>\n            <Stack horizontal styles={bodyRowStackStyles}>\n              <StackItem styles={bodyColumnStackItemStyles}>\n                <Label styles={labelStyles}>City</Label>\n                <Text>{profileInfo?.addressCity}</Text>\n              </StackItem>\n              <StackItem styles={bodyColumnStackItemStyles}>\n                <Label styles={labelStyles}>State/Province</Label>\n                <Text>{profileInfo?.addressStateOrProvince}</Text>\n              </StackItem>\n            </Stack>\n            <Stack horizontal styles={bodyRowStackStyles}>\n              <StackItem styles={bodyColumnStackItemStyles}>\n                <Label styles={labelStyles}>Post code</Label>\n                <Text>{profileInfo?.addressPostCode}</Text>\n              </StackItem>\n              <StackItem styles={bodyColumnStackItemStyles}>\n                <Label styles={labelStyles}>Country Region</Label>\n                <Text>{profileInfo?.addressCountryOrRegionName}</Text>\n              </StackItem>\n            </Stack>\n          </Stack>\n          {!profileInfo?.shippingSameAsAddress ? (\n            <>\n              <Stack>\n                <Text styles={subHeaderTextStyles}>Shipping Address</Text>\n              </Stack>\n              <Stack styles={bodyContainerStackStyles} tokens={bodyContainerStackTokens}>\n                <Stack horizontal styles={bodyRowStackStyles}>\n                  <StackItem styles={bodyColumnStackItemStyles}>\n                    <Label styles={labelStyles}>Country Code</Label>\n                    <Text>{profileInfo?.shippingPhoneCountryOrRegionName}</Text>\n                  </StackItem>\n                  <StackItem styles={bodyColumnStackItemStyles}>\n                    <Label styles={labelStyles}>Phone number</Label>\n                    <Text>{profileInfo?.shippingPhoneNumber}</Text>\n                  </StackItem>\n                </Stack>\n                <Stack horizontal styles={bodyRowStackStyles}>\n                  <StackItem styles={bodyColumnStackItemStyles}>\n                    <Label styles={labelStyles}>Address Line 1</Label>\n                    <Text>{profileInfo?.shippingAddress1}</Text>\n                  </StackItem>\n                  <StackItem styles={bodyColumnStackItemStyles}>\n                    <Label styles={labelStyles}>Address Line 2</Label>\n                    <Text>{profileInfo?.shippingAddress2}</Text>\n                  </StackItem>\n                </Stack>\n                <Stack horizontal styles={bodyRowStackStyles}>\n                  <StackItem styles={bodyColumnStackItemStyles}>\n                    <Label styles={labelStyles}>City</Label>\n                    <Text>{profileInfo?.shippingCity}</Text>\n                  </StackItem>\n                  <StackItem styles={bodyColumnStackItemStyles}>\n                    <Label styles={labelStyles}>State/Province</Label>\n                    <Text>{profileInfo?.shippingStateOrProvince}</Text>\n                  </StackItem>\n                </Stack>\n\n                <Stack horizontal styles={bodyRowStackStyles}>\n                  <StackItem styles={bodyColumnStackItemStyles}>\n                    <Label styles={labelStyles}>Post code</Label>\n                    <Text>{profileInfo?.shippingPostCode}</Text>\n                  </StackItem>\n                  <StackItem styles={bodyColumnStackItemStyles}>\n                    <Label styles={labelStyles}>Country Region</Label>\n                    <Text>{profileInfo?.shippingCountryOrRegionName}</Text>\n                  </StackItem>\n                </Stack>\n              </Stack>\n            </>\n          ) : (\n            <></>\n          )}\n        </ContainerWrapper>\n        <ContainerWrapper>\n          <Stack styles={headerStackStyles}>\n            <Text styles={headerTextStyles}>Social Media</Text>\n          </Stack>\n          <Stack styles={bodyContainerStackStyles} tokens={bodyContainerStackTokens}>\n            {profileInfo?.userProfileSocialNetwork &&\n              profileInfo?.userProfileSocialNetwork.map((x) => (\n                <Stack key={x.id} horizontal styles={bodyRowStackStyles}>\n                  <StackItem styles={bodyColumnStackItemStyles}>\n                    <Label styles={labelStyles}>Network</Label>\n                    <Text>{x?.socialNetworkName}</Text>\n                  </StackItem>\n                  <StackItem styles={bodyColumnStackItemStyles}>\n                    <Label styles={labelStyles}>Link/Url</Label>\n                    <Text>{x?.socialNetworkImageLink}</Text>\n                  </StackItem>\n                </Stack>\n              ))}\n          </Stack>\n        </ContainerWrapper>\n      </Stack>\n\n      <SetProfileToPrivateSidePanel\n        userProfileId={profileInfo.id}\n        isPrivate={profileInfo.isPrivate ?? false}\n        isOpen={isSetToPrivatePanelOpen}\n        updateStatus={userProfileIsPrivateUpdateStatus}\n        updateError={userProfileIsPrivateUpdateError}\n        onDismiss={handleSetProfileToPrivateTogglePanel}\n        onSave={handleSetProfileToPrivateSave}\n      />\n    </>\n  );\n};\n\nexport default RegionalDirectorProfile;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { useEffect, ReactElement } from \"react\";\n\nimport { useForm } from \"react-hook-form\";\nimport { useDispatch, useSelector } from \"react-redux\";\n\nimport * as Yup from \"yup\";\n\nimport { Stack, StackItem } from \"@fluentui/react\";\nimport { yupResolver } from \"@hookform/resolvers/yup\";\n\nimport { useAuth } from \"Authentication/AuthProvider\";\nimport ComboBoxController from \"Components/ReactHookForm/ComboBoxController/ComboBoxController\";\nimport { SidePanel } from \"Components/SidePanel/SidePanel\";\nimport { OperationStatus } from \"Constants/OperationStatus\";\nimport { mvpProgramProfileStatuses } from \"Constants/ProfileConstants\";\nimport {\n  fetchProgramProfile,\n  updateRDProgramProfile,\n} from \"Dataflows/RD/UserProfile/RDUserProfileAction\";\nimport {\n  getProgramProfileUpdateStatus,\n  getUpdateProgramProfileErrorMessage,\n} from \"Dataflows/RD/UserProfile/RDUserProfileSelector\";\n\nimport { IRegionalDirectorProgramProfileEditFormProps } from \"./IRegionalDirectorProgramProfileEditFormProps\";\n\nexport const RegionalDirectorProgramProfileEditForm = (\n  props: IRegionalDirectorProgramProfileEditFormProps\n): ReactElement => {\n  const { isPanelOpen, setIsPanelOpen, defaultValues } = props;\n  const { account } = useAuth();\n\n  const updateProgramProfileOperationStatus = useSelector(getProgramProfileUpdateStatus);\n\n  const {\n    control,\n    handleSubmit,\n    reset,\n    formState: { errors },\n  } = useForm({\n    defaultValues,\n    resolver: yupResolver(\n      Yup.object().shape({\n        programProfileStatus: Yup.string().required(\"Program Profile Status is required\"),\n      })\n    ),\n  });\n\n  const dispatch = useDispatch();\n  const programProfileUpdateErrorMessage = useSelector(getUpdateProgramProfileErrorMessage);\n\n  const dismissPanel = (): void => {\n    setIsPanelOpen(false);\n    reset();\n  };\n\n  // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n  const save = () =>\n    handleSubmit((data) => {\n      if (defaultValues.userProfileId && data.programProfileStatus) {\n        return dispatch(\n          updateRDProgramProfile(\n            defaultValues.userProfileId,\n            data.programProfileStatus,\n            account.userName\n          )\n        );\n      }\n    });\n\n  useEffect(() => {\n    if (updateProgramProfileOperationStatus === OperationStatus.Succeeded) {\n      dispatch(fetchProgramProfile(defaultValues.userProfileId as number));\n      dismissPanel();\n    }\n  }, [updateProgramProfileOperationStatus === OperationStatus.Succeeded]);\n\n  const isSaving = updateProgramProfileOperationStatus === OperationStatus.Pending;\n\n  return (\n    <form onSubmit={save()}>\n      <SidePanel\n        isOpen={isPanelOpen}\n        title=\"Edit Program Details\"\n        saveButtonLabel=\"Save\"\n        error={programProfileUpdateErrorMessage}\n        disableActions={isSaving}\n        onDismiss={dismissPanel}\n        onSave={save()}\n      >\n        <Stack tokens={{ childrenGap: \"1rem\" }}>\n          <StackItem>\n            <ComboBoxController\n              control={control}\n              errors={errors}\n              inputName=\"programProfileStatus\"\n              isRequired={true}\n              labelDisplayName=\"Program Profile Status\"\n              options={mvpProgramProfileStatuses}\n              isDisabled={isSaving}\n            />\n          </StackItem>\n        </Stack>\n      </SidePanel>\n    </form>\n  );\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport {\n  getTheme,\n  ILabelStyles,\n  IStackItemStyles,\n  IStackStyles,\n  IStackTokens,\n} from \"@fluentui/react\";\n\nconst theme = getTheme();\n\n/**\n * Token for the body stack\n */\nexport const bodyContainerStackTokens = (): IStackTokens => {\n  return { childrenGap: \"1rem\" };\n};\n\n/**\n * Styling for the body row stack\n */\nexport const bodyRowStackStyles = (): IStackStyles => {\n  return { root: { display: \"flex\", justifyContent: \"space-between\" } };\n};\n\n/**\n * Styling for the body column stack\n */\nexport const bodyColumnStackItemStyles = (): IStackItemStyles => {\n  return { root: { width: \"50%\" } };\n};\n\n/**\n * Styling for the label\n */\nexport const labelStyles = (): ILabelStyles => {\n  return { root: { fontWeight: 600 } };\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { useEffect, useState, ReactElement } from \"react\";\n\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { Redirect } from \"react-router-dom\";\n\nimport {\n  CommandBar,\n  ICommandBarItemProps,\n  Label,\n  Spinner,\n  SpinnerSize,\n  Stack,\n  StackItem,\n  Text,\n} from \"@fluentui/react\";\n\nimport { useAuth } from \"Authentication/AuthProvider\";\nimport { spinnerStyles } from \"Components/Common/SharedListStyles.styles\";\nimport {\n  bodyContainerStackStyles,\n  commandBarStyles,\n  headerStackStyles,\n  headerTextStyles,\n  ContainerWrapper,\n} from \"Components/Common/SharedTableStyles.styles\";\nimport { RegionalDirectorProgramProfileEditForm } from \"Components/RegionalDirectorProgramProfileEditForm/RegionalDirectorProgramProfileEditForm\";\nimport { OperationStatus } from \"Constants/OperationStatus\";\nimport { RolesEnum } from \"Constants/RolesPermissionsConstants\";\nimport {\n  getProgramProfileErrorMessage,\n  getProgramProfileOperationStatus,\n} from \"Dataflows/MVP/ProgramProfile/IMVPProgramProfileSelector\";\nimport { fetchProgramProfile } from \"Dataflows/RD/UserProfile/RDUserProfileAction\";\nimport { getProgramProfile } from \"Dataflows/RD/UserProfile/RDUserProfileSelector\";\nimport { formatDate } from \"Utility/FormatHelper\";\n\nimport { IRegionalDirectorProgramProfileProps } from \"./IRegionalDirectorProgramProfileProps\";\nimport {\n  bodyColumnStackItemStyles,\n  bodyContainerStackTokens,\n  bodyRowStackStyles,\n  labelStyles,\n} from \"./RegionalDirectorProgramProfile.styles\";\n\nconst RegionalDirectorProgramProfile = (\n  props: IRegionalDirectorProgramProfileProps\n): ReactElement => {\n  const { userProfileId, userProfileAwardPeriodEndDate } = props;\n\n  const { isUserLoggedIn, loading, hasAnyRoles } = useAuth();\n  if (isUserLoggedIn && !hasAnyRoles && !loading) {\n    return <Redirect to=\"/unauthorized\" />;\n  }\n\n  const dispatch = useDispatch();\n  const programProfile = useSelector(getProgramProfile);\n  const programProfileOperationStatus = useSelector(getProgramProfileOperationStatus);\n  const programProfileErrorMessage = useSelector(getProgramProfileErrorMessage);\n\n  const [isPanelOpen, setIsPanelOpen] = useState(false);\n\n  useEffect(() => {\n    if (!!userProfileId) {\n      dispatch(fetchProgramProfile(userProfileId));\n    }\n  }, []);\n\n  const editProgramInformationClicked = (): void => {\n    setIsPanelOpen(true);\n  };\n\n  const formatDateOrUndefined = (date: Date | undefined): string => {\n    if (!!date) {\n      return formatDate(date);\n    } else {\n      return \"\";\n    }\n  };\n\n  const { hasRole } = useAuth();\n  const canEditProgramProfile =\n    hasRole(RolesEnum.RD_REVIEWER) || hasRole(RolesEnum.RD_PROGRAM_OWNER);\n\n  if (programProfileOperationStatus?.read === OperationStatus.Pending) {\n    return <Spinner size={SpinnerSize.large} styles={spinnerStyles} />;\n  } else if (\n    programProfileOperationStatus?.read === OperationStatus.Failed &&\n    programProfileErrorMessage\n  ) {\n    return <div>{programProfileErrorMessage}</div>;\n  }\n\n  const items: ICommandBarItemProps[] = [\n    {\n      key: \"editProgramInformation\",\n      text: \"Edit Program Details\",\n      iconProps: { iconName: \"Edit\" },\n      onClick: (): void => {\n        editProgramInformationClicked();\n      },\n    },\n  ];\n\n  return (\n    <>\n      {!programProfile ? (\n        <Spinner size={SpinnerSize.large} styles={spinnerStyles} />\n      ) : (\n        <>\n          {canEditProgramProfile && (\n            <CommandBar items={items} ariaLabel=\"Edit Program Details\" styles={commandBarStyles} />\n          )}\n          <ContainerWrapper>\n            <Stack styles={headerStackStyles}>\n              <Text styles={headerTextStyles}>Program Details</Text>\n            </Stack>\n            <Stack styles={bodyContainerStackStyles} tokens={bodyContainerStackTokens}>\n              <Stack horizontal styles={bodyRowStackStyles}>\n                <StackItem styles={bodyColumnStackItemStyles}>\n                  <Label styles={labelStyles}>Application Status</Label>\n                  <Text>{programProfile?.applicationStatus}</Text>\n                </StackItem>\n              </Stack>\n              <Stack horizontal styles={bodyRowStackStyles}>\n                <StackItem styles={bodyColumnStackItemStyles}>\n                  <Label styles={labelStyles}>Date Last Modified</Label>\n                  <Text>{formatDateOrUndefined(programProfile?.dateLastModified)}</Text>\n                </StackItem>\n                <StackItem styles={bodyColumnStackItemStyles}>\n                  <Label styles={labelStyles}>Date Submitted</Label>\n                  <Text>{formatDateOrUndefined(programProfile?.dateSubmitted)}</Text>\n                </StackItem>\n              </Stack>\n              <Stack horizontal styles={bodyRowStackStyles}>\n                <StackItem styles={bodyColumnStackItemStyles}>\n                  <Label styles={labelStyles}>Program Profile Status</Label>\n                  <Text>{programProfile?.programProfileStatus}</Text>\n                </StackItem>\n                <StackItem styles={bodyColumnStackItemStyles}>\n                  <Label styles={labelStyles}>Program End Date</Label>\n                  <Text>{formatDateOrUndefined(userProfileAwardPeriodEndDate)}</Text>\n                </StackItem>\n              </Stack>\n              <Stack horizontal styles={bodyRowStackStyles}>\n                <StackItem styles={bodyColumnStackItemStyles}>\n                  <Label styles={labelStyles}>Contributor ID</Label>\n                  <Text>{programProfile?.microsoftReferralId}</Text>\n                </StackItem>\n              </Stack>\n            </Stack>\n          </ContainerWrapper>\n        </>\n      )}\n      {isPanelOpen && (\n        <RegionalDirectorProgramProfileEditForm\n          isPanelOpen={isPanelOpen}\n          setIsPanelOpen={setIsPanelOpen}\n          defaultValues={{\n            userProfileId,\n            programProfileStatus: programProfile?.programProfileStatus,\n          }}\n        />\n      )}\n    </>\n  );\n};\n\nexport default RegionalDirectorProgramProfile;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { useEffect, ReactElement } from \"react\";\n\nimport { useDispatch, useSelector } from \"react-redux\";\n\nimport { delay } from \"lodash\";\n\nimport { Spinner, SpinnerSize } from \"@fluentui/react\";\n\nimport { useAuth } from \"Authentication/AuthProvider\";\nimport UserProfileDistributionList from \"Components/DistributionLists/UserProfileDistributionList\";\nimport { OperationStatus } from \"Constants/OperationStatus\";\nimport { defaultDelay } from \"Constants/ProfileConstants\";\nimport { PermissionsEnum } from \"Constants/RolesPermissionsConstants\";\nimport { TenantTypesEnum } from \"Constants/TenantTypes\";\nimport { getSelectedUserProfile } from \"Dataflows/RD/UserProfile/RDUserProfileSelector\";\nimport {\n  userProfileDlLoad,\n  userProfileDlRemove,\n  userProfileDlRemoveAll,\n} from \"Dataflows/UserProfile/UserProfileAction\";\nimport {\n  getUserProfileDl,\n  getUserProfileDlLoadStatus,\n  getUserProfileDlRemoveAllError,\n  getUserProfileDlRemoveAllStatus,\n  getUserProfileDlRemoveError,\n  getUserProfileDlRemoveStatus,\n} from \"Dataflows/UserProfile/UserProfileSelector\";\nimport { IDistributionList } from \"Interfaces/UserProfile/DistributionLists/IDistributionLists\";\n\n/**\n * The Regional Directors Distribution Lists component\n * @method\n * @returns {ReactElement} The Regional Directors Distribution Lists component\n */\nconst RegionalDirectorsDistributionLists = (): ReactElement => {\n  const { hasPermission } = useAuth();\n  const dispatch = useDispatch();\n  const distributionList = useSelector(getUserProfileDl);\n  const distributionListLoadStatus = useSelector(getUserProfileDlLoadStatus);\n  const distributionListRemoveStatus = useSelector(getUserProfileDlRemoveStatus);\n  const distributionListRemoveError = useSelector(getUserProfileDlRemoveError);\n  const distributionListRemoveAllStatus = useSelector(getUserProfileDlRemoveAllStatus);\n  const distributionListRemoveAllError = useSelector(getUserProfileDlRemoveAllError);\n  const userProfileId = useSelector(getSelectedUserProfile)?.id as number;\n\n  const canEditDistributionListMembership = hasPermission(\n    TenantTypesEnum.RD,\n    PermissionsEnum.RD_UPDATE_BENEFITS\n  );\n\n  const handleLoadDl = (): void => {\n    dispatch(userProfileDlLoad(userProfileId, TenantTypesEnum.RD));\n  };\n\n  const handleRemove = (distributionList: IDistributionList): void => {\n    dispatch(\n      userProfileDlRemove(\n        distributionList.dlDisplayName,\n        distributionList.joinedEmail,\n        TenantTypesEnum.RD\n      )\n    );\n  };\n\n  const handleRemoveAll = (): void => {\n    dispatch(userProfileDlRemoveAll(userProfileId, TenantTypesEnum.RD));\n  };\n\n  useEffect(() => {\n    if (distributionListLoadStatus !== OperationStatus.Pending) {\n      handleLoadDl();\n    }\n  }, []);\n\n  useEffect(() => {\n    if (\n      distributionListRemoveStatus === OperationStatus.Succeeded ||\n      distributionListRemoveAllStatus === OperationStatus.Succeeded\n    ) {\n      delay(handleLoadDl, defaultDelay);\n    }\n  }, [distributionListRemoveStatus, distributionListRemoveAllStatus]);\n\n  if (distributionListLoadStatus === OperationStatus.Pending)\n    return <Spinner size={SpinnerSize.large} />;\n\n  return (\n    <UserProfileDistributionList\n      distributionLists={distributionList}\n      allowEditing={canEditDistributionListMembership}\n      onRemoveDl={handleRemove}\n      onRemoveAllDl={handleRemoveAll}\n      dlRemoveStatus={distributionListRemoveStatus}\n      dlRemoveError={distributionListRemoveError}\n      dlRemoveAllStatus={distributionListRemoveAllStatus}\n      dlRemoveAllError={distributionListRemoveAllError}\n    />\n  );\n};\n\nexport default RegionalDirectorsDistributionLists;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { ReactElement } from \"react\";\n\nimport { useHistory } from \"react-router-dom\";\n\nimport { ActionButton, Pivot, PivotItem, Spinner, SpinnerSize, Stack } from \"@fluentui/react\";\n\nimport ProfileHeader from \"Components/ProfileHeader/ProfileHeader\";\nimport RegionalDirectorBenefitDetails from \"Components/RegionalDirectorBenefitDetails/RegionalDirectorBenefitDetails\";\nimport { RegionalDirectorComments } from \"Components/RegionalDirectorComments/RegionalDirectorComments\";\nimport RegionalDirectorProfile from \"Components/RegionalDirectorProfile/RegionalDirectorProfile\";\nimport RegionalDirectorProgramProfile from \"Components/RegionalDirectorProgramProfile/RegionalDirectorProgramProfile\";\nimport RegionalDirectorsDistributionLists from \"Components/RegionalDirectorsDistributionLists/RegionalDirectorsDistributionLists\";\nimport { ProfileTabs } from \"Constants/ProfileConstants\";\nimport { TenantTypesEnum } from \"Constants/TenantTypes\";\nimport { DetailWrapper } from \"Containers/Common/CommonContainer.styles\";\nimport {\n  containerStackTokens,\n  wrapperStackStyles,\n} from \"Containers/MVP/MostValuableProfessionalDetailsContainer/MostValuableProfessionalDetailsContainer.styles\";\nimport { useProfileTabs } from \"Utility/CustomTabHooks\";\n\nimport { IRegionalDirectorDetailsProps } from \"./IRegionalDirectorDetailsProps\";\n\n/**\n * The regional director details component.\n * @param {IRegionalDirectorDetailsProps} props The props.\n */\nexport const RegionalDirectorDetails = (props: IRegionalDirectorDetailsProps): ReactElement => {\n  const history = useHistory();\n\n  const {\n    isCurrentUserProfileLoading,\n    selectedUserProfile,\n    userProfileId,\n    selectedUserProfileErrorMessage,\n    fetchUserProfileComments,\n    userProfileCommentsErrorMessage,\n    userProfileComments,\n    isUserProfileCommentsLoading,\n    onAddCommentClicked,\n    addUserProfileCommentStatus,\n    canUpdatePrimaryEmail,\n    updatePrimaryEmailStatus,\n    updatePrimaryEmailError,\n    onPrimaryEmailUpdate,\n    onPrimaryEmailUpdateReset,\n    loadUserProfile,\n  } = props;\n\n  const { selectedTab, setSelectedTab } = useProfileTabs();\n\n  /**\n   * Handler for when the back button is clicked.\n   * @returns {void} void no return for function.\n   */\n  const onBackClickEvent = (): void => {\n    history.goBack();\n  };\n\n  if (isCurrentUserProfileLoading) {\n    return (\n      <Spinner\n        size={SpinnerSize.large}\n        styles={{\n          root: {\n            marginTop: 32,\n          },\n        }}\n      />\n    );\n  }\n\n  if (!!selectedUserProfileErrorMessage) {\n    return <>{selectedUserProfileErrorMessage}</>;\n  }\n\n  return (\n    <>\n      <Stack styles={wrapperStackStyles}>\n        <ActionButton\n          iconProps={{ iconName: \"RevToggleKey\" }}\n          ariaLabel=\"Back\"\n          onClick={onBackClickEvent}\n        >\n          Back\n        </ActionButton>\n        <Stack tokens={containerStackTokens}>\n          <ProfileHeader\n            userProfileId={selectedUserProfile.id}\n            firstName={selectedUserProfile.firstName}\n            lastName={selectedUserProfile.lastName}\n            primaryEmail={selectedUserProfile.primaryEmail}\n            secondaryEmail={selectedUserProfile.secondaryEmail}\n            tenants={selectedUserProfile.tenants}\n            currentTenant={TenantTypesEnum.RD}\n            isOvdfBlock={false}\n            isPrivate={selectedUserProfile?.isPrivate}\n            canUpdatePrimaryEmail={canUpdatePrimaryEmail}\n            updatePrimaryEmailStatus={updatePrimaryEmailStatus}\n            updatePrimaryEmailError={updatePrimaryEmailError}\n            onPrimaryEmailUpdate={onPrimaryEmailUpdate}\n            onPrimaryEmailUpdateReset={onPrimaryEmailUpdateReset}\n            loadUserProfile={loadUserProfile}\n          />\n          <Stack>\n            <DetailWrapper>\n              <Pivot\n                selectedKey={selectedTab}\n                onLinkClick={(item: PivotItem | undefined): void => {\n                  setSelectedTab((item?.props.itemKey as ProfileTabs) || ProfileTabs.Profile);\n                }}\n              >\n                <PivotItem headerText=\"Profile\" itemKey={ProfileTabs.Profile}>\n                  <RegionalDirectorProfile />\n                </PivotItem>\n                <PivotItem\n                  headerText=\"Program Information\"\n                  itemKey={ProfileTabs.ProgramInformation}\n                >\n                  <RegionalDirectorProgramProfile\n                    userProfileId={selectedUserProfile.id}\n                    userProfileAwardPeriodEndDate={selectedUserProfile.awardPeriodEndDate}\n                  />\n                </PivotItem>\n                <PivotItem headerText=\"Benefits\" itemKey={ProfileTabs.Benefits}>\n                  <RegionalDirectorBenefitDetails />\n                </PivotItem>\n                <PivotItem headerText=\"Distribution Lists\" itemKey={ProfileTabs.DistributionLists}>\n                  <RegionalDirectorsDistributionLists />\n                </PivotItem>\n                <PivotItem headerText=\"Comments\" itemKey={ProfileTabs.Comments}>\n                  <RegionalDirectorComments\n                    onAddCommentClicked={onAddCommentClicked}\n                    isLoading={isUserProfileCommentsLoading}\n                    userProfileId={userProfileId}\n                    fetchUserProfileComments={fetchUserProfileComments}\n                    userProfileComments={userProfileComments}\n                    errorMessage={userProfileCommentsErrorMessage}\n                    addCommentStatus={addUserProfileCommentStatus}\n                  />\n                </PivotItem>\n              </Pivot>\n            </DetailWrapper>\n          </Stack>\n        </Stack>\n      </Stack>\n    </>\n  );\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { useEffect, ReactElement } from \"react\";\n\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { useParams } from \"react-router\";\n\nimport * as CountryRegionSelectors from \"Dataflows/CountryRegion/CountryRegionSelector\";\nimport * as IndustryFocusSelectors from \"Dataflows/IndustryFocus/IndustryFocusSelector\";\nimport * as RdUserProfilesActions from \"Dataflows/RD/UserProfile/RDUserProfileAction\";\nimport * as RdUserProfileSelectors from \"Dataflows/RD/UserProfile/RDUserProfileSelector\";\nimport * as SocialNetworkSelectors from \"Dataflows/SocialNetwork/SocialNetworkSelector\";\nimport * as StateProvinceSelectors from \"Dataflows/StateProvince/StateProvinceSelector\";\nimport * as TechnicalExpertiseSelectors from \"Dataflows/TechnicalExpertise/TechnicalExpertiseSelector\";\n\nimport { useAuth } from \"Authentication/AuthProvider\";\nimport { IRegionalDirectorDetailsProps } from \"Components/RegionalDirectorDetails/IRegionalDirectorDetailsProps\";\nimport { RegionalDirectorDetails } from \"Components/RegionalDirectorDetails/RegionalDirectorDetails\";\nimport { OperationStatus } from \"Constants/OperationStatus\";\nimport { PermissionsEnum, RolesEnum } from \"Constants/RolesPermissionsConstants\";\nimport { TenantTypesEnum } from \"Constants/TenantTypes\";\n\n/**\n * The Regional Director Details Container.\n * @returns {ReactElement} The react element.\n */\nconst RegionalDirectorsDetailsContainer = (): ReactElement => {\n  const dispatch = useDispatch();\n  const { account, hasRole, hasPermission } = useAuth();\n  const createdOrModifiedBy = account.userName;\n  const { id } = useParams<{ id: string }>();\n  const userProfileId = Number.parseInt(id);\n  const selectedUserProfile = useSelector(RdUserProfileSelectors.getSelectedUserProfile);\n\n  const isCurrentUserProfileLoading = useSelector(\n    RdUserProfileSelectors.getSelectedUserProfileIsLoadingStatus\n  );\n  const isUserProfileCommentsLoading = useSelector(\n    RdUserProfileSelectors.getUserProfileCommentsIsLoadingStatus\n  );\n  const selectedUserProfileErrorMessage = useSelector(\n    RdUserProfileSelectors.getFetchUserProfileErrorMessage\n  );\n  const userProfileCommentsErrorMessage = useSelector(\n    RdUserProfileSelectors.getUserProfileCommentsErrorMessage\n  );\n  const userProfileComments = useSelector(RdUserProfileSelectors.getUserProfileComments);\n  const addUserProfileCommentStatus = useSelector(\n    RdUserProfileSelectors.getUserProfileAddCommentInProgressStatus\n  );\n  const updateProgramProfileStatus = useSelector(\n    RdUserProfileSelectors.getProgramProfileUpdateStatus\n  );\n\n  const state = useSelector(RdUserProfileSelectors.getState);\n\n  const countryRegionOptionList = CountryRegionSelectors.getCountryRegionsOptionList(\n    state.countryRegionDataState\n  );\n  const countryRegionPhoneOptionList = CountryRegionSelectors.getCountryRegionPhoneOptionList(\n    state.countryRegionDataState\n  );\n  const industryFocusOptionList = IndustryFocusSelectors.getIndustryFocusOptionList(\n    state.industryFocusDataState\n  );\n  const stateProvinceOptionList = StateProvinceSelectors.getStateProvincesOptionList(\n    state.stateProvinceDataState\n  );\n  const stateProvinceShippingOptionList = StateProvinceSelectors.getstateProvinceShippingOptionList(\n    state.stateProvinceDataState\n  );\n  const socialNetworkOptionList = SocialNetworkSelectors.getSocialNetworkOptionList(\n    state.socialNetworkDataState\n  );\n  const technicalExpertiseOptionList = TechnicalExpertiseSelectors.getTechnicalExpertiseOptionList(\n    state.technicalExpertiseDataState\n  );\n  const userProfileIsPrivateUpdateStatus = useSelector(\n    RdUserProfileSelectors.getUserProfileUpdateIsPrivateOperationStatus\n  );\n  const updatePrimaryEmailStatus = useSelector(\n    RdUserProfileSelectors.getUserProfileUpdatePrimaryEmailStatus\n  );\n  const updatePrimaryEmailError = useSelector(\n    RdUserProfileSelectors.getUserProfileUpdatePrimaryEmailError\n  );\n\n  const canUpdatePrimaryEmail =\n    (hasRole(RolesEnum.RD_PROGRAM_OWNER) || hasRole(RolesEnum.RD_BENEFITS_MANAGER)) &&\n    hasPermission(TenantTypesEnum.RD, PermissionsEnum.RD_UPDATE_PRIMARY_EMAIL);\n\n  useEffect(() => {\n    if (userProfileId) {\n      dispatch(RdUserProfilesActions.updateSelectedUserProfileId(userProfileId));\n      dispatch(RdUserProfilesActions.fetchUserProfile(userProfileId));\n    }\n  }, [userProfileId]);\n\n  useEffect(() => {\n    if (userProfileIsPrivateUpdateStatus === OperationStatus.Succeeded) {\n      dispatch(RdUserProfilesActions.fetchUserProfile(userProfileId));\n    }\n  }, [userProfileIsPrivateUpdateStatus]);\n\n  const detailsProps: IRegionalDirectorDetailsProps = {\n    isCurrentUserProfileLoading,\n    isUserProfileCommentsLoading,\n    selectedUserProfile,\n    userProfileId: userProfileId || 0,\n    selectedUserProfileErrorMessage,\n    userProfileCommentsErrorMessage,\n    userProfileComments,\n    addUserProfileCommentStatus,\n    updateProgramProfileStatus,\n    countryRegionOptionList,\n    countryRegionPhoneOptionList,\n    industryFocusOptionList,\n    stateProvinceOptionList,\n    stateProvinceShippingOptionList,\n    socialNetworkOptionList,\n    technicalExpertiseOptionList,\n    canUpdatePrimaryEmail,\n    updatePrimaryEmailStatus,\n    updatePrimaryEmailError,\n    onAddCommentClicked: (textValue) => {\n      if (!!userProfileId) {\n        dispatch(\n          RdUserProfilesActions.addUserProfileComment(userProfileId, textValue, createdOrModifiedBy)\n        );\n      }\n    },\n    fetchUserProfileComments: (userProfileId) =>\n      dispatch(RdUserProfilesActions.fetchUserProfileComments(userProfileId)),\n    onClaimBenefit: (benefitType: string) => {\n      if (!!userProfileId) {\n        dispatch(RdUserProfilesActions.claimRdBenefit(benefitType, userProfileId));\n      }\n    },\n    onDismissClaimBenefitPanel: () => {\n      dispatch(RdUserProfilesActions.claimRdBenefitReset());\n    },\n    onPrimaryEmailUpdate: (userProfileId: number, newEmail: string) => {\n      dispatch(RdUserProfilesActions.userProfilePrimaryEmailUpdate(userProfileId, newEmail));\n    },\n    onPrimaryEmailUpdateReset: () => {\n      dispatch(RdUserProfilesActions.userProfilePrimaryEmailUpdateReset());\n    },\n    loadUserProfile: (userProfileId: number) => {\n      dispatch(RdUserProfilesActions.fetchUserProfile(userProfileId));\n    },\n  };\n\n  return <RegionalDirectorDetails {...detailsProps} />;\n};\n\nexport default RegionalDirectorsDetailsContainer;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { useEffect, useState } from \"react\";\n\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { useHistory } from \"react-router-dom\";\n\nimport moment from \"moment\";\nimport Pagination from \"rc-pagination\";\n\nimport {\n  DetailsList,\n  DetailsListLayoutMode,\n  Dropdown,\n  IColumn,\n  IDetailsRowProps,\n  SelectionMode,\n  Spinner,\n  SpinnerSize,\n} from \"@fluentui/react\";\n\nimport * as UserProfilesActions from \"Dataflows/RD/UserProfile/RDUserProfileAction\";\n\nimport ChevronIcon from \"Components/Common/ChevronIcon/ChevronIcon\";\nimport { PaginationRow } from \"Components/Common/Pagination/Pagination.styles\";\nimport {\n  detailListStyles,\n  spinnerStyles,\n  StyledSpan,\n} from \"Components/Common/SharedListStyles.styles\";\nimport StatusElement from \"Components/Common/Status/StatusElement\";\nimport { isUserProfilesLoading } from \"Dataflows/RD/UserProfile/RDUserProfileSelector\";\nimport { formatDate } from \"Utility/FormatHelper\";\n\nimport { IRegionalDirectorsListItem } from \"./IRegionalDirectorsListItem\";\nimport { IRegionalDirectorsListProps } from \"./IRegionalDirectorsListProps\";\n\nconst formatStatusColumn = (statusKey: string): React.ReactElement => {\n  return <StatusElement statusValue={statusKey} />;\n};\n\nconst formatDisplayDate = (incomingDate: Date | undefined): string =>\n  !!incomingDate ? formatDate(incomingDate) : \"\";\n\n/**\n * List of regional director profiles\n * @Component\n * @returns {React.FunctionComponent<IRegionalDirectorsListProps>}\n */\nconst RegionalDirectorsLists: React.FunctionComponent<IRegionalDirectorsListProps> = (\n  props: IRegionalDirectorsListProps\n) => {\n  const history = useHistory();\n  const { data, pageSize, filteredCount, currentPage } = props;\n  const profilesToRender = data ? data.slice(0, pageSize) : [];\n  const dispatch = useDispatch();\n  const isLoadingUsers = useSelector(isUserProfilesLoading);\n\n  const [columns, setColumns] = useState<IColumn[]>([\n    {\n      key: \"id\",\n      name: \"ID\",\n      ariaLabel: \"ID\",\n      fieldName: \"id\",\n      minWidth: 20,\n      maxWidth: 36,\n      isResizable: true,\n    },\n    {\n      key: \"firstName\",\n      name: \"First Name\",\n      ariaLabel: \"First Name\",\n      fieldName: \"firstName\",\n      minWidth: 70,\n      maxWidth: 100,\n      isResizable: true,\n    },\n    {\n      key: \"lastName\",\n      name: \"Last Name\",\n      ariaLabel: \"Last name\",\n      fieldName: \"lastName\",\n      minWidth: 70,\n      maxWidth: 100,\n      isResizable: true,\n    },\n    {\n      key: \"primaryEmail\",\n      name: \"Primary Email\",\n      ariaLabel: \"Primary Email\",\n      fieldName: \"primaryEmail\",\n      minWidth: 120,\n      maxWidth: 180,\n      isResizable: true,\n    },\n    {\n      key: \"cpm\",\n      name: \"CPM\",\n      ariaLabel: \"CPM\",\n      fieldName: \"cpm\",\n      minWidth: 120,\n      maxWidth: 180,\n      isResizable: true,\n    },\n    {\n      key: \"awardPeriodStart\",\n      name: \"Award Period Start\",\n      ariaLabel: \"Award Period Start\",\n      fieldName: \"awardPeriodStartDate\",\n      minWidth: 120,\n      maxWidth: 180,\n      isResizable: true,\n      onRender: (item: IRegionalDirectorsListItem): string =>\n        formatDisplayDate(item.awardPeriodStartDate),\n    },\n    {\n      key: \"awardPeriodEndDate\",\n      name: \"Award Period End\",\n      ariaLabel: \"Award Period End\",\n      fieldName: \"awardPeriodEndDate\",\n      minWidth: 120,\n      maxWidth: 180,\n      isResizable: true,\n      onRender: (item: IRegionalDirectorsListItem): string =>\n        formatDisplayDate(item.awardPeriodEndDate),\n    },\n    {\n      key: \"applicationProfileStatus\",\n      name: \"Application Status\",\n      ariaLabel: \"Application status\",\n      fieldName: \"applicationProfileStatus\",\n      minWidth: 120,\n      maxWidth: 180,\n      isResizable: true,\n      onRender: (item: IRegionalDirectorsListItem): React.ReactElement =>\n        formatStatusColumn(item.applicationProfileStatus),\n    },\n    {\n      key: \"programStatus\",\n      name: \"Program Status\",\n      ariaLabel: \"Program status\",\n      fieldName: \"programProfileStatus\",\n      minWidth: 120,\n      maxWidth: 180,\n      isResizable: true,\n      onRender: (item: IRegionalDirectorsListItem): React.ReactElement =>\n        formatStatusColumn(item.programProfileStatus),\n    },\n  ]);\n\n  const onSortingUpdate = (sortColumn?: string, sortDescending?: boolean): void => {\n    dispatch(UserProfilesActions.updateRDSorting(sortColumn, sortDescending));\n  };\n\n  const onClickProfile = (profileId: number): void => {\n    history.push(`/rd/details/${profileId}`);\n  };\n\n  const onRenderColumn = (\n    item: IRegionalDirectorsListItem,\n    index?: number,\n    column?: IColumn\n  ): React.ReactElement => {\n    const fieldContent = item[column?.fieldName as keyof IRegionalDirectorsListItem];\n    if (column?.key == \"id\") {\n      return <StyledSpan>{fieldContent}</StyledSpan>;\n    }\n    return <span>{fieldContent}</span>;\n  };\n\n  const onRenderRow = (props?: IDetailsRowProps, defaultRender?: any): React.ReactElement => {\n    const profileId = (props?.item as IRegionalDirectorsListItem).id;\n    return defaultRender({\n      ...props,\n      onClick: () => onClickProfile(profileId),\n    });\n  };\n\n  const onColumnClickHandler = (ev: React.MouseEvent<HTMLElement>, column: IColumn): void => {\n    columns.forEach((col: IColumn) => {\n      if (col.key == column.key) {\n        const isSortedDescending = !col.isSortedDescending;\n        col.isSortedDescending = isSortedDescending;\n        col.isSorted = true;\n        onSortingUpdate(col.fieldName, isSortedDescending);\n      } else {\n        col.isSorted = false;\n        col.isSortedDescending = true;\n      }\n    });\n  };\n\n  useEffect(() => {\n    const newColumns: IColumn[] = [];\n    const sortingColumns = [\n      \"firstName\",\n      \"lastName\",\n      \"cpm\",\n      \"awardPeriodStartDate\",\n      \"awardPeriodEndDate\",\n    ];\n    columns.forEach((col) => {\n      if (sortingColumns.filter((c) => c === col.fieldName).length > 0) {\n        col.onColumnClick = onColumnClickHandler;\n      }\n      newColumns.push(col);\n    });\n    setColumns(newColumns);\n  }, []);\n\n  if (isLoadingUsers) {\n    return <Spinner size={SpinnerSize.large} styles={spinnerStyles} />;\n  }\n\n  return (\n    <>\n      <DetailsList\n        items={profilesToRender}\n        columns={columns}\n        selectionMode={SelectionMode.none}\n        getKey={(item: any): string => `${(item as IRegionalDirectorsListItem).id}`}\n        setKey=\"none\"\n        layoutMode={DetailsListLayoutMode.fixedColumns}\n        isHeaderVisible={true}\n        styles={detailListStyles}\n        onRenderRow={onRenderRow}\n        onRenderItemColumn={onRenderColumn}\n        enterModalSelectionOnTouch={true}\n      />\n      <PaginationRow>\n        <Pagination\n          total={filteredCount}\n          onChange={(page) => dispatch(UserProfilesActions.updateRDCurrentPage(page))}\n          showTitle={false}\n          current={currentPage}\n          prevIcon={ChevronIcon(\"ChevronLeft\")}\n          nextIcon={ChevronIcon(\"ChevronRight\")}\n          pageSize={pageSize}\n          showSizeChanger\n        />\n        <Dropdown\n          options={[\n            { key: 16, text: \"Show 16 results\" },\n            { key: 32, text: \"Show 32 results\" },\n            { key: 48, text: \"Show 48 results\" },\n          ]}\n          onChange={(_e, op): void => {\n            dispatch(UserProfilesActions.updateRDPageSize(op?.key as number));\n          }}\n          selectedKey={pageSize}\n          className=\"pagination-dropdown\"\n          title=\"Page Size Dropdown\"\n        />\n      </PaginationRow>\n    </>\n  );\n};\n\nexport default RegionalDirectorsLists;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { useEffect, useState } from \"react\";\n\nimport { useDispatch, useSelector } from \"react-redux\";\n\nimport { PrimaryButton } from \"@fluentui/react/lib/Button\";\nimport { SearchBox } from \"@fluentui/react/lib/SearchBox\";\nimport { Stack } from \"@fluentui/react/lib/Stack\";\nimport { Text } from \"@fluentui/react/lib/Text\";\n\nimport * as ClRegionActions from \"Dataflows/ClRegion/ClRegionAction\";\nimport * as IndustryFocusActions from \"Dataflows/IndustryFocus/IndustryFocusAction\";\nimport * as UserProfilesActions from \"Dataflows/RD/UserProfile/RDUserProfileAction\";\nimport * as UserProfileSelectors from \"Dataflows/RD/UserProfile/RDUserProfileSelector\";\nimport * as TechnicalExpertiseActions from \"Dataflows/TechnicalExpertise/TechnicalExpertiseAction\";\n\nimport ListCounts from \"Components/Common/ListCounts/ListCounts\";\nimport { IRegionalDirectorsListItem } from \"Components/RegionalDirectorsList/IRegionalDirectorsListItem\";\nimport { IRegionalDirectorsListProps } from \"Components/RegionalDirectorsList/IRegionalDirectorsListProps\";\nimport RegionalDirectorsLists from \"Components/RegionalDirectorsList/RegionalDirectorsList\";\nimport { OperationStatus } from \"Constants/OperationStatus\";\nimport {\n  defaultListingPageSize,\n  defaultRdFilterValues,\n  rdSidebarFilterFields,\n} from \"Constants/ProfileConstants\";\nimport { BrandLabel } from \"Constants/SiteConstants\";\nimport {\n  buttonStackTokens,\n  containerStackStyles,\n  filterButtonStyles,\n  listStackStyles,\n  searchBoxStyles,\n  tableStackStyles,\n  RDButtonStyles,\n  RDFlexRow,\n  RDPaddedFlexRow,\n  RDTextStyles,\n} from \"Containers/Common/CommonContainer.styles\";\nimport { IFilterValue } from \"Interfaces/IFilterValue\";\nimport { IRDUserProfile } from \"Interfaces/RD/UserProfile/IRDUserProfile\";\nimport { constructCsvDownload } from \"Utility/DownloadHelper\";\n\nimport SideBarContainer from \"../../SideBarContainer/SideBarContainer\";\n\n/**\n * Regional Directors Container.\n * Container for Regional Directors Profile List.\n * @returns {React.ReactElement} rendered container\n */\nconst RegionalDirectorsContainer = (): React.ReactElement => {\n  const dispatch = useDispatch();\n\n  /**\n   *  useSelector variables.\n   */\n  const pageSize: number = useSelector(UserProfileSelectors.getPageSize);\n  const currentPage: number = useSelector(UserProfileSelectors.getCurrentPage);\n  const sortColumn: string | undefined = useSelector(UserProfileSelectors.getCurrentSortColumn);\n  const sortDescending: boolean | undefined = useSelector(\n    UserProfileSelectors.getCurrentSortDescending\n  );\n  const [searchText, setSearchText] = useState(useSelector(UserProfileSelectors.getSearchText));\n  const isUserProfilesLoading: boolean = useSelector(UserProfileSelectors.isUserProfilesLoading);\n  const userProfiles: IRDUserProfile[] = useSelector(UserProfileSelectors.getUserProfiles);\n  const selectedUserProfilesFilterValues: IFilterValue[] = useSelector(\n    UserProfileSelectors.getUserProfilesFilterValues\n  );\n  const filteredCount: number = useSelector(UserProfileSelectors.getFilteredCount);\n  const fileDownloadData: string | undefined = useSelector(\n    UserProfileSelectors.getFileDownloadData\n  );\n  const fileDownloadStatus: OperationStatus = useSelector(\n    UserProfileSelectors.getFileDownloadStatus\n  );\n\n  useEffect(() => {\n    dispatch(ClRegionActions.getClRegions());\n    dispatch(IndustryFocusActions.getIndustryFocus());\n    dispatch(TechnicalExpertiseActions.getTechnicalExpertise());\n  }, []);\n\n  useEffect(() => {\n    if (fileDownloadStatus === OperationStatus.Succeeded && !!fileDownloadData) {\n      constructCsvDownload(fileDownloadData, `rds_${new Date().toLocaleString()}.csv`);\n      dispatch(UserProfilesActions.resetFileDownloadStatus());\n    }\n  }, [fileDownloadStatus, fileDownloadData]);\n\n  useEffect(() => {\n    dispatch(\n      UserProfilesActions.searchRDUserProfiles(\n        searchText,\n        selectedUserProfilesFilterValues,\n        currentPage,\n        pageSize,\n        sortColumn,\n        sortDescending\n      )\n    );\n  }, [currentPage, pageSize, sortColumn, sortDescending]);\n\n  /**\n   * Call search function for entered text.\n   * @method\n   * @param {string} searchValue The search text.\n   * @param {IFilterValue[]} selectedUserProfilesFilterValues The filter values.\n   * @param {number} page The page number.\n   * @returns {void}\n   */\n  const handleSearch = (\n    searchValue: string,\n    selectedUserProfilesFilterValues: IFilterValue[],\n    page: number,\n    pageSize: number,\n    sortColumn?: string,\n    sortDescending?: boolean\n  ): void => {\n    dispatch(\n      UserProfilesActions.searchRDUserProfiles(\n        searchValue,\n        selectedUserProfilesFilterValues,\n        page,\n        pageSize,\n        sortColumn,\n        sortDescending\n      )\n    );\n  };\n\n  /**\n   * Call to reset filter values.\n   * @method\n   */\n  const resetFilterValues = (): void => {\n    dispatch(UserProfilesActions.userProfileFilterValueReset());\n\n    setSearchText(\"\");\n    dispatch(\n      UserProfilesActions.searchRDUserProfiles(\"\", defaultRdFilterValues, 1, defaultListingPageSize)\n    );\n  };\n\n  /**\n   * Call to handle the onClear action.\n   */\n  const onClear = (_: any): void => {\n    dispatch(\n      UserProfilesActions.searchRDUserProfiles(\"\", selectedUserProfilesFilterValues, 1, pageSize)\n    );\n  };\n\n  /**\n   * Call to handle the download to csv action.\n   */\n  const handleDownloadToCSV = (): void => {\n    dispatch(\n      UserProfilesActions.downloadRDUserProfilesToCSV(searchText, selectedUserProfilesFilterValues)\n    );\n  };\n\n  const profiles: IRegionalDirectorsListItem[] = userProfiles?.map((item) => {\n    return {\n      id: item.id,\n      firstName: item.firstName,\n      lastName: item.lastName,\n      primaryEmail: item.primaryEmail,\n      awardPeriodStartDate: item.awardPeriodStartDate,\n      awardPeriodEndDate: item.awardPeriodEndDate,\n      programProfileStatus: item.programProfileStatus,\n      applicationProfileStatus: item.applicationStatus,\n      cpm: item.cpm,\n    };\n  });\n\n  const addFilterValue = (filter: IFilterValue) =>\n    dispatch(UserProfilesActions.addUserProfilesFilterValue(filter));\n  const removeUserProfilesFilterValue = (filter: IFilterValue) =>\n    dispatch(UserProfilesActions.removeUserProfilesFilterValue(filter));\n  const updateUserProfilesFilterValue = (filter: IFilterValue) =>\n    dispatch(UserProfilesActions.updateUserProfilesFilterValue(filter));\n  const removeUserProfilesProvinceFilterValue = () =>\n    dispatch(UserProfilesActions.removeUserProfilesFilterProvinceValue());\n\n  const rdListsProps: IRegionalDirectorsListProps = {\n    data: profiles,\n    filteredCount,\n    currentPage,\n    pageSize,\n    fetchSelectedUserProfile: (rdUserProfileId: number) =>\n      dispatch(UserProfilesActions.fetchUserProfile(rdUserProfileId)),\n  };\n\n  return (\n    <Stack horizontal styles={containerStackStyles}>\n      <Stack.Item disableShrink>\n        <SideBarContainer\n          addFilterValue={addFilterValue}\n          removeFilterValue={removeUserProfilesFilterValue}\n          updateFilterValue={updateUserProfilesFilterValue}\n          removeFilterProvinceValue={removeUserProfilesProvinceFilterValue}\n          selectedFilterValues={selectedUserProfilesFilterValues}\n          filterFields={rdSidebarFilterFields}\n        />\n        <Stack horizontal tokens={buttonStackTokens}>\n          <PrimaryButton\n            styles={filterButtonStyles()}\n            text=\"Apply\"\n            onClick={(): void =>\n              handleSearch(\n                searchText,\n                selectedUserProfilesFilterValues,\n                1,\n                pageSize,\n                sortColumn,\n                sortDescending\n              )\n            }\n          />\n          <PrimaryButton styles={filterButtonStyles()} text=\"Reset\" onClick={resetFilterValues} />\n        </Stack>\n      </Stack.Item>\n      <Stack.Item grow styles={listStackStyles()}>\n        <Stack styles={tableStackStyles}>\n          <RDPaddedFlexRow>\n            <Text styles={RDTextStyles}>{BrandLabel.RD}</Text>\n            <RDFlexRow>\n              <ListCounts total={filteredCount} loading={isUserProfilesLoading} />\n              <PrimaryButton\n                text=\"Download to CSV\"\n                styles={RDButtonStyles}\n                iconProps={{ iconName: \"download\" }}\n                onClick={handleDownloadToCSV}\n              />\n            </RDFlexRow>\n          </RDPaddedFlexRow>\n          <SearchBox\n            placeholder=\"Search regional directors\"\n            value={searchText}\n            onSearch={(searchValue: string): void =>\n              handleSearch(searchValue, selectedUserProfilesFilterValues, currentPage, pageSize)\n            }\n            onChange={(event?: React.ChangeEvent<HTMLInputElement>, newValue?: string): void =>\n              setSearchText(newValue || \"\")\n            }\n            onClear={onClear}\n            styles={searchBoxStyles}\n          />\n          <RegionalDirectorsLists {...rdListsProps} />\n        </Stack>\n      </Stack.Item>\n    </Stack>\n  );\n};\n\nexport default RegionalDirectorsContainer;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { Link } from \"react-router-dom\";\n\nimport { getTheme } from \"office-ui-fabric-react\";\nimport styled from \"styled-components\";\n\nimport { Link as AnchorLink } from \"@fluentui/react/lib/Link\";\n\nconst theme = getTheme();\n\n/**\n * Icon image styles.\n */\nexport const Image = styled.img<{ active: boolean; $isActiveTenant: boolean }>`\n  margin-right: 8px;\n  padding-left: 14px;\n  padding-left: ${(props) => (props.active || props.$isActiveTenant ? \"12px\" : \"14px\")};\n`;\n\n/**\n * Styles for the tooltip that appears\n * on hover of the collapsed menu items.\n * NOTE: THESE MUST STAY ABOVE LINKWRAPPER STYLES\n * FOR THE HOVER STYLES ON LINE 51 TO WORK.\n */\nexport const Tooltip = styled.div`\n  background-color: ${theme.palette.neutralDark};\n  border-radius: 2px;\n  color: ${theme.palette.white};\n  left: 50%;\n  opacity: 0.85;\n  padding: 4px 8px;\n  position: absolute;\n  top: 50%;\n  visibility: hidden;\n  z-index: 10;\n`;\n\n/**\n * Styles for the overall link\n * container (wrapper).\n */\nexport const LinkWrapper = styled(Link)<{\n  $isActive?: boolean;\n  $isActiveTenant?: boolean;\n  $hasActiveChild?: boolean;\n}>`\n  border-left: ${(props) =>\n    props.$isActive\n      ? `2px solid ${theme.palette.themePrimary}`\n      : props.$isActiveTenant && \"2px solid #C4C4C4\"};\n  background-color: ${(props) =>\n    props.$isActive || props.$hasActiveChild ? \"#CDCDCD\" : props.$isActiveTenant && \"#D9D9D9\"};\n  padding: 5px 0;\n  position: relative;\n`;\n\n/**\n * Styles for the anchor link\n * container (wrapper).\n */\nexport const AnchorWrapper = styled(AnchorLink)<{\n  $active?: boolean;\n  $activeTenant?: boolean;\n}>`\n  border-left: ${(props) =>\n    props.$active\n      ? `2px solid ${theme.palette.themePrimary}`\n      : props.$activeTenant && \"2px solid #C4C4C4\"};\n  background-color: ${(props) => (props.$active ? \"#CDCDCD\" : props.$activeTenant && \"#D9D9D9\")};\n  padding: 5px 0;\n  position: relative;\n`;\n\n/**\n * Styles for individual navigation links.\n */\nexport const NavLink = styled.p<{ active?: boolean; header?: boolean }>`\n  color: #333333;\n  display: inline-block;\n  font-size: 14px;\n  font-weight: ${(props) => (props.header ? \"600\" : props.active && \"600\")};\n  line-height: 20px;\n  margin: 0;\n  padding: 5px 0;\n  text-decoration: none;\n  -webkit-transition: margin-left 0.2s ease-in-out;\n  -moz-transition: margin-left 0.2s ease-in-out;\n  -o-transition: margin-left 0.2s ease-in-out;\n  transition: margin-left 0.2s ease-in-out;\n\n  &:hover {\n    cursor: pointer;\n  }\n`;\n\n/**\n * Styles for individual anchor links.\n */\nexport const AnchorLinkWrapper = styled.p<{\n  active?: boolean;\n  header?: boolean;\n  menuOpen?: boolean;\n}>`\n  color: #333333;\n  display: inline-block;\n  font-size: 14px;\n  font-weight: ${(props) => (props.header ? \"600\" : props.active && \"600\")};\n  line-height: 20px;\n  margin: 0;\n  padding: 5px 0;\n  text-decoration: none;\n  -webkit-transition: margin-left 0.2s ease-in-out;\n  -moz-transition: margin-left 0.2s ease-in-out;\n  -o-transition: margin-left 0.2s ease-in-out;\n  transition: margin-left 0.2s ease-in-out;\n\n  &:hover {\n    cursor: pointer;\n  }\n`;\n\nexport const SubLinkWrapper = styled.div<{ $isActiveTenant: boolean; $hasActiveParent: boolean }>`\n  display: flex;\n  flex-direction: column;\n\n  ${(props) =>\n    props.$isActiveTenant &&\n    props.$hasActiveParent &&\n    `> a {\n    background-color: #cdcdcd;\n  }`}\n\n  > a > img {\n    margin-left: 10px;\n    margin-right: 5px;\n    height: 16px;\n  }\n\n  > a:not(:has(img)) > :first-child {\n    margin-left: 25px;\n  }\n`;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React from \"react\";\n\nimport { useLocation } from \"react-router-dom\";\n\nimport { TenantTypesEnum } from \"Constants/TenantTypes\";\n\nimport { INavigationLinkProps } from \"./INavigationLinkProps\";\nimport {\n  AnchorLinkWrapper,\n  AnchorWrapper,\n  Image,\n  LinkWrapper,\n  NavLink,\n  SubLinkWrapper,\n  Tooltip,\n} from \"./NavigationLink.styles\";\n\n/**\n * The Navigation Link component.\n * @param props {INavigationLinkProps}\n * @returns {React.ReactElement} The component.\n */\nconst NavigationLink = (props: INavigationLinkProps): React.ReactElement => {\n  const location = useLocation();\n  const { header, icon, source, tenant, text, isPrivacyLink, subLinks } = props;\n\n  const firstSubLink = subLinks?.[0];\n  const isActiveTenant =\n    location.pathname.toLowerCase().includes(tenant.toLowerCase()) ||\n    (location.pathname.toLowerCase().includes(\"studentambassadors\") &&\n      tenant === TenantTypesEnum.MSP);\n  const hasActiveChild = subLinks?.some((subLink) => subLink.source === location.pathname) || false;\n\n  /**\n   * TODO - update activeTenant to compare tenant against tenant that comes from route\n      once that is in place in our routing\n   */\n  return !isPrivacyLink ? (\n    <>\n      <LinkWrapper\n        $isActive={location.pathname === source}\n        $isActiveTenant={isActiveTenant}\n        $hasActiveChild={hasActiveChild}\n        to={{ pathname: firstSubLink ? firstSubLink?.source : source }}\n      >\n        {icon && (\n          <Image\n            active={location.pathname === source}\n            alt={`${text} menu icon`}\n            src={icon}\n            $isActiveTenant={isActiveTenant}\n          />\n        )}\n        <NavLink active={location.pathname === source} header={header}>\n          {text}\n        </NavLink>\n        <Tooltip>{text}</Tooltip>\n      </LinkWrapper>\n      {subLinks?.map((subLink, index) => (\n        <SubLinkWrapper\n          key={index}\n          $isActiveTenant={isActiveTenant}\n          $hasActiveParent={hasActiveChild}\n        >\n          <NavigationLink {...subLink} />\n        </SubLinkWrapper>\n      ))}\n    </>\n  ) : (\n    <AnchorWrapper href={source} target={\"_\"} $isActive={false} $isActiveTenant={isActiveTenant}>\n      <Image active={false} alt={`${text} menu icon`} src={icon} $isActiveTenant={isActiveTenant} />\n      <AnchorLinkWrapper>{text}</AnchorLinkWrapper>\n      <Tooltip>{text}</Tooltip>\n    </AnchorWrapper>\n  );\n};\n\nexport default NavigationLink;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport styled from \"styled-components\";\n\n/**\n * Flex column styles.\n */\nexport const FlexColumn = styled.div`\n  display: flex;\n  flex-direction: column;\n  line-height: 1px;\n`;\n\n/**\n * Styles for the overall navigation container.\n */\nexport const NavigationContainer = styled(FlexColumn)`\n  background-color: #ebebeb;\n  border-right: 1px solid #c8c8c8;\n  justify-content: space-between;\n  max-width: 200px;\n  min-width: 200px;\n  -webkit-transition: max-width 0.2s ease-in-out;\n  -moz-transition: max-width 0.2s ease-in-out;\n  -o-transition: max-width 0.2s ease-in-out;\n  transition: max-width 0.2s ease-in-out;\n  width: 100%;\n  height: 100%;\n  overflow-y: auto;\n  overflow-x: hidden;\n`;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React from \"react\";\n\nimport { INavigationLinkProps } from \"Components/NavigationLink/INavigationLinkProps\";\nimport NavigationLink from \"Components/NavigationLink/NavigationLink\";\n\nimport PrivacyIcon from \"../../Assets/Icons/Privacy.svg\";\nimport { ISideNavigationProps } from \"./ISideNavigationProps\";\nimport { FlexColumn, NavigationContainer } from \"./SideNavigation.styles\";\n\nconst SideNavigation = ({ links }: ISideNavigationProps): React.ReactElement => {\n  const privacyLink: INavigationLinkProps = {\n    isPrivacyLink: true,\n    icon: PrivacyIcon,\n    source: \"https://go.microsoft.com/fwlink/?LinkId=518021\",\n    tenant: \"MSP\",\n    text: \"Privacy Notice\",\n  };\n\n  return (\n    <NavigationContainer>\n      <FlexColumn>\n        {links.map((link, index) => (\n          <NavigationLink key={index} {...link} />\n        ))}\n      </FlexColumn>\n      <FlexColumn>\n        <NavigationLink {...privacyLink} />\n      </FlexColumn>\n    </NavigationContainer>\n  );\n};\n\nexport default SideNavigation;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport _ from \"lodash\";\n\nimport { INavigationLinkProps } from \"Components/NavigationLink/INavigationLinkProps\";\n\nimport AccessControlIcon from \"../Assets/Icons/AccessControl.svg\";\nimport ApplicationIcon from \"../Assets/Icons/Application.svg\";\nimport BenefitsIcon from \"../Assets/Icons/Benefits.svg\";\nimport DistributionListIcon from \"../Assets/Icons/DL.svg\";\nimport EventIcon from \"../Assets/Icons/Event.svg\";\nimport MLSAIcon from \"../Assets/Icons/MLSA.svg\";\nimport MVPIcon from \"../Assets/Icons/MVP.svg\";\nimport PendingRequestIcon from \"../Assets/Icons/PendingRequest.svg\";\nimport RDIcon from \"../Assets/Icons/RD.svg\";\nimport SearchIcon from \"../Assets/Icons/Search.svg\";\nimport { ReviewSubSiteUrlPath } from \"./ApplicationConstants\";\nimport { BenefitsSubSiteUrlPath, BenefitDisplayNameEnum } from \"./BenefitConstants\";\nimport { RolesEnum } from \"./RolesPermissionsConstants\";\nimport { TenantTypesEnum } from \"./TenantTypes\";\n\n// TODO: Fix all MSA/MSP/MLSA consistency issues\n\n/**\n * Enum describing different pages on site\n */\nexport enum SideNavLinksEnum {\n  HEADER = \"header\",\n  USERS = \"users\",\n  EVENTS = \"events\",\n  APPLICATIONS = \"applications\",\n  REVIEW = \"review\",\n  ACCESS = \"access\",\n  BENEFITS = \"benefits\",\n  DL = \"distributionLists\",\n  AWARDCATEGORIES = \"awardCategories\",\n}\n\n/**\n * A function helper to build out the applications link\n * per tenant.\n * @param {string} tenant\n * @returns {INavigationLinkProps}\n */\nconst accessControlLink = (tenant: TenantTypesEnum): INavigationLinkProps => {\n  return {\n    icon: AccessControlIcon,\n    source: `/${tenant.toLowerCase()}/${SideNavLinksEnum.ACCESS}`,\n    tenant: tenant,\n    text: \"Access Control\",\n  };\n};\n\n/**\n * A function helper to build out the applications link\n * per tenant.\n * @param {string} tenant\n * @returns {INavigationLinkProps}\n */\nconst applicationsLink = (tenant: TenantTypesEnum): INavigationLinkProps => {\n  return {\n    icon: ApplicationIcon,\n    source: `/${tenant.toLowerCase()}/${SideNavLinksEnum.APPLICATIONS}`,\n    tenant: tenant,\n    text: \"Applications\",\n  };\n};\n\n/**\n * A function helper to build out the review link\n * per tenant. Review replaces Applications parent level link.\n * @param {string} tenant\n * @returns {INavigationLinkProps}\n */\nconst reviewLink = (tenant: TenantTypesEnum, role: RolesEnum): INavigationLinkProps => {\n  const subLinks: INavigationLinkProps[] = [];\n\n  const applications: INavigationLinkProps = {\n    source: `/${tenant.toLowerCase()}/${SideNavLinksEnum.REVIEW}/${\n      ReviewSubSiteUrlPath.applications\n    }`,\n    tenant: tenant,\n    text: \"Applications\",\n  };\n\n  const demographics: INavigationLinkProps = {\n    source: `/${tenant.toLowerCase()}/${SideNavLinksEnum.REVIEW}/${\n      ReviewSubSiteUrlPath.demographics\n    }`,\n    tenant: tenant,\n    text: \"Demographics\",\n  };\n\n  const subNavigationByRoles = {\n    [RolesEnum.MVP_PROGRAM_OWNER]: [applications, demographics],\n    [RolesEnum.MVP_REVIEWER]: [applications, demographics],\n    [RolesEnum.MVP_TECH_AREA_VALIDATOR]: [applications],\n    [RolesEnum.MVP_BUSINESS_GROUP]: [applications, demographics],\n    [RolesEnum.MVP_EXECUTIVE]: [applications],\n    [RolesEnum.MVP_BENEFITS_MANAGER]: [applications, demographics],\n  };\n\n  subNavigationByRoles[role]?.forEach((subLink) => {\n    subLinks.push(subLink);\n  });\n\n  return {\n    icon: ApplicationIcon,\n    source: `/${tenant.toLowerCase()}/${SideNavLinksEnum.APPLICATIONS}`,\n    tenant: tenant,\n    text: \"Review\",\n    subLinks,\n  };\n};\n\n/**\n * A function helper to build out the events link\n * per tenant.\n * @param {string} tenant\n * @returns {INavigationLinkProps}\n */\nconst eventsLink = (tenant: TenantTypesEnum): INavigationLinkProps => {\n  return {\n    icon: EventIcon,\n    source: `/${tenant.toLowerCase()}/${SideNavLinksEnum.EVENTS}`,\n    tenant: tenant,\n    text: \"Events\",\n  };\n};\n\n/**\n * A function helper to build out the header link\n * per tenant.\n * @param {string} icon\n * @param {string} tenant\n * @returns {INavigationLinkProps}\n */\nconst headerLink = (icon: string, tenant: TenantTypesEnum): INavigationLinkProps => {\n  return {\n    header: false,\n    icon: icon,\n    source: `/${tenant.toLowerCase()}`,\n    tenant: tenant,\n    text: tenant === \"MLSA\" ? \"Students\" : tenant,\n  };\n};\n\n/**\n * A function helper to build out the applications link\n * per tenant.\n * @param {string} tenant\n * @returns {INavigationLinkProps}\n */\nconst benefitsLink = (tenant: TenantTypesEnum): INavigationLinkProps => {\n  const subLinks: INavigationLinkProps[] = [];\n\n  const azureRequests: INavigationLinkProps = {\n    source: `/${tenant.toLowerCase()}/${SideNavLinksEnum.BENEFITS}/${\n      BenefitsSubSiteUrlPath.azureRequests\n    }`,\n    tenant: tenant,\n    text: BenefitDisplayNameEnum.AzureRequests,\n  };\n\n  const gitHubProBenefit: INavigationLinkProps = {\n    source: `/${tenant.toLowerCase()}/${SideNavLinksEnum.BENEFITS}/${\n      BenefitsSubSiteUrlPath.gitHubPro\n    }`,\n    tenant: tenant,\n    text: BenefitDisplayNameEnum.GitHubPro,\n  };\n\n  const linkedInLearningBenefit: INavigationLinkProps = {\n    source: `/${tenant.toLowerCase()}/${SideNavLinksEnum.BENEFITS}/${\n      BenefitsSubSiteUrlPath.linkedInLearning\n    }`,\n    tenant: tenant,\n    text: BenefitDisplayNameEnum.LinkedInLearning,\n  };\n\n  const M365Benefit: INavigationLinkProps = {\n    source: `/${tenant.toLowerCase()}/${SideNavLinksEnum.BENEFITS}/${BenefitsSubSiteUrlPath.O365}`,\n    tenant: tenant,\n    text: BenefitDisplayNameEnum.O365,\n  };\n\n  const m365CopilotBenefit: INavigationLinkProps = {\n    source: `/${tenant.toLowerCase()}/${SideNavLinksEnum.BENEFITS}/${\n      BenefitsSubSiteUrlPath.m365Copilot\n    }`,\n    tenant: tenant,\n    text: BenefitDisplayNameEnum.M365Copilot,\n  };\n\n  const mcpExamVoucherBenefit: INavigationLinkProps = {\n    source: `/${tenant.toLowerCase()}/${SideNavLinksEnum.BENEFITS}/${BenefitsSubSiteUrlPath.mcp}`,\n    tenant: tenant,\n    text: BenefitDisplayNameEnum.MCP,\n  };\n\n  const visualStudioBenefit: INavigationLinkProps = {\n    source: `/${tenant.toLowerCase()}/${SideNavLinksEnum.BENEFITS}/${\n      BenefitsSubSiteUrlPath.visualStudio\n    }`,\n    tenant: tenant,\n    text: BenefitDisplayNameEnum.VisualStudio,\n  };\n\n  const swagKitBenefit: INavigationLinkProps = {\n    source: `/${tenant.toLowerCase()}/${SideNavLinksEnum.BENEFITS}/${\n      BenefitsSubSiteUrlPath.swagKit\n    }`,\n    tenant: tenant,\n    text: BenefitDisplayNameEnum.SwagKit,\n  };\n\n  const teamsBenefit: INavigationLinkProps = {\n    source: `/${tenant.toLowerCase()}/${SideNavLinksEnum.BENEFITS}/${BenefitsSubSiteUrlPath.teams}`,\n    tenant: tenant,\n    text: BenefitDisplayNameEnum.Teams,\n  };\n\n  const awardKitBenefit: INavigationLinkProps = {\n    source: `/${tenant.toLowerCase()}/${SideNavLinksEnum.BENEFITS}/${\n      BenefitsSubSiteUrlPath.awardKit\n    }`,\n    tenant: tenant,\n    text: BenefitDisplayNameEnum.AwardKit,\n  };\n\n  const microsoft365Benefit: INavigationLinkProps = {\n    source: `/${tenant.toLowerCase()}/${SideNavLinksEnum.BENEFITS}/${BenefitsSubSiteUrlPath.MS365}`,\n    tenant: tenant,\n    text: BenefitDisplayNameEnum.MS365,\n  };\n\n  switch (tenant) {\n    case TenantTypesEnum.MLSA:\n      subLinks.push(visualStudioBenefit);\n      subLinks.push(swagKitBenefit);\n      break;\n    case TenantTypesEnum.MVP:\n      subLinks.push(azureRequests);\n      subLinks.push(gitHubProBenefit);\n      subLinks.push(linkedInLearningBenefit);\n      subLinks.push(M365Benefit);\n      subLinks.push(microsoft365Benefit);\n      subLinks.push(m365CopilotBenefit);\n      subLinks.push(mcpExamVoucherBenefit);\n      subLinks.push(visualStudioBenefit);\n      subLinks.push(teamsBenefit);\n      subLinks.push(awardKitBenefit);\n      break;\n    case TenantTypesEnum.RD:\n      subLinks.push(azureRequests);\n      subLinks.push(gitHubProBenefit);\n      subLinks.push(linkedInLearningBenefit);\n      subLinks.push(M365Benefit);\n      subLinks.push(microsoft365Benefit);\n      subLinks.push(m365CopilotBenefit);\n      subLinks.push(visualStudioBenefit);\n      subLinks.push(teamsBenefit);\n      break;\n    default:\n      break;\n  }\n\n  return {\n    icon: BenefitsIcon,\n    source: `/${tenant.toLowerCase()}/${SideNavLinksEnum.BENEFITS}`,\n    tenant: tenant,\n    text: \"Benefits\",\n    subLinks,\n  };\n};\n\n/**\n * A function helper to build out the show all users\n * (i.e., - students, mvps, or rds) link per tenant.\n * @param {string} tenant\n * @returns {INavigationLinkProps}\n */\nconst usersLink = (tenant: TenantTypesEnum): INavigationLinkProps => {\n  return {\n    icon: SearchIcon,\n    source: `/${tenant.toLowerCase()}/${tenant.toLowerCase()}s`,\n    tenant: tenant,\n    text: tenant === \"MLSA\" ? \"Students\" : `${tenant}s`,\n  };\n};\n\n/**\n * A function helper to build out the show all users\n * (i.e., - students, mvps, or rds) link per tenant.\n * @param {string} tenant\n * @returns {INavigationLinkProps}\n */\nconst awardCategoriesLink = (tenant: TenantTypesEnum): INavigationLinkProps => {\n  return {\n    icon: DistributionListIcon,\n    source: `/${tenant.toLowerCase()}/${SideNavLinksEnum.AWARDCATEGORIES}`,\n    tenant: tenant,\n    text: \"Tech Structure\",\n  };\n};\n\n/**\n * A function helper to build out the show all dls\n * (i.e., - students, mvps, or rds) link per tenant.\n * @param {string} tenant\n * @returns {INavigationLinkProps}\n */\nconst distributionListsLink = (tenant: TenantTypesEnum): INavigationLinkProps => {\n  const mvpSubLinks: INavigationLinkProps[] = [\n    {\n      icon: PendingRequestIcon,\n      source: `/${tenant.toLowerCase()}/${SideNavLinksEnum.DL}/pending`,\n      tenant: tenant,\n      text: \"Pending Request\",\n    },\n    {\n      icon: DistributionListIcon,\n      source: `/${tenant.toLowerCase()}/${SideNavLinksEnum.DL}`,\n      tenant: tenant,\n      text: \"Distribution Lists\",\n    },\n  ];\n\n  const rdSubLinks: INavigationLinkProps[] = [\n    {\n      icon: DistributionListIcon,\n      source: `/${tenant.toLowerCase()}/${SideNavLinksEnum.DL}`,\n      tenant: tenant,\n      text: \"Distribution Lists\",\n    },\n  ];\n\n  const subLinks = tenant === TenantTypesEnum.MVP ? mvpSubLinks : rdSubLinks;\n\n  return {\n    icon: DistributionListIcon,\n    source: `/${tenant}/distributionLists`,\n    tenant: tenant,\n    text: \"DLs\",\n    subLinks,\n  };\n};\n\nexport const sideNavigationByRoles = {\n  [RolesEnum.MVP_PROGRAM_OWNER]: [\n    SideNavLinksEnum.HEADER,\n    SideNavLinksEnum.USERS,\n    SideNavLinksEnum.REVIEW,\n    SideNavLinksEnum.ACCESS,\n    SideNavLinksEnum.AWARDCATEGORIES,\n    SideNavLinksEnum.BENEFITS,\n    SideNavLinksEnum.DL,\n  ],\n  [RolesEnum.MVP_REVIEWER]: [\n    SideNavLinksEnum.HEADER,\n    SideNavLinksEnum.USERS,\n    SideNavLinksEnum.REVIEW,\n    SideNavLinksEnum.ACCESS,\n    SideNavLinksEnum.BENEFITS,\n    SideNavLinksEnum.DL,\n  ],\n  [RolesEnum.MVP_TECH_AREA_VALIDATOR]: [\n    SideNavLinksEnum.HEADER,\n    SideNavLinksEnum.USERS,\n    SideNavLinksEnum.REVIEW,\n    SideNavLinksEnum.DL,\n  ],\n  [RolesEnum.MVP_BENEFITS_MANAGER]: [\n    SideNavLinksEnum.HEADER,\n    SideNavLinksEnum.USERS,\n    SideNavLinksEnum.REVIEW,\n    SideNavLinksEnum.BENEFITS,\n    SideNavLinksEnum.DL,\n  ],\n  [RolesEnum.MVP_BUSINESS_GROUP]: [\n    SideNavLinksEnum.HEADER,\n    SideNavLinksEnum.USERS,\n    SideNavLinksEnum.REVIEW,\n    SideNavLinksEnum.ACCESS,\n    SideNavLinksEnum.DL,\n  ],\n  [RolesEnum.MVP_EXECUTIVE]: [SideNavLinksEnum.HEADER, SideNavLinksEnum.REVIEW],\n  [RolesEnum.MSA_PROGRAM_OWNER]: [\n    SideNavLinksEnum.HEADER,\n    SideNavLinksEnum.USERS,\n    SideNavLinksEnum.EVENTS,\n    SideNavLinksEnum.APPLICATIONS,\n    SideNavLinksEnum.ACCESS,\n    SideNavLinksEnum.BENEFITS,\n  ],\n  [RolesEnum.MSA_REVIEWER]: [\n    SideNavLinksEnum.HEADER,\n    SideNavLinksEnum.USERS,\n    SideNavLinksEnum.EVENTS,\n    SideNavLinksEnum.APPLICATIONS,\n    SideNavLinksEnum.BENEFITS,\n  ],\n  [RolesEnum.MSA_BENEFITS_MANAGER]: [\n    SideNavLinksEnum.HEADER,\n    SideNavLinksEnum.USERS,\n    SideNavLinksEnum.BENEFITS,\n  ],\n  [RolesEnum.MSA_GUEST]: [SideNavLinksEnum.HEADER],\n  [RolesEnum.RD_PROGRAM_OWNER]: [\n    SideNavLinksEnum.HEADER,\n    SideNavLinksEnum.USERS,\n    SideNavLinksEnum.APPLICATIONS,\n    SideNavLinksEnum.ACCESS,\n    SideNavLinksEnum.BENEFITS,\n    SideNavLinksEnum.DL,\n  ],\n  [RolesEnum.RD_REVIEWER]: [\n    SideNavLinksEnum.HEADER,\n    SideNavLinksEnum.USERS,\n    SideNavLinksEnum.APPLICATIONS,\n    SideNavLinksEnum.BENEFITS,\n    SideNavLinksEnum.DL,\n  ],\n  [RolesEnum.RD_BENEFITS_MANAGER]: [\n    SideNavLinksEnum.HEADER,\n    SideNavLinksEnum.USERS,\n    SideNavLinksEnum.BENEFITS,\n    SideNavLinksEnum.DL,\n  ],\n  [RolesEnum.RD_GUEST]: [SideNavLinksEnum.HEADER, SideNavLinksEnum.APPLICATIONS],\n};\n\nconst getLink = (program: string, linkType: string, role: string): INavigationLinkProps => {\n  if (program === \"MSA\") program = \"MLSA\";\n\n  switch (linkType) {\n    case SideNavLinksEnum.HEADER:\n      if (program === TenantTypesEnum.MLSA) return headerLink(MLSAIcon, program);\n      if (program === TenantTypesEnum.MVP) return headerLink(MVPIcon, program);\n      if (program === TenantTypesEnum.RD) return headerLink(RDIcon, program);\n      break;\n    case SideNavLinksEnum.USERS:\n      return usersLink(program as TenantTypesEnum);\n    case SideNavLinksEnum.EVENTS:\n      return eventsLink(program as TenantTypesEnum);\n    case SideNavLinksEnum.APPLICATIONS:\n      return applicationsLink(program as TenantTypesEnum);\n    case SideNavLinksEnum.REVIEW:\n      return reviewLink(program as TenantTypesEnum, role as RolesEnum);\n    case SideNavLinksEnum.ACCESS:\n      return accessControlLink(program as TenantTypesEnum);\n    case SideNavLinksEnum.AWARDCATEGORIES:\n      return awardCategoriesLink(program as TenantTypesEnum);\n    case SideNavLinksEnum.BENEFITS:\n      return benefitsLink(program as TenantTypesEnum);\n    case SideNavLinksEnum.DL:\n      return distributionListsLink(program as TenantTypesEnum);\n  }\n\n  return {\n    icon: \"\",\n    source: \"/\",\n    tenant: \"\",\n    text: \"Home\",\n  };\n};\n\nexport const getSideNavigationLinksForUser = (roles: string[]): INavigationLinkProps[] => {\n  const links: INavigationLinkProps[] = [];\n  if (!roles) return links;\n  roles.sort();\n  roles.forEach((role: string) => {\n    const roleMatch = role.match(/(\\w+)-(.+)/);\n    if (roleMatch) {\n      const tenant = roleMatch[1].toUpperCase();\n      sideNavigationByRoles[role]?.forEach((linkType: string) => {\n        const link: INavigationLinkProps = getLink(tenant, linkType, role);\n        const index = links.findIndex((l) => link.source === l.source);\n        if (index === -1) {\n          links.push(link);\n        } else if (!!links[index].subLinks && !!link.subLinks) {\n          links[index].subLinks = _.unionBy(links[index].subLinks, link.subLinks, \"source\");\n        }\n      });\n    }\n  });\n\n  return links;\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { ReactElement } from \"react\";\n\nimport { useAuth } from \"Authentication/AuthProvider\";\nimport SideNavigation from \"Components/SideNavigation/SideNavigation\";\nimport { getSideNavigationLinksForUser } from \"Constants/SideNavigationLinks\";\n\nconst SideNavigationContainer = (): ReactElement => {\n  const { roles, hasAnyRoles } = useAuth();\n  return hasAnyRoles ? <SideNavigation links={getSideNavigationLinksForUser(roles)} /> : <></>;\n};\n\nexport default SideNavigationContainer;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { ReactElement } from \"react\";\n\nimport { Redirect } from \"react-router-dom\";\n\nimport { Text } from \"@fluentui/react\";\n\nimport { useAuth } from \"Authentication/AuthProvider\";\nimport { DetailWrapper } from \"Containers/Common/CommonContainer.styles\";\n\nconst StudentHomeContainer = (): ReactElement => {\n  const { isUserLoggedIn, loading, hasAnyRoles } = useAuth();\n  if (isUserLoggedIn && !hasAnyRoles && !loading) {\n    return <Redirect to=\"/unauthorized\" />;\n  }\n  return (\n    <DetailWrapper>\n      <div>\n        <Text>Students Admin Landing</Text>\n      </div>\n      <div>\n        <Text>Please choose a sub menu</Text>\n      </div>\n    </DetailWrapper>\n  );\n};\n\nexport default StudentHomeContainer;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React from \"react\";\n\nimport { connect } from \"react-redux\";\nimport { useHistory } from \"react-router-dom\";\nimport { bindActionCreators, Dispatch } from \"redux\";\n\nimport Pagination from \"rc-pagination\";\n\nimport {\n  DetailsList,\n  DetailsListLayoutMode,\n  Dropdown,\n  IColumn,\n  IDetailsRowProps,\n  SelectionMode,\n  Spinner,\n  SpinnerSize,\n} from \"@fluentui/react\";\n\nimport * as UserProfileActions from \"Dataflows/UserProfile/UserProfileAction\";\n\nimport ChevronIcon from \"Components/Common/ChevronIcon/ChevronIcon\";\nimport {\n  detailListStyles,\n  spinnerStyles,\n  StyledSpan,\n} from \"Components/Common/SharedListStyles.styles\";\nimport StatusElement from \"Components/Common/Status/StatusElement\";\nimport { AppState } from \"Dataflows/Reducers\";\nimport {\n  getCurrentPage,\n  getPageSize,\n  getSearchText,\n  isUserProfilesLoading,\n} from \"Dataflows/UserProfile/UserProfileSelector\";\n\nimport { PaginationRow } from \"../Common/Pagination/Pagination.styles\";\nimport \"../Common/Pagination/Pagination.styles.css\";\nimport { IStudentListItem } from \"./Interfaces/IStudentListItem\";\nimport { IStudentListProps } from \"./Interfaces/IStudentListProps\";\n\n/**\n * List of student profiles\n * @Component\n * @returns {React.FunctionComponent<IStudentListProps>}\n */\nconst StudentList: React.FunctionComponent<IStudentListProps> = (props: IStudentListProps) => {\n  const history = useHistory();\n  const { actions, data, filteredCount, isUserProfilesLoading, currentPage, pageSize } = props;\n  const studentProfilesToRender = data.slice(0, pageSize);\n\n  const formatStatusColumn = (statusKey: string): React.ReactElement => {\n    return <StatusElement statusValue={statusKey} />;\n  };\n\n  const columns: IColumn[] = [\n    {\n      key: \"id\",\n      name: \"ID\",\n      ariaLabel: \"Student ID\",\n      fieldName: \"id\",\n      minWidth: 20,\n      maxWidth: 36,\n      isResizable: true,\n    },\n    {\n      key: \"firstName\",\n      name: \"First Name\",\n      ariaLabel: \"Student's first name\",\n      fieldName: \"firstName\",\n      minWidth: 70,\n      maxWidth: 100,\n      isResizable: true,\n    },\n    {\n      key: \"lastName\",\n      name: \"Last Name\",\n      ariaLabel: \"Student's last name\",\n      fieldName: \"lastName\",\n      minWidth: 70,\n      maxWidth: 100,\n      isResizable: true,\n    },\n    {\n      key: \"primaryEmail\",\n      name: \"Primary Email\",\n      ariaLabel: \"Student's email address\",\n      fieldName: \"primaryEmail\",\n      minWidth: 120,\n      maxWidth: 180,\n      isResizable: true,\n    },\n    {\n      key: \"studentPartnerEmail\",\n      name: \"Student Ambassadors Email\",\n      ariaLabel: \"Student ambassadors email address\",\n      fieldName: \"studentPartnerEmail\",\n      minWidth: 120,\n      maxWidth: 180,\n      isResizable: true,\n    },\n    {\n      key: \"cpm\",\n      name: \"CPM\",\n      ariaLabel: \"Community Program Manager\",\n      fieldName: \"cpm\",\n      minWidth: 120,\n      maxWidth: 180,\n      isResizable: true,\n    },\n    {\n      key: \"level\",\n      name: \"Milestone\",\n      ariaLabel: \"Student's Milestone\",\n      fieldName: \"levelStatus.id\",\n      onRender: (item: any) => (item as IStudentListItem).levelStatus?.levelName,\n      minWidth: 65,\n      maxWidth: 80,\n      isResizable: true,\n    },\n    {\n      key: \"applicationStatus\",\n      name: \"Application Status\",\n      ariaLabel: \"Invitation status\",\n      fieldName: \"application.applicationStatus\",\n      onRender: (item: any) =>\n        formatStatusColumn((item as IStudentListItem).application?.applicationStatus),\n      minWidth: 75,\n      maxWidth: 80,\n      isResizable: true,\n    },\n    {\n      key: \"programProfileStatusName\",\n      name: \"Program Status\",\n      ariaLabel: \"Program status\",\n      fieldName: \"programProfileStatusName\",\n      onRender: (item: any) =>\n        formatStatusColumn((item as IStudentListItem).programProfileStatusName),\n      minWidth: 60,\n      maxWidth: 80,\n      isResizable: true,\n    },\n  ];\n\n  const onClickStudentProfile = (studentId: number): void => {\n    actions.updateSelectedUserProfileId(studentId);\n    history.push(`/mlsa/details/${studentId}`);\n  };\n\n  const onRenderColumn = (\n    item: IStudentListItem,\n    index?: number,\n    column?: IColumn\n  ): React.ReactElement => {\n    const fieldContent = item[column?.fieldName as keyof IStudentListItem] as string;\n\n    if (column?.key == \"id\") {\n      return <StyledSpan>{fieldContent}</StyledSpan>;\n    }\n    return <span>{fieldContent}</span>;\n  };\n\n  const onRenderRow = (props?: IDetailsRowProps, defaultRender?: any): React.ReactElement => {\n    const studentId = (props!.item as IStudentListItem).id;\n    return defaultRender!({\n      ...props,\n      onClick: () => onClickStudentProfile(studentId),\n    });\n  };\n\n  if (isUserProfilesLoading) {\n    return <Spinner size={SpinnerSize.large} styles={spinnerStyles} />;\n  }\n\n  return (\n    <>\n      <DetailsList\n        items={studentProfilesToRender}\n        columns={columns}\n        selectionMode={SelectionMode.none}\n        getKey={(item: any): string => `${(item as IStudentListItem).id}`}\n        setKey=\"none\"\n        layoutMode={DetailsListLayoutMode.fixedColumns}\n        isHeaderVisible={true}\n        styles={detailListStyles}\n        onRenderRow={onRenderRow}\n        onRenderItemColumn={onRenderColumn}\n        enterModalSelectionOnTouch={true}\n      />\n      <PaginationRow>\n        <Pagination\n          total={filteredCount}\n          onChange={(page) => actions.updateCurrentPage(page)}\n          showTitle={false}\n          current={currentPage}\n          prevIcon={ChevronIcon(\"ChevronLeft\")}\n          nextIcon={ChevronIcon(\"ChevronRight\")}\n          pageSize={pageSize}\n          showSizeChanger\n        />\n        <Dropdown\n          options={[\n            { key: 16, text: \"Show 16 results\" },\n            { key: 32, text: \"Show 32 results\" },\n            { key: 48, text: \"Show 48 results\" },\n          ]}\n          onChange={(_e, op): void => {\n            actions.updatePageSize(op?.key as number);\n          }}\n          selectedKey={pageSize}\n          className=\"pagination-dropdown\"\n          title=\"Page Size Dropdown\"\n        />\n      </PaginationRow>\n    </>\n  );\n};\n\n/**\n * Maps StudentsContainer to redux state\n * @param {AppState} state The App state.\n */\nconst mapStateToProps = (state: AppState, ownProps: IStudentListProps & any) => ({\n  data: ownProps.data,\n  isUserProfilesLoading: isUserProfilesLoading(state.userProfileState),\n  currentPage: getCurrentPage(state.userProfileState),\n  pageSize: getPageSize(state.userProfileState),\n  searchText: getSearchText(state.userProfileState),\n});\n\n/**\n * Maps Component's dispatch/handler props to redux state\n * @param {Dispatch} dispatch The dispatch.\n */\nconst mapDispatchToProps = (dispatch: Dispatch<UserProfileActions.UserProfileActionTypes>) => ({\n  actions: {\n    updateCurrentPage: bindActionCreators(UserProfileActions.updateCurrentPage, dispatch),\n    updatePageSize: bindActionCreators(UserProfileActions.updatePageSize, dispatch),\n    updateSelectedUserProfileId: bindActionCreators(\n      UserProfileActions.updateSelectedUserProfileId,\n      dispatch\n    ),\n  },\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(StudentList);\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport {\n  ALLOWED_FILE_SIZE_MB,\n  INVALID_FILE,\n  INVALID_FILE_SIZE,\n  VALID_FILE_TYPES,\n} from \"Constants/ProfileConstants\";\n\n/**\n * validate the uploaded File.\n */\nexport const validateFileUpload = (event: React.ChangeEvent<HTMLInputElement>): string => {\n  let response = \"\";\n  const files = event.currentTarget.files;\n\n  if (files) {\n    const typeParts = files[0].type.split(\"/\");\n    const type = typeParts.length > 1 ? typeParts[1] : undefined;\n    const size = files[0].size / 1024 / 1024; // Convert size to MB\n\n    if (!type || !VALID_FILE_TYPES.includes(type)) {\n      response = INVALID_FILE;\n    } else if (size > ALLOWED_FILE_SIZE_MB) {\n      response = INVALID_FILE_SIZE;\n    }\n  }\n\n  return response;\n};\n\n/**\n * convert Csv file ToBase64.\n */\nexport const convertCsvToBase64 = (file: File): Promise<string> => {\n  return new Promise((resolve, reject) => {\n    const reader = new FileReader();\n    reader.readAsDataURL(file);\n    reader.onload = () => {\n      const binaryString = reader.result as string;\n\n      //This line processes the binaryString to extract just the Base64 portion.\n      const base64String = binaryString.replace(\"data:\", \"\").replace(/^.+,/, \"\");\n      resolve(base64String);\n    };\n    reader.onerror = (error) => reject(error);\n  });\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { AppState } from \"Dataflows/Reducers\";\nimport {\n  ISubmitCsvFileStatus,\n  IUploadCsvFileValidation,\n} from \"Interfaces/SA/IUploadCSVFileRequest\";\n\nexport const getState = (state: AppState): AppState => state;\n\n/**\n * Returns state of csv upload\n * @param appState\n * @returns {boolean}\n */\nexport const getCsvUploadState = (state: AppState): boolean =>\n  state.saRegistrationStatusState.isUploading;\n\n/**\n * Returns state of validation Response\n * @param appState\n * @returns {IUploadCsvFileValidation}\n */\nexport const getCsvUploadErrors = (state: AppState): IUploadCsvFileValidation =>\n  state.saRegistrationStatusState.validationResponse;\n\n/**\n * Returns state of submit Response\n * @param appState\n * @returns {ISubmitCsvFileStatus}\n */\nexport const getCsvSubmitStatus = (state: AppState): ISubmitCsvFileStatus =>\n  state.saRegistrationStatusState.submitResponse;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { getTheme, FontWeights, ICommandBarStyles } from \"@fluentui/react\";\n\nconst theme = getTheme();\n/**\n * Styling for file upload container\n */\nexport const fileUploadContainer: React.CSSProperties = {\n  display: \"flex\",\n  alignItems: \"center\",\n  margin: \"5px\",\n};\n\n/**\n * Styling for file input\n */\nexport const fileInputs: React.CSSProperties = {\n  height: \"30px\",\n  width: \"250px\",\n  border: \"1px solid #ccc\",\n};\n\n/**\n * Styling for icon button\n */\nexport const iconButton: ICommandBarStyles = {\n  root: {\n    height: \"30px\",\n    borderRadius: \"0\",\n    color: \"white\",\n    backgroundColor: \"DodgerBlue\",\n    border: \"none\",\n    margin: \"4px 4px\",\n    cursor: \"pointer\",\n  },\n};\n\n/**\n * Styling for text\n */\nexport const summaryText: React.CSSProperties = {\n  color: \"green\",\n  lineHeight: \"0\",\n};\n\n/**\n * Styling for text\n */\nexport const errorText: React.CSSProperties = {\n  color: \"red\",\n  lineHeight: \"0\",\n};\n\n/**\n * Styling for the command bar extra margin\n */\nexport const updateCommandBarStyles = (): ICommandBarStyles => {\n  return {\n    root: {\n      margin: \"0 23px\",\n    },\n  };\n};\n\n/**\n * Styling for the command bar\n */\nexport const commandBarStyles: ICommandBarStyles = {\n  root: {\n    borderRadius: \"8px\",\n    boxShadow: \" 0px 1px 4px rgba(0, 0, 0, 0.2)\",\n    margin: \"1rem 0 1rem\",\n    padding: \"0.75rem\",\n    selectors: {\n      [\"button\"]: {\n        marginRight: \"36px\",\n      },\n      [\".ms-Button-label\"]: {\n        fontSize: \"14px\",\n        fontWeight: FontWeights.semibold,\n      },\n      [\"i[data-icon-name='Blocked']\"]: {\n        color: theme.palette.red,\n      },\n    },\n  },\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { ReactElement, useEffect, useRef, useState } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { Button } from \"react-bootstrap\";\nimport {\n  Checkbox,\n  IconButton,\n  Spinner,\n  SpinnerSize,\n  Stack,\n  StackItem,\n  Text,\n} from \"@fluentui/react\";\n\nimport { SidePanel } from \"Components/SidePanel/SidePanel\";\n\nimport { IUpdateSARegistrationStatusSidePanelProps } from \"./IUpdateSARegistrationStatusSidePanelProps\";\nimport { ISubmitCSVFileRequest, IUploadCSVFileRequest } from \"Interfaces/SA/IUploadCSVFileRequest\";\nimport { IUploadCsvFileValidation } from \"Interfaces/SA/IUploadCSVFileRequest\";\n\nimport { constructCsvDownload } from \"Utility/DownloadHelper\";\nimport { convertCsvToBase64, validateFileUpload } from \"Utility/FileUploadHelper\";\n\nimport {\n  submitCsvFile,\n  uploadCsvFile,\n  uploadCsvFileReset,\n} from \"Dataflows/SA/UpdateSARegistrationStatus/UpdateSARegistrationStatusAction\";\nimport {\n  getCsvUploadState,\n  getCsvUploadErrors,\n  getCsvSubmitStatus,\n} from \"Dataflows/SA/UpdateSARegistrationStatus/UpdateSARegistrationStatusSelector\";\nimport { MLSA_APPLICATION_STATUS_TEMPLATE } from \"Constants/ProfileConstants\";\nimport {\n  errorText,\n  fileInputs,\n  fileUploadContainer,\n  iconButton,\n  summaryText,\n} from \"Components/UpdateSARegistrationStatus/UpdateSARegistrationStatus.styles\";\n\n/**\n * Update Student Ambassador Registration component.\n * @param {IUpdateSARegistrationStatusSidePanelProps} props the component props.\n * @returns {ReactElement} the component element.\n */\nexport const UpdateSARegistrationStatusSidePanel = (\n  props: IUpdateSARegistrationStatusSidePanelProps\n): ReactElement => {\n  const dispatch = useDispatch();\n\n  const { isPanelOpen, setIsPanelOpen } = props;\n  const fileInputRef = useRef<HTMLInputElement>(null);\n  const [fileUploadError, setFileUploadError] = useState<string>(\"\");\n  const [selectedFileName, setSelectedFileName] = useState(\"\");\n  const isUploading = useSelector(getCsvUploadState);\n  const csvError: IUploadCsvFileValidation = useSelector(getCsvUploadErrors);\n  const isSubmitted = useSelector(getCsvSubmitStatus);\n\n  const [shouldTriggerEmail, setShouldTriggerEmail] = useState(true);\n\n  /**\n   * reset State function.\n   */\n  const resetState = (): void => {\n    dispatch(uploadCsvFileReset());\n  };\n\n  /**\n   * dismiss Panel function.\n   */\n  const dismissPanel = (): void => {\n    setIsPanelOpen(false);\n    resetState();\n  };\n\n  useEffect(() => dismissPanel, [isSubmitted]);\n\n  /**\n   * On click of submit.\n   */\n  const onClickOfSubmit = () => {\n    const request: ISubmitCSVFileRequest = {\n      fileId: csvError.fileId,\n      skipTransactionalEmail: shouldTriggerEmail,\n    };\n    dispatch(submitCsvFile(request));\n  };\n\n  /**\n   * handle Download Static CSV.\n   */\n  const handleDownloadStaticCSV = (): void => {\n    constructCsvDownload(MLSA_APPLICATION_STATUS_TEMPLATE, \"MLSA_Application_Status_Template.csv\");\n  };\n\n  /**\n   * handle File upload Change.\n   */\n  const handleFileChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n    setFileUploadError(\"\");\n    resetState();\n    const errorMessage = validateFileUpload(event);\n    if (errorMessage) {\n      setFileUploadError(errorMessage);\n    } else {\n      const file = event.target.files;\n      if (file && file.length > 0) {\n        setSelectedFileName(file[0].name);\n        convertCsvToBase64(file[0])\n          .then((base64String) => {\n            const request: IUploadCSVFileRequest = { CsvBase64: base64String };\n            dispatch(uploadCsvFile(request));\n          })\n          .catch((error) => {\n            setFileUploadError(\"Error converting file\");\n          });\n      }\n    }\n  };\n\n  return (\n    <form id=\"sdf\">\n      <SidePanel\n        isOpen={isPanelOpen}\n        title=\"Update Registration Status\"\n        saveButtonLabel=\"Submit\"\n        disableActions={!csvError.isValid}\n        onDismiss={dismissPanel}\n        onSave={() => onClickOfSubmit()}\n      >\n        <Stack tokens={{ childrenGap: \"1rem\" }}>\n          <StackItem align=\"start\">\n            <Text>\n              Follow the steps below to update Student Ambassadors registration status. Please note{\" \"}\n              <strong>this action will trigger a transactional communication</strong> to users with\n              an updated status.\n            </Text>\n          </StackItem>\n          <StackItem>\n            <Text>1. Download CSV template (optional)</Text>\n            <StackItem>\n              <Button onClick={handleDownloadStaticCSV}>Download</Button>\n            </StackItem>\n          </StackItem>\n          <StackItem>\n            <Text>2. Edit your CSV file</Text>\n          </StackItem>\n          <StackItem>\n            <Text>3. Upload your CSV file</Text>\n            <br />\n            <div style={fileUploadContainer}>\n              <input\n                type=\"text\"\n                placeholder=\"Select a file\"\n                style={fileInputs}\n                value={selectedFileName}\n                readOnly\n              />\n              <IconButton\n                disabled={isUploading}\n                styles={iconButton}\n                iconProps={{ iconName: \"FabricFolder\" }}\n                onClick={(): void => fileInputRef.current?.click()}\n                tabIndex={0}\n              ></IconButton>\n              <input\n                hidden\n                id=\"base64str\"\n                name=\"base64str\"\n                type=\"file\"\n                accept=\".csv\"\n                ref={fileInputRef}\n                multiple={false}\n                onChange={handleFileChange}\n              />\n              {isUploading && <Spinner size={SpinnerSize.small} />}\n            </div>\n            <div style={errorText}>{fileUploadError}</div>\n          </StackItem>\n          <StackItem>\n            <Checkbox\n              label=\"Do not trigger a transactional communication\"\n              checked={shouldTriggerEmail}\n              onChange={() => setShouldTriggerEmail(!shouldTriggerEmail)}\n            />\n          </StackItem>\n          {csvError.summary.length > 0 && (\n            <StackItem style={summaryText}>\n              {csvError.summary.map((item: string, index) => {\n                return <p key={\"summary\" + index}>{item}</p>;\n              })}\n            </StackItem>\n          )}\n          {csvError.errors.length > 0 && (\n            <StackItem style={errorText}>\n              {csvError.errors.map((item: string, index) => {\n                return <p key={\"errors\" + index}>{item}</p>;\n              })}\n            </StackItem>\n          )}\n        </Stack>\n      </SidePanel>\n    </form>\n  );\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport { AppState } from \"Dataflows/Reducers\";\nimport {\n  ISubmitCsvFileStatus,\n  IUploadCsvFileValidation,\n} from \"Interfaces/SA/IUploadCSVFileRequest\";\n\nexport const getState = (state: AppState): AppState => state;\n\n/**\n * Returns state of csv upload\n * @param appState\n * @returns {boolean}\n */\nexport const getCsvUploadState = (state: AppState): boolean =>\n  state.saProgramStatusState.isUploading;\n\n/**\n * Returns state of validation Response\n * @param appState\n * @returns {IUploadCsvFileValidation}\n */\nexport const getCsvUploadErrors = (state: AppState): IUploadCsvFileValidation =>\n  state.saProgramStatusState.validationResponse;\n\n/**\n * Returns state of submit Response\n * @param appState\n * @returns {ISubmitCsvFileStatus}\n */\nexport const getCsvSubmitStatus = (state: AppState): ISubmitCsvFileStatus =>\n  state.saProgramStatusState.submitResponse;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { ReactElement, useEffect, useRef, useState } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { Button } from \"react-bootstrap\";\nimport { IconButton, Spinner, SpinnerSize, Stack, StackItem, Text } from \"@fluentui/react\";\n\nimport { SidePanel } from \"Components/SidePanel/SidePanel\";\n\nimport { IUpdateSAProgramStatusSidePanelProps } from \"./IUpdateSAProgramStatusSidePanelProps\";\nimport { ISubmitCSVFileRequest, IUploadCSVFileRequest } from \"Interfaces/SA/IUploadCSVFileRequest\";\nimport { IUploadCsvFileValidation } from \"Interfaces/SA/IUploadCSVFileRequest\";\n\nimport { constructCsvDownload } from \"Utility/DownloadHelper\";\nimport { convertCsvToBase64, validateFileUpload } from \"Utility/FileUploadHelper\";\n\nimport {\n  submitCsvFile,\n  uploadCsvFile,\n  uploadCsvFileReset,\n} from \"Dataflows/SA/UpdateSAProgramStatus/UpdateSAProgramStatusAction\";\nimport {\n  getCsvUploadState,\n  getCsvUploadErrors,\n  getCsvSubmitStatus,\n} from \"Dataflows/SA/UpdateSAProgramStatus/UpdateSAProgramStatusSelector\";\nimport { MLSA_PROGRAM_STATUS_TEMPLATE } from \"Constants/ProfileConstants\";\nimport {\n  errorText,\n  fileInputs,\n  fileUploadContainer,\n  iconButton,\n  summaryText,\n} from \"Components/UpdateSARegistrationStatus/UpdateSARegistrationStatus.styles\";\n\n/**\n * Update Student Ambassador Program component.\n * @param {IUpdateSAProgramStatusSidePanelProps} props the component props.\n * @returns {ReactElement} the component element.\n */\nexport const UpdateSAProgramStatusSidePanel = (\n  props: IUpdateSAProgramStatusSidePanelProps\n): ReactElement => {\n  const dispatch = useDispatch();\n\n  const { isPanelOpen, setIsPanelOpen } = props;\n  const fileInputRef = useRef<HTMLInputElement>(null);\n  const [fileUploadError, setFileUploadError] = useState<string>(\"\");\n  const [selectedFileName, setSelectedFileName] = useState(\"\");\n  const isUploading = useSelector(getCsvUploadState);\n  const csvError: IUploadCsvFileValidation = useSelector(getCsvUploadErrors);\n  const isSubmitted = useSelector(getCsvSubmitStatus);\n\n  /**\n   * reset State function.\n   */\n  const resetState = (): void => {\n    dispatch(uploadCsvFileReset());\n  };\n\n  /**\n   * dismiss Panel function.\n   */\n  const dismissPanel = (): void => {\n    setIsPanelOpen(false);\n    resetState();\n  };\n\n  useEffect(() => dismissPanel, [isSubmitted]);\n\n  /**\n   * On click of submit.\n   */\n  const onClickOfSubmit = () => {\n    const request: ISubmitCSVFileRequest = { fileId: csvError.fileId };\n    dispatch(submitCsvFile(request));\n  };\n\n  /**\n   * handle Download Static CSV.\n   */\n  const handleDownloadStaticCSV = (): void => {\n    constructCsvDownload(MLSA_PROGRAM_STATUS_TEMPLATE, \"MLSA_Program_Status_Template.csv\");\n  };\n\n  /**\n   * handle File upload Change.\n   */\n  const handleFileChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n    setFileUploadError(\"\");\n    resetState();\n    const errorMessage = validateFileUpload(event);\n    if (errorMessage) {\n      setFileUploadError(errorMessage);\n    } else {\n      const file = event.target.files;\n      if (file && file.length > 0) {\n        setSelectedFileName(file[0].name);\n        convertCsvToBase64(file[0])\n          .then((base64String) => {\n            const request: IUploadCSVFileRequest = { CsvBase64: base64String };\n            dispatch(uploadCsvFile(request));\n          })\n          .catch((error) => {\n            setFileUploadError(\"Error converting file\");\n          });\n      }\n    }\n  };\n\n  return (\n    <form id=\"sdf\">\n      <SidePanel\n        isOpen={isPanelOpen}\n        title=\"Update Program Status\"\n        saveButtonLabel=\"Submit\"\n        disableActions={!csvError.isValid}\n        onDismiss={dismissPanel}\n        onSave={() => onClickOfSubmit()}\n      >\n        <Stack tokens={{ childrenGap: \"1rem\" }}>\n          <StackItem align=\"start\">\n            <Text>\n              Follow the steps below to update Student Ambassadors Program status.{\" \"}\n              <strong>Please note this action DOES NOT trigger transactional email..</strong>\n            </Text>\n          </StackItem>\n          <StackItem>\n            <Text>1. Download CSV template (optional)</Text>\n            <StackItem>\n              <Button onClick={handleDownloadStaticCSV}>Download</Button>\n            </StackItem>\n          </StackItem>\n          <StackItem>\n            <Text>2. Edit your CSV file</Text>\n          </StackItem>\n          <StackItem>\n            <Text>3. Upload your CSV file</Text>\n            <br />\n            <div style={fileUploadContainer}>\n              <input\n                type=\"text\"\n                placeholder=\"Select a file\"\n                style={fileInputs}\n                value={selectedFileName}\n                readOnly\n              />\n              <IconButton\n                disabled={isUploading}\n                styles={iconButton}\n                iconProps={{ iconName: \"FabricFolder\" }}\n                onClick={(): void => fileInputRef.current?.click()}\n                tabIndex={0}\n              ></IconButton>\n              <input\n                hidden\n                id=\"base64str\"\n                name=\"base64str\"\n                type=\"file\"\n                accept=\".csv\"\n                ref={fileInputRef}\n                multiple={false}\n                onChange={handleFileChange}\n              />\n              {isUploading && <Spinner size={SpinnerSize.small} />}\n            </div>\n            <div style={errorText}>{fileUploadError}</div>\n          </StackItem>\n          {csvError.summary.length > 0 && (\n            <StackItem style={summaryText}>\n              {csvError.summary.map((item: string, index) => {\n                return <p key={\"summary\" + index}>{item}</p>;\n              })}\n            </StackItem>\n          )}\n          {csvError.errors.length > 0 && (\n            <StackItem style={errorText}>\n              {csvError.errors.map((item: string, index) => {\n                return <p key={\"errors\" + index}>{item}</p>;\n              })}\n            </StackItem>\n          )}\n        </Stack>\n      </SidePanel>\n    </form>\n  );\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { useState, ReactElement } from \"react\";\nimport { CommandBar, Stack } from \"@fluentui/react\";\nimport { UpdateSARegistrationStatusSidePanel } from \"Components/UpdateSARegistrationStatusSidePanel/UpdateSARegistrationStatusSidePanel\";\nimport { UpdateSAProgramStatusSidePanel } from \"Components/UpdateSAProgramStatusSidePanel/UpdateSAProgamStatusSidePanel\";\nimport {\n  updateCommandBarStyles,\n  commandBarStyles,\n} from \"Components/UpdateSARegistrationStatus/UpdateSARegistrationStatus.styles\";\n\n/**\n * Update Student Ambassador Registration Status.\n * @returns ReactElement\n */\nconst UpdateSARegistrationStatus = (): ReactElement => {\n  const [isPanelOpen, setIsPanelOpen] = useState(false);\n  const [isProgramStatusPanelOpen, setIsProgramStatusPanelOpen] = useState(false);\n\n  const updateRegistrationStatusClicked = (): void => {\n    setIsPanelOpen(true);\n  };\n\n  const updateProgramStatusClicked = (): void => {\n    setIsProgramStatusPanelOpen(true);\n  };\n\n  /**\n   * command Bar Items.\n   */\n  const commandBarItems = [\n    {\n      key: \"updateRegistrationStatus\",\n      text: \"Update Registration Status\",\n      iconProps: { iconName: \"Edit\" },\n      onClick: (): void => {\n        updateRegistrationStatusClicked();\n      },\n    },\n    {\n      key: \"updateProgramStatus\",\n      text: \"Update Program Status\",\n      iconProps: { iconName: \"Edit\" },\n      onClick: (): void => {\n        updateProgramStatusClicked();\n      },\n    },\n  ];\n\n  return (\n    <>\n      <Stack styles={updateCommandBarStyles}>\n        {\n          <CommandBar\n            items={commandBarItems}\n            ariaLabel=\"Update Registration Status\"\n            styles={commandBarStyles}\n          />\n        }\n      </Stack>\n      {isPanelOpen && (\n        <UpdateSARegistrationStatusSidePanel\n          isPanelOpen={isPanelOpen}\n          setIsPanelOpen={setIsPanelOpen}\n        />\n      )}\n      {isProgramStatusPanelOpen && (\n        <UpdateSAProgramStatusSidePanel\n          isPanelOpen={isProgramStatusPanelOpen}\n          setIsPanelOpen={setIsProgramStatusPanelOpen}\n        />\n      )}\n    </>\n  );\n};\n\nexport default UpdateSARegistrationStatus;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { useEffect, useState, ReactElement } from \"react\";\n\nimport { connect, useDispatch } from \"react-redux\";\nimport { withRouter } from \"react-router-dom\";\nimport { bindActionCreators, Dispatch } from \"redux\";\n\nimport { SearchBox, Stack } from \"office-ui-fabric-react/lib\";\n\nimport { PrimaryButton } from \"@fluentui/react\";\n\nimport * as UserProfileActions from \"Dataflows/UserProfile/UserProfileAction\";\nimport * as CommonDataActions from \"Dataflows/CommonData/CommonDataAction\";\n\nimport ListCounts from \"Components/Common/ListCounts/ListCounts\";\nimport { Title } from \"Components/Common/Results/Result.styles\";\nimport StudentList from \"Components/StudentList/StudentList\";\nimport UpdateSARegistrationStatus from \"Components/UpdateSARegistrationStatus/UpdateSARegistrationStatus\";\nimport {\n  defaultListingPageSize,\n  defaultMlsaFilterValues,\n  mlsaUserSidebarFilterFields,\n} from \"Constants/ProfileConstants\";\nimport { AppState } from \"Dataflows/Reducers\";\nimport {\n  getCurrentPage,\n  getFilteredCount,\n  getPageSize,\n  getSearchText,\n  getUserProfiles,\n  getUserProfilesFilterValues,\n  isUserProfilesLoading,\n} from \"Dataflows/UserProfile/UserProfileSelector\";\nimport { IFilterValue } from \"Interfaces/IFilterValue\";\n\nimport {\n  buttonStackTokens,\n  containerStackStyles,\n  filterButtonStyles,\n  listStackStyles,\n  searchBoxStyles,\n  tableStackStyles,\n  PaddedFlexRow,\n} from \"../Common/CommonContainer.styles\";\nimport SideBarContainer from \"../SideBarContainer/SideBarContainer\";\nimport { IStudentsContainerProps } from \"./IStudentsContainerProps\";\n\nimport { TenantTypesEnum } from \"Constants/TenantTypes\";\n\n/**\n * Students Container element that displays side bar filtering and result listing.\n * @FunctionComponent\n * @param {IStudentsContainerProps} props The side bar props.\n * @returns {React.FunctionComponent<IStudentsContainerProps>} The side bar component.\n */\nconst StudentsContainer: React.FunctionComponent<IStudentsContainerProps> = (\n  props: IStudentsContainerProps\n): ReactElement => {\n  const {\n    selectedUserProfilesFilterValues,\n    userProfiles,\n    isUserProfilesLoading,\n    currentPage,\n    pageSize,\n    filteredCount,\n    actions: {\n      addUserProfilesFilterValue,\n      removeUserProfilesFilterValue,\n      removeUserProfilesProvinceFilterValue,\n      searchUserProfiles,\n      updateUserProfilesFilterValue,\n      resetUserProfileFilterValue,\n    },\n  } = props;\n\n  const dispatch = useDispatch();\n\n  const [searchText, setSearchText] = useState(props.searchText);\n\n  /**\n   * Call to reset filter values.\n   * @method\n   */\n  const resetFilterValues = (): void => {\n    resetUserProfileFilterValue();\n\n    setSearchText(\"\");\n    searchUserProfiles(\"\", defaultMlsaFilterValues, 1, defaultListingPageSize);\n  };\n\n  useEffect(() => {\n    searchUserProfiles(searchText, selectedUserProfilesFilterValues, currentPage, pageSize);\n  }, [currentPage, pageSize]);\n\n  useEffect(() => {\n    dispatch(CommonDataActions.loadCommonData());\n  }, []);\n\n  /**\n   * Call search function for entered text.\n   * @method\n   * @param {string} searchValue The search text.\n   * @param {IFilterValue[]} selectedUserProfilesFilterValues The filter values.\n   * @param {number} page The fpage number.\n   * @returns {void}\n   */\n  const handleSearch = (\n    searchValue: string,\n    selectedUserProfilesFilterValues: IFilterValue[],\n    page: number,\n    pageSize: number\n  ): void => {\n    searchUserProfiles(searchValue, selectedUserProfilesFilterValues, page, pageSize);\n  };\n\n  const onClear = (_: any): void => {\n    searchUserProfiles(\"\", selectedUserProfilesFilterValues, 1, pageSize);\n  };\n\n  return (\n    <Stack horizontal styles={containerStackStyles}>\n      <Stack.Item disableShrink>\n        <SideBarContainer\n          addFilterValue={addUserProfilesFilterValue}\n          removeFilterValue={removeUserProfilesFilterValue}\n          updateFilterValue={updateUserProfilesFilterValue}\n          removeFilterProvinceValue={removeUserProfilesProvinceFilterValue}\n          selectedFilterValues={selectedUserProfilesFilterValues}\n          filterFields={mlsaUserSidebarFilterFields}\n          tenant={TenantTypesEnum.MSP}\n        />\n        <Stack horizontal tokens={buttonStackTokens}>\n          <PrimaryButton\n            styles={filterButtonStyles()}\n            text=\"Apply\"\n            onClick={(): void =>\n              handleSearch(searchText, selectedUserProfilesFilterValues, 1, pageSize)\n            }\n          />\n          <PrimaryButton styles={filterButtonStyles()} text=\"Reset\" onClick={resetFilterValues} />\n        </Stack>\n      </Stack.Item>\n      <Stack.Item grow styles={listStackStyles()}>\n        <Stack styles={tableStackStyles}>\n          <PaddedFlexRow>\n            <Title>Students</Title>\n            <ListCounts total={filteredCount} loading={isUserProfilesLoading} />\n          </PaddedFlexRow>\n          <SearchBox\n            placeholder=\"Search students\"\n            value={searchText}\n            onSearch={(searchValue: string): void =>\n              handleSearch(searchValue, selectedUserProfilesFilterValues, 1, pageSize)\n            }\n            onChange={(event?: React.ChangeEvent<HTMLInputElement>, newValue?: string): void =>\n              setSearchText(newValue || \"\")\n            }\n            onClear={onClear}\n            styles={searchBoxStyles}\n          />\n          <UpdateSARegistrationStatus />\n          <StudentList data={userProfiles} filteredCount={filteredCount} pageSize={pageSize} />\n        </Stack>\n      </Stack.Item>\n    </Stack>\n  );\n};\n\n/**\n * Maps StudentsContainer to redux state\n * @param {AppState} state The App state.\n */\nconst mapStateToProps = (state: AppState) => ({\n  userProfiles: getUserProfiles(state.userProfileState),\n  isUserProfilesLoading: isUserProfilesLoading(state.userProfileState),\n  currentPage: getCurrentPage(state.userProfileState),\n  pageSize: getPageSize(state.userProfileState),\n  searchText: getSearchText(state.userProfileState),\n  selectedUserProfilesFilterValues: getUserProfilesFilterValues(state.userProfileState),\n  filteredCount: getFilteredCount(state.userProfileState),\n});\n\n/**\n * Maps Component's dispatch/handler props to redux state\n * @param {Dispatch} dispatch The dispatch.\n */\nconst mapDispatchToProps = (dispatch: Dispatch<UserProfileActions.UserProfileActionTypes>) => ({\n  actions: {\n    loadCommonData: bindActionCreators(CommonDataActions.loadCommonData, dispatch),\n    searchUserProfiles: bindActionCreators(UserProfileActions.searchUserProfiles, dispatch),\n    addUserProfilesFilterValue: bindActionCreators(\n      UserProfileActions.addUserProfilesFilterValue,\n      dispatch\n    ),\n    removeUserProfilesFilterValue: bindActionCreators(\n      UserProfileActions.removeUserProfilesFilterValue,\n      dispatch\n    ),\n    removeUserProfilesProvinceFilterValue: bindActionCreators(\n      UserProfileActions.removeUserProfilesFilterProvinceValue,\n      dispatch\n    ),\n    updateUserProfilesFilterValue: bindActionCreators(\n      UserProfileActions.updateUserProfilesFilterValue,\n      dispatch\n    ),\n    resetUserProfileFilterValue: bindActionCreators(\n      UserProfileActions.resetUserProfileFilterValue,\n      dispatch\n    ),\n  },\n});\n\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(StudentsContainer));\n","/*!\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n */\r\n\r\nimport React from \"react\";\r\n\r\nimport { Link } from \"@fluentui/react\";\r\n\r\nimport { DetailWrapper } from \"Containers/Common/CommonContainer.styles\";\r\n\r\n/**\r\n * Unauthorized user Container.\r\n * @returns {React.ReactElement} rendered container\r\n */\r\nconst UnauthorizedContainer = (): React.ReactElement => {\r\n  return (\r\n    <DetailWrapper>\r\n      <div>\r\n        It seems like you are not authorized to view this page. Please contact one of the email\r\n        addresses below to resolve the issue.\r\n      </div>\r\n      <br />\r\n      <ul>\r\n        <li>\r\n          Student Ambassador Program:&nbsp;\r\n          <Link href=\"mailto:sa-help@microsoft.com\">sa-help@microsoft.com</Link>\r\n        </li>\r\n        <li>\r\n          MVP Program:&nbsp;<Link href=\"mailto:mvpga@microsoft.com\">mvpga@microsoft.com</Link>\r\n        </li>\r\n        <li>\r\n          RD Program:&nbsp;\r\n          <Link href=\"mailto:rd-program@microsoft.com\">rd-program@microsoft.com</Link>\r\n        </li>\r\n      </ul>\r\n    </DetailWrapper>\r\n  );\r\n};\r\n\r\nexport default UnauthorizedContainer;\r\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport styled from \"styled-components\";\n\nimport { getTheme, IStackStyles } from \"@fluentui/react\";\n\nconst theme = getTheme();\n\nexport const FlexRow = styled.div`\n  display: flex;\n  flex-direction: row;\n  background-color: #e5e5e5;\n  height: 100%;\n`;\n\nexport const Main = styled.div`\n  background-color: ${theme.palette.white};\n  overflow: visible;\n`;\n\nexport const Content = styled.div`\n  padding: 10px 10px 65px 10px;\n`;\n\nexport const header: Partial<IStackStyles> = {\n  root: {\n    height: \"56px\",\n  },\n};\n\nexport const headerContent: Partial<IStackStyles> = {\n  root: {},\n};\n\nexport const pageStyles: Partial<IStackStyles> = {\n  root: {\n    display: \"flex\",\n    flexFlow: \"row nowrap\",\n    height: \"calc(100vh - 56px)\", // Remaining height - header\n    backgroundColor: \"#ebebeb\",\n  },\n};\n\nexport const sideBarStyles: Partial<IStackStyles> = {\n  root: {\n    height: \"calc(100vh - 56px)\",\n    width: \"200px\",\n  },\n};\n\nexport const contentStyles: Partial<IStackStyles> = {\n  root: {\n    flex: \"1 0 auto\",\n    padding: \"10px\",\n    overflow: \"auto\",\n  },\n};\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n\nimport React, { ReactElement } from \"react\";\n\nimport { Route, Switch } from \"react-router-dom\";\n\nimport { initializeIcons } from \"office-ui-fabric-react/lib/Icons\";\n\nimport { Stack } from \"@fluentui/react\";\n\nimport Login from \"Authentication/Login\";\nimport PrivateRoute from \"Authentication/PrivateRoute\";\nimport DistributionListDetails from \"Components/DistributionListDetails/DistributionListDetails\";\nimport StudentDetails from \"Components/StudentDetails/StudentDetails\";\nimport { TenantTypesEnum } from \"Constants/TenantTypes\";\nimport AccessControlContainer from \"Containers/AccessControl/AccessControlContainer\";\nimport AccessControlCreateEditContainer from \"Containers/AccessControl/AccessControlCreateEditContainer/AccessControlCreateEditContainer\";\nimport ApplicationsContainer from \"Containers/Applications/ApplicationsContainer\";\nimport { IApplicationsContainerProps } from \"Containers/Applications/IApplicationsContainerProps\";\nimport AwardCategoriesContainer from \"Containers/AwardCategories/AwardCategoriesContainer\";\nimport AzureBenefitRequestDetailsContainer from \"Containers/Benefits/AzureBenefitRequestDetailsContainer/AzureBenefitRequestDetailsContainer\";\nimport AzureRequestsContainer from \"Containers/Benefits/AzureBenefitRequestsContainer/AzureBenefitRequestsContainer\";\nimport BenefitsContainer from \"Containers/Benefits/BenefitsContainer\";\nimport M365CopilotBenefitContainer from \"Containers/Benefits/M365CopilotBenefitContainer/M365CopilotBenefitContainer\";\nimport VisualStudioBenefitContainer from \"Containers/Benefits/VisualStudioBenefitContainer/VisualStudioBenefitContainer\";\nimport DemographicsContainer from \"Containers/Demographics/DemographicsContainer\";\nimport DistributionListRequestsContainer from \"Containers/DistributionLists/DistributionListRequestsContainer\";\nimport DistributionListsContainer from \"Containers/DistributionLists/DistributionListsContainer\";\nimport EventsContainer from \"Containers/Events/EventsContainer\";\nimport HomeContainer from \"Containers/Home/HomeContainer\";\nimport MvpEventContainer from \"Containers/MVP/Events/MvpEventContainer\";\nimport MvpHomeContainer from \"Containers/MVP/Home/MvpHomeContainer\";\nimport MostValuableProfessionalApplicationDetailsContainer from \"Containers/MVP/MostValuableProfessionalApplicationDetailsContainer/MostValuableProfessionalApplicationDetailsContainer\";\nimport MostValuableProfessionalDetailsContainer from \"Containers/MVP/MostValuableProfessionalDetailsContainer/MostValuableProfessionalDetailsContainer\";\nimport MostValuableProfessionalSearchContainer from \"Containers/MVP/MostValuableProfessionalSearchContainer\";\nimport NavigationContainer from \"Containers/Navigation/NavigationContainer\";\nimport PageNotFoundContainer from \"Containers/PageNotFound/PageNotFoundContainer\";\nimport RegionalDirectorsEventContainer from \"Containers/RD/Events/RegionalDirectorsEventsContainer\";\nimport RegionalDirectorsHomeContainer from \"Containers/RD/Home/RegionalDirectorsHomeContainer\";\nimport RegionalDirectorsDetailsContainer from \"Containers/RD/RegionalDirectorDetailsContainer/RegionalDirectorsDetailsContainer\";\nimport { RegionalDirectorsContainer } from \"Containers/RD/RegionalDirectorsContainer\";\nimport SideNavigationContainer from \"Containers/SideNavigation/SideNavigationContainer\";\nimport StudentHomeContainer from \"Containers/Students/Home/StudentHomeContainer\";\nimport StudentsContainer from \"Containers/Students/StudentsContainer\";\nimport UnauthorizedContainer from \"Containers/Unauthorized/UnauthorizedContainer\";\nimport { ai } from \"Services/TelemetryService\";\n\nimport {\n  contentStyles,\n  header,\n  headerContent,\n  pageStyles,\n  sideBarStyles,\n} from \"./AppContainer.styles\";\n\ninitializeIcons(\"https://res.cdn.office.net/files/fabric-cdn-prod_20240129.001/assets/icons/\");\n\n// Configure AppInsights for the application.\nai.initialize(process.env.REACT_APP_APPINSIGHTS_INSTRUMENTATION_KEY);\n\nconst AppContainer: React.FunctionComponent = () => {\n  return (\n    <>\n      <Stack styles={header}>\n        <Stack.Item styles={headerContent}>\n          <NavigationContainer /> {/* TOP NAVIGATION BAR */}\n        </Stack.Item>\n      </Stack>\n      <Stack styles={pageStyles}>\n        <Stack styles={sideBarStyles}>\n          <SideNavigationContainer /> {/* SIDE NAVIGATION BAR */}\n        </Stack>\n        <Stack styles={contentStyles}>\n          <Switch>\n            {/* Common Routes and Generic Routes */}\n            <Route exact path=\"/\" component={HomeContainer} />\n            <Route path=\"/login\" component={(): ReactElement => <Login />} />\n            <PrivateRoute\n              exact\n              path=\"/:tenant/access/addUser\"\n              component={(): ReactElement => <AccessControlCreateEditContainer />}\n            />\n            <PrivateRoute\n              exact\n              path=\"/:tenant/access/:id/edit\"\n              component={(): ReactElement => <AccessControlCreateEditContainer />}\n            />\n            <PrivateRoute\n              exact\n              path=\"/:tenant/benefits/visualStudio\"\n              component={(): ReactElement => <VisualStudioBenefitContainer />}\n            />\n            <PrivateRoute\n              exact\n              path=\"/:tenant/benefits/azureRequests/details/:id\"\n              component={(): ReactElement => <AzureBenefitRequestDetailsContainer />}\n            />\n            <PrivateRoute\n              exact\n              path=\"/:tenant/benefits/azureRequests\"\n              component={(): ReactElement => <AzureRequestsContainer />}\n            />\n            <PrivateRoute\n              exact\n              path=\"/:tenant/benefits/m365Copilot\"\n              component={(): ReactElement => <M365CopilotBenefitContainer />}\n            />\n            <PrivateRoute\n              exact\n              path=\"/:tenant/benefits/:benefitType\"\n              component={(): ReactElement => <BenefitsContainer />}\n            />\n\n            <PrivateRoute\n              exact\n              path=\"/:tenant/distributionLists/pending\"\n              component={(): ReactElement => <DistributionListRequestsContainer />}\n            />\n\n            <PrivateRoute\n              exact\n              path=\"/:tenant/distributionLists\"\n              component={(): ReactElement => <DistributionListsContainer />}\n            />\n\n            <PrivateRoute\n              exact\n              path=\"/:tenant/distributionLists/:emailAlias\"\n              component={(): ReactElement => <DistributionListDetails />}\n            />\n\n            <PrivateRoute\n              exact\n              path=\"/:tenant/awardCategories\"\n              component={(): ReactElement => <AwardCategoriesContainer />}\n            />\n\n            {/* Tenant Specific Student Routes */}\n            <PrivateRoute exact path=\"/mlsa\" component={StudentHomeContainer} />\n            <PrivateRoute exact path=\"/mlsa/events\" component={EventsContainer} />\n            <PrivateRoute exact path=\"/mlsa/mlsas\" component={StudentsContainer} />\n            <PrivateRoute\n              exact\n              path=\"/mlsa/applications\"\n              component={(props: IApplicationsContainerProps): ReactElement => (\n                <ApplicationsContainer {...props} tenant={TenantTypesEnum.MLSA} />\n              )}\n            />\n            <PrivateRoute\n              exact\n              path=\"/mlsa/details/:id\"\n              component={(): ReactElement => <StudentDetails />}\n            />\n            <PrivateRoute\n              exact\n              path=\"/mlsa/access\"\n              component={(): ReactElement => (\n                <AccessControlContainer tenant={TenantTypesEnum.MLSA} />\n              )}\n            />\n            {/* Tenant Specific MVP Routes */}\n            <PrivateRoute exact path=\"/mvp\" component={MvpHomeContainer} />\n            <PrivateRoute exact path=\"/mvp/events\" component={MvpEventContainer} />\n            <PrivateRoute\n              exact\n              path=\"/mvp/mvps\"\n              component={MostValuableProfessionalSearchContainer}\n            />\n            <PrivateRoute\n              exact\n              path=\"/mvp/details/:id\"\n              component={(): ReactElement => <MostValuableProfessionalDetailsContainer />}\n            />\n            <PrivateRoute\n              exact\n              path=\"/mvp/review/applications\"\n              component={(props: IApplicationsContainerProps): ReactElement => (\n                <ApplicationsContainer {...props} tenant={TenantTypesEnum.MVP} />\n              )}\n            />\n            <PrivateRoute\n              exact\n              path=\"/mvp/applications/:id\"\n              component={(): ReactElement => (\n                <MostValuableProfessionalApplicationDetailsContainer />\n              )}\n            />\n            <PrivateRoute\n              exact\n              path=\"/mvp/access\"\n              component={(): ReactElement => (\n                <AccessControlContainer tenant={TenantTypesEnum.MVP} />\n              )}\n            />\n            <PrivateRoute\n              exact\n              path=\"/mvp/review/demographics\"\n              component={(): ReactElement => <DemographicsContainer />}\n            />\n            {/* Tenant Specific RD Routes */}\n            <PrivateRoute exact path=\"/rd\" component={RegionalDirectorsHomeContainer} />\n            <PrivateRoute exact path=\"/rd/rds\" component={RegionalDirectorsContainer} />\n            <PrivateRoute\n              exact\n              path={\"/rd/details/:id\"}\n              component={RegionalDirectorsDetailsContainer}\n            />\n            <PrivateRoute exact path=\"/rd/events\" component={RegionalDirectorsEventContainer} />\n            <PrivateRoute\n              exact\n              path=\"/rd/applications\"\n              component={(props: IApplicationsContainerProps): ReactElement => (\n                <ApplicationsContainer {...props} tenant={TenantTypesEnum.RD} />\n              )}\n            />\n            <PrivateRoute\n              exact\n              path=\"/rd/access\"\n              component={(): ReactElement => <AccessControlContainer tenant={TenantTypesEnum.RD} />}\n            />\n            {/* Fall Thru Routes */}\n            <Route path=\"/notFound\" component={(): ReactElement => <PageNotFoundContainer />} />\n            <Route path=\"/unauthorized\" component={(): ReactElement => <UnauthorizedContainer />} />\n            <Route\n              path=\"*\"\n              exact={true}\n              component={(): ReactElement => <PageNotFoundContainer />}\n            />\n          </Switch>\n        </Stack>\n      </Stack>\n    </>\n  );\n};\n\nexport default AppContainer;\n","/*!\n * Copyright (c) Microsoft Corporation. All rights reserved.\n */\n// @ts-nocheck\nimport React from \"react\";\n\nimport ReactDOM from \"react-dom\";\nimport { Provider } from \"react-redux\";\nimport { BrowserRouter as Router } from \"react-router-dom\";\n\nimport \"bootstrap/dist/css/bootstrap.css\";\nimport \"rc-pagination/assets/index.css\";\n\nimport { mergeStyles } from \"@fluentui/react\";\n\nimport * as serviceWorker from \"./ServiceWorker\";\n\nimport { AuthProvider } from \"Authentication/AuthProvider\";\n\nimport AppContainer from \"./Containers/App/AppContainer\";\nimport store from \"./Store\";\n\nmergeStyles({\n  \":global(body,html,#root)\": {\n    margin: \"0\",\n  },\n});\n\nReactDOM.render(\n  <React.StrictMode>\n    <AuthProvider>\n      <Provider store={store}>\n        <Router>\n          <AppContainer />\n        </Router>\n      </Provider>\n    </AuthProvider>\n  </React.StrictMode>,\n  document.getElementById(\"root\")\n);\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nserviceWorker.unregister();\n"],"sourceRoot":""}