{"version":3,"sources":["images/social-icons/facebookIcon.png","images/social-icons/googleIcon.png","images/social-icons/twitterIcon.png","images/project-images/rourkeBridge.jpg","images/project-images/exit-renumbering-project-logo.png","images/GreenDOT-Logo.jpg","images/map/map-pin-red.png","history.js","styled-elements/Spacer.tsx","styled-elements/Form.tsx","styled-elements/PaddedDiv.tsx","styled-elements/AccountForBottomNavMargin.tsx","styled-elements/MyLink.tsx","styled-elements/PolicyAgreements.tsx","styled-elements/Buttons.tsx","styled-elements/Icons.tsx","environment.ts","components/Login/ExistingPIMAUserList.tsx","store/slices/user.tsx","components/Login/ExistingPIMAUser.tsx","components/Login/LandingPage.tsx","components/Login/Amplify/AmplifySignUpForm.tsx","components/Login/Amplify/ConfirmAccount.tsx","components/Login/PasswordRequirements.tsx","components/Login/Amplify/AmplifyLoginForm.tsx","components/Login/PrivacyPolicy/IowaDOTPrivacyPolicy.tsx","components/Login/PrivacyPolicy/MassDOTPrivacyPolicy.tsx","components/Projects/ProjectComments.tsx","store/slices/projects.tsx","cognito/aws-config.js","store/slices/application.tsx","components/Shared/SystemSuccessSnackbar.tsx","components/Projects/Project.tsx","models/enums/EventSettingsENUM.tsx","components/Projects/InputNumAttendeesDialog.tsx","components/Projects/ProjectEvents.tsx","components/Projects/ProjectHeaderNav.tsx","store/slices/feed.tsx","images/calendar-icon-arrow.svg","images/calendar-icon-checkmark.svg","components/Projects/ProjectCard/IowaDOTProjectCard.tsx","components/Projects/ProjectCard/MaineDOTProjectCard.tsx","components/Projects/ProjectCard/MassDOTProjectCard.tsx","components/Projects/ProjectCard/CTDOTProjectCard.tsx","components/Projects/AllProjectsList.tsx","components/Projects/ProjectSelectionFilter.tsx","store/slices/participate.tsx","components/Projects/ProjectSupportSlider.tsx","store/slices/myprofile.tsx","components/Projects/ProjectCommentForm.tsx","components/Projects/ProjectCommentFormTopics.tsx","components/Projects/ProjectCommentFormChoices.tsx","components/Projects/ToggleFollowBottomDrawer.tsx","components/Projects/DeprecatedToggleFollowBottomDrawer.tsx","components/Projects/ProjectNotificationsPreferences.tsx","lookups/languages.tsx","components/Projects/LanguageSelectionBottomDrawer.tsx","components/Feed/Feed.tsx","components/Feed/FeedHeaderNav.tsx","store/slices/notifications.tsx","components/Shared/ProjectComment.tsx","components/Participate/Participate.tsx","store/slices/dashboard.tsx","components/Dashboard/DashboardContainer.tsx","components/Dashboard/DashboardMap.tsx","components/Dashboard/DashboardTable.tsx","components/Notifications/NotificationsContainer.tsx","components/Notifications/Notification.tsx","components/Notifications/SelectedNotificationDetails.tsx","components/MyProfile/MyProfile.tsx","components/MyProfile/Affiliations.tsx","components/MyProfile/Slider.tsx","components/MyProfile/MyActivity.tsx","components/Shared/SubHeaderGoBack.tsx","components/Shared/LoadMore.tsx","components/Shared/Header.tsx","components/Shared/BottomNavbar.tsx","components/Shared/WebMap.tsx","components/Shared/PlusButtonBottomDrawer.tsx","components/Shared/DynamicDialog.tsx","withTracker.tsx","routes.js","components/Login/LoginPage.tsx","components/Login/Amplify/ForgotPassword.tsx","components/Participate/ParticipateCommentFilter.tsx","components/Projects/ProjectMap.tsx","components/Projects/MeetingDetails.tsx","App.tsx","store/index.ts","serviceWorker.ts","index.tsx"],"names":["module","exports","history","createBrowserHistory","Spacer","styled","form","div","Link","theme","palette","primary","main","PolicyAgreementsFixedBottom","PolicyAgreements","button","styledMUI","Button","backgroundColor","color","grey","MyIconButton","IconButton","MyLargeBlueSmsIcon","WorkIcon","props","secondary","MeetingRoom","AccountCircle","SmsIcon","MySmsIcon","ThumbUpIcon","MyBlueSmsIcon","MyBlueHomeIcon","HomeIcon","MyBlueCalendarIcon","CalendarTodayIcon","MyBlueDashboardIcon","DashboardIcon","MySmallAccountCircleIcon","MyHelpOutlineIcon","HelpOutlineIcon","MyExitToAppIcon","SearchIcon","ExitToAppIcon","MyVisibilityIcon","DeleteIcon","EditIcon","VisibilityIcon","MyVisibilityOffIcon","VisibilityOffIcon","MyErrorIcon","ErrorIcon","environment","entityName","dashboardMapCenterCoords","landingPageImg","clientLogo","clientUrl","privacyPolicyUrl","apiUrl","cognitoUserPoolId","cognitoUserPoolWebClientId","cognitoDomain","onlineMeetingsUrl","googleAnalyticsId","faqDocUrl","authority","client_id","client_secret","ExistingPIMAUserList","pimaUsersMatchingSignupForm","useSelector","state","userSlice","style","textAlign","fontSize","map","user","idx","ExistingPIMAUser","key","createSlice","name","initialState","isLoggedInAmplify","isLoggedInREACH","isLoggedInOpenID","loading","hasErrors","errorMsg","cognitoLoginResult","foundStakeId","userInfo","isSignedUpAmplify","isSignedUpPIMA","isConfirmed","username","selectedPIMAUser","token","firstAccessToken","openIDtoken","signUpFormData","reducers","loginAmplify","loginAmplifyFailure","payload","loginAmplifySuccess","email","localStorage","setItem","sub","loginREACH","loginREACHSuccess","newPayload","tokenExpirationTime","Date","getTime","JSON","stringify","setTimeout","push","loginREACHFailure","clear","loginOpenID","loginOpenIDSuccess","loginOpenIDFailure","signupAmplify","signupAmplifyFailure","signupAmplifySuccess","signupPIMA","signupPIMAFailure","signupPIMASuccess","confirmSignup","confirmSignupAmplifyFailure","confirmSignupAmplifySuccess","resendConfirmationCode","resendConfirmationCodeFailure","resendConfirmationCodeSuccess","checkExistingPIMAUser","checkExistingPIMAUserSuccess","checkExistingPIMAUserFailure","checkExistingPIMAUserByCognitoId","checkExistingPIMAUserByCognitoIdSuccess","checkExistingPIMAUserByCognitoIdFailure","setSelectedPIMAUser","postExistingPIMAUser","postExistingPIMAUserSuccess","postExistingPIMAUserFailure","logout","logoutFailure","logoutSuccess","setisUserSignedUpAmplify","setisUserSignedUpPIMA","setIsLoggedOut","setIsAlreadyLoggedIn","setUsername","setSignUpFormData","actions","createPIMAStakeholder","createAsyncThunk","input","thunkAPI","a","firstName","lastName","address","city","zipcode","axios","post","STAKE_EMAIL","FIRST_NAME","LAST_NAME","MAIL1_ADDRESS_LINE1","MAIL1_CITY","MAIL1_STATE","MAIL1_ZIP_CODE","EXTERNAL_ID","getItem","fetchCheckExistingPIMAUserAndSignUp","stakeId","externalId","dispatch","StakeId","ExternalId","data","message","lastname","get","console","error","fetchCheckExistingPIMAUserById","getState","CognitoId","fetchLoginAmplify","Auth","signIn","password","attributes","rejectWithValue","getFirstAccessTokenHeaders","parse","headers","Accept","Authorization","getREACHAuthHeaders","isTokenExpired","currentTime","alert","Error","fetchLoginOpenID","STAKE_ID","clientSecret","clientId","loginInfo","options","response","access_token","expires_in","fetchLogout","config","Token","err","fetchAmplifySignup","signUp","fetchResendConfirmationCode","confirmSignUp","confirmationCode","resendSignUp","log","fetchSignupPIMA","fetchConfirmSignupAll","reduxState","cognitoId","useDispatch","border","padding","marginBottom","display","flexDirection","alignItems","margin","aria-label","onClick","marginRight","variant","ComponentContainer","IowaDOTLandingPageImg","img","MassDOTLandingPageImg","MaineDOTLandingPageImg","CTDOTLandingPageImg","LogosContainerFlex","MainDOTLogosContainerFlex","CTDOTLogosContainerFlex","EmptyFormattingDiv","ReachLogo","IowaDOTEntityLogo","MassDOTEntityLogo","CTDOTEntityLogo","ReachSubtitle","h1","MaineDOTSubtitle","CenteredFlexContainer","LoginButtonContainer","LoginButton","height","width","justifyContent","LoginText","PolicyAgreementsLandingPage","getEntityPrivacyPolicy","IowaDOTPrivacyPolicy","MassDOTPrivacyPolicy","getEntityLogo","src","alt","getReachLogo","TextFieldHalfWidth","TextField","TextFieldThirdWidth","MyH1","pwCache","DivAlignedLeft","MyUL","ul","MyLI","li","MyH2","h2","PasswordRequirements","Tooltip","title","AmplifyLoginForm","useHistory","React","useState","formState","setFormState","useEffect","handleSubmit","e","preventDefault","handleChange","target","DOMPurify","sanitize","value","toLowerCase","marginTop","role","Fragment","onSubmit","inputProps","textTransform","fullWidth","onChange","label","id","InputLabelProps","type","disabled","position","marginLeft","CircularProgress","to","pathname","isConfirmAccount","textDecoration","href","rel","ProjectComments","isMobile","applicationSlice","classes","makeStyles","createStyles","root","spacing","paper","list","paddingTop","useStyles","selectedProjectComments","projectsSlice","className","List","comment","ProjectComment","projects","isAllProjectsLoaded","hasToggledFollow","isProjectCommentSelection","isFollowIntent","isNotificationPreferencesOpen","projectToFollowOrUnfollow","projectsFilterSelection","customProjectsFilterSelection","selectedProject","selectedProjectEvents","selectedEventDetails","selectedCounties","isLoadingProjectEvents","isLoadingProjectComments","isAllSelectedProjCommentsLoaded","isLoadingProjCommentDetails","hasClickedMultiLanguageEvent","notificationPrefsSaveOrFailMsg","lookups","LUCounties","isLoadingMoreProjects","isNumAttendeesDialogOpen","searchText","startDate","endDate","sortField","isMine","hasEvents","setSelectedCounties","setUpdateProjectDetailsComment","found","find","c","StakeCommentId","IsVisible","setAreProjectCommentResponsesExpanded","AreResponsesExpanded","addStakeCommentResponseToProjectsState","Responses","registerForEvent","registerForEventSuccess","Array","isArray","event","PeId","IsRegistered","registerForEventFailure","setNotificationPrefsSaveOrFailMsg","clearEventSelectionState","setIsNotificationPreferencesOpen","setIsProjectCommentSelection","setFollowIntent","project","setHasToggledFollow","setHasClickedMultiLanguageEvent","clearSelectedProject","getProjects","getProjectsFailure","getProjectsSuccess","loadMoreProjects","loadMoreProjectsSuccess","setIsAllProjectsLoaded","loadMoreProjectsFailure","getSelectedProject","getSelectedProjectFailure","getSelectedProjectSuccess","getSelectedProjectEvents","getSelectedProjectEventsFailure","getSelectedProjectEventsSuccess","getSelectedProjectComments","getSelectedProjectCommentsFailure","getSelectedProjectCommentsSuccess","setIsAllSelectedProjCommentsLoaded","followProject","followProjectSuccess","length","p","ProjectId","projectId","IsFollowing","IsNotify","isNotify","IsEmail","isEmail","IsSMS","isSMS","followProjectFailure","unfollowProject","unfollowProjectSuccess","isOnFollowingOnlyView","filter","unfollowProjectFailure","setSelectedProject","clearProjects","setProjectsFilterSelection","setCustomProjectsFilterSelection","getCommentDetails","getCommentDetailsSuccess","getCommentDetailsFailure","getEvent","getEventSuccess","getEventFailure","setSelectedEvent","updateSelectedProjectState","getLUCounties","getLUCountiesSuccess","getLUCountiesFailure","setIsNumAttendeesDialogOpen","setSearchText","setStartDate","setEndDate","setSortField","fetchLUCounties","hasTokenExpired","fetchRegisterForEvent","eventId","attendanceCount","status","fetchSelectedProject","fetchSelectedProjectEvents","fetchSelectedProjectComments","start","forEach","d","fetchFollowProject","fetchUnfollowProject","fetchProjects","countyIds","Start","Length","PssCountyIds","IsMine","HasEvents","SearchText","StartDate","EndDate","SortField","fetchMoreProjects","region","userPoolId","userPoolWebClientId","oauth","domain","scope","redirectSignIn","redirectSignOut","responseType","federated","provider","Amplify","configure","navigationTab","currentPath","prevPath","isShowingSystemSnackbarMsg","setNavigationTab","setCurrentPath","setIsMobile","setIsShowingSystemSnackbarMsg","Alert","elevation","SystemSuccessSnackbar","snackbarText","handleClose","reason","Snackbar","anchorOrigin","vertical","horizontal","open","autoHideDuration","onClose","severity","EventSettingsENUM","ProjectDetailsTitle","ProjectDetailsHeading","BasicFlexContainer","FlexCenteredButton","Container","Project","isStakeCommentSubmitted","myProfileSlice","stakeholderInfo","participateSlice","match","params","isCopiedProjLink","setIsCopiedProjLink","location","useLocation","handleToggleFollow","handleClickOpen","subscribeToHistory","useCallback","unlisten","listen","loc","action","includes","maxWidth","Helmet","charSet","ProjectDesc","ProjectNr","getEntityProjectTitle","CommentCount","Favorability","minWidth","text","onCopy","ProjectNotificationsPreferences","District","fontWeight","ProjectEvents","MapId","mapId","renderSystemSuccessSnackbar","ToggleFollowBottomDrawer","LanguageSelectionBottomDrawer","LoadMore","DynamicDialog","InputNumAttendeesDialog","setAttendanceCount","Dialog","aria-labelledby","DialogTitle","onInput","Math","max","parseInt","toString","slice","Number","DialogActions","OnlineMeetings","PeGuid","EventSettings","OnlineResource","window","STAKE_GUID","register","GreenButton","GreyDisabledButton","BlueButton","EvtFlexContainer","isInPersonRegistrationDisabled","eventDateStart","joinOnlineMeeting","evt","IS_PODIUM","IS_EMBEDDED","IS_ANON","size","PeName","moment","EventDate","format","add","OnlineResourceGuid","eventDateTime","EventEndDateTime","eventDateEnd","evtDateEnd","utcOffset","valueOf","isInPersonMeetingExpired","EventStartDateTime","MyButtonChild","FlexContainer","ProjectHeaderNav","selectedCountiesLocal","isFollowing","handleFilterClick","inputValue","setInputValue","submitForm","anchorEl","setAnchorEl","handleSortClose","handleSelect","sortOption","flexGrow","aria-selected","flexWrap","Box","helperText","InputProps","startAdornment","InputAdornment","endAdornment","edge","enterKeyHint","aria-controls","aria-haspopup","currentTarget","aria-hidden","Typography","Menu","keepMounted","Boolean","MenuItem","comments","isFollowedComments","isAllComments","isLoadingMoreComments","isAllCommentsLoaded","hasCheckedInitialState","feedSlice","setHasCheckedInitialState","setUpdateFeedComment","setAreFeedCommentResponsesExpanded","addStakeCommentResponseToFeedState","selectedComment","resetFeed","getComments","getCommentsSuccess","getCommentsFailure","loadMoreComments","loadMoreCommentsSuccess","loadMoreCommentsFailure","setIsFollowedComments","setIsAllComments","setIsAllCommentsLoaded","setIsMine","fetchComments","fetchMoreComments","_excluded","_extends","Object","assign","i","arguments","source","prototype","hasOwnProperty","call","apply","this","_objectWithoutProperties","excluded","sourceKeys","keys","indexOf","_objectWithoutPropertiesLoose","getOwnPropertySymbols","sourceSymbolKeys","propertyIsEnumerable","_ref","svgRef","createElement","viewBox","ref","fill","stroke","strokeMiterlimit","strokeWidth","x","y","rx","ry","cx","cy","x1","y1","x2","y2","strokeLinecap","strokeLinejoin","points","ForwardRef","forwardRef","MyH3","h3","IconContainer","FollowButtonContainer","ProjectInfoContainer","SvgIcon","MyPaper","Paper","IowaDOTProjectCard","FollowButton","isMeetingInPast","MeetingDate","today","setHours","meetingDateParts","split","Grid","container","wrap","item","xs","zeroMinWidth","PssCounty","join","toUpperCase","PssStatus","MaineDOTProjectCard","Pin","MassDOTProjectCard","CTDOTProjectCard","HiddenH1","ProjectListContainer","customSelectStyles","control","base","minHeight","FormControlsContainer","MyFormControl","FormControl","commentFormState","stakeComment","commentTopics","commentChoices","projectSupportLevel","selectedResponseTypeId","projectCommentFormQuestions","projectCommentFormCurrentQuestionID","responseTypes","commentCategories","organizationTypes","stakeholderTypes","stakeCommentPayload","isCaptchaSubmitted","resetToInitialState","setCommentFormState","updateStakeCommentPayload","property","updateComment","updateCommentSuccess","updateCommentFailure","getProject","getProjectSuccess","getProjectFailure","getAllCommentFormLookups","getAllCommentFormLookupsSuccess","getAllCommentFormLookupsFailure","getProjCommentFormQuestions","getProjCommentFormQuestionsFailure","getProjCommentFormQuestionsSuccess","setProjCommentFormCurrentQuestionID","submitCaptcha","submitCaptchaSuccess","submitCaptchaFailure","postStakeComment","postStakeCommentSuccess","postStakeCommentFailure","postStakeCommentReply","postStakeCommentReplySuccess","postStakeCommentReplyFailure","setIsStakeCommentSubmitted","fetchCommentFormQuestions","filterUnneededQuestions","result","question","ModuleName","SelectedCommentTopics","SelectedCommentChoices","fetchAllCommentFormLookups","lookupUrls","url","alias","Promise","all","allLookupData","res","l","fetchProject","fetchPostStakeComment","STAKEHOLDER_SUPPORT_ID","fetchPostStakeCommentReponse","commentId","COMMENT_RESPONSE_GUID","COMMENT_RESPONSE_ID","IS_ON_BEHALF","IS_RESPONSE_NEEDS_APPROVAL","IsWorkflow","LAST_UPDATED_DATE","LAST_UPDATED_PERSON","LAST_UPDATED_PERSON_ID","NEEDS_RESPONSE","PERSON_NAME","RESPONDED_BY","RESPONDED_BY_PERSON","RESPONSE","RESPONSE_DATE","RESPONSE_DATE2","RESPONSE_SENT_DATE","RESPONSE_TYPE","RESPONSE_TYPE_ID","STAKE_COMMENT_GUID","STAKE_COMMENT_ID","STAKEHOLDER_NAME","Workflow","WORKFLOW_AUTHOR_ID","fetchUpdateComment","put","fetchSubmitCaptcha","stakeholder","MySelect","Select","MyContainer","marks","withStyles","markLabel","defaultValue","setProjCommentFormLocalState","projectCommentFormLocalState","CustomSlider","thumb","markActive","mark","bottom","rail","backgroundImage","track","Slider","setValue","isRespondViaDropdown","setIsRespondViaDropdown","mapTo_LU_STAKEHOLDER_SUPPORT","sliderValue","getAriaValueText","m","min","valueLabelDisplay","valueLabelFormat","word","newValue","step","orgTypes","isLoadingStakeholder","isLoadingOrgTypes","clearMyProfileState","setIncrementStakeProjectCount","ProjectCount","setDecrementStakeProjectCount","getStakeholder","getStakeholderFailure","getStakeholderSuccess","updateStakeholder","updateStakeholderFailure","updateStakeholderSuccess","getLUOrgTypes","getLUOrgTypesFailure","getLUOrgTypesSuccess","fetchLUOrgTypes","fetchLoggedInStakeholder","fetchUpdateStakeholder","ProjectCommentFormTopics","localState","setLocalState","component","FormGroup","t","FormControlLabel","Checkbox","checked","COMMENT_TOPIC_ID","idToAddOrRemove","COMMENT_TOPIC","visibility","ProjectCommentFormChoices","COMMENT_CHOICE_ID","COMMENT_CHOICE","isFollowedProjects","isOpen","setIsOpen","closeDrawer","MyButton","Drawer","anchor","fullList","formControl","MyAccordionDetails","AccordionDetails","MyAccordion","Accordion","isEmailNotify","isSMSNotify","setState","isEdit","setIsEdit","handleSave","expanded","AccordionSummary","expandIcon","htmlFor","languages","symbol","LANGUAGE","MyList","FeedHeaderNav","resetUrl","URLSearchParams","search","loadingNotificationDetails","notifications","selectedNotificationDetails","notification","commentDetails","notificationsSlice","setUpdateNotificationsComment","setAreNotificationCommentResponsesExpanded","addStakeCommentResponseToNotificationsState","resetSelectedNotificationState","getNotifications","getNotificationsSuccess","getNotificationsFailure","markReadNotification","markReadNotificationSuccess","notificationToModify","n","NotificationId","IsNoteSeen","markReadNotificationFailure","setSelectedNotification","fetchNotifications","parseStringifiedResult","Data","fetchCommentDetails","fetchMarkReadNotification","notificationId","ShowTooltipWhenDisabledButton","pointerEvents","boxShadow","OuterContainer","SimpleFlexContainer","ProjectTitle","StakeNameAndDate","StakeCommentDiv","IconsContainer","ButtonWithTooltip","tooltipText","other","adjustedButtonProps","undefined","IconLeftAccordionSummary","order","hideBorder","StakeComment","StakeCommentDate","StakeholderName","EntityName","Topics","feedSliceComments","stakeCommentResponse","setStakeCommentResponse","handleToggleIsResponsesExpanded","some","submitCommentResponse","CommentResponseId","LastUpdatedDate","LastUpdatedPersonId","RespondedBy","ResponderName","Response","ResponseDate","ResponseSentDate","ResponseType","handleToggleCommentVisibility","fontStyle","CommentTopic","ResponseRequestTypeId","r","responderType","getResponderType","allowedAttributes","sanitizeHtml","defaults","allowedTags","html","maxRows","multiline","placeholder","participateOptionsList","icon","link","dashComments","stakeholderSupport","dashboardlice","clearDashboardState","getLUStakeSupport","getLUStakeSupportSuccess","getLUStakeSupportFailure","getDashComments","getDashCommentsSuccess","getDashCommentsFailure","fetchLUStakeSupport","fetchDashComments","DashboardContainer","dashboardSlice","isMapLoading","setIsMapLoading","mapOrTable","setMapOrTable","height100vh","use100vh","zIndex","top","right","DashboardTable","MapView","PALETTE","Green","LightGreen","Yellow","Orange","Red","Unknown","COMMENTS_RENDERER","field","uniqueValueInfos","isLegendExpanded","setIsLegendExpanded","viewRef","useRef","legendRef","isInfoPanelVisible","setIsInfoPanelVisible","toggleInfoPanel","prevState","mapRef","loadModules","css","FeatureLayer","Graphic","PopupTemplate","Locate","Search","SpatialReference","WebMap","Legend","portalItem","basemap","commentGraphics","OBJECTID","StakeSupportId","StakeholderSupportId","StakeSupport","entry","STAKEHOLDER_SUPPORT","geometry","CommentLon","CommentLat","spatialReference","wkid","commentPopupTemplate","content","commentsLayer","objectIdField","fields","geometryType","popupTemplate","renderer","load","view","current","center","zoom","locateWidget","useHeadingEnabled","goToOverride","scale","goTo","searchWidget","ui","infoButton","document","onclick","on","popup","when","watch","collapsed","legend","mapLoading","startUp","remove","left","borderRadius","boxSizing","TableContainer","Table","TableHead","TableRow","TableCell","TableBody","row","AccountForBottomNavMargin","overflow","NoNotificationsMsg","ArrowBack","Notification","NotificationType","Message","CreatedDate","CommentId","ListItem","paddingBottom","ListItemAvatar","QuestionAnswerIcon","paddingRight","wordWrap","fromNow","DoneIcon","MarkunreadMailboxIcon","SelectedNotificationDetails","switchRenderNotificationDetails","PrivacyContainer","CenteredContainer","MyProfileHeading","ContactForm","MyTextField","formControlDropdown","formControlLabel","formLabel","listStyle","paddingLeft","inputRoot","Affiliations","orgName","setOrgName","initialOrgName","getSelectedOrgLookup","ORGANIZATION_TYPE","o","ORGANIZATION_TYPE_ID","selectedOrgType","dropdownsState","setDropdownsState","handleChangeEdit","ORGANIZATION","StakeholderOrgs","alignContent","required","InputLabel","labelId","orgType","MyActivity","MyArrowBack","GoBack","isArrowBack","heading","goBackLink","isNotificationDetails","goBack","appBar","transition","transitions","create","easing","sharp","duration","leavingScreen","background","appBarShift","easeOut","enteringScreen","menuButton","hide","drawer","flexShrink","drawerPaper","drawerHeader","mixins","toolbar","contentShift","centerLogo","Header","useTheme","setOpen","handleDrawerClose","CssBaseline","AppBar","clsx","Toolbar","getProjectsLinkLogo","direction","Divider","index","signOut","ListItemIcon","ListItemText","StyledBadge","badge","Badge","createTheme","typography","overrides","MuiBottomNavigationAction","stickToBottom","withRouter","isNotificationsActive","setIsNotificationsActive","BottomNavigation","BottomNavigationAction","badgeContent","memo","MAP_ID","setProjCommentLatLon","isProjectCommentMap","MapViewComponent","commentPin","searchComplete","errors","results","feature","graphics","lat","lon","userLocationPin","PictureMarkerSymbol","LocatorSearchSource","Locator","MapPinImage","yoffset","worldGeocoder","locator","outSpatialReference","categories","countryCode","locationType","maxResults","maxSuggestions","withinViewEnabled","sources","includeDefaultSources","autoSelect","mapPoint","hiddenAlertDiv","textContent","setAttribute","body","appendChild","PlusButtonBottomDrawer","toggleDrawer","side","PaperProps","withTracker","WrappedComponent","trackPage","page","ga4react","pageview","gtag","LandingPageWithTracker","Hub","getUser","then","userData","signInUserSession","idToken","currentAuthenticatedUser","catch","getLogosContainer","getReachSubTitle","getEntityLandingPageImg","getEntitySignIn","AmplifySignUpFormWithTracker","newAccountFormState","setNewAccountFormState","firstname","signUpFormState","setSignUpFormState","handleChangeSignUpForm","handleChangeNewAccount","handleSubmitNewAccount","ConfirmAccountWithTracker","confirmPassword","confirmAccountCodeFormState","setConfirmAccountCodeFormState","confirmAccountFormState","setConfirmAccountFormState","errorText","setErrorText","handleSubmitConfirmAccount","handleChangeConfirmAccountCode","LoginPageWithTracker","getSubHeaderGoBackLogin","ForgotPasswordWithTracker","setLoading","setHasErrors","setErrorMsg","isResetCodeReceived","setIsResetCodeRecevied","isPasswordReset","setIsPasswordReset","setEmail","code","newPassword","confirmNewPassword","resetPasswordFormState","setResetPasswordFormState","handleSubmitInitiateResetPw","forgotPassword","CodeDeliveryDetails","handleChangeResetPassword","handleSubmitResetPwd","forgotPasswordSubmit","autoComplete","ParticipateWithTracker","plusButton","option","align","noWrap","ProjectCommentFormWithTracker","selectEmpty","following","setFollowing","nearMyHome","setNearMyHome","district","setDistrict","town","setTown","mpo","setMpo","inputLabel","labelWidth","setLabelWidth","offsetWidth","Switch","loadingParticipate","loadingProjects","projCommentLatLon","resetAllState","formattedTopicsResult","formattedChoicesResult","PROJECT_ID","asyncWrapper","updateStakeCommentPayloadSwitch","FormLabel","TEXT","currentQuestionData","rows","shrink","ModuleOptions","NAME","VALUE","RESPONSE_REQUEST_TYPE_ID","RESPONSE_REQUEST_TYPE","renderQuestionSpecificFormFields","trim","postStakeCommentPayload","COMMENT_CATEGORY_ID","COMMENT_LAT","COMMENT_LON","COMMENT_SOURCE_ID","CommentChoices","CommentTopics","NOTES","PE_ID","PE_GUID","PROJECT_NR","STAKE_COMMENT","TONE_ID","scrollTo","FeedWithTracker","isMineURL","AllProjectsListWithTracker","isCommentSelection","getEntityProjectCard","PaddedDiv","ProjectMapWithTracker","ProjectSelectionFilterWithTracker","handleDateChange","date","styles","inputId","isMulti","multiple","selectedOption","triggeredAction","COUNTY_ID","COUNTY","utils","DateFnsUtils","disableToolbar","KeyboardButtonProps","flex","minDate","placement","ProjectWithTracker","MyProfileWithTracker","HOME_PHONE_NR","MAIL1_ADDRESS_LINE2","contactFormState","setContactFormState","notifyOnNewProjectsWhereILive","notifyOnNewProjectsWhereIWork","notifyOnNewProjectsInMyDistrict","checkboxesState","isEditHomeContact","editState","setEditState","propertyName","noValidate","NotificationsContainerWithTracker","DashboardContainerWithTracker","exact","path","MuiButton","whiteSpace","MuiSlider","valueLabel","MuiTypography","subtitle1","h6","h5","MuiInputLabel","outlined","MuiDialogTitle","App","handleResize","innerWidth","addEventListener","combinedReducer","combineReducers","store","configureStore","reducer","hostname","GA4React","_","initialize","finally","ReactDOM","render","getElementById","navigator","serviceWorker","ready","registration","unregister"],"mappings":"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","file":"static/js/main.c6d1d68e.chunk.js","sourcesContent":["module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","module.exports = __webpack_public_path__ + \"static/media/rourkeBridge.becd6606.jpg\";","module.exports = __webpack_public_path__ + \"static/media/exit-renumbering-project-logo.df7b1196.png\";","module.exports = __webpack_public_path__ + \"static/media/GreenDOT-Logo.83cb045c.jpg\";","module.exports = __webpack_public_path__ + \"static/media/map-pin-red.54d4dcfd.png\";","import { createMemoryHistory, createBrowserHistory } from 'history';\n\nconst history =\n process.env.NODE_ENV === 'test'\n ? createMemoryHistory()\n : createBrowserHistory();\n\nexport default history;\n","import styled from 'styled-components';\n\nconst Spacer = styled.div`\n margin: 8px;\n`;\n\nexport default Spacer;\n","import styled from 'styled-components';\n\nexport default styled.form`\n display: flex;\n border: 1px solid #ddd;\n flex-direction: column;\n padding: 20px;\n margin: 10vw;\n input {\n margin: 15px 0;\n padding: 10px;\n }\n`;\n","import styled from 'styled-components';\n\nexport default styled.div`\n padding: 24px 12px;\n`;\n","import styled from 'styled-components';\n\nexport default styled.div`\n margin-bottom: 83px; // accounts for bottom navbar + 8px space\n`;\n","import { Link } from 'react-router-dom';\nimport styled from 'styled-components';\nimport { ThemeProps } from './Icons';\n\nexport default styled(Link)`\n ${({ theme }: ThemeProps) => `\n color: ${theme.palette.primary.main};\n text-decoration: none;\n // disable text highlighting https://stackoverflow.com/questions/826782/how-to-disable-text-selection-highlighting\n -webkit-touch-callout: none; /* iOS Safari */\n -webkit-user-select: none; /* Safari */\n -khtml-user-select: none; /* Konqueror HTML */\n -moz-user-select: none; /* Old versions of Firefox */\n -ms-user-select: none; /* Internet Explorer/Edge */\n user-select: none; /* Non-prefixed version, currently\n supported by Chrome, Edge, Opera and Firefox */\n `}\n`;\n","import styled from 'styled-components';\n\nexport const PolicyAgreementsFixedBottom = styled.div`\n width: 300px;\n position: fixed;\n margin: 12px;\n font-size: 14px;\n bottom: 0;\n left: 50%;\n transform: translate(-50%, -50%); // fixes bottom center on desktop too\n`;\n\nexport const PolicyAgreements = styled.div`\n text-align: left;\n margin: 12px 0px;\n`;\n","import grey from '@material-ui/core/colors/grey';\nimport { Button } from '@material-ui/core/';\nimport styled from 'styled-components';\nimport { styled as styledMUI } from '@material-ui/core/styles';\n\nexport const SubmitButton = styled.button`\n padding: 10px;\n border: 1px solid black;\n`;\n\nexport const BlueButton = styledMUI(Button)({\n backgroundColor: '#2b79c6',\n color: 'white'\n});\n\nexport const GreyButton = styledMUI(Button)({\n color: grey[700]\n});\n","import WorkIcon from '@material-ui/icons/Work';\nimport SearchIcon from '@material-ui/icons/Search';\nimport ThumbUpIcon from '@material-ui/icons/ThumbUp';\nimport SmsIcon from '@material-ui/icons/Sms';\nimport { MeetingRoom, AccountCircle, ArrowBack } from '@material-ui/icons/';\nimport HelpOutlineIcon from '@material-ui/icons/HelpOutline';\nimport ExitToAppIcon from '@material-ui/icons/ExitToApp';\nimport HomeIcon from '@material-ui/icons/Home';\nimport CalendarTodayIcon from '@material-ui/icons/CalendarToday';\nimport DashboardIcon from '@material-ui/icons/Dashboard';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport EditIcon from '@material-ui/icons/Edit';\nimport VisibilityIcon from '@material-ui/icons/Visibility';\nimport VisibilityOffIcon from '@material-ui/icons/VisibilityOff';\nimport ErrorIcon from '@material-ui/icons/Error';\nimport IconButton from '@material-ui/core/IconButton';\nimport styled from 'styled-components';\nimport { Theme } from '@material-ui/core';\n\nexport const MyIconButton = styled(IconButton)`\n padding: 0px !important;\n`;\n\n// LARGE ICONS\nexport interface ThemeProps {\n theme: Theme;\n}\n\nexport const MyWorkIcon = styled(WorkIcon)`\n ${(props) => `\n font-size: 100px !important;\n color: ${props.theme.palette.secondary.main};\n `}\n`;\n\nexport const MyMeetingRoomIcon = styled(MeetingRoom)`\n ${({ theme }: ThemeProps) => `\n color: ${theme.palette.secondary.main};\n font-size: 24px !important;\n `}\n`;\n\nexport const MyAccountCircleIcon = styled(AccountCircle)`\n ${({ theme }: ThemeProps) => `\n color: ${theme.palette.secondary.main};\n font-size: 24px !important;\n `}\n`;\n\nexport const MyLargeBlueSmsIcon = styled(SmsIcon)`\n font-size: 40px !important;\n`;\n\n// SMALL ICONS\n\nexport const MyThumbUpIcon = styled(ThumbUpIcon)`\n font-size: 24px !important;\n`;\n\nexport const MySmsIcon = styled(SmsIcon)`\n font-size: 24px !important;\n margin-right: 8px !important;\n`;\n\nexport const MyBlueSmsIcon = styled(SmsIcon)`\n font-size: 24px !important;\n`;\n\nexport const MyBlueHomeIcon = styled(HomeIcon)`\n font-size: 24px !important;\n`;\n\nexport const MyBlueCalendarIcon = styled(CalendarTodayIcon)`\n font-size: 24px !important;\n`;\n\nexport const MyBlueDashboardIcon = styled(DashboardIcon)`\n font-size: 24px !important;\n`;\n\nexport const MySmallAccountCircleIcon = styled(AccountCircle)`\n ${({ theme }: ThemeProps) => `\n color: ${theme.palette.secondary.main};\n font-size: 24px !important;\n `}\n`;\n\nexport const MyHelpOutlineIcon = styled(HelpOutlineIcon)`\n ${({ theme }: ThemeProps) => `\n color: ${theme.palette.secondary.main};\n font-size: 24px !important;\n `}\n`;\n\nexport const MySmallSearchIcon = styled(SearchIcon)`\n ${({ theme }: ThemeProps) => `\n color: ${theme.palette.secondary.main};\n margin-right: 10px;\n font-size: 24px !important;\n `}\n`;\n\nexport const MyExitToAppIcon = styled(ExitToAppIcon)`\n ${({ theme }: ThemeProps) => `\n color: ${theme.palette.secondary.main};\n font-size: 24px !important;\n `}\n`;\n\nexport const MyDeleteIcon = styled(DeleteIcon)`\n ${({ theme }: ThemeProps) => `\n color: ${theme.palette.secondary.main};\n font-size: 18px !important;\n `}\n`;\n\nexport const MyEditIcon = styled(EditIcon)`\n ${({ theme }: ThemeProps) => `\n color: ${theme.palette.secondary.main};\n font-size: 18px !important;\n `}\n`;\n\nexport const MyVisibilityIcon = styled(VisibilityIcon)`\n ${({ theme }: ThemeProps) => `\n color: ${theme.palette.secondary.main};\n font-size: 18px !important;\n `}\n`;\n\nexport const MyVisibilityOffIcon = styled(VisibilityOffIcon)`\n ${({ theme }: ThemeProps) => `\n color: ${theme.palette.secondary.main};\n font-size: 18px !important;\n `}\n`;\n\nexport const MyErrorIcon = styled(ErrorIcon)`\n font-size: 18px !important;\n margin-right: 8px;\n`;\n","export const environment = {\n entityName: 'Iowa DOT',\n dashboardMapCenterCoords: '-93.389889,41.957524',\n landingPageImg: '/images/landingpage/iowalanding.jpg',\n clientLogo: '/images/logos/iowa_dot_logo.png',\n clientUrl: 'https://reach.iowadotpi.com',\n privacyPolicyUrl: 'https://iowadot.gov/policies_and_statements/Privacy-Policy',\n apiUrl: 'https://api.iowadotpi.com/api',\n cognitoUserPoolId: 'us-east-1_FfvFsjymI',\n cognitoUserPoolWebClientId: '7osu1mm8ghsf64iia6ponrqd4d',\n cognitoDomain: 'https://iowadotreachauth.auth.us-east-1.amazoncognito.com',\n onlineMeetingsUrl: 'https://meetings.iowadotpi.com',\n googleAnalyticsId: 'none',\n faqDocUrl: 'https://reach-public-pdfs.s3.amazonaws.com/REACH_FAQ.pdf',\n authority: 'https://accounts.iowadotpi.com',\n client_id: 'Iowa.Production.1.REACH',\n client_secret: '388D45BA-A36B-4984-FA59-B187D329C207',\n};\n","import React, { ReactElement } from 'react';\nimport { useSelector } from 'react-redux';\nimport { ExistingPIMAUser } from '..';\nimport { RootState } from '../../store';\n\nexport default function ExistingPIMAUserList(): ReactElement {\n const { pimaUsersMatchingSignupForm } = useSelector((state: RootState) => {\n return state;\n }).userSlice;\n return (\n
\n

\n We found you in our records. Please verify that your contact information\n below is correct by selecting \"This is me\". If the contact is not\n correct, select \"This is NOT me\".\n

\n {pimaUsersMatchingSignupForm.map((user, idx) => {\n return ;\n })}\n
\n );\n}\n","import {\n createSlice,\n createAsyncThunk,\n isRejectedWithValue\n} from '@reduxjs/toolkit';\nimport axios, { AxiosRequestConfig } from 'axios';\nimport history from '../../history';\nimport { Auth } from 'aws-amplify';\nimport { RootState } from '..';\nimport { environment } from '../../environment';\ninterface UserState {\n isLoggedInAmplify: boolean;\n isLoggedInREACH: boolean;\n isLoggedInOpenID: boolean;\n loading: boolean;\n hasErrors: boolean;\n errorMsg: string;\n userInfo: {\n username: string;\n isSignedUpAmplify: boolean;\n isSignedUpPIMA: boolean;\n isConfirmed: boolean;\n selectedPIMAUser: any;\n token: string;\n firstAccessToken: string;\n openIDtoken: string;\n signUpFormData: {\n email: string;\n firstName: string;\n lastName: string;\n address: string;\n city: string;\n state: string;\n };\n };\n cognitoLoginResult: any;\n pimaUsersMatchingSignupForm: any[] | null;\n foundStakeId: number;\n}\n\nconst initialState: UserState = {\n isLoggedInAmplify: false,\n isLoggedInREACH: false,\n isLoggedInOpenID: false,\n loading: false,\n hasErrors: false,\n errorMsg: '',\n cognitoLoginResult: null,\n pimaUsersMatchingSignupForm: null,\n foundStakeId: null,\n userInfo: {\n isSignedUpAmplify: false,\n isSignedUpPIMA: false,\n isConfirmed: false,\n username: null,\n selectedPIMAUser: null,\n token: null,\n firstAccessToken: null,\n openIDtoken: null,\n signUpFormData: null\n }\n};\n\nconst userSlice = createSlice({\n name: 'user',\n initialState,\n reducers: {\n loginAmplify: (state) => {\n state.loading = true;\n },\n loginAmplifyFailure: (state, { payload }) => {\n state.loading = false;\n state.hasErrors = true;\n state.errorMsg = payload;\n },\n loginAmplifySuccess: (state, { payload }) => {\n state.cognitoLoginResult = payload;\n state.userInfo.username = payload.email;\n state.isLoggedInAmplify = true;\n state.loading = false;\n state.hasErrors = false;\n localStorage.setItem('email', payload.email);\n localStorage.setItem('sub', payload.sub);\n },\n loginREACH: (state) => {\n state.loading = true;\n },\n loginREACHSuccess: (state, { payload }) => {\n let newPayload = payload;\n newPayload.tokenExpirationTime *= 1000;\n newPayload.tokenExpirationTime += new Date().getTime(); //this is to handle API sending incorrect expiration time.\n localStorage.setItem('reachAuth', JSON.stringify(newPayload));\n state.isLoggedInREACH = true;\n state.userInfo.token = payload.token;\n state.loading = false;\n state.hasErrors = false;\n setTimeout(() => {\n history.push('/projects');\n }, 2000);\n },\n loginREACHFailure: (state, { payload }) => {\n localStorage.clear();\n state.loading = false;\n state.hasErrors = true;\n state.errorMsg = payload;\n },\n loginOpenID: (state) => {\n state.loading = true;\n },\n loginOpenIDSuccess: (state, { payload }) => {\n //below is temporary\n let newPayload = payload;\n newPayload.tokenExpirationTime *= 1000;\n newPayload.tokenExpirationTime += new Date().getTime(); //this is to handle API sending incorrect expiration time.\n localStorage.setItem('reachAuth', JSON.stringify(newPayload));\n state.userInfo.token = payload.firstAccessToken;\n state.isLoggedInREACH = true;\n //above is temporary\n localStorage.setItem('first_token', JSON.stringify(newPayload));\n state.isLoggedInOpenID = true;\n state.userInfo.firstAccessToken = payload.firstAccessToken;\n state.loading = false;\n state.hasErrors = false;\n setTimeout(() => {\n history.push('/projects');\n }, 2000);\n },\n loginOpenIDFailure: (state, { payload }) => {\n localStorage.clear();\n state.loading = false;\n state.hasErrors = true;\n state.errorMsg = payload;\n },\n signupAmplify: (state) => {\n state.loading = true;\n },\n signupAmplifyFailure: (state, { payload }) => {\n state.loading = false;\n state.hasErrors = true;\n state.errorMsg = payload;\n },\n signupAmplifySuccess: (state) => {\n // user's Cognito account is created in UNCONFIRMED state\n state.userInfo.isSignedUpAmplify = true;\n state.loading = false;\n state.hasErrors = false;\n },\n signupPIMA: (state) => {\n state.loading = true;\n },\n signupPIMAFailure: (state, { payload }) => {\n state.loading = false;\n state.hasErrors = true;\n state.errorMsg = payload;\n },\n signupPIMASuccess: (state) => {\n state.userInfo.isSignedUpPIMA = true;\n state.loading = false;\n state.hasErrors = false;\n },\n confirmSignup: (state) => {\n state.loading = true;\n },\n confirmSignupAmplifyFailure: (state, { payload }) => {\n state.loading = false;\n state.hasErrors = true;\n state.errorMsg = payload;\n },\n confirmSignupAmplifySuccess: (state) => {\n // user's Cognito account switched to CONFIRMED state\n state.userInfo.isConfirmed = true;\n state.loading = false;\n state.hasErrors = false;\n },\n resendConfirmationCode: (state) => {\n state.loading = true;\n },\n resendConfirmationCodeFailure: (state, { payload }) => {\n state.loading = false;\n state.hasErrors = true;\n state.errorMsg = payload;\n },\n resendConfirmationCodeSuccess: (state) => {\n state.loading = false;\n state.hasErrors = false;\n },\n checkExistingPIMAUser: (state) => {\n state.loading = true;\n },\n checkExistingPIMAUserSuccess: (state, { payload }) => {\n state.hasErrors = false;\n state.pimaUsersMatchingSignupForm = payload;\n state.loading = false;\n },\n checkExistingPIMAUserFailure: (state, { payload }) => {\n state.loading = false;\n state.hasErrors = true;\n state.errorMsg = payload;\n },\n checkExistingPIMAUserByCognitoId: (state) => {\n state.loading = true;\n },\n checkExistingPIMAUserByCognitoIdSuccess: (state, { payload }) => {\n state.hasErrors = false;\n state.foundStakeId = payload;\n state.loading = false;\n },\n checkExistingPIMAUserByCognitoIdFailure: (state, { payload }) => {\n state.loading = false;\n state.hasErrors = true;\n state.errorMsg = payload;\n },\n setSelectedPIMAUser: (state, { payload }) => {\n state.userInfo.selectedPIMAUser = payload;\n },\n postExistingPIMAUser: (state) => {\n state.loading = true;\n },\n postExistingPIMAUserSuccess: (state, { payload }) => {\n state.loading = false;\n state.hasErrors = false;\n },\n postExistingPIMAUserFailure: (state, { payload }) => {\n state.loading = false;\n state.hasErrors = true;\n state.errorMsg = payload;\n },\n logout: (state) => {\n state.loading = true;\n },\n logoutFailure: (state, { payload }) => {\n state.loading = false;\n state.hasErrors = true;\n state.errorMsg = payload;\n },\n logoutSuccess: (state) => {\n // localStorage.setItem('accessToken', null);\n // localStorage.setItem('username', null);\n localStorage.clear();\n state.isLoggedInREACH = false;\n state.loading = false;\n state.hasErrors = false;\n history.push('/');\n },\n setisUserSignedUpAmplify: (state) => {\n // this is used when the user wants to confirm their registered email by entering the code from the email\n state.userInfo.isSignedUpAmplify = true;\n },\n setisUserSignedUpPIMA: (state) => {\n state.userInfo.isSignedUpPIMA = true;\n },\n setIsLoggedOut: (state) => {\n localStorage.clear();\n state.isLoggedInREACH = false;\n },\n setIsAlreadyLoggedIn: (state, { payload }) => {\n state.isLoggedInREACH = true;\n state.userInfo.username = payload;\n },\n setUsername: (state, { payload }) => {\n state.userInfo.username = payload;\n },\n setSignUpFormData: (state, { payload }) => {\n state.userInfo.signUpFormData = payload;\n }\n }\n});\n\nexport const {\n loginAmplify,\n loginAmplifySuccess,\n loginAmplifyFailure,\n signupAmplify,\n signupAmplifySuccess,\n signupAmplifyFailure,\n signupPIMA,\n signupPIMASuccess,\n signupPIMAFailure,\n confirmSignup,\n confirmSignupAmplifySuccess,\n confirmSignupAmplifyFailure,\n resendConfirmationCode,\n resendConfirmationCodeSuccess,\n resendConfirmationCodeFailure,\n checkExistingPIMAUser,\n checkExistingPIMAUserSuccess,\n checkExistingPIMAUserFailure,\n checkExistingPIMAUserByCognitoId,\n checkExistingPIMAUserByCognitoIdSuccess,\n checkExistingPIMAUserByCognitoIdFailure,\n postExistingPIMAUser,\n postExistingPIMAUserSuccess,\n postExistingPIMAUserFailure,\n logout,\n logoutSuccess,\n logoutFailure,\n setisUserSignedUpAmplify,\n setisUserSignedUpPIMA,\n setIsAlreadyLoggedIn,\n setIsLoggedOut,\n setSelectedPIMAUser,\n setUsername,\n loginREACH,\n loginREACHSuccess,\n loginREACHFailure,\n loginOpenID,\n loginOpenIDSuccess,\n loginOpenIDFailure,\n setSignUpFormData\n} = userSlice.actions;\n\nexport const getLoginState = (state: RootState) => state.user;\n\nexport const createPIMAStakeholder = createAsyncThunk(\n 'user/createPIMAStakeholder',\n async (\n input: {\n email: string;\n firstName: string;\n lastName: string;\n address: string;\n city: string;\n state: string;\n zipcode: string;\n },\n thunkAPI\n ) => {\n const { email, firstName, lastName, address, city, state, zipcode } = input;\n // TODO - ADD TRY/CATCH AND LOADING/ERROR STATES\n await axios.post(`${environment.apiUrl}/REACH/RegisterNewStakeholder`, {\n STAKE_EMAIL: email,\n FIRST_NAME: firstName,\n LAST_NAME: lastName,\n MAIL1_ADDRESS_LINE1: address,\n MAIL1_CITY: city,\n MAIL1_STATE: state,\n MAIL1_ZIP_CODE: zipcode,\n EXTERNAL_ID: localStorage.getItem('sub')\n });\n }\n);\nexport const fetchPostExistingPIMAUser = createAsyncThunk(\n 'user/PostExistingPIMAUser',\n async (input: { stakeId: string; externalId: string }, thunkAPI: any) => {\n const { stakeId, externalId } = input;\n thunkAPI.dispatch(postExistingPIMAUser());\n try {\n const { data } = await axios.post(\n `${environment.apiUrl}/STAKEHOLDER_FILTER/PostExternalUser`,\n { StakeId: stakeId, ExternalId: externalId }\n );\n if (data) {\n thunkAPI.dispatch(postExistingPIMAUserSuccess(data));\n } else {\n thunkAPI.dispatch(postExistingPIMAUserFailure('no result from server'));\n }\n } catch (err) {\n thunkAPI.dispatch(postExistingPIMAUserFailure(err.message));\n }\n }\n);\n\nexport const fetchCheckExistingPIMAUserAndSignUp = createAsyncThunk(\n 'user/checkExistingPIMAUserAndSignUp',\n async (\n input: { lastname: string; zipcode: string; email: string },\n thunkAPI: any\n ) => {\n const { lastname, zipcode, email } = input;\n thunkAPI.dispatch(checkExistingPIMAUser());\n try {\n const { data } = await axios.get(\n `${environment.apiUrl}/STAKEHOLDER_FILTER/GetByLastZipEmail?lastName=${lastname}&zipCode=${zipcode}&email=${email}`\n );\n if (data) {\n thunkAPI.dispatch(checkExistingPIMAUserSuccess(data));\n } else {\n thunkAPI.dispatch(\n checkExistingPIMAUserFailure('no result from server')\n );\n }\n } catch (error) {\n console.error(error);\n thunkAPI.dispatch(checkExistingPIMAUserFailure(error.message));\n }\n }\n);\n\nexport const fetchCheckExistingPIMAUserById = createAsyncThunk(\n 'user/checkExistingPIMAUserById',\n async (input, thunkAPI: any) => {\n // const { lastname, zipcode, email } = input;\n const state = thunkAPI.getState();\n const CognitoId = state.userSlice.cognitoLoginResult.sub;\n thunkAPI.dispatch(checkExistingPIMAUserByCognitoId());\n\n try {\n const { data } = await axios.get(\n `${environment.apiUrl}/STAKEHOLDER/GetStakeId?id=${CognitoId}`\n );\n if (data && data !== 0) {\n thunkAPI.dispatch(checkExistingPIMAUserByCognitoIdSuccess(data));\n } else {\n thunkAPI.dispatch(\n checkExistingPIMAUserByCognitoIdFailure('no result from server')\n );\n }\n } catch (err) {\n thunkAPI.dispatch(checkExistingPIMAUserByCognitoIdFailure(err.message));\n }\n }\n);\n\nexport const fetchLoginAmplify = createAsyncThunk(\n 'user/fetchLoginAmplify',\n async (input: any, thunkAPI: any) => {\n thunkAPI.dispatch(loginAmplify());\n try {\n const data = await Auth.signIn({\n username: input.username,\n password: input.password\n });\n if (data) {\n await thunkAPI.dispatch(loginAmplifySuccess(data.attributes));\n }\n } catch (err) {\n thunkAPI.dispatch(loginAmplifyFailure(err.message));\n return thunkAPI.rejectWithValue(err.message);\n }\n }\n);\n\nexport const getFirstAccessTokenHeaders = (): AxiosRequestConfig => {\n const { firstAccessToken } = JSON.parse(localStorage.getItem('first_token'));\n return {\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n Authorization: `Bearer ${firstAccessToken}`\n }\n };\n};\n\nexport const getREACHAuthHeaders = (): AxiosRequestConfig => {\n const { token } = JSON.parse(localStorage.getItem('reachAuth'));\n return {\n headers: { Authorization: `Bearer ${token}` }\n };\n};\n\nexport const isTokenExpired = (thunkAPI: any) => {\n if (localStorage.getItem('reachAuth')) {\n const { tokenExpirationTime } = JSON.parse(\n localStorage.getItem('reachAuth')\n );\n const currentTime: number = new Date().getTime();\n const tokenExpTime: number = new Date(tokenExpirationTime).getTime();\n if (tokenExpTime < currentTime) {\n alert('Your login session has expired. Please login again.');\n thunkAPI.dispatch(setIsLoggedOut());\n return true;\n } else {\n return false;\n }\n } else {\n throw new Error('no auth token found');\n }\n};\n\n// // old pre-existing login reach call\n// export const fetchLoginREACH = createAsyncThunk(\n// 'user/fetchLoginREACH',\n// async (cognitoId: string, thunkAPI: any) => {\n// thunkAPI.dispatch(loginREACH());\n// try {\n// const { data } = await axios.post(\n// `${environment.apiUrl}/Token/LoginReachUser`,\n// {\n// CognitoId: cognitoId\n// }\n// );\n// if (data) {\n// thunkAPI.dispatch(\n// loginREACHSuccess({\n// token: data.Token,\n// tokenExpirationTime: data.TokenExpiration\n// })\n// );\n// } else {\n// thunkAPI.dispatch(loginREACHFailure('no result from server'));\n// }\n// } catch (err) {\n// const state = thunkAPI.getState();\n// if (state.userSlice.hasErrors) {\n// // previous cognito error is more articulate - display that\n// thunkAPI.dispatch(loginREACHFailure(state.userSlice.errorMsg));\n// } else {\n// thunkAPI.dispatch(loginREACHFailure(err.message));\n// }\n// }\n// }\n// );\n\n//new login reach call\nexport const fetchLoginOpenID = createAsyncThunk(\n 'user/fetchLoginOpenID',\n async (input, thunkAPI: any) => {\n const state = thunkAPI.getState();\n\n const StakeId = state.userSlice.userInfo.selectedPIMAUser\n ? state.userSlice.userInfo.selectedPIMAUser.STAKE_ID\n : state.userSlice.foundStakeId\n ? state.userSlice.foundStakeId\n : '0';\n const clientSecret =\n process.env.NODE_ENV === 'development'\n ? process.env.REACT_APP_CLIENT_SECRET\n : environment.client_secret;\n const clientId =\n process.env.NODE_ENV === 'development'\n ? process.env.REACT_APP_CLIENT_ID\n : environment.client_id;\n const CognitoId = state.userSlice.cognitoLoginResult.sub;\n const loginInfo = `grant_type=password&username=${CognitoId}&password=${StakeId}&scope=openid api&client_id=${clientId}&client_secret=${clientSecret}`;\n const options = {\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',\n Accept: 'application/json'\n }\n };\n // if (CognitoId && StakeId) {\n thunkAPI.dispatch(loginOpenID());\n\n try {\n const response = await axios.post(\n `${environment.authority}/connect/token`,\n loginInfo,\n options\n );\n if (response.data) {\n thunkAPI.dispatch(\n loginOpenIDSuccess({\n firstAccessToken: response.data.access_token,\n token: response.data.access_token,\n tokenExpirationTime: response.data.expires_in\n })\n );\n } else {\n thunkAPI.dispatch(loginOpenIDFailure('no result from server'));\n }\n } catch (err) {\n const state = thunkAPI.getState();\n if (state.userSlice.hasErrors) {\n // previous cognito error is more articulate - display that\n thunkAPI.dispatch(loginOpenIDFailure(state.userSlice.errorMsg));\n return thunkAPI.rejectWithValue(state.userSlice.errorMsg);\n } else {\n thunkAPI.dispatch(loginOpenIDFailure(err.message));\n return thunkAPI.rejectWithValue(err.message);\n }\n }\n //}\n }\n);\n\n// //new login reach call\n// // this works fine, but we want to test a password grant of this above\n// export const fetchLoginOpenID = createAsyncThunk(\n// 'user/fetchLoginOpenID',\n// async (input, thunkAPI: any) => {\n// thunkAPI.dispatch(loginOpenID());\n// const loginInfo = `grant_type=client_credentials&scope=${environment.scope}&client_id=${environment.client_id}&client_secret=${environment.client_secret}`;\n// const options = {\n// headers: {\n// 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',\n// Accept: 'application/json'\n// }\n// };\n// try {\n// const response = await axios.post(\n// `${environment.authority}/connect/token`,\n// loginInfo,\n// options\n// );\n// if (response.data) {\n// thunkAPI.dispatch(\n// loginOpenIDSuccess({\n// firstAccessToken: response.data.access_token,\n// tokenExpirationTime: response.data.expires_in\n// })\n// );\n// } else {\n// thunkAPI.dispatch(loginOpenIDFailure('no result from server'));\n// }\n// } catch (err) {\n// const state = thunkAPI.getState();\n// if (state.userSlice.hasErrors) {\n// // previous cognito error is more articulate - display that\n// thunkAPI.dispatch(loginOpenIDFailure(state.userSlice.errorMsg));\n// } else {\n// thunkAPI.dispatch(loginOpenIDFailure(err.message));\n// }\n// }\n// }\n// );\n\n//new login reach call\nexport const fetchLoginREACH = createAsyncThunk(\n 'user/fetchLoginREACH',\n async (input, thunkAPI: any) => {\n thunkAPI.dispatch(loginREACH());\n const config: AxiosRequestConfig = getFirstAccessTokenHeaders();\n const state = thunkAPI.getState();\n const stakeId = state.userSlice.userInfo.selectedPIMAUser\n ? state.userSlice.userInfo.selectedPIMAUser.STAKE_ID\n : state.userSlice.foundStakeId\n ? state.userSlice.foundStakeId\n : '';\n const externalId = state.userSlice.cognitoLoginResult.sub;\n try {\n const response = await axios.post(\n `${environment.authority}/Token/LoginReachUser`,\n { ExternalId: externalId, StakeId: stakeId },\n config\n );\n if (response.data) {\n thunkAPI.dispatch(\n loginREACHSuccess({\n token: response.data.Token,\n tokenExpirationTime: response.data.expires_in\n })\n );\n } else {\n thunkAPI.dispatch(loginREACHFailure('no result from server'));\n }\n } catch (err) {\n const state = thunkAPI.getState();\n if (state.userSlice.hasErrors) {\n // previous cognito error is more articulate - display that\n thunkAPI.dispatch(loginREACHFailure(state.userSlice.errorMsg));\n } else {\n thunkAPI.dispatch(loginREACHFailure(err.message));\n }\n }\n }\n);\n\nexport const fetchLogout = createAsyncThunk(\n 'user/fetchLogout',\n async (input, thunkAPI: any) => {\n try {\n thunkAPI.dispatch(logoutSuccess());\n } catch (err) {\n thunkAPI.dispatch(logoutFailure(err.message));\n }\n }\n);\n\nexport const fetchAmplifySignup = createAsyncThunk(\n 'user/fetchAmplifySignup',\n async (input: any, thunkAPI: any) => {\n thunkAPI.dispatch(signupAmplify());\n try {\n const data = await Auth.signUp({\n username: input.email,\n password: input.password,\n attributes: {\n email: input.attributes.email\n }\n });\n if (data) {\n thunkAPI.dispatch(signupAmplifySuccess());\n return;\n }\n } catch (err) {\n thunkAPI.dispatch(signupAmplifyFailure(err.message));\n return;\n }\n }\n);\nexport const fetchConfirmAmplifySignup = createAsyncThunk(\n 'user/fetchConfirmAmplifySignup',\n async (input: any, thunkAPI: any) => {\n thunkAPI.dispatch(confirmSignup());\n try {\n const data = await Auth.confirmSignUp(\n input.email,\n input.confirmationCode\n );\n if (data) {\n thunkAPI.dispatch(confirmSignupAmplifySuccess());\n await thunkAPI.dispatch(\n fetchLoginAmplify({\n username: input.email,\n password: input.password\n })\n );\n }\n } catch (err) {\n thunkAPI.dispatch(confirmSignupAmplifyFailure(err.message));\n }\n }\n);\n\nexport const fetchResendConfirmationCode = createAsyncThunk(\n 'user/fetchResendConfirmationCode',\n async (username: string, thunkAPI: any) => {\n thunkAPI.dispatch(resendConfirmationCode());\n try {\n await Auth.resendSignUp(username);\n thunkAPI.dispatch(resendConfirmationCodeSuccess());\n console.log('code resent successfully');\n } catch (err) {\n thunkAPI.dispatch(resendConfirmationCodeFailure(err.message));\n }\n }\n);\n\nexport const fetchSignupPIMA = createAsyncThunk(\n 'user/fetchSignupPIMA',\n async (input, thunkAPI: any) => {\n thunkAPI.dispatch(signupPIMA());\n const state = thunkAPI.getState();\n const stakeId = state.userSlice.userInfo.selectedPIMAUser\n ? state.userSlice.userInfo.selectedPIMAUser.STAKE_ID\n : state.userSlice.foundStakeId\n ? state.userSlice.foundStakeId\n : '';\n try {\n const externalId = state.userSlice.cognitoLoginResult.sub;\n await axios.post(`${environment.apiUrl}/STAKEHOLDER/PostExternalUser`, {\n StakeId: stakeId,\n ExternalId: externalId\n });\n thunkAPI.dispatch(signupPIMASuccess());\n console.log('PIMA account linked successfully.');\n } catch (err) {\n thunkAPI.dispatch(signupPIMAFailure(err.message));\n }\n }\n);\n\nexport const fetchConfirmSignupAll = createAsyncThunk(\n 'user/fetchConfirmSignupAll',\n\n async (\n input: {\n email: string;\n password: string;\n confirmationCode: string;\n firstName: string;\n lastName: string;\n zipcode: string;\n address: string;\n city: string;\n state: string;\n },\n thunkAPI: any\n ) => {\n const {\n email,\n password,\n confirmationCode,\n firstName,\n lastName,\n zipcode,\n address,\n city,\n state\n } = input;\n thunkAPI.dispatch(confirmSignup());\n try {\n const data = await Auth.confirmSignUp(email, confirmationCode);\n if (data) {\n thunkAPI.dispatch(confirmSignupAmplifySuccess());\n await thunkAPI.dispatch(\n fetchLoginAmplify({\n username: email,\n password: password\n })\n );\n const reduxState = thunkAPI.getState();\n if (reduxState.userSlice.userInfo.selectedPIMAUser) {\n await thunkAPI.dispatch(fetchSignupPIMA());\n } else {\n await thunkAPI.dispatch(\n createPIMAStakeholder({\n email,\n firstName,\n lastName,\n address,\n city,\n state,\n zipcode\n })\n );\n }\n\n const cognitoId = localStorage.getItem('sub');\n const stakeId = reduxState.userSlice.userInfo.selectedPIMAUser\n ? reduxState.userSlice.userInfo.selectedPIMAUser.STAKE_ID\n : reduxState.userSlice.foundStakeId\n ? reduxState.userSlice.foundStakeId\n : '';\n\n if (cognitoId && stakeId) {\n thunkAPI.dispatch(fetchLoginOpenID());\n } else if (!stakeId) {\n await thunkAPI.dispatch(fetchCheckExistingPIMAUserById());\n await thunkAPI.dispatch(fetchLoginOpenID());\n //await thunkAPI.dispatch(fetchLoginREACH()); // Bobby wants to try something else for now, returning to this later\n } else {\n throw new Error('no cognito id');\n }\n }\n } catch (err) {\n thunkAPI.dispatch(confirmSignupAmplifyFailure(err.message));\n }\n }\n);\n\nexport default userSlice.reducer;\n","import { Button } from '@material-ui/core';\nimport React, { ReactElement } from 'react';\nimport history from '../../history';\nimport { setSelectedPIMAUser } from '../../store/slices/user';\nimport { useDispatch } from 'react-redux';\n\ninterface Props {\n user: any;\n}\n\nexport default function ExistingPIMAUser({ user }: Props): ReactElement {\n const dispatch = useDispatch();\n const handleThisIsMe = () => {\n dispatch(setSelectedPIMAUser(user));\n history.push('/signup/confirmaccount');\n };\n const handleThisIsNOTMe = () => {\n history.push('/signup/confirmaccount');\n };\n return (\n \n \n
Name: {`${user.FIRST_NAME} ${user.LAST_NAME}`}
\n
Address: {user.MAIL1_ADDRESS_LINE1}
\n
City: {user.MAIL1_CITY}
\n
State: {user.MAIL1_STATE}
\n
Zipcode: {user.MAIL1_ZIP_CODE}
\n \n
\n \n This is me\n \n \n This is NOT me\n \n
\n \n );\n}\n","import React, { ReactElement, useEffect } from 'react';\nimport { Button, Typography } from '@material-ui/core/';\nimport { Link } from 'react-router-dom';\nimport styled from 'styled-components';\nimport history from '../../history';\nimport { useSelector } from 'react-redux';\nimport { Auth, Hub } from 'aws-amplify';\nimport { setIsAlreadyLoggedIn } from '../../store/slices/user';\nimport { useDispatch } from 'react-redux';\nimport { styled as styledMUI } from '@material-ui/core/styles';\nimport { Spacer } from '../../styled-elements';\nimport EmailIcon from '@material-ui/icons/Email';\nimport { RootState } from '../../store';\nimport { environment } from '../../environment';\nimport { IowaDOTPrivacyPolicy, MassDOTPrivacyPolicy } from '..';\nimport { Helmet } from 'react-helmet';\nconst ComponentContainer = styled.div`\n display: flex;\n flex-direction: column;\n`;\n\nconst IowaDOTLandingPageImg = styled.img`\n margin-top: 16px;\n max-height: 50vh;\n width: 100%;\n object-fit: cover;\n object-position: 100% 25%;\n margin-bottom: 16px;\n`;\n\nconst MassDOTLandingPageImg = styled.img`\n margin-top: 16px;\n max-height: 50vh;\n width: 100%;\n object-fit: cover;\n object-position: 100% 25%;\n margin-bottom: 16px;\n @media only screen and (min-height: 720px) {\n object-position: 100% 75%;\n margin-top: 24px;\n }\n`;\n\nconst MaineDOTLandingPageImg = styled.img`\n margin-top: 16px;\n max-height: 50vh;\n width: 100%;\n object-fit: cover;\n object-position: 100% 25%;\n margin-bottom: 16px;\n @media only screen and (min-height: 720px) {\n object-position: 100% 75%;\n margin-top: 24px;\n }\n`;\n\nconst CTDOTLandingPageImg = styled.img`\n margin-top: 16px;\n max-height: 50vh;\n width: 100%;\n object-fit: cover;\n object-position: 100% 25%;\n margin-bottom: 16px;\n`;\n\nconst LogosContainerFlex = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n @media only screen and (max-width: 720px) {\n justify-content: center;\n }\n`;\n\nconst MainDOTLogosContainerFlex = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n margin-bottom: 10px;\n margin-top: 10px;\n @media only screen and (max-width: 720px) {\n justify-content: center;\n }\n`;\n\nconst CTDOTLogosContainerFlex = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n height: 45px;\n @media only screen and (max-width: 720px) {\n justify-content: center;\n }\n`;\n\nconst EmptyFormattingDiv = styled.div`\n // this is so we can have one item centered and the other right aligned\n width: 125px;\n @media only screen and (max-width: 720px) {\n display: none;\n }\n`;\nconst ReachLogo = styled.img`\n width: 200px;\n position: absolute;\n left: calc(50% - 103px);\n @media only screen and (max-width: 720px) {\n width: 125px;\n position: static;\n }\n`;\n\nconst IowaDOTEntityLogo = styled.img`\n width: 125px;\n margin: 8px 20px 0px 0px;\n @media only screen and (max-width: 720px) {\n margin: 0px 20px 0px 0px;\n width: 100px;\n margin-left: 16px;\n }\n`;\n\nconst MassDOTEntityLogo = styled.img`\n width: 175px;\n margin: 8px 20px 0px 0px;\n @media only screen and (max-width: 720px) {\n width: 125px;\n margin-left: 16px;\n }\n`;\n\n\nconst CTDOTEntityLogo = styled.img`\n width: 125px;\n margin: 8px 20px 0px 0px;\n position: absolute;\n top: -15px;\n right: 10px;\n @media only screen and (max-width: 720px) {\n margin: 0px 20px 0px 0px;\n width: 100px;\n margin-left: 16px;\n }\n`;\n\nconst MaineDOTEntityLogo = styled.img`\n width: 175px;\n margin: 8px 20px 0px 0px;\n @media only screen and (max-width: 720px) {\n width: 125px;\n margin-left: 16px;\n }\n`;\nconst ReachSubtitle = styled.h1`\n text-transform: uppercase;\n font-size: 12px;\n color: #707070;\n position: absolute;\n left: calc(50% - 155px);\n top: 62px;\n @media only screen and (max-width: 720px) {\n padding-top: 4px;\n top: 48px;\n }\n`;\n\nconst MaineDOTSubtitle = styled.h1`\n text-transform: uppercase;\n font-size: 18px;\n color: black;\n position: absolute;\n left: calc(50% - 105px);\n top: 37px;\n @media only screen and (max-width: 720px) {\n padding-top: 4px;\n top: 48px;\n }\n`;\n\nconst GoogleLogoComponent = styled.img`\n width: 25px;\n padding-right: 12px;\n`;\n\nconst CenteredFlexContainer = styled.div`\n display: flex;\n align-self: center;\n flex-direction: column;\n`;\n\nconst LoginButtonContainer = styled.div`\n background-color: white;\n text-decoration: none;\n width: 200px;\n border: 1px solid grey;\n border-radius: 5px;\n height: 40px;\n`;\n\nconst LoginButton = styledMUI(Button)({\n margin: 0,\n padding: '0px 8px',\n height: '100%',\n width: '100%',\n display: 'flex',\n justifyContent: 'space-around'\n});\n\nconst LoginText = styled.div`\n padding-bottom: 3px;\n font-size: 12px;\n`;\n\nconst PolicyAgreementsLandingPage = styled.div`\n width: 300px;\n font-size: 14px;\n margin: 36px auto;\n @media only screen and (min-height: 800px) {\n width: 300px;\n position: fixed;\n margin: 12px;\n font-size: 14px;\n bottom: 0;\n left: 50%;\n transform: translate(-50%, -50%); // fixes bottom center on desktop too\n }\n`;\n\nexport const getEntityPrivacyPolicy = () => {\n // console.log('environment: getEntityPrivacyPolicy', environment);\n switch (environment.entityName) {\n case 'Iowa DOT':\n return ;\n case 'Mass DOT':\n return ;\n case 'Maine DOT':\n return <>;\n case 'Connecticut DOT':\n return <>;\n default:\n throw new Error(\n 'unhandled case in LandingPage -> getEntityPrivacyPolicy()'\n );\n }\n};\n\nconst getEntityLandingPageImg = () => {\n switch (environment.entityName) {\n case 'Iowa DOT':\n return (\n \n );\n case 'Mass DOT':\n return (\n \n );\n case 'Maine DOT':\n return (\n \n );\n case 'Connecticut DOT':\n return (\n \n );\n default:\n throw new Error(\n 'unhandled case in LandingPage -> getEntityLandingPageImg()'\n );\n }\n};\n\nconst getEntitySignIn = () => {\n switch (environment.entityName) {\n case 'Iowa DOT':\n return (\n
\n New to REACH? Sign up\n
\n );\n case 'Mass DOT':\n return (\n
\n New to REACH? Sign up\n
\n );\n case 'Maine DOT':\n return (\n
\n New to this site? Sign up\n
\n );\n case 'Connecticut DOT':\n return (\n
\n New to REACH? Sign up\n
\n );\n default:\n throw new Error(\n 'unhandled case in LandingPage -> getEntityLandingPageImg()'\n );\n }\n};\n\nconst getEntityLogo = () => {\n // console.log('environment: ', environment);\n switch (environment.entityName) {\n case 'Iowa DOT':\n return (\n \n );\n case 'Mass DOT':\n return (\n \n );\n case 'Maine DOT':\n return (\"\");\n case 'Connecticut DOT':\n return (\n \n );\n default:\n throw new Error('unhandled case in LandingPage -> getEntityLogo()');\n }\n};\n\nconst getReachLogo = () => {\n // console.log('environment: ', environment);\n switch (environment.entityName) {\n case 'Iowa DOT':\n return (\n \n );\n case 'Mass DOT':\n return (\n \n );\n case 'Maine DOT':\n return (\n \n );\n case 'Connecticut DOT':\n return (\n \n );\n default:\n throw new Error('unhandled case in LandingPage -> getReachLogo()');\n }\n};\n\nconst getLogosContainer = () => {\n // console.log('environment: ', environment);\n switch (environment.entityName) {\n case 'Iowa DOT':\n return (\n \n \n \n {getReachLogo()}\n {getEntityLogo()}\n \n );\n case 'Mass DOT':\n return (\n \n \n \n {getReachLogo()}\n {getEntityLogo()}\n \n );\n case 'Maine DOT':\n return (\n \n \n \n {getReachLogo()}\n {getEntityLogo()}\n \n );\n case 'Connecticut DOT':\n return (\n \n \n \n {getReachLogo()}\n {getEntityLogo()}\n \n );\n default:\n throw new Error('unhandled case in LandingPage -> getReachLogo()');\n }\n};\n\nconst getReachSubTitle = () => {\n // console.log('environment: ', environment);\n switch (environment.entityName) {\n case 'Iowa DOT':\n return (\n Real-Time Engagement and Communications Hub\n );\n case 'Mass DOT':\n return (\n Real-Time Engagement and Communications Hub\n );\n case 'Maine DOT':\n return (\n Public Involvement\n );\n case 'Connecticut DOT':\n return (\n Real-Time Engagement and Communications Hub\n );\n default:\n throw new Error('unhandled case in LandingPage -> getReachSubTitle()');\n }\n};\n\nexport default function LandingPage(): ReactElement {\n const dispatch = useDispatch();\n const { isLoggedInREACH } = useSelector((state: RootState) => {\n return state;\n }).userSlice;\n\n useEffect(() => {\n // use for logging, state is in store\n Hub.listen('auth', ({ payload: { event, data } }) => {\n switch (event) {\n case 'signIn':\n break;\n case 'cognitoHostedUI':\n break;\n case 'signOut':\n // handled in Header component\n break;\n case 'signIn_failure':\n console.log('SIGN OUT FAILURE');\n break;\n case 'cognitoHostedUI_failure':\n console.log('Sign in failure', data);\n break;\n }\n });\n\n getUser().then((userData) => {\n if (userData && !isLoggedInREACH) {\n const payload = userData.signInUserSession.idToken.payload;\n localStorage.setItem('sub', payload.sub);\n if (payload && localStorage.getItem('reachAuth')) {\n dispatch(setIsAlreadyLoggedIn(payload.email));\n }\n }\n });\n }, [dispatch, isLoggedInREACH]);\n\n const getUser = () => {\n return Auth.currentAuthenticatedUser()\n .then((userData) => {\n return userData;\n })\n .catch(() => {\n //console.log('Not signed in');\n });\n };\n\n useEffect(() => {\n isLoggedInREACH && history.push('/projects');\n }, [isLoggedInREACH]);\n\n return (\n \n \n \n {environment.entityName} REACH\n \n {environment.entityName.includes('DOT') && (\n \n )}\n \n \n \n {getLogosContainer()}\n {getReachSubTitle()}\n {/*Real-Time Engagement and Communications Hub*/}\n \n {getEntityLandingPageImg()}\n \n \n {/* MAS-193 hide google login - finish development in future phase */}\n {/* \n \n Auth.federatedSignIn({\n provider: CognitoHostedUIIdentityProvider.Google\n })\n }\n >\n \n Login with Google\n \n \n \n */}\n {/* \n Coming October 1\n */}\n {/* ADD SIGNUP/LOGIN BACK AFTER PROD LAUNCH */}\n \n history.push('/login')}>\n \n Login with Email\n \n \n \n \n \n {/* ADD SIGNUP/LOGIN BACK AFTER PROD LAUNCH */}\n {getEntitySignIn()}\n \n \n Frequently Asked Questions\n \n \n {getEntityPrivacyPolicy()}\n \n \n );\n}\n","import React, { ReactElement, useEffect } from 'react';\nimport { Button, CircularProgress, TextField } from '@material-ui/core';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { ExistingPIMAUserList, SubHeaderGoBack } from '../../';\nimport {\n fetchAmplifySignup,\n fetchConfirmAmplifySignup,\n fetchCheckExistingPIMAUserAndSignUp,\n setUsername,\n setSignUpFormData,\n fetchSignupPIMA,\n fetchConfirmSignupAll\n} from '../../../store/slices/user';\nimport history from '../../../history';\nimport { styled as styledMUI } from '@material-ui/core/styles';\nimport { PolicyAgreements } from '../../../styled-elements';\nimport { RootState } from '../../../store';\nimport styled from 'styled-components';\nimport { getEntityPrivacyPolicy } from '../LandingPage';\nimport DOMPurify from 'dompurify';\n\nexport const TextFieldHalfWidth = styledMUI(TextField)({\n width: 'calc(50% - 4px)'\n});\n\nexport const TextFieldThirdWidth = styledMUI(TextField)({\n width: 'calc(33% - 5px)'\n});\n\nconst MyH1 = styled.h1`\n text-align: left;\n font-size: 20px;\n`;\n\nexport default function AmplifySignUpForm(): ReactElement {\n const {\n isLoggedInREACH,\n userInfo,\n loading,\n hasErrors,\n errorMsg,\n pimaUsersMatchingSignupForm,\n selectedPIMAUser\n } = useSelector((state: RootState) => {\n return state;\n }).userSlice;\n useEffect(() => {\n if (\n pimaUsersMatchingSignupForm &&\n pimaUsersMatchingSignupForm.length === 0\n ) {\n history.push('/signup/confirmaccount');\n }\n }, [pimaUsersMatchingSignupForm]);\n const dispatch = useDispatch();\n\n const [newAccountFormState, setNewAccountFormState] = React.useState({\n email: '',\n password: '',\n confirmationCode: ''\n });\n\n const [signUpFormState, setSignUpFormState] = React.useState({\n email: '',\n lastname: '',\n zipcode: '',\n firstname: '',\n address: '',\n city: '',\n state: ''\n });\n\n const handleChangeSignUpForm = (e) => {\n if (e.target.name === 'email') {\n setSignUpFormState({\n ...signUpFormState,\n [e.target.name]: DOMPurify.sanitize(e.target.value.toLowerCase())\n });\n } else {\n setSignUpFormState({\n ...signUpFormState,\n [e.target.name]: DOMPurify.sanitize(e.target.value)\n });\n }\n };\n\n const handleChangeNewAccount = (e) => {\n if (e.target.name === 'email') {\n setNewAccountFormState({\n ...newAccountFormState,\n [e.target.name]: DOMPurify.sanitize(e.target.value.toLowerCase())\n });\n } else {\n setNewAccountFormState({\n ...newAccountFormState,\n [e.target.name]: DOMPurify.sanitize(e.target.value)\n });\n }\n };\n\n const handleSubmitNewAccount = async (e) => {\n e.preventDefault();\n const { email, password, confirmationCode } = newAccountFormState;\n dispatch(\n fetchConfirmSignupAll({\n email,\n password,\n confirmationCode,\n firstName: userInfo.signUpFormData.firstName,\n lastName: userInfo.signUpFormData.lastName,\n address: userInfo.signUpFormData.address,\n city: userInfo.signUpFormData.city,\n state: userInfo.signUpFormData.state,\n zipcode: userInfo.signUpFormData.zipcode\n })\n );\n };\n\n const handleSignupCheckForExistingAccount = (e) => {\n e.preventDefault();\n const { email, lastname, zipcode } = signUpFormState;\n dispatch(setUsername(email)); // for other components to grab\n dispatch(\n setSignUpFormData({\n email: signUpFormState.email,\n firstName: signUpFormState.firstname,\n lastName: signUpFormState.lastname,\n address: signUpFormState.address,\n city: signUpFormState.city,\n state: signUpFormState.state,\n zipcode: signUpFormState.zipcode\n })\n );\n if (!userInfo.isSignedUpAmplify) {\n dispatch(\n fetchCheckExistingPIMAUserAndSignUp({\n email,\n lastname,\n zipcode\n })\n );\n }\n };\n\n return (\n \n \n \n {isLoggedInREACH ? (\n
Success! You will be redirected shortly.
\n ) : (\n \n {userInfo.isSignedUpAmplify ? ( // CONFIRMATION SCREEN\n \n
\n A confirmation code will be emailed to you shortly to confirm\n your account. Please confirm your email address and enter the\n code here.\n
\n
\n \n \n \n
\n \n Confirm\n \n \n
\n ) : (\n \n {!pimaUsersMatchingSignupForm && ( // SIGN UP SCREEN AT /SIGNUP\n
\n \n {getEntityPrivacyPolicy()}\n \n
\n \n \n \n \n \n \n \n
\n \n Sign Up\n \n \n
\n )}\n {pimaUsersMatchingSignupForm &&\n pimaUsersMatchingSignupForm.length && (\n
\n

Connect

\n \n {getEntityPrivacyPolicy()}\n \n \n
\n )}\n
\n )}\n \n )}\n \n {hasErrors && errorMsg && (\n
\n {errorMsg === 'User is not confirmed.' ||\n errorMsg === 'Incorrect username or password.' ||\n errorMsg === 'User does not exist.' ||\n errorMsg === 'User is disabled.' ||\n errorMsg === 'Request failed with status code 401'\n ? errorMsg\n : ''}\n
\n )}\n {loading && (\n <>\n \n Signing up\n \n \n \n )}\n
\n );\n}\n","import { Button, CircularProgress, TextField } from '@material-ui/core';\nimport React, { ReactElement, useEffect, useState } from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport {\n fetchSignupPIMA,\n fetchAmplifySignup,\n fetchConfirmAmplifySignup,\n createPIMAStakeholder,\n fetchLoginREACH,\n fetchConfirmSignupAll\n} from '../../../store/slices/user';\nimport { PolicyAgreementsFixedBottom } from '../../../styled-elements';\nimport { PasswordRequirements } from '../../../components';\nimport { RootState } from '../../../store';\nimport styled from 'styled-components';\nimport { getEntityPrivacyPolicy } from '../LandingPage';\nimport { Helmet } from 'react-helmet';\nimport { environment } from '../../../environment';\nimport { TextFieldHalfWidth, TextFieldThirdWidth } from './AmplifySignUpForm';\nimport DOMPurify from 'dompurify';\n\nconst MyH1 = styled.h1`\n text-align: left;\n font-size: 20px;\n`;\n\nlet pwCache = ''; // used to temp store password from choose your password screen to confirm account screen. amplify requires it along with the email confirmation code.\nexport default function ConfirmAccount(props: any): ReactElement {\n const dispatch = useDispatch();\n const {\n userInfo,\n loading,\n hasErrors,\n errorMsg,\n isLoggedInREACH,\n isLoggedInAmplify\n } = useSelector((state: RootState) => {\n return state;\n }).userSlice;\n\n const [newAccountFormState, setNewAccountFormState] = useState({\n password: '',\n confirmPassword: ''\n });\n\n const [confirmAccountCodeFormState, setConfirmAccountCodeFormState] =\n useState({\n password: '',\n confirmationCode: '',\n firstName: '',\n lastName: '',\n zipcode: '',\n address: '',\n city: '',\n state: ''\n });\n\n const [confirmAccountFormState, setConfirmAccountFormState] = useState({\n confirmationCode: ''\n });\n\n const [errorText, setErrorText] = useState('');\n\n const handleSubmitNewAccount = async (e) => {\n // For \"Choose your password\" screen\n e.preventDefault();\n const { password, confirmPassword } = newAccountFormState;\n pwCache = password;\n const { username: email } = userInfo;\n if (password !== confirmPassword) {\n setErrorText('Passwords do not match.');\n return;\n } else {\n setErrorText('');\n if (!userInfo.isSignedUpAmplify && email && password) {\n await dispatch(\n fetchAmplifySignup({\n email: email,\n password: password,\n attributes: {\n email: email\n }\n })\n );\n }\n }\n };\n\n const handleChangeNewAccount = (e) => {\n setNewAccountFormState({\n ...newAccountFormState,\n [e.target.name]: e.target.value\n });\n };\n\n const handleSubmitConfirmAccount = async (e) => {\n // for multi-factor auth screen where you submit confirmation code\n e.preventDefault();\n const { confirmationCode } = confirmAccountFormState;\n const { username: email } = userInfo;\n dispatch(\n fetchConfirmSignupAll({\n email,\n password: pwCache,\n confirmationCode,\n firstName: userInfo.signUpFormData.firstName,\n lastName: userInfo.signUpFormData.lastName,\n address: userInfo.signUpFormData.address,\n city: userInfo.signUpFormData.city,\n state: userInfo.signUpFormData.state,\n zipcode: userInfo.signUpFormData.zipcode\n })\n );\n };\n\n const handleChangeConfirmAccount = (e) => {\n setConfirmAccountFormState({\n ...confirmAccountFormState,\n [e.target.name]: DOMPurify.sanitize(e.target.value)\n });\n };\n\n const handleChangeConfirmAccountCode = (e) => {\n // case where the user didnt enter their email confirmation code correctly then left the app\n setConfirmAccountCodeFormState({\n ...confirmAccountCodeFormState,\n [e.target.name]: DOMPurify.sanitize(e.target.value)\n });\n };\n\n const handleSubmitConfirmAccountCode = (e) => {\n // case where the user didnt enter their email confirmation code correctly then left the app\n // for multi-factor auth screen where you submit confirmation code\n e.preventDefault();\n const { confirmationCode, password } = confirmAccountCodeFormState;\n const { username: email } = userInfo;\n dispatch(\n fetchConfirmSignupAll({\n email,\n password,\n confirmationCode,\n firstName: DOMPurify.sanitize(confirmAccountCodeFormState.firstName),\n lastName: DOMPurify.sanitize(confirmAccountCodeFormState.lastName),\n address: DOMPurify.sanitize(confirmAccountCodeFormState.address),\n city: DOMPurify.sanitize(confirmAccountCodeFormState.city),\n state: DOMPurify.sanitize(confirmAccountCodeFormState.state),\n zipcode: DOMPurify.sanitize(confirmAccountCodeFormState.zipcode)\n })\n );\n };\n\n return (\n
\n \n \n Confirm Account - {environment.entityName} REACH\n \n \n {!props.location.state &&\n userInfo &&\n !userInfo.isSignedUpAmplify && ( // CHOOSE PASSWORD SCREEN AT /confirmaccount\n \n
\n Choose your password\n \n
\n
\n \n \n
\n \n Continue\n \n \n
\n )}\n {!props.location.state &&\n userInfo &&\n userInfo.isSignedUpAmplify && ( // CONFIRMATION SCREEN AT /confirmaccount\n \n {!isLoggedInREACH ? (\n \n
\n A confirmation code will be emailed to you shortly to confirm\n your account. Please confirm your email address and enter the\n code here.\n
\n
\n \n
\n \n Confirm\n \n \n \n {getEntityPrivacyPolicy()}\n \n
\n ) : (\n
Success! You will be redirected shortly.
\n )}\n
\n )}\n {props.location.state && (\n // Cognito \"unconfirmed\" state - case where the user didnt enter their email confirmation code correctly then left the app and returned\n \n {isLoggedInREACH ? (\n
Success! You will be redirected shortly.
\n ) : (\n <>\n
\n A confirmation code will be emailed to you shortly to confirm\n your account. Please confirm your code and user info here.\n
\n
\n \n \n \n \n \n \n \n \n
\n \n Confirm\n \n \n \n {getEntityPrivacyPolicy()}\n \n \n )}\n
\n )}\n {hasErrors && errorMsg && (\n
\n {errorMsg}\n
\n )}\n {loading && (\n <>\n \n Confirming account\n \n \n \n )}{' '}\n
\n );\n}\n","import { Tooltip } from '@material-ui/core';\nimport React, { ReactElement } from 'react';\nimport styled from 'styled-components';\n\nconst DivAlignedLeft = styled.div`\n text-align: left;\n`;\n\nconst MyUL = styled.ul`\n list-style: none;\n padding: 0px;\n`;\n\nconst MyLI = styled.li`\n padding: 0px;\n`;\n\nconst MyH2 = styled.h2`\n margin-bottom: 8px;\n font-size: 16px;\n`;\n\nexport default function PasswordRequirements(): ReactElement {\n return (\n \n Password Requirements\n \n 8 characters\n At least 1 uppercase letter\n At least 1 lowercase letter\n At least 1 number\n ?\">\n At least 1 special character\n \n \n \n );\n}\n","import React, { ReactElement, useEffect } from 'react';\nimport { Button, CircularProgress, TextField } from '@material-ui/core';\nimport { useSelector, useDispatch } from 'react-redux';\nimport {\n fetchLoginAmplify,\n fetchLoginREACH,\n fetchLoginOpenID,\n fetchCheckExistingPIMAUserById,\n fetchResendConfirmationCode,\n setUsername\n} from '../../../store/slices/user';\nimport { Link, useHistory } from 'react-router-dom';\nimport { RootState } from '../../../store';\nimport DOMPurify from 'dompurify';\n// import 'cross-fetch/polyfill';\nimport * as AmazonCognitoIdentity from 'amazon-cognito-identity-js';\nimport { config } from '../../../cognito/aws-config';\n\nexport default function AmplifyLoginForm(): ReactElement {\n const dispatch = useDispatch();\n const history = useHistory();\n const { isLoggedInREACH, loading, hasErrors, errorMsg, foundStakeId } =\n useSelector((state: RootState) => state).userSlice;\n\n const [formState, setFormState] = React.useState({\n username: '',\n password: ''\n });\n\n useEffect(() => {\n if (isLoggedInREACH) {\n setTimeout(() => {\n history.push('/projects');\n }, 2000);\n }\n }, [history, isLoggedInREACH]);\n\n useEffect(() => {\n if (hasErrors && errorMsg) {\n console.error('errorMsg:', errorMsg);\n }\n }, [hasErrors, errorMsg]);\n\n const handleSubmit = async (e) => {\n e.preventDefault();\n const { username, password } = formState;\n await dispatch(fetchLoginAmplify({ username, password }));\n const cognitoId = localStorage.getItem('sub');\n if (cognitoId && foundStakeId) {\n dispatch(fetchLoginOpenID());\n } else if (cognitoId) {\n await dispatch(fetchCheckExistingPIMAUserById());\n await dispatch(fetchLoginOpenID());\n }\n };\n const handleChange = (e) => {\n if (e.target.name === 'username') {\n setFormState({\n ...formState,\n [e.target.name]: DOMPurify.sanitize(e.target.value.toLowerCase())\n });\n } else {\n setFormState({\n ...formState,\n [e.target.name]: DOMPurify.sanitize(e.target.value)\n });\n }\n };\n\n return (\n \n {isLoggedInREACH ? (\n
Success! You will be redirected shortly.
\n ) : (\n \n \n \n

\n \n
\n\n \n Log in\n \n {loading && (\n <>\n \n Logging in\n \n \n \n )}\n \n\n {hasErrors && errorMsg && (\n \n
\n {errorMsg === 'User is not confirmed.' ||\n errorMsg === 'Incorrect username or password.' ||\n errorMsg === 'User does not exist.' ||\n errorMsg === 'User is disabled.' ||\n errorMsg === 'Request failed with status code 401'\n ? errorMsg\n : ''}\n
\n {errorMsg === 'User is not confirmed.' && (\n \n {\n dispatch(fetchResendConfirmationCode(formState.username));\n dispatch(setUsername(formState.username));\n }}\n >\n \n Confirm account\n \n \n \n )}\n
\n )}\n
\n )}\n \n );\n}\n","import React, { ReactElement } from 'react';\n\nexport default function IowaDOTPrivacyPolicy(): ReactElement {\n return (\n <>\n {`By continuing, you agree to all Iowa DOT policies and statements regarding `}\n \n Terms of Use\n \n ,{' '}\n \n Accessibility\n \n , and{' '}\n \n Privacy\n \n \n );\n}\n","import React, { ReactElement } from 'react';\n\nexport default function MassDOTPrivacyPolicy(): ReactElement {\n return (\n
\n By continuing, you agree to our User Agreement, Privacy Policy and Cookie\n Policy.\n
\n );\n}\n","import React from 'react';\nimport { createStyles, Theme, makeStyles } from '@material-ui/core/styles';\nimport List from '@material-ui/core/List';\nimport { useSelector } from 'react-redux';\nimport { ProjectComment } from '..';\nimport { RootState } from '../../store';\n\n// this component acts as a middle-man between Project and ProjectComment components to reduce the size of the Project component\nexport default function ProjectComments(props) {\n const { isMobile } = useSelector(\n (state: RootState) => state\n ).applicationSlice;\n const useStyles = makeStyles((theme: Theme) =>\n createStyles({\n root: {\n padding: theme.spacing(0, 0)\n },\n paper: {\n width: !isMobile && 575,\n margin: `${theme.spacing(1)}px auto`,\n padding: theme.spacing(0)\n },\n list: {\n paddingTop: 0\n }\n })\n );\n const classes = useStyles();\n const { selectedProjectComments } = useSelector(\n (state: RootState) => state\n ).projectsSlice;\n\n return (\n
\n \n {selectedProjectComments.map((comment, idx) => (\n \n ))}\n \n
\n );\n}\n","import { createSlice, createAsyncThunk } from '@reduxjs/toolkit';\nimport axios, { AxiosRequestConfig } from 'axios';\nimport { RootState } from '..';\nimport { environment } from '../../environment';\nimport { ReachProjectFilterDTO } from '../../models/DTOs';\nimport CountyDTO from '../../models/DTOs/projects/CountyDTO';\nimport { fetchLoginREACH, getREACHAuthHeaders, isTokenExpired } from './user';\nimport { get } from 'http';\ninterface ProjectsState {\n projects: any[] | null;\n isAllProjectsLoaded: boolean;\n hasToggledFollow: boolean;\n isProjectCommentSelection: boolean;\n isFollowIntent: boolean | null;\n isNotificationPreferencesOpen: boolean;\n projectToFollowOrUnfollow: any;\n projectsFilterSelection: string; // generic string - handles selection state for all /projects filters as well as snackbar messages for custom filters\n customProjectsFilterSelection: boolean; // custom filter selection\n selectedProject: any;\n selectedProjectEvents: { data: any[]; count: number };\n selectedProjectComments: any[] | null;\n selectedEventDetails: any;\n isLoadingProjectEvents: boolean;\n isLoadingProjectComments: boolean;\n isAllSelectedProjCommentsLoaded: boolean;\n selectedCounties: CountyDTO[];\n isLoadingProjCommentDetails: boolean;\n hasClickedMultiLanguageEvent: boolean;\n notificationPrefsSaveOrFailMsg: string;\n lookups: {\n LUCounties: CountyDTO[];\n };\n loading: boolean;\n isLoadingMoreProjects: boolean;\n isNumAttendeesDialogOpen: boolean;\n hasErrors: boolean;\n errorMsg: string;\n searchText: string;\n startDate: Date | null;\n endDate: Date | null;\n sortField: string;\n isMine: boolean;\n hasEvents: boolean;\n}\n\nconst initialState: ProjectsState = {\n projects: null,\n isAllProjectsLoaded: false,\n hasToggledFollow: false,\n isProjectCommentSelection: false,\n isFollowIntent: null,\n isNotificationPreferencesOpen: false,\n projectToFollowOrUnfollow: null,\n projectsFilterSelection: 'all', // default /projects list filter\n customProjectsFilterSelection: false,\n selectedProject: null,\n selectedProjectEvents: null,\n selectedProjectComments: null,\n selectedEventDetails: null,\n selectedCounties: [],\n isLoadingProjectEvents: false,\n isLoadingProjectComments: false,\n isAllSelectedProjCommentsLoaded: false,\n isLoadingProjCommentDetails: false,\n hasClickedMultiLanguageEvent: false,\n notificationPrefsSaveOrFailMsg: '',\n lookups: {\n LUCounties: []\n },\n loading: false,\n isLoadingMoreProjects: false,\n isNumAttendeesDialogOpen: false,\n hasErrors: false,\n errorMsg: '',\n searchText: '',\n startDate: null,\n endDate: null,\n sortField: '',\n isMine: false,\n hasEvents: false\n};\n\nconst projectsSlice = createSlice({\n name: 'projects',\n initialState,\n reducers: {\n setSelectedCounties: (state, { payload }) => {\n state.selectedCounties = payload;\n },\n setUpdateProjectDetailsComment: (state, { payload }) => {\n const found = state.selectedProjectComments.find(\n (c) => c.StakeCommentId === payload.StakeCommentId\n );\n if (found) {\n found.IsVisible = payload.IsVisible;\n }\n },\n setAreProjectCommentResponsesExpanded: (state, { payload }) => {\n state.selectedProjectComments.find(\n (c) => c.StakeCommentId === payload.StakeCommentId\n ).AreResponsesExpanded = payload.AreResponsesExpanded;\n },\n addStakeCommentResponseToProjectsState: (state, { payload }) => {\n state.selectedProjectComments\n .find((c) => c.StakeCommentId === payload.StakeCommentId)\n .Responses.push(payload);\n },\n registerForEvent: (state) => {\n state.loading = true;\n },\n registerForEventSuccess: (state, { payload }) => {\n if (Array.isArray(state.selectedProjectEvents)) {\n state.selectedProjectEvents.find(\n (event) => event.PeId === payload\n ).IsRegistered = true;\n }\n state.loading = false;\n state.hasErrors = false;\n },\n registerForEventFailure: (state, { payload }) => {\n state.loading = false;\n state.hasErrors = true;\n state.errorMsg = payload;\n },\n setNotificationPrefsSaveOrFailMsg: (state, { payload }) => {\n state.notificationPrefsSaveOrFailMsg = payload;\n },\n clearEventSelectionState: (state) => {\n state.selectedEventDetails = null;\n state.hasClickedMultiLanguageEvent = false;\n },\n setIsNotificationPreferencesOpen: (state, { payload }) => {\n state.isNotificationPreferencesOpen = payload;\n },\n setIsProjectCommentSelection: (state, { payload }) => {\n state.isProjectCommentSelection = payload;\n },\n setFollowIntent: (state, { payload }) => {\n state.projectToFollowOrUnfollow = payload.project;\n state.isFollowIntent = payload.isFollowIntent;\n },\n setHasToggledFollow: (state, { payload }) => {\n state.hasToggledFollow = payload;\n },\n setHasClickedMultiLanguageEvent: (state, { payload }) => {\n state.hasClickedMultiLanguageEvent = payload;\n },\n clearSelectedProject: (state) => {\n state.isNotificationPreferencesOpen =\n initialState.isNotificationPreferencesOpen;\n state.selectedProject = initialState.selectedProject;\n state.selectedProjectEvents = initialState.selectedProjectEvents;\n state.selectedProjectComments = initialState.selectedProjectComments;\n state.isAllSelectedProjCommentsLoaded =\n initialState.isAllSelectedProjCommentsLoaded;\n },\n getProjects: (state) => {\n state.isAllProjectsLoaded = false;\n state.loading = true;\n },\n getProjectsFailure: (state, { payload }) => {\n state.loading = false;\n state.hasErrors = true;\n state.errorMsg = payload;\n },\n getProjectsSuccess: (state, { payload }) => {\n state.projects = payload;\n state.loading = false;\n state.hasErrors = false;\n },\n loadMoreProjects: (state) => {\n state.isLoadingMoreProjects = true;\n },\n loadMoreProjectsSuccess: (state, { payload }) => {\n state.projects = [...state.projects, ...payload];\n state.isLoadingMoreProjects = false;\n state.hasErrors = false;\n },\n setIsAllProjectsLoaded: (state, { payload }) => {\n state.isAllProjectsLoaded = payload;\n },\n loadMoreProjectsFailure: (state, { payload }) => {\n state.isLoadingMoreProjects = false;\n state.hasErrors = true;\n state.errorMsg = payload;\n },\n getSelectedProject: (state) => {\n state.loading = true;\n },\n getSelectedProjectFailure: (state, { payload }) => {\n state.loading = false;\n state.hasErrors = true;\n state.errorMsg = payload;\n },\n getSelectedProjectSuccess: (state, { payload }) => {\n state.loading = false;\n state.hasErrors = false;\n state.selectedProject = payload;\n },\n getSelectedProjectEvents: (state) => {\n state.isLoadingProjectEvents = true;\n },\n getSelectedProjectEventsFailure: (state, { payload }) => {\n state.isLoadingProjectEvents = false;\n state.hasErrors = true;\n state.errorMsg = payload;\n },\n getSelectedProjectEventsSuccess: (state, { payload }) => {\n state.isLoadingProjectEvents = false;\n state.hasErrors = false;\n state.selectedProjectEvents = payload;\n },\n getSelectedProjectComments: (state) => {\n state.isLoadingProjectComments = true;\n },\n getSelectedProjectCommentsFailure: (state, { payload }) => {\n state.isLoadingProjectComments = false;\n state.hasErrors = true;\n state.errorMsg = payload;\n },\n getSelectedProjectCommentsSuccess: (state, { payload }) => {\n state.isLoadingProjectComments = false;\n state.hasErrors = false;\n if (Array.isArray(state.selectedProjectComments)) {\n state.selectedProjectComments = [\n ...state.selectedProjectComments,\n ...payload\n ];\n } else {\n state.selectedProjectComments = payload;\n }\n },\n setIsAllSelectedProjCommentsLoaded: (state, { payload }) => {\n state.isAllSelectedProjCommentsLoaded = payload;\n },\n followProject: (state) => {\n state.loading = true;\n },\n followProjectSuccess: (state, { payload }) => {\n if (state.projects && state.projects.length) {\n const project = state.projects.find(\n (p) => p.ProjectId === payload.projectId\n );\n project.IsFollowing = true;\n project.IsNotify = payload.isNotify;\n project.IsEmail = payload.isEmail;\n project.IsSMS = payload.isSMS;\n state.projectToFollowOrUnfollow = project;\n }\n if (state.selectedProject) {\n state.selectedProject.IsFollowing = true;\n state.selectedProject.IsNotify = payload.isNotify;\n state.selectedProject.IsEmail = payload.isEmail;\n state.selectedProject.IsSMS = payload.isSMS;\n }\n state.loading = false;\n state.hasErrors = false;\n },\n followProjectFailure: (state, { payload }) => {\n state.loading = false;\n state.hasErrors = true;\n state.errorMsg = payload;\n },\n unfollowProject: (state) => {\n state.loading = true;\n },\n unfollowProjectSuccess: (state, { payload }) => {\n if (state.projectToFollowOrUnfollow) {\n state.projectToFollowOrUnfollow = null;\n }\n if (state.projects && state.projects.length) {\n // pertains to both all projects and followed projects views\n const project = state.projects.find(\n (p) => p.ProjectId === payload.projectId\n );\n project.IsFollowing = false;\n project.IsNotify = false;\n project.IsEmail = false;\n project.IsSMS = false;\n }\n if (\n state.projects &&\n state.projects.length &&\n payload.isOnFollowingOnlyView\n ) {\n // pertains to followed projects view only\n state.projects = state.projects.filter(\n (p) => p.ProjectId !== payload.projectId\n );\n }\n if (state.selectedProject) {\n state.selectedProject.IsFollowing = false;\n state.selectedProject.IsEmail = false;\n state.selectedProject.IsSMS = false;\n state.selectedProject.IsNotify = false;\n }\n state.loading = false;\n state.hasErrors = false;\n },\n unfollowProjectFailure: (state, { payload }) => {\n state.loading = false;\n state.hasErrors = true;\n state.errorMsg = payload;\n },\n setSelectedProject: (state, { payload }) => {\n state.selectedProject = payload;\n },\n clearProjects: (state) => {\n state.projects = [];\n },\n setProjectsFilterSelection: (state, { payload }) => {\n state.projectsFilterSelection = payload;\n if (payload === 'all') {\n state.isMine = false;\n state.hasEvents = false;\n } else if (payload === 'following') {\n state.isMine = true;\n state.hasEvents = false;\n } else if (payload === 'events') {\n state.isMine = false;\n state.hasEvents = true;\n } else if (payload === 'custom') {\n // This should no longer exist\n state.isMine = false;\n state.hasEvents = false;\n }\n },\n setCustomProjectsFilterSelection: (state, { payload }) => {\n state.customProjectsFilterSelection = payload;\n },\n getCommentDetails: (state) => {\n state.isLoadingProjCommentDetails = true;\n },\n getCommentDetailsSuccess: (state, { payload }) => {\n state.isLoadingProjCommentDetails = false;\n state.hasErrors = false;\n },\n getCommentDetailsFailure: (state, { payload }) => {\n state.isLoadingProjCommentDetails = false;\n state.hasErrors = true;\n state.errorMsg = payload;\n },\n getEvent: (state) => {\n state.loading = true;\n },\n getEventSuccess: (state, { payload }) => {\n state.selectedEventDetails = payload;\n state.hasErrors = false;\n },\n getEventFailure: (state, { payload }) => {\n state.hasErrors = true;\n state.errorMsg = payload;\n },\n setSelectedEvent: (state, { payload }) => {\n state.selectedEventDetails = payload;\n },\n updateSelectedProjectState: (state, { payload }) => {\n const { IsEmail, IsSMS, IsNotify } = payload;\n state.selectedProject = {\n ...state.selectedProject,\n IsEmail,\n IsSMS,\n IsNotify\n };\n },\n getLUCounties: (state) => {\n state.loading = true;\n },\n getLUCountiesSuccess: (state, { payload }) => {\n state.lookups = { ...state.lookups, LUCounties: payload };\n state.loading = false;\n state.hasErrors = false;\n },\n getLUCountiesFailure: (state, { payload }) => {\n state.hasErrors = true;\n state.loading = false;\n state.errorMsg = payload;\n },\n setIsNumAttendeesDialogOpen: (state, { payload }) => {\n state.isNumAttendeesDialogOpen = payload;\n },\n setSearchText: (state, { payload }) => {\n state.searchText = payload;\n },\n setStartDate: (state, { payload }) => {\n state.startDate = payload;\n },\n setEndDate: (state, { payload }) => {\n state.endDate = payload;\n },\n setSortField: (state, { payload }) => {\n state.sortField = payload;\n }\n }\n});\n\nexport const {\n setIsNumAttendeesDialogOpen,\n setUpdateProjectDetailsComment,\n setSelectedEvent,\n setAreProjectCommentResponsesExpanded,\n addStakeCommentResponseToProjectsState,\n updateSelectedProjectState,\n getEvent,\n getEventSuccess,\n getEventFailure,\n clearEventSelectionState,\n setIsProjectCommentSelection,\n setIsNotificationPreferencesOpen,\n setFollowIntent,\n setHasToggledFollow,\n setHasClickedMultiLanguageEvent,\n clearSelectedProject,\n getSelectedProject,\n getSelectedProjectSuccess,\n getSelectedProjectFailure,\n getSelectedProjectEvents,\n getSelectedProjectEventsSuccess,\n getSelectedProjectEventsFailure,\n getSelectedProjectComments,\n getSelectedProjectCommentsSuccess,\n getSelectedProjectCommentsFailure,\n getProjects,\n getProjectsSuccess,\n getProjectsFailure,\n loadMoreProjects,\n loadMoreProjectsSuccess,\n loadMoreProjectsFailure,\n setIsAllProjectsLoaded,\n setIsAllSelectedProjCommentsLoaded,\n setSelectedProject,\n clearProjects,\n setProjectsFilterSelection,\n setCustomProjectsFilterSelection,\n followProject,\n followProjectSuccess,\n followProjectFailure,\n unfollowProject,\n unfollowProjectSuccess,\n unfollowProjectFailure,\n getCommentDetails,\n getCommentDetailsSuccess,\n getCommentDetailsFailure,\n setNotificationPrefsSaveOrFailMsg,\n registerForEvent,\n registerForEventSuccess,\n registerForEventFailure,\n getLUCounties,\n getLUCountiesSuccess,\n getLUCountiesFailure,\n setSelectedCounties,\n setSearchText,\n setStartDate,\n setEndDate,\n setSortField\n} = projectsSlice.actions;\n\nexport const getProjectsState = (state: RootState) => state.projects;\n\nexport const fetchLUCounties = createAsyncThunk(\n 'projects/fetchLUCounties',\n async (input, thunkAPI: any) => {\n const hasTokenExpired = isTokenExpired(thunkAPI);\n try {\n if (hasTokenExpired) {\n return;\n }\n const config: AxiosRequestConfig = getREACHAuthHeaders();\n thunkAPI.dispatch(getLUCounties());\n const { data } = await axios.get(\n `${environment.apiUrl}/lu_county/get`,\n config\n );\n if (data) {\n thunkAPI.dispatch(getLUCountiesSuccess(data));\n } else {\n throw new Error('error fetching counties list');\n }\n } catch (err) {\n thunkAPI.dispatch(getLUCountiesFailure(err.message));\n }\n }\n);\nexport const fetchRegisterForEvent = createAsyncThunk(\n 'projects/fetchRegisterForEvent',\n async (\n input: { eventId: number; attendanceCount: number },\n thunkAPI: any\n ) => {\n const hasTokenExpired = isTokenExpired(thunkAPI);\n const { eventId, attendanceCount } = input;\n try {\n if (hasTokenExpired) {\n return;\n }\n const config: AxiosRequestConfig = getREACHAuthHeaders();\n thunkAPI.dispatch(registerForEvent());\n const { status } = await axios.get(\n `${environment.apiUrl}/Reach/RegisterForEvent?eventId=${eventId}&attendance=${attendanceCount}`,\n config\n );\n if (status === 200) {\n thunkAPI.dispatch(registerForEventSuccess(eventId));\n } else {\n throw new Error('error registering for event');\n }\n } catch (err) {\n thunkAPI.dispatch(registerForEventFailure(err.message));\n }\n }\n);\n\nexport const fetchSelectedProject = createAsyncThunk(\n 'projects/fetchSelectedProject',\n async (projectId: number, thunkAPI: any) => {\n const hasTokenExpired = isTokenExpired(thunkAPI);\n try {\n if (hasTokenExpired) {\n return;\n }\n const config: AxiosRequestConfig = getREACHAuthHeaders();\n thunkAPI.dispatch(getSelectedProject());\n const { data } = await axios.get(\n `${environment.apiUrl}/Reach/GetProject?id=${projectId}`,\n config\n );\n if (data) {\n thunkAPI.dispatch(getSelectedProjectSuccess(data));\n } else {\n throw new Error('no result from server');\n }\n } catch (err) {\n thunkAPI.dispatch(getSelectedProjectFailure(err.message));\n }\n }\n);\n\nexport const fetchEvent = createAsyncThunk(\n 'projects/fetchEventById',\n async (input: { eventId: number }, thunkAPI: any) => {\n const { eventId } = input;\n thunkAPI.dispatch(getEvent());\n const hasTokenExpired = isTokenExpired(thunkAPI);\n try {\n if (hasTokenExpired) {\n return;\n }\n const config: AxiosRequestConfig = getREACHAuthHeaders();\n const { data } = await axios.get(\n `${environment.apiUrl}/Reach/GetEvent?id=${eventId}`,\n config\n );\n if (data) {\n thunkAPI.dispatch(getEventSuccess(data));\n } else {\n throw new Error('no result from server');\n }\n } catch (err) {\n thunkAPI.dispatch(getEventFailure(err.message));\n }\n }\n);\n\nexport const fetchSelectedProjectEvents = createAsyncThunk(\n 'projects/fetchSelectedProjectEvents',\n async (input: { projectId: number }, thunkAPI: any) => {\n const { projectId } = input;\n thunkAPI.dispatch(getSelectedProjectEvents());\n const hasTokenExpired = isTokenExpired(thunkAPI);\n try {\n if (hasTokenExpired) {\n return;\n }\n const config: AxiosRequestConfig = getREACHAuthHeaders();\n const { data } = await axios.get(\n `${environment.apiUrl}/Reach/GetEventsByProjectId?id=${projectId}`,\n config\n );\n if (data) {\n thunkAPI.dispatch(getSelectedProjectEventsSuccess(data));\n } else {\n throw new Error('no result from server');\n }\n } catch (err) {\n thunkAPI.dispatch(getSelectedProjectEventsFailure(err.message));\n }\n }\n);\n\nexport const fetchSelectedProjectComments = createAsyncThunk(\n 'projects/fetchSelectedProjectComments',\n async (\n input: { projectId: number; start: number; length: number },\n thunkAPI: any\n ) => {\n const { projectId, start, length } = input;\n const hasTokenExpired = isTokenExpired(thunkAPI);\n try {\n if (hasTokenExpired) {\n return;\n }\n const config: AxiosRequestConfig = getREACHAuthHeaders();\n thunkAPI.dispatch(getSelectedProjectComments());\n const { data } = await axios.get(\n `${environment.apiUrl}/Reach/GetCommentsByProjectId?id=${projectId}&start=${start}&length=${length}`,\n config\n );\n if (data) {\n if (data.length < length) {\n thunkAPI.dispatch(setIsAllSelectedProjCommentsLoaded(true));\n } else {\n thunkAPI.dispatch(setIsAllSelectedProjCommentsLoaded(false));\n }\n data.forEach((d) => (d.AreResponsesExpanded = false));\n thunkAPI.dispatch(getSelectedProjectCommentsSuccess(data));\n } else {\n throw new Error('no result from server');\n }\n } catch (err) {\n thunkAPI.dispatch(getSelectedProjectCommentsFailure(err.message));\n }\n }\n);\n\nexport const fetchFollowProject = createAsyncThunk(\n 'projects/fetchFollowProject',\n // defaults to in-app and email notifications\n async (\n input: {\n projectId: number;\n isEmail: boolean;\n isSMS: boolean;\n isNotify: boolean;\n },\n thunkAPI: any\n ) => {\n const { projectId, isEmail, isSMS, isNotify } = input;\n thunkAPI.dispatch(followProject());\n const hasTokenExpired = isTokenExpired(thunkAPI);\n try {\n if (hasTokenExpired) {\n return;\n }\n const config: AxiosRequestConfig = getREACHAuthHeaders();\n const { status } = await axios.get(\n `${environment.apiUrl}/Reach/StakeholderSubscribe?projectId=${projectId}&isEmail=${isEmail}&isSMS=${isSMS}&isNotify=${isNotify}`,\n config\n );\n if (status === 200) {\n thunkAPI.dispatch(\n followProjectSuccess({ projectId, isEmail, isSMS, isNotify })\n );\n } else {\n throw new Error('no result from server');\n }\n } catch (err) {\n thunkAPI.dispatch(followProjectFailure(err.message));\n }\n }\n);\n\nexport const fetchUnfollowProject = createAsyncThunk(\n 'projects/fetchUnfollowProject',\n async (\n input: { projectId: number; isOnFollowingOnlyView: boolean },\n thunkAPI: any\n ) => {\n const { projectId, isOnFollowingOnlyView } = input;\n thunkAPI.dispatch(unfollowProject());\n const hasTokenExpired = isTokenExpired(thunkAPI);\n try {\n if (hasTokenExpired) {\n return;\n }\n const config: AxiosRequestConfig = getREACHAuthHeaders();\n const { status } = await axios.get(\n `${\n environment.apiUrl\n }/Reach/StakeholderUnsubscribe?projectId=${projectId}&isDelete=${true}`,\n config\n );\n if (status === 200) {\n thunkAPI.dispatch(\n unfollowProjectSuccess({ projectId, isOnFollowingOnlyView })\n );\n } else {\n throw new Error('no result from server');\n }\n } catch (err) {\n thunkAPI.dispatch(unfollowProjectFailure(err.message));\n }\n }\n);\n\nexport const fetchProjects = createAsyncThunk(\n 'projects/fetchProjects',\n async (\n input: {\n isMine: boolean;\n start: number;\n length: number;\n hasEvents: boolean;\n countyIds?: number[];\n },\n thunkAPI: any\n ) => {\n const { isMine, start, length, hasEvents, countyIds } = input;\n thunkAPI.dispatch(getProjects());\n const hasTokenExpired = isTokenExpired(thunkAPI);\n try {\n if (hasTokenExpired) {\n return;\n }\n const config: AxiosRequestConfig = getREACHAuthHeaders();\n const payload: ReachProjectFilterDTO = {\n // IsMine: isMine, // Overwritten below\n Start: start,\n Length: length,\n // HasEvents: hasEvents, // Overwritten below\n PssCountyIds: countyIds\n };\n if (thunkAPI.getState().projectsSlice.isMine != null) {\n payload.IsMine = thunkAPI.getState().projectsSlice.isMine;\n }\n if (thunkAPI.getState().projectsSlice.hasEvents != null) {\n payload.HasEvents = thunkAPI.getState().projectsSlice.hasEvents;\n }\n if (thunkAPI.getState().projectsSlice.searchText) {\n payload.SearchText = thunkAPI.getState().projectsSlice.searchText;\n }\n if (thunkAPI.getState().projectsSlice.startDate) {\n payload.StartDate = thunkAPI.getState().projectsSlice.startDate;\n }\n if (thunkAPI.getState().projectsSlice.endDate) {\n payload.EndDate = thunkAPI.getState().projectsSlice.endDate;\n }\n if (thunkAPI.getState().projectsSlice.sortField) {\n payload.SortField = thunkAPI.getState().projectsSlice.sortField;\n }\n // payload.SortField = 'EVENT_DATE_OLDEST';\n const response = await axios.post(\n `${environment.apiUrl}/Reach/FilterProjects`,\n payload,\n config\n );\n if (response.data) {\n // v1 old sorting working, but handling on back end now\n // if (!payload.SortField) {\n // if (isMine === false && hasEvents === false) {\n // // ALL button clicked\n // response.data.sort((a, b) =>\n // a.ProjectNr.localeCompare(b.ProjectNr)\n // );\n // } else {\n // // FOLLOWING or MEETINGS button clicked\n // response.data.sort((a, b) => {\n // const today = new Date();\n // today.setHours(0, 0, 0, 0);\n\n // const maxDate = new Date(8640000000000000);\n // const dateA = a.MeetingDate ? new Date(a.MeetingDate) : maxDate;\n // const dateB = b.MeetingDate ? new Date(b.MeetingDate) : maxDate;\n\n // const todayTime = today.getTime();\n // const dateATime = dateA.getTime();\n // const dateBTime = dateB.getTime();\n\n // const isFutureA = dateATime >= todayTime;\n // const isFutureB = dateBTime >= todayTime;\n\n // if (isFutureA && isFutureB) {\n // return dateATime - dateBTime;\n // } else if (!isFutureA && !isFutureB) {\n // return dateBTime - dateATime;\n // } else {\n // return isFutureA ? -1 : 1;\n // }\n // });\n // }\n // }\n thunkAPI.dispatch(getProjectsSuccess(response.data));\n if (response.data.length < length) {\n thunkAPI.dispatch(setIsAllProjectsLoaded(true));\n } else {\n thunkAPI.dispatch(setIsAllProjectsLoaded(false));\n }\n } else {\n thunkAPI.dispatch(getProjectsFailure('no result from server'));\n }\n } catch (err) {\n thunkAPI.dispatch(getProjectsFailure(err.message));\n }\n }\n);\n\nexport const fetchMoreProjects = createAsyncThunk(\n 'projects/fetchMoreProjects',\n async (\n input: {\n isMine: boolean;\n start: number;\n length: number;\n hasEvents: boolean;\n // countyIds?: string[]; // Original\n countyIds?: number[];\n },\n thunkAPI: any\n ) => {\n const { isMine, start, length, hasEvents, countyIds } = input;\n thunkAPI.dispatch(loadMoreProjects());\n const hasTokenExpired = isTokenExpired(thunkAPI);\n try {\n if (hasTokenExpired) {\n return;\n }\n const config: AxiosRequestConfig = getREACHAuthHeaders();\n const payload: ReachProjectFilterDTO = {\n // IsMine: isMine, // Overwritten below\n Start: start,\n Length: length,\n // HasEvents: hasEvents, // Overwritten below\n PssCountyIds: countyIds\n };\n if (thunkAPI.getState().projectsSlice.isMine != null) {\n payload.IsMine = thunkAPI.getState().projectsSlice.isMine;\n }\n if (thunkAPI.getState().projectsSlice.hasEvents != null) {\n payload.HasEvents = thunkAPI.getState().projectsSlice.hasEvents;\n }\n if (thunkAPI.getState().projectsSlice.searchText) {\n payload.SearchText = thunkAPI.getState().projectsSlice.searchText;\n }\n if (thunkAPI.getState().projectsSlice.startDate) {\n payload.StartDate = thunkAPI.getState().projectsSlice.startDate;\n }\n if (thunkAPI.getState().projectsSlice.endDate) {\n payload.EndDate = thunkAPI.getState().projectsSlice.endDate;\n }\n if (thunkAPI.getState().projectsSlice.sortField) {\n payload.SortField = thunkAPI.getState().projectsSlice.sortField;\n }\n const { data } = await axios.post(\n `${environment.apiUrl}/Reach/FilterProjects`,\n payload,\n config\n );\n if (data) {\n if (data.length < length) {\n thunkAPI.dispatch(setIsAllProjectsLoaded(true));\n } else {\n thunkAPI.dispatch(setIsAllProjectsLoaded(false));\n }\n thunkAPI.dispatch(loadMoreProjectsSuccess(data));\n } else {\n thunkAPI.dispatch(loadMoreProjectsFailure('no result from server'));\n }\n } catch (err) {\n thunkAPI.dispatch(loadMoreProjectsFailure(err.message));\n }\n }\n);\n\nexport default projectsSlice.reducer;\n","import { environment } from '../environment';\n\nexport const config = {\n Auth: {\n region: environment.region,\n userPoolId: environment.cognitoUserPoolId,\n userPoolWebClientId: environment.cognitoUserPoolWebClientId,\n oauth: {\n // client_id: '',\n domain: environment.cognitoDomain,\n scope: ['email', 'openid'],\n redirectSignIn: `${environment.clientUrl}/`,\n redirectSignOut: `${environment.clientUrl}/`,\n responseType: 'token'\n },\n federated: {\n provider: ['Google', 'Facebook']\n }\n }\n};\n","import { createSlice } from '@reduxjs/toolkit';\nimport { config } from '../../cognito/aws-config';\nimport Amplify from 'aws-amplify';\nimport { RootState } from '..';\nimport { isMobile } from 'react-device-detect'; // initial state from react-device detect, after determined by window width\n\nAmplify.configure(config);\ninterface ApplicationState {\n navigationTab: string;\n currentPath: string;\n prevPath: string;\n isMobile: boolean;\n isShowingSystemSnackbarMsg: boolean;\n}\n\nconst initialState: ApplicationState = {\n navigationTab: '',\n currentPath: '',\n prevPath: '',\n isMobile: isMobile,\n isShowingSystemSnackbarMsg: false\n};\n\nconst applicationSlice = createSlice({\n name: 'application',\n initialState,\n reducers: {\n setNavigationTab: (state, { payload }) => {\n state.navigationTab = payload;\n },\n setCurrentPath: (state, { payload }) => {\n state.prevPath = state.currentPath;\n state.currentPath = payload;\n },\n setIsMobile: (state, { payload }) => {\n state.isMobile = payload;\n },\n setIsShowingSystemSnackbarMsg: (state, { payload }) => {\n state.isShowingSystemSnackbarMsg = payload;\n }\n }\n});\n\nexport const {\n setNavigationTab,\n setCurrentPath,\n setIsMobile,\n setIsShowingSystemSnackbarMsg\n} = applicationSlice.actions;\n\nexport const getApplicationState = (state: RootState) => state.application;\n\nexport default applicationSlice.reducer;\n","import React, { SyntheticEvent } from 'react';\nimport Snackbar from '@material-ui/core/Snackbar';\nimport MuiAlert, { AlertProps } from '@material-ui/lab/Alert';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { RootState } from '../../store';\nimport { setIsShowingSystemSnackbarMsg } from '../../store/slices/application';\n\nfunction Alert(props: AlertProps) {\n return ;\n}\n\ninterface Props {\n snackbarText: string;\n}\nexport default function SystemSuccessSnackbar({ snackbarText }: Props) {\n const { isShowingSystemSnackbarMsg } = useSelector(\n (state: RootState) => state\n ).applicationSlice;\n const dispatch = useDispatch();\n const handleClose = (event?: React.SyntheticEvent, reason?: string) => {\n if (reason === 'clickaway') {\n return;\n }\n dispatch(setIsShowingSystemSnackbarMsg(false));\n };\n\n return (\n
\n ) => {\n handleClose(event);\n dispatch(setIsShowingSystemSnackbarMsg(false));\n }}\n >\n ) => {\n handleClose(event);\n dispatch(setIsShowingSystemSnackbarMsg(false));\n }}\n severity=\"success\"\n >\n {snackbarText}\n \n \n
\n );\n}\n","import React, { useCallback, useEffect, useState } from 'react';\nimport {\n LoadMore,\n ProjectComments,\n ToggleFollowBottomDrawer,\n ProjectNotificationsPreferences,\n LanguageSelectionBottomDrawer,\n DynamicDialog,\n ProjectEvents\n} from '../';\nimport {\n Button,\n CircularProgress,\n IconButton,\n Tooltip\n} from '@material-ui/core';\nimport { Link, useHistory, useLocation } from 'react-router-dom';\nimport InsertCommentIcon from '@material-ui/icons/InsertComment';\nimport ChatBubbleIcon from '@material-ui/icons/ChatBubble';\nimport ThumbUpIcon from '@material-ui/icons/ThumbUp';\nimport ShareIcon from '@material-ui/icons/Share';\nimport { useSelector, useDispatch } from 'react-redux';\nimport {\n fetchSelectedProject,\n clearSelectedProject,\n fetchSelectedProjectEvents,\n fetchSelectedProjectComments,\n setFollowIntent,\n fetchFollowProject,\n setHasToggledFollow,\n clearEventSelectionState,\n setHasClickedMultiLanguageEvent,\n updateSelectedProjectState,\n fetchRegisterForEvent\n} from '../../store/slices/projects';\nimport { setIsStakeCommentSubmitted } from '../../store/slices/participate';\nimport { setIsShowingSystemSnackbarMsg } from '../../store/slices/application';\nimport styled from 'styled-components';\nimport { setNavigationTab } from '../../store/slices/application';\nimport { CopyToClipboard } from 'react-copy-to-clipboard';\nimport { RootState } from '../../store';\nimport { environment } from '../../environment';\nimport { Helmet } from 'react-helmet';\nimport SystemSuccessSnackbar from '../Shared/SystemSuccessSnackbar';\n\nconst ProjectDetailsTitle = styled.h1`\n text-align: left;\n margin-top: 8px;\n font-size: 16px;\n`;\n\nexport const ProjectDetailsHeading = styled.h2`\n text-align: left;\n margin-top: 8px;\n font-size: 14px;\n`;\n\nconst BasicFlexContainer = styled.div`\n display: flex;\n align-items: center;\n`;\n\nconst Spacer = styled.div`\n width: 4px;\n`;\n\nconst FlexCenteredButton = styled.div`\n display: flex;\n align-items: center;\n cursor: pointer;\n`;\n\nconst Container = styled.div`\n display: flex;\n justify-content: center;\n flex-direction: column;\n align-items: center;\n margin-bottom: 100px;\n overflow: hidden;\n`;\n\nconst Project = (props) => {\n const dispatch = useDispatch();\n const {\n selectedProject,\n hasToggledFollow,\n selectedProjectEvents,\n selectedProjectComments,\n loading,\n isLoadingProjectEvents,\n isLoadingProjectComments,\n selectedEventDetails,\n hasClickedMultiLanguageEvent,\n hasErrors,\n errorMsg,\n isAllSelectedProjCommentsLoaded\n } = useSelector((state: RootState) => state).projectsSlice;\n const history = useHistory();\n const { currentPath, isShowingSystemSnackbarMsg } = useSelector(\n (state: RootState) => state\n ).applicationSlice;\n const { stakeholderInfo } = useSelector(\n (state: RootState) => state\n ).myProfileSlice;\n const { isStakeCommentSubmitted } = useSelector(\n (state: RootState) => state\n ).participateSlice;\n const { projectId } = props.match.params;\n const [isCopiedProjLink, setIsCopiedProjLink] = useState(false);\n const location = useLocation();\n const handleToggleFollow = async (project) => {\n if (project.IsFollowing) {\n // unfollow happens in ToggleFollowBottomDrawer so they can confirm.\n // only dispatch intent for ToggleFollowBottomDrawer state\n dispatch(setFollowIntent({ project, isFollowIntent: false }));\n } else {\n // follow immediately\n dispatch(setFollowIntent({ project, isFollowIntent: true }));\n dispatch(\n updateSelectedProjectState({\n ...selectedProject,\n IsEmail: true\n })\n );\n await dispatch(\n fetchFollowProject({\n projectId: project.ProjectId,\n isEmail: false,\n isSMS: false,\n isNotify: true // MAS-215 default to in-app notifications\n })\n );\n }\n if (!hasErrors) {\n handleClickOpen();\n }\n };\n\n const handleClickOpen = () => {\n dispatch(setHasToggledFollow(true));\n };\n\n const subscribeToHistory = useCallback(() => {\n const unlisten = history.listen((loc, action) => {\n if (action) {\n if (loc.pathname !== currentPath && !loc.pathname.includes(projectId)) {\n dispatch(clearSelectedProject());\n unlisten(); // no longer listen after clearing project on page leave\n }\n }\n });\n }, [currentPath, dispatch, history, projectId]);\n\n const renderSystemSuccessSnackbar = () => {\n if (isShowingSystemSnackbarMsg === true) {\n return (\n <>\n \n \n );\n }\n };\n\n useEffect(() => {\n if (\n isStakeCommentSubmitted === true &&\n isShowingSystemSnackbarMsg === false\n ) {\n dispatch(setIsShowingSystemSnackbarMsg(true));\n }\n }, [isStakeCommentSubmitted]);\n\n useEffect(() => {\n if (!loading && !selectedProject && !selectedProjectEvents) {\n subscribeToHistory();\n dispatch(fetchSelectedProject(projectId));\n dispatch(setNavigationTab('projects'));\n dispatch(\n fetchSelectedProjectEvents({\n projectId\n })\n );\n dispatch(\n fetchSelectedProjectComments({\n projectId,\n start: 0,\n length: 20\n })\n );\n }\n }, [\n dispatch,\n hasErrors,\n loading,\n projectId,\n selectedProject,\n selectedProjectEvents,\n subscribeToHistory\n ]);\n const getEntityProjectTitle = () => {\n switch (environment.entityName) {\n case 'Iowa DOT':\n return selectedProject.ProjectDesc;\n default:\n return selectedProject.ProjectNr;\n }\n };\n\n return (\n \n {hasErrors && errorMsg && (\n
\n {errorMsg}\n
\n )}\n {!selectedProject ? (\n <>\n \n Loading the selected project details\n \n \n \n ) : (\n
\n \n \n \n {`Project - ${\n selectedProject.ProjectDesc\n ? selectedProject.ProjectDesc\n : 'Project'\n }`}{' '}\n - {environment.entityName} REACH\n \n \n \n \n \n {/* */}\n \n {getEntityProjectTitle()}\n \n
\n \n \n \n \n {`${selectedProject.CommentCount}`}\n
\n \n \n \n \n \n {`${selectedProject.Favorability}%`}\n
\n \n \n \n \n {\n await handleToggleFollow(selectedProject);\n }}\n color=\"secondary\"\n style={{\n fontSize: 10,\n maxWidth: 75,\n minWidth: 75,\n backgroundColor: selectedProject.IsFollowing ? '#21890e' : ''\n }}\n variant=\"contained\"\n >\n {selectedProject.IsFollowing ? 'FOLLOWING' : 'FOLLOW'}\n {' '}\n dispatch(clearSelectedProject())}\n to={`/participate/comment/${projectId}`}\n style={{ textDecoration: 'none' }}\n >\n \n \n
Comment
\n \n \n \n
\n
\n \n \n setIsCopiedProjLink(true)}\n >\n \n
Share
\n \n \n \n
\n \n
\n \n \n
\n \n Location:\n {selectedProject.District > -1 && (\n {` District ${selectedProject.District}`}\n )}\n \n \n Description:\n {selectedProject.ProjectDesc.length && (\n {` ${selectedProject.ProjectDesc}`}\n )}\n \n \n
\n {selectedProject.MapId && (\n
\n \n \n Project Map\n \n \n
\n )}\n
\n {selectedProjectComments &&\n selectedProjectComments.length > 0 && }\n {selectedProjectComments && renderSystemSuccessSnackbar()}\n
\n \n \n )}\n {hasToggledFollow && selectedProject && (\n \n )}\n {hasClickedMultiLanguageEvent && selectedEventDetails && (\n \n )}\n {selectedProject && !isAllSelectedProjCommentsLoaded && }\n {isCopiedProjLink && (\n \n )}\n
\n );\n};\n\nexport default Project;\n","export enum EventSettingsENUM {\n IS_EMBEDDED = 1 << 0,\n IS_PODIUM = 1 << 1,\n IS_ANON = 1 << 2,\n IS_IN_REACH = 1 << 3,\n}","import React, { ReactElement, useEffect, useState } from 'react';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport Dialog from '@material-ui/core/Dialog';\nimport { Button, DialogActions, TextField } from '@material-ui/core';\nimport { Spacer } from '../../styled-elements';\nimport {\n clearEventSelectionState,\n fetchRegisterForEvent,\n setHasClickedMultiLanguageEvent,\n setIsNumAttendeesDialogOpen,\n setSelectedEvent\n} from '../../store/slices/projects';\nimport { environment } from '../../environment';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { RootState } from '../../store';\nimport { useHistory } from 'react-router-dom';\n\ninterface Props {\n projectId: number;\n}\n\nexport default function InputNumAttendeesDialog({\n projectId\n}: Props): ReactElement {\n const [attendanceCount, setAttendanceCount] = useState(1);\n const { stakeholderInfo } = useSelector(\n (state: RootState) => state\n ).myProfileSlice;\n\n const { isNumAttendeesDialogOpen, selectedEventDetails } = useSelector(\n (state: RootState) => state\n ).projectsSlice;\n const dispatch = useDispatch();\n\n const register = () => {\n if (selectedEventDetails && stakeholderInfo) {\n if (selectedEventDetails.OnlineMeetings.length) {\n // is Multi-Language event\n dispatch(setHasClickedMultiLanguageEvent(true));\n } else {\n const {\n PeId: eventId,\n PeGuid,\n EventSettings,\n OnlineResource\n } = selectedEventDetails;\n dispatch(fetchRegisterForEvent({ eventId, attendanceCount }));\n if (!selectedEventDetails.OnlineMeetings.length) {\n return; // in person meeting early return\n }\n /* EventSettings is a bitflag accounting for isVPH, isPodium, and isAnon\n public enum EventSettings : int\n {\n IS_EMBEDDED = 1 << 0,\n IS_PODIUM = 1 << 1,\n IS_ANON = 1 << 2,\n }\n */\n // TODO: confirm what EventSettings 8, 9, 10 and 11 mean for Iowa - this may not be the appropriate way to handle\n if (EventSettings === 0 || EventSettings === 8) {\n // all bitflags false, open directly to resource\n window.open(OnlineResource);\n } else if (\n EventSettings === 1 ||\n EventSettings === 9 ||\n EventSettings === 10 ||\n EventSettings === 14\n ) {\n // is embedded but not podium (do not include \"stakeholder\" in VPH link)\n window.open(\n `${environment.onlineMeetingsUrl}/?peGuid=${PeGuid}&stakeGuid=${stakeholderInfo.STAKE_GUID}`\n );\n } else if (\n EventSettings === 2 ||\n EventSettings === 7 ||\n EventSettings === 11\n ) {\n // IF 2: is embedded podium (include \"stakeholder\" in VPH link)\n // IF 7: all 3 bools are true including isAnon - handle the same as EventSettings = 2 because isAnon applies to the event registration form. We already know the user in REACH so they can't be anon.\n window.open(\n `${environment.onlineMeetingsUrl}/stakeholder?peGuid=${PeGuid}&stakeGuid=${stakeholderInfo.STAKE_GUID}`\n );\n }\n dispatch(clearEventSelectionState());\n }\n }\n };\n return (\n dispatch(setIsNumAttendeesDialogOpen(false))}\n aria-labelledby=\"\"\n open={isNumAttendeesDialogOpen}\n >\n \n
\n Please input the number of attendees for your registration\n
\n \n {\n e.target.value = Math.max(0, parseInt(e.target.value))\n .toString()\n .slice(0, 1);\n }}\n onChange={(e) => setAttendanceCount(Number(e.target.value))}\n value={attendanceCount}\n fullWidth\n id=\"standard-number\"\n label=\"Number of Attendees\"\n type=\"number\"\n />\n \n
\n \n {\n register();\n dispatch(setIsNumAttendeesDialogOpen(false));\n }}\n color=\"primary\"\n variant=\"contained\"\n >\n Register\n \n dispatch(setIsNumAttendeesDialogOpen(false))}\n variant=\"contained\"\n >\n Cancel\n \n \n \n );\n}\n","import { Button, CircularProgress, Tooltip } from '@material-ui/core';\nimport React, { ReactElement, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { RootState } from '../../store';\nimport styled from 'styled-components';\nimport { ProjectDetailsHeading } from './Project';\nimport moment from 'moment';\nimport {\n clearEventSelectionState,\n setHasClickedMultiLanguageEvent,\n setIsAllProjectsLoaded,\n setIsNumAttendeesDialogOpen,\n setSelectedEvent,\n fetchRegisterForEvent\n} from '../../store/slices/projects';\nimport { Link } from 'react-router-dom';\nimport InputNumAttendeesDialog from './InputNumAttendeesDialog';\nimport { environment } from '../../environment';\nimport { EventSettingsENUM } from '../../models/enums/EventSettingsENUM';\n\nconst GreenButton = styled(Button)`\n min-width: 130px;\n max-width: 130px;\n font-size: 10px;\n padding: 4px;\n background-color: #21890e;\n color: white;\n &:hover {\n background-color: #21890e;\n }\n`;\n\nconst GreyDisabledButton = styled(Button)`\n min-width: 130px;\n max-width: 130px;\n font-size: 10px;\n padding: 4px;\n color: black !important;\n`;\n\nconst BlueButton = styled(Button)`\n min-width: 130px;\n max-width: 130px;\n font-size: 10px;\n padding: 4px;\n &:disabled {\n color: black;\n }\n`;\n\nconst EvtFlexContainer = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 12px;\n`;\n\nconst MyUL = styled.ul`\n margin: 0px;\n padding: 0px;\n list-style: none;\n`;\n\nconst isInPersonRegistrationDisabled = (eventDateStart: string): boolean => {\n const evtDate: number = new Date(eventDateStart).getTime();\n const now: number = new Date().getTime();\n const ONE_HOUR = 60 * 60 * 1000; /* ms */\n const difference = evtDate - now;\n return difference > ONE_HOUR ? true : false;\n};\n\nconst isInPersonMeetingExpired = (eventDateEnd: string): boolean => {\n const evtDateEnd: number = moment(eventDateEnd)\n .utcOffset(eventDateEnd)\n .valueOf();\n const now: number = new Date().getTime();\n const isExpired = now <= evtDateEnd ? false : true;\n return isExpired;\n};\n\nconst isOnlineMeetingExpired = (eventDateTime: string): boolean => {\n // expires after 2 weeks\n const evtDate: number = new Date(eventDateTime).getTime();\n const TWO_WEEKS = 1209600000; /* ms */\n const now: number = new Date().getTime();\n return evtDate + TWO_WEEKS < now;\n};\n\ninterface Props {\n projectId: number;\n}\nexport default function ProjectEvents({ projectId }: Props): ReactElement {\n const dispatch = useDispatch();\n const {\n selectedProjectEvents,\n isLoadingProjectEvents,\n isNumAttendeesDialogOpen,\n selectedEventDetails\n } = useSelector((state: RootState) => state).projectsSlice;\n const { stakeholderInfo } = useSelector(\n (state: RootState) => state\n ).myProfileSlice;\n\n const joinOnlineMeeting = (evt) => {\n if (stakeholderInfo) {\n if (evt.OnlineMeetings.length) {\n // is Multi-Language event\n dispatch(setHasClickedMultiLanguageEvent(true));\n } else {\n const { PeId: eventId, PeGuid, EventSettings, OnlineResource } = evt;\n /* EventSettings is a bitflag accounting for isVPH, isPodium, and isAnon\n public enum EventSettings : int\n {\n IS_EMBEDDED = 1 << 0,\n IS_PODIUM = 1 << 1,\n IS_ANON = 1 << 2,\n }\n */\n // TODO: confirm what EventSettings 8, 9, 10 and 11 mean for Iowa - this may not be the appropriate way to handle\n if (\n !(EventSettings & EventSettingsENUM.IS_PODIUM) &&\n (EventSettings & EventSettingsENUM.IS_EMBEDDED ||\n EventSettings & EventSettingsENUM.IS_ANON)\n ) {\n // is embedded but not podium (do not include \"stakeholder\" in VPH link)\n window.open(\n `${environment.onlineMeetingsUrl}/?peGuid=${PeGuid}&stakeGuid=${stakeholderInfo.STAKE_GUID}`\n );\n } else if (\n EventSettings & EventSettingsENUM.IS_PODIUM &&\n (EventSettings & EventSettingsENUM.IS_EMBEDDED ||\n EventSettings & EventSettingsENUM.IS_ANON)\n ) {\n // IF 2: is embedded podium (include \"stakeholder\" in VPH link)\n // IF 7: all 3 bools are true including isAnon - handle the same as EventSettings = 2 because isAnon applies to the event registration form. We already know the user in REACH so they can't be anon.\n window.open(\n `${environment.onlineMeetingsUrl}/stakeholder?peGuid=${PeGuid}&stakeGuid=${stakeholderInfo.STAKE_GUID}`\n );\n }\n }\n }\n };\n\n const switchEnvironmentTimeZone = (entityName: string) => {\n switch (entityName) {\n case 'Iowa DOT':\n return 'CT';\n case 'Mass DOT':\n return 'ET';\n case 'Maine DOT':\n return 'ET';\n case 'Connecticut DOT':\n return 'ET';\n default:\n throw new Error('unhandled case in switchEnvironmentTimeZone');\n }\n };\n return (\n
\n {isLoadingProjectEvents && (\n <>\n \n Loading project events\n \n \n \n )}\n {selectedProjectEvents && (\n
\n \n Events:\n {!selectedProjectEvents.length && (\n \n {' None posted at this time.'}\n \n )}\n \n {!!selectedProjectEvents.length &&\n selectedProjectEvents.map((evt, idx) => (\n \n \n
\n
{`${evt.PeName}`}
\n
\n {`${moment(evt.EventDate).format(\n 'MMMM Do YYYY'\n )} - ${moment(evt.EventDate)\n .add(14, 'days')\n .format('MMMM Do YYYY')}`}\n
\n
\n {/* v1 works */}\n {/*
\n
\n {`${moment(evt.EventDate).format('MMMM Do YYYY')}: ${\n evt.PeName\n }`}\n
\n
{`${moment(evt.EventStartDateTime)\n .utcOffset(evt.EventStartDateTime)\n .format('h:mmA')} - ${moment(evt.EventEndDateTime)\n .utcOffset(evt.EventStartDateTime)\n .format('h:mmA')} ${switchEnvironmentTimeZone(\n environment.entityName\n )}`}
\n
*/}\n <>\n {evt.OnlineResourceGuid && evt.OnlineResourceGuid.length ? (\n // is an online meeting\n <>\n {isOnlineMeetingExpired(evt.EventEndDateTime) ? (\n \n Comment Period Expired\n \n ) : !evt.IsRegistered ? (\n {\n dispatch(dispatch(setSelectedEvent(evt)));\n // Disabled MAIN-315\n // dispatch(setIsNumAttendeesDialogOpen(true));\n dispatch(\n fetchRegisterForEvent({\n eventId: evt.PeId,\n attendanceCount: 1\n })\n );\n if (\n evt.EventSettings === 8 ||\n (evt.EventSettings === 0 && evt.OnlineResource)\n ) {\n window.open(evt.OnlineResource, '_blank');\n } else {\n joinOnlineMeeting(evt);\n }\n }}\n aria-label=\"Attend Online\"\n color=\"primary\"\n variant=\"contained\"\n >\n Attend Online\n \n ) : (\n \n {\n if (\n evt.EventSettings === 8 ||\n (evt.EventSettings === 0 &&\n evt.OnlineResource)\n ) {\n window.open(evt.OnlineResource, '_blank');\n } else {\n joinOnlineMeeting(evt);\n }\n }}\n variant=\"contained\"\n >\n REGISTERED ONLINE: View Meeting\n \n \n )}\n \n ) : (\n // is an in-person meeting\n <>\n {isInPersonMeetingExpired(evt.EventEndDateTime) ? (\n \n Event Expired\n \n ) : !evt.IsRegistered ? (\n \n \n {\n dispatch(dispatch(setSelectedEvent(evt)));\n // Disabled MAIN-315\n // dispatch(setIsNumAttendeesDialogOpen(true));\n dispatch(\n fetchRegisterForEvent({\n eventId: evt.PeId,\n attendanceCount: 1\n })\n );\n if (\n evt.EventSettings === 8 ||\n (evt.EventSettings === 0 &&\n evt.OnlineResource)\n ) {\n window.open(evt.OnlineResource, '_blank');\n } else {\n joinOnlineMeeting(evt);\n }\n }}\n disabled={isInPersonRegistrationDisabled(\n evt.EventStartDateTime\n )}\n color=\"primary\"\n variant=\"contained\"\n >\n Attend In-Person\n \n \n \n ) : (\n \n \n \n REGISTERED IN-PERSON\n \n \n \n )}\n \n )}\n \n {/* Disabled MAIN-315 */}\n {isNumAttendeesDialogOpen && (\n \n )}\n
\n
\n ))}\n
\n )}\n
\n );\n}\n","import React, { ReactElement } from 'react';\nimport {\n Box,\n Button,\n IconButton,\n InputAdornment,\n Menu,\n MenuItem,\n TextField,\n Tooltip,\n Typography\n} from '@material-ui/core/';\nimport styled from 'styled-components';\nimport { useSelector, useDispatch } from 'react-redux';\nimport {\n fetchProjects,\n setProjectsFilterSelection,\n fetchLUCounties,\n setSelectedCounties,\n setSearchText,\n setStartDate,\n setEndDate,\n setSortField,\n setCustomProjectsFilterSelection\n} from '../../store/slices/projects';\nimport { RootState } from '../../store';\nimport FilterListIcon from '@material-ui/icons/FilterList';\nimport { MyLink } from '../../styled-elements';\nimport ProjectSelectionFilterDialog from './ProjectSelectionFilterDialog';\nimport GenericLookup from '../../models/shared/GenericLookup';\nimport {\n setIsShowingSystemSnackbarMsg,\n setNavigationTab\n} from '../../store/slices/application';\nimport Cancel from '@material-ui/icons/Cancel';\nimport SearchIcon from '@material-ui/icons/Search';\nimport ArrowForward from '@material-ui/icons/ArrowForward';\nimport SortIcon from '@material-ui/icons/Sort';\nimport CheckCircleIcon from '@material-ui/icons/CheckCircle';\n\nconst MyButtonChild = styled(Button)`\n border-radius: 15px;\n height: 40px;\n`;\n\nconst Container = styled.div`\n display: flex;\n justify-content: space-around;\n align-items: center;\n ${MyButtonChild}:not(:first-child) {\n margin-left: 4px;\n }\n margin: 8px 8px 8px 0px;\n @media only screen and (min-width: 600px) {\n margin: 12px 8px 8px 0px;\n }\n`;\n\nconst FlexContainer = styled.div`\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n`;\n\nexport default function ProjectHeaderNav(props): ReactElement {\n const dispatch = useDispatch();\n const {\n projectsFilterSelection,\n customProjectsFilterSelection,\n lookups,\n loading,\n hasErrors,\n searchText,\n startDate,\n endDate,\n sortField\n } = useSelector((state: RootState) => state).projectsSlice;\n\n const [formState, setFormState] = React.useState<{\n selectedCountiesLocal: GenericLookup[];\n isFollowing: boolean;\n hasEvents: boolean;\n }>({\n selectedCountiesLocal: [],\n isFollowing: false,\n hasEvents: false\n });\n\n const handleFilterClick = (projectsFilterSelection: string) => {\n dispatch(setSearchText(inputValue)); // Move local state search text to redux\n // generically handle project filter options\n switch (projectsFilterSelection) {\n case 'all':\n dispatch(setProjectsFilterSelection('all')); // Now handles isMine and hasEvents\n dispatch(\n fetchProjects({\n isMine: false,\n start: 0,\n length: 50,\n hasEvents: false,\n countyIds: []\n })\n );\n break;\n case 'following':\n dispatch(setProjectsFilterSelection('following'));\n dispatch(\n fetchProjects({\n isMine: true,\n start: 0,\n length: 50,\n hasEvents: false,\n countyIds: []\n })\n );\n break;\n case 'events': //aka MEETINGS button\n dispatch(setProjectsFilterSelection('events'));\n dispatch(\n fetchProjects({\n isMine: false,\n start: 0,\n length: 50,\n hasEvents: true,\n countyIds: []\n })\n );\n break;\n // 'custom' filter case handled in ProjectSelectionFilter component\n default:\n throw new Error('unhandle case in handle project filter click');\n }\n };\n\n const [open, setOpen] = React.useState(false);\n\n const handleOpen = () => {\n setOpen(true);\n };\n\n const handleClose = () => {\n setOpen(false);\n };\n\n const handleClear = () => {\n dispatch(setSearchText(''));\n // dispatch(setSelectedCounties([]));\n // dispatch(setStartDate(null));\n // dispatch(setEndDate(null));\n dispatch(\n fetchProjects({\n isMine: false, // Overwritten by redux\n start: 0,\n length: 50,\n hasEvents: false, // Overwritten by redux\n countyIds: []\n })\n );\n // dispatch(setProjectsFilterSelection('all'));\n dispatch(setCustomProjectsFilterSelection(false));\n dispatch(setIsShowingSystemSnackbarMsg(true));\n };\n\n // This is to prevent input lag when using redux state\n const handleTextChange = (event: React.ChangeEvent) => {\n // dispatch(setSearchText(event.target.value));\n // const newText = event.target.value;\n setInputValue(event.target.value);\n };\n const [inputValue, setInputValue] = React.useState('');\n\n React.useEffect(() => {\n setInputValue(searchText);\n }, [searchText]);\n\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n submitForm();\n };\n\n const submitForm = () => {\n dispatch(setSearchText(inputValue));\n dispatch(setSelectedCounties(formState.selectedCountiesLocal));\n dispatch(\n fetchProjects({\n isMine: formState.isFollowing, // Overwritten by redux\n start: 0,\n length: 50,\n hasEvents: formState.hasEvents, // Overwritten by redux\n countyIds: formState.selectedCountiesLocal?.map((c) => c.value)\n })\n );\n // dispatch(setProjectsFilterSelection('custom'));\n if (sortField !== '') {\n dispatch(setCustomProjectsFilterSelection(true));\n } else {\n dispatch(setCustomProjectsFilterSelection(false));\n }\n // if (searchText === '' && startDate === null && endDate === null) {\n // dispatch(setCustomProjectsFilterSelection(false));\n // } else {\n // dispatch(setCustomProjectsFilterSelection(true));\n // }\n dispatch(setIsShowingSystemSnackbarMsg(true));\n };\n\n const [anchorEl, setAnchorEl] = React.useState(null);\n // const [selectedSort, setSelectedSort] = React.useState('Date (newest)');\n\n const handleSortClick = (event) => {\n setAnchorEl(event.currentTarget);\n };\n\n const handleSortClose = () => {\n setAnchorEl(null);\n };\n\n const handleSelect = (sortOption) => {\n dispatch(setSortField(sortOption));\n handleSortClose();\n submitForm();\n };\n\n return (\n <>\n \n \n

Projects

\n handleFilterClick('all')}\n >\n All\n \n handleFilterClick('events')}\n >\n Events\n \n handleFilterClick('following')}\n >\n Following\n \n \n
\n {/* */}\n\n {/* v2 This works, leads to filter modal */}\n {/* \n {\n event.preventDefault();\n handleOpen();\n }}\n aria-labelledby=\"filters-label\"\n id=\"project-filters\"\n aria-label=\"View more project filter options.\"\n >\n \n \n \n Filter\n \n \n \n */}\n {/* v1 This works, leads to old filter page */}\n {/* \n \n \n \n \n Old Filter\n \n \n \n */}\n \n \n
\n
\n \n \n \n \n ),\n endAdornment: (\n \n {inputValue && (\n <>\n \n \n \n \n \n \n \n )}\n \n ),\n inputProps: {\n enterKeyHint: 'search'\n }\n // inputProps: {\n // enterKeyHint: searchText ? 'search' : undefined\n // }\n }}\n />\n \n
\n
\n\n {/* v3 in progress */}\n \n <>\n \n \n \n \n Sort\n \n \n \n \n handleSelect('ALPHABETICAL_AZ')}>\n Alphabet (A - Z)\n \n handleSelect('ALPHABETICAL_ZA')}>\n Alphabet (Z - A)\n \n handleSelect('EVENT_DATE_NEWEST')}>\n Date (Newest)\n \n handleSelect('EVENT_DATE_OLDEST')}>\n Date (Oldest)\n \n \n \n \n
\n \n );\n}\n","import { createSlice, createAsyncThunk } from '@reduxjs/toolkit';\nimport axios, { AxiosRequestConfig } from 'axios';\nimport { RootState } from '..';\nimport { environment } from '../../environment';\nimport { fetchLoginREACH, getREACHAuthHeaders, isTokenExpired } from './user';\ninterface FeedState {\n loading: boolean;\n hasErrors: boolean;\n errorMsg: string;\n comments: any[] | null;\n // feed api filter options\n isFollowedComments: boolean;\n isAllComments: boolean;\n isMine: boolean;\n // end feed api filter options\n isLoadingMoreComments: boolean;\n isAllCommentsLoaded: boolean;\n isLoadingProjCommentDetails: boolean;\n hasCheckedInitialState: boolean;\n}\n\nconst initialState: FeedState = {\n loading: false,\n hasErrors: false,\n errorMsg: '',\n comments: null,\n isFollowedComments: true,\n isAllComments: false,\n isMine: false,\n isLoadingMoreComments: false,\n isAllCommentsLoaded: false,\n isLoadingProjCommentDetails: false,\n hasCheckedInitialState: false\n};\n\nconst feedSlice = createSlice({\n name: 'feed',\n initialState,\n reducers: {\n setHasCheckedInitialState: (state, { payload }) => {\n state.hasCheckedInitialState = payload;\n },\n setUpdateFeedComment: (state, { payload }) => {\n state.comments.find(\n (c) => c.StakeCommentId === payload.StakeCommentId\n ).IsVisible = payload.IsVisible;\n },\n setAreFeedCommentResponsesExpanded: (state, { payload }) => {\n state.comments.find(\n (c) => c.StakeCommentId === payload.StakeCommentId\n ).AreResponsesExpanded = payload.AreResponsesExpanded;\n },\n addStakeCommentResponseToFeedState: (state, { payload }) => {\n const selectedComment = state.comments.find(\n (c) => c.StakeCommentId === payload.StakeCommentId\n );\n if (selectedComment && selectedComment.Responses) {\n selectedComment.Responses.push(payload);\n }\n },\n resetFeed: (state) => {\n // used when coming to projects page from feed\n // need updated feed in case user modified their followed projects\n state.loading = initialState.loading;\n state.hasErrors = initialState.hasErrors;\n state.errorMsg = initialState.errorMsg;\n state.comments = initialState.comments;\n state.isFollowedComments = initialState.isFollowedComments;\n state.isMine = initialState.isMine;\n state.hasCheckedInitialState = initialState.hasCheckedInitialState;\n state.isLoadingMoreComments = initialState.isLoadingMoreComments;\n state.isAllCommentsLoaded = initialState.isAllCommentsLoaded;\n },\n getComments: (state) => {\n state.isAllCommentsLoaded = false;\n state.loading = true;\n },\n getCommentsSuccess: (state, { payload }) => {\n state.comments = payload;\n state.loading = false;\n state.hasErrors = false;\n },\n getCommentsFailure: (state, { payload }) => {\n state.loading = false;\n state.hasErrors = true;\n state.errorMsg = payload;\n },\n loadMoreComments: (state) => {\n state.isLoadingMoreComments = true;\n },\n loadMoreCommentsSuccess: (state, { payload }) => {\n if (!payload.length) {\n state.isAllCommentsLoaded = true;\n } else {\n state.comments = [...state.comments, ...payload];\n }\n state.isLoadingMoreComments = false;\n state.hasErrors = false;\n },\n loadMoreCommentsFailure: (state, { payload }) => {\n state.isLoadingMoreComments = false;\n state.hasErrors = true;\n state.errorMsg = payload;\n },\n setIsFollowedComments: (state, { payload }) => {\n state.isFollowedComments = payload;\n state.isAllComments = false;\n state.isMine = false;\n },\n setIsAllComments: (state, { payload }) => {\n state.isAllComments = payload;\n state.isMine = false;\n state.isFollowedComments = false;\n },\n setIsAllCommentsLoaded: (state, { payload }) => {\n state.isAllCommentsLoaded = payload;\n },\n setIsMine: (state, { payload }) => {\n state.isMine = payload;\n state.isAllComments = false;\n state.isFollowedComments = false;\n }\n }\n});\n\nexport const {\n setHasCheckedInitialState,\n setIsAllComments,\n setUpdateFeedComment,\n setAreFeedCommentResponsesExpanded,\n addStakeCommentResponseToFeedState,\n resetFeed,\n getComments,\n getCommentsSuccess,\n getCommentsFailure,\n loadMoreComments,\n loadMoreCommentsSuccess,\n loadMoreCommentsFailure,\n setIsFollowedComments,\n setIsMine,\n setIsAllCommentsLoaded\n} = feedSlice.actions;\n\nexport const getFeedState = (state: RootState) => state.feed;\n\nexport const fetchComments = createAsyncThunk(\n 'feed/fetchComments',\n async (\n // isMine means that you are asking for only YOUR comments\n // isFollowedComments refers to comments from projects that you follow\n input: {\n isMine: boolean;\n isFollowedComments: boolean;\n start: number;\n length: number;\n },\n thunkAPI: any\n ) => {\n const { isMine, isFollowedComments, start, length } = input;\n const hasTokenExpired = isTokenExpired(thunkAPI);\n try {\n if (hasTokenExpired) {\n return;\n }\n const config: AxiosRequestConfig = getREACHAuthHeaders();\n thunkAPI.dispatch(getComments());\n let { data } = await axios.get(\n `${environment.apiUrl}/Reach/GetComments?isMine=${isMine}&isSubscribed=${isFollowedComments}&start=${start}&length=${length}`,\n config\n );\n if (data) {\n if (data.length < length) {\n await thunkAPI.dispatch(setIsAllCommentsLoaded(true));\n } else {\n await thunkAPI.dispatch(setIsAllCommentsLoaded(false));\n }\n data.forEach((d) => (d.AreResponsesExpanded = false));\n thunkAPI.dispatch(getCommentsSuccess(data));\n } else {\n throw new Error('no result from server');\n }\n } catch (err) {\n thunkAPI.dispatch(getCommentsFailure(err.message));\n }\n }\n);\n\nexport const fetchMoreComments = createAsyncThunk(\n 'feed/fetchMoreComments',\n async (\n input: {\n isMine: boolean;\n isFollowedComments: boolean;\n start: number;\n length: number;\n },\n thunkAPI: any\n ) => {\n const { isMine, isFollowedComments, start, length } = input;\n const hasTokenExpired = isTokenExpired(thunkAPI);\n try {\n if (hasTokenExpired) {\n return;\n }\n const config: AxiosRequestConfig = getREACHAuthHeaders();\n thunkAPI.dispatch(loadMoreComments());\n let { data } = await axios.get(\n `${environment.apiUrl}/Reach/GetComments?isMine=${isMine}&isSubscribed=${isFollowedComments}&start=${start}&length=${length}`,\n config\n );\n if (data) {\n if (data.length < length) {\n await thunkAPI.dispatch(setIsAllCommentsLoaded(true));\n } else {\n await thunkAPI.dispatch(setIsAllCommentsLoaded(false));\n }\n data.forEach((d) => (d.AreResponsesExpanded = false));\n thunkAPI.dispatch(loadMoreCommentsSuccess(data));\n } else {\n throw new Error('no result from server');\n }\n } catch (err) {\n thunkAPI.dispatch(loadMoreCommentsFailure(err.message));\n }\n }\n);\n\nexport default feedSlice.reducer;\n","var _excluded = [\"svgRef\", \"title\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar SvgCalendarIconArrow = function SvgCalendarIconArrow(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n id: \"Layer_2\",\n \"data-name\": \"Layer 2\",\n viewBox: \"0 0 100 100\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M18.4,18h48.8c3.4,0,6.1,2.7,6.1,6.1v45.8c0,6.6-5.4,12-12,12H24.3c-6.6,0-12-5.4-12-12V24.1c0-3.4,2.7-6.1,6.1-6.1Z\",\n style: {\n fill: \"none\",\n stroke: \"#4c535f\",\n strokeMiterlimit: 10,\n strokeWidth: 4\n }\n }), /*#__PURE__*/React.createElement(\"rect\", {\n x: 12.3,\n y: 19.5,\n width: 61,\n height: 16.5,\n style: {\n fill: \"#4c535f\",\n strokeWidth: 0\n }\n }), /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"rect\", {\n x: 20.6,\n y: 5.5,\n width: 9,\n height: 21.2,\n rx: 3.1,\n ry: 3.1,\n style: {\n fill: \"#4c535f\",\n strokeWidth: 0\n }\n }), /*#__PURE__*/React.createElement(\"rect\", {\n x: 55.9,\n y: 5.5,\n width: 9,\n height: 21.2,\n rx: 3.1,\n ry: 3.1,\n style: {\n fill: \"#4c535f\",\n strokeWidth: 0\n }\n }))), /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"ellipse\", {\n cx: 66.7,\n cy: 71.6,\n rx: 22.9,\n ry: 22.8,\n style: {\n fill: \"#4577bb\",\n strokeWidth: 0\n }\n }), /*#__PURE__*/React.createElement(\"line\", {\n x1: 77.6,\n y1: 72.2,\n x2: 53.6,\n y2: 72.2,\n style: {\n fill: \"none\",\n stroke: \"#fff\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 3\n }\n }), /*#__PURE__*/React.createElement(\"polyline\", {\n points: \"72.3 63.2 80.1 71.9 72.3 81.2\",\n style: {\n fill: \"none\",\n stroke: \"#fff\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 3\n }\n })));\n};\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgCalendarIconArrow, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/calendar-icon-arrow.fd4de2e7.svg\";\nexport { ForwardRef as ReactComponent };","var _excluded = [\"svgRef\", \"title\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar SvgCalendarIconCheckmark = function SvgCalendarIconCheckmark(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n id: \"Layer_2\",\n \"data-name\": \"Layer 2\",\n viewBox: \"0 0 100 100\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, /*#__PURE__*/React.createElement(\"ellipse\", {\n cx: 72.1,\n cy: 71.6,\n rx: 22.9,\n ry: 22.8,\n style: {\n fill: \"#318941\",\n strokeWidth: 0\n }\n }), /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M23.7,18h48.8c3.4,0,6.1,2.7,6.1,6.1v45.8c0,6.6-5.4,12-12,12H29.6c-6.6,0-12-5.4-12-12V24.1c0-3.4,2.7-6.1,6.1-6.1Z\",\n style: {\n fill: \"none\",\n stroke: \"#318941\",\n strokeMiterlimit: 10,\n strokeWidth: 4\n }\n }), /*#__PURE__*/React.createElement(\"rect\", {\n x: 17.6,\n y: 19.5,\n width: 61,\n height: 16.5,\n style: {\n fill: \"#318941\",\n strokeWidth: 0\n }\n }), /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"rect\", {\n x: 25.9,\n y: 5.5,\n width: 9,\n height: 21.2,\n rx: 3.1,\n ry: 3.1,\n style: {\n fill: \"#318941\",\n strokeWidth: 0\n }\n }), /*#__PURE__*/React.createElement(\"rect\", {\n x: 61.3,\n y: 5.5,\n width: 9,\n height: 21.2,\n rx: 3.1,\n ry: 3.1,\n style: {\n fill: \"#318941\",\n strokeWidth: 0\n }\n }))), /*#__PURE__*/React.createElement(\"polyline\", {\n points: \"62 70.1 69.2 79.3 84.3 64.1\",\n style: {\n fill: \"none\",\n stroke: \"#fff\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 3\n }\n }));\n};\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgCalendarIconCheckmark, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/calendar-icon-checkmark.1d984cf7.svg\";\nexport { ForwardRef as ReactComponent };","import { Button, Grid, Paper, SvgIcon, Tooltip } from '@material-ui/core';\nimport React, { ReactElement } from 'react';\nimport { useSelector } from 'react-redux';\nimport { Link } from 'react-router-dom';\nimport { RootState } from '../../../store';\nimport styled from 'styled-components';\nimport CommuteIcon from '@material-ui/icons/Commute';\nimport { Spacer } from '../../../styled-elements';\nimport { ThemeProps } from '../../../styled-elements/Icons';\n// import EventAvailableIcon from '@material-ui/icons/EventAvailable';\nimport { ReactComponent as CalendarIconArrow } from '../../../images/calendar-icon-arrow.svg';\nimport { ReactComponent as CalendarIconCheckmark } from '../../../images/calendar-icon-checkmark.svg';\n// import { ReactComponent as CalendarIconX } from '../../../images/calendar-icon-x.svg';\n\nconst MyH2 = styled.h2`\n text-align: left;\n font-size: 15px;\n font-weight: 400;\n line-height: 1.334;\n letter-spacing: 0em;\n margin: 0px;\n`;\nconst MyH3 = styled.h3`\n text-align: left;\n font-size: 13px;\n font-weight: 400;\n line-height: 1.334;\n letter-spacing: 0em;\n margin: 0px;\n`;\n\nconst IconContainer = styled.div`\n display: flex;\n flex-direction: column;\n justify-content: space-around;\n`;\n\ninterface Props {\n project;\n handleToggleFollow: Function;\n}\n\nconst Container = styled.div`\n position: relative;\n margin: 0px 8px;\n`;\n\nconst FollowButtonContainer = styled.div`\n padding-left: 12px;\n padding-right: 20px;\n display: flex;\n position: absolute;\n top: 20px;\n right: 0px;\n`;\n\nconst MySvgIcon = styled(SvgIcon)`\n height: 25px;\n width: 25px;\n`;\n\nconst ProjectInfoContainer = styled.div`\n font-size: 12px;\n text-align: left;\n`;\n\nconst MyPaper = styled(Paper)`\n width: 100%;\n margin: 8px auto;\n padding: 8px;\n`;\n\nconst toTitleCase = (str) => {\n return str.replace(/\\w\\S*/g, function (txt) {\n return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();\n });\n};\n\nexport default function IowaDOTProjectCard({\n project,\n handleToggleFollow\n}: Props): ReactElement {\n const { isProjectCommentSelection } = useSelector(\n (state: RootState) => state\n ).projectsSlice;\n\n const FollowButton = styled(Button)`\n position: relative;\n font-size: 10px;\n max-width: 75px;\n min-width: 75px;\n background-color: ${project.IsFollowing ? '#21890e' : ''};\n `;\n\n let isMeetingInPast = false;\n if (project.MeetingDate) {\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n const meetingDateParts = project.MeetingDate.split('/');\n const meetingDate = new Date(\n +meetingDateParts[2],\n +meetingDateParts[0] - 1,\n +meetingDateParts[1]\n );\n isMeetingInPast = meetingDate < today;\n }\n\n return (\n \n \n \n \n \n \n {/* */}\n\n {project.MeetingDate && !isMeetingInPast && (\n \n
\n \n
\n
\n )}\n {project.MeetingDate && isMeetingInPast && (\n \n
\n \n
\n
\n )}\n {!project.MeetingDate && (\n
\n )}\n {/* {project.HasMeeting && (\n \n \n \n )}\n {!project.HasMeeting && project.MeetingDate && (\n \n \n \n )} */}\n
\n
\n \n {project.ProjectDesc}\n \n {`Project #: ${project.ProjectNr} `}\n \n {project.PssCounty && (\n {`Counties: ${project.PssCounty.split(',')\n .join(', ')\n .toUpperCase()}`}\n )}\n {project.PssStatus && (\n {`Status: ${project.PssStatus}`}\n )}\n \n \n
\n
\n \n \n {\n await handleToggleFollow(project);\n }}\n color=\"secondary\"\n variant=\"contained\"\n >\n {project.IsFollowing ? 'FOLLOWING' : 'FOLLOW'}\n \n \n
\n );\n}\n","import { Button, Grid, Paper, SvgIcon, Tooltip } from '@material-ui/core';\nimport React, { ReactElement } from 'react';\nimport { useSelector } from 'react-redux';\nimport { Link } from 'react-router-dom';\nimport { RootState } from '../../../store';\nimport styled from 'styled-components';\nimport CommuteIcon from '@material-ui/icons/Commute';\nimport { Spacer } from '../../../styled-elements';\nimport { ThemeProps } from '../../../styled-elements/Icons';\n// import EventAvailableIcon from '@material-ui/icons/EventAvailable';\nimport { ReactComponent as CalendarIconArrow } from '../../../images/calendar-icon-arrow.svg';\nimport { ReactComponent as CalendarIconCheckmark } from '../../../images/calendar-icon-checkmark.svg';\n// import { ReactComponent as CalendarIconX } from '../../../images/calendar-icon-x.svg';\n\nconst MyH2 = styled.h2`\n text-align: left;\n font-size: 15px;\n font-weight: 400;\n line-height: 1.334;\n letter-spacing: 0em;\n margin: 0px;\n`;\nconst MyH3 = styled.h3`\n text-align: left;\n font-size: 13px;\n font-weight: 400;\n line-height: 1.334;\n letter-spacing: 0em;\n margin: 0px;\n`;\n\nconst IconContainer = styled.div`\n display: flex;\n flex-direction: column;\n justify-content: space-around;\n`;\n\ninterface Props {\n project;\n handleToggleFollow: Function;\n}\n\nconst Container = styled.div`\n position: relative;\n margin: 0px 8px;\n`;\n\nconst FollowButtonContainer = styled.div`\n padding-left: 12px;\n padding-right: 20px;\n display: flex;\n position: absolute;\n top: 20px;\n right: 0px;\n`;\n\nconst MySvgIcon = styled(SvgIcon)`\n height: 25px;\n width: 25px;\n`;\n\nconst ProjectInfoContainer = styled.div`\n font-size: 12px;\n text-align: left;\n`;\n\nexport default function MaineDOTProjectCard({\n project,\n handleToggleFollow\n}: Props): ReactElement {\n const { isProjectCommentSelection } = useSelector(\n (state: RootState) => state\n ).projectsSlice;\n const { isMobile } = useSelector(\n (state: RootState) => state\n ).applicationSlice;\n\n const MyPaper = styled(Paper)`\n ${({ theme }: ThemeProps) => `\n width: ${!isMobile && '575px'};\n margin: 8px auto;\n padding: 8px;\n `}\n `;\n\n const FollowButton = styled(Button)`\n position: relative;\n font-size: 10px;\n max-width: 75px;\n min-width: 75px;\n background-color: ${project.IsFollowing ? '#21890e' : ''};\n `;\n\n let isMeetingInPast = false;\n if (project.MeetingDate) {\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n const meetingDateParts = project.MeetingDate.split('/');\n const meetingDate = new Date(\n +meetingDateParts[2],\n +meetingDateParts[0] - 1,\n +meetingDateParts[1]\n );\n isMeetingInPast = meetingDate < today;\n }\n\n return (\n \n \n \n \n \n \n {/* */}\n {project.MeetingDate && !isMeetingInPast && (\n \n
\n \n
\n
\n )}\n {project.MeetingDate && isMeetingInPast && (\n \n
\n \n
\n
\n )}\n {!project.MeetingDate && (\n
\n )}\n
\n
\n \n {project.ProjectNr}\n \n {`Project #: ${project.Pin} `}\n \n {project.ProjectDesc}\n \n \n
\n
\n \n \n {\n await handleToggleFollow(project);\n }}\n color=\"secondary\"\n variant=\"contained\"\n >\n {project.IsFollowing ? 'FOLLOWING' : 'FOLLOW'}\n \n \n
\n );\n}\n","import { Button, Grid, Paper, SvgIcon, Tooltip } from '@material-ui/core';\nimport React, { ReactElement } from 'react';\nimport { useSelector } from 'react-redux';\nimport { Link } from 'react-router-dom';\nimport { RootState } from '../../../store';\nimport styled from 'styled-components';\nimport CommuteIcon from '@material-ui/icons/Commute';\nimport { Spacer } from '../../../styled-elements';\nimport { ThemeProps } from '../../../styled-elements/Icons';\nimport { ReactComponent as CalendarIconArrow } from '../../../images/calendar-icon-arrow.svg';\nimport { ReactComponent as CalendarIconCheckmark } from '../../../images/calendar-icon-checkmark.svg';\n// import { ReactComponent as CalendarIconX } from '../../../images/calendar-icon-x.svg';\n\nconst MyH2 = styled.h2`\n text-align: left;\n font-size: 15px;\n font-weight: 400;\n line-height: 1.334;\n letter-spacing: 0em;\n margin: 0px;\n`;\nconst MyH3 = styled.h3`\n text-align: left;\n font-size: 13px;\n font-weight: 400;\n line-height: 1.334;\n letter-spacing: 0em;\n margin: 0px;\n`;\n\nconst IconContainer = styled.div`\n display: flex;\n flex-direction: column;\n justify-content: space-around;\n`;\n\ninterface Props {\n project;\n handleToggleFollow: Function;\n}\n\nconst Container = styled.div`\n position: relative;\n margin: 0px 8px;\n`;\n\nconst FollowButtonContainer = styled.div`\n padding-left: 12px;\n padding-right: 20px;\n display: flex;\n position: absolute;\n top: 20px;\n right: 0px;\n`;\n\nconst MySvgIcon = styled(SvgIcon)`\n height: 25px;\n width: 25px;\n`;\n\nconst ProjectInfoContainer = styled.div`\n font-size: 12px;\n text-align: left;\n`;\n\nexport default function MassDOTProjectCard({\n project,\n handleToggleFollow\n}: Props): ReactElement {\n const { isProjectCommentSelection } = useSelector(\n (state: RootState) => state\n ).projectsSlice;\n const { isMobile } = useSelector(\n (state: RootState) => state\n ).applicationSlice;\n\n const MyPaper = styled(Paper)`\n ${({ theme }: ThemeProps) => `\n width: ${!isMobile && '575px'};\n margin: 8px auto;\n padding: 8px;\n `}\n `;\n\n const FollowButton = styled(Button)`\n position: relative;\n font-size: 10px;\n max-width: 75px;\n min-width: 75px;\n background-color: ${project.IsFollowing ? '#21890e' : ''};\n `;\n\n let isMeetingInPast = false;\n if (project.MeetingDate) {\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n const meetingDateParts = project.MeetingDate.split('/');\n const meetingDate = new Date(\n +meetingDateParts[2],\n +meetingDateParts[0] - 1,\n +meetingDateParts[1]\n );\n isMeetingInPast = meetingDate < today;\n }\n\n return (\n \n \n \n \n \n \n {/* */}\n {project.MeetingDate && !isMeetingInPast && (\n \n
\n \n
\n
\n )}\n {project.MeetingDate && isMeetingInPast && (\n \n
\n \n
\n
\n )}\n {!project.MeetingDate && (\n
\n )}\n
\n
\n \n {project.ProjectNr}\n \n {`Project #: ${project.Pin} `}\n \n {project.ProjectDesc}\n \n \n
\n
\n \n \n {\n await handleToggleFollow(project);\n }}\n color=\"secondary\"\n variant=\"contained\"\n >\n {project.IsFollowing ? 'FOLLOWING' : 'FOLLOW'}\n \n \n
\n );\n}\n","import { Button, Grid, Paper, SvgIcon, Tooltip } from '@material-ui/core';\nimport React, { ReactElement } from 'react';\nimport { useSelector } from 'react-redux';\nimport { Link } from 'react-router-dom';\nimport { RootState } from '../../../store';\nimport styled from 'styled-components';\nimport CommuteIcon from '@material-ui/icons/Commute';\nimport { Spacer } from '../../../styled-elements';\nimport { ThemeProps } from '../../../styled-elements/Icons';\n// import EventAvailableIcon from '@material-ui/icons/EventAvailable';\nimport { ReactComponent as CalendarIconArrow } from '../../../images/calendar-icon-arrow.svg';\nimport { ReactComponent as CalendarIconCheckmark } from '../../../images/calendar-icon-checkmark.svg';\n// import { ReactComponent as CalendarIconX } from '../../../images/calendar-icon-x.svg';\n\nconst MyH2 = styled.h2`\n text-align: left;\n font-size: 15px;\n font-weight: 400;\n line-height: 1.334;\n letter-spacing: 0em;\n margin: 0px;\n`;\nconst MyH3 = styled.h3`\n text-align: left;\n font-size: 13px;\n font-weight: 400;\n line-height: 1.334;\n letter-spacing: 0em;\n margin: 0px;\n`;\n\nconst IconContainer = styled.div`\n display: flex;\n flex-direction: column;\n justify-content: space-around;\n`;\n\ninterface Props {\n project;\n handleToggleFollow: Function;\n}\n\nconst Container = styled.div`\n position: relative;\n margin: 0px 8px;\n`;\n\nconst FollowButtonContainer = styled.div`\n padding-left: 12px;\n padding-right: 20px;\n display: flex;\n position: absolute;\n top: 20px;\n right: 0px;\n`;\n\nconst MySvgIcon = styled(SvgIcon)`\n height: 25px;\n width: 25px;\n`;\n\nconst ProjectInfoContainer = styled.div`\n font-size: 12px;\n text-align: left;\n`;\n\nconst MyPaper = styled(Paper)`\n width: 100%;\n margin: 8px auto;\n padding: 8px;\n`;\n\nconst toTitleCase = (str) => {\n return str.replace(/\\w\\S*/g, function (txt) {\n return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();\n });\n};\n\nexport default function CTDOTProjectCard({\n project,\n handleToggleFollow\n}: Props): ReactElement {\n const { isProjectCommentSelection } = useSelector(\n (state: RootState) => state\n ).projectsSlice;\n\n const FollowButton = styled(Button)`\n position: relative;\n font-size: 10px;\n max-width: 75px;\n min-width: 75px;\n background-color: ${project.IsFollowing ? '#21890e' : ''};\n `;\n\n let isMeetingInPast = false;\n if (project.MeetingDate) {\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n const meetingDateParts = project.MeetingDate.split('/');\n const meetingDate = new Date(\n +meetingDateParts[2],\n +meetingDateParts[0] - 1,\n +meetingDateParts[1]\n );\n isMeetingInPast = meetingDate < today;\n }\n\n return (\n \n \n \n \n \n \n {/* */}\n\n {project.MeetingDate && !isMeetingInPast && (\n \n
\n \n
\n
\n )}\n {project.MeetingDate && isMeetingInPast && (\n \n
\n \n
\n
\n )}\n {!project.MeetingDate && (\n
\n )}\n {/* {project.HasMeeting && (\n \n \n \n )}\n {!project.HasMeeting && project.MeetingDate && (\n \n \n \n )} */}\n
\n
\n \n {project.ProjectDesc}\n \n {`Project #: ${project.ProjectNr} `}\n \n {project.PssCounty && (\n {`Counties: ${project.PssCounty.split(',')\n .join(', ')\n .toUpperCase()}`}\n )}\n {project.PssStatus && (\n {`Status: ${project.PssStatus}`}\n )}\n \n \n
\n
\n \n \n {\n await handleToggleFollow(project);\n }}\n color=\"secondary\"\n variant=\"contained\"\n >\n {project.IsFollowing ? 'FOLLOWING' : 'FOLLOW'}\n \n \n
\n );\n}\n","import React, { useEffect } from 'react';\nimport { CircularProgress } from '@material-ui/core';\nimport ProjectHeaderNav from './ProjectHeaderNav';\nimport {\n LoadMore,\n SubHeaderGoBack,\n ToggleFollowBottomDrawer\n} from '../';\nimport { useSelector, useDispatch } from 'react-redux';\nimport {\n fetchFollowProject,\n fetchProjects,\n setFollowIntent,\n setHasToggledFollow,\n setIsProjectCommentSelection\n} from '../../store/slices/projects';\nimport { setNavigationTab } from '../../store/slices/application';\nimport { resetFeed } from '../../store/slices/feed';\nimport { AccountForBottomNavMargin, PaddedDiv } from '../../styled-elements';\nimport { RootState } from '../../store';\nimport styled from 'styled-components';\nimport SystemSuccessSnackbar from '../Shared/SystemSuccessSnackbar';\nimport { environment } from '../../environment';\nimport IowaDOTProjectCard from './ProjectCard/IowaDOTProjectCard';\nimport MaineDOTProjectCard from './ProjectCard/MaineDOTProjectCard';\nimport MassDOTProjectCard from './ProjectCard/MassDOTProjectCard';\nimport CTDOTProjectCard from './ProjectCard/CTDOTProjectCard';\nimport { Helmet } from 'react-helmet';\n\nconst HiddenH1 = styled.h1`\n display: none; // MAS-283 this is hidden for accessibility purposes\n`;\n\nconst Container = styled.div`\n overflow: hidden;\n width: 100%;\n display: flex;\n justify-content: center;\n`;\n\nconst ProjectListContainer = styled.div`\n width: 100%;\n @media only screen and (min-width: 720px) {\n width: 575px;\n }\n`;\n\nexport default function AllProjectsList(props) {\n const handleToggleFollow = async (project) => {\n if (project.IsFollowing) {\n // unfollow happens in ToggleFollowBottomDrawer so they can confirm.\n // only dispatch intent for ToggleFollowBottomDrawer state\n dispatch(setFollowIntent({ project, isFollowIntent: false }));\n } else {\n // follow immediately\n dispatch(setFollowIntent({ project, isFollowIntent: true }));\n await dispatch(\n fetchFollowProject({\n projectId: project.ProjectId,\n isEmail: false,\n isSMS: false,\n isNotify: true // MAS-215 default to in-app notifications\n })\n );\n }\n if (!hasErrors) {\n handleClickOpen();\n }\n };\n\n const getEntityProjectCard = (project, idx) => {\n switch (environment.entityName) {\n case 'Iowa DOT':\n return (\n \n );\n case 'Mass DOT':\n return (\n \n );\n case 'Maine DOT':\n return (\n \n );\n case 'Connecticut DOT':\n return (\n \n );\n default:\n throw new Error(\n 'unhandled case in AllProjectsList -> getEntityProjectCard()'\n );\n }\n };\n\n const dispatch = useDispatch();\n const { isLoggedInREACH } = useSelector(\n (state: RootState) => state\n ).userSlice;\n const {\n loading,\n hasErrors,\n projects,\n errorMsg,\n isFollowedProjects,\n hasToggledFollow,\n projectToFollowOrUnfollow,\n isProjectCommentSelection,\n isAllProjectsLoaded,\n projectsFilterSelection,\n customProjectsFilterSelection\n } = useSelector((state: RootState) => state).projectsSlice;\n\n const { currentPath, prevPath, isShowingSystemSnackbarMsg } = useSelector(\n (state: RootState) => state\n ).applicationSlice;\n const { comments } = useSelector((state: RootState) => state).feedSlice;\n\n useEffect(() => {\n // reset feed when coming to projects page from feed\n // need updated feed in case user modifies their followed projects\n if (currentPath === '/projects' && prevPath === '/feed' && comments) {\n dispatch(resetFeed());\n }\n }, [comments, currentPath, dispatch, prevPath]);\n\n useEffect(() => {\n const isCommentSelection = new URLSearchParams(props.location.search).get(\n 'isProjectCommentSelection'\n );\n if (isCommentSelection) {\n dispatch(setIsProjectCommentSelection(true));\n } else {\n dispatch(setIsProjectCommentSelection(false));\n }\n }, [projects, isProjectCommentSelection, props.location.search, dispatch]);\n useEffect(() => {\n if (\n localStorage.getItem('reachAuth') &&\n isLoggedInREACH &&\n !projects &&\n !hasErrors &&\n !loading\n ) {\n dispatch(setNavigationTab('projects'));\n //v2\n dispatch(\n fetchProjects({\n isMine: false,\n start: 0,\n length: 50,\n hasEvents: false,\n countyIds: []\n })\n ); // initial fetch (default to all)\n //v1\n // dispatch(\n // fetchProjects({\n // isMine: true,\n // start: 0,\n // length: 50,\n // hasEvents: false,\n // countyIds: []\n // })\n // ); // initial fetch (default to following)\n }\n }, [dispatch, projects, hasErrors, isLoggedInREACH, loading]);\n\n const handleClickOpen = () => {\n dispatch(setHasToggledFollow(true));\n };\n\n return (\n <>\n \n \n Projects - {environment.entityName} REACH\n \n \n \n \n {!isProjectCommentSelection && !loading && }\n {isProjectCommentSelection && (\n \n )}\n {loading && (\n <>\n \n Loading projects list\n \n \n \n )}\n {hasErrors && errorMsg && (\n
\n {errorMsg}\n
\n )}\n {Array.isArray(projects) &&\n projects.map((project, idx) => getEntityProjectCard(project, idx))}\n
\n \n {hasToggledFollow && projectToFollowOrUnfollow && (\n \n )}\n {isFollowedProjects && projects && projects.length === 0 && (\n \n You aren't following any projects. Click \"All\" to see a list of\n projects you can follow.\n \n )}\n\n {/* MAS-224 - temporarily hide items before UAT - Plus button for \"quick project comment\" */}\n {/* {!isProjectCommentSelection && (\n
\n \n
\n )} */}\n {/* to allow full vertical scroll */}\n {/* end */}\n
\n
\n {!loading && (\n <>\n {!isAllProjectsLoaded && }\n {isShowingSystemSnackbarMsg && (\n <>\n {customProjectsFilterSelection && (\n \n )}\n \n )}\n {/* Paginator */}\n {projects && projects.length === 0 && (\n
\n Project list is empty based on the current filter selection.\n
\n )}\n \n )}\n
\n \n \n );\n}\n","import React, { useEffect, useState } from 'react';\nimport InputLabel from '@material-ui/core/InputLabel';\nimport FormControl from '@material-ui/core/FormControl';\nimport '../../css/ProjectSelectionFilter.css';\nimport {\n Button,\n CircularProgress,\n FormControlLabel,\n Tooltip\n} from '@material-ui/core';\nimport TextField from '@material-ui/core/TextField';\nimport {\n KeyboardDatePicker,\n MuiPickersUtilsProvider\n} from '@material-ui/pickers';\nimport DateFnsUtils from '@date-io/date-fns';\n// import MomentUtils from '@date-io/moment';\nimport { useHistory } from 'react-router-dom';\nimport { SubHeaderGoBack } from '../';\nimport Switch from '@material-ui/core/Switch';\nimport styled from 'styled-components';\nimport { RootState } from '../../store';\nimport { useDispatch, useSelector } from 'react-redux';\nimport {\n fetchLUCounties,\n fetchProjects,\n setProjectsFilterSelection,\n setSelectedCounties,\n setSearchText,\n setStartDate,\n setEndDate\n} from '../../store/slices/projects';\nimport {\n setIsShowingSystemSnackbarMsg,\n setNavigationTab\n} from '../../store/slices/application';\nimport Select from 'react-select';\nimport GenericLookup from '../../models/shared/GenericLookup';\nimport { environment } from '../../environment';\nimport { Helmet } from 'react-helmet';\n\nconst customSelectStyles = {\n control: (base) => ({\n ...base,\n height: 50,\n minHeight: 50\n })\n};\n\nconst FormControlsContainer = styled.div`\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n width: 100%;\n padding: 12px;\n & > * {\n margin-top: 12px;\n }\n`;\n\nconst MyFormControl = styled(FormControl)`\n text-align: center;\n max-width: 575px;\n width: 100%;\n`;\n\nconst FlexContainer = styled.div`\n display: flex;\n`;\n\nexport default function ProjectSelectionFilter() {\n const dispatch = useDispatch();\n const { lookups, loading, hasErrors, searchText, startDate, endDate } =\n useSelector((state: RootState) => state).projectsSlice;\n const { isLoadingStakeholder } = useSelector(\n (state: RootState) => state\n ).myProfileSlice;\n const { navigationTab } = useSelector(\n (state: RootState) => state\n ).applicationSlice;\n\n useEffect(() => {\n if (!loading && !hasErrors && !lookups.LUCounties.length) {\n dispatch(fetchLUCounties());\n }\n }, [dispatch, hasErrors, loading, lookups.LUCounties.length]);\n\n useEffect(() => {\n if (navigationTab !== 'projects') {\n dispatch(setNavigationTab('projects'));\n }\n }, [dispatch, navigationTab]);\n\n const [formState, setFormState] = useState<{\n selectedCountiesLocal: GenericLookup[];\n isFollowing: boolean;\n hasEvents: boolean;\n }>({\n selectedCountiesLocal: [],\n isFollowing: false,\n hasEvents: false\n });\n const history = useHistory();\n const handleChange = (event: any, key: string) => {\n setFormState({ ...formState, [key]: event });\n };\n\n const handleTextChange = (event: React.ChangeEvent) => {\n dispatch(setSearchText(event.target.value));\n };\n\n const handleDateChange = (date: Date | null, key: string) => {\n if (key === 'startDate') {\n dispatch(setStartDate(date));\n } else if (key === 'endDate') {\n dispatch(setEndDate(date));\n }\n };\n\n const handleSubmit = (e: any) => {\n e.preventDefault();\n dispatch(setProjectsFilterSelection('custom'));\n dispatch(setSelectedCounties(formState.selectedCountiesLocal));\n dispatch(\n fetchProjects({\n isMine: formState.isFollowing,\n start: 0,\n length: 50,\n hasEvents: formState.hasEvents,\n countyIds: formState.selectedCountiesLocal?.map((c) => c.value)\n })\n );\n dispatch(setIsShowingSystemSnackbarMsg(true));\n history.push('/projects/');\n };\n return (\n
\n \n \n Project Filters - {environment.entityName} REACH\n \n \n \n \n {loading || isLoadingStakeholder ? (\n \n ) : (\n <>\n {!!lookups.LUCounties.length &&\n environment.entityName === 'Iowa DOT' && ( // counties only applies to Iowa\n \n \n Counties\n \n {\n handleChange(selectedOption, 'selectedCountiesLocal');\n }}\n options={lookups.LUCounties.map((c) => ({\n value: c.COUNTY_ID,\n label: c.COUNTY\n }))}\n value={formState.selectedCountiesLocal}\n />\n \n )}\n \n \n handleChange(e.target.checked, 'isFollowing')\n }\n color=\"primary\"\n />\n }\n label=\"Following\"\n />\n \n handleChange(e.target.checked, 'hasEvents')\n }\n color=\"primary\"\n />\n }\n label=\"Meetings\"\n />\n \n\n \n \n \n handleDateChange(date, 'startDate')}\n KeyboardButtonProps={{\n 'aria-label': 'change date'\n }}\n style={{ flex: 1 }}\n />\n handleDateChange(null, 'startDate')}\n style={{ marginLeft: '10px' }}\n >\n Clear\n \n
\n \n handleDateChange(date, 'endDate')}\n KeyboardButtonProps={{\n 'aria-label': 'change date'\n }}\n minDate={startDate}\n style={{ flex: 1 }}\n />\n handleDateChange(null, 'endDate')}\n style={{ marginLeft: '10px' }}\n >\n Clear\n \n \n \n
\n \n \n \n
\n \n\n handleSubmit(e)}\n >\n GO TO FILTERED PROJECTS\n \n \n )}\n {/*\n IOWA-213 - Hide, will add this geospatial functionality at later date.\n \n
\n
Only show projects within 50 miles of my home
\n handleChange(event, 'nearMyHome')}\n value=\"nearMyHome\"\n inputProps={{ 'aria-label': 'primary checkbox' }}\n />\n
\n
\n */}\n {/* DEPRECATED FILTER OPTIONS */}\n {/* \n
\n
Only show projects I follow
\n handleChange(event, 'following')}\n value=\"following\"\n inputProps={{ 'aria-label': 'primary checkbox' }}\n />\n
\n
*/}\n {/* \n \n Town\n \n handleChange(event, 'town')}\n labelWidth={labelWidth}\n >\n All\n Town X\n Town Y\n \n \n \n \n MPO\n \n handleChange(event, 'mpo')}\n labelWidth={labelWidth}\n >\n All\n MPO X\n MPO Y\n \n */}\n {/* END DEPRECATED FILTER OPTIONS */}\n \n \n );\n}\n","import { createAsyncThunk, createSlice } from '@reduxjs/toolkit';\nimport axios, { AxiosRequestConfig } from 'axios';\nimport moment from 'moment';\nimport { RootState } from '..';\nimport { environment } from '../../environment';\nimport {\n CommentDetailsDTO,\n VW_COMMENT_RESPONSE,\n VW_STAKEHOLDER_COMMENT\n} from '../../models/DTOs';\nimport { fetchLoginREACH, getREACHAuthHeaders, isTokenExpired } from './user';\n\ninterface ResponseType {\n RESPONSE_REQUEST_TYPE_ID: number;\n RESPONSE_REQUEST_TYPE: string;\n}\n\ninterface CommentCategory {\n COMMENT_CATEGORY_ID: number;\n COMMENT_CATEGORY: string;\n}\n\ninterface OrganizationType {\n ORGANIZATION_TYPE_ID: number;\n ORGANIZATION_TYPE: string;\n}\n\ninterface StakeholderType {\n STAKEHOLDER_TYPE_ID: number;\n STAKEHOLDER_TYPE_GUID: string;\n STAKEHOLDER_TYPE: string;\n}\n\ninterface ParticipateState {\n loading: boolean;\n hasErrors: boolean;\n errorMsg: string;\n project: any;\n commentFormState: any;\n projectCommentFormQuestions: any[];\n projectCommentFormCurrentQuestionID: number;\n lookups: {\n responseTypes: ResponseType[];\n commentCategories: CommentCategory[];\n organizationTypes: OrganizationType[];\n stakeholderTypes: StakeholderType[];\n };\n stakeCommentPayload?: any | VW_STAKEHOLDER_COMMENT;\n isCaptchaSubmitted: boolean;\n isStakeCommentSubmitted: boolean;\n}\n\nconst initialState: ParticipateState = {\n loading: false,\n hasErrors: false,\n errorMsg: '',\n project: null,\n commentFormState: {\n stakeComment: '',\n commentTopics: null,\n commentChoices: null,\n projectSupportLevel: null,\n selectedResponseTypeId: 4 // defaults \"Do not send me a response\"\n },\n projectCommentFormQuestions: [],\n projectCommentFormCurrentQuestionID: 0,\n lookups: {\n responseTypes: [],\n commentCategories: [],\n organizationTypes: [],\n stakeholderTypes: []\n },\n stakeCommentPayload: {},\n isCaptchaSubmitted: false,\n isStakeCommentSubmitted: false\n};\n\nconst participateSlice = createSlice({\n name: 'participate',\n initialState,\n reducers: {\n resetToInitialState: (state) => initialState,\n setCommentFormState: (state, { payload }) => {\n state.commentFormState = payload;\n },\n updateStakeCommentPayload: (state, { payload }) => {\n state.stakeCommentPayload[payload.property] = payload.value;\n },\n updateComment: (state) => {\n state.loading = true;\n },\n updateCommentSuccess: (state, { payload }) => {\n state.loading = false;\n },\n updateCommentFailure: (state, { payload }) => {\n state.loading = false;\n state.hasErrors = true;\n state.errorMsg = payload;\n },\n getProject: (state) => {\n state.loading = true;\n },\n getProjectSuccess: (state, { payload }) => {\n state.project = payload;\n state.loading = false;\n },\n getProjectFailure: (state, { payload }) => {\n state.loading = false;\n state.hasErrors = true;\n state.errorMsg = payload;\n },\n getAllCommentFormLookups: (state) => {\n state.loading = true;\n },\n getAllCommentFormLookupsSuccess: (state, { payload }) => {\n state.lookups.responseTypes = payload.responseTypes;\n state.lookups.commentCategories = payload.commentCategories;\n state.lookups.organizationTypes = payload.organizationTypes;\n state.lookups.stakeholderTypes = payload.stakeholderTypes;\n },\n getAllCommentFormLookupsFailure: (state, { payload }) => {\n state.loading = false;\n state.hasErrors = true;\n state.errorMsg = payload;\n },\n getProjCommentFormQuestions: (state) => {\n state.loading = false;\n },\n getProjCommentFormQuestionsFailure: (state, { payload }) => {\n state.loading = false;\n state.hasErrors = true;\n state.errorMsg = payload;\n },\n getProjCommentFormQuestionsSuccess: (state, { payload }) => {\n state.projectCommentFormQuestions = payload;\n state.hasErrors = false;\n },\n setProjCommentFormCurrentQuestionID: (state, { payload }) => {\n state.projectCommentFormCurrentQuestionID = payload;\n },\n submitCaptcha: (state) => {},\n submitCaptchaSuccess: (state) => {\n state.isCaptchaSubmitted = true;\n },\n submitCaptchaFailure: (state, { payload }) => {\n state.isCaptchaSubmitted = false;\n state.hasErrors = true;\n state.errorMsg = payload;\n },\n postStakeComment: (state) => {\n state.loading = true;\n },\n postStakeCommentSuccess: (state) => {\n state.isStakeCommentSubmitted = true;\n state.loading = false;\n },\n postStakeCommentFailure: (state, { payload }) => {\n state.isStakeCommentSubmitted = false;\n state.loading = false;\n state.hasErrors = true;\n state.errorMsg = payload;\n },\n postStakeCommentReply: (state) => {\n state.loading = true;\n },\n postStakeCommentReplySuccess: (state) => {\n state.loading = false;\n },\n postStakeCommentReplyFailure: (state, { payload }) => {\n state.loading = false;\n state.hasErrors = true;\n state.errorMsg = payload;\n },\n setIsStakeCommentSubmitted: (state, { payload }) => {\n state.isStakeCommentSubmitted = payload;\n }\n }\n});\n\nexport const {\n updateStakeCommentPayload,\n getProject,\n getProjectSuccess,\n getProjectFailure,\n updateComment,\n updateCommentSuccess,\n updateCommentFailure,\n getProjCommentFormQuestions,\n getProjCommentFormQuestionsSuccess,\n getProjCommentFormQuestionsFailure,\n setProjCommentFormCurrentQuestionID,\n getAllCommentFormLookups,\n getAllCommentFormLookupsSuccess,\n getAllCommentFormLookupsFailure,\n submitCaptcha,\n submitCaptchaSuccess,\n submitCaptchaFailure,\n postStakeComment,\n postStakeCommentSuccess,\n postStakeCommentFailure,\n postStakeCommentReply,\n postStakeCommentReplySuccess,\n postStakeCommentReplyFailure,\n setIsStakeCommentSubmitted,\n resetToInitialState,\n setCommentFormState\n} = participateSlice.actions;\n\nexport const getParticipateState = (state: RootState) => state.participate;\n\nexport const fetchCommentFormQuestions = createAsyncThunk(\n 'participate/fetchCommentFormQuestions',\n async (input: { projectId: number }, thunkAPI: any) => {\n const { projectId } = input;\n thunkAPI.dispatch(getProjCommentFormQuestions());\n const hasTokenExpired = isTokenExpired(thunkAPI);\n try {\n if (hasTokenExpired) {\n return;\n }\n const config: AxiosRequestConfig = getREACHAuthHeaders();\n const { data } = await axios.get(\n `${environment.apiUrl}/PublicQuestion/get?project_id=${projectId}`,\n config\n );\n const { participateSlice } = thunkAPI.getState();\n const filterUnneededQuestions = (result) =>\n result.filter((question: any) => {\n if (question.ModuleName === 'Stakeholder') {\n // these are related to submitting your stakeholder information from PIMA - we already have that since the user is logged into REACH\n return false;\n } else if (\n question.ModuleName === 'Topics' && // only include if configured in PIMA\n !participateSlice.project.SelectedCommentTopics.length\n ) {\n return false;\n } else if (\n question.ModuleName === 'Choices' && // only include if configured in PIMA\n !participateSlice.project.SelectedCommentChoices.length\n ) {\n return false;\n } else {\n return true;\n }\n });\n if (data) {\n thunkAPI.dispatch(\n getProjCommentFormQuestionsSuccess(filterUnneededQuestions(data))\n );\n } else {\n throw new Error('no result from server');\n }\n } catch (err) {\n thunkAPI.dispatch(getProjCommentFormQuestionsFailure(err.message));\n }\n }\n);\n\nexport const fetchAllCommentFormLookups = createAsyncThunk(\n 'participate/fetchAllCommentFormLookups',\n async (input, thunkAPI: any) => {\n thunkAPI.dispatch(getAllCommentFormLookups());\n const hasTokenExpired = isTokenExpired(thunkAPI);\n try {\n if (hasTokenExpired) {\n return;\n }\n const config: AxiosRequestConfig = getREACHAuthHeaders();\n const lookupUrls = [\n // aliases are so redux store can associate data to the correct lookup state properties\n {\n url: `${environment.apiUrl}/lu_response_request_type/get`,\n alias: 'responseTypes'\n },\n {\n url: `${environment.apiUrl}/lu_comment_category/get`,\n alias: 'commentCategories'\n },\n {\n url: `${environment.apiUrl}/lu_organization_type/get`,\n alias: 'organizationTypes'\n },\n {\n url: `${environment.apiUrl}/lu_stakeholder_type/get`,\n alias: 'stakeholderTypes'\n }\n ];\n const allLookupData = await Promise.all(\n lookupUrls.map((item) => axios.get(item.url, config))\n );\n const res = {};\n lookupUrls.forEach((l: any, idx: number) => {\n // map object keys to aliases\n res[l.alias] = allLookupData[idx].data;\n });\n if (res) {\n thunkAPI.dispatch(getAllCommentFormLookupsSuccess(res));\n } else {\n throw new Error('no result from server');\n }\n } catch (err) {\n thunkAPI.dispatch(getAllCommentFormLookupsFailure(err.message));\n }\n }\n);\n\nexport const fetchProject = createAsyncThunk(\n 'participate/fetchProject',\n async (input: { projectId: number }, thunkAPI: any) => {\n const { projectId } = input;\n thunkAPI.dispatch(getProject());\n const hasTokenExpired = isTokenExpired(thunkAPI);\n try {\n if (hasTokenExpired) {\n return;\n }\n const config: AxiosRequestConfig = getREACHAuthHeaders();\n const { data } = await axios.get(\n `${environment.apiUrl}/project/get?id=${projectId}`,\n config\n );\n if (data) {\n thunkAPI.dispatch(getProjectSuccess(data));\n } else {\n throw new Error('no result from server');\n }\n } catch (err) {\n thunkAPI.dispatch(getProjectFailure(err.message));\n }\n }\n);\n\nexport const fetchPostStakeComment = createAsyncThunk(\n 'participate/fetchPostStakeComment',\n async (\n input: { stakeId: number; payload: VW_STAKEHOLDER_COMMENT },\n thunkAPI: any\n ) => {\n const { stakeId, payload } = input;\n if (!payload.STAKEHOLDER_SUPPORT_ID) {\n payload.STAKEHOLDER_SUPPORT_ID = 3; // default state is neutral before user interacts with slider\n }\n thunkAPI.dispatch(postStakeComment());\n const hasTokenExpired = isTokenExpired(thunkAPI);\n try {\n if (hasTokenExpired) {\n return;\n }\n const config: AxiosRequestConfig = getREACHAuthHeaders();\n const { status } = await axios.post(\n `${environment.apiUrl}/stakeholder_comment/Post?stake_id=${stakeId}`,\n payload,\n config\n );\n if (status === 200) {\n thunkAPI.dispatch(postStakeCommentSuccess());\n } else {\n thunkAPI.dispatch(\n postStakeCommentFailure('Error submitting stakeholder comment.')\n );\n }\n } catch (err) {\n thunkAPI.dispatch(\n postStakeCommentFailure('Error submitting stakeholder comment.')\n );\n }\n }\n);\n\nexport const fetchPostStakeCommentReponse = createAsyncThunk(\n 'participate/fetchPostStakeCommentReponse',\n async (input: { commentId: number; response: any }, thunkAPI: any) => {\n // TODO: update response type to VW_COMMENT_RESPONSE when api is complete\n const { commentId } = input;\n let { response } = input;\n thunkAPI.dispatch(postStakeCommentReply());\n try {\n response = {\n COMMENT_RESPONSE_GUID: null,\n COMMENT_RESPONSE_ID: 0,\n IS_ON_BEHALF: 0,\n IS_RESPONSE_NEEDS_APPROVAL: 0,\n IsWorkflow: false,\n LAST_UPDATED_DATE: moment().format('YYYY-MM-DD HH:mm:ss'),\n LAST_UPDATED_PERSON: null,\n LAST_UPDATED_PERSON_ID: null,\n NEEDS_RESPONSE: null,\n PERSON_NAME: null,\n RESPONDED_BY: null,\n RESPONDED_BY_PERSON: null,\n RESPONSE: response,\n RESPONSE_DATE: moment().format('YYYY-MM-DD HH:mm:ss'),\n RESPONSE_DATE2: moment().format('YYYY-MM-DD'),\n RESPONSE_SENT_DATE: null,\n RESPONSE_TYPE: null,\n RESPONSE_TYPE_ID: 2,\n STAKE_COMMENT_GUID: '00000000-0000-0000-0000-000000000000',\n STAKE_COMMENT_ID: commentId,\n STAKE_ID: 0,\n STAKEHOLDER_NAME: '',\n Workflow: null,\n WORKFLOW_AUTHOR_ID: null\n };\n\n const { status } = await axios.post(\n `${environment.apiUrl}/comment_response/UpdateResponse?comment_id=${commentId}`,\n response\n );\n if (status === 200) {\n thunkAPI.dispatch(postStakeCommentReplySuccess());\n } else {\n thunkAPI.dispatch(\n postStakeCommentReplyFailure(\n 'Error submitting stakeholder comment response.'\n )\n );\n }\n } catch (err) {\n thunkAPI.dispatch(\n postStakeCommentReplyFailure(\n 'Error submitting stakeholder comment response.'\n )\n );\n }\n }\n);\n\nexport const fetchUpdateComment = createAsyncThunk(\n 'participate/updateComment',\n async (input: CommentDetailsDTO, thunkAPI: any) => {\n thunkAPI.dispatch(updateComment());\n const hasTokenExpired = isTokenExpired(thunkAPI);\n try {\n if (hasTokenExpired) {\n return;\n }\n const config: AxiosRequestConfig = getREACHAuthHeaders();\n const { status } = await axios.put(\n `${environment.apiUrl}/reach/PutComment`,\n input,\n config\n );\n if (status === 200) {\n thunkAPI.dispatch(updateCommentSuccess(input));\n } else {\n throw new Error('no result from server');\n }\n } catch (err) {\n thunkAPI.dispatch(updateCommentFailure(err.message));\n }\n }\n);\nexport const fetchSubmitCaptcha = createAsyncThunk(\n 'participate/submitCaptcha',\n async (input: { projectId: number; stakeholder: any }, thunkAPI: any) => {\n const { projectId, stakeholder } = input;\n thunkAPI.dispatch(submitCaptcha());\n const hasTokenExpired = isTokenExpired(thunkAPI);\n try {\n if (hasTokenExpired) {\n return;\n }\n const config: AxiosRequestConfig = getREACHAuthHeaders();\n const { status } = await axios.put(\n `${environment.apiUrl}/stakeholder/put?captchaResponse=hello&id=${projectId}`,\n stakeholder,\n config\n );\n if (status === 200) {\n thunkAPI.dispatch(submitCaptchaSuccess());\n } else {\n throw new Error('no result from server');\n }\n } catch (err) {\n thunkAPI.dispatch(submitCaptchaFailure(err.message));\n }\n }\n);\nexport default participateSlice.reducer;\n\n/*\nLIST OF REQUESTS IN PIMA COMMENT FORM\n\n// NEED TO GET LOGGED IN STAKEHOLDER AND PREFILL FIRST QUESTION - exists already in myprofile slice under stakeholderInfo\n\nhttps://apicf.hntbpima.com/api/commentformimage/get?project_id=14387\nhttps://apicf.hntbpima.com/api/PublicQuestion/get?project_id=14387\n\n// TOPICS INCLUDED HERE\nhttps://apicf.hntbpima.com/api/project/get?id=14389\n\nLOOKUPS\nhttps://apicf.hntbpima.com/api/lu_comment_category/get\nhttps://apicf.hntbpima.com/api/lu_response_request_type/get\nhttps://apicf.hntbpima.com/api/lu_organization_type/get\nhttps://apicf.hntbpima.com/api/lu_stakeholder_type/get\n\n*/\n\n//https://uploads.hntbpima.com/61573a50-1b18-4d09-83e5-714a81bb067d.jpg\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport Grid from '@material-ui/core/Grid';\nimport Slider from '@material-ui/core/Slider';\nimport { Button, MenuItem, Select, withStyles } from '@material-ui/core';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { updateStakeCommentPayload } from '../../store/slices/participate';\nimport { RootState } from '../../store';\nimport styled from 'styled-components';\n\nconst MySelect = styled(Select)`\n margin-top: 30px;\n width: 100%;\n`;\n\nconst MyContainer = styled.div`\n margin-top: 30px;\n`;\n\nconst styles = () => ({\n root: {\n margin: '80px 25px 40px 25px'\n },\n markLabel: {\n fontSize: 14\n }\n});\n\ninterface Props {\n defaultValue: number;\n classes?: any;\n setProjCommentFormLocalState: any;\n projectCommentFormLocalState: any;\n}\n\nconst marks = [\n {\n value: 0,\n label: 'Not in Favor'\n },\n {\n value: 1,\n label: 'Less in Favor'\n },\n {\n value: 2,\n label: 'Neutral'\n },\n {\n value: 3,\n label: 'Leaning in Favor'\n },\n {\n value: 4,\n label: 'In Favor'\n }\n];\n\nconst ProjectSupportSlider = ({\n defaultValue,\n classes,\n setProjCommentFormLocalState,\n projectCommentFormLocalState\n}: Props): ReactElement => {\n const { isMobile } = useSelector(\n (state: RootState) => state\n ).applicationSlice;\n const CustomSlider = withStyles({\n thumb: {\n marginTop: -2\n },\n markActive: {\n display: 'none'\n },\n mark: {\n height: 8,\n width: 8,\n bottom: isMobile ? 14 : 7\n },\n rail: {\n backgroundImage: 'linear-gradient(.25turn, #FF0200, #038100)',\n height: 8\n },\n track: {\n backgroundImage: 'linear-gradient(.25turn, #FF0200, #038100)'\n },\n markLabel: {\n height: 20\n }\n })(Slider);\n const dispatch = useDispatch();\n const [value, setValue] = useState(defaultValue);\n const [isRespondViaDropdown, setIsRespondViaDropdown] = useState(false);\n const { stakeCommentPayload } = useSelector(\n (state: RootState) => state\n ).participateSlice;\n useEffect(() => {\n if (!stakeCommentPayload.STAKEHOLDER_SUPPORT_ID) {\n // set initial state to store as neutral in case user does not change it\n dispatch(\n updateStakeCommentPayload({\n property: 'STAKEHOLDER_SUPPORT_ID',\n value: defaultValue\n })\n );\n }\n }, [defaultValue, dispatch, stakeCommentPayload.STAKEHOLDER_SUPPORT_ID]);\n\n const mapTo_LU_STAKEHOLDER_SUPPORT = (sliderValue: number) => {\n switch (sliderValue) {\n case 0:\n return 5;\n case 1:\n return 4;\n case 2:\n return 3;\n case 3:\n return 2;\n case 4:\n return 1;\n }\n };\n const handleChange = (event, newValue) => {\n setValue(newValue);\n setProjCommentFormLocalState({\n ...projectCommentFormLocalState,\n projectSupportLevel: mapTo_LU_STAKEHOLDER_SUPPORT(newValue)\n });\n };\n return (\n
\n \n \n marks.find((m) => m.value === value).label}\n max={4}\n min={0}\n valueLabelDisplay=\"on\"\n valueLabelFormat={(value) => (\n
\n {marks\n .find((m) => m.value === value)\n .label.split(' ')\n .map((word, idx) => {\n if (idx === 0) {\n return
{word}
;\n } else {\n return (\n {`${word}${\n idx !==\n marks\n .find((m) => m.value === value)\n .label.split(' ').length +\n 1 && ' '\n }`}\n );\n }\n })}\n
\n )}\n value={value}\n onChange={handleChange}\n aria-labelledby=\"continuous-slider\"\n step={null}\n marks={marks}\n track={false}\n />\n
\n
\n {!isRespondViaDropdown ? (\n \n setIsRespondViaDropdown(true)}\n variant=\"contained\"\n >\n Respond via dropdown menu\n \n \n ) : (\n setValue(e.target.value)}>\n Not in Favor\n Less in Favor\n Neutral\n Leaning in Favor\n In Favor\n \n )}\n
\n );\n};\n\nexport default withStyles(styles)(ProjectSupportSlider);\n","import { createSlice, createAsyncThunk } from '@reduxjs/toolkit';\nimport axios, { AxiosRequestConfig } from 'axios';\nimport { RootState } from '..';\nimport { environment } from '../../environment';\nimport { fetchLoginREACH, getREACHAuthHeaders, isTokenExpired } from './user';\n\ninterface MyProfileState {\n orgTypes: any[];\n stakeholderInfo: any;\n isLoadingStakeholder: boolean;\n isLoadingOrgTypes: boolean;\n hasErrors: boolean;\n errorMsg: string;\n}\n\nconst initialState: MyProfileState = {\n orgTypes: [],\n stakeholderInfo: null,\n isLoadingStakeholder: false,\n isLoadingOrgTypes: false,\n hasErrors: false,\n errorMsg: ''\n};\n\nconst myProfileSlice = createSlice({\n name: 'myprofile',\n initialState,\n reducers: {\n clearMyProfileState: (state) => {\n // neccesary for my profile stats updates in case user follows projects or comments on them in other tab\n state.orgTypes = initialState.orgTypes;\n state.stakeholderInfo = initialState.stakeholderInfo;\n state.isLoadingStakeholder = initialState.isLoadingStakeholder;\n state.isLoadingOrgTypes = initialState.isLoadingOrgTypes;\n state.hasErrors = initialState.hasErrors;\n state.errorMsg = initialState.errorMsg;\n },\n setIncrementStakeProjectCount: (state) => {\n // not currently being used.\n // would improve performance for myprofile to reduce GetStakeholder calls.\n if (state.stakeholderInfo) {\n state.stakeholderInfo.ProjectCount += 1;\n }\n },\n setDecrementStakeProjectCount: (state) => {\n // not currently being used.\n // would improve performance for myprofile to reduce GetStakeholder calls\n if (state.stakeholderInfo) {\n state.stakeholderInfo.ProjectCount -= 1;\n }\n },\n getStakeholder: (state) => {\n state.isLoadingStakeholder = true;\n },\n getStakeholderFailure: (state, { payload }) => {\n state.isLoadingStakeholder = false;\n state.hasErrors = true;\n state.errorMsg = payload;\n },\n getStakeholderSuccess: (state, { payload }) => {\n state.isLoadingStakeholder = false;\n state.hasErrors = false;\n state.stakeholderInfo = payload;\n },\n updateStakeholder: (state) => {\n state.isLoadingStakeholder = true;\n },\n updateStakeholderFailure: (state, { payload }) => {\n state.isLoadingStakeholder = false;\n state.hasErrors = true;\n state.errorMsg = payload;\n },\n updateStakeholderSuccess: (state) => {\n state.isLoadingStakeholder = false;\n state.hasErrors = false;\n // state.stakeholderInfo = payload;\n },\n getLUOrgTypes: (state) => {\n state.isLoadingOrgTypes = true;\n },\n getLUOrgTypesFailure: (state, { payload }) => {\n state.isLoadingOrgTypes = false;\n state.hasErrors = true;\n state.errorMsg = payload;\n },\n getLUOrgTypesSuccess: (state, { payload }) => {\n state.isLoadingOrgTypes = false;\n state.hasErrors = false;\n state.orgTypes = payload;\n }\n }\n});\nexport const {\n clearMyProfileState,\n setDecrementStakeProjectCount,\n setIncrementStakeProjectCount,\n getStakeholder,\n getStakeholderSuccess,\n getStakeholderFailure,\n updateStakeholder,\n updateStakeholderSuccess,\n updateStakeholderFailure,\n getLUOrgTypes,\n getLUOrgTypesSuccess,\n getLUOrgTypesFailure\n} = myProfileSlice.actions;\n\nexport const getMyProfileState = (state: RootState) => state.myprofile;\n\nexport const fetchLUOrgTypes = createAsyncThunk(\n 'myprofile/fetchLUOrgTypes',\n async (input, thunkAPI) => {\n const hasTokenExpired = isTokenExpired(thunkAPI);\n try {\n if (hasTokenExpired) {\n return;\n }\n const config: AxiosRequestConfig = getREACHAuthHeaders();\n thunkAPI.dispatch(getLUOrgTypes());\n const response = await axios.get(\n `${environment.apiUrl}/LU_ORGANIZATION_TYPE/Get`,\n // `${environment.apiUrl}/LU_ORGANIZATION_TYPE/GetLookup`,\n config\n );\n // console.log('fetchLUOrgTypes response: ', response);\n if (response.data) {\n thunkAPI.dispatch(getLUOrgTypesSuccess(response.data));\n } else {\n throw new Error('no result from server');\n }\n } catch (err) {\n thunkAPI.dispatch(getLUOrgTypesSuccess(err.message));\n }\n }\n);\n\nexport const fetchLoggedInStakeholder = createAsyncThunk(\n 'myprofile/fetchStakeholder',\n async (input, thunkAPI: any) => {\n const hasTokenExpired = isTokenExpired(thunkAPI);\n try {\n if (hasTokenExpired) {\n return;\n }\n const config: AxiosRequestConfig = getREACHAuthHeaders();\n thunkAPI.dispatch(getStakeholder());\n const { data } = await axios.get(\n `${environment.apiUrl}/Reach/GetStakeholder`,\n config\n );\n if (data) {\n thunkAPI.dispatch(getStakeholderSuccess(data));\n } else {\n throw new Error('no result from server');\n }\n } catch (err) {\n thunkAPI.dispatch(getStakeholderFailure(err.message));\n }\n }\n);\n\nexport const fetchUpdateStakeholder = createAsyncThunk(\n 'myprofile/fetchUpdateStakeholder',\n async (input: any, thunkAPI: any) => {\n const hasTokenExpired = isTokenExpired(thunkAPI);\n try {\n if (hasTokenExpired) {\n return;\n }\n const config: AxiosRequestConfig = getREACHAuthHeaders();\n thunkAPI.dispatch(updateStakeholder());\n const { status } = await axios.put(\n `${environment.apiUrl}/Reach/PutStakeholder?id=${input.STAKE_ID}`,\n input,\n config\n );\n if (status === 200) {\n thunkAPI.dispatch(updateStakeholderSuccess());\n thunkAPI.dispatch(fetchLoggedInStakeholder());\n } else {\n throw new Error('no result from server');\n }\n } catch (err) {\n thunkAPI.dispatch(updateStakeholderFailure(err.message));\n }\n }\n);\n\nexport default myProfileSlice.reducer;\n","import React, { ReactElement, useState, useEffect, useCallback } from 'react';\nimport {\n WebMap,\n SubHeaderGoBack,\n ProjectCommentFormTopics,\n ProjectCommentFormChoices\n} from '../';\nimport {\n Typography,\n TextField,\n Button,\n CircularProgress,\n FormControlLabel,\n Checkbox,\n FormLabel,\n Select,\n MenuItem,\n InputLabel\n} from '@material-ui/core';\nimport ArrowForwardIcon from '@material-ui/icons/ArrowForward';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { useHistory } from 'react-router-dom';\nimport {\n clearSelectedProject,\n fetchSelectedProject\n} from '../../store/slices/projects';\nimport {\n fetchAllCommentFormLookups,\n fetchCommentFormQuestions,\n fetchPostStakeComment,\n fetchProject,\n fetchSubmitCaptcha,\n resetToInitialState,\n setCommentFormState,\n setProjCommentFormCurrentQuestionID,\n updateStakeCommentPayload\n} from '../../store/slices/participate';\nimport ProjectSupportSlider from './ProjectSupportSlider';\nimport { VW_STAKEHOLDER_COMMENT } from '../../models/DTOs';\nimport { setNavigationTab } from '../../store/slices/application';\nimport { fetchLoggedInStakeholder } from '../../store/slices/myprofile';\nimport { RootState } from '../../store';\nimport styled from 'styled-components';\nimport { environment } from '../../environment';\nimport { Helmet } from 'react-helmet';\nimport DOMPurify from 'dompurify';\n\n// local state always takes precedence over redux state in terms of comment submission payload\nconst initialState: any = {\n stakeComment: '',\n commentTopics: [],\n commentChoices: [],\n projectSupportLevel: null,\n selectedResponseTypeId: null\n};\n\nconst MyH2 = styled.h2`\n ${({ theme }: any) => `\n font-size: 24px;\n color: ${theme.palette.primary.main};\n margin-top: 0px;\n `}\n`;\n\nexport default function ProjectCommentForm(props): ReactElement {\n const dispatch = useDispatch();\n const history = useHistory();\n const [localState, setLocalState] = useState(initialState);\n\n const {\n project,\n hasErrors,\n errorMsg,\n projectCommentFormQuestions,\n projectCommentFormCurrentQuestionID,\n lookups,\n isStakeCommentSubmitted,\n loading: loadingParticipate,\n stakeCommentPayload,\n commentFormState\n } = useSelector((state: RootState) => state).participateSlice;\n const { selectedProject, loading: loadingProjects } = useSelector(\n (state: RootState) => state\n ).projectsSlice;\n const { isLoadingStakeholder } = useSelector(\n (state: RootState) => state\n ).myProfileSlice;\n const { stakeholderInfo } = useSelector(\n (state: RootState) => state\n ).myProfileSlice;\n const { currentPath, isMobile } = useSelector(\n (state: RootState) => state\n ).applicationSlice;\n\n const [projCommentLatLon, setProjCommentLatLon] = useState({\n lat: null,\n lon: null\n });\n const resetAllState = useCallback(() => {\n dispatch(resetToInitialState());\n dispatch(clearSelectedProject());\n }, [dispatch]);\n\n useEffect(() => {\n if (\n isStakeCommentSubmitted &&\n selectedProject &&\n selectedProject.ProjectId\n ) {\n setTimeout(() => {\n history.push(`/projects/${selectedProject.ProjectId}`);\n }, 2500);\n }\n }, [dispatch, isStakeCommentSubmitted, selectedProject]);\n\n useEffect(() => {\n if (\n project &&\n !commentFormState.commentTopics &&\n !commentFormState.commentChoices\n ) {\n let formattedTopicsResult = {};\n let formattedChoicesResult = {};\n // format comment topics in the way MUI checkboxes expects for local state\n project.SelectedCommentTopics.map(\n (t: any) => (formattedTopicsResult[t.COMMENT_TOPIC] = false)\n );\n project.SelectedCommentChoices.map(\n (c: any) => (formattedChoicesResult[c.COMMENT_CHOICE] = false)\n );\n dispatch(\n setCommentFormState({\n ...commentFormState,\n commentTopics: formattedTopicsResult,\n commentChoices: formattedChoicesResult\n })\n );\n }\n }, [commentFormState, dispatch, project]);\n\n const subscribeToHistory = useCallback(() => {\n const unlisten = history.listen((loc, action) => {\n if (action) {\n resetAllState();\n if (\n loc.pathname !== currentPath &&\n !loc.pathname.includes(props.match.params.projectId)\n ) {\n unlisten(); // no longer listen after clearing project on page leave\n }\n }\n });\n }, [currentPath, props.match.params.projectId, resetAllState]);\n\n useEffect(() => {\n if (!isLoadingStakeholder && !stakeholderInfo) {\n dispatch(fetchLoggedInStakeholder());\n }\n }, [dispatch, isLoadingStakeholder, stakeholderInfo]);\n useEffect(() => {\n const projectId = Number(props.match.params.projectId);\n async function asyncWrapper() {\n if (!project || project.PROJECT_ID !== projectId) {\n await dispatch(fetchProject({ projectId })); // fetchCommentFormQuestions depends on the result of fetchProject for filtering\n }\n if (!projectCommentFormQuestions.length) {\n dispatch(fetchCommentFormQuestions({ projectId }));\n }\n }\n if (\n !loadingParticipate &&\n !loadingProjects &&\n !hasErrors &&\n !selectedProject &&\n !projectCommentFormQuestions.length\n ) {\n if (!selectedProject || selectedProject.ProjectId !== projectId) {\n dispatch(fetchSelectedProject(projectId));\n }\n subscribeToHistory();\n dispatch(setNavigationTab('participate'));\n if (!lookups.length) {\n dispatch(fetchAllCommentFormLookups());\n }\n asyncWrapper();\n }\n }, [\n dispatch,\n hasErrors,\n loadingParticipate,\n loadingProjects,\n lookups.length,\n project,\n projectCommentFormQuestions.length,\n props.match.params,\n props.match.params.projectId,\n selectedProject,\n subscribeToHistory\n ]);\n\n const updateStakeCommentPayloadSwitch = (ModuleName: string) => {\n switch (ModuleName) {\n // need to switch on this to update the comment payload state object in store each click\n case 'Comment': // stake comment\n dispatch(\n updateStakeCommentPayload({\n property: 'STAKE_COMMENT',\n value: localState.stakeComment\n })\n );\n break;\n case 'Response': {\n // requested response type from DOT\n dispatch(\n updateStakeCommentPayload({\n property: 'RESPONSE_REQUEST_TYPE_ID',\n value: localState.selectedResponseTypeId\n ? localState.selectedResponseTypeId\n : commentFormState.selectedResponseTypeId\n })\n );\n break;\n }\n case 'Topics': {\n dispatch(\n updateStakeCommentPayload({\n property: 'CommentTopics',\n value: localState.commentTopics\n })\n );\n break;\n }\n case 'Choices': {\n dispatch(\n updateStakeCommentPayload({\n property: 'CommentChoices',\n value: localState.commentChoices\n })\n );\n break;\n }\n case 'Map':\n // map coordinates\n dispatch(\n updateStakeCommentPayload({\n property: 'COMMENT_LAT',\n value: projCommentLatLon.lat\n })\n );\n dispatch(\n updateStakeCommentPayload({\n property: 'COMMENT_LON',\n value: projCommentLatLon.lon\n })\n );\n break;\n case 'Rating': {\n // project support slider\n dispatch(\n updateStakeCommentPayload({\n property: 'STAKEHOLDER_SUPPORT_ID',\n value: localState.projectSupportLevel\n })\n );\n break;\n }\n default:\n throw new Error('unhandled ModuleName in ProjectCommentForm');\n }\n };\n\n const renderQuestionSpecificFormFields = (currentQuestionData: any) => {\n switch (currentQuestionData.ModuleName) {\n case 'Comment':\n return (\n
\n \n setLocalState({\n ...localState,\n stakeComment: DOMPurify.sanitize(e.target.value)\n })\n }\n label=\"Comment:\"\n helperText=\"Please do not place any personally identifiable information such as names, phone numbers, or email addresses within this field. Be aware that any comment placed in this field will be available for public consumption.\"\n fullWidth\n multiline\n rows=\"8\"\n margin=\"normal\"\n InputLabelProps={{\n shrink: true,\n id: 'comment'\n }}\n variant=\"outlined\"\n id=\"comment\"\n />\n
\n );\n case 'Topics':\n return (\n \n );\n case 'Choices':\n return (\n \n );\n case 'Response':\n // MAS-249 - if/else below is controlled by PIMA questions \"Checkbox Email Response\" field\n if (\n currentQuestionData.ModuleOptions.find(\n (m) => m.NAME === 'Checkbox Email Response'\n ).VALUE === 'true'\n ) {\n return (\n {\n if (commentFormState.selectedResponseTypeId === 4) {\n dispatch(\n setCommentFormState({\n ...commentFormState,\n selectedResponseTypeId: 2 // respond to me by email\n })\n );\n } else {\n dispatch(\n setCommentFormState({\n ...commentFormState,\n selectedResponseTypeId: 4 // do not send me a response\n })\n );\n }\n }}\n color=\"primary\"\n />\n }\n label=\"Send me a response\"\n />\n );\n } else {\n return (\n
\n {lookups.responseTypes.length && (\n \n Select one\n \n dispatch(\n setCommentFormState({\n ...commentFormState,\n selectedResponseTypeId: e.target.value\n })\n )\n }\n >\n {lookups.responseTypes.map((r, idx) => (\n \n {r.RESPONSE_REQUEST_TYPE}\n \n ))}\n \n \n )}\n
\n );\n }\n case 'Map':\n // this question is filtered out in participate.tsx thunk if no MAP_ID is supplied from PIMA\n return (\n \n );\n case 'Rating':\n return (\n \n );\n case 'Captcha':\n return
TODO: add Captcha form
;\n /*\n case 'Stakeholder': // this was filtered out in fetchAllCommentFormLookups as we already have the stakeholder info from who's logged in\n return
TODO: add Stakeholder form
;\n */\n default:\n return null;\n }\n };\n return (\n \n \n \n Project Comment - {environment.entityName} REACH\n {selectedProject && (\n \n )}\n \n {selectedProject && (\n \n )}\n \n \n {selectedProject && selectedProject.ProjectNr}\n \n \n {selectedProject && selectedProject.ProjectDesc}\n \n {projectCommentFormCurrentQuestionID <\n projectCommentFormQuestions.length && (\n
\n \n {\n projectCommentFormQuestions[projectCommentFormCurrentQuestionID]\n .TEXT\n }\n \n
\n {renderQuestionSpecificFormFields(\n projectCommentFormQuestions[projectCommentFormCurrentQuestionID]\n )}\n
\n
\n )}\n \n {(loadingParticipate || loadingProjects) && (\n <>\n \n Loading project comment form\n \n \n \n )}\n
\n
\n {\n if (projectCommentFormCurrentQuestionID > 0) {\n dispatch(\n setProjCommentFormCurrentQuestionID(\n projectCommentFormCurrentQuestionID - 1\n )\n );\n }\n }}\n color=\"secondary\"\n variant=\"contained\"\n style={{\n marginRight: '20px'\n }}\n >\n BACK\n \n {\n const { ModuleName } =\n projectCommentFormQuestions[\n projectCommentFormCurrentQuestionID\n ];\n updateStakeCommentPayloadSwitch(ModuleName);\n dispatch(\n fetchSubmitCaptcha({\n projectId: selectedProject.ProjectId,\n stakeholder: stakeholderInfo\n })\n );\n // local state always takes precedence over redux store state, hence the ternaries in payload below\n const postStakeCommentPayload: VW_STAKEHOLDER_COMMENT = {\n COMMENT_CATEGORY_ID: 1,\n COMMENT_LAT: projCommentLatLon.lat\n ? projCommentLatLon.lat\n : stakeCommentPayload.COMMENT_LAT,\n COMMENT_LON: projCommentLatLon.lon\n ? projCommentLatLon.lon\n : stakeCommentPayload.COMMENT_LON,\n COMMENT_SOURCE_ID: 3,\n CommentChoices: localState.commentChoices.length\n ? localState.commentChoices\n : stakeCommentPayload.CommentChoices,\n CommentTopics: localState.commentTopics.length\n ? localState.commentTopics\n : stakeCommentPayload.CommentTopics,\n IS_RESPONSE_NEEDS_APPROVAL: 0,\n NOTES: '',\n PE_ID: null,\n PE_GUID: null,\n PROJECT_ID: selectedProject.ProjectId,\n PROJECT_NR: null,\n RESPONSE_REQUEST_TYPE_ID:\n commentFormState.selectedResponseTypeId,\n STAKE_COMMENT: localState.stakeComment.length\n ? localState.stakeComment\n : stakeCommentPayload.STAKE_COMMENT,\n STAKE_ID: stakeholderInfo.STAKE_ID,\n STAKEHOLDER_SUPPORT_ID:\n localState.projectSupportLevel !== null\n ? localState.projectSupportLevel\n : stakeCommentPayload.STAKEHOLDER_SUPPORT_ID,\n TONE_ID: null\n };\n dispatch(\n fetchPostStakeComment({\n stakeId: stakeholderInfo.STAKE_ID,\n payload: postStakeCommentPayload\n })\n );\n }\n }\n : {\n // IS CONTINUE\n onClick: () => {\n window.scrollTo(0, 0);\n const { ModuleName } =\n projectCommentFormQuestions[\n projectCommentFormCurrentQuestionID\n ];\n updateStakeCommentPayloadSwitch(ModuleName);\n dispatch(\n setProjCommentFormCurrentQuestionID(\n projectCommentFormCurrentQuestionID + 1\n )\n );\n }\n })}\n color=\"primary\"\n variant=\"contained\"\n >\n {projectCommentFormCurrentQuestionID <\n projectCommentFormQuestions.length - 1\n ? 'CONTINUE'\n : 'SUBMIT'}\n\n {projectCommentFormCurrentQuestionID <\n projectCommentFormQuestions.length - 1 && (\n \n )}\n \n
\n {isStakeCommentSubmitted && (\n \n Success! You will be redirected to the project you commented on\n shortly.\n
\n )}\n {hasErrors && errorMsg && (\n
\n {errorMsg}\n
\n )}\n {!isStakeCommentSubmitted && (\n
\n {projectCommentFormCurrentQuestionID <\n projectCommentFormQuestions.length && (\n \n {`${projectCommentFormCurrentQuestionID} of ${projectCommentFormQuestions.length} Answered`}\n
\n )}\n \n )}\n \n \n );\n}\n","import {\n Checkbox,\n CircularProgress,\n FormControl,\n FormControlLabel,\n FormGroup\n} from '@material-ui/core';\nimport React, { ReactElement } from 'react';\nimport { useSelector } from 'react-redux';\nimport { RootState } from '../../store';\n\ninterface Props {\n localState: any;\n setLocalState: Function;\n}\n\nexport default function ProjectCommentFormTopics({\n localState,\n setLocalState\n}: Props): ReactElement {\n const { project, commentFormState } = useSelector(\n (state: RootState) => state\n ).participateSlice;\n\n return (\n <>\n {project &&\n commentFormState.commentTopics &&\n project.SelectedCommentTopics.length ? (\n
\n \n \n {project.SelectedCommentTopics.map((t, idx: number) => (\n {\n const idToAddOrRemove = project.SelectedCommentTopics.find(\n (t) => t.COMMENT_TOPIC === e.target.name\n ).COMMENT_TOPIC_ID;\n if (e.target.checked) {\n // add\n setLocalState({\n ...localState,\n commentTopics: [\n ...localState.commentTopics,\n idToAddOrRemove\n ]\n });\n } else {\n // remove\n setLocalState({\n ...localState,\n commentTopics: localState.commentTopics.filter(\n (id: number) => id !== idToAddOrRemove\n )\n });\n }\n }}\n name={t.COMMENT_TOPIC}\n />\n }\n label={t.COMMENT_TOPIC}\n />\n ))}\n \n \n
\n ) : (\n <>\n \n Loading project comment form\n \n \n \n )}\n \n );\n}\n","import {\n Checkbox,\n CircularProgress,\n FormControl,\n FormControlLabel,\n FormGroup\n} from '@material-ui/core';\nimport React, { ReactElement } from 'react';\nimport { useSelector } from 'react-redux';\nimport { RootState } from '../../store';\n\ninterface Props {\n localState: any;\n setLocalState: Function;\n}\n\nexport default function ProjectCommentFormChoices({\n localState,\n setLocalState\n}: Props): ReactElement {\n const { project, commentFormState } = useSelector(\n (state: RootState) => state\n ).participateSlice;\n\n return (\n <>\n {project &&\n commentFormState.commentChoices &&\n project.SelectedCommentChoices.length ? (\n
\n \n \n {project.SelectedCommentChoices.map((c, idx: number) => (\n {\n const idToAddOrRemove = project.SelectedCommentChoices.find(\n (c) => c.COMMENT_CHOICE === e.target.name\n ).COMMENT_CHOICE_ID;\n if (e.target.checked) {\n // add\n setLocalState({\n ...localState,\n commentChoices: [\n ...localState.commentChoices,\n idToAddOrRemove\n ]\n });\n } else {\n // remove\n setLocalState({\n ...localState,\n commentChoices: localState.commentChoices.filter(\n (id: number) => id !== idToAddOrRemove\n )\n });\n }\n }}\n name={c.COMMENT_CHOICE}\n />\n }\n label={c.COMMENT_CHOICE}\n />\n ))}\n \n \n
\n ) : (\n <>\n \n Loading project comment form\n \n \n \n )}\n \n );\n}\n","import React, { ReactElement } from 'react';\nimport { Button, Drawer } from '@material-ui/core';\nimport { Link } from 'react-router-dom';\nimport { useDispatch, useSelector } from 'react-redux';\nimport {\n clearSelectedProject,\n fetchUnfollowProject,\n setFollowIntent,\n setHasToggledFollow,\n setIsNotificationPreferencesOpen\n} from '../../store/slices/projects';\nimport styled from 'styled-components';\nimport { Spacer } from '../../styled-elements';\nimport { styled as styledMUI } from '@material-ui/core/styles';\nimport { RootState } from '../../store';\n\nconst Container = styled.div`\n margin: 16px;\n`;\ninterface Props {\n project;\n}\nexport default function ToggleFollowBottomDrawer({\n project\n}: Props): ReactElement {\n const { hasToggledFollow, isFollowIntent, isFollowedProjects } = useSelector(\n (state: RootState) => state\n ).projectsSlice;\n const dispatch = useDispatch();\n\n const [isOpen, setIsOpen] = React.useState(hasToggledFollow);\n\n const closeDrawer = () => (event) => {\n // resource cleanup\n dispatch(setFollowIntent({ project, isFollowIntent: false }));\n dispatch(setHasToggledFollow(false));\n if (\n event.type === 'keydown' &&\n (event.key === 'Tab' || event.key === 'Shift')\n ) {\n return;\n }\n setIsOpen(false);\n };\n\n const MyButton = styledMUI(Button)({\n height: 35,\n fontSize: 14,\n marginBottom: 4\n });\n\n return (\n \n \n {isFollowIntent ? (\n \n
Project followed!
\n \n
\n Do you want to update your notification preferences for this\n project?\n
\n \n {\n dispatch(setHasToggledFollow(false));\n closeDrawer();\n }}\n fullWidth\n color=\"primary\"\n variant=\"contained\"\n >\n ACCEPT DEFAULT PREFERENCES\n \n \n {\n dispatch(clearSelectedProject());\n dispatch(setIsNotificationPreferencesOpen(true));\n dispatch(setHasToggledFollow(false));\n closeDrawer();\n }}\n fullWidth\n color=\"secondary\"\n variant=\"contained\"\n >\n UPDATE PREFERENCES\n \n \n
\n ) : (\n \n
\n If you unfollow this project, you will no longer receive project\n updates or notifications of upcoming projects.\n
\n \n
Are you sure you want to unfollow?
\n \n\n {\n dispatch(setHasToggledFollow(false));\n dispatch(\n fetchUnfollowProject({\n projectId: project.ProjectId,\n isOnFollowingOnlyView: isFollowedProjects // determines how to handle in state\n })\n );\n closeDrawer();\n }}\n fullWidth\n color=\"primary\"\n variant=\"contained\"\n >\n UNFOLLOW PROJECT\n \n \n {\n dispatch(clearSelectedProject());\n dispatch(setIsNotificationPreferencesOpen(true));\n dispatch(setHasToggledFollow(false));\n closeDrawer();\n }}\n fullWidth\n color=\"secondary\"\n variant=\"contained\"\n >\n UPDATE PREFERENCES\n \n \n
\n )}\n
\n
\n );\n}\n","import React, { ReactElement, useState } from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Drawer from '@material-ui/core/Drawer';\nimport Button from '@material-ui/core/Button';\n\nimport Radio from '@material-ui/core/Radio';\nimport RadioGroup from '@material-ui/core/RadioGroup';\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\nimport FormControl from '@material-ui/core/FormControl';\nimport {\n fetchFollowProject,\n fetchUnfollowProject\n} from '../../store/slices/projects';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { RootState } from '../../store';\nconst useStyles = makeStyles((theme) => ({\n list: {\n width: 250\n },\n fullList: {\n width: 'auto'\n },\n formControl: {\n margin: theme.spacing(2)\n }\n}));\n\ninterface Props {\n project;\n style?;\n}\n\nexport default function DeprecatedToggleFollowBottomDrawer({\n project\n}: Props): ReactElement {\n const { isFollowedProjects } = useSelector(\n (state: RootState) => state\n ).projectsSlice;\n const dispatch = useDispatch();\n const { ProjectId: projectId, IsFollowing } = project;\n\n const optionList = IsFollowing\n ? [\n {\n text: 'Unsubscribe to all project updates',\n action: 'unsubscribe'\n },\n {\n text: 'Unsubscribe project event notifications'\n },\n {\n text: 'Cancel'\n }\n ]\n : [\n {\n text: 'Subscribe to all project updates​',\n action: 'subscribe'\n },\n {\n text: 'Subscribe to project event notifications'\n },\n {\n text: 'Cancel'\n }\n ];\n const classes = useStyles();\n const [state, setState] = React.useState({\n bottom: false\n });\n\n const toggleDrawer = (side, open) => (event) => {\n if (\n event.type === 'keydown' &&\n (event.key === 'Tab' || event.key === 'Shift')\n ) {\n return;\n }\n setState({ ...state, [side]: open });\n };\n const [optionValue, setOptionValue] = useState('');\n const handleChange = (event) => {\n setOptionValue(event.target.value);\n };\n const handleSubmit = (value: string) => {\n if (value === 'Cancel') {\n setState({ bottom: false });\n return;\n } else if (value.includes('Unsubscribe')) {\n dispatch(\n fetchUnfollowProject({\n projectId,\n isOnFollowingOnlyView: isFollowedProjects\n })\n );\n } else if (value.includes('Subscribe')) {\n dispatch(\n fetchFollowProject({\n projectId,\n isEmail: true,\n isSMS: false,\n isNotify: false\n })\n );\n }\n };\n\n return (\n
\n \n {IsFollowing ? 'FOLLOWING' : 'FOLLOW'}\n \n \n \n \n {optionList.map((option, index) => (\n }\n label={option.text}\n >\n ))}\n \n \n handleSubmit(optionValue)}\n style={{ borderRadius: 0 }}\n >\n Submit\n \n \n
\n );\n}\n","import {\n Accordion,\n AccordionDetails,\n AccordionSummary,\n Button,\n Checkbox,\n CircularProgress,\n FormControlLabel,\n Typography\n} from '@material-ui/core';\nimport React, { ReactElement, useState } from 'react';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { styled as styledMUI } from '@material-ui/core/styles';\nimport { Spacer } from '../../styled-elements';\nimport {\n fetchFollowProject,\n setIsNotificationPreferencesOpen,\n setNotificationPrefsSaveOrFailMsg,\n updateSelectedProjectState\n} from '../../store/slices/projects';\nimport { RootState } from '../../store';\n\nconst MyAccordionDetails = styledMUI(AccordionDetails)({\n display: 'inline-block',\n width: '100%',\n textAlign: 'left',\n paddingTop: 0\n});\n\nconst MyAccordion = styledMUI(Accordion)({\n margin: '20px 0px'\n});\n\nexport default function ProjectNotificationsPreferences(): ReactElement {\n const {\n hasErrors,\n selectedProject,\n isNotificationPreferencesOpen,\n notificationPrefsSaveOrFailMsg,\n loading\n } = useSelector((state: RootState) => state).projectsSlice;\n const dispatch = useDispatch();\n const [state, setState] = useState({\n isEmailNotify: selectedProject.IsEmail,\n isSMSNotify: selectedProject.IsSMS,\n isNotify: selectedProject.IsNotify\n });\n const [isEdit, setIsEdit] = useState(isNotificationPreferencesOpen);\n const handleChangeCheckbox = (event) => {\n setState({ ...state, [event.target.name]: event.target.checked });\n };\n const handleSave = async () => {\n dispatch(\n updateSelectedProjectState({\n ...selectedProject,\n IsEmail: state.isEmailNotify,\n IsSMS: state.isSMSNotify,\n IsNotify: state.isNotify\n })\n );\n await dispatch(\n fetchFollowProject({\n projectId: selectedProject.ProjectId,\n isEmail: state.isEmailNotify,\n isSMS: state.isSMSNotify,\n isNotify: state.isNotify\n })\n );\n if (!hasErrors) {\n dispatch(\n setNotificationPrefsSaveOrFailMsg(\n 'Successfully updated notification settings.'\n )\n );\n } else {\n dispatch(\n setNotificationPrefsSaveOrFailMsg(\n 'Error saving notification preferences.'\n )\n );\n }\n setTimeout(() => {\n dispatch(setNotificationPrefsSaveOrFailMsg(''));\n }, 2000);\n };\n return (\n {\n dispatch(\n setIsNotificationPreferencesOpen(!isNotificationPreferencesOpen)\n );\n setIsEdit(!isEdit);\n }}\n >\n }\n aria-controls=\"additional-actions-content\"\n id=\"notification preferences\"\n >\n Notification Preferences\n \n \n {/* \n MAS-244 Hide SMS and Email Notification types from UI\n \n }\n label=\"Email\"\n />\n \n }\n label=\"Text/SMS\"\n /> */}\n \n }\n label=\"In App\"\n id=\"in app\"\n htmlFor=\"in app\"\n />\n \n
\n handleSave()}\n >\n
Save
\n \n {\n setState({\n isEmailNotify: selectedProject.IsEmail,\n isSMSNotify: selectedProject.IsSMS,\n isNotify: selectedProject.IsNotify\n });\n setIsEdit(false);\n dispatch(setIsNotificationPreferencesOpen(false));\n }}\n >\n Cancel\n \n
\n {loading && (\n <>\n \n Updating notification preferences\n \n \n \n )}\n {!!notificationPrefsSaveOrFailMsg.length &&\n (notificationPrefsSaveOrFailMsg.includes('Success') ? (\n
\n {notificationPrefsSaveOrFailMsg}\n
\n ) : (\n
\n {notificationPrefsSaveOrFailMsg}\n
\n ))}\n
\n
\n
\n \n );\n}\n","const languages = [\n { symbol: 'af', name: 'Afrikaans' },\n { symbol: 'sq', name: 'Albanian' },\n { symbol: 'ar', name: 'Arabic' },\n { symbol: 'hy', name: 'Armenian' },\n { symbol: 'az', name: 'Azerbaijani' },\n { symbol: 'eu', name: 'Basque' },\n { symbol: 'be', name: 'Belarusian' },\n { symbol: 'bn', name: 'Bengali' },\n { symbol: 'bg', name: 'Bulgarian' },\n { symbol: 'ca', name: 'Catalan' },\n { symbol: 'zh-CN', name: 'Chinese (Simplified)' },\n { symbol: 'zh-TW', name: 'Chinese (Traditional)' },\n { symbol: 'hr', name: 'Croatian' },\n { symbol: 'cs', name: 'Czech' },\n { symbol: 'da', name: 'Danish' },\n { symbol: 'nl', name: 'Dutch' },\n { symbol: 'eo', name: 'Esperanto' },\n { symbol: 'et', name: 'Estonian' },\n { symbol: 'tl', name: 'Filipino' },\n { symbol: 'fi', name: 'Finnish' },\n { symbol: 'fr', name: 'French' },\n { symbol: 'gl', name: 'Galician' },\n { symbol: 'ka', name: 'Georgian' },\n { symbol: 'de', name: 'German' },\n { symbol: 'el', name: 'Greek' },\n { symbol: 'gu', name: 'Gujarati' },\n { symbol: 'ht', name: 'Haitian Creole' },\n { symbol: 'iw', name: 'Hebrew' },\n { symbol: 'hi', name: 'Hindi' },\n { symbol: 'hu', name: 'Hungarian' },\n { symbol: 'is', name: 'Icelandic' },\n { symbol: 'id', name: 'Indonesian' },\n { symbol: 'ga', name: 'Irish' },\n { symbol: 'it', name: 'Italian' },\n { symbol: 'ja', name: 'Japanese' },\n { symbol: 'kn', name: 'Kannada' },\n { symbol: 'ko', name: 'Korean' },\n { symbol: 'la', name: 'Latin' },\n { symbol: 'lv', name: 'Latvian' },\n { symbol: 'lt', name: 'Lithuanian' },\n { symbol: 'mk', name: 'Macedonian' },\n { symbol: 'ms', name: 'Malay' },\n { symbol: 'mt', name: 'Maltese' },\n { symbol: 'no', name: 'Norwegian' },\n { symbol: 'fa', name: 'Persian' },\n { symbol: 'pl', name: 'Polish' },\n { symbol: 'pt', name: 'Portuguese' },\n { symbol: 'ro', name: 'Romanian' },\n { symbol: 'ru', name: 'Russian' },\n { symbol: 'sr', name: 'Serbian' },\n { symbol: 'sk', name: 'Slovak' },\n { symbol: 'sl', name: 'Slovenian' },\n { symbol: 'es', name: 'Spanish' },\n { symbol: 'sw', name: 'Swahili' },\n { symbol: 'sv', name: 'Swedish' },\n { symbol: 'ta', name: 'Tamil' },\n { symbol: 'te', name: 'Telugu' },\n { symbol: 'th', name: 'Thai' },\n { symbol: 'tr', name: 'Turkish' },\n { symbol: 'uk', name: 'Ukrainian' },\n { symbol: 'ur', name: 'Urdu' },\n { symbol: 'vi', name: 'Vietnamese' },\n { symbol: 'cy', name: 'Welsh' },\n { symbol: 'yi', name: 'Yiddish' }\n];\n\nexport default languages;\n","import React, { ReactElement } from 'react';\nimport { Button, Drawer } from '@material-ui/core';\nimport { useDispatch, useSelector } from 'react-redux';\nimport {\n clearEventSelectionState,\n fetchRegisterForEvent\n} from '../../store/slices/projects';\nimport styled from 'styled-components';\nimport languages from '../../lookups/languages';\nimport { styled as styledMUI } from '@material-ui/core/styles';\nimport { RootState } from '../../store';\n\nconst Container = styled.div`\n margin: 16px;\n`;\n\nexport default function LanguageSelectionBottomDrawer(): ReactElement {\n const { hasClickedMultiLanguageEvent, selectedEventDetails } = useSelector(\n (state: RootState) => state\n ).projectsSlice;\n const dispatch = useDispatch();\n const [isOpen, setIsOpen] = React.useState(hasClickedMultiLanguageEvent);\n\n const closeDrawer = () => (event) => {\n // resource cleanup\n dispatch(clearEventSelectionState());\n if (\n event.type === 'keydown' &&\n (event.key === 'Tab' || event.key === 'Shift')\n ) {\n return;\n }\n setIsOpen(false);\n };\n\n const MyButton = styledMUI(Button)({\n height: 35,\n fontSize: 14,\n marginBottom: 4\n });\n\n return (\n \n \n {\n window.open(`${selectedEventDetails.OnlineResource}`);\n const { PeId: eventId } = selectedEventDetails;\n dispatch(fetchRegisterForEvent({ eventId, attendanceCount: 1 }));\n closeDrawer();\n }}\n fullWidth\n color=\"primary\"\n variant=\"contained\"\n >\n {'Attend Virtual Meeting (English)'}\n \n {selectedEventDetails.OnlineMeetings.length &&\n selectedEventDetails.OnlineMeetings.map((e, idx) => (\n l.symbol === e.LANGUAGE).name\n })`}\n key={idx}\n onClick={() => {\n window.open(`${e.OnlineResource}`);\n const { PeId: eventId } = selectedEventDetails;\n dispatch(\n fetchRegisterForEvent({ eventId, attendanceCount: 1 })\n );\n closeDrawer();\n }}\n fullWidth\n color=\"primary\"\n variant=\"contained\"\n >\n {`Attend Virtual Meeting (${\n languages.find((l) => l.symbol === e.LANGUAGE).name\n })`}\n \n ))}\n \n \n );\n}\n","import React, { useEffect } from 'react';\nimport List from '@material-ui/core/List';\nimport { ProjectComment, FeedHeaderNav, LoadMore } from '../';\nimport { useSelector, useDispatch } from 'react-redux';\nimport {\n fetchComments,\n setHasCheckedInitialState,\n setIsMine\n} from '../../store/slices/feed';\nimport { CircularProgress } from '@material-ui/core';\nimport { setNavigationTab } from '../../store/slices/application';\nimport { AccountForBottomNavMargin, PaddedDiv } from '../../styled-elements';\nimport { RootState } from '../../store';\nimport styled from 'styled-components';\nimport { environment } from '../../environment';\nimport { Helmet } from 'react-helmet';\n\ninterface Props {\n isMine?: boolean;\n location: {\n hash: string;\n key: string;\n pathname: string;\n search: string;\n state: any;\n };\n}\n\nconst Container = styled.div`\n overflow: hidden;\n width: 100%;\n display: flex;\n justify-content: center;\n`;\n\nconst MyList = styled(List)`\n padding: 0px 8px 8px 8px;\n max-width: 100vw;\n &:not:first-child {\n padding: 8px;\n }\n`;\n\nexport default function Feed(props: Props) {\n const { isMobile } = useSelector(\n (state: RootState) => state\n ).applicationSlice;\n\n const dispatch = useDispatch();\n const {\n comments,\n loading,\n hasErrors,\n errorMsg,\n isMine,\n isFollowedComments,\n hasCheckedInitialState,\n isAllCommentsLoaded\n } = useSelector((state: RootState) => state).feedSlice;\n\n useEffect(() => {\n if (!loading && !comments && hasCheckedInitialState) {\n dispatch(\n fetchComments({\n isMine,\n isFollowedComments,\n start: 0,\n length: 20\n })\n ); // initial fetch\n }\n }, [\n comments,\n dispatch,\n hasCheckedInitialState,\n isFollowedComments,\n isMine,\n loading\n ]);\n\n useEffect(() => {\n const isMineURL = new URLSearchParams(props.location.search).get('isMine');\n if (props.location) {\n if (!hasCheckedInitialState) {\n dispatch(setHasCheckedInitialState(true));\n }\n if (!isMine && isMineURL) {\n dispatch(setIsMine(true));\n }\n }\n }, [dispatch, hasCheckedInitialState, isMine, props.location]);\n\n useEffect(() => {\n if (!hasErrors && !loading && !comments) {\n dispatch(setNavigationTab('feed'));\n }\n }, [comments, dispatch, hasErrors, loading]);\n\n return (\n <>\n \n \n \n Feed - {environment.entityName} REACH\n \n \n
\n {hasErrors && errorMsg && (\n
\n {errorMsg}\n
\n )}\n {loading && (\n <>\n \n Loading your feed of project comments\n \n \n \n )}\n {!loading && }\n {comments && comments.length > 0 && (\n \n {comments.map((comment, idx) => (\n \n ))}\n \n )}\n {!loading && comments && comments.length === 0 && (\n
\n Your feed is empty based on the current filter selection.
\n
\n
\n )}\n {/* Paginator */}\n {!loading && !isAllCommentsLoaded ? : <>}\n
\n
\n \n \n );\n}\n","import React, { ReactElement } from 'react';\nimport { Button } from '@material-ui/core/';\nimport { useSelector, useDispatch } from 'react-redux';\nimport {\n fetchComments,\n setIsAllComments,\n setIsAllCommentsLoaded,\n setIsFollowedComments,\n setIsMine\n} from '../../store/slices/feed';\nimport { useHistory, useLocation } from 'react-router-dom';\nimport { RootState } from '../../store';\nimport styled from 'styled-components';\ninterface Props {\n isMine?: boolean;\n location?: {\n hash: string;\n key: string;\n pathname: string;\n search: string;\n state: any;\n };\n}\n\nconst MyButtonChild = styled(Button)`\n border-radius: 40px;\n height: 40px;\n`;\n\nconst Container = styled.div`\n display: flex;\n justify-content: space-around;\n align-items: center;\n margin: 8px 8px 8px 0px;\n @media only screen and (min-width: 600px) {\n margin: 12px 8px 8px 0px;\n }\n max-width: 100%;\n`;\n\nexport default function FeedHeaderNav(props: Props): ReactElement {\n const { isFollowedComments, isMine, isAllComments } = useSelector(\n (state: RootState) => state\n ).feedSlice;\n const history = useHistory();\n const location = useLocation();\n\n const dispatch = useDispatch();\n const resetUrl = () => {\n const isMineURL = new URLSearchParams(location.search).get('isMine');\n if (isMineURL) {\n history.push('/feed');\n }\n };\n\n const setUrlIsMine = () => {\n history.push(`/feed?isMine=${true}`);\n };\n\n const handleClickFollowing = (): void => {\n resetUrl();\n dispatch(setIsFollowedComments(true));\n dispatch(\n fetchComments({\n isMine: false,\n isFollowedComments: true,\n start: 0,\n length: 20\n })\n );\n };\n\n const handleClickAll = (): void => {\n resetUrl();\n dispatch(setIsAllComments(true));\n dispatch(setIsAllCommentsLoaded(false));\n dispatch(\n fetchComments({\n isMine: false,\n isFollowedComments: false,\n start: 0,\n length: 20\n })\n );\n };\n\n const handleClickMine = (): void => {\n setUrlIsMine();\n dispatch(setIsMine(true));\n dispatch(\n fetchComments({\n isMine: true,\n isFollowedComments: false,\n start: 0,\n length: 20\n })\n );\n };\n return (\n \n \n All\n \n \n Mine\n \n\n \n Following\n \n {/* MAS-224 - temporarily hide items before UAT */}\n {/* \n \n More\n \n */}\n \n );\n}\n","import { createSlice, createAsyncThunk } from '@reduxjs/toolkit';\nimport axios, { AxiosRequestConfig } from 'axios';\nimport { RootState } from '..';\nimport { environment } from '../../environment';\nimport { CommentDetailsDTO, NotificationDTO } from '../../models/DTOs';\nimport { fetchLoginREACH, getREACHAuthHeaders, isTokenExpired } from './user';\ninterface NotificationsState {\n loading: boolean;\n loadingNotificationDetails: boolean;\n hasErrors: boolean;\n errorMsg: string;\n notifications: NotificationDTO[] | null;\n selectedNotificationDetails: {\n notification: any;\n commentDetails?: CommentDetailsDTO | null;\n };\n}\n\nconst initialState: NotificationsState = {\n loading: false,\n loadingNotificationDetails: false,\n hasErrors: false,\n errorMsg: '',\n notifications: null,\n selectedNotificationDetails: {\n notification: null,\n commentDetails: null\n }\n};\n\nconst notificationsSlice = createSlice({\n name: 'notifications',\n initialState,\n reducers: {\n setUpdateNotificationsComment: (state, { payload }) => {\n state.selectedNotificationDetails.commentDetails.IsVisible =\n payload.IsVisible;\n },\n setAreNotificationCommentResponsesExpanded: (state, { payload }) => {\n state.selectedNotificationDetails.commentDetails.AreResponsesExpanded =\n payload.AreResponsesExpanded;\n },\n addStakeCommentResponseToNotificationsState: (state, { payload }) => {\n state.selectedNotificationDetails.commentDetails.Responses.push(payload);\n },\n resetSelectedNotificationState: (state) => {\n state.selectedNotificationDetails =\n initialState.selectedNotificationDetails;\n state.hasErrors = initialState.hasErrors;\n state.errorMsg = initialState.errorMsg;\n },\n getNotifications: (state) => {\n state.loading = true;\n },\n getNotificationsSuccess: (state, { payload }) => {\n state.notifications = payload;\n state.loading = false;\n },\n getNotificationsFailure: (state, { payload }) => {\n state.loading = false;\n state.hasErrors = true;\n state.errorMsg = payload;\n },\n markReadNotification: (state) => {\n state.loading = true;\n },\n markReadNotificationSuccess: (state, { payload }) => {\n const notificationToModify = state.notifications.find(\n (n) => n.NotificationId === payload\n );\n if (!notificationToModify.IsNoteSeen) {\n notificationToModify.IsNoteSeen = true;\n }\n state.loading = false;\n },\n markReadNotificationFailure: (state, { payload }) => {\n state.loading = false;\n state.hasErrors = true;\n state.errorMsg = payload;\n },\n setSelectedNotification: (state, { payload }) => {\n state.selectedNotificationDetails.notification = payload;\n },\n getCommentDetails: (state) => {\n state.loadingNotificationDetails = true;\n },\n getCommentDetailsSuccess: (state, { payload }) => {\n state.selectedNotificationDetails.commentDetails = payload;\n state.loadingNotificationDetails = false;\n state.hasErrors = false;\n },\n getCommentDetailsFailure: (state, { payload }) => {\n state.loadingNotificationDetails = false;\n state.hasErrors = true;\n state.errorMsg = payload;\n }\n }\n});\nexport const {\n setUpdateNotificationsComment,\n setAreNotificationCommentResponsesExpanded,\n addStakeCommentResponseToNotificationsState,\n getNotifications,\n getNotificationsSuccess,\n getNotificationsFailure,\n setSelectedNotification,\n getCommentDetails,\n getCommentDetailsSuccess,\n getCommentDetailsFailure,\n resetSelectedNotificationState,\n markReadNotification,\n markReadNotificationSuccess,\n markReadNotificationFailure\n} = notificationsSlice.actions;\n\nexport const fetchNotifications = createAsyncThunk(\n 'notifications/fetchNotifications',\n async (input, thunkAPI: any) => {\n thunkAPI.dispatch(getNotifications());\n const hasTokenExpired = isTokenExpired(thunkAPI);\n try {\n if (hasTokenExpired) {\n return;\n }\n const config: AxiosRequestConfig = getREACHAuthHeaders();\n const { data } = await axios.get(\n `${\n environment.apiUrl\n }/Reach/GetNotifications?includeIsSeen=${true}&includeIsDeleted=${true}`,\n config\n );\n if (data) {\n const parseStringifiedResult = data.map((d) => ({\n ...d,\n Data: JSON.parse(d.Data)\n }));\n thunkAPI.dispatch(getNotificationsSuccess(parseStringifiedResult));\n } else {\n throw new Error('no result from server');\n }\n } catch (err) {\n thunkAPI.dispatch(getNotificationsFailure(err.message));\n }\n }\n);\n\nexport const fetchCommentDetails = createAsyncThunk(\n 'notifications/fetchCommentDetails',\n async (commentId: number, thunkAPI: any) => {\n const hasTokenExpired = isTokenExpired(thunkAPI);\n try {\n if (hasTokenExpired) {\n return;\n }\n const config: AxiosRequestConfig = getREACHAuthHeaders();\n thunkAPI.dispatch(getCommentDetails());\n const { data } = await axios.get(\n `${environment.apiUrl}/Reach/GetCommentDetails?commentId=${commentId}`,\n config\n );\n if (data) {\n data.AreResponsesExpanded = true;\n thunkAPI.dispatch(getCommentDetailsSuccess(data));\n } else {\n throw new Error('no result from server');\n }\n } catch (err) {\n if (err.response.data.error) {\n return thunkAPI.dispatch(\n getCommentDetailsFailure(err.response.data.error) // custom error message from API: \"Comment does not exist.\"\n );\n }\n thunkAPI.dispatch(getCommentDetailsFailure(err.message));\n }\n }\n);\n\nexport const fetchMarkReadNotification = createAsyncThunk(\n 'notifications/fetchMarkReadNotification',\n async (notificationId: string, thunkAPI: any) => {\n const hasTokenExpired = isTokenExpired(thunkAPI);\n try {\n if (hasTokenExpired) {\n return;\n }\n const config: AxiosRequestConfig = getREACHAuthHeaders();\n thunkAPI.dispatch(markReadNotification());\n const { status } = await axios.get(\n `${environment.apiUrl}/Reach/MarkNotificationRead?notificationId=${notificationId}`,\n config\n );\n if (status === 200) {\n thunkAPI.dispatch(markReadNotificationSuccess(notificationId));\n } else {\n throw new Error('no result from server');\n }\n } catch (err) {\n thunkAPI.dispatch(markReadNotificationFailure(err.message));\n }\n }\n);\n\nexport const getNotificationsState = (state: RootState) => state.notifications;\n\nexport default notificationsSlice.reducer;\n","import {\n Button,\n CircularProgress,\n makeStyles,\n Paper,\n TextField,\n Tooltip,\n withStyles\n} from '@material-ui/core';\nimport React, { ReactElement, useState } from 'react';\nimport {\n MyErrorIcon,\n MyIconButton,\n MySmsIcon,\n MyVisibilityIcon,\n MyVisibilityOffIcon\n} from '../../styled-elements/Icons';\nimport moment from 'moment';\nimport { styled as styledMUI } from '@material-ui/core/styles';\nimport styled from 'styled-components';\nimport {\n Accordion,\n AccordionDetails,\n AccordionSummary\n} from '@material-ui/core';\nimport SanitizedHTML from 'react-sanitized-html';\nimport sanitizeHtml from 'sanitize-html';\nimport ReplyIcon from '@material-ui/icons/Reply';\nimport { environment } from '../../environment';\nimport {\n fetchPostStakeCommentReponse,\n fetchUpdateComment\n} from '../../store/slices/participate';\nimport { useDispatch, useSelector } from 'react-redux';\nimport {\n addStakeCommentResponseToNotificationsState,\n setAreNotificationCommentResponsesExpanded,\n setUpdateNotificationsComment\n} from '../../store/slices/notifications';\nimport {\n addStakeCommentResponseToFeedState,\n setAreFeedCommentResponsesExpanded,\n setUpdateFeedComment\n} from '../../store/slices/feed';\nimport {\n addStakeCommentResponseToProjectsState,\n setAreProjectCommentResponsesExpanded,\n setUpdateProjectDetailsComment\n} from '../../store/slices/projects';\nimport { CommentDetailsDTO } from '../../models/DTOs';\nimport { Link } from 'react-router-dom';\nimport { RootState } from '../../store';\nimport DOMPurify from 'dompurify';\n\nconst ShowTooltipWhenDisabledButton = styledMUI(Button)({\n '&.Mui-disabled': {\n pointerEvents: 'auto'\n },\n '&.MuiButton-root': {\n padding: 0\n }\n});\n\nconst MyAccordionDetails = styledMUI(AccordionDetails)({\n display: 'inline-block',\n textAlign: 'left',\n padding: 0,\n width: '100%'\n});\n\nconst MyAccordion = styledMUI(Accordion)({\n width: '100%',\n margin: '0px !important',\n padding: '0px',\n boxShadow: 'none'\n});\n\nconst OuterContainer = styled.div`\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n justify-content: space-between;\n padding: 16px;\n`;\n\nconst SimpleFlexContainer = styled.div`\n display: flex;\n`;\n\nconst CenteredFlexContainer = styled.div`\n display: flex;\n align-items: center;\n`;\n\nconst FlexContainer = styled.div`\n display: flex;\n justify-content: space-between;\n width: 100%;\n`;\n\nconst ProjectTitle = styled.div`\n text-align: left;\n font-size: 0.875rem;\n margin-bottom: 4px;\n`;\n\nconst MyH2 = styled.h2`\n margin: 0px;\n font-weight: normal;\n font-size: inherit;\n`;\n\nconst StakeNameAndDate = styled.h3`\n font-size: 0.875rem;\n font-style: oblique;\n margin-top: 0px;\n margin-bottom: 4px;\n font-weight: normal;\n`;\nconst StakeCommentDiv = styled.div`\n overflow-wrap: break-word;\n width: 100%:\n padding-bottom: 8px;\n text-align: left;\n font-size: 1rem;\n`;\n\nconst IconsContainer = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n > * {\n margin-left: 6px;\n }\n`;\n\nconst MyPaper = styled(Paper)`\n @media only screen and (min-width: 720px) {\n width: 575px;\n }\n margin: 8px auto;\n position: relative;\n overflow: hidden;\n`;\n\nconst ButtonWithTooltip = ({ tooltipText, disabled, onClick, ...other }) => {\n const adjustedButtonProps = {\n disabled: disabled,\n component: disabled ? 'div' : undefined,\n onClick: disabled ? undefined : onClick\n };\n return (\n \n \n \n );\n};\nconst IconLeftAccordionSummary = withStyles({\n expandIcon: {\n order: -1\n }\n})(AccordionSummary);\n// this component is used both as the comments in the /Feed list and in the Project Details view\nconst useStyles = makeStyles({\n hideBorder: {\n '&.MuiAccordion-root:before': {\n backgroundColor: 'white'\n }\n }\n});\ninterface Props {\n comment: CommentDetailsDTO;\n}\n\nexport default function ProjectComment({ comment }: Props): ReactElement {\n const {\n ProjectId,\n ProjectDesc,\n StakeComment,\n StakeCommentId,\n StakeCommentDate,\n StakeholderName,\n EntityName,\n IsVisible,\n Topics,\n AreResponsesExpanded,\n IsMine,\n ProjectNr\n } = comment;\n\n const dispatch = useDispatch();\n const classes = useStyles();\n const { loading, hasErrors } = useSelector(\n (state: RootState) => state\n ).participateSlice;\n const { comments: feedSliceComments } = useSelector(\n (state: RootState) => state\n ).feedSlice;\n const { selectedProjectComments } = useSelector(\n (state: RootState) => state\n ).projectsSlice;\n const { selectedNotificationDetails } = useSelector(\n (state: RootState) => state\n ).notificationsSlice;\n const [stakeCommentResponse, setStakeCommentResponse] = useState('');\n const [isThumbsUp, setIsThumbsUp] = useState(false);\n const handleToggleIsResponsesExpanded = () => {\n const payload = {\n StakeCommentId,\n AreResponsesExpanded: !AreResponsesExpanded\n };\n // Need below logic because the areResponsesExpanded state is re-used for ProjectComment component in 3 different Redux slices and UIs\n if (\n selectedNotificationDetails.commentDetails &&\n selectedNotificationDetails.commentDetails.StakeCommentId ===\n payload.StakeCommentId\n ) {\n // if comments in notifications state, update expanded state for that particular comment\n dispatch(setAreNotificationCommentResponsesExpanded(payload));\n }\n // if comments in feed state, update expanded state for that particular comment\n if (\n feedSliceComments &&\n feedSliceComments.length &&\n feedSliceComments.some((c) => c.StakeCommentId === payload.StakeCommentId)\n ) {\n dispatch(setAreFeedCommentResponsesExpanded(payload));\n }\n if (\n selectedProjectComments &&\n selectedProjectComments.length &&\n selectedProjectComments.some(\n (c) => c.StakeCommentId === payload.StakeCommentId\n )\n ) {\n // if comments in projects state, update expanded state for that particular comment\n dispatch(setAreProjectCommentResponsesExpanded(payload));\n }\n };\n\n const getResponderType = (responderType: number) => {\n // 1 is DOT or other entity, 2 is stakeholder\n if (responderType === 1) {\n return `(${EntityName})`;\n } else if (responderType === 2) {\n return '';\n } else {\n throw new Error('unhandled responderType');\n }\n };\n\n const submitCommentResponse = async () => {\n await dispatch(\n fetchPostStakeCommentReponse({\n commentId: StakeCommentId,\n response: stakeCommentResponse\n })\n );\n if (!hasErrors) {\n const payload = {\n CommentResponseId: null,\n LastUpdatedDate: new Date().toString(),\n LastUpdatedPersonId: null,\n RespondedBy: null,\n ResponderName: null,\n Response: stakeCommentResponse,\n ResponseDate: new Date().toString(),\n ResponseSentDate: null,\n ResponseType: 2,\n StakeCommentId\n };\n if (selectedNotificationDetails.commentDetails) {\n // if comments in notifications state, add to responseses state for that particular comment\n dispatch(addStakeCommentResponseToNotificationsState(payload));\n }\n // if comments in feed state, add to responseses state for that particular comment\n if (feedSliceComments && feedSliceComments.length) {\n dispatch(addStakeCommentResponseToFeedState(payload));\n }\n // if comments in projects state (selected project), add to responses state for that particular comment\n if (selectedProjectComments && selectedProjectComments.length) {\n dispatch(addStakeCommentResponseToProjectsState(payload));\n }\n }\n };\n\n const handleIsThumbsUp = () => {\n /* not currently used because of MAS-224 - temporarily hide items before UAT */\n setIsThumbsUp(!isThumbsUp);\n };\n\n const handleToggleCommentVisibility = async () => {\n const payload = { ...comment, IsVisible: !IsVisible };\n await dispatch(fetchUpdateComment(payload));\n if (!hasErrors) {\n // need to update store in all places comments are used\n if (selectedNotificationDetails.commentDetails) {\n // if comments in notifications state, update state for that particular comment\n dispatch(setUpdateNotificationsComment(payload));\n }\n // if comments in feed state, update state for that particular comment\n if (feedSliceComments && feedSliceComments.length) {\n dispatch(setUpdateFeedComment(payload));\n }\n if (selectedProjectComments && selectedProjectComments.length) {\n // if comments in projects state, update state for that particular comment\n dispatch(setUpdateProjectDetailsComment(payload));\n }\n }\n };\n\n const getEntityProjectTitle = () => {\n switch (environment.entityName) {\n case 'Iowa DOT':\n return ProjectDesc;\n default:\n return ProjectNr;\n }\n };\n\n return (\n \n {/*\n Prototype used to conditionally show a project icon in comments -> need a DB field for this to be dynamic.\n \n \n \n */}\n \n {!IsVisible && (\n
\n \n \n This comment is only visible by you. Toggle the visibility icon to\n let others view your comment.\n
\n \n )}\n \n \n \n {getEntityProjectTitle()}\n \n \n \n {/* MAS-224 - temporarily hide items before UAT */}\n {/* \n */}\n {IsMine && (\n \n {IsVisible ? : }\n \n )}\n \n \n \n {`${StakeholderName} Wrote on ${moment(StakeCommentDate).format(\n 'MMMM Do YYYY'\n )}:`}\n \n {StakeComment}\n {Topics && !!Topics.length && (\n \n \n Comment Topics: \n \n {Topics.map(\n (t: { CommentTopicId: number; CommentTopic: string }, idx) =>\n `${t.CommentTopic}${idx !== Topics.length - 1 ? ', ' : ' '}`\n )}\n \n \n \n )}\n \n \n \n \n \n
\n {comment.ResponseRequestTypeId === 4\n ? `${\n comment.StakeholderName.split(' ')[0]\n } did not request a response`\n : `${\n comment.Responses && comment.Responses.length > 0\n ? comment.Responses.length\n : 0\n } ${\n comment.Responses.length === 1\n ? 'Response'\n : 'Responses'\n }`}\n
\n
\n \n
\n {/* MAS-224 - temporarily hide items before UAT */}\n {/* \n \n */}\n
\n \n \n \n
\n {!!comment.Responses.length &&\n comment.Responses.map((r, idx) => (\n \n \n {r.ResponseType === 1 && (\n \n )}\n \n {`${r.ResponderName ? r.ResponderName : ''} ${\n !r.LastUpdatedPersonId ? StakeholderName : ''\n }${getResponderType(r.ResponseType)} on ${moment(\n r.ResponseDate\n ).format('MMMM Do YYYY')}:`}\n \n \n \n \n \n \n ))}\n {IsMine && (\n \n \n \n \n setStakeCommentResponse(\n DOMPurify.sanitize(e.target.value)\n )\n }\n maxRows={8}\n multiline\n fullWidth\n variant=\"outlined\"\n placeholder=\"Continue the discussion\"\n />\n \n {stakeCommentResponse.length >= 4 && (\n \n Submit Reply\n \n )}\n \n )}\n {loading && (\n <>\n \n Loading project comment\n \n \n \n )}\n
\n
\n \n
\n
\n );\n}\n","import React, { ReactElement } from 'react';\nimport { SubHeaderGoBack } from '..';\nimport { makeStyles, createStyles, Theme } from '@material-ui/core/styles';\nimport Grid from '@material-ui/core/Grid';\nimport Paper from '@material-ui/core/Paper';\nimport Typography from '@material-ui/core/Typography';\nimport {\n MyBlueHomeIcon,\n MyBlueCalendarIcon,\n MyBlueDashboardIcon,\n MyBlueSmsIcon\n} from '../../styled-elements';\nimport { PlusButtonBottomDrawer } from '..';\nimport { Link } from 'react-router-dom';\nimport { RootState } from '../../store';\nimport { useSelector } from 'react-redux';\nimport { Helmet } from 'react-helmet';\nimport { environment } from '../../environment';\n\ninterface Props {}\n\nconst participateOptionsList = [\n {\n icon: () => ,\n text: 'My Participation',\n link: '/participate'\n },\n {\n icon: () => ,\n text: 'Find a Public Meeting to Attend',\n link: '/participate'\n },\n {\n icon: () => ,\n text: 'Find an Online Public Meeting to Attend',\n link: '/participate'\n },\n {\n icon: () => ,\n text: 'Comment on a Project',\n link: '/participate/comment'\n }\n];\n\nexport default function Participate(): ReactElement {\n const useStyles = makeStyles((theme: Theme) =>\n createStyles({\n root: {\n overflow: 'hidden',\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'space-between'\n },\n paper: {\n width: !isMobile && 575,\n margin: `${theme.spacing(1)}px auto`,\n padding: theme.spacing(2)\n },\n plusButton: {\n display: 'flex',\n justifyContent: 'center',\n flexDirection: 'row-reverse'\n }\n })\n );\n const classes = useStyles({});\n\n const { isMobile } = useSelector(\n (state: RootState) => state\n ).applicationSlice;\n return (\n \n \n \n Participate - {environment.entityName} REACH\n \n \n
\n
\n \n {participateOptionsList.map((option, idx) => (\n \n \n \n {option.icon()}\n \n \n {option.text}\n \n \n \n \n \n ))}\n
\n
\n
\n \n
\n
\n );\n}\n","import { createAsyncThunk, createSlice } from '@reduxjs/toolkit';\nimport axios, { AxiosRequestConfig } from 'axios';\nimport { RootState } from '..';\nimport { environment } from '../../environment';\nimport { fetchLoginREACH, getREACHAuthHeaders, isTokenExpired } from './user';\n\ninterface DashComment {\n ProjectId: number;\n ProjectNr: string;\n StakeComment: string;\n StakeCommentDate: string;\n StakeCommentId: number;\n StakeholderName: string;\n CommentLat: number;\n CommentLon: number;\n StakeholderSupportId: number;\n}\ninterface DashboardState {\n loading: boolean;\n hasErrors: boolean;\n errorMsg: string;\n dashComments: DashComment[] | null;\n lookups: {\n stakeholderSupport: any[];\n };\n}\n\nconst initialState: DashboardState = {\n loading: false,\n hasErrors: false,\n errorMsg: '',\n dashComments: null,\n lookups: {\n stakeholderSupport: []\n }\n};\n\nconst dashboardlice = createSlice({\n name: 'dashboard',\n initialState,\n reducers: {\n clearDashboardState: (state) => {\n state.dashComments = initialState.dashComments;\n },\n getLUStakeSupport: (state) => {\n state.loading = true;\n },\n getLUStakeSupportSuccess: (state, { payload }) => {\n state.loading = false;\n state.hasErrors = false;\n state.lookups.stakeholderSupport = payload;\n },\n getLUStakeSupportFailure: (state, { payload }) => {\n state.loading = false;\n state.hasErrors = true;\n state.errorMsg = payload;\n },\n getDashComments: (state) => {\n state.loading = true;\n },\n getDashCommentsSuccess: (state, { payload }) => {\n state.loading = false;\n state.hasErrors = false;\n state.dashComments = payload;\n },\n getDashCommentsFailure: (state, { payload }) => {\n state.loading = false;\n state.hasErrors = true;\n state.errorMsg = payload;\n }\n }\n});\nexport const {\n clearDashboardState,\n getLUStakeSupport,\n getLUStakeSupportSuccess,\n getLUStakeSupportFailure,\n getDashComments,\n getDashCommentsSuccess,\n getDashCommentsFailure\n} = dashboardlice.actions;\n\nexport const getDashboardState = (state: RootState) => state.dashboard;\n\nexport const fetchLUStakeSupport = createAsyncThunk(\n 'dashboard/fetchLUStakeSupport',\n async (input, thunkAPI: any) => {\n const hasTokenExpired = isTokenExpired(thunkAPI);\n try {\n if (hasTokenExpired) {\n return;\n }\n const config: AxiosRequestConfig = getREACHAuthHeaders();\n thunkAPI.dispatch(getLUStakeSupport());\n const { data } = await axios.get(\n `${environment.apiUrl}/lu_stakeholder_support/get`,\n config\n );\n if (data) {\n thunkAPI.dispatch(getLUStakeSupportSuccess(data));\n } else {\n throw new Error('no result from server');\n }\n } catch (err) {\n thunkAPI.dispatch(getLUStakeSupportFailure(err.message));\n }\n }\n);\n\nexport const fetchDashComments = createAsyncThunk(\n 'dashboard/fetchDashComments',\n async (input, thunkAPI: any) => {\n const hasTokenExpired = isTokenExpired(thunkAPI);\n try {\n if (hasTokenExpired) {\n return;\n }\n const config: AxiosRequestConfig = getREACHAuthHeaders();\n thunkAPI.dispatch(getDashComments());\n const { data } = await axios.get(\n `${environment.apiUrl}/Reach/GetDashboard?userOnly=true`,\n config\n );\n if (data) {\n thunkAPI.dispatch(getDashCommentsSuccess(data));\n } else {\n throw new Error('no result from server');\n }\n } catch (err) {\n thunkAPI.dispatch(getDashCommentsFailure(err.message));\n }\n }\n);\n\nexport default dashboardlice.reducer;\n","import React, { useCallback, useEffect, useState } from 'react';\nimport { DashboardMap, DashboardTable } from '..';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { setNavigationTab } from '../../store/slices/application';\nimport {\n clearDashboardState,\n fetchDashComments,\n fetchLUStakeSupport\n} from '../../store/slices/dashboard';\nimport { Button, CircularProgress } from '@material-ui/core';\nimport { use100vh } from 'react-div-100vh';\nimport { useHistory } from 'react-router-dom';\nimport { RootState } from '../../store';\nimport { environment } from '../../environment';\nimport { Helmet } from 'react-helmet';\n//\nconst DashboardContainer: React.FC = () => {\n const { loading, hasErrors, dashComments, lookups } = useSelector(\n (state: RootState) => state\n ).dashboardSlice;\n const [isMapLoading, setIsMapLoading] = useState(true);\n const [mapOrTable, setMapOrTable] = useState('map');\n const { currentPath } = useSelector(\n (state: RootState) => state\n ).applicationSlice;\n const dispatch = useDispatch();\n const height100vh = use100vh();\n const history = useHistory();\n\n const subscribeToHistory = useCallback(() => {\n const unlisten = history.listen((loc, action) => {\n if (action) {\n if (loc.pathname !== currentPath) {\n dispatch(clearDashboardState());\n unlisten(); // no longer listen after clearing dashboard state\n }\n }\n });\n }, [currentPath, dispatch, history]);\n\n useEffect(() => {\n if (!hasErrors && !loading && !lookups.stakeholderSupport.length) {\n // runs first as map favorability depends on it\n dispatch(fetchLUStakeSupport());\n }\n }, [dispatch, hasErrors, loading, lookups.stakeholderSupport.length]);\n\n useEffect(() => {\n if (\n !hasErrors &&\n !loading &&\n dashComments === null &&\n lookups.stakeholderSupport.length\n ) {\n subscribeToHistory();\n dispatch(setNavigationTab('dashboard'));\n dispatch(fetchDashComments());\n }\n }, [\n dashComments,\n dispatch,\n hasErrors,\n loading,\n lookups.stakeholderSupport,\n subscribeToHistory\n ]);\n const toggleMapOrTable = (state: string) => {\n if (state === 'map') {\n setMapOrTable('table');\n }\n if (state === 'table') {\n setMapOrTable('map');\n }\n };\n return (\n \n \n \n Dashboard - {environment.entityName} REACH\n \n \n {/* */}\n {/* MAS-181 - ticket to hide DashboardStats */}\n {/* subtract header (56px), footer (75px) and DashboardStats (71px) */}\n \n {dashComments && lookups.stakeholderSupport.length ? (\n <>\n {!isMapLoading && (\n {\n if (mapOrTable === 'table') {\n setIsMapLoading(true);\n }\n toggleMapOrTable(mapOrTable);\n }}\n variant=\"contained\"\n color=\"primary\"\n style={{\n zIndex: 1,\n position: mapOrTable === 'map' ? 'absolute' : 'static',\n margin: mapOrTable === 'table' ? '8px 0px 8px 0px' : '0px',\n top: 58,\n right: 16\n }}\n >\n {mapOrTable === 'map' && 'View Map Data in Table'}\n {mapOrTable === 'table' && 'Return to Map'}\n \n )}\n {mapOrTable === 'map' && (\n \n )}\n {mapOrTable === 'table' && }\n \n ) : (\n <>\n \n Loading dashboard map\n \n \n \n )}\n \n \n );\n};\n\nexport default DashboardContainer;\n","import React, { ReactElement, useEffect, useRef, useState } from 'react';\nimport { loadModules } from 'esri-loader';\nimport styled from 'styled-components';\nimport { useSelector } from 'react-redux';\nimport { RootState } from '../../store';\nimport { environment } from '../../environment';\nimport '../../css/ESRIMap.css';\nimport { Button } from '@material-ui/core';\nconst MapView = styled.div`\n height: 100%;\n width: 100%;\n`;\n\nconst PALETTE = {\n Green: [76, 175, 80, 0.8],\n LightGreen: [205, 220, 57, 0.8],\n Yellow: [255, 193, 7, 0.8],\n Orange: [255, 120, 17, 0.8],\n Red: [244, 67, 54, 0.8],\n Unknown: [96, 105, 155, 0.5]\n};\n\nconst COMMENTS_RENDERER = {\n type: 'unique-value',\n field: 'StakeSupportId',\n // visualVariables: [SUPPORT_COLOR_DEF], inserts range slider graphic but it interferes with legend color\n uniqueValueInfos: [\n {\n value: 1,\n label: 'In Favor',\n symbol: {\n type: 'simple-marker',\n size: 20,\n color: PALETTE.Green,\n style: 'circle'\n }\n },\n {\n value: 2,\n label: 'Leaning in Favor',\n symbol: {\n type: 'simple-marker',\n size: 20,\n color: PALETTE.LightGreen,\n style: 'circle'\n }\n },\n {\n value: 3,\n label: 'Neutral',\n symbol: {\n type: 'simple-marker',\n size: 20,\n color: PALETTE.Yellow,\n style: 'circle'\n }\n },\n {\n value: 4,\n label: 'Less in Favor',\n symbol: {\n type: 'simple-marker',\n size: 20,\n color: PALETTE.Orange,\n style: 'circle'\n }\n },\n {\n value: 5,\n label: 'Not in Favor',\n symbol: {\n type: 'simple-marker',\n size: 20,\n color: PALETTE.Red,\n style: 'circle'\n }\n }\n ]\n};\n\ninterface Props {\n isMapLoading: boolean;\n setIsMapLoading: Function;\n}\n\nexport default (function DashboardMap({\n isMapLoading,\n setIsMapLoading\n}: Props): ReactElement {\n const [isLegendExpanded, setIsLegendExpanded] = useState(false);\n const viewRef = useRef(null);\n const legendRef = useRef(null);\n const { dashComments, lookups } = useSelector(\n (state: RootState) => state\n ).dashboardSlice;\n const { isMobile } = useSelector(\n (state: RootState) => state\n ).applicationSlice;\n\n const [isInfoPanelVisible, setIsInfoPanelVisible] = useState(true);\n\n const toggleInfoPanel = () => {\n setIsInfoPanelVisible((prevState) => !prevState);\n };\n\n const mapRef = useRef() as React.MutableRefObject;\n useEffect(() => {\n const startUp = async () => {\n const [\n MapView,\n FeatureLayer,\n Graphic,\n PopupTemplate,\n Locate,\n Search,\n SpatialReference,\n WebMap,\n Legend\n ] = await loadModules(\n [\n 'esri/views/MapView',\n 'esri/layers/FeatureLayer',\n 'esri/Graphic',\n 'esri/PopupTemplate',\n 'esri/widgets/Locate',\n 'esri/widgets/Search',\n 'esri/geometry/SpatialReference',\n 'esri/WebMap',\n 'esri/widgets/Legend'\n ],\n { css: true }\n );\n const map = await new WebMap({\n portalItem: {\n id: '17e9aac323c64cd19673602918062068'\n },\n basemap: 'topo-vector'\n });\n // const map = new ArcGISMap({\n // basemap: 'topo-vector'\n // });\n\n let commentsLayer;\n if (dashComments && dashComments.length > 0) {\n const commentGraphics = dashComments.map(\n (x) =>\n new Graphic({\n attributes: {\n OBJECTID: x.StakeCommentId,\n StakeComment: x.StakeComment,\n StakeCommentId: x.StakeCommentId,\n StakeSupportId: x.StakeholderSupportId,\n StakeSupport: lookups.stakeholderSupport.find(\n (entry) =>\n entry.STAKEHOLDER_SUPPORT_ID === x.StakeholderSupportId\n ).STAKEHOLDER_SUPPORT,\n ProjectDesc: x.ProjectDesc\n },\n geometry: {\n type: 'point',\n x: x.CommentLon,\n y: x.CommentLat,\n spatialReference: new SpatialReference({ wkid: 102100 })\n }\n })\n );\n const commentPopupTemplate = new PopupTemplate({\n content: `\n
\n
\n Support Level: {StakeSupport}\n
\n

{StakeComment}

\n
\n `,\n title: '
{ProjectDesc}
'\n });\n commentsLayer = new FeatureLayer({\n source: commentGraphics,\n objectIdField: 'OBJECTID',\n title: 'Project Comments',\n fields: [\n {\n name: 'OBJECTID',\n type: 'oid'\n },\n {\n name: 'StakeCommentId',\n alias: 'Stake Comment Id',\n type: 'integer'\n },\n {\n name: 'StakeComment',\n alias: 'Comment',\n type: 'string'\n },\n {\n name: 'StakeSupport',\n alias: 'Support Level',\n type: 'string'\n },\n {\n name: 'StakeSupportId',\n alias: 'Support Level',\n type: 'integer'\n },\n {\n name: 'ProjectDesc',\n label: 'Project Name',\n type: 'string'\n }\n ],\n geometryType: 'point',\n popupTemplate: commentPopupTemplate,\n renderer: COMMENTS_RENDERER\n });\n await map.load();\n map.add(commentsLayer);\n }\n\n // load the map view at the ref's DOM node\n const view = new MapView({\n container: mapRef.current,\n map: map,\n center: environment.dashboardMapCenterCoords.split(','),\n zoom: isMobile ? 7.5 : 8.5\n });\n viewRef.current = view;\n\n const locateWidget = new Locate({\n view: view,\n useHeadingEnabled: false,\n goToOverride: function (view, options) {\n options.target.scale = 1500;\n return view.goTo(options.target);\n }\n });\n\n /*\n // if we wanted real-time tracking as you move\n const trackWidget = new Track({\n view: view,\n graphic: new Graphic({\n symbol: {\n type: 'simple-marker',\n size: '12px',\n color: 'green',\n outline: {\n color: '#efefef',\n width: '1.5px'\n }\n }\n }),\n useHeadingEnabled: false\n });\n */\n\n var searchWidget = new Search({\n view: view\n });\n view.ui.add(locateWidget, 'top-left');\n\n // Info Button\n const infoButton = document.createElement('div');\n infoButton.className =\n 'esri-widget--button esri-icon-description esri-interactive';\n infoButton.title = 'Info';\n infoButton.onclick = toggleInfoPanel;\n view.ui.add(infoButton, 'top-left');\n\n // Old stuff\n // view.ui.add(trackWidget, 'top-left'); if we wanted real-time tracking as you move\n view.ui.add(searchWidget, {\n position: 'top-right'\n });\n\n view.on('click', function (evt) {\n // alert('TODO - show popup on click');\n });\n\n const popup = view.popup;\n view.when(function () {\n // expand popup by default\n popup.watch('collapsed', function (value) {\n popup.collapsed = false;\n });\n setIsLegendExpanded(true);\n const legend = new Legend({\n view\n });\n legendRef.current = legend;\n view.ui.add(legend, 'bottom-left');\n });\n view.watch('updating', function (mapLoading: boolean) {\n if (mapLoading !== isMapLoading) {\n mapLoading ? setIsMapLoading(true) : setIsMapLoading(false);\n }\n });\n return () => {\n if (view) {\n // destroy the map view\n view.container = null;\n }\n };\n };\n startUp();\n }, [dashComments, lookups.stakeholderSupport]);\n\n return (\n \n {!isMapLoading && (\n <>\n {isLegendExpanded ? (\n {\n viewRef.current.ui.remove(legendRef.current);\n setIsLegendExpanded(false);\n }}\n variant=\"contained\"\n color=\"primary\"\n style={{ position: 'absolute', bottom: 40, left: 216 }}\n >\n Collapse\n \n ) : (\n {\n viewRef.current.ui.add(legendRef.current, 'bottom-left');\n setIsLegendExpanded(true);\n }}\n variant=\"contained\"\n color=\"primary\"\n style={{ position: 'absolute', bottom: 40, left: 15 }}\n >\n Expand Legend\n \n )}\n {isInfoPanelVisible ? (\n \n

\n Welcome to the Public Involvement Dashboard. This Dashboard\n shows you comments for the project(s) that you are following.\n

\n \n ) : (\n <>\n )}\n \n )}\n
\n );\n});\n","import React, { ReactElement } from 'react';\nimport { useSelector } from 'react-redux';\nimport { RootState } from '../../store';\nimport Table from '@material-ui/core/Table';\nimport TableBody from '@material-ui/core/TableBody';\nimport TableCell from '@material-ui/core/TableCell';\nimport TableContainer from '@material-ui/core/TableContainer';\nimport TableHead from '@material-ui/core/TableHead';\nimport TableRow from '@material-ui/core/TableRow';\nimport Paper from '@material-ui/core/Paper';\nimport { AccountForBottomNavMargin } from '../../styled-elements';\nimport styled from 'styled-components';\n\nconst Container = styled.div`\n padding: 0px 8px 83px 8px;\n`;\n\nexport default function DashboardTable(): ReactElement {\n const { dashComments, lookups } = useSelector(\n (state: RootState) => state\n ).dashboardSlice;\n\n return (\n \n \n \n \n \n Project Name\n Project ID\n Stakeholder Comment\n Stakeholder Comment Date\n Stakeholder Name\n Stakeholder Support Level\n \n \n \n {dashComments?.map((row, idx) => (\n \n \n {row.ProjectDesc}\n \n {row.ProjectId}\n {row.StakeComment}\n {row.StakeCommentDate}\n {row.StakeholderName}\n \n {\n lookups.stakeholderSupport.find(\n (entry) =>\n entry.STAKEHOLDER_SUPPORT_ID ===\n row.StakeholderSupportId\n ).STAKEHOLDER_SUPPORT\n }\n \n \n ))}\n \n
\n \n
\n
\n );\n}\n","import React, { useCallback, useEffect } from 'react';\nimport { createStyles, Theme, makeStyles } from '@material-ui/core/styles';\nimport List from '@material-ui/core/List';\nimport { SelectedNotificationDetails, SubHeaderGoBack } from '..';\nimport { useSelector, useDispatch } from 'react-redux';\nimport {\n fetchNotifications,\n resetSelectedNotificationState\n} from '../../store/slices/notifications';\nimport { useHistory } from 'react-router-dom';\nimport { setNavigationTab } from '../../store/slices/application';\nimport { CircularProgress } from '@material-ui/core';\nimport { Notification } from '../';\nimport styled from 'styled-components';\nimport { ArrowBack } from '@material-ui/icons';\nimport { RootState } from '../../store';\nimport { environment } from '../../environment';\nimport { Helmet } from 'react-helmet';\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n root: {\n overflow: 'hidden',\n display: 'flex',\n justifyContent: 'center',\n marginBottom: 100\n },\n list: {\n paddingTop: 0\n }\n })\n);\n\nconst MyArrowBack = styled(ArrowBack)`\n color: white;\n position: absolute;\n left: 0;\n margin-left: 16px;\n margin-top: 4px;\n`;\n\nconst NoNotificationsMsg = styled.div`\n padding: 16px;\n`;\n\nexport default function NotificationsContainer(props) {\n const dispatch = useDispatch();\n const history = useHistory();\n const {\n loading,\n hasErrors,\n errorMsg,\n notifications,\n selectedNotificationDetails\n } = useSelector((state: RootState) => state).notificationsSlice;\n\n const subscribeToHistory = useCallback(() => {\n const unlisten = history.listen((loc, action) => {\n if (action) {\n dispatch(resetSelectedNotificationState());\n }\n });\n }, [dispatch, history]);\n\n useEffect(() => {\n if (!hasErrors && !loading) {\n // runs first as map favorability depends on it\n subscribeToHistory();\n dispatch(setNavigationTab('notifications'));\n }\n }, [dispatch, hasErrors, loading, notifications, subscribeToHistory]);\n\n useEffect(() => {\n dispatch(fetchNotifications());\n }, [dispatch]);\n const classes = useStyles({});\n return (\n <>\n \n \n Notifications - {environment.entityName} REACH\n \n \n {/* {selectedNotificationDetails.notification && (\n
\n \n
\n )} */}\n \n {!notifications ||\n (notifications && !notifications.length && (\n \n You don't have any notifications yet.\n
\n
\n You will receive notifications when your project comments are\n replied to as long as the notification preference is checked for\n that project.\n
\n ))}\n {notifications && (\n
\n \n {selectedNotificationDetails.notification ? (\n \n ) : (\n notifications.map((n, idx: number) => (\n \n ))\n )}\n \n
\n )}\n {loading && (\n <>\n \n Loading your notifications\n \n \n \n )}\n {hasErrors && errorMsg && (\n
\n {errorMsg}\n
\n )}\n \n );\n}\n","import {\n Button,\n ListItem,\n ListItemAvatar,\n Paper,\n SvgIcon,\n Typography\n} from '@material-ui/core';\nimport React, { ReactElement } from 'react';\nimport { NotificationDTO } from '../../models/DTOs';\nimport { styled as styledMUI } from '@material-ui/core/styles';\nimport QuestionAnswerIcon from '@material-ui/icons/QuestionAnswer';\nimport moment from 'moment';\nimport { useDispatch } from 'react-redux';\nimport {\n fetchCommentDetails,\n fetchMarkReadNotification,\n setSelectedNotification\n} from '../../store/slices/notifications';\nimport MarkunreadMailboxIcon from '@material-ui/icons/MarkunreadMailbox';\nimport DoneIcon from '@material-ui/icons/Done';\nimport styled from 'styled-components';\ninterface Props {\n notification: NotificationDTO;\n data: any; // contains IDs for further action ie: CommentId, ResponseId, stakeId\n}\n\nconst MyButton = styledMUI(Button)({\n display: 'block',\n textTransform: 'none',\n width: '100%'\n});\n\nconst MyPaper = styled(Paper)`\n max-width: calc(100% - 16px);\n @media only screen and (min-width: 720px) {\n width: 575px;\n }\n margin: 8px auto;\n`;\n\nexport default function Notification({\n notification,\n data\n}: Props): ReactElement {\n const dispatch = useDispatch();\n const { NotificationType, Message, CreatedDate, NotificationId, IsNoteSeen } =\n notification;\n const handleClick = () => {\n dispatch(setSelectedNotification(notification));\n switch (NotificationType) {\n case 1:\n // reason for syntax below explained https://eslint.org/docs/rules/no-prototype-builtins\n if (Object.prototype.hasOwnProperty.call(data, 'CommentId')) {\n dispatch(fetchMarkReadNotification(NotificationId));\n dispatch(fetchCommentDetails(data.CommentId));\n }\n break;\n default:\n throw new Error('unhandled NotificationType case');\n }\n };\n\n return (\n \n \n \n \n \n \n
\n \n {Message}\n \n
\n \n {' '}\n {moment(CreatedDate).fromNow()}\n \n
\n \n
\n \n
\n \n {IsNoteSeen ? 'Read' : 'Unread'}\n \n \n \n
\n
\n );\n}\n","import { CircularProgress } from '@material-ui/core';\nimport React, { ReactElement } from 'react';\nimport { useSelector } from 'react-redux';\nimport { Link } from 'react-router-dom';\nimport { ProjectComment } from '..';\nimport { RootState } from '../../store';\nimport { Spacer } from '../../styled-elements';\n\nexport default function SelectedNotificationDetails(): ReactElement {\n const {\n selectedNotificationDetails,\n loading,\n loadingNotificationDetails\n } = useSelector((state: RootState) => state).notificationsSlice;\n const { NotificationType } = selectedNotificationDetails.notification;\n\n const switchRenderNotificationDetails = () => {\n switch (NotificationType) {\n case 1:\n return (\n
\n {selectedNotificationDetails.commentDetails && (\n \n
\n \n {selectedNotificationDetails.notification.Message}\n \n
\n \n \n {selectedNotificationDetails.notification.Data.projectId && (\n \n Go to project page for this notification.\n \n )}\n
\n )}\n
\n );\n default:\n throw new Error('unhandled notification type');\n }\n };\n return (\n
\n {switchRenderNotificationDetails()}\n {loading ||\n (loadingNotificationDetails && (\n <>\n \n Loading notification details\n \n \n \n ))}\n
\n );\n}\n","import React, { useCallback, useEffect, useState } from 'react';\nimport { makeStyles, Theme, createStyles } from '@material-ui/core/styles';\nimport { Affiliations, MyActivity, SubHeaderGoBack } from '..';\nimport Paper from '@material-ui/core/Paper';\nimport { Button, CircularProgress, TextField } from '@material-ui/core';\nimport { useDispatch, useSelector } from 'react-redux';\nimport {\n clearMyProfileState,\n fetchLoggedInStakeholder,\n fetchLUOrgTypes,\n fetchUpdateStakeholder\n} from '../../store/slices/myprofile';\nimport { styled as styledMUI } from '@material-ui/core/styles';\nimport { ThemeProps } from '../../styled-elements/Icons';\nimport { resetFeed } from '../../store/slices/feed';\nimport { setNavigationTab } from '../../store/slices/application';\nimport { useHistory } from 'react-router-dom';\nimport { RootState } from '../../store';\nimport { environment } from '../../environment';\nimport styled from 'styled-components';\nimport { Helmet } from 'react-helmet';\nimport DOMPurify from 'dompurify';\n\nconst MyPaper = styled(Paper)`\n padding: 8px;\n margin-top: 8px;\n width: ${(props: { isMobile: boolean }) =>\n props.isMobile ? '95%' : '575px'};\n`;\n\nconst PrivacyContainer = styled.div`\n ${({ theme }: ThemeProps) => `\n background-color: ${theme.palette.secondary.main};\n color: white;\n margin: 0;\n padding: 0;\n `}\n`;\n\nconst CenteredContainer = styled.div`\n ${({ theme }: any) => `\n margin: ${theme.spacing(0, 2)};\n padding: 2px;\n list-style: none;\n text-align: center;\n font-weight: normal;\n `}\n`;\n\nexport const MyProfileHeading = styled.h2`\n ${({ theme }: any) => `\n width: 100%;\n margin-left: 8px;\n list-style: none;\n text-align: left;\n font-weight: bold;\n color: ${theme.palette.primary.main};\n font-size: 16px;\n `}\n`;\n\nconst ContactForm = styled.form`\n width: 100%;\n`;\n\nconst TextFieldHalfWidth = styledMUI(TextField)({\n width: 'calc(50% - 4px)',\n marginTop: 12,\n '& .MuiFormLabel-root.Mui-disabled': {\n color: '#767676'\n },\n '& .MuiFormLabel-root': {\n color: '#767676'\n }\n});\n\nexport const MyTextField = styledMUI(TextField)({\n marginTop: 12,\n '& .MuiFormLabel-root.Mui-disabled': {\n color: '#767676'\n },\n '& .MuiFormLabel-root': {\n color: '#767676'\n }\n});\ninterface ContactFormState {\n FIRST_NAME: string;\n LAST_NAME: string;\n STAKE_EMAIL: string;\n HOME_PHONE_NR: string;\n MAIL1_ADDRESS_LINE1: string;\n MAIL1_ADDRESS_LINE2: string;\n MAIL1_CITY: string;\n MAIL1_STATE: string;\n MAIL1_ZIP_CODE: string;\n}\n\nexport default function MyProfile() {\n const {\n stakeholderInfo,\n isLoadingStakeholder,\n isLoadingOrgTypes,\n hasErrors,\n errorMsg,\n orgTypes\n } = useSelector((state: RootState) => state).myProfileSlice;\n const history = useHistory();\n const [contactFormState, setContactFormState] = useState({\n FIRST_NAME: '',\n LAST_NAME: '',\n STAKE_EMAIL: '',\n HOME_PHONE_NR: '',\n MAIL1_ADDRESS_LINE1: '',\n MAIL1_ADDRESS_LINE2: '',\n MAIL1_CITY: '',\n MAIL1_STATE: '',\n MAIL1_ZIP_CODE: ''\n });\n const [checkboxesState, setCheckboxesState] = useState({\n notifyOnNewProjectsWhereILive: true,\n notifyOnNewProjectsWhereIWork: true,\n notifyOnNewProjectsInMyDistrict: false\n });\n const { currentPath, isMobile } = useSelector(\n (state: RootState) => state\n ).applicationSlice;\n const [editState, setEditState] = useState({\n isEditHomeContact: false\n });\n\n const useStyles = makeStyles((theme: Theme) =>\n createStyles({\n root: {\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n alignItems: 'center'\n },\n formControl: {\n margin: theme.spacing(0, 2)\n },\n formControlDropdown: {\n width: '100%',\n marginTop: 12\n },\n formControlLabel: {\n textAlign: 'left',\n fontSize: 6\n },\n formLabel: {\n margin: theme.spacing(3),\n color: 'black',\n fontSize: 6\n },\n text: {\n margin: theme.spacing(1, 2),\n listStyle: 'none',\n textAlign: 'left',\n paddingLeft: 0\n },\n inputRoot: {\n '&$disabled': {\n color: '#767676'\n }\n },\n disabled: {}\n })\n );\n const classes = useStyles();\n\n const dispatch = useDispatch();\n\n const subscribeToHistory = useCallback(() => {\n const unlisten = history.listen((loc, action) => {\n if (action) {\n if (loc.pathname !== currentPath) {\n dispatch(clearMyProfileState());\n unlisten(); // no longer listen after clearing my profile state\n }\n }\n });\n }, [currentPath, dispatch, history]);\n\n useEffect(() => {\n if (!isLoadingOrgTypes && !orgTypes.length) {\n dispatch(fetchLoggedInStakeholder());\n subscribeToHistory();\n dispatch(setNavigationTab(''));\n dispatch(fetchLUOrgTypes());\n dispatch(resetFeed());\n }\n }, [dispatch, isLoadingOrgTypes, orgTypes, subscribeToHistory]);\n\n const handleChangeCheckbox =\n (name: string) => (event: React.ChangeEvent) => {\n setCheckboxesState({ ...checkboxesState, [name]: event.target.checked });\n };\n\n useEffect(() => {\n // Set contact form initial form state so we can revert when cancel is clicked\n if (\n !isLoadingStakeholder &&\n !isLoadingOrgTypes &&\n !hasErrors &&\n stakeholderInfo\n ) {\n if (!contactFormState.STAKE_EMAIL && stakeholderInfo) {\n const {\n FIRST_NAME,\n LAST_NAME,\n STAKE_EMAIL,\n HOME_PHONE_NR,\n MAIL1_ADDRESS_LINE1,\n MAIL1_ADDRESS_LINE2,\n MAIL1_CITY,\n MAIL1_STATE,\n MAIL1_ZIP_CODE\n } = stakeholderInfo;\n setContactFormState({\n FIRST_NAME: FIRST_NAME || '',\n LAST_NAME: LAST_NAME || '',\n STAKE_EMAIL: STAKE_EMAIL || '',\n HOME_PHONE_NR: HOME_PHONE_NR || '',\n MAIL1_ADDRESS_LINE1: MAIL1_ADDRESS_LINE1 || '',\n MAIL1_ADDRESS_LINE2: MAIL1_ADDRESS_LINE2 || '',\n MAIL1_CITY: MAIL1_CITY || '',\n MAIL1_STATE: MAIL1_STATE || '',\n MAIL1_ZIP_CODE: MAIL1_ZIP_CODE || ''\n });\n }\n }\n }, [\n contactFormState.STAKE_EMAIL,\n hasErrors,\n isLoadingOrgTypes,\n isLoadingStakeholder,\n stakeholderInfo\n ]);\n\n const handleChangeEdit = async (propertyName: any) => {\n const { isEditHomeContact } = editState;\n if (isEditHomeContact && propertyName === 'isEditHomeContact') {\n const {\n // STAKE_EMAIL, not current editable\n FIRST_NAME,\n LAST_NAME,\n HOME_PHONE_NR,\n MAIL1_ADDRESS_LINE1,\n MAIL1_ADDRESS_LINE2,\n MAIL1_CITY,\n MAIL1_STATE,\n MAIL1_ZIP_CODE\n } = contactFormState;\n try {\n await dispatch(\n fetchUpdateStakeholder({\n ...stakeholderInfo,\n // STAKE_EMAIL, not current editable\n FIRST_NAME,\n LAST_NAME,\n HOME_PHONE_NR,\n MAIL1_ADDRESS_LINE1,\n MAIL1_ADDRESS_LINE2,\n MAIL1_CITY,\n MAIL1_STATE,\n MAIL1_ZIP_CODE\n })\n );\n setEditState({ ...editState, isEditHomeContact: false });\n } catch (err) {\n console.log(err);\n }\n } else {\n setEditState({ ...editState, [propertyName]: !editState[propertyName] });\n }\n };\n\n const {\n notifyOnNewProjectsWhereILive,\n notifyOnNewProjectsWhereIWork,\n notifyOnNewProjectsInMyDistrict\n } = checkboxesState;\n const { isEditHomeContact } = editState;\n\n return (\n \n \n \n My Profile - {environment.entityName} REACH\n \n \n \n \n \n \n {`${environment.entityName} Privacy Policy`}\n \n \n \n {hasErrors && errorMsg && (\n
\n {errorMsg}\n
\n )}\n {!stakeholderInfo ? (\n <>\n \n Updating user information\n \n \n \n ) : (\n
\n \n
\n \n \n Home Contact Information

(if applicable)\n
\n {isEditHomeContact && (\n {\n const {\n FIRST_NAME,\n LAST_NAME,\n STAKE_EMAIL,\n HOME_PHONE_NR,\n MAIL1_ADDRESS_LINE1,\n MAIL1_ADDRESS_LINE2,\n MAIL1_CITY,\n MAIL1_STATE,\n MAIL1_ZIP_CODE\n } = stakeholderInfo;\n setEditState({ ...editState, isEditHomeContact: false });\n setContactFormState({\n FIRST_NAME: FIRST_NAME || '',\n LAST_NAME: LAST_NAME || '',\n STAKE_EMAIL: STAKE_EMAIL || '',\n HOME_PHONE_NR: HOME_PHONE_NR || '',\n MAIL1_ADDRESS_LINE1: MAIL1_ADDRESS_LINE1 || '',\n MAIL1_ADDRESS_LINE2: MAIL1_ADDRESS_LINE2 || '',\n MAIL1_CITY: MAIL1_CITY || '',\n MAIL1_STATE: MAIL1_STATE || '',\n MAIL1_ZIP_CODE: MAIL1_ZIP_CODE || ''\n });\n }}\n >\n Cancel\n \n )}\n handleChangeEdit('isEditHomeContact')}\n variant=\"contained\"\n color=\"primary\"\n >\n
{isEditHomeContact ? 'Save' : 'Edit'}
\n \n
\n
\n {isLoadingStakeholder && (\n <>\n \n Updating user information\n \n \n \n )}\n \n {\n setContactFormState({\n ...contactFormState,\n FIRST_NAME: DOMPurify.sanitize(e.target.value)\n });\n }}\n label=\"First Name\"\n variant=\"outlined\"\n id=\"first name\"\n />\n \n setContactFormState({\n ...contactFormState,\n LAST_NAME: DOMPurify.sanitize(e.target.value)\n })\n }\n label=\"Last Name\"\n variant=\"outlined\"\n id=\"last name\"\n />\n \n\n \n setContactFormState({\n ...contactFormState,\n HOME_PHONE_NR: DOMPurify.sanitize(e.target.value)\n })\n }\n label=\"Phone\"\n variant=\"outlined\"\n id=\"phone\"\n />\n \n setContactFormState({\n ...contactFormState,\n MAIL1_ADDRESS_LINE1: DOMPurify.sanitize(e.target.value)\n })\n }\n label=\"Address Line 1\"\n variant=\"outlined\"\n id=\"address line 1\"\n />\n \n setContactFormState({\n ...contactFormState,\n MAIL1_ADDRESS_LINE2: DOMPurify.sanitize(e.target.value)\n })\n }\n label=\"Address Line 2\"\n variant=\"outlined\"\n id=\"address line 2\"\n />\n \n setContactFormState({\n ...contactFormState,\n MAIL1_CITY: DOMPurify.sanitize(e.target.value)\n })\n }\n label=\"City/Town\"\n variant=\"outlined\"\n id=\"city or town\"\n />\n \n setContactFormState({\n ...contactFormState,\n MAIL1_STATE: DOMPurify.sanitize(e.target.value)\n })\n }\n label=\"State\"\n variant=\"outlined\"\n id=\"state\"\n />\n \n setContactFormState({\n ...contactFormState,\n MAIL1_ZIP_CODE: DOMPurify.sanitize(e.target.value)\n })\n }\n label=\"Zip\"\n variant=\"outlined\"\n id=\"zip\"\n />\n \n
\n
\n \n {/*\n MAS-138 Hide Work Contact Details (requires back end updates to implement)\n \n
\n \n \n Work Contact Information (if applicable)\n \n \n
Edit
\n \n
\n
\n
\n
    \n
  • Email: joesmith@state.ma.us
  • \n
  • Phone:
  • \n
  • Address: 10 Park Plaza #4160
  • \n
  • City/Town: Boston​
  • \n
  • State: MA
  • \n
  • Zip: 02166
  • \n
\n
\n \n
*/}\n \n \n {/* MAS-224 - temporarily hide items before UAT */}\n {/* \n
\n \n Notifications\n \n
Edit
\n \n
\n
\n
\n \n \n \n }\n label={\n \n Notify me of new projects near where I live\n \n }\n />\n {notifyOnNewProjectsWhereILive && }\n\n \n }\n label={\n \n Notify me of new projects near where I work\n \n }\n />\n {notifyOnNewProjectsWhereIWork && }\n \n }\n label={\n \n Notify me of new projects in my district\n \n }\n />\n \n \n
\n
\n \n
\n \n \n \n Account Integrations \n
    \n
  • Connect Twitter
  • \n
  • Connect Instagram
  • \n
  • Connect Facebook
  • \n
\n
\n
\n
*/}\n \n )}\n
\n );\n}\n","import {\n Button,\n CircularProgress,\n createStyles,\n FormControl,\n InputLabel,\n makeStyles,\n MenuItem,\n Paper,\n Select,\n Theme\n} from '@material-ui/core';\nimport React, {\n ReactElement,\n useCallback,\n useEffect,\n useRef,\n useState\n} from 'react';\nimport { MyProfileHeading, MyTextField } from './MyProfile';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { fetchUpdateStakeholder } from '../../store/slices/myprofile';\nimport { RootState } from '../../store';\nimport styled from 'styled-components';\nconst MySelect = styled(Select)({\n '& .MuiInputLabel-root.Mui-disabled': {\n color: '#767676 !important'\n }\n});\n\nconst MyPaper = styled(Paper)`\n padding: 8px;\n margin-top: 8px;\n width: ${(props: { isMobile: boolean }) =>\n props.isMobile ? '95%' : '575px'};\n`;\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n root: {\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n alignItems: 'center'\n },\n formControl: {\n margin: theme.spacing(0, 2)\n },\n formControlDropdown: {\n width: '100%',\n marginTop: 12\n },\n formControlLabel: {\n textAlign: 'left',\n fontSize: 6\n },\n formLabel: {\n margin: theme.spacing(3),\n color: 'black',\n fontSize: 6\n },\n text: {\n margin: theme.spacing(1, 2),\n listStyle: 'none',\n textAlign: 'left',\n paddingLeft: 0\n },\n inputRoot: {\n '&$disabled': {\n color: '#767676'\n }\n },\n disabled: {}\n })\n);\n\nexport default function Affiliations(): ReactElement {\n const { isMobile } = useSelector(\n (state: RootState) => state\n ).applicationSlice;\n\n const classes = useStyles();\n const dispatch = useDispatch();\n const { stakeholderInfo, isLoadingStakeholder, isLoadingOrgTypes, orgTypes } =\n useSelector((state: RootState) => state).myProfileSlice;\n\n const [isEdit, setIsEdit] = useState(false);\n const [orgName, setOrgName] = useState('');\n const initialOrgName = useRef(''); // store so we can reset to initial on cancel\n const getSelectedOrgLookup = useCallback(() => {\n let res;\n if (\n stakeholderInfo &&\n stakeholderInfo.ORGANIZATION_TYPE &&\n orgTypes.length\n ) {\n res = orgTypes.find(\n (o) => o.ORGANIZATION_TYPE === stakeholderInfo.ORGANIZATION_TYPE\n ).ORGANIZATION_TYPE_ID;\n } else {\n res = '';\n }\n return res;\n }, [orgTypes, stakeholderInfo]);\n\n const [dropdownsState, setDropdownsState] = useState({\n selectedOrgType: getSelectedOrgLookup()\n });\n\n const handleChangeEdit = async () => {\n if (isEdit) {\n const { selectedOrgType } = dropdownsState;\n try {\n await dispatch(\n fetchUpdateStakeholder({\n ...stakeholderInfo,\n ORGANIZATION: orgName,\n StakeholderOrgs: [\n {\n STAKE_ID: 0,\n ORGANIZATION_TYPE_ID: selectedOrgType,\n ORGANIZATION_TYPE: ''\n }\n ]\n })\n );\n setIsEdit(false);\n } catch (err) {\n console.log(err);\n }\n } else {\n setIsEdit(true);\n }\n };\n useEffect(() => {\n // set initial form state\n if (!isLoadingOrgTypes && !isLoadingStakeholder && stakeholderInfo) {\n setDropdownsState({\n selectedOrgType: getSelectedOrgLookup()\n });\n const orgName = stakeholderInfo.ORGANIZATION;\n if (orgName) {\n setOrgName(orgName);\n initialOrgName.current = orgName;\n }\n }\n }, [\n getSelectedOrgLookup,\n isLoadingOrgTypes,\n isLoadingStakeholder,\n orgTypes,\n stakeholderInfo\n ]);\n const handleChangeDropdown =\n (name: string) => (event: React.ChangeEvent) => {\n setDropdownsState({ ...dropdownsState, [name]: event.target.value });\n };\n\n const { selectedOrgType } = dropdownsState;\n\n return (\n \n
\n \n Affiliations \n\n {isEdit && (\n {\n setIsEdit(false);\n setDropdownsState({\n ...dropdownsState,\n selectedOrgType: getSelectedOrgLookup()\n });\n setOrgName(initialOrgName.current);\n }}\n >\n Cancel\n \n )}\n \n
{isEdit ? 'Save' : 'Edit'}
\n \n
\n
\n {isLoadingStakeholder && (\n <>\n \n Updating user information\n \n \n \n )}\n \n \n Organization Type\n \n \n {orgTypes.length &&\n orgTypes.map((orgType, idx) => (\n \n {orgType.ORGANIZATION_TYPE}\n \n ))}\n {/* bryan's original */}\n {/* {orgTypes.length &&\n orgTypes.map((orgType, idx) => (\n \n {orgType.Description}\n \n ))} */}\n \n \n setOrgName(e.target.value)}\n label=\"Name of business or organization represented\"\n variant=\"outlined\"\n id=\"Name of business or organization represented\"\n />\n
\n \n
\n );\n}\n","import React, { ReactElement } from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Grid from '@material-ui/core/Grid';\nimport MUISlider from '@material-ui/core/Slider';\n\nconst useStyles = makeStyles({\n root: {\n width: 200\n }\n});\ninterface Props {\n default: number;\n}\n\nexport default function Slider(props: Props): ReactElement {\n const classes = useStyles();\n const [value, setValue] = React.useState(props.default);\n\n const handleChange = (event, newValue) => {\n setValue(newValue);\n };\n return (\n
\n \n \n \n \n \n

Up to {value} miles

\n
\n
\n
\n );\n}\n","import {\n Grid,\n makeStyles,\n Paper,\n Theme,\n createStyles\n} from '@material-ui/core';\nimport React, { ReactElement } from 'react';\nimport { Link } from 'react-router-dom';\nimport { MyProfileHeading } from './MyProfile';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { setIsMine } from '../../store/slices/feed';\nimport { RootState } from '../../store';\nimport styled from 'styled-components';\n\nconst MyPaper = styled(Paper)`\n padding: 8px;\n margin-top: 8px;\n margin-bottom: 86px;\n width: ${(props: { isMobile: boolean }) =>\n props.isMobile ? '95%' : '575px'};\n`;\n\nexport default function MyActivity(): ReactElement {\n const { isMobile } = useSelector(\n (state: RootState) => state\n ).applicationSlice;\n const useStyles = makeStyles((theme: Theme) =>\n createStyles({\n root: {\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n alignItems: 'center'\n },\n formControl: {\n margin: theme.spacing(0, 2)\n },\n formControlDropdown: {\n width: '100%',\n marginTop: 12\n },\n formControlLabel: {\n textAlign: 'left',\n fontSize: 6\n },\n formLabel: {\n margin: theme.spacing(3),\n color: 'black',\n fontSize: 6\n },\n text: {\n margin: theme.spacing(1, 2),\n listStyle: 'none',\n textAlign: 'left',\n paddingLeft: 0\n },\n inputRoot: {\n '&$disabled': {\n color: '#767676'\n }\n },\n disabled: {}\n })\n );\n const classes = useStyles();\n const dispatch = useDispatch();\n const { stakeholderInfo } = useSelector(\n (state: RootState) => state\n ).myProfileSlice;\n return (\n \n \n \n My Activity \n
    \n
  • \n {\n dispatch(setIsMine(true));\n }}\n to={{\n pathname: '/feed',\n search: `?isMine=${true}`\n }}\n >\n {stakeholderInfo.CommentCount} project comments\n \n
  • \n {/*
  • \n 4 comment responses received\n
  • \n
  • \n 2 public meetings attended\n
  • \n
  • \n 1 online public meeting attended\n
  • */}\n
  • \n \n {stakeholderInfo.ProjectCount} projects followed\n \n
  • \n
\n
\n
\n
\n );\n}\n","import React, { ReactElement } from 'react';\nimport styled from 'styled-components';\nimport { Theme, Tooltip } from '@material-ui/core';\nimport { useHistory } from 'react-router-dom';\nimport { useDispatch } from 'react-redux';\nimport { resetSelectedNotificationState } from '../../store/slices/notifications';\nimport { ArrowBack } from '@material-ui/icons';\n\ninterface Props {\n isArrowBack: boolean;\n heading: string;\n goBackLink?: string;\n isNotificationDetails?: boolean; // this edge case is because notifications doesn't use routing - the pages are changing via state\n}\n\nconst Container = styled.div`\n width: 100vw;\n display: flex;\n background-color: ${(props: { theme: Theme }) =>\n props.theme.palette.primary.main};\n align-items: center;\n padding: 0px;\n`;\nconst MyH1 = styled.h1`\n font-size: 18px;\n color: white;\n margin: 8px;\n padding: 8px 0px 4px 0px;\n @media only screen and (max-width: 720px) {\n padding: 0px;\n }\n`;\nconst MyArrowBack = styled(ArrowBack)`\n color: white;\n margin-top: 8px;\n @media only screen and (max-width: 720px) {\n margin-top: 4px;\n margin-left: 4px;\n }\n`;\n\nexport default function GoBack({\n isArrowBack,\n heading,\n goBackLink,\n isNotificationDetails\n}: Props): ReactElement {\n const history = useHistory();\n const dispatch = useDispatch();\n return (\n \n {isArrowBack && (\n
\n {\n if (isNotificationDetails) {\n // this edge case is because notifications doesn't use routing - the pages are changing via state\n dispatch(resetSelectedNotificationState());\n } else {\n goBackLink ? history.push(goBackLink) : history.goBack();\n }\n }}\n aria-label=\"Back to previous page\"\n >\n \n \n \n \n
\n )}\n {heading}\n
\n );\n}\n","import { Button, CircularProgress } from '@material-ui/core';\nimport React, { ReactElement } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport GenericLookup from '../../models/shared/GenericLookup';\nimport { RootState } from '../../store';\nimport { fetchMoreComments } from '../../store/slices/feed';\nimport {\n fetchMoreProjects,\n fetchSelectedProjectComments\n} from '../../store/slices/projects';\nimport { Spacer } from '../../styled-elements';\nimport styled from 'styled-components';\n\nconst Container = styled.div`\n margin-top: -8px;\n`;\n\nexport default function LoadMore(): ReactElement {\n const dispatch = useDispatch();\n const {\n isLoadingProjectComments,\n isLoadingMoreProjects,\n isAllProjectsLoaded,\n isAllSelectedProjCommentsLoaded,\n projectsFilterSelection,\n projects,\n selectedProjectComments,\n selectedProject,\n selectedCounties\n } = useSelector((state: RootState) => state).projectsSlice;\n\n const {\n comments,\n isLoadingMoreComments,\n isFollowedComments,\n isAllCommentsLoaded,\n isMine\n } = useSelector((state: RootState) => state).feedSlice;\n\n /*\n useEffect(() => {\n // TODO - RESET ALL COMMENTS LOADED STATE BASED ON PATH CHANGE\n // reset isAllSelectedProjCommentsLoaded or isAllCommentsLoaded based on cur/prev path\n console.log('currentPath', currentPath);\n console.log('prevPath', prevPath);\n\n if (currentPath.includes('/projects' && isAllSelectedProjCommentsLoaded)) {\n console.log('reset is all proj comments loaded');\n //dispatch(resetAllProjCommentsLoaded())\n } else if (prevPath === '/feed' && isAllCommentsLoaded) {\n console.log('reset is all comments loaded');\n // dispatch(resetAllProjCommentsLoaded())\n }\n }, [\n comments,\n currentPath,\n dispatch,\n isAllCommentsLoaded,\n isAllSelectedProjCommentsLoaded,\n prevPath\n ]);\n */\n const handleClick = () => {\n // this is reused in multiple components/pages, base dispatch on url\n const url = window.location.pathname;\n if (url === '/feed') {\n dispatch(\n fetchMoreComments({\n isMine,\n isFollowedComments,\n start: comments.length,\n length: 20\n })\n );\n } else if (url === '/projects' || url === '/projects/') {\n switch (projectsFilterSelection) {\n case 'all':\n dispatch(\n fetchMoreProjects({\n isMine: false,\n start: projects && projects.length ? projects.length : 0,\n length: 50,\n hasEvents: false,\n countyIds: []\n })\n );\n break;\n case 'following':\n dispatch(\n fetchMoreProjects({\n isMine: true,\n start: projects && projects.length ? projects.length : 0,\n length: 50,\n hasEvents: false,\n countyIds: []\n })\n );\n break;\n case 'events':\n dispatch(\n fetchMoreProjects({\n isMine: false,\n start: projects && projects.length ? projects.length : 0,\n length: 50,\n hasEvents: true,\n countyIds: []\n })\n );\n break;\n case 'custom':\n // only current custom (applied via ellipsis) filter is county\n dispatch(\n fetchMoreProjects({\n isMine: false,\n start: projects && projects.length ? projects.length : 0,\n length: 50,\n hasEvents: false,\n countyIds: selectedCounties.map((c: GenericLookup) => c.value)\n })\n );\n return;\n default:\n throw new Error('unhandle case in load more projects switch');\n }\n } else if (url.includes('/projects/')) {\n // is project details page, load comments instead've projects\n dispatch(\n fetchSelectedProjectComments({\n projectId: selectedProject.ProjectId,\n start: selectedProjectComments.length,\n length: 20\n })\n );\n }\n };\n return (\n \n
\n {isLoadingMoreComments && (\n <>\n \n Loading more project comments\n \n \n \n )}\n
\n
\n {isLoadingProjectComments && (\n <>\n \n Loading project comments\n \n \n \n )}\n
\n
\n {isLoadingMoreProjects && (\n <>\n \n Loading more projects\n \n \n \n )}\n
\n \n {!isLoadingProjectComments && !isLoadingProjectComments && !isLoadingMoreComments && (\n !isAllProjectsLoaded ||\n !isAllSelectedProjCommentsLoaded ||\n !isAllCommentsLoaded\n ) && (\n \n Load More\n \n )}\n \n
\n );\n}\n","import React, { ReactElement } from 'react';\nimport { Link } from 'react-router-dom';\nimport clsx from 'clsx';\nimport { makeStyles, useTheme } from '@material-ui/core/styles';\nimport Drawer from '@material-ui/core/Drawer';\nimport CssBaseline from '@material-ui/core/CssBaseline';\nimport AppBar from '@material-ui/core/AppBar';\nimport Toolbar from '@material-ui/core/Toolbar';\nimport List from '@material-ui/core/List';\nimport Divider from '@material-ui/core/Divider';\nimport IconButton from '@material-ui/core/IconButton';\nimport MenuIcon from '@material-ui/icons/Menu';\nimport ChevronLeftIcon from '@material-ui/icons/ChevronLeft';\nimport ChevronRightIcon from '@material-ui/icons/ChevronRight';\nimport ListItem from '@material-ui/core/ListItem';\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport history from '../../history';\nimport grey from '@material-ui/core/colors/grey';\nimport {\n MySmallAccountCircleIcon,\n MyExitToAppIcon,\n MyHelpOutlineIcon\n} from '../../styled-elements/Icons';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { Auth } from 'aws-amplify';\nimport { setIsLoggedOut } from '../../store/slices/user';\nimport { setNavigationTab } from '../../store/slices/application';\nimport { RootState } from '../../store';\nimport { environment } from '../../environment';\n\nconst drawerWidth = 200;\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n display: 'flex'\n },\n appBar: {\n transition: theme.transitions.create(['margin', 'width'], {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.leavingScreen\n }),\n color: theme.palette.secondary.main,\n background: 'white'\n },\n appBarShift: {\n width: `calc(100% - ${drawerWidth}px)`,\n marginLeft: drawerWidth,\n transition: theme.transitions.create(['margin', 'width'], {\n easing: theme.transitions.easing.easeOut,\n duration: theme.transitions.duration.enteringScreen\n })\n },\n menuButton: {\n marginRight: theme.spacing(2)\n },\n hide: {\n display: 'none'\n },\n drawer: {\n width: drawerWidth,\n flexShrink: 0\n },\n drawerPaper: {\n width: drawerWidth\n },\n drawerHeader: {\n display: 'flex',\n alignItems: 'center',\n padding: theme.spacing(0, 1),\n ...theme.mixins.toolbar,\n justifyContent: 'flex-end'\n },\n content: {\n flexGrow: 1,\n padding: theme.spacing(3),\n transition: theme.transitions.create('margin', {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.leavingScreen\n }),\n marginLeft: -drawerWidth\n },\n contentShift: {\n transition: theme.transitions.create('margin', {\n easing: theme.transitions.easing.easeOut,\n duration: theme.transitions.duration.enteringScreen\n }),\n marginLeft: 0\n },\n centerLogo: {\n justifyContent: 'center'\n }\n}));\n\nexport default function Header(): ReactElement {\n const dispatch = useDispatch();\n\n const getProjectsLinkLogo = () => {\n // console.log('environment: ', environment);\n switch (environment.entityName) {\n case 'Iowa DOT':\n return (\n dispatch(setNavigationTab('projects'))}\n to=\"/projects\"\n >\n \n \n );\n case 'Mass DOT':\n return (\n dispatch(setNavigationTab('projects'))}\n to=\"/projects\"\n >\n \n \n );\n case 'Maine DOT':\n return (\n dispatch(setNavigationTab('projects'))}\n to=\"/projects\"\n >\n \n \n );\n case 'Connecticut DOT':\n return (\n dispatch(setNavigationTab('projects'))}\n to=\"/projects\"\n >\n \n \n );\n default:\n throw new Error(\n 'unhandled case in LandingPage -> getProjectsLinkLogo()'\n );\n }\n };\n\n const { isLoggedInREACH, userInfo } = useSelector((state: RootState) => {\n return state;\n }).userSlice;\n\n const classes = useStyles({});\n const theme = useTheme();\n const [open, setOpen] = React.useState(false);\n\n const handleDrawerOpen = () => {\n setOpen(true);\n };\n\n const handleDrawerClose = () => {\n setOpen(false);\n };\n\n return (\n
\n {isLoggedInREACH && (\n
\n \n \n \n {isLoggedInREACH && (\n
\n \n \n \n {getProjectsLinkLogo()}\n
\n )}\n {isLoggedInREACH ? (\n \n {userInfo.username &&
{userInfo.username}
}\n {/* {!openAfterDelay && (\n
\n \n
\n )} */}\n
\n ) : (\n \n )}\n \n \n\n \n
\n \n {theme.direction === 'ltr' ? (\n \n ) : (\n \n )}\n \n
\n \n \n {['My Profile', 'FAQ', 'Logout'].map((text, index) => (\n {\n await Auth.signOut();\n dispatch(setIsLoggedOut());\n\n // localStorage.clear();\n // history.push('/');\n //dispatch(fetchLogout());\n\n handleDrawerClose();\n }\n })}\n {...(text === 'My Profile' && {\n onClick: () => {\n handleDrawerClose();\n history.push('/myprofile');\n }\n })}\n {...(text === 'FAQ' && {\n onClick: () => {\n window.open(\n 'https://mainedot-reach-public-pdfs.s3.amazonaws.com/MaineDOT_REACH_FAQ.pdf',\n '_blank'\n );\n }\n })}\n >\n \n {text === 'My Profile' ? (\n \n ) : text === 'Logout' ? (\n \n ) : (\n \n )}\n \n \n \n ))}\n \n \n\n \n
\n \n
\n )}\n
\n );\n}\n","/* eslint-disable react-hooks/exhaustive-deps */\nimport React, { useEffect, useState } from 'react';\nimport { Link } from 'react-router-dom';\nimport { makeStyles } from '@material-ui/core/styles';\nimport BottomNavigation from '@material-ui/core/BottomNavigation';\nimport BottomNavigationAction from '@material-ui/core/BottomNavigationAction';\nimport { createTheme, MuiThemeProvider } from '@material-ui/core/styles';\nimport { withRouter } from 'react-router-dom';\nimport InsertCommentIcon from '@material-ui/icons/InsertComment';\nimport EmojiTransportationIcon from '@material-ui/icons/EmojiTransportation';\nimport grey from '@material-ui/core/colors/grey';\nimport AssessmentIcon from '@material-ui/icons/Assessment';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { setIsAlreadyLoggedIn, fetchLogout } from '../../store/slices/user';\nimport history from '../../history';\nimport { setNavigationTab } from '../../store/slices/application';\nimport { Badge } from '@material-ui/core';\nimport { withStyles } from '@material-ui/core/styles';\nimport { fetchNotifications } from '../../store/slices/notifications';\nimport NotificationsIcon from '@material-ui/icons/Notifications';\nimport { fetchLoggedInStakeholder } from '../../store/slices/myprofile';\nimport { RootState } from '../../store';\nimport { setIsFollowedComments } from '../../store/slices/feed';\n\nconst StyledBadge = withStyles((theme) => ({\n badge: {\n backgroundColor: '#ef0000',\n color: 'white',\n right: -3,\n top: 13,\n border: `2px solid ${theme.palette.background.paper}`,\n padding: '0 4px'\n }\n}))(Badge);\n\nconst theme = createTheme({\n typography: {\n fontSize: 12\n },\n overrides: {\n MuiBottomNavigationAction: {\n root: {\n '&$selected': {\n color: '#2b79c6'\n },\n margin: '0px -15px',\n padding: '0px 15px',\n color: grey[700]\n }\n }\n }\n});\n\nconst useStyles = makeStyles({\n stickToBottom: {\n width: '100%',\n height: '75px',\n position: 'fixed',\n bottom: 0,\n backgroundColor: 'white',\n zIndex: 1\n }\n});\n\nfunction BottomNavbar(props) {\n const dispatch = useDispatch();\n const { isLoggedInREACH } = useSelector(\n (state: RootState) => state\n ).userSlice;\n const { navigationTab } = useSelector(\n (state: RootState) => state\n ).applicationSlice;\n\n const { notifications } = useSelector(\n (state: RootState) => state\n ).notificationsSlice;\n const [isNotificationsActive, setIsNotificationsActive] = useState(\n navigationTab === 'notifications' ? true : false\n );\n useEffect(() => {\n if (navigationTab === 'notifications' && !isNotificationsActive) {\n setIsNotificationsActive(true);\n } else if (navigationTab !== 'notifications' && isNotificationsActive) {\n setIsNotificationsActive(false);\n }\n }, [navigationTab]);\n\n const classes = useStyles(props);\n\n useEffect(() => {\n if (!isLoggedInREACH) {\n const email = localStorage.getItem('email');\n if (email && localStorage.getItem('reachAuth')) {\n dispatch(setIsAlreadyLoggedIn(email));\n } else {\n if (\n window.location.pathname !== '/login' && // public pages\n window.location.pathname !== '/signup'\n ) {\n dispatch(fetchLogout());\n dispatch(setNavigationTab('/')); // login protected pages\n history.push('/');\n }\n }\n } else {\n // frontload notifications and stakeholder info\n dispatch(fetchNotifications());\n dispatch(fetchLoggedInStakeholder());\n }\n }, [isLoggedInREACH]);\n\n return (\n \n \n \n );\n}\nexport default withRouter(BottomNavbar);\n","import React, { ReactElement, useEffect, useRef } from 'react';\nimport { loadModules } from 'esri-loader';\nimport styled from 'styled-components';\nimport { MapPinImage } from '../../images';\nimport { environment } from '../../environment';\n\ninterface Props {\n MAP_ID: string;\n setProjCommentLatLon?: any; // used in comment form WebMap, not project WebMap\n isProjectCommentMap: boolean;\n}\n\nexport default React.memo(function WebMap({\n // memoize to prevent rerenders when clicking map\n MAP_ID,\n setProjCommentLatLon,\n isProjectCommentMap // this component is also used in the ProjectMap component\n}: Props): ReactElement {\n const mapRef = useRef() as React.MutableRefObject;\n const MapViewComponent = styled.div`\n height: ${isProjectCommentMap ? '500px;' : '100%;'}\n width: 100%;\n`; // proj comment form map is smaller\n useEffect(() => {\n let commentPin: any = null;\n const startUp = async () => {\n const [\n MapView,\n WebMap,\n Graphic,\n PictureMarkerSymbol,\n Search,\n LocatorSearchSource,\n SpatialReference,\n Locator\n ] = await loadModules(\n [\n 'esri/views/MapView',\n 'esri/WebMap',\n 'esri/Graphic',\n 'esri/symbols/PictureMarkerSymbol',\n 'esri/widgets/Search',\n 'esri/widgets/Search/LocatorSearchSource',\n 'esri/geometry/SpatialReference',\n 'esri/tasks/Locator'\n ],\n { css: true }\n );\n let userLocationPin: any = new PictureMarkerSymbol({\n url: MapPinImage,\n height: 45,\n width: 28,\n yoffset: 22.5\n });\n const map = new WebMap({\n portalItem: {\n id: MAP_ID\n },\n basemap: 'topo-vector'\n });\n\n // load the map view at the ref's DOM node\n let view;\n if (MAP_ID) {\n view = new MapView({\n container: mapRef.current,\n map: map\n });\n } else {\n // if no map ID was provided - set to entity default\n view = new MapView({\n container: mapRef.current,\n map: map,\n center: environment.dashboardMapCenterCoords.split(','),\n zoom: 7\n });\n }\n\n // search sources\n var worldGeocoder = new LocatorSearchSource({\n locator: new Locator({\n url: 'https://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer',\n outSpatialReference: new SpatialReference({ wkid: 102100 })\n }),\n name: 'US Address/Place',\n categories: ['Address', 'POI', 'Populated Place'],\n countryCode: 'US',\n locationType: 'rooftop',\n maxResults: 25,\n maxSuggestions: 6,\n placeholder: 'Find address or place',\n withinViewEnabled: true\n });\n\n // search widget\n var searchWidget = new Search({\n view: view,\n sources: [worldGeocoder],\n includeDefaultSources: false,\n autoSelect: false // we handle the zoom/select ourselves\n });\n\n // search complete callback\n searchWidget.on('search-complete', function (event) {\n searchComplete(event);\n });\n\n // Adds the search widget below other elements in\n // the top left corner of the view\n view.ui.add(searchWidget, {\n position: 'top-right'\n });\n\n function searchComplete(event) {\n // check for errors\n if (event.errors.length > 0) {\n // scope.inputSearchError = true;\n // scope.$apply();\n alert(\n 'No location matches found. Check the spelling and add more details such as city, state, or zip code.'\n );\n return;\n }\n var results = event.results[0].results;\n // Retrieved GPS from Geo Location service.\n for (var i = 0; i < results.length; i++) {\n if (results[i].feature) {\n if (commentPin) {\n view.graphics.remove(commentPin);\n }\n\n const x = results[i].feature.geometry.x;\n const y = results[i].feature.geometry.y;\n setProjCommentLatLon({\n lat: y,\n lon: x\n });\n commentPin = new Graphic(\n results[i].feature.geometry,\n userLocationPin\n );\n view.graphics.add(commentPin);\n view.center = results[i].feature.geometry;\n view.zoom = 12;\n return;\n }\n }\n }\n\n if (isProjectCommentMap) {\n view.on('click', function (evt) {\n const x = evt.mapPoint.x;\n const y = evt.mapPoint.y;\n setProjCommentLatLon({\n lat: y,\n lon: x\n });\n if (commentPin) {\n // create hidden role alert element to give disabled users feedback\n let hiddenAlertDiv = document.createElement('div');\n hiddenAlertDiv.textContent = `map pin set that will be associated to your project comment. latitude ${y} longitude ${x}`;\n hiddenAlertDiv.setAttribute('visibility', 'hidden');\n hiddenAlertDiv.setAttribute('role', 'alert');\n hiddenAlertDiv.style.visibility = 'hidden'; // Actually hides the element, but still works with accessibility tools\n document.body.appendChild(hiddenAlertDiv);\n //\n view.graphics.remove(commentPin);\n }\n commentPin = new Graphic(evt.mapPoint, userLocationPin);\n view.graphics.add(commentPin);\n });\n }\n\n return () => {\n if (view) {\n // destroy the map view\n view.container = null;\n }\n };\n };\n startUp();\n });\n return ;\n});\n","import React, { ReactElement } from 'react';\nimport AddCircleIcon from '@material-ui/icons/AddCircle';\nimport Drawer from '@material-ui/core/Drawer';\nimport { MyLargeBlueSmsIcon } from '../../styled-elements';\nimport { makeStyles, Theme, createStyles } from '@material-ui/core/styles';\nimport { Link } from 'react-router-dom';\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n root: {\n background: 'transparent',\n boxShadow: 'none'\n }\n })\n);\n\nexport default function PlusButtonBottomDrawer(): ReactElement {\n const classes = useStyles();\n const [state, setState] = React.useState({\n bottom: false\n });\n\n const toggleDrawer = (side, open) => (event) => {\n if (\n event.type === 'keydown' &&\n (event.key === 'Tab' || event.key === 'Shift')\n ) {\n return;\n }\n setState({ ...state, [side]: open });\n };\n\n return (\n
\n \n \n \n \n \n Comment on a project\n

\n \n \n
\n \n \n \n \n Cancel\n

\n \n \n \n );\n}\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport Dialog from '@material-ui/core/Dialog';\n\ninterface Props {\n text: string;\n setIsCopiedProjLink?: Function;\n}\n\nexport default function DynamicDialog({\n text,\n setIsCopiedProjLink\n}: Props): ReactElement {\n const [isOpen, setIsOpen] = useState(true);\n\n return (\n {\n setIsOpen(false);\n setIsCopiedProjLink(false);\n }}\n aria-labelledby={text}\n open={isOpen}\n >\n \n
{text}
\n
\n \n );\n}\n","import React, { useEffect } from 'react';\nimport { FieldsObject } from 'react-ga';\nimport { RouteComponentProps } from 'react-router-dom';\nimport { ga4react } from '.';\nimport { environment } from './environment';\n// import GoogleAnalytics from 'react-ga';\n// GoogleAnalytics.initialize('UA-2983547-34'); // if we add GA back, it will need to be passed as an Amplify SAM parameter\n\nexport const withTracker =

(\n WrappedComponent: React.ComponentType

,\n options: FieldsObject = {}\n) => {\n const trackPage = (page: string) => {\n // TODO: uncomment these two lines to add Google Analytics/GA back if needed\n // GoogleAnalytics.set({ page, ...options });\n // GoogleAnalytics.pageview(page);\n if (\n environment.googleAnalyticsId &&\n environment.googleAnalyticsId !== 'none'\n ) {\n ga4react.pageview(page);\n ga4react.gtag('event', 'pageview', page); // or your custom gtag event\n }\n };\n\n return (props: P) => {\n if (\n environment.googleAnalyticsId &&\n environment.googleAnalyticsId !== 'none'\n ) {\n useEffect(() => {\n trackPage(props.location.pathname);\n }, [props.location.pathname]);\n }\n\n return ;\n };\n};\n","import React, { useEffect } from 'react';\nimport { withRouter, Route, Switch, Redirect } from 'react-router-dom';\nimport {\n Project,\n NotificationsContainer,\n DashboardContainer,\n Feed,\n AllProjectsList,\n MyProfile,\n ProjectMap,\n LandingPage,\n LoginPage,\n Participate,\n ProjectSelectionFilter,\n ProjectCommentForm,\n ParticipateCommentFilter,\n MeetingDetails,\n AmplifySignUpForm,\n ConfirmAccount,\n ForgotPassword\n} from './components';\nimport { withTracker } from './withTracker';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { fetchLogout } from './store/slices/user';\nimport { environment } from './environment';\n\n// console.log('environment:', environment);\n\n// wrapping HOC in this fashion allows the withTracker function to only run once on page change\n// https://github.com/react-ga/react-ga/issues/401\nconst LandingPageWithTracker = withTracker(LandingPage);\nconst AmplifySignUpFormWithTracker = withTracker(AmplifySignUpForm);\nconst ConfirmAccountWithTracker = withTracker(ConfirmAccount);\nconst LoginPageWithTracker = withTracker(LoginPage);\nconst ForgotPasswordWithTracker = withTracker(ForgotPassword);\nconst ParticipateWithTracker = withTracker(Participate);\nconst ParticipateCommentFilterWithTracker = withTracker(\n ParticipateCommentFilter\n);\nconst ProjectCommentFormWithTracker = withTracker(ProjectCommentForm);\nconst FeedWithTracker = withTracker(Feed);\nconst AllProjectsListWithTracker = withTracker(AllProjectsList);\nconst ProjectMapWithTracker = withTracker(ProjectMap);\nconst ProjectSelectionFilterWithTracker = withTracker(ProjectSelectionFilter);\nconst ProjectWithTracker = withTracker(Project);\nconst MeetingDetailsWithTracker = withTracker(MeetingDetails);\nconst MyProfileWithTracker = withTracker(MyProfile);\nconst NotificationsContainerWithTracker = withTracker(NotificationsContainer);\nconst DashboardContainerWithTracker = withTracker(DashboardContainer);\n\nconst Routes = (props) => {\n const dispatch = useDispatch();\n\n const { isLoggedInREACH } = useSelector((state) => {\n return state;\n }).userSlice;\n useEffect(() => {\n if (localStorage.getItem('username') === 'null') {\n dispatch(fetchLogout());\n }\n }, [dispatch]);\n return (\n \n \n {/* ADD SIGNUP/LOGIN BACK AFTER PROD LAUNCH */}\n \n \n \n \n \n {/*\n NOT BEING USED\n \n */}\n \n \n {/*\n in case we add more feed filters at a later date.\n \n */}\n \n \n \n \n {/*\n NOT BEING USED\n \n */}\n \n \n \n {isLoggedInREACH && (\n \n {/* Fallback if logged in and user attempts to go to a route that doesn't exist - redirect to projects view */}\n \n \n )}\n \n );\n};\n\nexport default withRouter(Routes);\n","import React from 'react';\nimport { AmplifyLoginForm, SubHeaderGoBack } from '..';\nimport { Link } from 'react-router-dom';\nimport { useSelector } from 'react-redux';\nimport { RootState } from '../../store';\nimport { Spacer } from '../../styled-elements';\nimport { environment } from '../../environment';\nimport { Helmet } from 'react-helmet';\n\nexport default function LoginPage() {\n const { isLoggedInREACH } = useSelector(\n (state: RootState) => state\n ).userSlice;\n\n const getSubHeaderGoBackLogin = () => {\n switch (environment.entityName) {\n case 'Iowa DOT':\n return (\n \n );\n case 'Mass DOT':\n return (\n \n );\n case 'Maine DOT':\n return (\n \n );\n case 'Connecticut DOT':\n return (\n \n );\n default:\n throw new Error(\n 'unhandled case in LoginPage -> getSubHeaderGoBackLogin()'\n );\n }\n };\n return (\n

\n \n \n Login - {environment.entityName} REACH\n \n \n
\n {getSubHeaderGoBackLogin()}\n \n \n {!isLoggedInREACH && (\n \n Forgot password?\n \n )}\n
\n
\n );\n}\n","import React, { ReactElement, useState } from 'react';\nimport { Link } from 'react-router-dom';\nimport { PasswordRequirements, SubHeaderGoBack } from '../..';\nimport { Button, CircularProgress, TextField } from '@material-ui/core';\nimport { Auth } from 'aws-amplify';\nimport { Spacer } from '../../../styled-elements';\nimport { environment } from '../../../environment';\nimport { Helmet } from 'react-helmet';\nimport DOMPurify from 'dompurify';\n\nexport default function ForgotPassword(): ReactElement {\n const [loading, setLoading] = useState(false);\n const [hasErrors, setHasErrors] = useState(false);\n const [errorMsg, setErrorMsg] = useState('');\n const [isResetCodeReceived, setIsResetCodeRecevied] = useState(false);\n const [isPasswordReset, setIsPasswordReset] = useState(false);\n const [email, setEmail] = useState('');\n const [errorText, setErrorText] = useState('');\n\n const [resetPasswordFormState, setResetPasswordFormState] = useState({\n code: '',\n newPassword: '',\n confirmNewPassword: ''\n });\n\n const handleSubmitInitiateResetPw = async (e) => {\n e.preventDefault();\n try {\n setLoading(true);\n const { CodeDeliveryDetails } = await Auth.forgotPassword(email);\n if (CodeDeliveryDetails) {\n setIsResetCodeRecevied(true);\n setHasErrors(false);\n }\n setLoading(false);\n } catch (err) {\n setHasErrors(true);\n setErrorMsg(err.message);\n setLoading(false);\n }\n };\n\n const handleChangeResetPassword = (e) => {\n setResetPasswordFormState({\n ...resetPasswordFormState,\n [e.target.name]: e.target.value\n });\n };\n\n const handleSubmitResetPwd = async (e) => {\n e.preventDefault();\n setLoading(true);\n const { newPassword, confirmNewPassword, code } = resetPasswordFormState;\n if (newPassword !== confirmNewPassword) {\n setErrorText('Passwords do not match.');\n setLoading(false);\n return;\n } else {\n setErrorText('');\n try {\n await Auth.forgotPasswordSubmit(email, code, newPassword);\n setIsPasswordReset(true);\n setHasErrors(false);\n setLoading(false);\n } catch (err) {\n setHasErrors(true);\n setErrorMsg(err.message);\n setLoading(false);\n }\n }\n };\n\n return (\n
\n \n \n Forgot Password - {environment.entityName} REACH\n \n \n \n \n {!isResetCodeReceived ? (\n \n \n \n setEmail(DOMPurify.sanitize(e.target.value.toLowerCase()))\n }\n label=\"Email\"\n name=\"username\"\n id=\"username\"\n />\n

\n \n submit\n \n {loading && (\n <>\n \n Submitting password reset\n \n \n \n )}\n \n
\n ) : (\n \n \n {isPasswordReset ? (\n
\n
Successfully reset password.
\n \n \n \n Go to Login\n \n \n
\n ) : (\n \n
\n If your email matches the account on file, you will receive a\n reset code shortly.\n
\n \n \n \n \n
\n \n \n \n \n \n \n submit\n \n {loading && (\n <>\n \n Confirming new password submission\n \n \n \n )}\n \n \n
\n )}\n
\n )}\n {!isPasswordReset && hasErrors && errorMsg && (\n
\n {errorMsg}\n
\n )}\n \n \n );\n}\n","import React, { ReactElement } from 'react';\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\nimport InputLabel from '@material-ui/core/InputLabel';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport FormControl from '@material-ui/core/FormControl';\nimport Select from '@material-ui/core/Select';\nimport '../../css/ProjectSelectionFilter.css';\nimport { Button } from '@material-ui/core';\nimport { Link } from 'react-router-dom';\nimport { SubHeaderGoBack } from '..';\nimport Switch from '@material-ui/core/Switch';\nimport { useSelector } from 'react-redux';\nimport { RootState } from '../../store';\nimport { Helmet } from 'react-helmet';\nimport { environment } from '../../environment';\n\nexport default function ParticipateCommentFilter(props): ReactElement {\n const { isMobile } = useSelector(\n (state: RootState) => state\n ).applicationSlice;\n const useStyles = makeStyles((theme: Theme) =>\n createStyles({\n root: {\n overflow: 'hidden',\n padding: theme.spacing(1, 1),\n display: 'flex',\n flexDirection: isMobile ? 'column' : 'row',\n justifyContent: isMobile ? 'space-between' : 'center'\n },\n formControl: {\n margin: theme.spacing(1),\n minWidth: '100%'\n },\n selectEmpty: {\n marginTop: theme.spacing(2)\n }\n })\n );\n\n const classes = useStyles();\n const [following, setFollowing] = React.useState(true);\n const [nearMyHome, setNearMyHome] = React.useState(false);\n const [district, setDistrict] = React.useState('All');\n const [town, setTown] = React.useState('All');\n const [mpo, setMpo] = React.useState('All');\n const inputLabel = React.useRef(null);\n const [labelWidth, setLabelWidth] = React.useState(0);\n React.useEffect(() => {\n setLabelWidth(inputLabel.current!.offsetWidth);\n }, []);\n\n const handleChange = (\n event: React.ChangeEvent<{ value: any; checked?: any }>,\n type: any\n ) => {\n const { value, checked } = event.target;\n switch (type) {\n case 'following':\n return setFollowing(checked);\n case 'nearMyHome':\n return setNearMyHome(checked);\n case 'district':\n return setDistrict(value);\n case 'town':\n return setTown(value);\n case 'mpo':\n return setMpo(value);\n }\n };\n return (\n \n \n \n \n Project Comment Selection - {environment.entityName} REACH\n \n \n \n \n \n \n
\n \n \n
\n
Only show projects I follow
\n handleChange(event, 'following')}\n value=\"following\"\n inputProps={{ 'aria-label': 'primary checkbox' }}\n />\n
\n
\n \n
\n
Only show projects within 50 miles of my home
\n handleChange(event, 'nearMyHome')}\n value=\"nearMyHome\"\n inputProps={{ 'aria-label': 'primary checkbox' }}\n />\n
\n
\n \n \n District\n \n handleChange(event, 'district')}\n labelWidth={labelWidth}\n >\n All\n \n District 1 (Lenox)\n \n \n District 2 (Northampton)\n \n \n District 3 (Worcester)\n \n \n District 4 (Arlington)\n \n \n Distict 5 (Taunton)\n \n \n District 6 (Boston)\n \n \n \n \n \n Town\n \n handleChange(event, 'town')}\n labelWidth={labelWidth}\n >\n All\n Town X\n Town Y\n \n \n \n \n MPO\n \n handleChange(event, 'mpo')}\n labelWidth={labelWidth}\n >\n All\n MPO X\n MPO Y\n \n \n
\n \n \n \n GO TO FILTERED PROJECTS\n \n \n
\n );\n}\n","import React, { ReactElement, useCallback, useEffect } from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { WebMap, SubHeaderGoBack } from '../';\nimport {\n clearSelectedProject,\n fetchSelectedProject\n} from '../../store/slices/projects';\nimport { useHistory } from 'react-router-dom';\nimport { use100vh } from 'react-div-100vh';\nimport { RootState } from '../../store';\nimport { Helmet } from 'react-helmet';\nimport { environment } from '../../environment';\n\nexport default function ProjectMap(props): ReactElement {\n const { loading, selectedProject } = useSelector(\n (state: RootState) => state\n ).projectsSlice;\n const { currentPath } = useSelector(\n (state: RootState) => state\n ).applicationSlice;\n const { projectId } = props.match.params;\n const dispatch = useDispatch();\n const history = useHistory();\n const height100vh = use100vh();\n\n const subscribeToHistory = useCallback(() => {\n const unlisten = history.listen((loc, action) => {\n if (action) {\n if (loc.pathname !== currentPath && !loc.pathname.includes(projectId)) {\n dispatch(clearSelectedProject());\n unlisten(); // no longer listen after clearing project on page leave\n }\n }\n });\n }, [currentPath, dispatch, history, projectId]);\n\n useEffect(() => {\n if (projectId && !loading && !selectedProject) {\n subscribeToHistory();\n dispatch(fetchSelectedProject(projectId));\n }\n }, [dispatch, loading, projectId, selectedProject, subscribeToHistory]);\n\n return (\n <>\n {selectedProject && (\n <>\n \n \n Project Map - {environment.entityName} REACH\n \n \n \n
\n {/* subtract header and footer height */}\n \n
\n \n )}\n \n );\n}\n","import React, { ReactElement } from 'react';\nimport { Button } from '@material-ui/core';\nimport { Link } from 'react-router-dom';\nimport { SubHeaderGoBack } from '..';\n\nexport default function MeetingDetails(): ReactElement {\n return (\n
\n \n \n \n Register\n \n \n
\n );\n}\n","import React, { useEffect } from 'react';\nimport Routes from './routes.js';\nimport './App.css';\nimport { BottomNavbar, Header } from './components/';\nimport {\n createTheme,\n ThemeProvider as MuiThemeProvider\n} from '@material-ui/core/styles';\nimport { ThemeProvider as StyledComponentsThemeProvider } from 'styled-components';\nimport grey from '@material-ui/core/colors/grey';\nimport { useHistory } from 'react-router-dom';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { setCurrentPath, setIsMobile } from './store/slices/application';\nimport { RootState } from './store/index.js';\n\nconst theme = createTheme({\n palette: {\n primary: {\n main: '#2b79c6'\n },\n secondary: {\n main: '#8D8D8D'\n // main: grey[700]\n }\n },\n // GLOBAL MUI OVERRIDES\n overrides: {\n MuiButton: {\n label: {\n whiteSpace: 'normal'\n }\n },\n MuiSlider: {\n markLabel: {\n fontWeight: 'bold',\n maxWidth: 70,\n whiteSpace: 'break-spaces'\n },\n valueLabel: {\n display: 'flex',\n justifyContent: 'center',\n left: 'calc(-50%) - 4px',\n top: -45,\n padding: '6px 0px',\n borderRadius: 5,\n width: 100,\n background: '#2b79c6',\n color: 'white',\n '& *': {\n width: '100%',\n background: 'transparent'\n }\n }\n },\n MuiTypography: {\n subtitle1: {\n fontWeight: 'bold'\n },\n h6: {\n fontWeight: 'bold'\n },\n h5: {\n fontSize: 15\n }\n },\n MuiInputLabel: {\n outlined: {\n '&$shrink': {\n padding: '0px 4px',\n fontSize: 16,\n backgroundColor: 'white !important'\n }\n }\n },\n MuiDialogTitle: {\n root: {\n color: '#2b79c6'\n }\n }\n }\n});\n\nconst App: React.FC = () => {\n const { isMobile } = useSelector(\n (state: RootState) => state\n ).applicationSlice;\n const dispatch = useDispatch();\n\n const handleResize = () => {\n if (window.innerWidth <= 760 && !isMobile) {\n dispatch(setIsMobile(true));\n }\n if (window.innerWidth > 760 && isMobile) {\n dispatch(setIsMobile(false));\n }\n };\n useEffect(() => {\n window.addEventListener('resize', handleResize);\n });\n\n const history = useHistory();\n\n useEffect(() => {\n dispatch(setCurrentPath(window.location.pathname));\n history.listen((location, action) => {\n dispatch(setCurrentPath(location.pathname));\n });\n }, [dispatch, history]);\n\n return (\n
\n \n \n
\n \n \n \n \n
\n );\n};\n\nexport default App;\n","import { combineReducers, configureStore } from '@reduxjs/toolkit';\nimport projectsSlice from './slices/projects';\nimport userSlice from './slices/user';\nimport applicationSlice from './slices/application';\nimport feedSlice from './slices/feed';\nimport myProfileSlice from './slices/myprofile';\nimport participateSlice from './slices/participate';\nimport dashboardSlice from './slices/dashboard';\nimport notificationsSlice from './slices/notifications';\n\nconst combinedReducer = combineReducers({\n userSlice, // used for login state and tokens etc\n applicationSlice, // used for navigation state\n myProfileSlice, // only used for my profile\n projectsSlice,\n feedSlice,\n participateSlice,\n dashboardSlice,\n notificationsSlice\n});\n\nconst rootReducer = (state, action) => {\n // this resets the entire store to its initial state on logout\n if (action.type === 'user/setIsLoggedOut') {\n state = undefined;\n }\n return combinedReducer(state, action);\n};\n\nconst store = configureStore({\n reducer: rootReducer\n});\n\nexport type RootState = ReturnType;\nexport default store;\n","// 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(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\ntype Config = {\n onSuccess?: (registration: ServiceWorkerRegistration) => void;\n onUpdate?: (registration: ServiceWorkerRegistration) => void;\n};\n\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\nfunction registerValidSW(swUrl: string, config?: Config) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\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\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(\n 'No internet connection found. App is running in offline mode.'\n );\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister();\n });\n }\n}\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { Router } from 'react-router-dom';\nimport history from './history';\nimport './index.css';\nimport App from './App';\nimport { Provider } from 'react-redux';\nimport store from './store';\nimport * as serviceWorker from './serviceWorker';\nimport GA4React from 'ga-4-react';\nimport { environment } from './environment';\n\nexport const ga4react = new GA4React(environment.googleAnalyticsId);\n\n(async (_) => {\n if (\n environment.googleAnalyticsId &&\n environment.googleAnalyticsId !== 'none'\n ) {\n await ga4react\n .initialize()\n .then((res) => {\n // debugger;\n // ga4react.pageview('path');\n // ga4react.gtag('event', 'pageview', 'path'); // or your custom gtag event\n console.log('GA Success.');\n })\n .catch((err) => console.log('GA Failure.'))\n .finally(() => {\n ReactDOM.render(\n \n \n \n \n ,\n document.getElementById('root')\n );\n });\n } else {\n ReactDOM.render(\n \n \n \n \n ,\n document.getElementById('root')\n );\n }\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":""}