{"version":3,"sources":["shared/services/api-service/public-api.service.ts","shared/hooks/useCancellableEffect.ts","shared/enums/proposal-status.enum.ts","shared/enums/profile.enum.ts","shared/enums/bookmark.enum.ts","shared/util/formatters.ts","shared/services/api-service/rfp-api.service.ts","common/logo/Logo.js","shared/interfaces/ICommitment.interfaces.ts","shared/components/LoadingPage.tsx","shared/enums/scope.enum.ts","shared/util/NotFoundPage.tsx","shared/services/hubspot/hubspot-service.ts","shared/services/api-service/funder-api.service/funder-api.service.ts","shared/util/constants.ts","shared/services/api-service/grantee.service.ts","common/data/data.ts","common/images/EnvironmentSmall.js","common/images/CriminalSmall.js","common/images/EducationSmall.js","common/images/ImmigrationSmall.js","common/images/LgbtqSmall.js","common/images/RacialSmall.js","common/images/EconomicSmall.js","common/images/DemocracySmall.js","common/images/GenderSmall.js","common/images/HealthSmall.js","common/images/HumanSmall.js","common/images/OtherSmall.js","common/images/ClimateSmall.js","common/images/EquitableSmall.js","common/images/FoodSmall.js","common/images/HousingSmall.js","common/images/TransportSmall.js","common/images/MediaSmall.tsx","common/images/DisabilitySmall.tsx","shared/services/api-service/bookmark.service.ts","shared/enums/proposal-urgent-need.ts","group/providers/UserProvider.tsx","shared/components/consumers/FetchPage.tsx","shared/enums/tax-status-id.enum.ts","images/bipoc.svg","shared/context/GeneralDialog.context.tsx","shared/components/profileCard/ProfileCard.tsx","shared/services/api-service/proposal-api.service.ts","shared/util/appcuesIntegration.ts","shared/components/legacy-ui/Tooltip.tsx","shared/util/scrollToTop.ts","shared/enums/funder/funder-enums.ts","shared/classes/Interpreter.ts","social/socialMedia.tsx","social/SocialIcon.tsx","social/SocialBar.tsx","shared/components/Footer.tsx","shared/components/legacy-ui/Loading.tsx","shared/components/modals/styles.ts","shared/components/newPublicProfile/funded/profileDrawer/index.tsx","shared/services/api-service/user-auth-api.service.ts","shared/enums/funder/index.ts","shared/enums/scoring.enum.ts","common/components/ProfileTypeTag/ProfileTypeTag.tsx","shared/form-section/RfpKeyDates/constants.ts","shared/components/viewRfp/Rfp/Rfp.styles.tsx","shared/enums/grant-cycle.enum.ts","images/blueinfo.svg","shared/components/PageHeader.tsx","admin/providers/adminProvider.provider.tsx","funder/components/grantCycles/GrantRequestForm/SupplementalQuestions/utils.ts","shared/util/toast.tsx","shared/util/questions.ts","shared/services/api-service/admin-api.service.ts","shared/services/api-service/focus-api.services.ts","funder/components/grantCycles/GrantRequestForm/utils.ts","shared/hooks/useQuery.hook.ts","common/components/JFCircularProgress/JFCircularProgress.component.tsx","funder/components/app/navbar/icons/BookmarkIcon.tsx","funder/components/app/navbar/icons/ProfileIcon.tsx","funder/components/app/navbar/icons/DiscoverIcon.tsx","shared/services/api-service/base-api.service.ts","shared/components/legacy-ui/ShadowBox.tsx","shared/components/legacy-ui/FocusIcon.tsx","shared/components/legacy-ui/LinkExternal.tsx","shared/components/legacy-ui/Markdown.js","shared/components/legacy-ui/LinkInternal.tsx","shared/components/avatarAndName/index.tsx","start/components/signin/PostLoginScreen.tsx","group/components/pageHeader/index.ts","shared/components/viewRfp/RfpSections/ApplicationSpecificQuestions.tsx","shared/components/newPublicProfile/about/ProfileDetails.tsx","shared/util/htmlToText.ts","shared/components/modals/NotificationRender.tsx","shared/providers/follows.provider.tsx","shared/enums/stripe/billing.enum.ts","shared/components/viewRfp/KeyDates.tsx","common/logo/MobileLogo.js","common/components/JFContainer/index.ts","shared/hooks/useFetch.ts","common/components/card/card.styled.ts","common/components/card/index.tsx","shared/util/util.ts","shared/providers/realtime.provider.tsx","common/util/sortObjects.js","funder/components/analyze/components/CheckInStatus/StatusMap.tsx","shared/components/newPublicProfile/funded/allOrganizations/styles.tsx","shared/components/newPublicProfile/funded/allOrganizations/OrganizationInfo.tsx","shared/components/newPublicProfile/funded/allOrganizations/BackToProfileButton.tsx","shared/components/newPublicProfile/funded/allOrganizations/index.tsx","common/components/avatar/avatar.styled.ts","common/components/avatar/index.tsx","common/components/JFBanner/index.ts","common/components/JFProfileImage/index.ts","common/components/link/link.styled.ts","common/components/link/index.tsx","common/components/socialMedia/socialMedia.styled.ts","common/Icon/CustomFacebookIcon.tsx","common/Icon/CustomLinkedinIcon.tsx","common/Icon/CustomGlobeIcon.tsx","common/components/socialMedia/index.tsx","shared/services/api-service/user-api.service.ts","shared/enums/notification-status.enum.ts","shared/enums/global/notification-reason.enum.ts","shared/components/modals/PopupUpdateRender.tsx","shared/components/modals/Notification.tsx","shared/enums/rfp-status.ts","shared/enums/applicaiton-status.enum.ts","start/components/signin/NewPasswordForm.tsx","start/components/signin/SignIn.tsx","start/components/signin/RequiredResetPassword.tsx","start/components/signin/JFForgotPassword.tsx","start/components/info/Info.js","start/components/notices/PrivacyNotice.js","start/components/notices/TermsOfUse.js","start/components/app/Nav.tsx","start/components/redirect/DynamicRedirect.tsx","start/components/unsubscribe-email/UnsubscribeEmailPage.styled.tsx","start/components/unsubscribe-email/UnsubscribeEmailPage.tsx","start/components/app/App.tsx","shared/components/viewRfp/PublicRFP.tsx","public/components/app/PublicMobileMenu.tsx","public/components/app/PublicNav.tsx","public/components/app/App.tsx","public/components/publicRoutes/PublicAppBar.styles.ts","public/components/publicRoutes/PublicAppBar.tsx","shared/components/customPublicProfile/header/Header.tsx","shared/components/customPublicProfile/amountCard/AmountCard.tsx","shared/components/customPublicProfile/profileFunding/ProfileFunding.tsx","shared/components/customPublicProfile/bluredInfo/BluredInfo.tsx","shared/components/customPublicProfile/fundedTabContent/FundedTabContent.tsx","shared/components/customPublicProfile/CustomPublicProfile.tsx","public/components/publicRoutes/PublicRoutes.tsx","shared/components/modals/Alert.tsx","admin/manage/user-logins/RegisterUserDetails.tsx","admin/manage/user-logins/RegisterFunderDetails.tsx","admin/manage/user-logins/UserRegister.tsx","App.tsx","index.tsx","shared/enums/grantee-status.enum.ts","shared/enums/bipoc.enum.ts","styles/jf.theme.ts","shared/components/profileCard/ProfileCard.styles.tsx","common/components/JFReadOnlyTextField/JFReadOnlyTextField.component.tsx","shared/enums/survey.enum.ts","shared/services/api-service/api.service.ts","funder/providers/UserProvider.tsx","shared/enums/user.enum.ts","shared/enums/user-status.ts","shared/services/hotjar-service/hotjar.service.ts","shared/components/newPublicProfile/funded/profileDrawer/styles.tsx","shared/enums/commitment.enum.ts"],"names":["PublicAPIService","funderSlug","slug","signal","api","get","this","baseRoute","data","getFunderBySlug","getFundedTabBySlug","pagination","_pagination$offset","_pagination$limit","params","offset","limit","sortFields","useCancellableEffect","effect","deps","useEffect","abortController","AbortController","callbackCleanup","abort","ProposalStatus","ProposalScope","EProfileType","BookmarkEntityType","formatDate","input","arguments","length","undefined","formatOption","format","Date","formatDateYMD","fullName","_ref","first_name","last_name","filter","v","join","formatString","date","formatUtcDate","formatInTimeZone","formatDatePSTAndEST","utcDate","DateTime","fromISO","zone","pstDate","setZone","estDate","formattedDate","toFormat","formattedPST","formattedEST","formatNumberWithCommas","number","toLocaleString","RfpService","list","getRfpsWithInvitationStatus","funderId","granteeId","_response$data","bulkInviteToRfp","rfpIds","post","undoInviteToRfp","listCurrent","inviteOnly","endOfDay","endOfToday","startOfDay","startOfToday","invite","announcement_date","toISOString","deadline_date","status","RFPStatus","APPROVED","getAllFunderRfps","getById","id","update","cycleId","rfp","patch","create","duplicate","createInvitation","grantCycleId","payload","grantee_id","rfp_id","delete","deleteInvitation","invitationId","getByFunderGroupId","getRfpsForScoring","options","getRfpScoringInfo","confirmEligibility","getRfpSummary","res","e","console","error","Logo","props","history","useHistory","_jsx","style","children","src","img","height","width","alt","cursor","marginRight","marginLeft","mlf","onClick","push","to","Format","LoadingPage","message","className","_jsxs","Box","textAlign","m","maxWidth","Typography","color","fontSize","paragraph","mt","CircularProgress","Scope","NotFoundPage","_Fragment","PageHeader","crumbs","text","link","mx","p","variant","Button","type","_hsq","window","HubspotService","constructor","hubSpotEvents","recordPageView","identifyUser","email","FunderService","getFundersByEmail","userEmail","Promise","async","resolve","reject","adminList","query","baseUrl","rows","discover","listNameWithId","listByName","config","getContextFunder","getNetworks","getAdminNetworks","entityId","getMembers","funder","put","getCampaignById","getFundingById","funder_id","addFunderRole","user_id","role_id","removeFunderRole","portalReport","getFundedTab","getChartsStats","getSuggestedFunds","getFunderTags","body","addFunderTag","name","editFunderTag","tag_id","archiveFunderTag","activateFunderTag","constants","rowsPerPage","adminRowsPerPage","scopes","value","urlRegex","emailRegex","taxIdRegex","onlyNumericRegex","isDevMode","process","MAX_TAG_CHARACTERS","GranteeAPIService","getTable","findByName","findByManyParams","queryParams","findApplicantNames","getDrafts","rfpId","getFocus","activeContacts","grantee","getStates","getInvitation","searchByMail","states","regions","metros","scales","strategies","communities","focusAreas","key","component","viewBox","d","clipPath","cx","cy","r","fill","imagePath","transform","t1b","Object","values","a","urgents","sortByProperty","formats","check","online","stock","ACH","wire","other","BookmarkService","getCount","getCommonApps","getFunders","ProposalUrgentNeed","GranteeContext","createContext","grantees","selectGrantee","requestFundeesUpdate","user","selectRfp","setGrantee","hasRole","role","useGranteeContext","useContext","UserProvider","setGrantees","useState","setUser","updateFundees","setUpdate","setRfp","associations","setAssociations","UserAuthService","verifyLogin","then","_loginVerification$us","userId","loginVerification","hotjarService","getAssociations","userAssociations","hasGranteeAssociations","hasFunderAssociations","funders","UserService","jfUser","response","catch","err","Provider","newGrantee","newRfp","_user$granteeUsers","granteeUsers","some","userRole","FetchPage","renderSuccess","url","loadingFallback","renderError","loading","useFetch","TaxStatusId","TaxStatusOptions","entries","isNaN","Number","map","_ref2","label","TaxStatusObj","_ref3","reduce","acc","_ref4","_ref5","_ref6","DialogContext","useDialog","context","Error","DialogProvider","dialogState","setDialogState","isLoading","isSuccess","onCloseSuccess","showLoading","useCallback","showSuccess","onClose","closeDialog","Dialog","disableEscapeKeyDown","open","_event","reason","sx","zIndex","DialogContent","padding","display","flexDirection","alignItems","justifyContent","minWidth","Grid","container","spacing","paddingRight","paddingLeft","item","xs","size","whiteSpace","fontWeight","marginTop","DialogActions","ProfileCard","_profile$funder","_profile$granteeBookm","_profile$granteeBookm2","_profile$funder2","_profile$funder2$fund","_profile$funder2$fund2","_profile$funder4","_profile$granteeFocus","_profile$fundedBy","profile","profileType","isAdmin","customId","fundEventName","cardEventName","openDetails","showFunders","isGrantee","GRANTEE","isPublished","refreshBookmarkCount","loginFunder","useFunderContext","alertState","showAlert","useMessagingContext","bookmarkId","setBookmarkId","granteeBookmarks","funderBookmarks","fundedBy","setFundedBy","navigateToGrantee","eventName","_profile$funder3","gtag","profile_id","user_name","formatUserName","redirectUri","getProfileRedirectUri","getFunderInfo","_profile$commitments","commitments","log","commitment","_commitment$funder2","_commitment$funder3","_commitment$funder4","_commitment$funder","logo","amount","Card","paddingX","paddingY","ProfileCardWrapper","paddingBottom","cardPaddingLeft","ProfileCardTitleAvatar","logoUrl","charAt","toUpperCase","ml","ProfileCardTitle","title","flexWrap","ProfileTypeTag","types","getProfileTypes","Tooltip","IconButton","event","stopPropagation","isBookmarked","updatedBookmark","bookmark_target_id","bookmark_type","FUNDER","severity","disabled","BookmarkIcon","filled","ProfileCardDescriptionWrapper","ProfileCardDescription","htmlToText","description","ProfileCardFocusesWrapper","granteeFocuses","granteeFocus","FocusIcon","focus","bipocLed","BipocLed","YES","bipoc","ProfileCardDividiver","marginY","mb","minHeight","count","gap","FundersAvatarGroup","total","max","slice","fundedByItem","_fundedByItem$logo","Avatar","FundButton","ProposalAPIService","getByGrantee","getLegacyProposals","proposalsOnly","editProposal","proposal","proposalStatus","getDocument","responseType","URL","createObjectURL","Blob","document","createElement","href","setAttribute","now","appendChild","click","removeChild","transfer","proposalId","orgId","getPrivateTab","getCommonAppProposal","identifyUserWithAppcues","roles","_funder$grantee","Appcues","identify","display_name","funder_name","is_admin","grantee_name","service_level","groupWithAppcues","group","group_id","group_name","group_service_level","group_created_at","created_at","group_type","trackWithAppcues","track","route","article","StyledTooltip","styled","TooltipCore","arrow","tooltip","backgroundColor","rest","placement","ScrollToTop","pathname","useLocation","scrollTo","fundingCommitmentVisibilityEnum","FunderMemberAssociation","FunderStatus","FunderServiceLevel","FunderUserRole","FundPriorities","FundGrantCategories","FundDecisionStructure","FundType","CategoryOfFunding","ProposalSummaryFrequency","EnumInterpreter","instanceEnumMap","enumMap","interpret","interpretable","socialMedia","twitter","facebook","instagram","linkedin","SocialIcon","classes","svgIcon","socialContainer","SocialBar","infoJustfundUs","textDecoration","questionsComments","marginBottom","terms","fontFamily","lineHeight","privacy","boxStyleL1","borderTop","MarginTop","boxStyleL2","boxStyleL3","body2","slash","Footer","location","startsWith","pt","Link","Loading","justifyItems","JFCircularProgress","paper","position","top","left","boxShadow","theme","shadows","border","textField","borderRadius","alertStyles","alert","transition","alertTitle","getPositionStyles","right","bottom","ProfileDrawer","entity","funderName","mission","team_description","detail","CustomDrawer","anchor","DrawerBox","TitleContainer","CloseButton","Container","rowSpacing","InfoContainer","CustomLink","JFReadOnlyTextField","isHtml","Array","isArray","proposals","_token","token","localStorage","setItem","storageKey","removeItem","getItem","refreshToken","refreshTokenKey","parsedToken","header","signature","split","part","idx","JSON","parse","atob","login","password","_res$data","_res$data2","exchangeToken","pendingRefresh","headers","attempts","exc","_isAxiosError$respons","isAxiosError","logout","sendPasswordReset","resetPassword","tokenIsExpired","iatUnixMillis","parseInt","iat","fourHoursAfterCreation","getTime","expUnixMillis","exp","earliestExpiration","getEntity","entityType","entityTypeKey","entityIdKey","setEntity","shouldRedirect","newToken","replace","origin","encodeURIComponent","search","unSubscribeEmailFrequencyByToken","RubricScoreStatus","ApplicationScoringStatus","GrantCycleScoringStatus","EUpdateScorersAction","AVG_SCORE_FILTER","ReviewersInfoTooltipSteps","ScoringAdditionalFilters","typeStyles","Nonprofit","JustFunder","Fund","Project","Beta","StyledChip","Chip","getChipStyles","index","_profile$detail","_profile$detail2","_profile$detail3","tax_status_id","fund","announcementTip","deadlineTip","decisionsTip","requiredErrorMessage","KeyDates","TIMEZONE","timeConstraints","timeZone","announcementTime","deadlineTime","StyledBox","PreviewTab","ApplyButton","letterSpacing","MainContainer","margin","CopyPublicLinkButton","textTransform","BottomSpacedText","StyledList","List","listStyleType","StyledListItem","ListItem","GrantCycleType","GrantCycleSections","borderBottom","align","Breadcrumbs","separator","LinkInternal","defaultContext","selectUser","adminRfp","AdminContext","useAdminContext","AdminProvider","selected","getJSONArr","result","getJSONObj","obj","getIsEqualObjs","objA","objB","ToastContent","dataTestId","commonToastOptions","icon","closeButton","hideProgressBar","autoClose","closeOnClick","pauseOnHover","draggable","progress","Bounce","successToast","toast","success","errorToast","SUPPLEMENTARY_QUESTIONS","QUESTION_PAYLOAD","QUESTION_DESCRIPTION","SurveyQuestionGetter","composeQuestion","questions","current","formQ","currentQ","q","SurveyQuestionType","MULTIPLE","stringify","parsePayload","OPEN","requireQuestion","is_required","composeSupplementaryQuestions","formData","rawToUpsert","find","c","toUpsert","keys","question","forEach","deleteQuestion","isEmptyOrSpaces","str","trim","hasEmptyQuestions","descriptionError","optionError","SINGLE","parsedOptions","opt","hasEmptyOptions","AdminAPIService","BaseApiService","order","getUsersReport","where","getGranteeReport","queryEvents","queryCommitments","queryProposals","getGrantCycleList","getFunderReport","getFunderList","adminFunderCSV","adminCommitCSV","getRfpNotificationsReportByDateCSV","from","getCsv","getRfpNotificationsReportByRfpCSV","FocusApiServices","allowedServiceLevels","Standard","Institution","FullService","Enterprise","Premium","Basic","Utils","allowedCheckInFeatures","level","includes","getRfpType","watchedData","_Number","_watchedData$type","shouldHandleRfpInvitations","hasInvitations","hasRfpInvitations","_watchedData$invitati","_rfp$invitations","invitations","INVITATION_ONLY","getRequiredResources","attachments","defaultResources","attachment_confirm","getNotificationsEnabled","defaultEnabled","notifications_enabled","getQuestions","rfpSurveyQuestions","getChangedField","field","_watchedData$field","useQuery","React","useMemo","URLSearchParams","useStyles","makeStyles","createStyles","loader","borderStyle","animation","radius","styles","grey","xmlns","stroke","strokeLinecap","strokeLinejoin","ProfileIcon","strokeWidth","DiscoverIcon","handleObjectUrl","objectUrl","fileName","postCsv","ShadowBox","t","LinkExternal","underline","target","rel","LinkRenderer","Markdown","StyledReactMarkdown","renderers","ReactMarkdown","RRLink","AvatarAndName","shortProfile","avatarSize","redirect","columnSpacing","substring","noWrap","handleOnClick","PostLoginScreen","_associations$funders","_associations$grantee","interactionChoice","setOpen","selectFunder","updateEntity","toString","userResponse","userAssociation","associationCount","gotoDefaultLocation","float","CloseIcon","sm","f","OrgStatus","ARCHIVED","UserEntityType","g","StyledOptionListItem","StyledOptionList","renderQuestionOptions","parsedPayload","dense","option","CheckBoxOutlineBlankIcon","ListItemText","primary","renderQuestionListItem","processHtmlWithAsterisk","ApplicationSpecificQuestions","surveyQuestions","ProfileDetails","_granteeContacts$0$co","_granteeContacts$","_location$state","isPublicProfile","showDescription","setShowDescription","showMoreDescButton","setShowMoreDescButton","based_in","basedIn","displayName","established","granteeContacts","contact","scope","summary","primaryContact","contactCheck","md","lg","readMoreDesc","string","maxWords","array","wordCount","newString","splice","action","ArrowDropUpIcon","ArrowDropDownIcon","getScope","state","phone","html","tempDiv","innerHTML","textContent","innerText","decode","NotificationRender","notificationState","handleClose","removeCancelBtn","customBtnText","customComponent","Modal","background","InfoIcon","verticalAlign","Divider","px","pb","FollowsContext","follows","followEntity","_","unfollowEntity","hydrate","useFollowsContext","FollowsProvider","setFollows","setLoading","getFollowing","finally","follow","entity_id","entity_type","BillingStatus","Map","DRAFT","PAID","UNCOLLECTABLE","VOID","fontSizeFix","KeyDateItem","dateString","isNewDate","dateFormat","rolling_cycle","key_dates","new_deadline_date","decision_date","utcToZonedTime","new_decision_date","keyDates","DOMPurify","sanitize","dangerouslySetInnerHTML","__html","MobileLogo","JFContainer","shouldForwardProp","prop","fullScreen","breakpoints","down","UseFetchApiRequests","setData","setError","granteeContext","useParams","loadData","_granteeContext$grant","promise","manageUsers","manageRfps","getOneRfp","manageProposals","getOneProposal","getOneFunder","getOneUser","getOneGrantee","apiCall","getStatusColor","CardContentWrapper","paddingTop","CardWrapper","propName","withshadow","palette","common","white","borderLeft","overflow","CardLeftBorder","borderTopLeftRadius","borderBottomLeftRadius","maskedValue","mask","IMask","createMask","formatMoney","blocks","num","thousandsSeparator","formatCurrencyInput","showDollarSign","signed","scale","padFractionalZeros","normalizeZeros","radix","mapToRadix","min","maxCharacters","dollarFormatter","dollarAmount","maximumFractionDigits","Intl","NumberFormat","currency","getTaxStatus","checkForPrimary","UMBRELLA_MEMBER","COLLABORATIVE_MEMBER","forceFalse","_grantee$granteeConta","enumToList","enumList","val","scopeObj","NATIONAL","STATE","REGIONAL","LOCAL","NONE","supportObj","ECommitmentReason","GENERAL","OTHER","PROGRAM_SUPPORT","getCommitmentSupport","getUniques","arr","Set","getProposalStatus","Active","Archived","Draft","Active_Draft","Deleted","userStatusObj","UserStatus","ACTIVE","INACTIVE","UNREGISTERED","SUSPENDED","DELETED","INVITED","getUserStatus","getApplicationStatus","ApplicationStatus","AWARDED","PENDING","REJECTED","getApplicationStatusForApplicant","getInvitationStatusFromApplication","submittedStatus","getApplicationFundingStatus","getGrantCycleScoringStatus","IN_REVIEW","urgentNeedObj","COVID_19","ABORTION_RIGHTS","REFUGEE_RESETTLEMENT","getUrgentNeed","urgentNeed","Individual","memberObj","COLLABORATIVE_LEAD","UMBRELLA_LEAD","getFunderMemberType","memberAssociation","paymentType","CHECK","ONLINE","STOCK","WIRE","rfpStatusObj","SUBMITTED","getRFPStatus","rfpStatus","composeTaxStatus","cycle","taxStatus","findTaxStatus","_cycle$rfpTaxStatuses","rfpTaxStatuses","_findTaxStatus","Other","remove","checkRfpStatus","today","parseDate","dateStr","deleted_at","RFPStatusLabel","deadlineDate","CLOSED","announcementDate","filterComponentCheck","_entity$focuses","_entity$granteeStrate","_entity$granteeCommun","bipoc_led","focuses","granteeStrategies","granteeCommunities","granteeStates","determineDetails","fundPriorities","grantCategories","fundCategories","annual_grant_total","decisionStructures","typeOfFunds","average_grant_size","renderSelections","selectedIds","selectableObjects","selection","renderScopes","formatStates","defineProperty","getOwnPropertyDescriptor","scrollbarOverride","createTheme","sortAToZ","sort","b","sortHighToLow","sortComittedDate","committed","valueOf","splitArray","addPrefixToObjectProps","prefix","newObject","renderAttachment","resource","attachment","_attachment$ProposalR","rfp_resource_id","ProposalResource","checkGranteeProfile","_grantee$location","_grantee$location2","_grantee$location3","_grantee$granteeConta2","_grantee$granteeConta3","_grantee$granteeConta4","_grantee$granteeConta5","_grantee$granteeConta6","_grantee$granteeConta7","_grantee$granteeConta8","_grantee$granteeConta9","_grantee$granteeConta10","_grantee$granteeConta11","_grantee$granteeConta12","_grantee$granteeConta13","_grantee$taxStatus","_grantee$checkLocatio","_grantee$checkLocatio2","_grantee$checkLocatio3","_grantee$checkLocatio4","reqGranteeModel","country","country_alpha_2","street","address1","stateOrTerritory","city","orgDescription","teamDescription","orgContactFirstName","orgContactLastName","orgContact","orgRole","annualBudget","annual_budget","fiscalYearStart","fiscal_year_start","fiscalYearEnd","fiscal_year_end","tax_id","checkRecipient","check_recipient","checkCountry","checkLocation","checkStreet","checkStateOrTerritory","checkCity","isInteger","getBipocValue","NOTSURE","getBipocType","NO","sortByBipocType","items","getGranteePrimaryContact","_object$contact","object","getPrimaryContactFromGrantee","firstName","lastName","extension","span","getCheckInTypeText","_statusMap$status","statusMap","getCharacterCount","isTaxStatusUpdated","updatedStatus","_rfp$rfpTaxStatuses","prevStatus","updatedDetail","addedTaxStatus","shouldAddAsterisk","doc","DOMParser","parseFromString","findLastTextNode","node","_node$nodeValue","nodeType","Node","TEXT_NODE","nodeValue","i","childNodes","childNode","found","lastTextNode","areSameDates","dateA","dateB","cleanIndentHTML","match","RealtimeContext","socketIo","joinRooms","leaveRooms","joinedRooms","useRealtimeContext","RealtimeProvider","userConnected","setUserConnected","setSocketIo","useRef","disconnect","socketIOConn","io","auth","transports","on","emit","rooms","notJoinedRooms","room","notLeftRooms","property","ascending","indexOf","aa","bb","sortByNestedProperty","moment","isValid","sortDates","upperCase","sortStrings","traditionalBubleSorting","scheduled","StatusIcon","EventOutlined","iconProps","overdue","WarningAmber","done","Check","pending","PendingActions","default","BackButtonTitle","BackIcon","ArrowBack","maxHeight","jfTheme","secondary","light","ScrollableContainer","Drawer","InfiniteScroll","OrganizationInfo","Skeleton","BackToProfileButton","goBack","AllOrganizations","profileSlug","fundedOrganizations","setFundedOrganizations","setOffset","hasMore","setHasMore","drawerOpen","setDrawerOpen","setAmount","setFunderName","getOrganizations","fundedDataQuery","chartDataQuery","fundedData","chartData","all","totalFundedTab","dataLength","next","scrollableTarget","AvatarWrapper","JFBanner","borderRadiusTopOnly","objectFit","borderTopRightRadius","borderBottomRightRadius","JFProfileImage","hasSrc","borderWidth","borderColor","LinkWrapper","wordWrap","SocialMediaWrapper","iconsSize","CustomFacebookIcon","SvgIcon","CustomLinkedinIcon","CustomGlobeIcon","SocialMedia","linkedIn","website","renderSocialMediaLinks","validUrlTest","RegExp","customIcon","TwitterIcon","InstagramIcon","test","editUser","forcePasswordReset","checkEmail","register","getBookmarkedFunders","getSuggestedOrganizations","getSuggestedFunders","getSuggestedProfiles","NotificationStatus","NotificationReason","PopupUpdateRender","customTitle","disableEnforceFocus","outline","InfoOutlinedIcon","defaultNotificationState","toggleNotification","defaultAlertState","MessagingContext","notificationDispatch","alertDispatch","resetAlert","resetNotification","notificationReducer","renderType","UPDATE","RESET","alertReducer","NotificationProvider","_notificationState","useReducer","_alertState","showError","showWarning","showInfo","_ref7","_ref8","messagingState","Notification","customBtnFunc","BackdropClick","root","marginBlockEnd","labelLeft","resetHeading","redUnderline","passwordMessage","NewPassword","resetType","setPassword","showPassword","handleClickShowPassword","handleMouseDownPassword","preventDefault","control","handleSubmit","formState","errors","useForm","mode","marginX","onSubmit","modified","handleOpen","Controller","defaultValue","rules","required","pattern","render","_errors$email","TextField","placeholder","helperText","InputProps","_errors$password","endAdornment","InputAdornment","onMouseDown","Visibility","VisibilityOff","block","signInButton","signIn","SignIn","setInteractionChoice","userName","setUserName","admin","setAdmin","redirectTo","completeSignIn","_userAssociations$fun","_userAssociations$fun2","_userAssociations$fun3","onclose","funderBillingStatus","billingEvents","subscription_status","getActiveAssociations","uncollectableStatus","CANCELED","force_password_reset","goToRoute","rootPath","_redirectTo$split","concat","verification","trimmedEmail","shouldFocus","fullWidth","autoFocus","autoCapitalize","autoCorrect","inputProps","fields","RequiredResetPassword","verifyId","setVerifyId","_response$user","caption","alignInfo","JFForgotPassword","handleErrorNotification","Info","setValue","Tabs","indicatorColor","onChange","newValue","Tab","TabPanelFunder","TabPanelGroup","PrivacyNotice","tc","TermsOfUse","StyledAppBar","webkitBoxShadow","mozBoxShadow","StyledToolbar","Nav","showSignIn","Fragment","AppBar","Toolbar","flex","DynamicRedirect","toLowerCase","Root","EmailText","MessageText","UnsubscribeText","StyledButton","UnsubscribeEmailPage","unsubscribe","handleManagePreference","App","shouldShowFooter","StyledEngineProvider","injectFirst","ThemeProvider","CssBaseline","flexGrow","flexShrink","Switch","Route","exact","path","boxPadding","applyBox","infoBox","warning","bold","alignLeft","previewTab","commonQuestionsStyle","PublicRfp","DisplayRfp","_rfp$funder","_rfp$rfpContact","aboutRfp","about","application","ADD_ATTR","eligibility","grantAwardRange","grant_award_range","requiredResources","rfpContact","currentDate","rfpDeadlineDate","rfpAnnouncementDate","bgcolor","page","source","pl","gutterBottom","typographyStyle","btnRight","listItem","PublicMobileMenu","mobileOpen","Ul","flexFlow","listStyle","DrawerHeader","mixins","toolbar","typographyButtonStyle","linkStyle","linkColor","styledNav","PublicNav","mobileMenuOpen","setMobileMenuOpen","onMenuMobileClick","StyledMobileBar","div","transformOrigin","StyledMobileLogo","displayPrint","MenuIcon","HelpIcon","NavbarBox","NavMenuLink","MenuLabel","content","SignInSignUpLink","StyledDivider","StyledDrawer","boxSizing","DrawerMenuLink","isBold","PublicAppBar","anchorEl","setAnchorEl","subMenuIndex","setSubMenuIndex","setMobileOpen","mobileDisplay","handleMouseEnter","currentTarget","handleMouseLeave","NAV_ITEMS","renderNavItems","onMouseEnter","onMouseLeave","as","Menu","keepMounted","subIndex","handleDrawerToggle","prevState","renderDrawer","py","disablePadding","LoginIcon","PersonAddAltIcon","orientation","flexItem","edge","ModalProps","Header","_entity$hero","_entity$logo","bannerImage","hero","logoImage","logo_url","alignContent","bipocImage","toSorted","_a$FunderFocus","_b$FunderFocus","FunderFocus","AmountCard","Icon","ProfileFunding","setIsOrganizationsModalOpen","funded","setFunded","renderRecentlyFunded","_profile$funder2$logo","isFunder","organization","sortBy","sortDir","direction","totalFunded","RequestQuoteOutlinedIcon","VerifiedOutlinedIcon","endIcon","OpenInNewIcon","BluredInfo","selectedTab","backgroundImage","backgroundRepeat","GroupsIcon","FundedTabContent","profileName","CustomPublicProfile","setIsPublicProfile","setIsLoading","setSelectedTab","isEntityEmpty","navigateToAllOrganizations","TabContext","TabList","tabHandler","TabPanel","PublicRoutes","AlertComponent","show","setShow","shouldShow","setTimeout","Alert","AlertTitle","RegisterUserDetails","emailError","useFormContext","_errors$first_name","tabIndex","_errors$last_name","role_title","_errors$role_title","_errors$phone","masked","RegisterFunderDetails","_user$funders","setFocusAreas","urgent","watch","sortFocus","userFocuses","userFocus","focus_id","isIndividualFunder","funderBankUrl","bank_url","blueinfo","Select","MenuItem","innerWidth","truncate","saveButton","logoImg","checkbox","alignSelf","UserRegister","Profile","userProfile","bankObj","requireBank","checked","membersLength","userObj","selectedPage","setSelectedPage","privacyPolicy","setPrivacyPolicy","setRequireBank","setEmailError","anonymousSetting","setAnonymousSetting","newUser","funderRoles","methods","shouldUnregister","bankField","setBankField","determineIndividual","_user$funders2","individualOnly","_retrieved$locations","_retrieved$locations2","_retrieved$locations3","retrieved","locations","location_id","getUser","_userData$userFocuses","userData","_focus$focus_id","checkFields","formEmail","validateEmail","UserVisibilityType","FALSE","FormProvider","Checkbox","trigger","LicenseInfo","setLicenseKey","Group","lazy","Funder","Admin","MUITheme","createMUITheme","generateClassName","rule","sheet","crypto","getRandomValues","Uint16Array","page_path","hash","page_search","page_hash","StylesProvider","MUIThemeProvider","LocalizationProvider","dateAdapter","AdapterDateFns","ToastContainer","Suspense","fallback","FunderProvider","Public","Start","ReactDOM","StrictMode","BrowserRouter","getElementById","ConsolidatedStatus","FunderStatusInterpreter","ACTIVE_UNPAID","ACTIVE_CANCELED","BipocLedOptions","main","contrastText","info","typography","h1","h2","h3","h4","h5","h6","body1","button","subTitle","components","MuiOutlinedInput","styleOverrides","MuiInputLabel","standard","MuiFilledInput","multiline","adornedStart","adornedEnd","MuiSelect","select","MuiButton","contained","outlined","containedPrimary","containedSecondary","outlinedSecondary","MuiStepIcon","MuiAppBar","colorPrimary","MuiCard","MuiTypography","defaultProps","MuiCssBaseline","commonAvatarProps","AvatarGroup","StyledDiv","htmlValue","processedHtmlValue","axios","defaults","baseURL","interceptors","use","timeout","request","_config$url","_config$url2","newConfig","Authorization","FunderContext","markFundingPermissions","discoverProposalsPermissions","bookmarkCount","isScoreManager","hasScoringPermissions","isIndividualFindFund","hasTempManPermissions","hasAllowedCheckIn","memberships","setMemberships","allowedScoringAndTempManServiceLevels","setBookmarkCount","setFunder","bookmarkChange","initializeContext","newFunder","scoringAndTempManEnabled","funderUserRole","_user$funderRoles","associationsResponse","isEmpty","_user$funderRoles4","_funder$grantee2","_funder$grantee3","searchList","MARK_FUNDING","DISCOVER_PROPOSALS","MANAGE_PROFILE","MANAGE_USERS","MANAGE_GRANTS","exists","roleActions","marking_funding","manage_profile","manage_users","manage_grants","matchingRole","bookmarkTypes","PROPOSAL","COMMON_APPLICATION","_user$funderRoles2","markFunding","_user$funderRoles3","discoverProposals","hasScoring","hasTemplateManagement","hotjarClient","hj","_userId","updateUserAttributes","attributes","user_type_grantee","user_type_funder","Close","EFundOrigin","ECheckInStatus"],"mappings":"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","file":"static/js/main.17620c71.chunk.js","sourcesContent":["import { AxiosRequestConfig } from \"axios\";\nimport { api } from \"./api.service\";\nimport { IProfile } from \"../../interfaces/IProfile\";\nimport { IPaginationRequest } from \"../../interfaces/IPaginationRequest\";\n\nexport class PublicAPIService {\n private static baseRoute = '/api/public'\n\n // can make signal required at a different point - few different spots in the app that use this\n public static async funderSlug(slug: string, signal: AxiosRequestConfig): Promise<any> {\n const res = await api.get(`${this.baseRoute}/${slug}`, { ...signal })\n return res.data as any;\n }\n\n public static async getFunderBySlug(slug: string, signal: AxiosRequestConfig): Promise<any> {\n const res = await api.get(`${this.baseRoute}/funder?slug=${slug}`, { ...signal })\n return res.data;\n }\n\n public static async getFundedTabBySlug(slug: string, pagination?: IPaginationRequest): Promise<IProfile[]> {\n let params: AxiosRequestConfig['params'] = {\n offset: pagination?.offset ?? 0,\n limit: pagination?.limit ?? 10\n };\n if(pagination?.sortFields) {\n params.sortFields = pagination.sortFields;\n }\n\n const res = await api.get(`${this.baseRoute}/funded-tab?slug=${slug}`, { params });\n return res.data as IProfile[];\n }\n\n}","import React, { useEffect } from \"react\";\n\n/*\n\tThis hook can be used without change to the useEffect implementation.\n\tProper use of the hook is intended to account for components unmounting\n\tafter an effect has been initiated. Rather than an empty argument in the\n\teffect callback, useCancellableEffect passes an AbortSignal object when executing\n\tthe callback. This AbortSignal can be used in Axios ajax calls as the value\n\tfor the `signal` property on the AxiosRequestConfig object. API calls that are\n\tmade with this configuration will be canceled if the component unmounts before\n\tthe request returns fully from the server.\n*/\n\ndeclare const UNDEFINED_VOID_ONLY: unique symbol;\n// Destructors are only allowed to return void.\ntype Destructor = () => void | { [UNDEFINED_VOID_ONLY]: never };\ntype cancellableEffectCallback = (signal: AbortSignal) => void | Destructor;\n\nexport const useCancellableEffect = (effect: cancellableEffectCallback, deps: React.DependencyList | undefined) => {\n useEffect(() => {\n const abortController = new AbortController();\n const signal = abortController.signal;\n\n const callbackCleanup = effect(signal);\n\n return () => {\n abortController.abort();\n if (callbackCleanup) callbackCleanup();\n };\n }, deps);\n};\n","export enum ProposalStatus {\n Active = 0,\n Draft = 1,\n Archived = 2,\n // ACTIVE_DRAFT is only for 'option 2' on the Apply to an RFP modal. \n // needed for permissions on portal. \n Active_Draft = 3,\n Deleted = 4,\n}\n\nexport enum ProposalScope {\n NATIONAL = 1,\n REGIONAL = 2,\n STATE = 3,\n LOCAL = 4\n}\n","export enum EProfileType {\n BOTH = 1,\n FUNDER = 2,\n GRANTEE = 3,\n NON_PROFIT = 4,\n FUND = 5,\n}\n","export enum BookmarkEntityType {\n FUNDER = 1,\n GRANTEE = 2,\n PROPOSAL = 3,\n COMMON_APPLICATION = 4\n}","import { format } from 'date-fns';\nimport { formatInTimeZone } from 'date-fns-tz';\nimport { DateTime } from 'luxon';\n\nexport const formatDate = (input = '', formatOption = 'MM/dd/yyyy') => {\n if (!input) return input;\n return format(new Date(input), formatOption);\n};\n\nexport const formatDateYMD = (input = '', formatOption = 'yyyy/MM/dd') => {\n if (!input) return input;\n return format(new Date(input), formatOption);\n};\n\nexport const fullName = ({ first_name, last_name }: any) => {\n return [first_name, last_name].filter((v) => !!v).join(' ');\n};\n\nexport const formatString = (\n date: Date | number,\n formatOption = 'MM/dd/yyyy'\n) => format(date, formatOption);\n\nexport const formatUtcDate = (input = '', formatOption = 'MM/dd/yyyy') => {\n if (!input) return input;\n return formatInTimeZone(new Date(input), 'utc', formatOption);\n};\n\nexport const formatDatePSTAndEST = (date: string) => {\n const utcDate = DateTime.fromISO(date, { zone: 'utc' });\n const pstDate = utcDate.setZone('America/Los_Angeles');\n const estDate = utcDate.setZone('America/New_York');\n\n const formattedDate = pstDate.toFormat('MM/dd/yyyy');\n const formattedPST = pstDate.toFormat(\"h:mm a 'PST'\");\n const formattedEST = estDate.toFormat(\"h:mm a 'EST'\");\n\n return {\n formattedDate,\n formattedPST,\n formattedEST\n };\n};\n\nexport const formatNumberWithCommas = (number: number): string => {\n return number.toLocaleString('en-US');\n};\n","import { AxiosRequestConfig, AxiosResponse } from 'axios';\nimport { endOfToday, startOfToday } from 'date-fns';\nimport { RFPStatus } from '../../enums/rfp-status';\nimport { GrantCycleScoringStatus } from '../../enums/scoring.enum';\nimport { ESortDirection } from '../../enums/sort-direction';\nimport {\n IListResults,\n PaginatedResult\n} from '../../interfaces/IGenerics.interfaces';\nimport {\n IInvitation,\n IRfpInvitationResponse\n} from '../../interfaces/IInvitation.interfaces';\nimport {\n IGetListRfpsResponse,\n IGetRfpsWithInvitationStatusResponse,\n IRfp\n} from '../../interfaces/IRfp.interfaces';\nimport { IRfpSummary } from '../../interfaces/IRfpSummary.interfaces';\nimport { IRfpScoringInfo } from '../../interfaces/IScoring.interfaces';\nimport { api } from './api.service';\n\ntype listCurrentParams = {\n rolling: boolean | null;\n granteeId: number | string | undefined;\n status?: RFPStatus;\n};\n\nexport type RfpsForScoringQueryParams = {\n offset?: number;\n limit?: number;\n sortBy?: string;\n sortDir?: ESortDirection;\n status?: GrantCycleScoringStatus;\n};\n\nexport class RfpService {\n private static baseRoute = '/api/rfp';\n\n public static async list(): Promise<IListResults<IRfp>> {\n const res = await api.get(`${this.baseRoute}/list`);\n return res.data as IListResults<IRfp>;\n }\n\n public static async getRfpsWithInvitationStatus(\n funderId: number,\n granteeId: number\n ): Promise<IRfp[]> {\n const response = await api.get<IGetRfpsWithInvitationStatusResponse>(\n `${this.baseRoute}/with-invitation-status`,\n {\n params: { funderId, granteeId }\n }\n );\n\n return response.data?.data;\n }\n\n public static async bulkInviteToRfp(\n granteeId: number,\n rfpIds: number[]\n ): Promise<AxiosResponse<IRfpInvitationResponse>> {\n const response = await api.post<IRfpInvitationResponse>(\n `${this.baseRoute}/bulk-invitations`,\n {\n granteeId,\n rfpIds\n }\n );\n\n return response;\n }\n\n public static async undoInviteToRfp(\n granteeId: number,\n rfpIds: number[]\n ): Promise<AxiosResponse<IRfpInvitationResponse>> {\n const response = await api.post<IRfpInvitationResponse>(\n `${this.baseRoute}/undo-bulk-invitations`,\n {\n granteeId,\n rfpIds\n }\n );\n\n return response;\n }\n\n public static async listCurrent(\n params: listCurrentParams,\n signal?: AxiosRequestConfig\n ): Promise<IGetListRfpsResponse> {\n const res = await api.get(`${this.baseRoute}/list-current`, { params });\n return res.data as IGetListRfpsResponse;\n }\n\n public static async inviteOnly(\n granteeId: string\n ): Promise<IListResults<IRfp>> {\n const endOfDay = endOfToday();\n const startOfDay = startOfToday();\n const res = await api.get(`${this.baseRoute}/list`, {\n params: {\n invite: granteeId,\n announcement_date: startOfDay.toISOString(),\n deadline_date: endOfDay.toISOString(),\n status: RFPStatus.APPROVED\n }\n });\n return res.data as IListResults<IRfp>;\n }\n\n public static async getAllFunderRfps(\n signal?: AxiosRequestConfig\n ): Promise<IRfp[]> {\n const res = await api.get(`${this.baseRoute}/funder`);\n return res.data as IRfp[];\n }\n\n public static async getById(\n id: number,\n signal?: AxiosRequestConfig\n ): Promise<IRfp> {\n const res = await api.get(`${this.baseRoute}/${id}`);\n return res.data as IRfp;\n }\n\n public static async update(\n cycleId: number,\n rfp: Partial<IRfp>\n ): Promise<IRfp> {\n const res = await api.patch(`${this.baseRoute}/${cycleId}`, {\n ...rfp\n });\n return res.data as IRfp;\n }\n\n public static async create(rfp: any): Promise<IRfp> {\n const res = await api.post(`${this.baseRoute}`, {\n ...rfp\n });\n return res.data as IRfp;\n }\n\n public static async duplicate(rfp: {\n id: number;\n funder_id: number;\n }): Promise<IRfp> {\n const res = await api.post(`${this.baseRoute}/duplicate`, {\n ...rfp\n });\n return res.data as IRfp;\n }\n\n public static async createInvitation(\n grantCycleId: number,\n granteeId: number\n ): Promise<IInvitation> {\n const payload = {\n grantee_id: granteeId,\n rfp_id: grantCycleId\n };\n const res = await api.post(`${this.baseRoute}/invitations`, payload);\n\n return res.data as IInvitation;\n }\n\n public static async delete(id: number): Promise<IRfp> {\n const res = await api.delete(`${this.baseRoute}/${id}`);\n return res.data as IRfp;\n }\n\n public static async deleteInvitation(\n invitationId: number\n ): Promise<{ deletedInvite: boolean }> {\n const res = await api.delete(\n `${this.baseRoute}/invitation/${invitationId}`\n );\n return res.data as { deletedInvite: boolean };\n }\n\n public static async getByFunderGroupId(id: number): Promise<IRfp[]> {\n const res = await api.get(`${this.baseRoute}/funder/${id}`);\n return res.data as IRfp[];\n }\n\n public static async getRfpsForScoring(\n options: AxiosRequestConfig = {}\n ): Promise<PaginatedResult<IRfp>> {\n const res = await api.get(`${this.baseRoute}/scoring`, options);\n return res.data as PaginatedResult<IRfp>;\n }\n\n public static async getRfpScoringInfo(id: number): Promise<IRfpScoringInfo> {\n const res = await api.get(`${this.baseRoute}/${id}/scoring`);\n return res.data as IRfpScoringInfo;\n }\n\n public static async confirmEligibility({\n granteeId,\n id\n }: {\n granteeId: number;\n id: number;\n }): Promise<IRfp> {\n const res = await api.post(`${this.baseRoute}/${id}/confirm-eligibility`, {\n granteeId\n });\n return res.data as IRfp; // TBD\n }\n\n public static async getRfpSummary(\n options: AxiosRequestConfig = {}\n ): Promise<PaginatedResult<IRfpSummary> | null> {\n try {\n const { data: res } = await api.get(\n `${this.baseRoute}/summary`, options\n );\n return res.data as PaginatedResult<IRfpSummary>;\n } catch (e) {\n console.error(e);\n return null;\n }\n }\n}\n","import { useHistory } from 'react-router-dom';\nexport const Logo = (props) => {\n const history = useHistory ();\n \n return (\n <div style={props.style}>\n <img\n src={ props.img }\n height='36px'\n width='auto'\n alt='JustFund logo'\n style={{ cursor: 'pointer', marginRight: '2em', marginLeft: props.mlf }}\n onClick={() => { history.push (props.to); }}\n />\n </div>\n );\n\n}\n","import { IBloatedGrantee, IProposal } from '.';\nimport { ECommitmentType, ECommitmentReason, EFundOrigin } from '../enums/commitment.enum';\nimport { IApplication } from './IApplications.interfaces';\nimport { IFunder, IFunderTag } from './IFunder';\nimport { IJFGridQuery } from './jf-grid.interface';\n\nexport interface ICommitment {\n total_funded: number;\n id: number;\n is_anonymous_to_funders: boolean;\n is_anonymous_to_grantee: boolean;\n grantee_id: number;\n grantee?: IBloatedGrantee;\n funder_id: number;\n amount: number;\n format: string;\n comment: string;\n application_id?: number;\n grant_type?: ECommitmentReason;\n project_purpose?: string;\n proposal_id?: number;\n creator_user_id: number;\n created_at: string;\n committed: string;\n paid?: string;\n type: ECommitmentType;\n origin?: EFundOrigin;\n modified_at: string;\n funder: IFunder;\n application: IApplication;\n proposal: IProposal | undefined;\n reason: ECommitmentReason;\n isNotifiable?: boolean;\n commitmentTag: IFunderTag[];\n}\n\nexport interface ICommitmentsQuery extends IJFGridQuery {}\n\nexport type CommitmentsResponse = {\n grantCycleCommitments: ICommitment[];\n networkCommitments: ICommitment[];\n};\n\nexport type OrgFundResponse = {\n orgFundCommitments: ICommitment[];\n};\n\nexport interface IFundCommitments {\n grantCycleCommitments?: ICommitment[];\n networkCommitments?: ICommitment[];\n orgFundCommitments?: ICommitment[];\n}\n\nexport enum Format {\n CHECK = 'check',\n ONLINE = 'online',\n STOCK = 'stock',\n ACH = 'ach',\n WIRE = 'wire',\n OTHER = 'other'\n}\n","import React from 'react';\nimport { Box, CircularProgress, Typography } from '@mui/material';\n\ninterface props {\n message: string;\n error?: Boolean;\n className?: string;\n}\n\nexport const LoadingPage = ({ message, error = false, className }: props) => (\n <Box textAlign='center' m='140px auto 0 auto' maxWidth='500px' className={className}>\n <Typography color='primary' style={{ fontSize: '2rem' }}>JustFund</Typography>\n <Box height='20px' />\n <Typography paragraph>{message}</Typography>\n { !error && (\n <Box mt='40px'>\n <CircularProgress />\n </Box>\n )}\n </Box>\n);\n","export enum Scope {\n NATIONAL = 1,\n REGIONAL = 2,\n STATE = 3,\n LOCAL = 4,\n NONE = 5\n}","import React from 'react';\nimport { useHistory } from 'react-router-dom';\nimport { Box, Button, Typography } from '@mui/material';\nimport { PageHeader } from '../../group/components/pageHeader';\n\n// Content displayed for 404\nexport const NotFoundPage = () => {\n const history = useHistory ();\n return (\n <>\n <PageHeader crumbs={[{ text: 'Home', link: '/o' }, { text: 'Page Not Found' }]} />\n <Box maxWidth='1024px' mx='auto' p='20px 4px'>\n <Typography variant='h1'>Page Not Found</Typography>\n <Box textAlign='center' mt='20px'>\n <Typography paragraph>Sorry, could not find that page for you.</Typography>\n <Button type='button' onClick={() => history.push ('/o/')}>\n HOME\n </Button>\n </Box>\n </Box>\n </>\n );\n};","type HubSpotEvents = (string | Record<string, string>)[][];\ndeclare global {\n\tinterface Window {\n\t\t_hsq: HubSpotEvents\n\t}\n}\n\nconst _hsq = window._hsq = window._hsq || [];\n\nclass HubSpotClient {\n\n constructor(private hubSpotEvents = _hsq) {}\n\n public recordPageView() {\n this.hubSpotEvents.push(['trackPageView']);\n }\n\n public identifyUser(email: string) {\n this.hubSpotEvents.push(['identify', { email }]);\n this.hubSpotEvents.push(['trackPageView']);\n }\n}\n\nexport const HubspotService = new HubSpotClient();\n","import { AxiosRequestConfig } from 'axios';\nimport { ICommitment, IGrantCycle } from '../../../interfaces';\nimport { ICreateFunder, IBloatedFunder, IFunderMembers, ILoginFunder, IFunderTagListResponse, IFunderTag, IFunderTagResponse } from '../../../interfaces/IFunder';\nimport { IPortalReport } from '../../../interfaces/IPortalReport.interface';\nimport { IUser, IFunderRole } from '../../../interfaces/IUser.interface';\nimport { api } from '../api.service';\nimport { IFunderChartStats } from '../../../interfaces/IFunderChartStats.interfaces';\nimport { IProfile } from '../../../interfaces/IProfile';\nimport { IPaginationRequest } from '../../../interfaces/IPaginationRequest';\n\ntype BasicFunder = {\n id: number,\n name: string\n};\n\ninterface IFundingInfo {\n commitments: ICommitment[],\n totalFunded: string,\n};\n\nexport class FunderService {\n\n private static baseUrl = '/api/funders';\n // funders = fundersJSON.default as IOldFunder[];\n // grantCycles = grantCyclesJSON.default as IOldGrantCycle[];\n // constructor() {}\n\n // TODO change return type to IFunder\n //getFunderPermissions\n //will need to update in case Funder/User does not have a 'ref'\n public static async getFundersByEmail(userEmail: string): Promise<IBloatedFunder[]> {\n return new Promise(async (resolve, reject) => {\n return resolve([]);\n });\n }\n\n /**\n * ONLY USED FOR ADMIN\n * @param query Query parameters\n * @returns List of IFunders\n */\n public static async adminList(query = {}): Promise<IBloatedFunder[]> {\n const res = await api.get(`${this.baseUrl}`, { params: query });\n return res.data.rows as IBloatedFunder[]\n }\n\n public static async discover(query = {}): Promise<IBloatedFunder[]> {\n // We use the discover route for the portal\n const res = await api.get(`${this.baseUrl}/discover`, { params: query });\n return res.data.rows as IBloatedFunder[]\n }\n\n public static async listNameWithId(): Promise<BasicFunder[]> {\n const res = await api.get(`${this.baseUrl}/basic-funder-list`);\n return res.data.rows as IBloatedFunder[]\n }\n\n public static async listByName(query = {}): Promise<IBloatedFunder[]> {\n const res = await api.get(`${this.baseUrl}`, { params: query });\n return res.data.rows as IBloatedFunder[]\n }\n\n public static async getById(id: number, config?: AxiosRequestConfig): Promise<IBloatedFunder> {\n const res = await api.get(`${this.baseUrl}/${id}`, config);\n return res.data as IBloatedFunder;\n }\n\n public static async getContextFunder(id: number, config?: AxiosRequestConfig): Promise<ILoginFunder> {\n const res = await api.get(`${this.baseUrl}/context/${id}`, config);\n return res.data as ILoginFunder;\n }\n\n public static async getNetworks(): Promise<IUser[]> {\n const res = await api.get(`${this.baseUrl}/network`);\n return res.data as IUser[];\n }\n\n public static async getAdminNetworks(entityId: number): Promise<IUser[]> {\n const res = await api.get(`${this.baseUrl}/network-admin`, { params: { entityId: entityId } });\n return res.data as IUser[];\n }\n\n public static async getMembers(entityId: number): Promise<IFunderMembers[]> {\n const res = await api.get(`${this.baseUrl}/members`, { params: { entityId: entityId } })\n return res.data as IFunderMembers[];\n }\n\n public static async update(id: number, funder: any): Promise<IBloatedFunder> {\n const res = await api.put(`${this.baseUrl}/${id}`, funder);\n return res.data as IBloatedFunder;\n }\n\n public static async create(funder: { funder: ICreateFunder }): Promise<ICreateFunder> {\n const res = await api.post(`${this.baseUrl}/`, funder);\n return res.data as ICreateFunder;\n }\n\n public static async getCampaignById(id: number): Promise<IGrantCycle> {\n return new Promise(resolve => {\n resolve({} as any);\n })\n }\n\n public static async getFundingById(funder_id: number): Promise<IFundingInfo> {\n const res = await api.get(`/api/analyze/funder/${funder_id}`);\n return res.data as IFundingInfo;\n }\n\n public static async addFunderRole(funder_id: number, user_id: number, role_id: number): Promise<IFunderRole> {\n const res = await api.post(`${this.baseUrl}/${funder_id}/role/${user_id}`, { role_id });\n return res.data as IFunderRole;\n }\n\n public static async removeFunderRole(funder_id: number, user_id: number, role_id: number): Promise<boolean> {\n const res = await api.delete(`${this.baseUrl}/${funder_id}/role/${user_id}/${role_id}`);\n return res.data as boolean;\n }\n\n public static async portalReport(): Promise<IPortalReport> {\n const res = await api.get(`/pages/funder/portal-report`);\n return res.data as IPortalReport;\n }\n\n public static async getFundedTab(id: number, pagination?: IPaginationRequest): Promise<IProfile[]> {\n let params: AxiosRequestConfig['params'] = {\n offset: pagination?.offset ?? 0,\n limit: pagination?.limit ?? 10\n };\n if (pagination?.sortFields) {\n params.sortFields = pagination.sortFields;\n }\n const res = await api.get(`/pages/funder/funded-tab/${id}`, { params });\n return res.data as IProfile[];\n }\n\n public static async getChartsStats(id: number): Promise<IFunderChartStats> {\n const res = await api.get(`${this.baseUrl}/${id}/chart-stats`);\n return res.data as IFunderChartStats;\n }\n\n public static async getSuggestedFunds(id: number): Promise<IProfile[]> {\n const res = await api.get(`${this.baseUrl}/${id}/suggested-funds`);\n return res.data as IProfile[]\n }\n\n public static async getFunderTags(\n id: number,\n body: any,\n options: AxiosRequestConfig = {}\n ): Promise<IFunderTagListResponse> {\n\n const res = await api.post(`${this.baseUrl}/${id}/tags/query`, body, options);\n return res.data as IFunderTagListResponse;\n }\n\n public static async addFunderTag(\n funder_id: number,\n name: string,\n ): Promise<IFunderTag> {\n const res = await api.post(`${this.baseUrl}/${funder_id}/tags`, { name });\n return res.data as IFunderTag;\n }\n\n public static async editFunderTag(\n funder_id: number,\n tag_id: number,\n name: string,\n ): Promise<IFunderTag> {\n const res = await api.patch(`${this.baseUrl}/${funder_id}/tags/${tag_id}`, { name });\n return res.data as IFunderTag;\n }\n\n\n public static async archiveFunderTag(\n funder_id: number,\n tag_id: number,\n ): Promise<string> {\n const res = await api.delete(`${this.baseUrl}/${funder_id}/tags/${tag_id}`);\n return res.data as string;\n }\n\n public static async activateFunderTag(\n funder_id: number,\n tag_id: number,\n ): Promise<IFunderTag> {\n const res = await api.patch(`${this.baseUrl}/${funder_id}/tags/${tag_id}/restore`);\n return res.data as IFunderTag;\n }\n\n}\n","export const constants = {\n rowsPerPage: 25,\n adminRowsPerPage: 50\n}\n\n// TODO - tie this into other parts of the app where we are declaring scope locally. \nexport const scopes =\n [\n { value: 1, name: 'National' },\n { value: 2, name: 'Regional' },\n { value: 3, name: 'State' },\n { value: 4, name: 'Local' },\n { value: 5, name: 'None' }\n ];\n\nexport const urlRegex = /(https?:\\/\\/(?:www\\.|(?!www))[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\\.[^\\s]{2,}|www\\.[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\\.[^\\s]{2,}|https?:\\/\\/(?:www\\.|(?!www))[a-zA-Z0-9]+\\.[^\\s]{2,}|www\\.[a-zA-Z0-9]+\\.[^\\s]{2,})/;\n\nexport const emailRegex = /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n\nexport const taxIdRegex = /^([07][1-7]|1[0-6]|2[0-7]|[35][0-9]|[468][0-8]|9[0-589])-?\\d{7}$/;\n\nexport const onlyNumericRegex = /^[0-9]*$/;\n\nexport const isDevMode = () => !process.env.REACT_APP_ENV || process.env.REACT_APP_ENV !== 'prod';\n\nexport const MAX_TAG_CHARACTERS = 60;","import { IFocus } from '../../interfaces/IFocus';\nimport {\n IBloatedGrantee,\n IGranteeContact,\n IGranteeCreate,\n IGranteeFindApplicantNames,\n IGranteeFindByName\n} from '../../interfaces/IGrantee';\nimport { api } from './api.service';\nimport { IContact } from '../../interfaces/IContact.interface';\nimport { AxiosRequestConfig } from 'axios';\nimport { IApplication } from '../../interfaces/IProposal';\n\nexport class GranteeAPIService {\n private static baseRoute = '/api/grantees';\n\n public static async get(\n options: AxiosRequestConfig\n ): Promise<IBloatedGrantee[]> {\n const res = await api.get(`${this.baseRoute}`, options);\n return res.data as IBloatedGrantee[];\n }\n\n public static async getTable(params?: any): Promise<IBloatedGrantee[]> {\n const res = await api.get(`${this.baseRoute}/manage`, { params });\n return res.data as IBloatedGrantee[];\n }\n\n public static async findByName(\n name?: string,\n options: AxiosRequestConfig = {}\n ): Promise<IGranteeFindByName[]> {\n options.params = { ...options.params, name };\n const res = await api.get(`${this.baseRoute}/search`, options);\n return res.data as IGranteeFindByName[];\n }\n\n public static async findByManyParams(\n queryParams: {\n name?: string;\n fiscal_sponsor?: string;\n tax_id?: string;\n tax_status_id?: string;\n },\n options: AxiosRequestConfig = {}\n ): Promise<IGranteeFindByName[]> {\n options.params = { ...options.params, ...queryParams };\n const res = await api.get(`${this.baseRoute}/search`, options);\n return res.data as IGranteeFindByName[];\n }\n\n public static async findApplicantNames(\n name: string,\n options: AxiosRequestConfig = {}\n ): Promise<IGranteeFindApplicantNames> {\n options.params = { ...options.params, name };\n const res = await api.get(`${this.baseRoute}/names`, options);\n return res.data as IGranteeFindApplicantNames;\n }\n\n public static async getById(\n id: number,\n config?: AxiosRequestConfig\n ): Promise<IBloatedGrantee> {\n const res = await api.get(`${this.baseRoute}/${id}`, config);\n return res.data as IBloatedGrantee;\n }\n\n public static async getDrafts(\n rfpId: number,\n config?: AxiosRequestConfig\n ): Promise<IApplication[]> {\n const res = await api.get(`${this.baseRoute}/draft/${rfpId}`, config);\n return res.data;\n }\n\n public static async getFocus(config?: AxiosRequestConfig): Promise<IFocus[]> {\n const res = await api.get(`/api/focus`, config);\n return res.data as IFocus[];\n }\n\n public static async activeContacts(email: string): Promise<IContact> {\n const res = await api.get(`${this.baseRoute}/active/${email}`);\n return res.data as IContact;\n }\n\n public static async put(grantee: any, id: number): Promise<IBloatedGrantee> {\n const res = await api.put(`${this.baseRoute}/${id}`, grantee);\n return res.data as IBloatedGrantee;\n }\n\n public static async delete(id: string, email: string): Promise<IContact> {\n const res = await api.delete(`${this.baseRoute}/removeuser/${id}/${email}`);\n return res.data as IContact;\n }\n\n public static async getStates(): Promise<any> {\n const res = await api.get(`/api/states`);\n return res.data;\n }\n\n public static async post(grantee: IGranteeCreate): Promise<IBloatedGrantee> {\n const res = await api.post(`${this.baseRoute}/invite`, grantee);\n return res.data as IBloatedGrantee;\n }\n\n public static async getInvitation(rfpId: number): Promise<any> {\n const res = await api.get(`/api/rfp/${rfpId}/invitations`);\n return res.data;\n }\n\n public static async searchByMail(\n email: string,\n options: AxiosRequestConfig = {}\n ) {\n const res = await api.get(\n `${this.baseRoute}/grantee-by-email/${email}`,\n options\n );\n return res.data;\n }\n}\n","import { sortByProperty } from '../util/sortObjects';\nimport {\n ClimateSmall,\n CriminalSmall,\n DemocracySmall,\n DisabilitySmall,\n EconomicSmall,\n EducationSmall,\n EnvironmentSmall,\n EquitableSmall,\n FoodSmall,\n GenderSmall,\n HealthSmall,\n HousingSmall,\n HumanSmall,\n ImmigrationSmall,\n LgbtqSmall,\n MediaSmall,\n OtherSmall,\n RacialSmall,\n TransportSmall\n} from '../images';\n\nconst al = { value: 'AL', name: 'Alabama' };\nconst ak = { value: 'AK', name: 'Alaska' };\nconst as = { value: 'AS', name: 'American Samoa' };\nconst az = { value: 'AZ', name: 'Arizona' };\nconst ar = { value: 'AR', name: 'Arkansas' };\nconst ca = { value: 'CA', name: 'California' };\nconst co = { value: 'CO', name: 'Colorado' };\nconst ct = { value: 'CT', name: 'Connecticut' };\nconst de = { value: 'DE', name: 'Delaware' };\nconst dc = { value: 'DC', name: 'District of Columbia' };\nconst fl = { value: 'FL', name: 'Florida' };\nconst ga = { value: 'GA', name: 'Georgia' };\nconst gu = { value: 'GU', name: 'Guam' };\nconst hi = { value: 'HI', name: 'Hawaii' };\nconst ida = { value: 'ID', name: 'Idaho' };\nconst il = { value: 'IL', name: 'Illinois' };\nconst ind = { value: 'IN', name: 'Indiana' };\nconst ia = { value: 'IA', name: 'Iowa' };\nconst ks = { value: 'KS', name: 'Kansas' };\nconst ky = { value: 'KY', name: 'Kentucky' };\nconst la = { value: 'LA', name: 'Louisiana' };\nconst me = { value: 'ME', name: 'Maine' };\nconst md = { value: 'MD', name: 'Maryland' };\nconst ma = { value: 'MA', name: 'Massachusetts' };\nconst mi = { value: 'MI', name: 'Michigan' };\nconst mn = { value: 'MN', name: 'Minnesota' };\nconst ms = { value: 'MS', name: 'Mississippi' };\nconst mo = { value: 'MO', name: 'Missouri' };\nconst mt = { value: 'MT', name: 'Montana' };\nconst ne = { value: 'NE', name: 'Nebraska' };\nconst nv = { value: 'NV', name: 'Nevada' };\nconst nh = { value: 'NH', name: 'New Hampshire' };\nconst nj = { value: 'NJ', name: 'New Jersey' };\nconst nm = { value: 'NM', name: 'New Mexico' };\nconst ny = { value: 'NY', name: 'New York' };\nconst nc = { value: 'NC', name: 'North Carolina' };\nconst nd = { value: 'ND', name: 'North Dakota' };\nconst mp = { value: 'MP', name: 'Northern Mariana Islands' };\nconst oh = { value: 'OH', name: 'Ohio' };\nconst ok = { value: 'OK', name: 'Oklahoma' };\nconst or = { value: 'OR', name: 'Oregon' };\nconst pa = { value: 'PA', name: 'Pennsylvania' };\nconst pr = { value: 'PR', name: 'Puerto Rico' };\nconst ri = { value: 'RI', name: 'Rhode Island' };\nconst sc = { value: 'SC', name: 'South Carolina' };\nconst sd = { value: 'SD', name: 'South Dakota' };\nconst tn = { value: 'TN', name: 'Tennessee' };\nconst tx = { value: 'TX', name: 'Texas' };\nconst vi = { value: 'VI', name: 'US Virgin Islands' };\nconst ut = { value: 'UT', name: 'Utah' };\nconst vt = { value: 'VT', name: 'Vermont' };\nconst va = { value: 'VA', name: 'Virginia' };\nconst wa = { value: 'WA', name: 'Washington' };\nconst wv = { value: 'WV', name: 'West Virginia' };\nconst wi = { value: 'WI', name: 'Wisconsin' };\nconst wy = { value: 'WY', name: 'Wyoming' };\n\nexport const states = [al, ak, as, az, ar, ca, co, ct, de, dc, fl, ga, gu, hi, ida,\n il, ind, ia, ks, ky, la, me, md, ma, mi, mn, ms, mo, mt, ne, nv, nh, nj, nm,\n ny, nc, nd, mp, oh, ok, or, pa, pr, ri, sc, sd, tn, tx, vi, ut, vt, va, wa, wv, wi,\n wy];\n\nexport const regions = [\n { value: 1, name: 'West' },\n { value: 2, name: 'Midwest' },\n { value: 3, name: 'Northeast' },\n { value: 4, name: 'South' },\n { value: 5, name: 'US Territory' },\n];\n\nexport const metros = [\n { value: 1, name: 'Atlanta' },\n { value: 2, name: 'Los Angeles' },\n { value: 3, name: 'New York City' },\n { value: 4, name: 'San Francisco Bay Area' },\n];\n\nexport const scales = [\n { value: 0, name: 'National' },\n { value: 1, name: 'Regional' },\n { value: 2, name: 'State' },\n { value: 3, name: 'Local' },\n];\n\nexport const statuses = [\n { value: 'draft', name: 'Draft' },\n { value: 'nominee', name: 'Draft' },\n { value: 'pending', name: 'Active' },\n { value: 'active', name: 'Active' },\n { value: 'completed', name: 'Active' },\n { value: 'archived', name: 'Archived' },\n];\n\nexport const strategies = [\n { value: 1, name: 'Advocacy' },\n { value: 2, name: 'Art' },\n { value: 3, name: 'Base Building' },\n { value: 4, name: 'Capacity Building / Org Development' },\n { value: 5, name: 'Coalition Building' },\n { value: 6, name: 'Communications & Media' },\n { value: 7, name: 'Convening' },\n { value: 8, name: 'Culture' },\n { value: 9, name: 'Digital Organizing' },\n { value: 10, name: 'Direct Action' },\n { value: 11, name: 'Direct Service' },\n { value: 12, name: 'Education' },\n { value: 13, name: 'Healing / Restorative Justice' },\n { value: 14, name: 'Leadership Development' },\n { value: 15, name: 'Movement Building' },\n { value: 16, name: 'Mutual Aid' },\n { value: 17, name: 'Organizing' },\n { value: 18, name: 'Policy' },\n { value: 19, name: 'Research' },\n { value: 20, name: 'Social Enterprise' },\n { value: 21, name: 'Voter Registration / GOTV' },\n];\n\nexport const communities = [\n { value: 1, name: 'Asian or Asian American / AAPI' },\n { value: 2, name: 'Black' },\n { value: 3, name: 'Caribbean' },\n { value: 4, name: 'Immigrant' },\n { value: 5, name: 'Indigenous' },\n { value: 6, name: 'Jewish' },\n { value: 7, name: 'Latino / Latina / Latinx' },\n { value: 8, name: 'LGBTQ+' },\n { value: 9, name: 'Muslim' },\n { value: 10, name: 'People of African Descent' },\n { value: 11, name: 'People who are Justice-involved' },\n { value: 12, name: 'People who are Undocumented' },\n { value: 13, name: 'People with Disabilities' },\n { value: 14, name: 'Refugees' },\n { value: 15, name: 'Rural' },\n { value: 16, name: 'Seniors' },\n { value: 17, name: 'Veterans' },\n { value: 18, name: 'West Indian' },\n { value: 19, name: 'Women' },\n { value: 20, name: 'Workers' },\n { value: 21, name: 'Youth' },\n { value: 22, name: 'Youth: College' },\n { value: 23, name: 'Youth: High School' },\n { value: 24, name: 'Other' },\n];\n\ninterface FocusAreasData {\n [index: number]: {\n key: number;\n name: string;\n component: React.FC<{ width?: number | string, height?: number | string }>;\n imagePath: string;\n };\n}\n\nexport const focusAreas: FocusAreasData = {\n 1: { key: 1, name: 'Environmental Justice / Climate Justice / Nature', component: EnvironmentSmall, imagePath: '/images/icons/environment.svg' },\n 2: { key: 2, name: 'Criminal Justice', component: CriminalSmall, imagePath: '/images/icons/criminal_justice.svg' },\n 3: { key: 3, name: 'Education', component: EducationSmall, imagePath: '/images/icons/education.svg' },\n 4: { key: 4, name: 'Immigration', component: ImmigrationSmall, imagePath: '/images/icons/immigration.svg' },\n 5: { key: 5, name: 'LGBTQ+', component: LgbtqSmall, imagePath: '/images/icons/lgbtq.svg' },\n 6: { key: 6, name: 'Racial Justice', component: RacialSmall, imagePath: '/images/icons/racial_justice.svg' },\n 7: { key: 7, name: 'Economic Justice', component: EconomicSmall, imagePath: '/images/icons/economic_justice.svg' },\n 8: { key: 8, name: 'Democracy & Civic Engagement', component: DemocracySmall, imagePath: '/images/icons/democracy_civic.svg' },\n 9: { key: 9, name: 'Gender & Reproductive Justice', component: GenderSmall, imagePath: '/images/icons/gender_reproductive.svg' },\n 10: { key: 10, name: 'Healthcare / Wellness / Public Health', component: HealthSmall, imagePath: '/images/icons/healthcare.svg' },\n 11: { key: 11, name: 'Human Rights / Civil Rights & Liberties', component: HumanSmall, imagePath: '/images/icons/human_civilrights.svg' },\n 12: { key: 12, name: 'Other', component: OtherSmall, imagePath: '/images/icons/other.svg' },\n 13: { key: 13, name: 'Climate / Disaster Response and Recovery', component: ClimateSmall, imagePath: '/images/icons/climate.svg' },\n 14: { key: 14, name: 'Equitable Development', component: EquitableSmall, imagePath: '/images/icons/equitable.svg' },\n 15: { key: 15, name: 'Food Justice', component: FoodSmall, imagePath: '/images/icons/food.svg' },\n 16: { key: 16, name: 'Housing / Homelessness', component: HousingSmall, imagePath: '/images/icons/housing.svg' },\n 17: { key: 17, name: 'Transportation / Utilities / Public Infrastructure', component: TransportSmall, imagePath: '/images/icons/transport.svg' },\n 18: { key: 18, name: 'Journalism / Media', component: MediaSmall, imagePath: '/images/icons/media.svg' },\n 19: { key: 19, name: 'Disability Justice', component: DisabilitySmall, imagePath: '/images/icons/disability.svg' },\n};\n\nconst t1a = Object.values (focusAreas);\nconst t1b = t1a.filter ((a) => a.key !== 12);\nconst t1c = sortByProperty (t1b, 'name');\nexport const orderedFocusAreas = [...t1c, focusAreas[12]];\n\nexport const urgents = {\n 1: { name: 'COVID-19' },\n 2: { name: 'Refugee Resettlement' }\n};\n\nexport const formats = {\n check: 'Check',\n online: 'Online',\n stock: 'Stock',\n ACH: 'ACH',\n wire: 'Wire',\n other: 'Other',\n};\n","import * as React from \"react\";\n\nfunction SvgEnvironmentSmall(props) {\n return (\n <svg width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" {...props}>\n <defs>\n <clipPath id=\"environment-small_svg__a\">\n <path d=\"M0 0h24v24H0z\" />\n </clipPath>\n </defs>\n <g clipPath=\"url(#environment-small_svg__a)\">\n <g data-name=\"Layer 2\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" fill=\"white\" />\n <g data-name=\"Layer 1\">\n <path\n data-name=\"Path 18\"\n d=\"M12 0a12 12 0 1012 12A12 12 0 0012 0zM9.78 17.48a29.78 29.78 0 014-7.3c.26-.33-.32-.68-.58-.33a33.76 33.76 0 00-4 7.27C4.33 13.58 9.81 6.71 16 6.19c2.08 5.06-.87 13.39-6.22 11.29z\"\n fill=\"#4a7a2b\"\n />\n </g>\n </g>\n </g>\n </svg>\n );\n}\n\nexport default SvgEnvironmentSmall;\n","import * as React from \"react\";\n\nfunction SvgCriminalSmall(props) {\n return (\n <svg width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" {...props}>\n <defs>\n <clipPath id=\"criminal-small_svg__a\">\n <path d=\"M0 0h24v24H0z\" />\n </clipPath>\n </defs>\n <g clipPath=\"url(#criminal-small_svg__a)\">\n <g data-name=\"Layer 2\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" fill=\"white\" />\n <g data-name=\"Layer 1\" fill=\"#23286c\">\n <path data-name=\"Rectangle 1\" d=\"M9.13 11.19h1.02v3.61H9.13z\" />\n <path data-name=\"Rectangle 2\" d=\"M11.49 11.19h1.02v3.61h-1.02z\" />\n <path\n data-name=\"Path 1\"\n d=\"M12 0a12 12 0 1012 12A12 12 0 0012 0zm5.26 17.22a.32.32 0 01-.25.12H7a.32.32 0 01-.26-.12.34.34 0 01-.07-.22L7 15.07a.34.34 0 01.33-.28h.47v-3.6H7a.308.308 0 01-.21-.56l5-3.86a.34.34 0 01.41 0l5 3.86a.34.34 0 01-.2.6h-.8v3.6h.46a.34.34 0 01.33.28l.34 1.89a.34.34 0 01-.07.22z\"\n />\n <path data-name=\"Rectangle 3\" d=\"M13.85 11.19h1.02v3.61h-1.02z\" />\n </g>\n </g>\n </g>\n </svg>\n );\n}\n\nexport default SvgCriminalSmall;\n","import * as React from \"react\";\n\nfunction SvgEducationSmall(props) {\n return (\n <svg width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" {...props}>\n <defs>\n <clipPath id=\"education-small_svg__a\">\n <path d=\"M0 0h24v24H0z\" />\n </clipPath>\n </defs>\n <g clipPath=\"url(#education-small_svg__a)\">\n <g data-name=\"Layer 2\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" fill=\"white\" />\n <g data-name=\"Layer 1\">\n <path\n data-name=\"Path 17\"\n d=\"M12 0a12 12 0 1012 12A12 12 0 0012 0zm3.65 14.07a.44.44 0 01-.11.29A4.93 4.93 0 0112 15.85a5 5 0 01-2-.44V13.5l1.51.68a1.25 1.25 0 001 0l3.14-1.43zm2.65-3.41l-2.65 1.2-.81.37-2.67 1.21a.33.33 0 01-.17 0 .35.35 0 01-.17 0l-2.66-1.21v4.27a.41.41 0 11-.81 0v-4.64l-2.66-1.2a.41.41 0 010-.75l6.13-2.78a.4.4 0 01.34 0l6.13 2.79a.38.38 0 01.24.37.4.4 0 01-.24.37z\"\n fill=\"#80a3db\"\n />\n </g>\n </g>\n </g>\n </svg>\n );\n}\n\nexport default SvgEducationSmall;\n","import * as React from \"react\";\n\nfunction SvgImmigrationSmall(props) {\n return (\n <svg width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" {...props}>\n <defs>\n <clipPath id=\"immigration-small_svg__a\">\n <path d=\"M0 0h24v24H0z\" />\n </clipPath>\n </defs>\n <g clipPath=\"url(#immigration-small_svg__a)\">\n <g data-name=\"Layer 2\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" fill=\"white\" />\n <g data-name=\"Layer 1\" fill=\"#d83039\">\n <path\n data-name=\"Path 26\"\n d=\"M12 9.5a1.68 1.68 0 101.68 1.68A1.68 1.68 0 0012 9.5zm0 2.75a1.07 1.07 0 111.07-1.07A1.07 1.07 0 0112 12.25z\"\n />\n <path\n data-name=\"Path 27\"\n d=\"M13.37 13.77h-2.74a.31.31 0 100 .61h2.74a.31.31 0 100-.61z\"\n />\n <path\n data-name=\"Path 28\"\n d=\"M12 0a12 12 0 1012 12A12 12 0 0012 0zm2.18 4.87a.27.27 0 01.27 0 .31.31 0 01.13.24v1h-4.21zm1.63 12a.3.3 0 01-.3.3h-7a.3.3 0 01-.3-.3V7.06a.31.31 0 01.3-.3h7a.31.31 0 01.3.3z\"\n />\n </g>\n </g>\n </g>\n </svg>\n );\n}\n\nexport default SvgImmigrationSmall;\n","import * as React from \"react\";\n\nfunction SvgLgbtqSmall(props) {\n return (\n <svg width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" {...props}>\n <defs>\n <clipPath id=\"lgbtq-small_svg__a\">\n <path d=\"M0 0h24v24H0z\" />\n </clipPath>\n </defs>\n <g clipPath=\"url(#lgbtq-small_svg__a)\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" fill=\"white\" />\n <g data-name=\"Group 3\" fill=\"#bf3088\">\n <path\n data-name=\"Path 35\"\n d=\"M12.047 9.185a2.575 2.575 0 102.53 2.62 2.58 2.58 0 00-2.53-2.62z\"\n />\n <path\n data-name=\"Path 36\"\n d=\"M12.209.002A12 12 0 1023.998 12.21 12 12 0 0012.209.002zm5.063 9.112a.432.432 0 01-.863-.015l.017-.964-1.655 1.6a3.435 3.435 0 01-2.4 5.45l-.021 1.254.85.015a.431.431 0 11-.015.862l-.851-.015-.014.829a.431.431 0 11-.862-.016l.014-.828-.85-.014a.432.432 0 11.015-.863l.85.015.022-1.254A3.425 3.425 0 019.33 9.616l-.024.023-.368-.38-.14.135a.374.374 0 01-.52-.539l.14-.135-.709-.734-.017.964a.431.431 0 01-.862-.015l.035-2.008a.431.431 0 01.439-.424l2.008.036a.431.431 0 01-.015.862l-.965-.017.71.734.113-.11a.374.374 0 11.52.539l-.113.11.366.38a3.416 3.416 0 014.24.075l1.655-1.6-.964-.017a.432.432 0 01.015-.863l2.008.036a.431.431 0 01.424.438z\"\n />\n </g>\n </g>\n </svg>\n );\n}\n\nexport default SvgLgbtqSmall;\n","import * as React from \"react\";\n\nfunction SvgRacialSmall(props) {\n return (\n <svg width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" {...props}>\n <defs>\n <clipPath id=\"racial-small_svg__a\">\n <path d=\"M0 0h24v24H0z\" />\n </clipPath>\n </defs>\n <g clipPath=\"url(#racial-small_svg__a)\">\n <g data-name=\"Layer 2\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" fill=\"white\" />\n <g data-name=\"Layer 1\" fill=\"#ffa13b\">\n <path\n data-name=\"Path 30\"\n d=\"M13.38 11.42a2.84 2.84 0 01-1.31-.71l-1.19 1.18a1.6 1.6 0 01-2.26 0 .72.72 0 01-.08-1.06l3.1-3.1a3.9 3.9 0 00-5.15 5.83l5.05 5a.63.63 0 00.88 0 .62.62 0 000-.89l-2.5-2.5a.24.24 0 010-.33.22.22 0 01.33 0l2.5 2.5a.64.64 0 00.89 0 .62.62 0 00.18-.44.63.63 0 00-.18-.45l-2.5-2.5a.233.233 0 01.33-.33l2.5 2.5a.64.64 0 00.45.19.63.63 0 00.44-1.07l-2.51-2.51a.24.24 0 010-.33.25.25 0 01.34 0l2.5 2.5a.63.63 0 10.89-.88z\"\n />\n <path\n data-name=\"Path 31\"\n d=\"M12 0a12 12 0 1012 12A12 12 0 0012 0zm5.86 13.93l-1.41 1.41a1.12 1.12 0 01-.78.32h-.13a1.06 1.06 0 01-.31.9 1.08 1.08 0 01-.77.33h-.16a.53.53 0 010 .13 1.07 1.07 0 01-.32.77 1.09 1.09 0 01-.77.32h-.13v.13a1.11 1.11 0 01-1.1 1.1 1.13 1.13 0 01-.78-.32L6.16 14A4.384 4.384 0 0112 7.46a4.32 4.32 0 012.75-1 4.38 4.38 0 013.11 7.45z\"\n />\n </g>\n </g>\n </g>\n </svg>\n );\n}\n\nexport default SvgRacialSmall;\n","import * as React from \"react\";\n\nfunction SvgEconomicSmall(props) {\n return (\n <svg width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" {...props}>\n <defs>\n <clipPath id=\"economic-small_svg__a\">\n <path d=\"M0 0h24v24H0z\" />\n </clipPath>\n </defs>\n <g clipPath=\"url(#economic-small_svg__a)\">\n <g data-name=\"Layer 2\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" fill=\"white\" />\n <g data-name=\"Layer 1\" fill=\"#62ce9c\">\n <path\n data-name=\"Path 15\"\n d=\"M12.35 11.58h-.7a.66.66 0 01-.66-.66.68.68 0 01.66-.66H13a.46.46 0 000-.91h-.59v-.49a.46.46 0 00-.91 0v.49a1.54 1.54 0 00.07 3.07h.77a.66.66 0 01.66.66.68.68 0 01-.66.66H11a.46.46 0 000 .91h.59v.49a.46.46 0 00.91 0v-.49a1.53 1.53 0 001.5-1.53 1.63 1.63 0 00-1.65-1.54z\"\n />\n <path\n data-name=\"Path 16\"\n d=\"M12 0a12 12 0 1012 12A12 12 0 0012 0zm0 17.58A5.58 5.58 0 1117.58 12 5.58 5.58 0 0112 17.58z\"\n />\n </g>\n </g>\n </g>\n </svg>\n );\n}\n\nexport default SvgEconomicSmall;\n","import * as React from \"react\";\n\nfunction SvgDemocracySmall(props) {\n return (\n <svg width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" {...props}>\n <defs>\n <clipPath id=\"democracy-small_svg__a\">\n <path d=\"M0 0h24v24H0z\" />\n </clipPath>\n </defs>\n <g clipPath=\"url(#democracy-small_svg__a)\">\n <g data-name=\"Layer 2\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" fill=\"white\" />\n <g data-name=\"Layer 1\">\n <path\n data-name=\"Path 4\"\n d=\"M12 0a12 12 0 1012 12A12 12 0 0012 0zm.09 18.53H12a4.11 4.11 0 01-4.13-4.1V8.74a.62.62 0 111.23 0v3.61a.24.24 0 10.47 0V6.62a.61.61 0 011.22 0v5.09A.24.24 0 0011 12a.25.25 0 00.24-.24V6.08a.61.61 0 01.61-.61.62.62 0 01.61.61v5.42a.24.24 0 10.47 0V6.62a.62.62 0 011.23 0v6.52a.24.24 0 10.47 0V11a.74.74 0 111.47 0v3.46a4 4 0 01-4.01 4.07z\"\n fill=\"#008272\"\n />\n </g>\n </g>\n </g>\n </svg>\n );\n}\n\nexport default SvgDemocracySmall;\n","import * as React from \"react\";\n\nfunction SvgGenderSmall(props) {\n return (\n <svg width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" {...props}>\n <defs>\n <clipPath id=\"gender-small_svg__a\">\n <path d=\"M0 0h24v24H0z\" />\n </clipPath>\n </defs>\n <g clipPath=\"url(#gender-small_svg__a)\">\n <g data-name=\"Layer 2\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" fill=\"white\" />\n <g data-name=\"Layer 1\" fill=\"#e57fca\">\n <path\n data-name=\"Path 20\"\n d=\"M12 0a12 12 0 1012 12A12 12 0 0012 0zm5.7 8.51a.51.51 0 01-1.02 0V7.37l-1.42 1.42a4.08 4.08 0 01-2.74 6.51v1h1a.51.51 0 110 1h-1v1a.51.51 0 11-1.02 0v-1h-1a.51.51 0 110-1h1v-1a4.07 4.07 0 113-7.24L16 6.64h-1.19a.51.51 0 110-1h2.38a.51.51 0 01.51.51z\"\n />\n <path\n data-name=\"Path 21\"\n d=\"M12 8.2a3.06 3.06 0 103.06 3.05A3.06 3.06 0 0012 8.2zm1.34 4.29h-2.66a.45.45 0 010-.89h2.67a.45.45 0 010 .89zm0-1.6h-2.66a.45.45 0 010-.89h2.67a.45.45 0 010 .89z\"\n />\n </g>\n </g>\n </g>\n </svg>\n );\n}\n\nexport default SvgGenderSmall;\n","import * as React from \"react\";\n\nfunction SvgHealthSmall(props) {\n return (\n <svg width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" {...props}>\n <defs>\n <clipPath id=\"health-small_svg__a\">\n <path d=\"M0 0h24v24H0z\" />\n </clipPath>\n </defs>\n <g clipPath=\"url(#health-small_svg__a)\">\n <g data-name=\"Layer 2\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" fill=\"white\" />\n <g data-name=\"Layer 1\" fill=\"#1444a3\">\n <path\n data-name=\"Path 22\"\n d=\"M15.06 11.3h-2v-2a.12.12 0 00-.06-.08h-1.9a.12.12 0 00-.13.12v2H9a.12.12 0 00-.13.12v1.9a.12.12 0 00.13.12h2v2a.13.13 0 00.13.13H13a.13.13 0 00.12-.13v-2h2a.12.12 0 00.12-.12v-1.9a.12.12 0 10-.18-.16z\"\n />\n <path\n data-name=\"Path 23\"\n d=\"M12 0a12 12 0 1012 12A12 12 0 0012 0zm6.08 10.83c0 6.82-6 7.58-6 7.59-.06 0-6-.77-6-7.59V8.67a.14.14 0 010-.09h.09A10.18 10.18 0 0012 6.35a.11.11 0 01.15 0A10.18 10.18 0 0018 8.54a.14.14 0 01.13.13z\"\n />\n </g>\n </g>\n </g>\n </svg>\n );\n}\n\nexport default SvgHealthSmall;\n","import * as React from \"react\";\n\nfunction SvgHumanSmall(props) {\n return (\n <svg width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" {...props}>\n <defs>\n <clipPath id=\"human-small_svg__a\">\n <path d=\"M0 0h24v24H0z\" />\n </clipPath>\n </defs>\n <g clipPath=\"url(#human-small_svg__a)\">\n <g data-name=\"Layer 2\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" fill=\"white\" />\n <g data-name=\"Layer 1\" fill=\"#ea622d\">\n <circle\n data-name=\"Ellipse 1\"\n cx=\"0.48\"\n cy=\"0.48\"\n r=\"0.48\"\n transform=\"translate(11.52 6.3)\"\n />\n <path\n data-name=\"Path 25\"\n d=\"M12 0a12 12 0 1012 12A12 12 0 0012 0zM7.37 13.9a2.24 2.24 0 01-2.21-1.76.42.42 0 01.08-.36.4.4 0 01.33-.17h3.62a.43.43 0 01.41.54 2.26 2.26 0 01-2.22 1.75zM15 18.55H9a.42.42 0 01-.42-.34.43.43 0 01.24-.48l2.76-1.27V9.83H7.81v.93H7V9.4a.43.43 0 01.38-.4h4.19V8a1.34 1.34 0 11.86 0v1h4.19a.43.43 0 01.43.43v1.36h-.86v-.96h-3.76v6.63l2.76 1.27a.43.43 0 01-.18.82zm3.83-6.4a2.26 2.26 0 01-2.22 1.75 2.26 2.26 0 01-2.22-1.76.39.39 0 01.09-.36.4.4 0 01.33-.17h3.62a.4.4 0 01.33.17.38.38 0 01.08.37z\"\n />\n </g>\n </g>\n </g>\n </svg>\n );\n}\n\nexport default SvgHumanSmall;\n","import * as React from \"react\";\n\nfunction SvgOtherSmall(props) {\n return (\n <svg width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" {...props}>\n <defs>\n <clipPath id=\"other-small_svg__a\">\n <path d=\"M0 0h24v24H0z\" />\n </clipPath>\n </defs>\n <g clipPath=\"url(#other-small_svg__a)\">\n <g data-name=\"Layer 2\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" fill=\"white\" />\n <g data-name=\"Layer 1\">\n <path\n data-name=\"Path 29\"\n d=\"M12 0a12 12 0 1012 12A12 12 0 0012 0zm-1.43 5.91a8.08 8.08 0 00-2.71 5.7h-2.1a6.29 6.29 0 014.81-5.7zm-4.81 6.48h2.1a8.08 8.08 0 002.71 5.7 6.29 6.29 0 01-4.81-5.7zm5.85 5.53a7.25 7.25 0 01-3-5.53h3zm0-6.31h-3a7.25 7.25 0 013-5.53zm.78-5.53a7.29 7.29 0 013 5.53h-3zm0 11.84v-5.53h3a7.29 7.29 0 01-3 5.53zm1 .17a8.08 8.08 0 002.71-5.7h2.1a6.29 6.29 0 01-4.77 5.7zm2.71-6.48a8.08 8.08 0 00-2.71-5.7 6.29 6.29 0 014.81 5.7z\"\n fill=\"#663293\"\n />\n </g>\n </g>\n </g>\n </svg>\n );\n}\n\nexport default SvgOtherSmall;\n","import * as React from \"react\";\n\nfunction SvgClimateSmall(props) {\n return (\n <svg width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" {...props}>\n <defs>\n <clipPath id=\"climate-small_svg__a\">\n <path d=\"M0 0h24v24H0z\" />\n </clipPath>\n </defs>\n <g clipPath=\"url(#climate-small_svg__a)\">\n <g data-name=\"Group 1\" fill=\"#93c83e\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" fill=\"white\" />\n <path\n data-name=\"Path 2\"\n d=\"M11.997 0a12 12 0 1012 12 12 12 0 00-12-12zm0 18.613A6.612 6.612 0 1118.609 12a6.622 6.622 0 01-6.612 6.617z\"\n />\n <path\n data-name=\"Path 3\"\n d=\"M13.497 11.38h-1.823l1.161-1.739a.62.62 0 10-1.029-.691l-1.809 2.707a.617.617 0 00.513.963h1.822l-1.161 1.74a.619.619 0 00.169.86.632.632 0 00.343.1.612.612 0 00.517-.277l1.806-2.7a.618.618 0 00-.512-.963z\"\n />\n </g>\n </g>\n </svg>\n );\n}\n\nexport default SvgClimateSmall;\n","import * as React from \"react\";\n\nfunction SvgEquitableSmall(props) {\n return (\n <svg width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" {...props}>\n <defs>\n <clipPath id=\"equitable-small_svg__a\">\n <path d=\"M0 0h24v24H0z\" />\n </clipPath>\n </defs>\n <g clipPath=\"url(#equitable-small_svg__a)\">\n <g data-name=\"Group 2\" fill=\"#9b7fc6\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" fill=\"white\" />\n <path\n data-name=\"Path 5\"\n d=\"M11.92 13.757a.3.3 0 00-.3.3v.744a.3.3 0 10.593 0v-.744a.3.3 0 00-.293-.3z\"\n />\n <path\n data-name=\"Path 6\"\n d=\"M11.2 11.632a.3.3 0 00-.3.3v.744a.3.3 0 10.593 0v-.744a.294.294 0 00-.293-.3z\"\n />\n <path\n data-name=\"Path 7\"\n d=\"M11.2 9.507a.3.3 0 00-.3.3v.744a.3.3 0 10.593 0v-.744a.294.294 0 00-.293-.3z\"\n />\n <path\n data-name=\"Path 8\"\n d=\"M10.486 13.757a.3.3 0 00-.3.3v.744a.3.3 0 10.593 0v-.744a.3.3 0 00-.293-.3z\"\n />\n <path\n data-name=\"Path 9\"\n d=\"M9.052 13.757a.3.3 0 00-.3.3v.744a.3.3 0 10.593 0v-.744a.3.3 0 00-.293-.3z\"\n />\n <path\n data-name=\"Path 10\"\n d=\"M12 0a12 12 0 1012 12A12 12 0 0012 0zm4.485 16.178a.3.3 0 01-.3.3H7.644a.3.3 0 01-.3-.3v-3.506a.3.3 0 01.3-.3h1.855V8.418a.3.3 0 01.3-.3h1.834v-.839a.3.3 0 01.593 0v.839h1.811a.3.3 0 01.3.3v3.954h1.855a.3.3 0 01.3.3z\"\n />\n <path\n data-name=\"Path 11\"\n d=\"M14.786 13.757a.3.3 0 00-.3.3v.744a.3.3 0 10.593 0v-.744a.3.3 0 00-.293-.3z\"\n />\n <path\n data-name=\"Path 12\"\n d=\"M13.352 13.757a.3.3 0 00-.3.3v.744a.3.3 0 10.592 0v-.744a.3.3 0 00-.292-.3z\"\n />\n <path\n data-name=\"Path 13\"\n d=\"M12.635 11.632a.3.3 0 00-.3.3v.744a.3.3 0 10.593 0v-.744a.3.3 0 00-.293-.3z\"\n />\n <path\n data-name=\"Path 14\"\n d=\"M12.635 9.507a.3.3 0 00-.3.3v.744a.3.3 0 10.593 0v-.744a.3.3 0 00-.293-.3z\"\n />\n </g>\n </g>\n </svg>\n );\n}\n\nexport default SvgEquitableSmall;\n","import * as React from \"react\";\n\nfunction SvgFoodSmall(props) {\n return (\n <svg width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" {...props}>\n <defs>\n <clipPath id=\"food-small_svg__a\">\n <path d=\"M0 0h24v24H0z\" />\n </clipPath>\n </defs>\n <g clipPath=\"url(#food-small_svg__a)\">\n <g data-name=\"Layer 2\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" fill=\"white\" />\n <g data-name=\"Layer 1\">\n <path\n data-name=\"Path 19\"\n d=\"M23.892 10.382a12 12 0 10-10.27 13.51 12 12 0 0010.27-13.51zm-16.81-1.27a3.66 3.66 0 013.06-.63 26.891 26.891 0 00-2.75-.94c-.87-.35-.34-1.42.55-1.22a4.39 4.39 0 012.54 1.52 3.83 3.83 0 011.17-2.58c.67-.62 1.66.18 1 .86-1.39 1.53-1.65 2.06-1.26 2.88l-.72.51c-.6-.59-1.15-.45-2.79.71-.88.6-1.66-.43-.8-1.11zm10.22 9c-.58.41-1.08.17-1.83-.49l-4.58-4.07c-1.63-1.46-1.76-2.47.08-3.7l.66-.46c1.87-1.33 2.8-.87 3.59 1.16l2.22 5.71c.36.9.43 1.44-.14 1.83z\"\n fill=\"#eecc19\"\n />\n </g>\n </g>\n </g>\n </svg>\n );\n}\n\nexport default SvgFoodSmall;\n","import * as React from \"react\";\n\nfunction SvgHousingSmall(props) {\n return (\n <svg width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" {...props}>\n <defs>\n <clipPath id=\"housing-small_svg__a\">\n <path d=\"M0 0h24v24H0z\" />\n </clipPath>\n </defs>\n <g clipPath=\"url(#housing-small_svg__a)\">\n <g data-name=\"Layer 2\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" fill=\"white\" />\n <g data-name=\"Layer 1\">\n <path\n data-name=\"Path 24\"\n d=\"M12 0a12 12 0 1012 12A12 12 0 0012 0zm6.36 12.35a.4.4 0 01-.37.25H16.8v4.11a.4.4 0 01-.4.4h-2.83a.4.4 0 01-.4-.4v-2.45a.4.4 0 00-.4-.4h-1.54a.4.4 0 00-.4.4v2.45a.4.4 0 01-.4.4h-3a.4.4 0 01-.4-.4V12.6H6a.4.4 0 01-.26-.71l6-4.91a.39.39 0 01.5 0l1.59 1.3v-.65a.4.4 0 01.4-.4h1.67a.39.39 0 01.4.4V10l2 1.93a.4.4 0 01.06.42z\"\n fill=\"#ff7676\"\n />\n </g>\n </g>\n </g>\n </svg>\n );\n}\n\nexport default SvgHousingSmall;\n","import * as React from \"react\";\n\nfunction SvgTransportSmall(props) {\n return (\n <svg width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" {...props}>\n <defs>\n <clipPath id=\"transport-small_svg__a\">\n <path d=\"M0 0h24v24H0z\" />\n </clipPath>\n </defs>\n <g clipPath=\"url(#transport-small_svg__a)\">\n <g data-name=\"Layer 2\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" fill=\"white\" />\n <g data-name=\"Layer 1\" fill=\"#30d3f9\">\n <path\n data-name=\"Path 32\"\n d=\"M8.83 11.8a.67.67 0 10.65.67.65.65 0 00-.65-.67z\"\n />\n <path\n data-name=\"Path 33\"\n d=\"M12 0a12 12 0 1012 12A12 12 0 0012 0zm5.82 13.92a1.26 1.26 0 01-1.06 1.23v1.26a.73.73 0 01-1.45 0v-1.24H8.69v1.24a.73.73 0 01-1.45 0v-1.26a1.26 1.26 0 01-1.06-1.23v-1.49a2.69 2.69 0 011.43-2.36v-.05l.59-1.95a1.67 1.67 0 011.59-1.2h4.42a1.67 1.67 0 011.59 1.2l.58 1.93v.05a2.69 2.69 0 011.43 2.36z\"\n />\n <path\n data-name=\"Path 34\"\n d=\"M15.17 11.8a.67.67 0 10.65.67.65.65 0 00-.65-.67z\"\n />\n </g>\n </g>\n </g>\n </svg>\n );\n}\n\nexport default SvgTransportSmall;\n","import * as React from \"react\";\n\nconst MediaSmall = (props: any) => {\n\treturn (\n <svg width=\"1em\" height=\"1em\" viewBox=\"0 0 200 200\" fill=\"none\" {...props}>\n <g clip-path=\"url(#clip0_85_9032)\">\n <rect width=\"200\" height=\"200\"/>\n <circle cx=\"100\" cy=\"100\" r=\"100\" fill=\"#F73D5E\"/>\n <path d=\"M121.778 95.6285C126.072 94.6104 130.106 92.5259 133.446 89.4861L90.0901 63.9991C89.0202 68.3749 89.1278 72.8955 90.3009 77.1278L121.778 95.6285Z\" fill=\"white\"/>\n <path d=\"M99.5515 117.579L80.1764 106.192L58.0002 145.825L75.3083 156L99.5515 117.579Z\" fill=\"white\"/>\n <path d=\"M136.482 86.2041L91.5193 59.7724C91.9521 58.7821 92.4514 57.8075 93.0184 56.854C100.417 44.4134 116.558 40.2913 129.071 47.6471C141.584 55.0029 145.73 71.0511 138.332 83.4917C137.765 84.4452 137.146 85.3498 136.482 86.2041Z\" fill=\"white\"/>\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M80.8444 75.6898L126.132 102.307L114.332 122.152L69.0446 95.5348L80.8444 75.6898ZM101.588 99.5516C101.588 102.245 99.392 104.428 96.6831 104.428C93.9741 104.428 91.7781 102.245 91.7781 99.5516C91.7781 96.8584 93.9741 94.675 96.6831 94.675C99.392 94.675 101.588 96.8584 101.588 99.5516Z\" fill=\"white\"/>\n </g>\n <defs>\n <clipPath id=\"clip0_85_9032\">\n <rect width=\"200\" height=\"200\" fill=\"white\"/>\n </clipPath>\n </defs>\n </svg>\n\n\t);\n}\n\nexport default MediaSmall;\n","import * as React from \"react\";\n\nconst DisabilitySmall = (props: any) => {\n\treturn (\n\t\t<svg width=\"1em\" height=\"1em\" viewBox=\"0 0 200 200\" fill=\"none\" {...props}>\n <g clip-path=\"url(#clip0_85_9033)\">\n <rect width=\"200\" height=\"200\"/>\n <circle cx=\"100\" cy=\"100\" r=\"100\" fill=\"#0D8991\"/>\n <g clip-path=\"url(#clip1_85_9033)\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M92.1928 61.8195C97.4621 61.3305 101.556 56.7674 101.556 51.4302C101.556 45.6855 96.8946 41 91.1795 41C85.4644 41 80.8032 45.6855 80.8032 51.4302C80.8032 53.1821 81.2895 54.9747 82.1002 56.4822L85.7975 108.776L123.876 108.787L139.494 145.571L160 137.487L156.825 129.887L145.349 134.051L130.237 98.9825L94.8324 99.2216L94.3463 92.599L119.977 92.6093V82.8104L93.3686 82.7999L92.1928 61.8195Z\" fill=\"white\"/>\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M130.49 136.816C124.063 149.587 110.611 158 96.2629 158C75.1884 158 58 140.723 58 119.539C58 104.665 66.9679 90.8436 80.3498 84.7166L81.2158 96.0759C73.3008 101.089 68.4216 110.135 68.4216 119.617C68.4216 134.984 80.8905 147.517 96.1784 147.517C110.165 147.517 122.092 136.728 123.718 122.887L130.49 136.816Z\" fill=\"white\"/>\n </g>\n </g>\n <defs>\n <clipPath id=\"clip0_85_9033\">\n <rect width=\"200\" height=\"200\" fill=\"white\"/>\n </clipPath>\n <clipPath id=\"clip1_85_9033\">\n <rect width=\"102\" height=\"117\" fill=\"white\" transform=\"translate(58 41)\"/>\n </clipPath>\n </defs>\n\t\t</svg>\n\t);\n}\n\nexport default DisabilitySmall;\n","import { AxiosRequestConfig } from \"axios\";\nimport { IBookmark, ICreateBookmark } from \"../../interfaces/IBookmark.interfaces\";\nimport { api } from \"./api.service\";\nimport { IBloatedFunder } from \"../../interfaces/IFunder\";\n\nexport class BookmarkService {\n private static baseRoute = '/api/bookmark'\n\n public static async get(params: any): Promise<IBookmark[]> {\n const res = await api.get(`${this.baseRoute}`, { params });\n return res.data;\n }\n\n public static async getCount(options: AxiosRequestConfig): Promise<{count: number}> {\n const res = await api.get(`${this.baseRoute}/count`, options);\n return res.data;\n }\n\n public static async getCommonApps(options: AxiosRequestConfig): Promise<{count: number}> {\n const res = await api.get(`${this.baseRoute}/common-app`, options);\n return res.data;\n }\n\n public static async getFunders(options: AxiosRequestConfig): Promise<IBloatedFunder> {\n const res = await api.get(`${this.baseRoute}/funders`, options);\n return res.data;\n }\n\n public static async create(data: ICreateBookmark): Promise<IBookmark> {\n const res = await api.post(this.baseRoute, data);\n return res.data;\n }\n\n public static async delete(id: number): Promise<boolean> {\n const res = await api.delete(`${this.baseRoute}/${id}`)\n return res.data;\n }\n\n}","export enum ProposalUrgentNeed {\n NONE = 0,\n COVID_19 = 1,\n REFUGEE_RESETTLEMENT = 2,\n ABORTION_RIGHTS = 3\n }\n ","import React, { createContext, Dispatch, useContext, useEffect, useState } from 'react';\nimport { IBloatedGrantee } from '../../shared/interfaces/IGrantee';\nimport { GranteeAPIService } from '../../shared/services/api-service/grantee.service';\nimport { IUser } from '../../shared/interfaces/IUser.interface';\nimport { UserService } from '../../shared/services/api-service/user-api.service';\nimport { IRfp } from '../../shared/interfaces/IRfp.interfaces';\nimport { RfpService } from '../../shared/services/api-service/rfp-api.service';\nimport { GranteeUserRole } from '../../shared/enums/grantee.enum';\nimport { useCancellableEffect } from '../../shared/hooks/useCancellableEffect';\nimport { UserAuthService } from '../../shared/services/api-service/user-auth-api.service';\nimport { IUserAssociations } from '../../shared/interfaces/IUserAssociations.interface';\nimport { hotjarService } from '../../shared/services/hotjar-service/hotjar.service';\nimport { HubspotService } from '../../shared/services';\n\ntype UserContextProvider = {\n grantees: IBloatedGrantee[],\n grantee: IBloatedGrantee | null,\n selectGrantee: (id: number) => void,\n requestFundeesUpdate: () => void,\n user: IUser | null,\n rfp: IRfp | null,\n selectRfp: (id: number) => void,\n hasRole: (role: GranteeUserRole) => boolean,\n setGrantee: React.Dispatch<React.SetStateAction<any>>\n}\n\n\nconst GranteeContext = createContext<UserContextProvider>({\n grantees: [] as IBloatedGrantee[],\n grantee: null,\n selectGrantee: () => {},\n requestFundeesUpdate: () => {},\n user: null,\n rfp: null,\n selectRfp: () => {},\n setGrantee: ()=>{},\n hasRole: role => false\n});\n\nexport const useGranteeContext = () => useContext(GranteeContext);\n\n\nexport default function UserProvider({ children }: { children: React.ReactChild}) {\n const [ grantees, setGrantees] = useState([] as IBloatedGrantee[]);\n const [ grantee, setGrantee ]:[ IBloatedGrantee | undefined, Dispatch<React.SetStateAction<IBloatedGrantee | undefined>>] = useState();\n const [ user, setUser ]: [IUser | undefined , Dispatch<React.SetStateAction<IUser | undefined>>]= useState();\n const [ updateFundees, setUpdate] = useState(0);\n const [ rfp, setRfp ]: [IRfp | undefined, Dispatch<React.SetStateAction<IRfp | undefined>>] = useState();\n const [associations, setAssociations] = useState<IUserAssociations | null>(null);\n const requestFundeesUpdate = () => {\n setUpdate(updateFundees + 1);\n }\n\n const hasRole = (role: GranteeUserRole): boolean => {\n return user?.granteeUsers?.some(userRole => userRole.role_id === role && grantee?.id === userRole.grantee_id) || false;\n }\n\n const selectGrantee = async (id: number) => {\n const newGrantee = await GranteeAPIService.getById(id)\n setGrantee(newGrantee);\n return;\n }\n\n const selectRfp = async (id: number) => {\n if (id === 0) {\n setRfp(undefined)\n }\n const newRfp = await RfpService.getById(id);\n setRfp(newRfp);\n return;\n }\n\n useEffect(() => {\n UserAuthService.verifyLogin().then(async loginVerification => {\n const userId = loginVerification.user.id;\n hotjarService.userId = userId;\n HubspotService.identifyUser(loginVerification.user?.email!);\n UserAuthService.getAssociations(userId).then( userAssociations => {\n setAssociations(userAssociations);\n hotjarService.hasGranteeAssociations = !!associations?.grantees && associations.grantees!.length > 0;\n hotjarService.hasFunderAssociations = !!associations?.funders && associations.funders!.length > 0;\n });\n UserService.getById(userId).then(jfUser => {\n setUser(jfUser)\n hotjarService.userEmail = jfUser.email!;\n });\n });\n }, []);\n\n useCancellableEffect(signal => {\n if (grantee) {\n GranteeAPIService.getById(grantee.id, { signal })\n .then(response => setGrantees([response]))\n .catch(err => err.message !== 'canceled' && err);\n }\n }, [grantee])\n\n return (\n <GranteeContext.Provider\n value={{\n grantees,\n grantee: grantee ? grantee : null,\n selectGrantee,\n user: user ? user : null,\n rfp: rfp ? rfp : null,\n selectRfp,\n requestFundeesUpdate,\n hasRole,\n setGrantee\n }}\n >\n {children}\n </GranteeContext.Provider>\n )\n}\n","import React from 'react';\nimport { LoadingPage } from '../../../shared/components/LoadingPage';\nimport { useFetch } from '../../hooks';\n\nexport type IFetchProps = {\n renderSuccess: (data: any) => any;\n url: string;\n params?: { [key: string]: string | number | string[] | number[]} | null;\n loadingFallback?: any;\n renderError?: (error: any) => any;\n reload?: boolean;\n}\n\nexport function FetchPage({\n renderSuccess,\n url,\n params = null,\n loadingFallback = <LoadingPage\n message={'Loading...'}\n error={false}\n />,\n renderError = data => {\n console.error(data)\n return <p>{typeof data === 'string' ? data : 'Page load error, please try refreshing the page.'}</p>\n }\n}: IFetchProps) {\n const { loading, data, error } = useFetch(url, params);\n\n if (loading) return loadingFallback;\n if (error) return renderError(error);\n if (data) return renderSuccess(data);\n\n return null;\n}","// WARNING: PLEASE UPDATE THE BACKEND ENUM WHENEVER THIS FILE IS UPDATED !!!\n\nexport enum TaxStatusId {\n '501(c)(3)' = 1,\n '501(c)(4)' = 2,\n 'Other' = 3,\n 'Federally Recognized Tribe' = 4,\n 'For-profit' = 5\n}\n\n// This converts tax_status_id into the respective string equivalent\nexport type TaxStatusDef = {\n [key in TaxStatusId]: string;\n};\n\nexport const TaxStatusOptions = Object.entries(TaxStatusId)\n .filter(([key]) => isNaN(Number(key)))\n .map(([label, value]) => ({ value: value as number, label }));\n\nexport const TaxStatusObj: TaxStatusDef = Object.entries(TaxStatusId)\n .filter(([key, value]) => isNaN(Number(key)))\n .reduce((acc: any, [label, value]) => {\n return { ...acc, [value]: label };\n }, {});\n\n// Grantee Tax Statuses\n\nexport interface IStatuses {\n '501(c)(3)': boolean;\n '501(c)(4)': boolean;\n Other: boolean;\n 'Federally Recognized Tribe': boolean;\n 'For-profit': boolean;\n}\n\nexport const GranteeDefTaxStatus: IStatuses = Object.entries(TaxStatusId)\n .filter(([key]) => isNaN(Number(key)))\n .reduce((acc: any, [label]) => {\n return { ...acc, [label]: false };\n }, {});\n","export default __webpack_public_path__ + \"static/media/bipoc.c3081339.svg\";","import React, {\n createContext,\n useContext,\n useState,\n ReactNode,\n useCallback\n} from 'react';\nimport {\n Dialog,\n DialogContent,\n CircularProgress,\n Typography,\n DialogActions,\n Button,\n Grid\n} from '@mui/material';\n\ninterface DialogContextType {\n showLoading: (message?: string) => void;\n closeDialog: () => void;\n showSuccess: (message: string, onClose?: () => void) => void;\n}\n\nconst DialogContext = createContext<DialogContextType | undefined>(undefined);\n\nexport const useDialog = () => {\n const context = useContext(DialogContext);\n if (!context) {\n throw new Error('useDialog must be used within a DialogProvider');\n }\n return context;\n};\n\ninterface DialogProviderProps {\n children: ReactNode;\n}\n\nexport const DialogProvider: React.FC<DialogProviderProps> = ({ children }) => {\n const [dialogState, setDialogState] = useState({\n isLoading: false,\n isSuccess: false,\n message: '',\n onCloseSuccess: undefined as (() => void) | undefined\n });\n\n const showLoading = useCallback(\n (message: string = 'Loading...') => {\n setDialogState({ ...dialogState, isLoading: true, message });\n },\n [dialogState]\n );\n\n const showSuccess = useCallback(\n (message: string, onClose?: () => void) => {\n setDialogState({\n ...dialogState,\n isSuccess: true,\n message,\n onCloseSuccess: onClose\n });\n },\n [dialogState]\n );\n\n const closeDialog = useCallback(() => {\n setDialogState({\n ...dialogState,\n isLoading: false,\n isSuccess: false,\n message: ''\n });\n if (dialogState.isSuccess && dialogState.onCloseSuccess) {\n dialogState.onCloseSuccess();\n }\n }, [dialogState]);\n\n return (\n <DialogContext.Provider value={{ showLoading, closeDialog, showSuccess }}>\n {children}\n <Dialog\n disableEscapeKeyDown\n open={dialogState.isLoading || dialogState.isSuccess}\n onClose={(_event, reason) => {\n if (reason !== 'backdropClick' && reason !== 'escapeKeyDown') {\n closeDialog();\n }\n }}\n sx={{\n zIndex: 10000\n }}\n >\n <DialogContent\n style={{\n padding: '30px',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n minWidth: ' 350px'\n }}\n >\n {dialogState.isLoading && (\n <Grid\n container\n justifyContent=\"center\"\n alignItems=\"center\"\n spacing={1}\n sx={{\n paddingRight: '4px',\n paddingLeft: '4px'\n }}\n >\n <Grid item xs={3}>\n <CircularProgress\n sx={{\n color: '#0b61b0'\n }}\n size=\"2.5rem\"\n />\n </Grid>\n <Grid item xs={9}>\n <Typography\n variant=\"h4\"\n sx={{\n color: 'black',\n whiteSpace: 'nowrap',\n fontWeight: 600,\n fontSize: '25px'\n }}\n >\n {dialogState.message}\n </Typography>\n </Grid>\n </Grid>\n )}\n {dialogState.isSuccess && (\n <>\n <Typography variant=\"h4\" style={{ marginTop: 20 }}>\n {dialogState.message}\n </Typography>\n <DialogActions>\n <Button onClick={closeDialog} color=\"primary\">\n Close\n </Button>\n </DialogActions>\n </>\n )}\n </DialogContent>\n </Dialog>\n </DialogContext.Provider>\n );\n};\n","import { Avatar, Box, Grid, IconButton, Typography } from '@mui/material';\nimport { Card } from '../../../common/components';\nimport {\n FundButton,\n FundersAvatarGroup,\n ProfileCardDescription,\n ProfileCardDescriptionWrapper,\n ProfileCardDividiver,\n ProfileCardFocusesWrapper,\n ProfileCardTitle,\n ProfileCardTitleAvatar,\n ProfileCardWrapper\n} from './ProfileCard.styles';\nimport { useHistory } from 'react-router';\nimport { useCallback, useEffect, useState } from 'react';\nimport { BookmarkService } from '../../services/api-service/bookmark.service';\nimport { BookmarkEntityType } from '../../enums/bookmark.enum';\nimport { useFunderContext } from '../../../funder/providers/UserProvider';\nimport { useMessagingContext } from '../modals/Notification';\nimport { BookmarkIcon } from '../../../funder/components/app/navbar/icons';\nimport { EProfileType } from '../../enums/profile.enum';\nimport { IProfile } from '../../interfaces/IProfile';\nimport { formatUserName, getProfileRedirectUri } from '../../util/util';\nimport { FocusIcon, Tooltip } from '../legacy-ui';\nimport bipoc from '../../../images/bipoc.svg';\nimport { BipocLed } from '../../enums/bipoc.enum';\nimport ProfileTypeTag, { getProfileTypes } from '../../../common/components/ProfileTypeTag/ProfileTypeTag';\nimport { htmlToText } from '../../util/htmlToText';\n\ninterface ProfileCardProps {\n profile: IProfile;\n profileType: EProfileType;\n isAdmin: boolean;\n customId?: string;\n fundEventName?: string;\n cardEventName?: string;\n showFunders?: boolean;\n openDetails?: () => void;\n}\n\nexport const ProfileCard: React.FC<ProfileCardProps> = ({\n profile,\n profileType,\n isAdmin,\n customId,\n fundEventName,\n cardEventName,\n openDetails,\n showFunders = true\n}) => {\n const isGrantee = profileType === EProfileType.GRANTEE;\n const isPublished = isGrantee ? profile.isPublished : profile.funder?.isPublished;\n const cardPaddingLeft = 3;\n const cardPaddingTitle = cardPaddingLeft - 1;\n\n const history = useHistory();\n const { refreshBookmarkCount, funder: loginFunder, user } = useFunderContext();\n const {\n alertState: { showAlert }\n } = useMessagingContext();\n const [bookmarkId, setBookmarkId] = useState<number | undefined>(\n isGrantee ? profile.granteeBookmarks?.[0]?.id : profile.funder?.funderBookmarks?.[0]?.id\n );\n const [fundedBy, setFundedBy] = useState<any[]>([]);\n\n const navigateToGrantee = useCallback((eventName?: string) => {\n const id = isGrantee ? profile.id : profile.funder?.id!;\n \n if (user && eventName && isPublished) {\n gtag(\n 'event',\n eventName,\n {\n profile_id: id,\n user_id: user.id,\n user_name: formatUserName(user)\n }\n );\n }\n if (openDetails) { \n openDetails();\n }\n else {\n const redirectUri = getProfileRedirectUri(id, isGrantee, isAdmin);\n window.open(redirectUri, '_blank');\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isAdmin, profile.id, history]);\n\n const getFunderInfo = () => {\n if (profile?.commitments) {\n profile?.commitments?.map(async (commitment: any) => {\n console.log('commitment', commitment);\n setFundedBy((fundedBy: any[]) => {\n const exists = fundedBy.some((funder) => funder.id === commitment?.funder?.id);\n \n if (exists) return fundedBy;\n \n return [\n ...fundedBy,\n {\n id: commitment?.funder?.id,\n name: commitment?.funder?.name || `Anonymous`,\n logo: commitment?.funder?.logo,\n amount: commitment?.amount\n }\n ];\n });\n });\n }\n };\n\n const bookmarkAlert = (bookmarkToggle: boolean) => {\n if (bookmarkToggle) return showAlert({ title: 'Bookmark Removed!', severity: 'info' });\n else return showAlert({ title: 'Bookmark Added!', severity: 'success' });\n };\n\n \n const updateBookmark = async (event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {\n event.stopPropagation();\n const isBookmarked = !!bookmarkId;\n setBookmarkId(-1);\n\n try {\n if (isBookmarked) {\n await BookmarkService.delete(bookmarkId);\n setBookmarkId(undefined);\n } else {\n const updatedBookmark = await BookmarkService.create({\n bookmark_target_id: isGrantee ? profile.id : profile.funder!.id,\n bookmark_type: isGrantee ? BookmarkEntityType.GRANTEE : BookmarkEntityType.FUNDER\n });\n setBookmarkId(updatedBookmark.id);\n }\n bookmarkAlert(!!bookmarkId);\n refreshBookmarkCount();\n } catch (error) {\n showAlert({ title: 'Error while trying to bookmark', severity: 'error' });\n setBookmarkId(undefined);\n }\n };\n\n const fundsText = (count: number) =>\n `${count} Funder${count === 1 ? '' : 's'}`;\n\n useEffect(() => {\n getFunderInfo();\n }, []);\n\n return (\n <Card\n status=\"none\"\n paddingX={0}\n paddingY={15}\n onClick={(isPublished || openDetails) ? () => navigateToGrantee(cardEventName) : undefined}\n >\n <ProfileCardWrapper container>\n <Grid item container xs={12} paddingBottom={1} paddingX={cardPaddingTitle}>\n <Grid item xs display=\"flex\" alignItems=\"center\">\n <ProfileCardTitleAvatar\n src={profile.logoUrl}\n alt={profile.name}\n >\n {profile.name.charAt(0).toUpperCase()}\n </ProfileCardTitleAvatar>\n {/* here */}\n <Box ml={1} display=\"flex\" flexDirection=\"column\">\n <ProfileCardTitle fontSize={18} fontWeight={600} title={profile.name}>\n {profile.name}\n </ProfileCardTitle>\n <Box display=\"flex\" flexWrap=\"wrap\" mt={1}>\n <ProfileTypeTag types={getProfileTypes(profile)} />\n \n </Box>\n </Box>\n </Grid>\n {!!isPublished && loginFunder?.id !== profile.funder?.id ? (\n <Grid item xs={1} display=\"flex\" alignItems=\"center\" justifyContent=\"end\">\n <Tooltip\n title={!!bookmarkId ? 'Remove item from Bookmarks' : 'Add item to Bookmarks'}\n >\n <IconButton\n size=\"small\"\n onClick={updateBookmark}\n disabled={bookmarkId === -1}\n sx={{ padding: 0 }}\n >\n <BookmarkIcon\n size={24}\n filled={!!bookmarkId && bookmarkId > 0}\n />\n </IconButton>\n </Tooltip>\n </Grid>\n ) : null}\n </Grid>\n <ProfileCardDescriptionWrapper item container xs={12} paddingLeft={cardPaddingLeft} paddingRight={cardPaddingTitle}>\n <ProfileCardDescription>{htmlToText(profile?.description) || ''}</ProfileCardDescription>\n </ProfileCardDescriptionWrapper>\n <ProfileCardFocusesWrapper item container xs={12} ml={cardPaddingLeft - 0.5} alignItems=\"center\">\n <Grid item container xs=\"auto\" height={34}>\n {profile?.granteeFocuses?.map((granteeFocus) => (\n <FocusIcon\n size={24}\n key={`${profile.id}-${granteeFocus.focus.id}`}\n focus={granteeFocus.focus.id}\n />\n ))}\n </Grid>\n {profile?.bipocLed === BipocLed.YES ? (\n <Grid item container xs>\n <Tooltip title=\"BIPOC-led\">\n <IconButton size=\"small\">\n <Box\n component=\"img\"\n sx={{ height: '32px', width: '32px' }}\n src={bipoc}\n alt=\"bipoc led logo\"\n />\n </IconButton>\n </Tooltip>\n </Grid>\n ) : null}\n </ProfileCardFocusesWrapper>\n { showFunders && (\n <>\n <ProfileCardDividiver sx={{ marginLeft: cardPaddingLeft, marginY: 1 }} />\n <Grid item container xs={12} paddingLeft={cardPaddingLeft} paddingRight={cardPaddingTitle}>\n <Grid item xs={12} mb={1} minHeight={20}>\n <Typography fontWeight={500} fontSize={14} color=\"black !important\">\n {fundsText(profile.fundedBy?.length || 0)}\n </Typography>\n </Grid>\n <Grid item container xs={12}>\n <Grid item xs={8} display=\"flex\" flexDirection=\"row\" alignItems=\"center\" gap={1}>\n <FundersAvatarGroup\n total={fundedBy?.length || 0}\n max={4}\n spacing={-5}\n >\n {fundedBy ? fundedBy.slice(0, 3).map((fundedByItem) => (\n <Tooltip title={fundedByItem.name} key={`${profile.id}-${fundedByItem.id}`}>\n <Avatar\n src={fundedByItem.logo?.url}\n alt={fundedByItem.name}\n >\n {fundedByItem.name.charAt(0).toUpperCase()}\n </Avatar>\n </Tooltip>\n )) : <Box className=\"Box avatar\" />}\n </FundersAvatarGroup>\n </Grid>\n <Grid item xs={4} display=\"flex\" justifyContent=\"flex-end\">\n {isPublished ? (\n <FundButton id={customId ?? 'fund-button'} onClick={() => navigateToGrantee(fundEventName)}>\n View\n </FundButton>\n ) : null}\n </Grid>\n </Grid>\n </Grid>\n </>\n )}\n </ProfileCardWrapper>\n </Card>\n );\n};\n","import { AxiosRequestConfig } from 'axios';\nimport { ProposalStatus } from '../../enums/proposal-status.enum';\nimport { ICommonApp, ICreateProposal, IProposal, ITransferredProposal } from '../../interfaces';\nimport { api } from \"./api.service\";\nimport { IPrivateTab } from '../../components/viewProposals/ProposalPanel';\n\nexport class ProposalAPIService {\n private static baseRoute = '/api/proposals'\n\n public static async list(options: AxiosRequestConfig = {}): Promise<IProposal> {\n // hard coding in the limit for now, we should hit this query for the Funder home page when we want to show 'recommended proposals'\n const res = await api.get(`${this.baseRoute}`, options);\n return res.data as IProposal;\n }\n // move this into list\n public static async getByGrantee(id: number | undefined, config?: AxiosRequestConfig): Promise<IProposal[]> {\n const res = await api.get(`${this.baseRoute}`, { ...config, params: { grantee_id: id, limit: 100 } })\n return res.data as IProposal[];\n }\n\n public static async getLegacyProposals(config?: AxiosRequestConfig): Promise<IProposal[]> {\n const res = await api.get(`${this.baseRoute}`, { ...config, params: { proposalsOnly: 1, limit: 100 } })\n return res.data as IProposal[];\n }\n\n public static async getById(id: number, config?: AxiosRequestConfig): Promise<IProposal> {\n const res = await api.get(`${this.baseRoute}/${id}`, config);\n return res.data as IProposal;\n }\n\n public static async editProposal(id: number, proposal: Partial<IProposal>): Promise<IProposal> {\n const res = await api.put(`${this.baseRoute}/${id}`, proposal);\n return res.data as IProposal;\n }\n public static async create(proposal: ICreateProposal): Promise<ICreateProposal> {\n const res = await api.post(`${this.baseRoute}/`, proposal);\n return res.data as ICreateProposal;\n }\n\n public static async delete(id: number): Promise<ICreateProposal> {\n const res = await api.delete(`${this.baseRoute}/${id}`);\n return res.data as ICreateProposal;\n }\n // this is only for 'archiving' proposal from the grantee home page.\n // no need to update any other info, just the status.\n public static async proposalStatus(id: number, status: ProposalStatus): Promise<any> {\n // const { status } = req\n const res = await api.put(`${this.baseRoute}/${id}`, { status });\n return res.data as IProposal;\n }\n // Even with newer frameworks we need to manually create and click on a link in order to kick off the browser download flow.\n public static async getDocument(id: number): Promise<void> {\n const res = await api.get(`${this.baseRoute}/document/${id}`, { responseType: 'blob' });\n const url = window.URL.createObjectURL(new Blob([res.data]));\n const link = document.createElement('a');\n link.href = url;\n link.setAttribute('download', `proposal-document-${Date.now()}.docx`);\n document.body.appendChild(link);\n link.click();\n // Cleanup\n document.body.removeChild(link);\n }\n\n public static async transfer(proposalId: number, orgId: number): Promise<ITransferredProposal> {\n const res = await api.put(`${this.baseRoute}/transfer/${proposalId}`, { orgId });\n return res.data as ITransferredProposal;\n }\n\n public static async getPrivateTab(proposalId: number, config: AxiosRequestConfig): Promise<IPrivateTab> {\n const res = await api.get(`/pages/proposal/private/${proposalId}`, config);\n return res.data as IPrivateTab;\n }\n\n public static async getCommonAppProposal(proposalId: number): Promise<ICommonApp> {\n const res = await api.get('/api/common-app/' + proposalId);\n return res.data as ICommonApp;\n }\n}","import { ILoginFunder } from \"../interfaces/IFunder\";\nimport { IUser } from \"../interfaces/IUser.interface\";\n\ndeclare global {\n interface Window { Appcues: any; }\n}\n\ninterface Group {\n id: any;\n name?: string;\n service_level?: any;\n created_at?: string;\n type: string;\n}\n\ninterface Track {\n id: any;\n route?: string;\n article: any;\n}\n\nconst appcueId : string | undefined = process.env.REACT_APP_APPCUE_ID;\n\nexport const identifyUserWithAppcues = (user: IUser, funder: ILoginFunder, roles: any ) => {\n\n\n if (!appcueId) {\n return;\n }\n \n window.Appcues.identify(\n `u${user.id}f${funder.id}g${funder.grantee_id}`, // unique, required\n {\n userId: `u${user.id}f${funder.id}g${funder.grantee_id}`, // unique, required \n display_name: user.first_name + ' ' + user.last_name, // current user's display name\n email: user.email, // current user's email\n funder_id: `u${user.id}f${funder.id}`,\n funder_name: funder.name,\n is_admin: user.is_admin,\n grantee_id: `u${user.id}g${funder.grantee_id}`,\n grantee_name: funder?.grantee?.name,\n service_level: funder.service_level,\n ...roles\n }\n );\n};\n\nexport const groupWithAppcues = (group: Group) => {\n\n if (!appcueId) {\n return;\n }\n \n window.Appcues.group(\n group.id,\n {\n group_id: group.id,\n group_name: group.name,\n group_service_level: group.service_level,\n group_created_at: group.created_at,\n group_type: group.type\n }\n );\n };\n\nexport const trackWithAppcues = (track: Track) => {\n\n if (!appcueId) {\n return;\n }\n \n window.Appcues.track(track.id, {\n url: track.route,\n article: track.article,\n }\n );\n };","import React from 'react';\nimport { Tooltip as TooltipCore, styled } from '@mui/material';\n\nconst StyledTooltip = styled(TooltipCore)({\n arrow: {\n color: '#29757e',\n },\n tooltip: {\n backgroundColor: '#29757e',\n color: '#ffffff',\n fontSize: '12px',\n },\n});\n\nexport const Tooltip = ({ children, ...rest }: any) => (\n <StyledTooltip placement='top' arrow {...rest}>\n {children}\n </StyledTooltip>\n);\n","import { useEffect } from 'react';\nimport { useLocation } from 'react-router-dom';\n\nexport const ScrollToTop = () => {\n const { pathname } = useLocation ();\n\n useEffect (() => {\n window.scrollTo (0, 0);\n }, [pathname]);\n\n return null;\n};\n","export enum fundingCommitmentVisibilityEnum {\n STANDARD = 1,\n GRANTEE_RESTRICTED = 2,\n FULLY_RESTRICTED = 3\n}\n\nexport enum FunderMemberAssociation {\n UMBRELLA_LEAD = 0,\n UMBRELLA_MEMBER = 1,\n COLLABORATIVE_MEMBER = 2,\n COLLABORATIVE_LEAD = 3,\n EVENT = 4,\n EVENT_MEMBER = 5\n}\n\nexport enum FunderMemberType {\n FUNDER,\n USER\n}\n\nexport enum ShowFunding {\n TRUE = 1,\n FALSE = 0,\n}\n\nexport enum ShowEndorsed {\n TRUE = 1,\n FALSE = 0,\n}\n\nexport enum FunderStatus {\n ACTIVE = 1,\n ARCHIVED = 2\n}\n\nexport enum FunderServiceLevel {\n Individual = 1,\n Standard = 2,\n Institution = 3,\n FullService = 4,\n Enterprise = 5,\n \"IndividualFind&Fund\" = 6,\n Premium = 7,\n Basic = 8,\n}\n\nexport enum FunderNetworkVisibility {\n TRUE = 1,\n FALSE = 0,\n}\n\nexport enum FunderProfileVisibility {\n TRUE = 1,\n FALSE = 0,\n}\n\nexport enum FunderUserRole {\n PRIMARY_USER = 4,\n LOG_IN_AS = 2,\n MARK_FUNDING = 5,\n DISCOVER_PROPOSALS = 6,\n MANAGE_PROFILE = 1,\n GRANTS_MANAGEMENT = 8,\n MANAGE_USERS = 9,\n MANAGE_GRANTS = 10,\n MANAGE_DASHBOARD = 11\n}\n\nexport enum FundPriorities {\n CAPACITY_BUILDING = 0,\n RAPID_OR_URGENT = 1,\n MULTI_YEAR = 2,\n}\n\nexport enum FundGrantCategories {\n GENERAL_OPERATING = 0,\n PROJECT_BASED = 1,\n RESTRICTED = 2\n}\n\nexport enum FundDecisionStructure {\n PARTICIPATORY_MOVEMENT_LED = 0,\n DONOR_LED = 1,\n CROSS_CLASS = 2,\n OTHER = 3\n}\n\nexport enum FundType {\n ALIGNED_FUND = 0,\n COLLABORATIVE_FUND = 1,\n POOLED_FUND = 2,\n GIVING_CIRCLE = 3,\n OTHER = 4\n}\n\nexport enum CategoryOfFunding {\n \"501C3\" = 0,\n \"501C4\" = 1,\n FEDERALLY_RECOGNIZED_TRIBE = 2,\n INDIVIDUALS_SCHOLARSHIPS_FELLOWSHIPS = 3,\n INTERNATIONAL_ORGANIZATIONS = 4,\n CANDIDATES = 5,\n PACS = 6\n}\n\nexport enum ProposalSummaryFrequency {\n NONE, \n DAILY,\n WEEKLY\n}","export class EnumInterpreter<EnumType> {\n public readonly enumMap: Map<EnumType, string>;\n\n constructor(instanceEnumMap: Map<EnumType, string>) {\n this.enumMap = instanceEnumMap;\n }\n\n public interpret(interpretable: EnumType): string {\n return this.enumMap.get(interpretable)!;\n }\n}","export const socialMedia = {\n twitter: \"https://www.twitter.com/justfundus\",\n facebook: \"https://www.facebook.com/justfundus\",\n instagram: \"https://www.instagram.com/justfundus\",\n linkedin: \"https://www.linkedin.com/company/justfund\",\n};","import { Box } from '@mui/material';\nimport React from 'react';\n\ninterface SocialIconProps {\n url: string;\n}\nexport const SocialIcon = ({ url }: SocialIconProps) => {\n return (\n <Box component=\"div\">\n <Box component=\"img\"\n src={url}\n width= \"30px\"\n height= \"30px\" \n style={{ cursor: 'pointer' }}\n alt=\"logo\" />\n </Box>\n );\n\n}\n","import React from \"react\";\nimport { socialMedia } from \"./socialMedia\";\nimport { SocialIcon } from './SocialIcon';\nimport { Box } from \"@mui/material\";\n\nconst classes = {\n svgIcon: {\n marginRight: '0.7em',\n marginTop: '0.7em',\n },\n\n socialContainer: {\n display: 'flex',\n }\n\n};\n\nexport const SocialBar = () => {\n \n const { twitter, facebook, instagram, linkedin } = socialMedia;\n\n return (\n <Box component=\"div\" sx={classes.socialContainer}>\n <Box component='a' href={twitter} sx={classes.svgIcon}>\n <SocialIcon url={'/images/icon_white_twitter.svg'} />\n </Box>\n <Box component='a' href={facebook} sx={classes.svgIcon}>\n <SocialIcon url={'/images/icon_white_facebook.svg'} />\n </Box>\n <Box component='a' href={instagram} sx={classes.svgIcon}>\n <SocialIcon url={'/images/icon_white_instagram.svg'} />\n </Box>\n <Box component='a' href={linkedin} sx={classes.svgIcon}>\n <SocialIcon url={'/images/icon_white_linkedin.svg'} />\n </Box>\n </Box>\n );\n}","import { Link as RRLink, useLocation } from 'react-router-dom';\nimport { Box, Grid, Link, Typography } from '@mui/material';\nimport { Logo } from '../../common/logo/Logo';\nimport { SocialBar } from '../../social/SocialBar';\n\nconst classes = {\n\n infoJustfundUs: {\n color: '#FFFFFF',\n fontSize: '18px',\n marginTop: '1em',\n textDecoration: 'underline',\n \"&:hover\": {\n textDecoration: 'underline',\n },\n },\n\n questionsComments: {\n color: '#FFFFFF',\n fontSize: '18px',\n marginBottom: '1.5em',\n },\n\n terms: {\n color: '#FFFFFF',\n fontFamily: 'Proxima Nova, sans-serif',\n fontSize: '12px',\n lineHeight: '0em',\n marginTop: '3em',\n textDecoration: 'underline',\n \"&:hover\": {\n textDecoration: 'underline',\n },\n },\n\n privacy: {\n color: '#FFFFFF',\n fontFamily: 'Proxima Nova, sans-serif',\n fontSize: '12px',\n lineHeight: '0em',\n marginTop: '3em',\n textDecoration: 'underline',\n \"&:hover\": {\n textDecoration: 'underline',\n },\n },\n\n boxStyleL1: {\n backgroundColor: '#091B30',\n borderTop: '1px solid #d8d8d8',\n MarginTop: '40px',\n width: '100%',\n },\n\n boxStyleL2: {\n padding: '0px 4px',\n maxWidth: '1024px',\n marginLeft: 'auto',\n marginRight: 'auto',\n },\n\n boxStyleL3: {\n padding: '30px 4px 60px 4px',\n maxWidth: '1024px',\n marginLeft: 'auto',\n marginRight: 'auto',\n },\n\n body2: {\n fontSize: '1.125rem',\n fontFamily: 'Proxima Nova, sans-serif',\n fontWeight: '400',\n lineHeight: '1.43',\n marginTop: '1em',\n },\n\n slash: {\n color: '#FFFFFF',\n fontFamily: 'Proxima Nova, sans-serif',\n fontSize: '12px',\n lineHeight: '0em',\n marginTop: '0.8em',\n textDecoration: 'none',\n \"&:hover\": {\n textDecoration: 'none',\n },\n },\n\n};\n\nexport const Footer = () => {\n const location = useLocation();\n \n if (!(location.pathname === '/' || location.pathname.startsWith('/justfund'))) {\n return null;\n }\n\n return (\n <Box sx={classes.boxStyleL1}>\n <Box sx={{ ' @media (max-width: 768px)': { marginLeft: ' 1em' } }}>\n <Box pt='20px' fontWeight='bold' fontSize={12}>\n <Box sx={classes.boxStyleL2}>\n <Logo img='/images/JFU_logo.svg' />\n <SocialBar />\n <Typography sx={classes.body2} paragraph>\n <Link href='mailto:info@justfund.us' sx={classes.infoJustfundUs}>\n <strong>info@justfund.us</strong>\n </Link>\n </Typography>\n </Box>\n <Box sx={classes.boxStyleL3}>\n <Grid container spacing={2}>\n <Grid item>\n <Link variant='body1' component='a' href='https://justfund.us/terms-of-use/' sx={classes.terms}>Terms</Link>\n </Grid>\n <Grid item>\n <Typography variant='body1' sx={classes.slash}>|</Typography>\n </Grid>\n <Grid item>\n <Link variant='body1' component='a' href='https://justfund.us/privacy-policy/' sx={classes.privacy}>Privacy</Link>\n </Grid>\n </Grid>\n </Box>\n </Box>\n </Box>\n </Box>\n );\n\n};\n","import { Box, SxProps, Theme, Typography } from '@mui/material';\nimport JFCircularProgress from '../../../common/components/JFCircularProgress/JFCircularProgress.component';\n\nexport const Loading = ({ sx }: { sx?: SxProps<Theme> }) => (\n <Box\n sx={{\n textAlign: 'center',\n m: '140px auto 0 auto',\n display: 'grid',\n justifyItems: 'center',\n ...sx\n }}\n >\n <Typography paragraph>Loading...</Typography>\n <JFCircularProgress />\n </Box>\n);\n","// utils\nimport { theme } from '../../util/util';\nimport { AlertPosition } from './Notification';\n\nexport const classes = {\n paper: {\n position: 'absolute',\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n backgroundColor: '#FFFFFF',\n boxShadow: theme.shadows[5],\n width: '75vw',\n height: '75vh'\n },\n border: {\n borderTop: '1px solid #979797',\n width: '100%'\n },\n textField: {\n [`& fieldset`]: {\n borderRadius: 0,\n border: ' 1px solid #000000',\n boxShadow: 'inset 0 2px 00 #ffffff'\n }\n }\n};\n\nexport const alertStyles = {\n alert: {\n zIndex: 2000,\n position: 'fixed',\n transition: 'fade',\n minWidth: 300,\n maxWidth: 600,\n borderRadius: '0.5rem',\n '.MuiAlert-message': {\n padding: '12px 0 0 0'\n }\n },\n alertTitle: {\n fontSize: '16px',\n fontWeight: 400,\n lineHeight: '24px',\n marginBottom: 0\n }\n};\n\nexport const getPositionStyles = (position: AlertPosition) =>\n ({\n 'top-right': {\n top: '20px',\n right: '20px'\n },\n 'top-left': {\n top: '20px',\n left: '20px'\n },\n 'bottom-right': {\n bottom: '20px',\n right: '20px'\n },\n 'bottom-left': {\n bottom: '20px',\n left: '20px'\n },\n 'bottom-center': {\n bottom: '20px',\n left: '50%',\n transform: 'translateX(-50%)'\n }\n }[position]);\n","import React from \"react\";\nimport {\n Typography,\n Grid,\n} from \"@mui/material\";\nimport JFReadOnlyTextField from \"../../../../../common/components/JFReadOnlyTextField/JFReadOnlyTextField.component\";\nimport { IProfile } from \"../../../../interfaces/IProfile\";\nimport { ProfileCardTitleAvatar } from \"../../../profileCard/ProfileCard.styles\";\nimport { CloseButton, Container, CustomDrawer, CustomLink, DrawerBox, InfoContainer, TitleContainer } from \"./styles\";\n\ninterface ProfileDrawerProps {\n open: boolean;\n onClose: () => void;\n entity: IProfile;\n funderName: string\n}\n\nconst ProfileDrawer: React.FC<ProfileDrawerProps> = ({ open, onClose, entity, funderName }) => {\n\n const {\n mission,\n description,\n team_description,\n } = entity.detail;\n\n return (\n <CustomDrawer anchor=\"right\" open={open} onClose={onClose} sx={{ zIndex: 9999 }}>\n <DrawerBox>\n <TitleContainer container alignItems=\"center\" justifyContent={\"space-between\"}>\n <Grid item>\n <ProfileCardTitleAvatar\n src={entity.logoUrl}\n alt={entity.name}\n >\n {entity.name.charAt(0).toUpperCase()}\n </ProfileCardTitleAvatar>\n </Grid>\n <Grid item xs={8}>\n <Typography variant=\"h5\">{entity?.name}</Typography>\n </Grid>\n <Grid item xs={2} display=\"flex\" justifyContent={\"flex-end\"}>\n <CloseButton onClick={onClose} />\n </Grid>\n </TitleContainer>\n <Container container rowSpacing={2}>\n <InfoContainer>\n <Typography variant=\"body2\" color=\"textPrimary\">\n {`To apply for funding opportunities offered by ${funderName ?? '-'} Organization `}\n <CustomLink href=\"#\" to=\"/sign-up\">\n {`log in`}\n </CustomLink>\n {` or `}\n <CustomLink href=\"#\" to={\"/justfund/signin\"}>\n {`sign up now`}\n </CustomLink>\n {` . If you have any questions, reach out to support at `}\n <CustomLink href=\"mailto:info@justfund.us\" to=\"#\">\n info@justfund.us\n </CustomLink>\n .\n </Typography>\n </InfoContainer>\n {mission &&\n <Grid xs={12} item>\n <Typography sx={{ marginBottom: 1 }} variant=\"h5\">Mission Statement</Typography>\n <JFReadOnlyTextField value={mission} isHtml={true} />\n </Grid>\n }\n {!!description &&\n <Grid xs={12} item>\n <Typography sx={{ marginBottom: 1 }} variant=\"h5\">{Array.isArray(entity?.proposals) && `Organization`} Description</Typography>\n <JFReadOnlyTextField value={description} isHtml={true} />\n </Grid>\n }\n {!!team_description &&\n <Grid xs={12} item>\n <Typography sx={{ marginBottom: 1, marginTop: 2 }} variant=\"h5\"> Team Description</Typography>\n <JFReadOnlyTextField value={team_description} isHtml={true} />\n </Grid>\n }\n </Container>\n </DrawerBox>\n </CustomDrawer>\n );\n};\n\nexport default ProfileDrawer;\n","import { AxiosError, AxiosRequestConfig } from 'axios';\nimport {\n ITokenResponse,\n IVerifyLoginResponse\n} from '../../interfaces/IAuth.interfaces';\nimport { IUserAssociations } from '../../interfaces/IUserAssociations.interface';\nimport { api } from './api.service';\n\nexport interface IEntity {\n entityType: string | null;\n entityId: string | null;\n}\n\ntype JFTokenParts = {\n header: {\n alg: string;\n type: string;\n };\n payload: {\n userId: number;\n iat: number;\n exp: number;\n };\n signature: string;\n};\n\nexport class UserAuthService {\n private static baseRoute = '/api/users';\n private static storageKey = 'JF_TOKEN';\n private static entityTypeKey = 'JF_ENTITY_TYPE';\n private static entityIdKey = 'JF_ENTITY_ID';\n private static refreshTokenKey = 'JF_REFRESH_TOKEN';\n\n private static pendingRefresh: Promise<any> | null = null;\n\n private static set _token(token: string | null) {\n if (token) localStorage.setItem(this.storageKey, token);\n else localStorage.removeItem(this.storageKey);\n }\n\n // Token Helpers\n public static get token(): string | null {\n return localStorage.getItem(this.storageKey);\n }\n\n private static set refreshToken(token: string | null) {\n if (token) localStorage.setItem(this.refreshTokenKey, token);\n else localStorage.removeItem(this.refreshTokenKey);\n }\n\n private static get refreshToken(): string | null {\n return localStorage.getItem(this.refreshTokenKey);\n }\n\n private static get parsedToken(): JFTokenParts | null {\n if (this.token === null) return null;\n const [header, payload, signature] = this.token\n .split('.')\n .map((part, idx) => {\n return idx < 2 ? JSON.parse(atob(part)) : part;\n });\n\n return { header, payload, signature };\n }\n\n public static async login(\n email: string,\n password: string\n ): Promise<ITokenResponse> {\n const res = await api.post('/api/auth/login', { email, password });\n this._token = res.data?.token;\n this.refreshToken = res.data?.refreshToken;\n return res.data as ITokenResponse;\n }\n\n public static async exchangeToken(): Promise<string | null> {\n if (this.refreshToken === null)\n return new Promise((resolve) => resolve(null));\n if (this.pendingRefresh) return this.pendingRefresh;\n\n this.pendingRefresh = api\n .get('api/auth/refresh', {\n headers: { 'Refresh-Token': this.refreshToken }\n })\n .then((res) => {\n this.pendingRefresh = null;\n this._token = res.data.token;\n this.refreshToken = res.data.refreshToken;\n });\n return this.pendingRefresh;\n }\n\n public static async getAssociations(\n id: number,\n options: AxiosRequestConfig = {}\n ): Promise<IUserAssociations> {\n const res = await api.get(`${this.baseRoute}/${id}/associations`, options);\n return res.data as IUserAssociations;\n }\n\n /**\n * This function will confirm that the user is logged in and if they are not will log them out and\n * redirect to the login screen\n * @returns IVerifyLoginResponse\n */\n public static async verifyLogin(\n config: AxiosRequestConfig = {}\n ): Promise<IVerifyLoginResponse> {\n const maxRetries = 3;\n let attempts = 0;\n \n while (attempts < maxRetries) {\n try {\n const res = await api.get('/api/auth/verifylogin', config);\n return res.data as IVerifyLoginResponse;\n } catch (exc) {\n attempts++;\n \n const isAxiosError = exc as AxiosError;\n const status = isAxiosError ? (isAxiosError.response?.status || 0) : 0;\n \n if (status === 502 && attempts < maxRetries) {\n continue; // Reintenta si el código de estado es 502.\n }\n \n if (typeof exc === 'object' && exc !== null && isAxiosError && isAxiosError.message === 'canceled') {\n return Promise.reject(exc);\n }\n \n // Si no es un error 502 o se alcanzaron los intentos máximos, cierra sesión y lanza el error.\n this.logout(true);\n return Promise.reject(exc);\n }\n }\n \n // Si se agotan todos los intentos sin éxito, lanza un error.\n throw new Error('Failed to verify login after multiple attempts');\n }\n\n // Reset Password routes\n public static async sendPasswordReset(email: string): Promise<boolean> {\n const res = await api.post('/api/auth/reset-password-email', { email });\n return res.data as any;\n }\n\n public static async resetPassword(\n token: string,\n email: string,\n password: string\n ): Promise<boolean> {\n const res = await api.post(`/api/auth/reset-password/${token}`, {\n email,\n password\n });\n return res.data as any;\n }\n\n public static tokenIsExpired(): boolean {\n if (this.parsedToken === null) return true;\n const { payload } = this.parsedToken;\n const iatUnixMillis = parseInt(payload.iat + '000', 10);\n const fourHoursAfterCreation = new Date(iatUnixMillis).getTime() + 14400000;\n const expUnixMillis = parseInt(payload.exp + '000', 10);\n const earliestExpiration =\n fourHoursAfterCreation < expUnixMillis\n ? fourHoursAfterCreation\n : expUnixMillis;\n return new Date().getTime() > earliestExpiration;\n }\n\n // Used to support various roles a user can have... i.e. funder group, vs grantee\n public static getEntity(): IEntity {\n return {\n entityType: localStorage.getItem(this.entityTypeKey),\n entityId: localStorage.getItem(this.entityIdKey)\n };\n }\n\n public static setEntity({ entityType, entityId }: IEntity) {\n entityType\n ? localStorage.setItem(this.entityTypeKey, entityType)\n : localStorage.removeItem(this.entityTypeKey);\n entityId\n ? localStorage.setItem(this.entityIdKey, entityId)\n : localStorage.removeItem(this.entityIdKey);\n }\n\n public static logout(shouldRedirect = false) {\n if (this.tokenIsExpired()) {\n this.exchangeToken().then((newToken) => {\n if (!this.tokenIsExpired()) {\n return api.get('/api/auth/logout').then((response) => {\n this._token = null;\n this.refreshToken = null;\n this.setEntity({ entityId: null, entityType: null });\n window.location.replace(\n shouldRedirect\n ? `${\n window.location.origin\n }/justfund/signin?redirect=${encodeURIComponent(\n window.location.pathname + window.location.search\n )}`\n : `${window.location.origin}/justfund/signin`\n );\n });\n } else\n return window.location.replace(\n shouldRedirect\n ? `${\n window.location.origin\n }/justfund/signin?redirect=${encodeURIComponent(\n window.location.pathname + window.location.search\n )}`\n : `${window.location.origin}/justfund/signin`\n );\n });\n } else {\n api.get('/api/auth/logout').then((response) => {\n this._token = null;\n this.refreshToken = null;\n this.setEntity({ entityId: null, entityType: null });\n window.location.replace(\n shouldRedirect\n ? `${\n window.location.origin\n }/justfund/signin?redirect=${encodeURIComponent(\n window.location.pathname + window.location.search\n )}`\n : `${window.location.origin}/justfund/signin`\n );\n });\n }\n }\n\n public static async unSubscribeEmailFrequencyByToken(\n token: string\n ): Promise<void> {\n try {\n await api.post(`/api/auth/unsubscribe-email-frequency`, { token });\n } catch (error) {\n throw new Error('Failed to unsubscribe');\n }\n }\n}\n","export * from './funder-enums';","export enum RubricScoreStatus {\n DRAFT = 0,\n SUBMITTED = 1\n}\n\nexport enum ApplicationScoringStatus {\n NOT_APPLY = -1,\n PENDING = 0,\n ACCEPTED = 1,\n DECLINED = 2\n}\n\nexport enum GrantCycleScoringStatus {\n IN_REVIEW = 1,\n INACTIVE = 0,\n ALL = -1\n}\n\nexport enum EUpdateScorersAction {\n BULK_ADD = 'bulk_add',\n BULK_REMOVE = 'bulk_remove',\n EDIT = 'edit',\n TOP_EDIT = 'top_edit'\n}\n\nexport enum AVG_SCORE_FILTER {\n ALL,\n LESS_THAN,\n GREATER_THAN\n}\n\nexport enum ReviewersInfoTooltipSteps {\n NONE,\n STEP_ONE,\n STEP_TWO,\n STEP_THREE\n}\n\nexport enum ScoringAdditionalFilters {\n FILTER_TAX_STATUS,\n FILTER_ORG_BUDGET,\n FILTER_BIPOC_LED\n}","import React from 'react';\nimport Chip from '@mui/material/Chip';\nimport { styled } from '@mui/material/styles';\nimport { IProfile } from '../../../shared/interfaces/IProfile';\n\ninterface ProfileTypeTagProps {\n types: ('Nonprofit' | 'JustFunder' | 'Fund' | 'Project' | 'Beta')[];\n}\n\nconst typeStyles: {\n [key in ProfileTypeTagProps['types'][number]]: {\n backgroundColor: string;\n color: string;\n };\n} = {\n Nonprofit: {\n backgroundColor: '#E3F2FD',\n color: '#004391'\n },\n JustFunder: {\n backgroundColor: '#E8F5E9',\n color: '#044B0E'\n },\n Fund: {\n backgroundColor: '#F3E5F5',\n color: '#462D58'\n },\n Project: {\n backgroundColor: '#FBE9E7',\n color: '#8A3102'\n },\n Beta: {\n backgroundColor: '#FFF7E0',\n color: '#8A3102'\n }\n};\n\nconst baseStyles = `\n height: 28px;\n font-size: 14px;\n font-family: 'Proxima Nova';\n font-weight: 400;\n line-height: 20px;\n letter-spacing: 0.25px;\n word-wrap: break-word;\n margin: 4px;\n border: none; \n border-radius: 6px;\n`;\n\nconst getChipStyles = (type: ProfileTypeTagProps['types'][number]) => `\n background-color: ${typeStyles[type].backgroundColor};\n color: ${typeStyles[type].color};\n ${baseStyles}\n`;\n\nexport const StyledChip = styled(Chip)<{ type: ProfileTypeTagProps['types'][number] }>`\n ${({ type }) => getChipStyles(type)}\n`;\n\nconst ProfileTypeTag: React.FC<ProfileTypeTagProps> = ({ types }) => {\n return (\n <>\n {types.map((type, index) => (\n <StyledChip key={index} label={type} type={type} variant=\"outlined\" />\n ))}\n </>\n );\n};\n\nexport default ProfileTypeTag;\n\nexport const getProfileTypes = (\n profile: IProfile\n): ('Nonprofit' | 'JustFunder' | 'Fund' | 'Project')[] => {\n const types: ('Nonprofit' | 'JustFunder' | 'Fund' | 'Project')[] = [];\n\n if (profile.funder) {\n types.push('JustFunder');\n }\n\n if (\n !profile.funder &&\n (profile?.detail?.tax_status_id === 1 || profile?.detail?.tax_status_id === 2 || profile?.detail?.tax_status_id === 4)\n ) {\n types.push('Nonprofit');\n }\n\n if (profile?.fund === 1) {\n types.push('Fund');\n }\n\n return types;\n};\n","import { TimeConstraints } from './types';\n\nexport const announcementTip =\n 'JustFund requires that all announcement dates be scheduled Tuesdays - Fridays at 6:00 AM Pacific Standard Time to ensure that JustFund staff are available to provide assistance.';\nexport const deadlineTip =\n 'JustFund requires that all cycle deadlines be scheduled Tuesdays - Thursdays at 5:00 PM Pacific Standard Time to ensure that JustFund staff are available to provide assistance';\nexport const decisionsTip =\n 'Please indicate the date you anticipate notifying applicants of your decision.';\nexport const requiredErrorMessage = 'This field is required';\n\nexport enum KeyDates {\n ANNOUNCEMENT_DATE = 'announcementDate',\n DEADLINE_DATE = 'deadlineDate',\n DECISION_DATE = 'decisionDate',\n DISBURSEMENT_DATE = 'disbursementDate'\n}\n\nexport const TIMEZONE = 'PST8PDT';\n\nexport const timeConstraints: TimeConstraints = {\n timeZone: TIMEZONE,\n announcementTime: [6, 0],\n deadlineTime: [17, 0]\n};\n","import { Box, Button, List, ListItem, Typography, styled } from '@mui/material';\n\nexport const StyledBox = styled(Box)({\n fontSize: '18px',\n});\n\nexport const PreviewTab = styled(Box)({\n marginTop: '10px',\n backgroundColor: '#1A75BD',\n width: '150px',\n textAlign: 'center',\n fontWeight: 'bold',\n color: '#fff',\n position: 'absolute',\n});\n\nexport const ApplyButton = styled(Button)({\n padding: '.75rem 10rem',\n fontWeight: '600',\n borderRadius: 2,\n letterSpacing: '1.3px',\n});\n\nexport const MainContainer = styled(Box)({\n margin: '0 auto',\n marginTop: '30px',\n maxWidth: '1024px',\n});\n\nexport const CopyPublicLinkButton = styled(Button)({\n textTransform: 'none',\n color: '#1a75bd',\n gap: '5px',\n});\n\nexport const BottomSpacedText = styled(Typography)({\n marginBottom: '16px',\n});\n\nexport const StyledList = styled(List)({\n listStyleType: 'disc', \n paddingLeft: '32px',\n});\n\nexport const StyledListItem = styled(ListItem)({\n display: 'list-item',\n});","export enum GrantCycleType {\n OPEN = 0,\n INVITATION_ONLY = 1\n}\n\nexport enum GrantCycleSections {\n GrantSetUp = 'GrantSetUp',\n GrantDates = 'GrantDates',\n GrantRequestForProposals = 'GrantRequestForProposals',\n GrantInvite = 'GrantInvite',\n GrantCommunications = 'GrantCommunications',\n GrantCheckIn = 'GrantCheckIn'\n}","export default __webpack_public_path__ + \"static/media/blueinfo.1b810654.svg\";","import React from 'react';\nimport { Box, Breadcrumbs, Typography } from '@mui/material';\nimport { useFunderContext } from '../../funder/providers/UserProvider';\nimport { LinkInternal } from './legacy-ui';\n\ninterface props {\n crumbs: {\n link?: string;\n text: string;\n }[];\n}\n\nexport const PageHeader = ({ crumbs }: props) => {\n const { funder } = useFunderContext();\n const name = funder?.name;\n\n return (\n <Box sx={{ borderBottom: '1px solid #d8d8d8', backgroundColor: '#ffffff' }}>\n <Box maxWidth='1024px' m='0 auto' p='4px' style={{ display: 'none' }}>\n <Typography align='right'>{name}</Typography>\n <Breadcrumbs separator='>' aria-label='breadcrumb'>\n {crumbs.map((a) => (\n a.link ?\n <LinkInternal key={a.text} href={a.link}>{a.text}</LinkInternal> :\n <Typography key={a.text}>{a.text}</Typography>\n ))}\n </Breadcrumbs>\n </Box>\n </Box>\n );\n};\n","import React, { createContext, Dispatch, useContext, useEffect, useState } from 'react';\nimport { IRfp } from '../../shared/interfaces/IRfp.interfaces';\nimport { IUser } from '../../shared/interfaces/IUser.interface';\nimport { RfpService } from '../../shared/services/api-service/rfp-api.service';\nimport { UserService } from '../../shared/services/api-service/user-api.service';\n\ntype AdminContextProvider = {\n selectUser: (id: number) => Promise<void>;\n user: IUser | null,\n adminRfp: IRfp | null,\n selectRfp: (id: number) => void,\n}\n\nconst defaultContext: AdminContextProvider = {\n selectUser: () => Promise.reject('Not Implemented'),\n user: null,\n adminRfp: null,\n selectRfp: () => { },\n}\n\n// This is just scaffolding in case we need some context for the admin ... update as needed following similar patterns to funder/providers/UserProvider.tsx\nconst AdminContext = createContext<AdminContextProvider>(defaultContext);\n\nexport const useAdminContext = () => useContext(AdminContext);\n\nexport default function AdminProvider({ children }: { children: React.ReactChild }) {\n\n const [user, setUser] = useState<IUser | null>(null);\n const [adminRfp, setRfp]: [IRfp | undefined, Dispatch<React.SetStateAction<IRfp | undefined>>] = useState();\n\n const selectUser = async (id: number) => {\n try {\n const selected = await UserService.getById(id);\n setUser(selected);\n } catch (exc) {\n console.error(exc);\n }\n }\n\n const selectRfp = async (id: number) => {\n // if (id === 0) {\n // setRfp(null)\n // }\n const newRfp = await RfpService.getById(id);\n setRfp(newRfp);\n return;\n }\n\n const context = {\n selectUser,\n user,\n adminRfp: adminRfp ? adminRfp : null,\n selectRfp,\n };\n\n return (\n <AdminContext.Provider value={context}>\n {children}\n </AdminContext.Provider>\n )\n\n}","const getJSONArr = (data?: string | object) => {\n let result = [];\n if (typeof data === 'object' && Array.isArray(data)) {\n result = data;\n } else if (typeof data === 'string') {\n result = getJSONObj(data) || [];\n }\n return result;\n};\n\nconst getJSONObj = (value?: string) => {\n let obj = null;\n try {\n obj = value ? JSON.parse(value) : null;\n } catch (error) {\n console.error('Error parsing JSON', error);\n }\n return obj;\n};\n\nconst getIsEqualObjs = (objA: any, objB: any) => {\n if (objA && objA != null && objB && objB != null) {\n return objA === objB;\n }\n return false;\n}\n\nexport { getJSONObj, getJSONArr, getIsEqualObjs };\n","import { Grid, Typography } from '@mui/material';\nimport { Bounce, ToastOptions, toast } from 'react-toastify';\n\ninterface ToastContentProps {\n message: string;\n fontSize?: string;\n dataTestId?: string;\n}\n\nexport const ToastContent: React.FC<ToastContentProps> = ({ message, dataTestId, fontSize = '19px' }) => {\n return (\n <Grid container alignItems=\"center\">\n <Grid item xs={11}>\n <Typography data-testid={dataTestId} sx={{ fontSize: fontSize }}>{message}</Typography>\n </Grid>\n <Grid item xs=\"auto\">\n x\n </Grid>\n </Grid>\n );\n};\n\n// Common options for all toasts\nconst commonToastOptions: ToastOptions = {\n icon: undefined,\n closeButton: false,\n position: 'bottom-right',\n hideProgressBar: true,\n autoClose: 5000,\n closeOnClick: true,\n pauseOnHover: true,\n draggable: true,\n progress: undefined,\n theme: 'colored',\n transition: Bounce\n};\n\n// Success Toast\nexport const successToast = (message: string, options?: ToastOptions, fontSize?: string, className: string = 'toast-green') => {\n toast.success(<ToastContent message={message} dataTestId=\"success_toast\" fontSize={fontSize} />, {\n ...commonToastOptions,\n ...options,\n className: className\n });\n};\n\n// Error Toast\nexport const errorToast = (message: string, options?: ToastOptions, fontSize?: string, className: string = '') => {\n toast.error(<ToastContent message={message} dataTestId=\"error_toast\" fontSize={fontSize} />, {\n ...commonToastOptions,\n icon: undefined,\n closeButton: false,\n ...options,\n className: className\n });\n};\n\n// Info Toast\nexport const infoToast = (message: string, options?: ToastOptions) => {\n toast.info(<ToastContent message={message} dataTestId=\"info_toast\" />, {\n ...commonToastOptions,\n ...options\n });\n};\n\n// Warning Toast\nexport const warningToast = (message: string, options?: ToastOptions) => {\n toast.warning(<ToastContent message={message} dataTestId=\"warning_toast\" />, {\n ...commonToastOptions,\n ...options\n });\n};\n","import { getJSONArr } from '../../funder/components/grantCycles/GrantRequestForm/SupplementalQuestions/utils';\nimport { SurveyQuestionGetter, SurveyQuestionType } from '../enums/survey.enum';\nimport { ISurveyQuestion } from '../interfaces/ISurvey.interfaces';\n\nconst { SUPPLEMENTARY_QUESTIONS, QUESTION_PAYLOAD, QUESTION_DESCRIPTION } =\n SurveyQuestionGetter;\n\nconst parsePayload = (q: ISurveyQuestion) => {\n let result = null;\n const { type, payload } = q;\n try {\n const isStr = typeof payload === 'string';\n if (isStr) {\n result = payload;\n } else {\n const shouldParse = payload && type == SurveyQuestionType.MULTIPLE;\n result = shouldParse ? JSON.stringify(payload) : null;\n }\n } catch (e) {\n console.error(e);\n }\n return result;\n};\n\nconst composeQuestion = (\n key: string,\n questions: any,\n current: ISurveyQuestion[] | null\n) => {\n const formQ = questions[key] || ({} as ISurveyQuestion);\n const currentQ = current?.[parseInt(key)] || ({} as ISurveyQuestion);\n\n const payload = parsePayload(formQ);\n const type = parseInt(formQ.type || currentQ.type || SurveyQuestionType.OPEN);\n const requireQuestion = formQ.is_required || false;\n\n const question = {\n ...currentQ,\n ...formQ,\n requireQuestion,\n payload,\n type\n };\n\n return question;\n};\n\nexport const composeSupplementaryQuestions = (\n formData: any,\n current: ISurveyQuestion[] | null\n) => {\n let rawToUpsert = formData[SUPPLEMENTARY_QUESTIONS] || [];\n rawToUpsert = rawToUpsert.filter((q: any) => ((q.id && current?.find((c) => c.id === q.id)) || q.id == null));\n\n let toUpsert = Object.keys(rawToUpsert)\n .map((key) => composeQuestion(key, rawToUpsert, current))\n .filter((question: any) => question);\n\n if (current && current?.length > 0 && formData[SUPPLEMENTARY_QUESTIONS]) {\n current.forEach((q) => {\n if (!toUpsert.find((c) => c.id === q.id)) {\n toUpsert.push({ ...q, deleteQuestion: true });\n }\n });\n }\n\n return [...toUpsert];\n};\n\nexport const isEmptyOrSpaces = (str: string) => {\n return !str || !str.trim();\n};\n\nconst hasEmptyOptions = (options: any) => {\n let parsedOptions = [];\n\n if (options && typeof options === 'string') {\n parsedOptions = getJSONArr(options);\n }\n\n if (options && Array.isArray(options)) {\n parsedOptions = options;\n }\n\n return parsedOptions.some((opt: any) => isEmptyOrSpaces(opt.value));\n};\n\nexport const hasEmptyQuestions = (questions: any[]) => {\n return questions?.some((q) => {\n const descriptionError = isEmptyOrSpaces(q[QUESTION_DESCRIPTION] || '');\n const optionError =\n (q.type == SurveyQuestionType.MULTIPLE ||\n q.type == SurveyQuestionType.SINGLE) &&\n hasEmptyOptions(q[QUESTION_PAYLOAD]);\n\n return descriptionError || optionError;\n });\n};\n\n","import { AxiosRequestConfig } from \"axios\";\nimport { JFDataGridQueryResponse } from \"../../components/tables/datagrid/JFDataGrid\";\nimport { IBloatedGrantee, ICommitment, ICommitmentsQuery, IProposal } from \"../../interfaces\";\nimport { IBloatedFunder } from \"../../interfaces/IFunder\";\nimport { api } from \"./api.service\";\nimport { IManageFundersRow } from \"./funder-api.service\";\nimport { BaseApiService } from \"./base-api.service\";\nimport { formatUtcDate } from \"../../util/formatters\";\n\n// Interface used for any findAndCountAll query - leave rows: at any[], so it can be used in multiple places. \ninterface IAdminTableProps {\n count: number;\n rows: any[];\n}\nexport class AdminAPIService extends BaseApiService{\n private static baseRoute = '/api/admin'\n\n // IProposal interface might not work here, might need a partial or a completely different interface\n public static async proposals( limit?: number, offset?: number, order?: number,): Promise<IAdminTableProps> {\n const res = await api.get(`${this.baseRoute}/proposals/`, { params: { limit, offset, order } })\n return res.data as IAdminTableProps;\n }\n\n // TODO - type this.\n public static async getUsersReport(options: AxiosRequestConfig<any>,limit?: number, offset?: number, order?: [], where?: any): Promise<IAdminTableProps> {\n const res = await api.get(`${this.baseRoute}/users`, { params: { limit, offset, order, where } })\n return res.data as IAdminTableProps;\n }\n\n public static async getGranteeReport(options: AxiosRequestConfig<any>,limit?: number, offset?: number, order?: [], where?: any): Promise<IBloatedGrantee[]> {\n const res = await api.get(`${this.baseRoute}/granteeReport`, { params: { limit, offset, order, where } })\n return res.data as IBloatedGrantee[];\n }\n\n public static async getById(id: number): Promise<IProposal> {\n const res = await api.get(`${this.baseRoute}/proposals/${id}`)\n return res.data as IProposal;\n }\n\n public static async queryEvents(body: ICommitmentsQuery, options: AxiosRequestConfig = {}): Promise<JFDataGridQueryResponse<ICommitment[]>> {\n const res = await api.post(`${this.baseRoute}/events/query`, body, options);\n return res.data as JFDataGridQueryResponse<ICommitment[]>;\n }\n\n public static async queryCommitments(body: ICommitmentsQuery, options: AxiosRequestConfig = {}): Promise<JFDataGridQueryResponse<ICommitment[]>> {\n const res = await api.post(`${this.baseRoute}/commitments/query`, body, options);\n return res.data as JFDataGridQueryResponse<ICommitment[]>;\n }\n\n public static async queryProposals(body: ICommitmentsQuery, options: AxiosRequestConfig = {}): Promise<JFDataGridQueryResponse<ICommitment[]>> {\n const res = await api.post(`${this.baseRoute}/proposals/query`, body, options);\n return res.data as JFDataGridQueryResponse<ICommitment[]>;\n }\n\n public static async getGrantCycleList(): Promise<any[]> {\n const res = await api.get(`${this.baseRoute}/grant-cycles`)\n return res.data;\n };\n\n public static async getFunderReport(options: AxiosRequestConfig) : Promise<IBloatedFunder[]> {\n const res = await api.get(`${this.baseRoute}/funders/report`);\n return res.data as IBloatedFunder[];\n };\n\n public static async getFunderList(query = {}): Promise<IManageFundersRow[]> {\n const res = await api.get(`${this.baseRoute}/funders`, { params: query }).then(response => {\n return response;\n });\n return res.data as IManageFundersRow[];\n }\n\n public static async adminFunderCSV(params: {}) {\n const res = await api.get(`${this.baseRoute}/csv/admin-funders`, { params: params });\n return res.data;\n };\n\n public static async adminCommitCSV(params: {}) {\n const res = await api.get(`${this.baseRoute}/csv/admin-commitments`, { params: params });\n return res.data;\n };\n\n public static async getRfpNotificationsReportByDateCSV(\n from: string,\n to: string\n ) {\n return this.getCsv(\n `${this.baseRoute}/grant-cycles/notifications/report-by-dates`,\n `rfp-notifications-${formatUtcDate(from)}-${formatUtcDate(to)}.csv`,\n { params: { from, to } }\n );\n }\n \n public static async getRfpNotificationsReportByRfpCSV(\n rfp_id: number\n ): Promise<void> {\n return this.getCsv(\n `${this.baseRoute}/grant-cycles/notifications/report-by-rfp`,\n `rfp-notifications-${rfp_id}.csv`,\n { params: { rfp_id } }\n );\n }\n}","import { AxiosRequestConfig } from \"axios\";\nimport { IFocus } from \"../../interfaces/IFocus\";\nimport { INameAndId } from \"../../interfaces/INameAndID.interfaces\";\nimport { api } from \"./api.service\";\n\nexport class FocusApiServices {\n \n private static baseRoute = \"/api/focus\"\n\n public static async getById(id: number): Promise<IFocus> {\n const res = await api.get(`${this.baseRoute}/${id}`);\n return res.data as IFocus;\n }\n \n public static async list(signal?: AxiosRequestConfig): Promise<INameAndId[]> {\n const res = await api.get(`${this.baseRoute}/`, { ...signal })\n return res.data as INameAndId[];\n }\n\n public static async get():Promise<IFocus[]> {\n const res = await api.get(`${this.baseRoute}`)\n return res.data as IFocus[];\n\n }\n\n public static async update(focus: Partial<IFocus>, id: number): Promise<IFocus> {\n const res = await api.patch(`${this.baseRoute}/${id}`, focus);\n return res.data as IFocus;\n }\n\n\n public static async create(focus: IFocus): Promise<IFocus> {\n const res = await api.post(`${this.baseRoute}`, focus);\n return res.data as IFocus;\n }\n\n}","import { FunderServiceLevel } from '../../../../shared/enums/funder/funder-enums';\nimport { GrantCycleType } from '../../../../shared/enums/grant-cycle.enum';\nimport { IRfp } from '../../../../shared/interfaces/IRfp.interfaces';\nimport { composeSupplementaryQuestions } from '../../../../shared/util/questions';\n\nconst allowedServiceLevels = [\n FunderServiceLevel.Standard,\n FunderServiceLevel.Institution,\n FunderServiceLevel.FullService,\n FunderServiceLevel.Enterprise,\n FunderServiceLevel.Premium,\n FunderServiceLevel.Basic\n];\n\nexport class Utils {\n public static allowedCheckInFeatures(level: FunderServiceLevel) {\n return level ? allowedServiceLevels.includes(level) : false;\n }\n}\n\nconst hasRfpInvitations = (rfp: IRfp, watchedData?: Partial<IRfp>) => {\n const invt =\n watchedData?.invitations?.length || rfp?.invitations?.length || 0;\n return invt > 0;\n};\n\nexport const getRfpType = (\n rfp: IRfp,\n watchedData?: Partial<IRfp>\n): GrantCycleType | null => {\n return Number(watchedData?.type ?? rfp?.type) ?? null;\n};\n\nexport const shouldHandleRfpInvitations = (\n rfp: IRfp,\n watchedData?: Partial<IRfp>\n) => {\n const hasInvitations = hasRfpInvitations(rfp, watchedData);\n const rfpType = getRfpType(rfp, watchedData);\n\n return rfpType === GrantCycleType.INVITATION_ONLY || hasInvitations;\n};\n\nexport const getRequiredResources = (\n watchedData: any,\n attachments: any,\n defaultResources: any\n) => {\n if (!watchedData.attachment_confirm) {\n return defaultResources;\n }\n return watchedData.attachment_confirm === 'true' ? attachments : [];\n};\n\nexport const getNotificationsEnabled = (\n watchedData: any,\n defaultEnabled: boolean\n): boolean => {\n if (!watchedData.notifications_enabled) {\n return defaultEnabled;\n }\n return watchedData.notifications_enabled === 'yes';\n};\n\nexport const getQuestions = (watchedData: any, rfpSurveyQuestions: any) => {\n if (watchedData.questions) {\n return composeSupplementaryQuestions(watchedData, rfpSurveyQuestions);\n }\n return rfpSurveyQuestions;\n};\n\nexport const getChangedField = (field: string, watchedData: any, rfp: any) => {\n return watchedData?.[field] ?? rfp?.[field];\n};\n","import React from \"react\";\nimport { useLocation } from \"react-router-dom\";\n\nexport const useQuery = (): URLSearchParams => {\n const { search } = useLocation();\n return React.useMemo(() => new URLSearchParams(search), [search]);\n}","import React from 'react';\nimport grey from '@mui/material/colors/grey';\nimport { createStyles, makeStyles } from '@mui/styles';\nimport { Theme } from '@mui/material/styles';\n\ninterface JFCircularProgressProps {\n size?: number; \n radius?: string; \n style?: React.CSSProperties;\n}\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n loader: {\n borderStyle: 'solid',\n borderRadius: '50%',\n animation: 'loading-indicator-spinner 1.5s linear infinite'\n }\n })\n);\n\nconst JFCircularProgress: React.FC<JFCircularProgressProps> = ({ size = 50, radius = '5px', style }) => {\n const styles = useStyles();\n\n return (\n <>\n <style>\n {`@keyframes loading-indicator-spinner {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n }`}\n </style>\n <div\n className={styles.loader}\n style={{\n border: `${radius} solid ${grey['200']}`,\n borderTop: `${radius} solid black`,\n width: size,\n height: size,\n ...style\n }}\n />\n </>\n );\n};\n\nexport default JFCircularProgress;\n","import { CommonIcon } from '../../../../../common/Icon/types';\n\nexport const BookmarkIcon = ({ size = 29, color = '#515660', filled = false }: CommonIcon) => (\n <svg\n width=\"auto\"\n height={size}\n viewBox=\"0 0 29 29\"\n fill={filled ? color : 'none'}\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M22.9577 25.375L14.4993 19.3333L6.04102 25.375V6.04167C6.04102 5.40073 6.29563 4.78604 6.74884 4.33283C7.20205 3.87961 7.81674 3.625 8.45768 3.625H20.541C21.182 3.625 21.7966 3.87961 22.2499 4.33283C22.7031 4.78604 22.9577 5.40073 22.9577 6.04167V25.375Z\"\n stroke={color}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M6.21674 24.088L5.80471 24.3712L6.37124 25.1953L6.78326 24.912L6.21674 24.088ZM14.5 19L14.7883 18.5915C14.6173 18.4708 14.3892 18.4694 14.2167 18.588L14.5 19ZM6.78326 24.912L14.7833 19.412L14.2167 18.588L6.21674 24.088L6.78326 24.912ZM14.2117 19.4085L22.7117 25.4085L23.2883 24.5915L14.7883 18.5915L14.2117 19.4085Z\"\n fill={color}\n />\n <path\n d=\"M6.21674 23.088L5.80471 23.3712L6.37124 24.1953L6.78326 23.912L6.21674 23.088ZM14.5 18L14.7883 17.5915C14.6173 17.4708 14.3892 17.4694 14.2167 17.588L14.5 18ZM6.78326 23.912L14.7833 18.412L14.2167 17.588L6.21674 23.088L6.78326 23.912ZM14.2117 18.4085L22.7117 24.4085L23.2883 23.5915L14.7883 17.5915L14.2117 18.4085Z\"\n fill={color}\n />\n </svg>\n);\n","import { CommonIcon } from '../../../../../common/Icon/types';\n\nexport const ProfileIcon = ({ size = 35, color = '#515660' }: CommonIcon) => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 34 37\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle cx=\"17\" cy=\"17.5715\" r=\"16.3929\" stroke={color} strokeWidth=\"1.21429\" />\n <path\n d=\"M33.3929 18.1787C33.3929 27.5878 26.0336 35.1787 17 35.1787C7.96638 35.1787 0.607143 27.5878 0.607143 18.1787C0.607143 8.76958 7.96638 1.17868 17 1.17868C26.0336 1.17868 33.3929 8.76958 33.3929 18.1787Z\"\n stroke={color}\n strokeWidth=\"1.21429\"\n />\n <path\n d=\"M33.3929 18.7858C33.3929 28.5501 26.0148 36.393 17 36.393C7.98525 36.393 0.607143 28.5501 0.607143 18.7858C0.607143 9.02153 7.98525 1.17868 17 1.17868C26.0148 1.17868 33.3929 9.02153 33.3929 18.7858Z\"\n stroke={color}\n strokeWidth=\"1.21429\"\n />\n <path\n d=\"M25.6841 29.9946V25.5111C25.6841 24.4211 25.2111 23.3757 24.3692 22.605C23.5272 21.8342 22.3853 21.4012 21.1947 21.4012H12.2159C11.0253 21.4012 9.88339 21.8342 9.04147 22.605C8.19955 23.3757 7.72656 24.4211 7.72656 25.5111V29.9946\"\n fill={color}\n />\n <path\n d=\"M16.7053 17.2913C19.1847 17.2913 21.1947 15.4512 21.1947 13.1814C21.1947 10.9116 19.1847 9.07153 16.7053 9.07153C14.2259 9.07153 12.2159 10.9116 12.2159 13.1814C12.2159 15.4512 14.2259 17.2913 16.7053 17.2913Z\"\n fill={color}\n />\n <path\n d=\"M25.6841 29.9946V25.5111C25.6841 24.4211 25.2111 23.3757 24.3692 22.605C23.5272 21.8342 22.3853 21.4012 21.1947 21.4012H12.2159C11.0253 21.4012 9.88339 21.8342 9.04147 22.605C8.19955 23.3757 7.72656 24.4211 7.72656 25.5111V29.9946M21.1947 13.1814C21.1947 15.4512 19.1847 17.2913 16.7053 17.2913C14.2259 17.2913 12.2159 15.4512 12.2159 13.1814C12.2159 10.9116 14.2259 9.07153 16.7053 9.07153C19.1847 9.07153 21.1947 10.9116 21.1947 13.1814Z\"\n stroke={color}\n strokeWidth=\"2.42857\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M17.6562 26.8811H7.89522L7.28516 30.9429L15.7852 33.9644L20.7065 33.2639L26.7137 30.9287L21.9266 26.8811H17.6562Z\"\n fill={color}\n />\n </svg>\n);\n","import { CommonIcon } from '../../../../../common/Icon/types';\n\nexport const DiscoverIcon = ({ size = 32, color = '#25282B' }: CommonIcon) => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 32 32\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M14.7082 24.8702C20.3201 24.8702 24.8695 20.3208 24.8695 14.7089C24.8695 9.09697 20.3201 4.54761 14.7082 4.54761C9.09624 4.54761 4.54688 9.09697 4.54688 14.7089C4.54688 20.3208 9.09624 24.8702 14.7082 24.8702Z\"\n stroke={color}\n strokeWidth=\"1.12903\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M27.408 27.4105L21.8828 21.8853\"\n stroke={color}\n strokeWidth=\"1.12903\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M20.7287 23.8213C25.6834 20.5746 27.068 13.926 23.8212 8.97132C20.5745 4.01663 13.9259 2.63208 8.97124 5.87882C4.01656 9.12556 2.63201 15.7741 5.87875 20.7288C9.12549 25.6835 15.7741 27.0681 20.7287 23.8213Z\"\n stroke={color}\n strokeWidth=\"1.12903\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M20.9947 24.2161C25.9469 20.971 27.271 14.2347 23.9523 9.17016C20.6335 4.10559 13.9286 2.63062 8.97644 5.87571C4.02428 9.1208 2.70014 15.8571 6.01889 20.9217C9.33764 25.9862 16.0425 27.4612 20.9947 24.2161Z\"\n stroke={color}\n strokeWidth=\"1.12903\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M26.8429 27.7406L22.3625 23.1744C22.2058 23.0146 22.2015 22.7602 22.3527 22.5953C22.504 22.4304 22.7579 22.4127 22.9305 22.5551L27.8655 26.6259C28.2003 26.902 28.2351 27.4024 27.9417 27.7222C27.6484 28.042 27.1468 28.0504 26.8429 27.7406Z\"\n fill={color}\n stroke={color}\n strokeWidth=\"1.12903\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n","import { AxiosRequestConfig } from 'axios';\nimport { api } from './api.service';\n\nexport abstract class BaseApiService {\n protected static handleObjectUrl(objectUrl: string, fileName: string): void {\n const link = document.createElement('a');\n link.href = objectUrl;\n link.setAttribute('download', fileName);\n document.body.appendChild(link);\n link.click();\n // Cleanup\n document.body.removeChild(link);\n }\n\n protected static async getCsv(\n url: string,\n fileName: string,\n options: AxiosRequestConfig = {}\n ): Promise<void> {\n const res = await api.get(url, {\n responseType: 'blob',\n ...options\n });\n\n if (res.data?.size > 0) {\n const objectUrl = window.URL.createObjectURL(res.data);\n this.handleObjectUrl(objectUrl, fileName);\n }\n }\n\n protected static async postCsv(\n url: string,\n fileName: string,\n data: any,\n options: AxiosRequestConfig = {}\n ): Promise<void> {\n const res = await api.post(url, data, {\n responseType: 'blob',\n ...options\n });\n\n if (res.data?.size > 0) {\n const objectUrl = window.URL.createObjectURL(res.data);\n this.handleObjectUrl(objectUrl, fileName);\n }\n }\n}\n","import { styled } from '@mui/material';\n\nexport const ShadowBox = styled('div')(({ theme }) => ({\n backgroundColor: '#ffffff',\n border: '1px solid #ffffff',\n borderRadius: '2px',\n boxShadow: '3px 3px 6px 0px #dddddd'\n}));","import React from 'react';\nimport { useHistory } from 'react-router-dom';\nimport { IconButton } from '@mui/material';\nimport { focusAreas } from '../../../common/data/data';\nimport { Tooltip } from './Tooltip';\n\ninterface props {\n focus: number;\n size?: number | string;\n link?: string | null;\n}\n\nexport const FocusIcon = ({ focus, size = '28px', link = null }: props) => {\n const history = useHistory ();\n const t = focusAreas[focus] || focusAreas[12];\n return (\n <Tooltip title={t.name}>\n <IconButton\n size='small'\n onClick={(e) => {\n e.stopPropagation ();\n if (link) {\n history.push (`${link}${focus}`);\n }\n }}\n >\n { React.createElement (t.component, { width: size, height: size }, null) }\n </IconButton>\n </Tooltip>\n );\n};\n","import React from 'react';\nimport { Link, LinkProps } from '@mui/material';\n\nexport const LinkExternal = (props: LinkProps) => (\n <Link underline='always' target='_blank' rel='noopener noreferrer' {...props} />\n);\n","import React from 'react';\nimport ReactMarkdown from 'react-markdown';\nimport { styled } from '@mui/material'\nimport { LinkExternal } from './LinkExternal';\n\nfunction LinkRenderer (p) {\n return <LinkExternal href={p.href}>{ p.children }</LinkExternal>;\n}\n\nexport const Markdown = (props) => (\n <StyledReactMarkdown\n {...props}\n renderers={{ link: LinkRenderer }}\n />\n);\n\nconst StyledReactMarkdown = styled(ReactMarkdown)(({}) => ({\n 'h3': {\n fontFamily: 'Proxima Nova, serif',\n fontWeight: '600',\n fontSize: '1.3rem'\n }\n}));\n","import React, { PropsWithChildren } from 'react';\nimport { Link } from '@mui/material';\nimport { Link as RRLink } from 'react-router-dom';\n\ninterface props {\n href: string;\n}\n\nexport const LinkInternal = ({ children, href, ...rest }: PropsWithChildren<props>) => (\n <Link color='primary' underline='always' component={RRLink} to={href} {...rest}>\n {children}\n </Link>\n);\n","import React from 'react';\nimport { AvatarAndNameProps } from './avatarAndName.types';\nimport { Grid, Typography } from '@mui/material';\nimport { Avatar } from '../../../common/components';\nimport { useHistory } from 'react-router';\nimport { getProfileRedirectUri } from '../../util/util';\n\nexport const AvatarAndName: React.FC<AvatarAndNameProps> = ({\n shortProfile,\n avatarSize,\n redirect = true\n}) => {\n const { id, isPublished, name, logo, isGrantee } = shortProfile;\n\n const history = useHistory();\n\n const handleOnClick = () =>\n redirect && isPublished && history.push(getProfileRedirectUri(id, !!isGrantee, false));\n\n return (\n <Grid container columnSpacing={2} justifyContent=\"flex-start\" alignItems=\"center\">\n <Grid item xs=\"auto\" justifyContent=\"start\" alignItems=\"center\">\n <Avatar alt={`${name} logo`} src={logo || ''} avatarSize={avatarSize}>\n {name ? name.substring(0, 1) : 'A'}\n </Avatar>\n </Grid>\n <Grid item xs={8} alignItems=\"center\" display=\"grid\">\n <Typography\n noWrap\n onClick={handleOnClick}\n sx={{\n textDecoration: isPublished ? 'underline' : '',\n cursor: isPublished ? 'pointer' : ''\n }}\n variant=\"h6\"\n >\n {name}\n </Typography>\n </Grid>\n </Grid>\n );\n};\n","import React, { useEffect, useState } from \"react\";\nimport { Grid, IconButton, Typography } from \"@mui/material\";\nimport { UserEntityType } from \"../../../shared/enums/user.enum\";\nimport { IUser } from \"../../../shared/interfaces/IUser.interface\";\nimport { IUserAssociations } from \"../../../shared/interfaces/IUserAssociations.interface\";\nimport { UserAuthService } from \"../../../shared/services/api-service/user-auth-api.service\";\nimport { useHistory } from \"react-router\";\nimport { useFunderContext } from \"../../../funder/providers/UserProvider\";\nimport { Link } from \"react-router-dom\";\nimport { OrgStatus } from \"../../../shared/enums/grantee-status.enum\";\nimport CloseIcon from '@mui/icons-material/Close';\n\n\nexport function PostLoginScreen({ interactionChoice, setOpen }: { interactionChoice: boolean, setOpen: React.Dispatch<React.SetStateAction<boolean>> }) {\n\n const history = useHistory();\n const [user, setUser] = useState<IUser | null>(null);\n const [associations, setAssociations] = useState<IUserAssociations | null>(null);\n const { selectFunder } = useFunderContext();\n\n function updateEntity(id: number, type: UserEntityType) {\n selectFunder(id);\n UserAuthService.setEntity({ entityId: id.toString(), entityType: type?.toString() });\n localStorage.removeItem('funder-preview');\n localStorage.removeItem('grantee-preview');\n }\n\n function associationCount(associations: IUserAssociations): number {\n let count = 0;\n for (let p in associations) count += p.length;\n return count;\n }\n\n function gotoDefaultLocation(associations: IUserAssociations) {\n\n if (associations.funders.length > 0) {\n history.push('/f');\n return;\n }\n if (associations.grantees.length > 0) {\n history.push('/o');\n return;\n }\n }\n\n\n useEffect(() => {\n UserAuthService.verifyLogin().then((userResponse: any) => {\n /*Setting User*/\n setUser(userResponse.user);\n /*Setting User Assosiation*/\n UserAuthService.getAssociations(userResponse.user.id).then((userAssociation) => {\n setAssociations(userAssociation)\n if (associationCount(userAssociation) === 1) {\n return gotoDefaultLocation(userAssociation);\n }\n });\n })\n }, []);\n\n return associations &&\n <Grid container spacing={3} sx={{ display: interactionChoice ? 'block' : 'none' }}>\n <IconButton sx={{ float: 'right' }} size='small' onClick={() => setOpen(false)} aria-label='close'><CloseIcon /></IconButton>\n <Grid item sm={12}>\n <Typography variant='h4' style={{ fontWeight: 'bold' }}>Welcome, {user?.display_name || user?.first_name}!</Typography>\n <Grid item sm={12} mt='1rem' mb='1rem'>\n <Typography variant='h5'>How would you like to interact with the portal?</Typography>\n </Grid>\n {user?.is_admin ?\n <Grid item sx={{ paddingBottom: '0.5em' }}>\n <Typography variant='h5'>As an Admin:</Typography>\n <Link to='/admin'>Go to Admin</Link>\n </Grid>\n : ''\n }\n {(associations?.funders?.length) ?\n <Grid item sm={12} mb='0.5rem'>\n <Typography variant='h5'>As a Funder:</Typography>\n {associations?.funders.map(f =>\n f.status === OrgStatus.ARCHIVED ? \"\" :\n <Grid item sm={12} mb='0.5rem' key={f.id}>\n <a href={`/f/funder/${f.id}`}\n onClick={() => updateEntity(f?.id, UserEntityType.FUNDER)}>{f.name}</a>\n </Grid>\n )}\n </Grid>\n : \"\"\n }\n {(associations?.grantees?.length) ?\n <Grid item sm={12} mb='0.5rem'>\n <Typography variant='h5'>As an Organization:</Typography>\n {associations?.grantees.map(g =>\n g.status === OrgStatus.ARCHIVED ? \"\" :\n <Grid item sm={12} mb='0.5rem' key={g.id}>\n <a href={`/o`}\n onClick={() => updateEntity(g?.id, UserEntityType.GRANTEE)}>{g.name}</a>\n </Grid>\n )}\n </Grid>\n : \"\"\n }\n </Grid>\n </Grid>\n}\n","import { PageHeader } from '../../../shared/components/PageHeader';\n\nexport { PageHeader };\n","import { ISurveyQuestion } from '../../../interfaces/ISurvey.interfaces';\nimport {\n Grid,\n List,\n ListItem,\n ListItemText,\n Typography,\n styled\n} from '@mui/material';\nimport { StyledList, StyledListItem } from '../Rfp/Rfp.styles';\nimport CheckBoxOutlineBlankIcon from '@mui/icons-material/CheckBoxOutlineBlank';\nimport { SurveyQuestionType } from '../../../enums/survey.enum';\nimport JFReadOnlyTextField from '../../../../common/components/JFReadOnlyTextField/JFReadOnlyTextField.component';\nimport { addAsteriskToHtml, processHtmlWithAsterisk } from '../../../util/util';\n\ninterface IApplicationSpecificQuestionsProps {\n surveyQuestions: ISurveyQuestion[];\n}\n\nconst StyledOptionListItem = styled(ListItem)({\n paddingLeft: 'unset'\n});\n\nconst StyledOptionList = styled(List)({\n padding: \"unset\"\n})\n\nexport const renderQuestionOptions = (parsedPayload: any) => {\n return Array.isArray(parsedPayload) && parsedPayload.length > 0 ? (\n <Grid>\n <StyledOptionList dense>\n {parsedPayload.map((option, idx) => {\n return option.value ? (\n <StyledOptionListItem key={option.value + idx}>\n <CheckBoxOutlineBlankIcon fontSize=\"small\" />\n <ListItemText primary={option.value} />\n </StyledOptionListItem>\n ) : null;\n })}\n </StyledOptionList>\n </Grid>\n ) : null;\n};\n\nexport const renderQuestionListItem = (question: ISurveyQuestion) => {\n let parsedPayload = [];\n\n try {\n parsedPayload = question.payload && JSON.parse(question.payload);\n } catch (e) {\n console.error(e);\n }\n\n return question.description ? (\n <StyledListItem key={question.id}>\n <Grid>\n <JFReadOnlyTextField isHtml value={processHtmlWithAsterisk(question.description, question.is_required)} />\n </Grid>\n {question.type === SurveyQuestionType.MULTIPLE ||\n question.type === SurveyQuestionType.SINGLE\n ? renderQuestionOptions(parsedPayload)\n : null}\n </StyledListItem>\n ) : null;\n};\n\nconst ApplicationSpecificQuestions = (\n props: IApplicationSpecificQuestionsProps\n) => {\n const { surveyQuestions } = props;\n\n return surveyQuestions.length > 0 ? (\n <Grid item sm={12} data-testid=\"application_specific_questions_section\">\n <Typography variant=\"h3\">Application Specific Questions</Typography>\n <StyledList>\n {surveyQuestions.map((question) => renderQuestionListItem(question))}\n </StyledList>\n </Grid>\n ) : null;\n};\n\nexport default ApplicationSpecificQuestions;\n","import { useState } from 'react'\nimport { Box, Grid, Typography } from '@mui/material'\nimport ArrowDropUpIcon from '@mui/icons-material/ArrowDropUp'\nimport ArrowDropDownIcon from '@mui/icons-material/ArrowDropDown'\nimport { IProfile } from '../../../interfaces/IViewProfile.interface'\n// components\nimport { Card, Link } from '../../../../common/components'\nimport { getScope } from '../../../util/util'\nimport JFReadOnlyTextField from '../../../../common/components/JFReadOnlyTextField/JFReadOnlyTextField.component'\n\ntype IDetailsProps = {\n entity: IProfile & {\n based_in?: { name: string };\n summary?: string;\n },\n isPublicProfile?: boolean\n}\n\nexport const ProfileDetails = ({ entity, isPublicProfile }: IDetailsProps) => {\n const [showDescription, setShowDescription] = useState(false)\n const [showMoreDescButton, setShowMoreDescButton] = useState(false)\n\n const {\n based_in: basedIn,\n display_name: displayName,\n email,\n location,\n description,\n established,\n proposals,\n granteeContacts,\n contact,\n scope,\n summary\n } = entity || {}\n\n const primaryContact = granteeContacts?.[0]?.contact ?? contact\n\n const contactCheck = !!primaryContact || !!displayName || !!email\n\n const readMoreDesc = (string: string, maxWords: number) => {\n const strippedString = string.trim()\n const array = strippedString.split(' ')\n const wordCount = array.length\n let newString = array.splice(0, maxWords).join(' ')\n\n if (wordCount > maxWords) {\n newString += '...'\n if (!showMoreDescButton) setShowMoreDescButton(true)\n }\n return newString\n }\n\n return (\n <Card paddingX={50} paddingY={40}>\n <Grid container spacing={{ xs: 4, md: 6, lg: 9 }}>\n <Grid sm={12} md={6} item container spacing={2} display=\"block\">\n {!isPublicProfile && summary && (\n <Grid item container spacing={2} display=\"block\">\n <Grid item xs={12}>\n <Typography variant=\"h3\" fontSize={24} fontWeight={600}>\n Summary\n </Typography>\n </Grid>\n <Grid item xs={12}>\n <JFReadOnlyTextField value={summary} isHtml={true} />\n </Grid>\n </Grid>\n )}\n {description && (\n <Grid item container spacing={2} display=\"block\">\n <Grid item xs={12}>\n <Typography variant=\"h3\" fontSize={24} fontWeight={600}>\n {Array.isArray(proposals) && 'Organization'} Description\n </Typography>\n </Grid>\n <Grid item xs={12}>\n <JFReadOnlyTextField \n value={description && showDescription ? description : readMoreDesc(description, 100)} \n isHtml={true} \n />\n {showMoreDescButton && (\n <Link action={() => setShowDescription(!showDescription)}>\n <Box component=\"div\" display=\"flex\" alignItems=\"center\">\n {showDescription ? 'Show less' : 'Show more'}\n {showDescription ? (\n <ArrowDropUpIcon sx={{ margin: 0 }} />\n ) : (\n <ArrowDropDownIcon />\n )}\n </Box>\n </Link>\n )}\n </Grid>\n </Grid>\n )}\n </Grid>\n <Grid sm={12} md={(!isPublicProfile && summary) || description? 6 : 12} item container spacing={2} display=\"block\">\n <Grid item>\n <Typography\n variant=\"h3\"\n fontSize={24}\n fontWeight={600}\n >\n {!isPublicProfile ? 'Fund Information' : 'Profile Information' }\n </Typography>\n </Grid>\n {!!established && (\n <Grid item xs={12} sm={6} md={12}>\n <Typography variant=\"h6\">Established</Typography>\n <Typography variant=\"body2\">{established}</Typography>\n </Grid>\n )}\n {(scope && isPublicProfile) ? (\n <Grid item xs={12} sm={6} md={12}>\n <Typography variant=\"h6\">Scope</Typography>\n <Typography variant=\"body2\">{getScope(scope)}</Typography>\n </Grid>\n ) : null}\n {(!!location?.state || basedIn?.name) && (\n <Grid item xs={12} sm={6} md={12}>\n <Typography variant=\"h6\">Based In</Typography>\n <Typography variant=\"body2\">{location?.state ?? basedIn?.name}</Typography>\n </Grid>\n )}\n {contactCheck && (\n <Grid item xs={12} sm={6} md={12}>\n <Typography variant=\"h6\">Contact</Typography>\n {!!primaryContact ? (\n <>\n <Typography variant=\"body2\">\n { (isPublicProfile && primaryContact.display_name) ? \n primaryContact.display_name :\n `${primaryContact.first_name} ${primaryContact.last_name}`\n }\n </Typography>\n {!!primaryContact.phone && (\n <Typography variant=\"body2\">{primaryContact.phone}</Typography>\n )}\n {!!primaryContact.email && (\n <Link target=\"_blank\" href={`mailto:${primaryContact.email}`}>\n {primaryContact.email}\n </Link>\n )}\n </>\n ) : (\n <>\n {!!displayName && <Typography variant=\"body2\">{displayName}</Typography>}\n {!!email && (\n <Typography variant=\"body2\">\n <Link target=\"_blank\" href={`mailto:${email}`}>\n {email}\n </Link>\n </Typography>\n )}\n </>\n )}\n </Grid>\n )}\n </Grid>\n </Grid>\n </Card>\n )\n}","import { decode } from 'he';\n\nexport const htmlToText = (html?: string): string => {\n if (!html) return '';\n\n const tempDiv = document.createElement('span');\n tempDiv.innerHTML = html;\n const text = tempDiv.textContent || tempDiv.innerText || '';\n\n const decodedText = decode(text);\n\n const cleanedText = decodedText\n .replace(/ /g, ' ')\n .replace(/\\s+/g, ' ')\n .trim();\n\n return cleanedText;\n};\n","import { Box, Button, Divider, Modal, Grid, Typography } from '@mui/material';\nimport { FC } from 'react';\nimport InfoIcon from '@mui/icons-material/Info';\nimport { INotificationState } from './Notification';\n\ninterface NotificationRenderProps {\n notificationState: INotificationState;\n handleClose: (val: boolean, reason?: string) => void;\n}\n\nconst NotificationRender: FC<NotificationRenderProps> = ({\n notificationState,\n handleClose\n}) => {\n const {\n open,\n title,\n message,\n component,\n removeCancelBtn,\n customBtnText,\n customComponent,\n reason\n } = notificationState;\n\n const paper = {\n position: 'absolute' as 'absolute',\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n maxWidth: 600,\n backgroundColor: '#FFFFFF',\n boxShadow: 24,\n borderRadius: '16px',\n background: 'var(#FFFFFF, #FFF)',\n '@media (max-width: 900px)': {\n top: '8em',\n left: 'auto',\n margin: 'auto',\n transform: 'none'\n }\n };\n\n const border = {\n borderTop: '1px solid #979797',\n width: '100%'\n };\n\n const infoIconStyle = {\n color: '#fabc55',\n verticalAlign: 'sub' as 'sub'\n };\n\n return (\n <Modal\n open={open}\n onClose={() => handleClose(false, reason)}\n aria-describedby={'notification-title'}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center'\n }}\n >\n <Box sx={paper}>\n <Grid container>\n <Grid item xs={12}>\n <Box sx={{ p: 4 }}>\n <Typography variant=\"h5\">\n <InfoIcon style={infoIconStyle} />\n <span id=\"notification-title\"> {title}</span>\n </Typography>\n </Box>\n </Grid>\n <Grid item xs={12}>\n <Divider style={border} />\n </Grid>\n {message && (\n <Grid item xs={12}>\n <Box sx={{ px: 4, pt: 4 }}>\n {typeof message === 'string' ? (\n <Typography component=\"p\">{message}</Typography>\n ) : (\n message\n )}\n </Box>\n </Grid>\n )}\n {component && (\n <Grid item xs={12}>\n <Box sx={{ px: 4, pt: 4, pb: 4 }}>\n <Typography component=\"p\">{component}</Typography>\n </Box>\n </Grid>\n )}\n <Grid item xs={12}>\n <Box sx={{ px: 4, pt: 4, pb: 4 }}>\n <Typography component=\"p\">{customComponent}</Typography>\n </Box>\n </Grid>\n <Grid item xs={12}>\n <Divider style={border} />\n </Grid>\n <Grid item xs={12}>\n <Box\n sx={{\n p: 4,\n display: 'flex',\n justifyContent: 'flex-end',\n flexDirection: 'row'\n }}\n >\n <Grid container spacing={1}>\n <Grid item>\n {removeCancelBtn ? null : (\n <Button\n variant=\"outlined\"\n onClick={() => handleClose(false, reason)}\n >\n Cancel\n </Button>\n )}\n </Grid>\n <Grid item>\n <Button\n variant=\"contained\"\n data-testid=\"notification_cta_btn\"\n onClick={() => handleClose(true, reason)}\n >\n {customBtnText ? customBtnText : 'Ok'}\n </Button>\n </Grid>\n </Grid>\n </Box>\n </Grid>\n </Grid>\n </Box>\n </Modal>\n );\n};\n\nexport default NotificationRender;\n","import React, { createContext, useContext, useState } from 'react';\nimport { useCancellableEffect } from '../hooks/useCancellableEffect';\nimport { IEntityFollow, IFollow } from '../interfaces/IFollow';\nimport { IUser } from '../interfaces/IUser.interface';\nimport { UserService } from '../services/api-service/user-api.service';\n\nconst FollowsContext = createContext({\n follows: [] as IFollow[],\n loading: false,\n followEntity: (_: IEntityFollow) => {},\n unfollowEntity: (_: IEntityFollow) => {},\n hydrate: (signal?: AbortSignal) => Promise.resolve(false)\n});\n\ninterface IFollowsProviderProps {\n children: React.ReactNode | null;\n user?: IUser;\n}\n\nexport const useFollowsContext = () => useContext(FollowsContext);\n\nexport function FollowsProvider({ children, user }: IFollowsProviderProps) {\n const [follows, setFollows] = useState<IFollow[]>([]);\n const [loading, setLoading] = useState(false);\n\n const hydrate = (signal?: AbortSignal) => {\n return UserService.getFollowing({ signal }).then((response) => {\n setFollows(response);\n return true;\n });\n };\n\n useCancellableEffect(\n (signal) => {\n if (user?.id) {\n setLoading(true);\n hydrate(signal)\n .catch((err) => {\n if (err.message !== 'canceled') return err;\n })\n .finally(() => setLoading(false));\n }\n },\n [user?.id]\n );\n\n const unfollowEntity = async (entity: IEntityFollow) => {\n setLoading(true);\n await UserService.unfollowEntity(entity);\n setFollows(\n follows.filter(\n (follow) =>\n !(\n follow.entity_id === entity.entity_id &&\n follow.entity_type === entity.entity_type\n )\n )\n );\n setLoading(false);\n };\n\n const followEntity = async (entity: IEntityFollow) => {\n setLoading(true);\n const follow = await UserService.followEntity(entity);\n setFollows([...follows, follow]);\n setLoading(false);\n };\n\n return (\n <FollowsContext.Provider\n value={{ follows, hydrate, followEntity, unfollowEntity, loading }}\n >\n {children}\n </FollowsContext.Provider>\n );\n}\n","import { EnumInterpreter } from \"../../classes/Interpreter\";\n\nexport enum BillingEventType {\n INVOICE = 'invoice',\n INVOICE_ITEM = 'invoiceitem',\n SUBSCRIPTION = 'subscription'\n}\n\nexport enum BillingStatus {\n DRAFT = 'draft',\n OPEN = 'open',\n PAID = 'paid',\n UNCOLLECTABLE = 'uncollectable',\n VOID = 'void',\n CANCELED = 'canceled'\n}\n\nexport const FunderBillingStatusInterpreter = new EnumInterpreter(new Map([\n [BillingStatus.DRAFT, 'Draft'],\n [BillingStatus.OPEN, 'Open'],\n [BillingStatus.PAID, 'Paid'],\n [BillingStatus.UNCOLLECTABLE, 'Uncollectable'],\n [BillingStatus.VOID, 'Void']\n]));\n","import React, { FC } from 'react';\nimport { Box, Grid, Typography } from '@mui/material';\nimport { IRfp } from '../../interfaces/IRfp.interfaces';\nimport DOMPurify from 'dompurify';\nimport { format, utcToZonedTime } from 'date-fns-tz';\nimport { TIMEZONE } from '../../form-section/RfpKeyDates/constants';\nimport { formatDatePSTAndEST } from '../../util/formatters';\n\ntype props = {\n rfp: IRfp;\n};\n\ntype KeyDateItemProps = {\n title: string;\n date?: Date;\n dateString?: string;\n isNewDate?: boolean;\n dateFormat?: string;\n};\n\nconst classes = {\n fontSizeFix: {\n fontSize: 16\n }\n};\n\nconst KeyDateItem: FC<KeyDateItemProps> = ({ date, dateString, title, isNewDate, dateFormat = 'MM/dd/yyyy hh:mm b, z' }) => (\n <Typography paragraph sx={classes.fontSizeFix}>\n <Box sx={{ fontWeight: 'bold', display: 'inline' }}>{`${title}: `}</Box>\n {date ? format(date, dateFormat, {timeZone: TIMEZONE}) : ''}\n {dateString ? dateString : ''}\n {isNewDate && (\n <Box sx={{ marginLeft: '10px', fontWeight: 'bold', display: 'inline' }}>\n NEW DATE\n </Box>\n )}\n </Typography>\n);\n\nexport const KeyDates = ({ rfp }: props) => {\n if (rfp.rolling_cycle && !rfp.key_dates) {\n return (\n <Typography paragraph data-testid=\"rolling_info_text\" sx={classes.fontSizeFix}>\n Applications will be accepted on a rolling basis\n </Typography>\n );\n }\n\n if (!rfp.key_dates) {\n return (\n <Box data-testid=\"dates_details_text\">\n <KeyDateItem\n title={'Deadline to apply'} \n dateString={rfp.deadline_date ? `${formatDatePSTAndEST(rfp.deadline_date).formattedDate} ${formatDatePSTAndEST(rfp.deadline_date).formattedPST} / ${formatDatePSTAndEST(rfp.deadline_date).formattedEST}` : undefined}\n isNewDate={rfp.new_deadline_date}\n />\n <KeyDateItem\n title={'Decisions Expected to be Announced'}\n date={rfp.decision_date ? utcToZonedTime(new Date(rfp.decision_date), TIMEZONE) : undefined}\n isNewDate={rfp.new_decision_date}\n dateFormat={\"MM/dd/yyyy\"}\n />\n </Box>\n );\n }\n\n const keyDates = rfp?.key_dates ? DOMPurify.sanitize(rfp?.key_dates) : '';\n return (\n <Grid\n sx={classes.fontSizeFix}\n data-testid=\"key_dates_text\"\n dangerouslySetInnerHTML={{ __html: keyDates }}\n />\n );\n};\n","import { useHistory } from 'react-router-dom';\nexport const MobileLogo = (props) => {\n const history = useHistory ();\n \n return (\n <div>\n <img\n src={ props.img }\n height='36px'\n width='auto'\n alt='JustFund logo'\n style={{ cursor: 'pointer', marginTop: '0.5em', marginLeft: '1em' }}\n onClick={() => { history.push (props.to); }}\n />\n </div>\n );\n\n}\n","import { Container, styled } from '@mui/material';\nimport { JFContainerProps } from './JFContainer.types';\n\nexport const JFContainer = styled(Container, {\n shouldForwardProp: (prop) => prop !== 'fullScreen'\n})<JFContainerProps>(({ theme, fullScreen = false }) => {\n return fullScreen\n ? {\n display: 'flex',\n justifyContent: 'center',\n maxWidth: '100% !important',\n padding: '50px 30px !important',\n [theme.breakpoints.down('md')]: {\n padding: '30px 20px !important'\n }\n }\n : {\n padding: '48px 16px !important'\n };\n});\n","import { useEffect, useState } from 'react';\nimport { useGranteeContext } from '../../group/providers/UserProvider';\nimport { ProposalAPIService } from '../services/api-service/proposal-api.service';\nimport { RfpService } from '../services/api-service/rfp-api.service';\nimport { useParams } from 'react-router';\nimport { UserService } from '../services/api-service/user-api.service';\nimport { FunderService } from '../services/api-service/funder-api.service';\nimport { api } from '../services/api-service/api.service';\nimport { GranteeAPIService } from \"../services/api-service/grantee.service\";\nimport { UserAuthService } from '../services/api-service/user-auth-api.service';\nimport { AdminAPIService } from '../services/api-service/admin-api.service';\n\nexport enum UseFetchApiRequests {\n manageUsers = \"manageUsers\",\n manageGrantCycles = \"manageGrantCycles\",\n manageRfps = \"manageRfps\",\n getOneRfp = \"getOneRfp\",\n manageProposals = \"manageProposals\",\n getFunders = \"getFunders\",\n getFunderMembers = 'getFunderMembers',\n getOneFunder = \"getOneFunder\",\n getOneProposal = \"getOneProposal\",\n getOneGrantee = \"getOneGrantee\",\n getOneUser = \"getOneUser\",\n getGrantCycleList = \"getGrantCycleList\"\n}\n\nexport interface IUseFetch {\n data: any;\n error: any;\n loading: boolean;\n}\n\nexport const useFetch = (url: string, params: { [key: string]: string | number | string[] | number[] } | null): IUseFetch => {\n const [data, setData] = useState();\n const [error, setError] = useState<any>();\n const [loading, setLoading] = useState(true);\n\n const granteeId = UserAuthService.getEntity().entityId;\n const granteeContext = useGranteeContext();\n\n const { id } = useParams() as Record<string, string>;\n const apiCall = (url: string): Promise<any> => {\n let promise;\n\n switch (url) {\n case `/api/proposals/?grantee_id=${id}`:\n promise = ProposalAPIService.getByGrantee(granteeContext?.grantee?.id).then((proposal) => proposal);\n break;\n case UseFetchApiRequests.manageUsers:\n promise = UserService.list().then(({ rows }) => rows);\n break;\n case UseFetchApiRequests.manageRfps:\n promise = RfpService.list().then(({ rows }) => rows);\n break;\n case UseFetchApiRequests.getOneRfp:\n promise = id ? RfpService.getById(parseInt(id, 10)) : Promise.resolve(null);\n break;\n case UseFetchApiRequests.manageProposals:\n promise = ProposalAPIService.list(parseInt(granteeId!, 10)).then((proposals) => proposals);\n break;\n case UseFetchApiRequests.getOneProposal:\n promise = ProposalAPIService.getById(parseInt(id, 10)).then((proposal) => proposal);\n break;\n case UseFetchApiRequests.getFunders:\n promise = FunderService.discover().then((funder) => funder);\n break;\n case UseFetchApiRequests.getOneFunder:\n promise = FunderService.getById(parseInt(id, 10)).then((funder) => funder);\n break;\n case UseFetchApiRequests.getOneUser:\n promise = UserService.getById(parseInt(id, 10)).then((user) => user);\n break;\n case UseFetchApiRequests.getOneGrantee:\n promise = GranteeAPIService.getById(parseInt(id || granteeId!, 10)).then((grantee) => grantee);\n break;\n case UseFetchApiRequests.getGrantCycleList:\n promise = AdminAPIService.getGrantCycleList();\n break;\n }\n if (!promise) return new Promise((resolve, reject) => reject(`Case not defined: ${url}`));\n return promise;\n }\n // signal: AbortSignal\n const loadData = (signal: AbortSignal) => {\n // const abortController = new AbortController();\n // const signal = abortController.signal;\n if (!url) return;\n if (Object.values(UseFetchApiRequests).includes(url as UseFetchApiRequests)) {\n apiCall(url).then((data) => {\n if (data) setData(data);\n else setError('Nothing Found')\n }).catch((err) => setError(err)).finally(() => setLoading(false));\n } else {\n api.get(url, { params, signal })\n .then(({ data }) => {\n if (data) setData(data);\n else setError('Nothing Found');\n })\n .then(() => setLoading(false))\n .catch(err => {\n setLoading(false);\n if (err.message !== 'canceled') setError(err);\n });\n }\n }\n\n useEffect(() => {\n const abortController = new AbortController();\n loadData(abortController.signal);\n return () => {\n abortController.abort();\n }\n }, [url, params]);\n\n return {\n loading,\n data,\n error\n }\n}\n","import { Box, styled } from '@mui/material';\nimport { CardLeftBorderProps, CardProps } from './card.types';\nimport { CardWrapperProps } from '.';\n\nconst getStatusColor = (status: CardProps['status']) => {\n switch (status) {\n case 'primary':\n return '#4288C5';\n default:\n return 'transparent';\n }\n};\n\nexport const CardContentWrapper = styled(Box)<CardProps>(\n ({ paddingX = 60, paddingY = 50, onClick }) => ({\n paddingTop: paddingY,\n paddingBottom: paddingY,\n paddingRight: paddingX,\n paddingLeft: paddingX,\n height: '100%',\n cursor: !!onClick ? 'pointer' : ''\n })\n);\n\nexport const CardWrapper = styled(Box, {\n shouldForwardProp: (propName) => propName !== 'withshadow'\n})<CardWrapperProps>(({ theme, withshadow = true, status = 'none' }) => ({\n backgroundColor: theme.palette.common.white,\n boxShadow: withshadow ? '0px 4px 21px rgba(86, 111, 149, 0.12)' : undefined,\n borderRadius: 17,\n border: '1px solid #DBE4F3',\n '& .MuiTypography-root': {\n color: '#515660'\n },\n borderLeft: status !== 'none' ? 0 : undefined,\n position: 'relative',\n overflow: 'hidden',\n height: '100%'\n}));\n\nexport const CardLeftBorder = styled(Box)<CardLeftBorderProps>(({ status }) => ({\n padding: 3,\n backgroundColor: getStatusColor(status),\n position: 'absolute',\n height: '100%',\n borderTopLeftRadius: 17,\n borderBottomLeftRadius: 17\n}));\n","import React from 'react'\nimport { CardContentWrapper, CardLeftBorder, CardWrapper } from './card.styled'\nimport { CardProps } from './card.types'\n\nexport type CardWrapperProps = CardProps & {\n withshadow?: boolean;\n};\n\nexport const Card: React.FC<CardWrapperProps> = ({ children, action, status = 'none', withshadow, ...props }) => (\n <CardWrapper data-testid='card' status={status} withshadow={withshadow} >\n {status !== 'none' && <CardLeftBorder data-testid=\"card-border\" status={status} />}\n <CardContentWrapper data-testid=\"card-content\" onClick={action} status={status} {...props}>\n {children}\n </CardContentWrapper>\n </CardWrapper>\n)\n","import IMask from 'imask';\nimport {\n FunderMemberAssociation,\n FunderServiceLevel\n} from '../enums/funder/funder-enums';\nimport { OrgStatus } from '../enums/grantee-status.enum';\nimport { ApplicationStatus } from '../enums/applicaiton-status.enum';\nimport { ProposalStatus } from '../enums/proposal-status.enum';\nimport { ProposalUrgentNeed } from '../enums/proposal-urgent-need';\nimport { UserStatus } from '../enums/user-status';\nimport { IBloatedFunder, IMember } from '../interfaces/IFunder';\nimport { IBloatedGrantee } from '../interfaces/IGrantee';\nimport { Scope } from '../enums/scope.enum';\nimport { ECommitmentReason } from '../enums/commitment.enum';\nimport { Format } from '../interfaces/ICommitment.interfaces';\nimport { TaxStatusId, TaxStatusObj } from '../enums/tax-status-id.enum';\nimport { RFPStatus, RFPStatusLabel } from '../enums/rfp-status';\nimport { IRfp } from '../interfaces/IRfp.interfaces';\nimport { IProfile } from '../interfaces/IViewProfile.interface';\nimport { createTheme } from '@mui/material';\nimport { states } from '../../common/data/data';\nimport { IEventCommitment } from '../../funder/components/events/EventsCommitmentList';\nimport { IUser } from '../interfaces/IUser.interface';\nimport { BipocLed } from '../enums/bipoc.enum';\nimport { SurveyQuestionType } from '../enums/survey.enum';\nimport { GrantCycleScoringStatus } from '../enums/scoring.enum';\nimport { TStatus } from '../../funder/components/analyze/components/CheckInStatus/interfaces';\nimport { statusMap } from '../../funder/components/analyze/components/CheckInStatus/StatusMap';\n\ninterface IKeyValue {\n key: string;\n value: string;\n}\n\n/**\n *\n * @param val Any ENUM\n * @returns Any array of key value pairs matched to your enum { Test } = { key: \"Test\", value: 0 }\n */\n\nexport const keyValue = (val: Record<any, any>): IKeyValue[] => {\n const items = Object.entries(val);\n return items\n .map((e) => ({ key: e[0], value: e[1] }))\n .filter(({ key }) => isNaN(Number(key)));\n};\n\nexport const maskedValue = (mask: string, value: string): string => {\n let maskedValue = '';\n if (value.length > 0) {\n let masked = IMask.createMask({\n mask\n });\n maskedValue = masked.resolve(value).toString();\n }\n return maskedValue;\n};\n\nexport const formatMoney = (value: string | null): string => {\n if (!value || value.length === 0) return '$0.00';\n\n let masked = IMask.createMask({\n mask: '$num',\n blocks: {\n num: {\n mask: Number,\n thousandsSeparator: ','\n }\n }\n });\n\n return masked.resolve(value).toString();\n};\n\nexport function formatCurrencyInput(\n value: string | null,\n showDollarSign = true\n): string {\n let maskedValue = '';\n if (value && value.length > 0) {\n let masked = IMask.createMask({\n mask: `${showDollarSign ? '$' : ''}num`,\n blocks: {\n num: {\n mask: Number,\n thousandsSeparator: ',',\n signed: false,\n scale: 2,\n padFractionalZeros: false,\n normalizeZeros: false,\n radix: '.',\n mapToRadix: ['.'],\n min: 0,\n max: 1000000000\n }\n }\n });\n maskedValue = masked.resolve(value).toString();\n }\n return maskedValue;\n}\n\nexport const maxCharacters = (value: string, length: number): string => {\n if (value?.length > length) {\n return value.substring(0, length) + '...';\n }\n return value;\n};\n\n// Uses Intl to format dollars\nexport const dollarFormatter = (\n dollarAmount: any,\n maximumFractionDigits: number = 2\n): string => {\n const formatter = new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'USD',\n maximumFractionDigits\n }).format(dollarAmount);\n return formatter;\n};\n\nexport const getTaxStatus = (status: TaxStatusId) => {\n return TaxStatusObj[status];\n};\n\n/**\n * @param FunderMember as IMember\n * @returns parent Funder's network configuration\n */\n\nconst networkConfigObj = {\n [FunderMemberAssociation.UMBRELLA_MEMBER]: 'Umbrella',\n [FunderMemberAssociation.COLLABORATIVE_MEMBER]: 'Collaborative'\n} as Record<FunderMemberAssociation, string>;\nexport const CheckFunderConfiguration = (FunderMember: IMember): string => {\n return FunderMember ? networkConfigObj[FunderMember.member_association] : '';\n};\n\n// This is fix a bug where an active proposal wouldn't have all fields rendered\n// To address this, this function will force assign a value to a JSX component\n// If the user is an Admin, or the proposal is anything other than active, this returns void\nexport const activeRender = (\n proposalStatus: number,\n defaultValue: string | number,\n fieldOutput: string | string[] | number | number[] | undefined,\n isAdmin: boolean\n) => {\n const inputProps = {\n value: fieldOutput\n };\n const defaultProps = {\n value: defaultValue\n };\n if (\n isAdmin ||\n (proposalStatus !== ProposalStatus.Active &&\n proposalStatus !== ProposalStatus.Archived)\n ) {\n return;\n } else if (!fieldOutput) {\n return defaultProps;\n } else {\n return inputProps;\n }\n};\n\n// Checks a contact array for a primary user value\n// Takes two arguments, the first being a grantee object\n// The second is a bool value to force the function to return false\nexport const checkForPrimary = (\n grantee: IBloatedGrantee,\n forceFalse: boolean\n): boolean => {\n if (forceFalse) {\n return false;\n }\n const hasPrimary = (primary: boolean) => primary === true;\n return grantee?.granteeContacts?.some((contact) =>\n hasPrimary(!!contact?.primary)\n )\n ? true\n : false;\n};\n\n/**\n *\n * @param enumList Enum to convert. Needs to be enums with only numbers as values\n * @returns Array of objects with value and name attributes mapping to the enum\n */\nexport const enumToList = (\n enumList: any\n): { name: string; value: number }[] => {\n return Object.entries(enumList)\n .filter(([_, key]) => isNaN(parseInt(key as string, 10)))\n .map(([val, key]) => {\n return {\n value: Number(val),\n name: key as string\n };\n });\n};\n\n/**\n *\n * @param scope Enum (proposal.scope) to convert, should be an integer value only.\n * @returns String matching enum value.\n */\n\ntype ScopeDef = {\n [key in Scope]: string;\n};\n\nexport const scopeObj: ScopeDef = {\n [Scope.NATIONAL]: 'National',\n [Scope.STATE]: 'State',\n [Scope.REGIONAL]: 'Regional',\n [Scope.LOCAL]: 'Local',\n [Scope.NONE]: 'None'\n};\n\nexport const getScope = (scope: Scope) => {\n return scopeObj[scope];\n};\n\n/**\n *\n * @param CommitmentDef Enum (grant_type) to convert, should be an integer value only.\n * @returns String matching enum value.\n */\n\ntype CommitmentDef = {\n [key in ECommitmentReason]: string;\n};\n\nexport const supportObj: CommitmentDef = {\n [ECommitmentReason.GENERAL]: 'General Operating Grant',\n [ECommitmentReason.NONE]: 'None',\n [ECommitmentReason.OTHER]: 'Other',\n [ECommitmentReason.PROGRAM_SUPPORT]: 'Program or Project Support Grant'\n};\n\nexport const getCommitmentSupport = (commitment: ECommitmentReason) => {\n return supportObj[commitment];\n};\n\n// Remove all non-unique values from Array\nexport const getUniques = <T = any>(arr: T[]): T[] => {\n return Array.from(new Set(arr)) as T[];\n};\n\n// TODO - see urgent need object literal. Refactor other switch cases to follow a similar pattern. Will help performance, and maintainability / readability.\n/**\n *\n * @param ProposalStatus Enum (proposal.status) to convert, should be an integer value only.\n * @returns String matching enum value.\n */\nexport const getProposalStatus = (status: ProposalStatus | undefined) => {\n switch (status) {\n case ProposalStatus.Active:\n return 'Active';\n case ProposalStatus.Archived:\n return 'Archived';\n case ProposalStatus.Draft:\n return 'Draft';\n case ProposalStatus.Active_Draft:\n return 'Active Proposal with Draft Application';\n case ProposalStatus.Deleted:\n return 'Deleted';\n default:\n return undefined;\n }\n};\n\n/**\n * @param status UserStatus enum to convert, should be an integer value only.\n * @returns String matching enum value.\n */\n\nconst userStatusObj = {\n [UserStatus.ACTIVE]: 'Active',\n [UserStatus.INACTIVE]: 'Inactive',\n [UserStatus.UNREGISTERED]: 'Pending',\n [UserStatus.SUSPENDED]: 'Suspended',\n [UserStatus.DELETED]: 'Deleted',\n [UserStatus.INVITED]: 'Invited'\n};\n\nexport const getUserStatus = (status: UserStatus) => {\n return userStatusObj[status];\n};\n\nexport const getApplicationStatus = (status: ApplicationStatus | undefined) => {\n switch (status) {\n case ApplicationStatus.AWARDED:\n return 'Awarded';\n case ApplicationStatus.DRAFT:\n return 'Draft';\n case ApplicationStatus.PENDING:\n return 'Submitted';\n case ApplicationStatus.REJECTED:\n return 'Rejected';\n default:\n return 'Draft';\n }\n};\n\nexport const getApplicationStatusForApplicant = (\n status: ApplicationStatus | undefined\n) => {\n switch (status) {\n case ApplicationStatus.DRAFT:\n return 'Draft';\n case ApplicationStatus.PENDING:\n case ApplicationStatus.AWARDED:\n case ApplicationStatus.REJECTED:\n return 'Submitted';\n default:\n return 'Draft';\n }\n};\n\nexport const getInvitationStatusFromApplication = (\n status: ApplicationStatus | undefined\n) => {\n const submittedStatus = [\n ApplicationStatus.PENDING,\n ApplicationStatus.AWARDED,\n ApplicationStatus.REJECTED\n ];\n if (status === undefined) return 'Not Started';\n if (status === ApplicationStatus.DRAFT) return 'Draft';\n if (submittedStatus.includes(status)) return 'Submitted';\n return 'Draft';\n};\n\nexport const getApplicationFundingStatus = (status: ApplicationStatus) => {\n switch (status) {\n case ApplicationStatus.AWARDED:\n return 'Committed';\n case ApplicationStatus.REJECTED:\n return 'Declined';\n default:\n return 'Uncommitted';\n }\n};\n\nexport const getGrantCycleScoringStatus = (status: GrantCycleScoringStatus) => {\n switch (status) {\n case GrantCycleScoringStatus.IN_REVIEW:\n return 'In Review';\n case GrantCycleScoringStatus.INACTIVE:\n return 'Inactive';\n default:\n return 'All';\n }\n};\n\n/**\n * @param status Proposal Urgent Need enum to convert, should be an integer value only.\n * @returns String matching enum value.\n */\n\nconst urgentNeedObj = {\n [ProposalUrgentNeed.COVID_19]: 'Covid-19',\n [ProposalUrgentNeed.ABORTION_RIGHTS]: 'Abortion Rights',\n [ProposalUrgentNeed.REFUGEE_RESETTLEMENT]: 'Refugee Resettlement',\n [ProposalUrgentNeed.NONE]: 'None'\n};\nexport const getUrgentNeed = (urgentNeed: ProposalUrgentNeed) => {\n return urgentNeedObj[urgentNeed];\n};\n\nconst funderServiceLevelObj = {\n [FunderServiceLevel.Enterprise]: 'Enterprise',\n [FunderServiceLevel.Standard]: 'Standard',\n [FunderServiceLevel.FullService]: 'Full Service',\n [FunderServiceLevel.Institution]: 'Institution',\n [FunderServiceLevel.Individual]: 'Individual'\n};\n\nexport const getFunderServiceLevel = (serviceLevel: FunderServiceLevel) => {\n return funderServiceLevelObj[serviceLevel];\n};\n\nconst statusObj = {\n [OrgStatus.ACTIVE]: 'Active',\n [OrgStatus.ARCHIVED]: 'Archived'\n};\n\nexport const getStatus = (status: OrgStatus) => {\n return statusObj[status];\n};\n/**\n *\n * @param string any string. removes white spaces / special characters from string.\n * @returns String value\n */\nexport function escapeRegExp(value: string): string {\n return value.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\n}\n\nconst memberObj = {\n [FunderMemberAssociation.COLLABORATIVE_LEAD]: 'Collaborative Lead',\n [FunderMemberAssociation.COLLABORATIVE_MEMBER]: 'Collaborative Member',\n [FunderMemberAssociation.UMBRELLA_LEAD]: 'Umbrella Lead',\n [FunderMemberAssociation.UMBRELLA_MEMBER]: 'Umbrella Lead'\n};\nexport function getFunderMemberType(\n memberAssociation: FunderMemberAssociation\n) {\n return memberObj[memberAssociation];\n}\nexport const paymentType = {\n [Format.CHECK]: 'Check',\n [Format.ONLINE]: 'Online',\n [Format.STOCK]: 'Stock',\n [Format.ACH]: 'ACH',\n [Format.WIRE]: 'Wire',\n [Format.OTHER]: 'Other'\n};\n\nexport const getPaymentType = (payment: Format) => {\n return paymentType[payment];\n};\n\nexport const commitmentReasonType = {\n [ECommitmentReason.NONE]: 'None',\n [ECommitmentReason.GENERAL]: 'General Operating Grant',\n [ECommitmentReason.PROGRAM_SUPPORT]: 'Program or Project Support Grant',\n [ECommitmentReason.OTHER]: 'Other'\n};\n\nexport const getCommitmentReasontype = (commitment: ECommitmentReason) => {\n return commitmentReasonType[commitment];\n};\n\nexport const rfpStatusObj = {\n [RFPStatus.APPROVED]: 'Approved',\n [RFPStatus.SUBMITTED]: 'Submitted',\n [RFPStatus.DRAFT]: 'Draft / In-Progress'\n};\n\nexport const getRFPStatus = (rfpStatus: RFPStatus) => {\n return rfpStatusObj[rfpStatus];\n};\n\n// export function composeCycleQuestions(formData: any, survey: any | undefined) {\n// let cycleQuestions: any[] = [];\n// console.log('compose cycle questions form data', formData, survey)\n// if (formData.question1 || (!formData.question1 && survey?.[0])) cycleQuestions.push({\n// question_id: survey?.[0]?.id || null,\n// description: formData.question1,\n// requireQuestion: formData.require_question1 || \"false\",\n// type: parseInt(formData.question_type1 || 0),\n// payload: parseInt(formData.question_type1 || 0) === SurveyQuestionType.MULTIPLE ? JSON.stringify(formData.question1_options) : null\n// })\n// if (formData.question2 || (!formData.question2 && survey?.[1])) cycleQuestions.push({\n// question_id: survey?.[1]?.id || null,\n// description: formData.question2,\n// requireQuestion: formData.require_question2 || \"false\",\n// type: parseInt(formData.question_type2 || 0),\n// payload: parseInt(formData.question_type2 || 0) === SurveyQuestionType.MULTIPLE ? JSON.stringify(formData.question2_options) : null\n// })\n// if (formData.question3 || (!formData.question3 && survey?.[2])) cycleQuestions.push({\n// question_id: survey?.[2]?.id || null,\n// description: formData.question3,\n// requireQuestion: formData.require_question3 || \"false\",\n// type: parseInt(formData.question_type3 || 0),\n// payload: parseInt(formData.question_type3 || 0) === SurveyQuestionType.MULTIPLE ? JSON.stringify(formData.question3_options) : null\n// })\n// console.log('compose cycle questions', cycleQuestions)\n// return cycleQuestions;\n// }\n\nexport function composeCycleQuestions(formData: any, survey: any | undefined) {\n let cycleQuestions: any[] = [];\n console.log('compose cycle questions form data', formData, survey);\n const shouldAddQuestion = (id: number) =>\n !formData[`removeQuestion${id}`] &&\n (survey?.[id - 1] ||\n (formData?.[`question${id}`] !== null &&\n formData?.[`question${id}`] !== undefined));\n\n const getDescription = (id: number) =>\n formData[`question${id}`] !== null &&\n formData[`question${id}`] !== undefined\n ? formData[`question${id}`]\n : survey?.[id - 1]?.description || '';\n\n const getPayload = (id: number) => {\n const payload =\n formData[`question${id}_options`] || survey?.[id - 1]?.payload;\n return parseInt(\n formData[`question_type${id}`] || survey?.[id - 1]?.type || 0\n ) === SurveyQuestionType.MULTIPLE && Array.isArray(payload)\n ? JSON.stringify(payload)\n : null;\n };\n\n if (shouldAddQuestion(1))\n cycleQuestions.push({\n question_id: survey?.[0]?.id || null,\n description: getDescription(1),\n requireQuestion:\n formData.require_question1 || survey?.[0]?.is_required || 'false',\n type: parseInt(formData.question_type1 || survey?.[0]?.type || 0),\n payload: getPayload(1)\n });\n if (shouldAddQuestion(2))\n cycleQuestions.push({\n question_id: survey?.[1]?.id || null,\n description: getDescription(2),\n requireQuestion:\n formData.require_question2 || survey?.[1]?.is_required || 'false',\n type: parseInt(formData.question_type2 || survey?.[1]?.type || 0),\n payload: getPayload(2)\n });\n if (shouldAddQuestion(3))\n cycleQuestions.push({\n question_id: survey?.[2]?.id || null,\n description: getDescription(3),\n requireQuestion:\n formData.require_question3 || survey?.[2]?.is_required || 'false',\n type: parseInt(formData.question_type3 || survey?.[2]?.type || 0),\n payload: getPayload(3)\n });\n // console.log('compose cycle questions', cycleQuestions)\n return cycleQuestions;\n}\n\nexport const composeTaxStatus = (formData: any, cycle: IRfp) => {\n let taxStatus: any[] = [];\n const findTaxStatus = (taxStatus: any) =>\n cycle?.rfpTaxStatuses?.find((status) => status.tax_status_id === taxStatus);\n formData?.map((status: any, index: any) => {\n if (status || (!status && findTaxStatus(index))) {\n taxStatus.push({\n id: findTaxStatus(index)?.id || null,\n rfp_id: cycle.id,\n tax_status_id: index,\n ...(index === TaxStatusId.Other && { detail: status.detail || '' }),\n remove: status || status === undefined ? false : true\n });\n }\n });\n return taxStatus;\n};\n\nexport const checkRfpStatus = (rfp: IRfp): RFPStatusLabel => {\n const today = new Date();\n\n const parseDate = (dateStr: string | undefined) => {\n return dateStr ? new Date(dateStr) : null;\n };\n\n if (rfp.deleted_at) {\n return RFPStatusLabel.DELETED;\n }\n\n if (rfp.status === RFPStatus.DRAFT) {\n return RFPStatusLabel.DRAFT;\n }\n\n const deadlineDate = parseDate(rfp.deadline_date);\n if (deadlineDate && today > deadlineDate) {\n return RFPStatusLabel.CLOSED;\n }\n\n const announcementDate = parseDate(rfp.announcement_date);\n const rfpStatus = getRFPStatus(rfp.status);\n if (\n rfpStatus === RFPStatusLabel.APPROVED &&\n announcementDate &&\n today >= announcementDate\n ) {\n return RFPStatusLabel.ACTIVE;\n }\n\n return rfpStatus as RFPStatusLabel;\n};\n\nexport const requiredErrorMessage = 'This field is required';\n\nexport const filterComponentCheck = (entity: IProfile) => {\n if (!!entity) {\n if (entity.bipoc_led === BipocLed.YES) {\n return true;\n }\n if (entity.focuses?.length > 0) {\n return true;\n }\n if (entity.granteeStrategies && entity.granteeStrategies?.length > 0) {\n return true;\n }\n if (entity.granteeCommunities && entity.granteeCommunities?.length > 0) {\n return true;\n }\n if (!!entity.scope && entity.scope !== 5) {\n return true;\n }\n if (entity.granteeStates && entity.granteeStates.length > 0) {\n return true;\n }\n return false;\n }\n};\n\nexport const determineDetails = (funder: IBloatedFunder) => {\n if (\n (funder.fundPriorities && funder.fundPriorities.length > 0) ||\n (funder.grantCategories && funder.grantCategories.length > 0) ||\n (funder.fundCategories && funder.fundCategories.length > 0) ||\n funder.annual_grant_total ||\n (funder.decisionStructures && funder.decisionStructures.length > 0) ||\n (funder.typeOfFunds && funder.typeOfFunds.length > 0) ||\n funder?.average_grant_size\n )\n return true;\n return false;\n};\n\nexport const renderSelections = (\n selectedIds: string[],\n selectableObjects: any[]\n) => {\n const selectionString = selectableObjects\n .map((selection) => {\n if (selectedIds.includes(selection.id)) return selection.name;\n return null;\n })\n .filter((focus) => focus !== null)\n .join(', ');\n return selectionString;\n};\nexport const renderScopes = (\n selectedIds: string[],\n selectableObjects: any[]\n) => {\n const selectionString = selectableObjects\n .map((selection) => {\n if (selectedIds.includes(selection.value)) return selection.name;\n return null;\n })\n .filter((focus) => focus !== null)\n .join(', ');\n return selectionString;\n};\n\nexport const formatStates = () => {\n return states.map((state) => {\n if (state['value'] !== 'id') {\n return Object.defineProperty(\n state,\n 'id',\n Object.getOwnPropertyDescriptor(state, 'value')!\n );\n }\n });\n};\n\nexport const scrollbarOverride = {\n '& .MuiDataGrid-virtualScroller::-webkit-scrollbar': {\n width: '0.2em'\n },\n '& .MuiDataGrid-virtualScroller::-webkit-scrollbar-track': {\n background: '#f1f1f1'\n },\n '& .MuiDataGrid-virtualScroller::-webkit-scrollbar-thumb': {\n backgroundColor: '#888'\n },\n '& .MuiDataGrid-virtualScroller::-webkit-scrollbar-thumb:hover': {\n background: '#555'\n }\n};\n\nexport const theme = createTheme();\n\nexport const sortAToZ = (commitments: IEventCommitment[]) => {\n const sortedArray = [...commitments].sort((a, b) => {\n if (a.grantee.name.toUpperCase() < b.grantee.name.toUpperCase()) {\n return -1;\n }\n if (a.grantee.name.toUpperCase() > b.grantee.name.toUpperCase()) {\n return 1;\n }\n return 0;\n });\n return sortedArray;\n};\n\nexport const sortHighToLow = (commitments: IEventCommitment[]) => {\n const sortedArray = [...commitments].sort((a, b) => b.amount - a.amount);\n return sortedArray;\n};\n\nexport const sortComittedDate = (commitments: IEventCommitment[]) => {\n const sortedArray = [...commitments].sort((a, b) => {\n return new Date(b.committed).valueOf() - new Date(a.committed).valueOf();\n });\n return sortedArray;\n};\n\nexport const getProfileRedirectUri = (\n id: number,\n isGrantee: boolean,\n isAdmin: boolean\n) => {\n let redirectUri;\n\n if (isGrantee && isAdmin) {\n redirectUri = `/admin/manage/public-profile-grantee/${id}`;\n } else if (!isGrantee && isAdmin) {\n redirectUri = `/admin/manage/public-profile-funder/${id}`;\n } else if (isGrantee) {\n redirectUri = `/f/grantee-profile/${id}`;\n } else {\n redirectUri = `/f/funder-profile/${id}`;\n }\n\n return redirectUri;\n};\n\nexport const splitArray = (data: any[], limit: number) => {\n const a = data.slice(0, limit);\n const b = data.slice(limit);\n return [a, b];\n};\n\nexport const addPrefixToObjectProps = (\n obj: Record<string, any>,\n prefix: string\n) => {\n let newObject: Record<string, any> = {};\n Object.entries(obj).forEach(([key, value]) => {\n const index: string = `${prefix}_${key}`;\n newObject[index] = value;\n });\n return newObject;\n};\n\nexport const formatUserName = (user: IUser) =>\n `${user.first_name} ${user.last_name}`;\n\n// TODO: This shouldn't be based on category, as an admin can change the attachment category and this would break\nexport const renderAttachment = (resource: any, attachments: any[]) => {\n const matchedAttachment = attachments.find(\n (attachment) =>\n attachment.rfp_resource_id === resource.id ||\n attachment.ProposalResource?.rfp_resource_id === resource.id\n );\n return matchedAttachment;\n};\n\nexport const checkGranteeProfile = (\n grantee: IBloatedGrantee | null\n): boolean => {\n const reqGranteeModel = {\n name: grantee?.name || null,\n established: grantee?.established || null,\n country: grantee?.country_alpha_2 || null,\n street: grantee?.location?.address1 || null,\n stateOrTerritory: grantee?.location?.state || null,\n city: grantee?.location?.city || null,\n mission: grantee?.mission || null,\n orgDescription: grantee?.description || null,\n teamDescription: grantee?.team_description || null,\n focusAreas: (grantee?.focuses && grantee?.focuses.length > 0) || null,\n bipocLed: grantee?.bipoc_led !== undefined || null,\n orgContactFirstName:\n grantee?.granteeContacts?.[0]?.contact?.first_name || null,\n orgContactLastName:\n grantee?.granteeContacts?.[0]?.contact?.last_name || null,\n orgContact: grantee?.granteeContacts?.[0]?.contact?.email || null,\n orgRole: grantee?.granteeContacts?.[0]?.contact?.title || null,\n annualBudget: grantee?.annual_budget !== undefined || null,\n fiscalYearStart: grantee?.fiscal_year_start || null,\n fiscalYearEnd: grantee?.fiscal_year_end || null,\n\n taxStatus: grantee?.tax_status_id || null,\n ...(grantee?.taxStatus?.id !==\n TaxStatusId['Federally Recognized Tribe'] && {\n tax_id: grantee?.tax_id || null\n }),\n checkRecipient: grantee?.check_recipient || null,\n\n checkCountry: grantee?.checkLocation?.country_alpha_2 || null,\n checkStreet: grantee?.checkLocation?.address1 || null,\n checkStateOrTerritory: grantee?.checkLocation?.state || null,\n checkCity: grantee?.checkLocation?.city || null,\n fund: Number.isInteger(grantee?.fund) || null\n };\n\n return Object.values(reqGranteeModel).includes(null);\n};\n\n// BIPOC UTILS\n\nexport const getBipocValue = (value?: BipocLed | boolean) => {\n if (value === true || value === BipocLed.YES) {\n return 'Yes';\n } else if (value === BipocLed.NOTSURE) {\n return 'Not Sure';\n } else {\n return '';\n }\n};\n\nexport const getBipocType = (value: BipocLed | null) => {\n switch (value) {\n case BipocLed.YES:\n return 'Yes';\n case BipocLed.NO:\n return 'No';\n case BipocLed.NOTSURE:\n return 'Not Sure';\n default:\n return '';\n }\n};\n\nexport const sortByBipocType = (items: number[]) => {\n return items.sort((a, b) => {\n const map: { [key: number]: number } = {};\n map[BipocLed.YES] = 1;\n map[BipocLed.NO] = 2;\n map[BipocLed.NOTSURE] = 3;\n\n if (map[a] < map[b]) {\n return -1;\n }\n\n if (map[a] > map[b]) {\n return 1;\n }\n\n return 0;\n });\n};\n\nexport const getGranteePrimaryContact = (grantee: any, field: string) => {\n const contacts = grantee?.granteeContacts || [];\n // We are using always the first grantee contact as the primary due to this definition: https://justfund-internal.atlassian.net/browse/IM-274\n // const object = contacts.find((contact: any) => contact.primary) || contacts[0]\n const object = contacts[0];\n\n return object?.contact?.[field];\n};\n\nexport const getPrimaryContactFromGrantee = (grantee: any) => {\n return {\n firstName: getGranteePrimaryContact(grantee, 'first_name'),\n lastName: getGranteePrimaryContact(grantee, 'last_name'),\n role: getGranteePrimaryContact(grantee, 'role'),\n title: getGranteePrimaryContact(grantee, 'title'),\n phone: getGranteePrimaryContact(grantee, 'phone'),\n email: getGranteePrimaryContact(grantee, 'email'),\n extension: getGranteePrimaryContact(grantee, 'extension')\n };\n};\n\nexport const cleanObject = (obj: Object) => {\n return Object.entries(obj)\n .filter(\n ([_, v]) => v != null && v !== '' && !(Array.isArray(v) && v.length === 0)\n )\n .reduce((acc, [k, v]) => ({ ...acc, [k]: v }), {});\n};\n\nexport const htmlToText = (html?: string) => {\n let span = document.createElement('span');\n span.innerHTML = html || '';\n return span.textContent || span.innerText;\n};\n\nexport const getCheckInTypeText = (status: TStatus) => {\n return statusMap[status]?.text || '';\n};\n\nexport const getCharacterCount = (text: string) => {\n return htmlToText(text).length;\n};\n\nexport const isTaxStatusUpdated = (formData: any, rfp: IRfp) => {\n const updatedTaxStatus = formData.some((updatedStatus: any) => {\n const prevStatus = rfp.rfpTaxStatuses?.find(\n (status: any) => status.id === updatedStatus.id\n );\n const updatedDetail =\n updatedStatus.detail !== undefined &&\n prevStatus?.detail !== updatedStatus.detail;\n const addedTaxStatus = updatedStatus !== undefined && !updatedStatus.id;\n\n return updatedDetail || addedTaxStatus || updatedStatus.remove;\n });\n\n return updatedTaxStatus;\n};\n\nexport const processHtmlWithAsterisk = (\n html: string,\n shouldAddAsterisk: boolean\n): string => {\n if (!shouldAddAsterisk) return html;\n\n const parser = new DOMParser();\n const doc = parser.parseFromString(html, 'text/html');\n\n const findLastTextNode = (node: Node): Node | null => {\n if (node.nodeType === Node.TEXT_NODE && node.nodeValue?.trim()) return node;\n\n for (let i = node.childNodes.length - 1; i >= 0; i--) {\n const childNode = node.childNodes[i];\n const found = findLastTextNode(childNode);\n if (found) return found;\n }\n\n return null;\n };\n\n const lastTextNode = findLastTextNode(doc.body);\n if (lastTextNode) lastTextNode.nodeValue += ' *';\n\n return doc.body.innerHTML;\n};\n\nexport const areSameDates = (dateA: string, dateB: string) => {\n return new Date(dateA).getTime() === new Date(dateB).getTime();\n};\n\nexport const cleanIndentHTML = (html: string): string => {\n // Expresión regular para eliminar etiquetas repetidas de <li style=\"list-style-type: none;\"> y <ul>\n // También elimina el atributo padding-left si está presente\n return html\n .replace(/<li style=\"list-style-type: none;\">\\s*<ul>/g, '') // Elimina <li><ul> repetidos\n .replace(/<\\/ul>\\s*<\\/li>/g, '') // Elimina los cierres correspondientes </ul></li>\n .replace(/padding-left:\\s*\\d+px;?/g, '') // Elimina padding-left si está presente\n .replace(/style=\"[^\"]*\"/g, (match) => {\n // Limpia los estilos inline si quedaron vacÃos\n return match.includes('list-style-type') || match.includes('padding-left')\n ? match.replace(/(list-style-type: none;?|padding-left: \\d+px;?)/g, '').trim()\n : match;\n })\n .replace(/\\sstyle=\"\"/g, '') // Elimina atributos de estilo vacÃos\n .trim(); // Elimina espacios extra en los bordes\n};","import {\n ReactNode,\n createContext,\n useContext,\n useEffect,\n useRef,\n useState\n} from 'react';\nimport io, { Socket } from 'socket.io-client';\nimport { IUser } from '../interfaces/IUser.interface';\nimport { UserAuthService } from '../services/api-service/user-auth-api.service';\nimport { isDevMode } from '../util/constants';\n\ntype RealtimeContextProviderProps = {\n socketIo: Socket | null;\n joinRooms: (rooms: string[]) => void;\n leaveRooms: (rooms: string[]) => void;\n joinedRooms: string[];\n};\n\nconst RealtimeContext = createContext<RealtimeContextProviderProps>({\n socketIo: null,\n joinRooms: () => {},\n leaveRooms: () => {},\n joinedRooms: []\n});\n\nexport const useRealtimeContext = () => useContext(RealtimeContext);\n\ninterface IRealtimeProviderProps {\n children: ReactNode;\n user: IUser | null;\n}\n\nconst RealtimeProvider = ({ children, user }: IRealtimeProviderProps) => {\n const [userConnected, setUserConnected] = useState<number>();\n const [socketIo, setSocketIo] = useState<Socket | null>(null);\n const joinedRooms = useRef<string[]>([]);\n\n useEffect(() => {\n const token = UserAuthService.token;\n if (user) {\n if (!!socketIo) {\n if (userConnected !== user.id) {\n // previously connected but user changed\n socketIo.disconnect();\n } else {\n // already connected\n return;\n }\n }\n\n const socketIOConn = io(process.env.REACT_APP_API_BASE_URL!, {\n auth: { token },\n transports: ['websocket']\n });\n socketIOConn.on('connect', () => {\n setUserConnected(user.id);\n setSocketIo(socketIOConn);\n if (isDevMode()) console.log('Socket.io - Connected');\n if (joinedRooms.current.length) {\n // reconnect rooms if server went down\n socketIOConn.emit('bulk-join', joinedRooms.current);\n }\n });\n socketIOConn.on('disconnect', () => {\n setUserConnected(undefined);\n if (isDevMode()) console.log('Socket.io - Disconnected');\n });\n }\n return () => {\n socketIo && socketIo.disconnect();\n };\n }, [user, userConnected, socketIo]);\n\n const joinRooms = (rooms: string[]) => {\n if (socketIo) {\n const notJoinedRooms = rooms.filter(\n (room) => !joinedRooms.current.includes(room)\n );\n if (notJoinedRooms.length === 0) return;\n socketIo.emit('bulk-join', notJoinedRooms);\n joinedRooms.current = [...joinedRooms.current, ...notJoinedRooms];\n }\n };\n\n const leaveRooms = (rooms: string[]) => {\n if (socketIo) {\n const notLeftRooms = rooms.filter((room) =>\n joinedRooms.current.includes(room)\n );\n if (notLeftRooms.length === 0) return;\n socketIo.emit('bulk-leave', notLeftRooms);\n joinedRooms.current = joinedRooms.current.filter(\n (room) => !notLeftRooms.includes(room)\n );\n }\n // Note: If the user joined the same room twice, when leaving one instance, it disconnects from all instances of the room\n };\n\n return (\n <RealtimeContext.Provider\n value={{\n socketIo,\n joinRooms,\n leaveRooms,\n joinedRooms: joinedRooms.current\n }}\n >\n {children}\n </RealtimeContext.Provider>\n );\n};\n\nexport default RealtimeProvider;\n","import { upperCase } from \"lodash\";\nimport moment from \"moment\";\n\n/**\n * @param {any[]} array\n * @param {string} property\n */\nexport function sortByProperty (array, property, ascending = true) {\n if (property.indexOf('.') !== -1) {\n return sortByNestedProperty (array, property, ascending);\n } else {\n // sorting works different if data is string, date or number\n if (typeof array[0][property] === \"string\") {\n const isDate = moment(array[0][property], \"MM/DD/YYYY\", true).isValid();\n\n return isDate \n ? sortDates(array, property, ascending) \n : sortStrings(array, property, ascending);\n } else {\n return traditionalBubleSorting(array, property, ascending);\n }\n }\n}\n\n/**\n * @param {any[]} array\n * @param {string | number} property\n * @param {boolean} ascending\n */\nfunction traditionalBubleSorting (array, property, ascending) {\n return array.sort((a, b) => (\n (a[property] < b[property]) ? ((ascending) ? -1 : 1) :\n (a[property] > b[property]) ? ((ascending) ? 1 : -1) : 0\n ));\n}\n\n/**\n * @param {any[]} array\n * @param {string | number} property\n * @param {boolean} ascending\n */\nfunction sortStrings (array, property, ascending) {\n // for strings, all to uppercase (to have uppers and lowers together, Aa, Bb, Zz)\n return array.sort((a, b) => (\n (upperCase(a[property]) < upperCase(b[property])) ? ((ascending) ? -1 : 1) :\n (upperCase(a[property]) > upperCase(b[property])) ? ((ascending) ? 1 : -1) : 0\n ));\n}\n\n/**\n * @param {any[]} array\n * @param {string | number} property\n * @param {boolean} ascending\n */\nfunction sortDates (array, property, ascending) {\n // for dates... format to YYYYMMDD\n return array.sort((a, b) => {\n a = moment(new Date(a[property])).format('YYYYMMDD');\n b = moment(new Date(b[property])).format('YYYYMMDD');\n return (a < b) ? (ascending ? -1 : 1) :\n (a > b) ? (ascending ? 1 : -1) : 0;\n });\n}\n\n/**\n * @param {any[]} array\n * @param {string} property\n * @param {boolean} ascending\n */\nfunction sortByNestedProperty (array, property, ascending) {\n const list = property.split ('.');\n return array.sort ((a, b) => {\n const aa = list.reduce ((current, name) => current[name], a);\n const bb = list.reduce ((current, name) => current[name], b);\n return ((aa < bb) ? ((ascending) ? -1 : 1) : (aa > bb) ? ((ascending) ? 1 : -1) : 0);\n });\n}\n\n/**\n * @param {any[]} array\n * @param {any[]} properties\n * @param {any[]} ascendings\n */\nexport function sortByProperties (array, properties, ascendings = []) {\n if (properties.reduce ((result, current) => (result || current.indexOf ('.') !== -1), false)) {\n return sortByNestedProperties (array, properties, ascendings);\n } else {\n return array.sort ((a, b) => {\n let order = 0;\n let index = 0;\n while ((order === 0) && (index < properties.length)) {\n const property = properties[index];\n const ascending = (typeof ascendings[index] === 'undefined') ? true : ascendings[index];\n order = ((a[property] < b[property]) ? ((ascending) ? -1 : 1) :\n (a[property] > b[property]) ? ((ascending) ? 1 : -1) : 0);\n index += 1;\n }\n return order;\n });\n }\n}\n\n/**\n * @param {any[]} array\n * @param {any[]} properties\n * @param {any[]} ascendings\n */\nfunction sortByNestedProperties (array, properties, ascendings) {\n const list = properties.map ((a) => a.split ('.'));\n return array.sort ((a, b) => {\n let order = 0;\n let index = 0;\n while ((order === 0) && (index < properties.length)) {\n const aa = list[index].reduce ((current, name) => current[name], a);\n const bb = list[index].reduce ((current, name) => current[name], b);\n const ascending = (typeof ascendings[index] === 'undefined') ? true : ascendings[index];\n order = ((aa < bb) ? ((ascending) ? -1 : 1) : (aa > bb) ? ((ascending) ? 1 : -1) : 0);\n index += 1;\n }\n return order;\n });\n}\n","//libraries\nimport {\n PendingActions,\n Check,\n WarningAmber,\n EventOutlined\n} from '@mui/icons-material';\n\n//interfaces\nimport { TStatus } from './interfaces';\n\ntype TColor = 'primary' | 'warning';\n\ninterface IIconProps {\n sx: { width: number; height: number };\n color: TColor;\n}\n\ninterface IStatusInfo {\n StatusIcon: React.ElementType;\n text: string; \n iconProps: IIconProps;\n}\n\nconst size = { width: 24, height: 24 };\n\nexport const statusMap: Record<TStatus, Partial<IStatusInfo>> = {\n scheduled: {\n StatusIcon: EventOutlined,\n text: 'Scheduled',\n iconProps: { sx: size, color: 'primary' }\n },\n overdue: {\n StatusIcon: WarningAmber,\n text: 'Overdue',\n iconProps: {\n sx: size,\n color: 'warning'\n }\n },\n done: {\n StatusIcon: Check,\n text: 'Done',\n iconProps: {\n sx: size,\n color: 'primary'\n }\n },\n pending: {\n StatusIcon: PendingActions,\n text: 'Pending',\n iconProps: {\n sx: size,\n color: 'primary'\n }\n },\n default: {}\n};\n","import { ArrowBack } from \"@mui/icons-material\";\nimport { Box, Drawer, Grid, Typography, styled } from \"@mui/material\";\nimport { Link } from \"react-router-dom\";\nimport { jfTheme } from \"../../../../../styles/jf.theme\";\nimport InfiniteScroll from \"react-infinite-scroll-component\";\n\nexport const TitleContainer = styled(Grid)({\n borderBottom: '1px solid #EEEEEE',\n padding: '20px',\n});\n\nexport const InfoContainer = styled(Box)({\n margin: '16px 0px',\n});\n\nexport const BackButtonTitle = styled(Typography)({\n fontSize: '16px',\n fontWeight: 600,\n cursor: 'pointer',\n});\n\nexport const BackIcon = styled(ArrowBack)({\n width: '20px',\n height: '20px',\n});\n\nexport const Container = styled(Grid)({\n justifyContent: 'center',\n maxHeight: '85vh',\n overflow: 'scroll',\n padding: '0px 24px',\n marginTop: '6px',\n});\n\nexport const DrawerBox = styled(Box)({\n width: '640px',\n overflow: 'hidden',\n});\n\nexport const CustomLink = styled(Link)({\n color: jfTheme.palette.secondary.light,\n});\n\nexport const CustomDrawer = styled(Drawer)({\n zIndex: 9999,\n});\n\nexport const ScrollableContainer = styled(InfiniteScroll)({\n height: '100vh',\n paddingTop: '24px',\n backgroundColor: '#F7F7F7',\n alignItems: 'center',\n display: 'flex',\n flexDirection: 'column',\n});","import { Grid, Skeleton, Typography } from '@mui/material';\nimport { CustomLink, InfoContainer } from './styles';\n\nexport const OrganizationInfo = ({ amount, funderName }: { amount?: string, funderName?: string}) => {\n return <Grid container maxWidth=\"1200px\">\n <Grid item xs={12}>\n {amount ? <Typography fontSize={32} fontWeight={600}>{`Funded Organizations (${amount})`}</Typography> : <Skeleton variant=\"text\" width={500} height={40} />}\n </Grid>\n <Grid item xs={12}>\n {funderName ? <Typography variant=\"h5\" fontWeight={400}>{funderName}</Typography> : <Skeleton variant=\"text\" width={200} height={40} />}\n </Grid>\n <Grid item xs={12}>\n <InfoContainer>\n <Typography variant=\"body2\" color=\"textPrimary\">\n {`To apply for funding opportunities offered by NY Rural Organization `}\n <CustomLink href=\"#\" to=\"/sign-up\">\n {`log in`}\n </CustomLink>\n {` or `}\n <CustomLink href=\"#\" to={\"/justfund/signin\"}>\n {`sign up now`}\n </CustomLink>\n {` . If you have any questions, reach out to support at `}\n <CustomLink href=\"mailto:info@justfund.us\" to=\"#\">\n info@justfund.us\n </CustomLink>\n .\n </Typography>\n </InfoContainer>\n </Grid>\n </Grid>\n}","import { Grid, IconButton } from '@mui/material'\nimport { BackButtonTitle, BackIcon } from './styles'\nimport { useHistory } from 'react-router';\n\nexport const BackToProfileButton = ({ funderId }: { funderId: string }) => {\n\n const history = useHistory();\n\n const backToProfile = () => {\n if (funderId) {\n history.push(`/f/funder-profile/${funderId}`);\n }\n else {\n history.goBack();\n }\n }\n\n return <Grid item xs={12} mb={1}>\n <Grid item container alignItems=\"center\" onClick={() => backToProfile()}>\n <Grid item>\n <IconButton\n size=\"small\"\n >\n <BackIcon fontSize=\"inherit\" />\n </IconButton>\n </Grid>\n <Grid item>\n <BackButtonTitle>Back to profile</BackButtonTitle>\n </Grid>\n </Grid>\n </Grid>\n}","import { Grid } from '@mui/material';\nimport { useEffect, useState } from 'react';\nimport { ProfileCard } from '../../../profileCard/ProfileCard';\nimport { EProfileType } from '../../../../enums/profile.enum';\nimport { IProfile } from '../../../../interfaces/IProfile';\nimport { Loading } from '../../../legacy-ui';\nimport { useParams } from 'react-router';\nimport { PublicAPIService } from '../../../../services/api-service/public-api.service';\nimport ProfileDrawer from '../profileDrawer';\nimport { ScrollableContainer } from './styles';\nimport { toast } from 'react-toastify';\nimport { OrganizationInfo } from './OrganizationInfo';\nimport { BackToProfileButton } from './BackToProfileButton';\n\ninterface IAllOrganizations {\n isAdmin: boolean;\n profileSlug?: string;\n}\n\nconst AllOrganizations = ({ isAdmin }: IAllOrganizations) => {\n const { id, profileSlug } = useParams<{ id: string, profileSlug: string }>();\n const [loading, setLoading] = useState<boolean>(true);\n const [fundedOrganizations, setFundedOrganizations] = useState<IProfile[]>([]);\n const [offset, setOffset] = useState<number>(0);\n const [hasMore, setHasMore] = useState<boolean>(true);\n const [drawerOpen, setDrawerOpen] = useState<IProfile>();\n const [amount, setAmount] = useState<number>();\n const [funderName, setFunderName] = useState('');\n const limit = 15;\n\n useEffect(() => {\n getOrganizations();\n }, []);\n\n const getOrganizations = async () => {\n try {\n const fundedDataQuery = PublicAPIService.getFundedTabBySlug(profileSlug, {\n limit,\n offset\n })\n const chartDataQuery = PublicAPIService.getFunderBySlug(profileSlug, { signal: undefined });\n\n const [fundedData, chartData] = await Promise.all([fundedDataQuery, chartDataQuery]);\n\n if (fundedData) {\n setFundedOrganizations([...fundedOrganizations, ...fundedData]);\n setOffset(offset + limit);\n\n if (fundedData.length < limit) {\n setHasMore(false);\n }\n if(chartData) {\n setAmount(chartData.totalFundedTab);\n setFunderName(chartData.name);\n }\n }\n if (loading) {\n setLoading(false);\n }\n }\n catch (error) {\n toast.error('Error loading funded organizations');\n }\n finally {\n setLoading(false);\n }\n }\n\n return (\n loading ? (\n <Loading />\n ) : (\n <ScrollableContainer\n dataLength={fundedOrganizations.length}\n next={getOrganizations}\n hasMore={hasMore}\n loader={<Loading />}\n scrollableTarget=\"scrollableBox\"\n >\n <Grid container maxWidth=\"1200px\">\n <BackToProfileButton funderId={id} />\n <OrganizationInfo amount={amount?.toString()} funderName={funderName} />\n <Grid container spacing={3}>\n {fundedOrganizations.map((grantee) => {\n return (\n <Grid item key={grantee!.id} md={4} sm={12} xs={12}>\n <ProfileCard\n openDetails={() => setDrawerOpen(grantee!)}\n profile={grantee!}\n profileType={!!grantee.funder ? EProfileType.FUNDER : EProfileType.GRANTEE}\n isAdmin={isAdmin}\n showFunders={false}\n />\n </Grid>\n );\n })}\n </Grid>\n </Grid>\n {drawerOpen && <ProfileDrawer open onClose={() => setDrawerOpen(undefined)} entity={drawerOpen} funderName={funderName}/>}\n </ScrollableContainer>\n ))\n};\n\nexport default AllOrganizations;","import { Avatar, styled } from '@mui/material'\nimport { AvatarProps } from './avatar.types'\n\nexport const AvatarWrapper = styled(Avatar, {\n shouldForwardProp: (propName) => propName !== 'avatarSize',\n})<AvatarProps>(({ avatarSize = 40 }) => ({\n fontSize: 24,\n color: '#515660',\n backgroundColor: 'rgba(215, 220, 239, 0.46)',\n border: '1px solid #DBE4F3',\n width: avatarSize,\n height: avatarSize\n}))\n","import React from 'react'\nimport { AvatarWrapper } from './avatar.styled'\nimport { AvatarProps } from './avatar.types'\n\nexport const Avatar: React.FC<AvatarProps> = ({ children, ...props }) => (\n <AvatarWrapper data-testid=\"avatar\" {...props}>\n {children}\n </AvatarWrapper>\n)\n","import { styled } from '@mui/material';\nimport { JFBannerProps } from './JFBanner.types';\n\nexport const JFBanner = styled('img')<JFBannerProps>(\n ({ borderRadius = 17, borderRadiusTopOnly = false }) => ({\n width: '100%',\n objectFit: 'cover',\n borderTopLeftRadius: borderRadius,\n borderTopRightRadius: borderRadius,\n borderBottomLeftRadius: borderRadiusTopOnly ? 0 : borderRadius,\n borderBottomRightRadius: borderRadiusTopOnly ? 0 : borderRadius,\n })\n);\n","import { styled } from '@mui/material';\nimport { JFProfileImageProps } from './JFProfileImage.types';\n\nexport const JFProfileImage = styled('img')<JFProfileImageProps>(\n ({\n hasSrc,\n size,\n borderWidth = 3,\n marginTop = 0,\n marginBottom = 0,\n marginLeft = 40,\n marginRight = 40,\n objectFit = 'contain',\n backgroundColor = '#FFF'\n }) => ({\n backgroundColor: hasSrc ? backgroundColor : 'transparent', \n borderColor: hasSrc ? '#000' : 'transparent',\n borderRadius: hasSrc ? '50%' : '0', \n borderStyle: hasSrc ? 'solid' : 'none', \n borderWidth: hasSrc ? borderWidth : '0',\n height: size,\n marginLeft,\n marginRight,\n marginTop,\n marginBottom,\n objectFit,\n width: size\n })\n);\n","import { Link, styled } from '@mui/material'\nimport { LinkProps } from './link.types'\n\nexport const LinkWrapper = styled(Link)<LinkProps>(({fontSize = 16, fontWeight = 500}) => ({\n color: '#4288C5 !important',\n cursor: 'pointer',\n fontWeight,\n fontSize,\n textDecoration: 'none',\n whiteSpace: 'break-spaces',\n wordWrap: 'break-word'\n}))\n","import React from 'react'\nimport { LinkWrapper } from './link.styled'\nimport { LinkProps } from './link.types'\n\nexport const Link: React.FC<LinkProps> = ({ children, action, ...props }) => (\n <LinkWrapper onClick={action} {...props}>\n {children}\n </LinkWrapper>\n)\n","import { Grid, styled } from '@mui/material'\nimport { SocialMediaProps } from './socialMedia.types'\n\nexport const SocialMediaWrapper = styled(Grid)<Partial<SocialMediaProps>>(({iconsSize = 25, gap = 8}) => ({\n display: 'flex',\n gap: gap,\n '& .MuiLink-root': {\n height: iconsSize,\n },\n '& .MuiLink-root > .MuiSvgIcon-root': {\n color: '#FFF',\n borderRadius: '50%',\n width: iconsSize,\n height: iconsSize,\n }\n}))","import SvgIcon, { SvgIconProps } from '@mui/material/SvgIcon';\n\nexport const CustomFacebookIcon = (props: SvgIconProps) => (\n <SvgIcon\n width={24}\n height={24}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 47 47\"\n {...props}\n >\n <path\n d=\"M23.5,47C10.5,47,0,36.5,0,23.5C0,14,5.7,5.5,14.4,1.8c12-5,25.7,0.7,30.7,12.6\n c5,11.9-0.6,25.6-12.4,30.7C29.8,46.4,26.6,47,23.5,47z M18.3,20.8v3.8h3.3v9.7h3.9v-9.7h3.3l0.5-3.8h-3.8v-2.4\n c0-1.1,0.3-1.8,1.9-1.8h2v-3.4C28.4,13,27.4,13,26.5,13h-0.1c-1.3-0.1-2.6,0.4-3.5,1.3c-0.9,1-1.4,2.4-1.4,3.7v2.8L18.3,20.8z\"\n />\n </SvgIcon>\n)\n","import SvgIcon, { SvgIconProps } from '@mui/material/SvgIcon'\n\nexport const CustomLinkedinIcon = (props: SvgIconProps) => (\n <SvgIcon\n width={24}\n height={24}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 47 47\"\n {...props}\n >\n <path\n d=\"M23.5,47C10.5,47,0,36.5,0,23.5C0,14,5.7,5.5,14.4,1.8c12-5,25.7,0.7,30.7,12.6\n c5,11.9-0.6,25.6-12.4,30.7C29.8,46.4,26.6,47,23.5,47z M26.9,22.8c1.7,0,2.1,1.5,2.1,2.8v6.7h4.1v-7.2c0.1-1.5-0.4-3.1-1.4-4.2\n c-0.9-0.9-2.1-1.4-3.4-1.4c-1.5,0.1-2.8,0.9-3.7,2.1v-1.8h-4.2v12.5h4.1v-7c0-0.3,0-0.7,0.1-1C25.1,23.4,26,22.8,26.9,22.8\n L26.9,22.8z M14.1,19.8v12.5h4.1V19.8H14.1z M16.2,13.8c-1.2-0.1-2.2,0.8-2.3,2c-0.1,1.2,0.8,2.2,2,2.3c0.1,0,0.2,0,0.3,0h0\n c1.2,0.1,2.2-0.8,2.3-2s-0.8-2.2-2-2.3C16.4,13.8,16.3,13.8,16.2,13.8z\"\n />\n </SvgIcon>\n)\n","import SvgIcon, { SvgIconProps } from '@mui/material/SvgIcon';\n\nexport const CustomGlobeIcon = (props: SvgIconProps) => (\n <SvgIcon\n width={24}\n height={24}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 158 158\"\n fill=\"none\"\n {...props}\n >\n <circle cx=\"79\" cy=\"79\" r=\"75\" stroke=\"black\" stroke-width=\"8\" />\n <path\n d=\"M62.0004 6C41.5004 28.6667 13.1004 89.6 63.5004 152\"\n stroke=\"black\"\n stroke-width=\"10\"\n />\n <path\n d=\"M93.7692 6C114.269 28.6667 142.669 89.6 92.2692 152\"\n stroke=\"black\"\n stroke-width=\"10\"\n />\n <path\n d=\"M134 126.362C116.612 117.649 69.8685 105.577 22 127\"\n stroke=\"black\"\n stroke-width=\"10\"\n />\n <path d=\"M134 30.6376C116.612 39.3515 69.8685 51.4234 22 30\" stroke=\"black\" stroke-width=\"10\" />\n <path d=\"M78 4.5V153.5\" stroke=\"black\" stroke-width=\"10\" />\n <path d=\"M4.5 79H152.5\" stroke=\"black\" stroke-width=\"10\" />\n </SvgIcon>\n);\n","import React, { useCallback } from 'react'\nimport { SocialMediaWrapper } from './socialMedia.styled'\nimport { SocialMediaProps } from './socialMedia.types'\n// mui components\nimport { Link } from '@mui/material'\n// icons\nimport InstagramIcon from '@mui/icons-material/Instagram'\nimport TwitterIcon from '@mui/icons-material/Twitter'\nimport { CustomFacebookIcon } from '../../Icon/CustomFacebookIcon'\nimport { CustomLinkedinIcon } from '../../Icon/CustomLinkedinIcon'\nimport { CustomGlobeIcon } from '../../Icon/CustomGlobeIcon'\n\nexport const SocialMedia: React.FC<SocialMediaProps> = ({ children, socialMedia, ...props }) => {\n const { twitter, instagram, facebook, linkedIn, website } = socialMedia\n \n const renderSocialMediaLinks = useCallback(() => {\n const validUrlTest = new RegExp(/https?:\\/\\//);\n\n const classes = {\n icon: {\n backgroundColor: '#15233D',\n padding: '6px'\n },\n customIcon: {\n fill: '#15233D'\n }\n }\n\n const socialMediaItems = [\n { url: website, icon: <CustomGlobeIcon />, type: 'website' },\n { url: twitter, icon: <TwitterIcon sx={classes.icon} />, type: 'twitter' },\n { url: instagram, icon: <InstagramIcon sx={classes.icon} />, type: 'instagram' },\n { url: facebook, icon: <CustomFacebookIcon sx={classes.customIcon} />, type: 'facebook' },\n { url: linkedIn, icon: <CustomLinkedinIcon sx={classes.customIcon} />, type: 'linkedIn' }\n ]\n\n return socialMediaItems.map(({ url, icon, type }) => {\n \n if (!url) return null\n\n const href = validUrlTest.test(url) ? url : `https://${url}`\n return (\n <Link\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n href={href}\n data-testid={`social-media-${type}`}\n >\n {icon}\n </Link>\n )\n })\n }, [ facebook, instagram, linkedIn, twitter, website])\n\n return (\n <SocialMediaWrapper data-testid=\"social-media\" {...props}>\n {renderSocialMediaLinks()}\n </SocialMediaWrapper>\n )\n}\n","import { IInviteUser, IUser } from '../../interfaces/IUser.interface';\nimport { api } from './api.service';\nimport { IListResults } from '../../interfaces/IGenerics.interfaces';\nimport { IEntityFollow, IFollow } from '../../interfaces/IFollow';\nimport { AxiosRequestConfig } from 'axios';\nimport { IBloatedFunder } from '../../interfaces/IFunder';\nimport { IProfile } from '../../interfaces/IProfile';\n\nexport class UserService {\n\n private static baseRoute = '/api/users';\n\n public static async list(): Promise<IListResults<IUser>> {\n const res = await api.get(`${this.baseRoute}`);\n return res.data as IListResults<IUser>;\n }\n\n public static async getById(id: number): Promise<IUser> {\n const res = await api.get(`${this.baseRoute}/${id}`);\n return res.data as IUser;\n }\n\n public static async editUser(id: number, user: Partial<IUser>): Promise<IUser> {\n const res = await api.put(`${this.baseRoute}/${id}`, user);\n return res.data as IUser;\n }\n\n public static async forcePasswordReset(formData: {password: string}): Promise<IUser> {\n const res = await api.post(`${this.baseRoute}/force-password-reset`, formData);\n return res.data as IUser;\n }\n\n public static async checkEmail(email: string): Promise<boolean> {\n const res = email ? await api.get(`${this.baseRoute}/check-email/${email}`) : await Promise.resolve({ data: true });\n return res.data;\n }\n\n public static async register(data: Partial<IUser>) {\n const res = await api.post(`${this.baseRoute}/register`, data);\n return res.data as Partial<IUser>;\n }\n\n public static async create(user: IInviteUser): Promise<IUser> {\n const res = await api.post(`${this.baseRoute}/`, user);\n return res.data as IUser;\n }\n\n public static async getAssociations(id: number): Promise<any> {\n const res = await api.get(`${this.baseRoute}/${id}/associations`);\n return res.data as any;\n }\n\n public static async getFollowing(config?: AxiosRequestConfig): Promise<IFollow[]> {\n const res = await api.get(`${this.baseRoute}/following`, config);\n return res.data as IFollow[];\n }\n\n public static async followEntity(entity: IEntityFollow): Promise<IFollow> {\n const res = await api.post(`${this.baseRoute}/follow`, entity);\n return res.data as IFollow;\n }\n\n public static async unfollowEntity(entity: IEntityFollow): Promise<void> {\n await api.post(`${this.baseRoute}/unfollow`, entity);\n }\n\n public static async getBookmarkedFunders(options: AxiosRequestConfig = {}): Promise<IBloatedFunder[]> {\n const res = await api.get(`${this.baseRoute}/bookmarked-funders`, options);\n return res.data as IBloatedFunder[];\n }\n\n public static async getSuggestedOrganizations(): Promise<IProfile[]> {\n const res = await api.get(`${this.baseRoute}/suggested-organizations`);\n return res.data as IProfile[];\n }\n\n public static async getSuggestedFunders(): Promise<IProfile[]> {\n const res = await api.get(`${this.baseRoute}/suggested-funders`);\n return res.data as IProfile[];\n }\n\n public static async getSuggestedProfiles(options: AxiosRequestConfig = {}): Promise<IProfile[]> {\n const res = await api.get(`${this.baseRoute}/suggested-profiles`, options);\n return res.data as IProfile[];\n }\n}","export enum NotificationStatus {\n UPDATE = 0,\n RESET = 1\n}","export enum NotificationReason {\n BackdropClick = \"backdropClick\"\n}","import { Box, Button, Modal, Grid, Typography } from '@mui/material';\nimport { FC } from 'react';\nimport InfoOutlinedIcon from '@mui/icons-material/InfoOutlined';\nimport { INotificationState } from './Notification';\n\ninterface PopupUpdateRenderProps {\n notificationState: INotificationState;\n handleClose: (val: boolean, reason?: string) => void;\n}\n\nconst PopupUpdateRender: FC<PopupUpdateRenderProps> = ({\n notificationState,\n handleClose\n}) => {\n const {\n open,\n title,\n message,\n component,\n removeCancelBtn,\n customBtnText,\n customComponent,\n reason,\n customTitle\n } = notificationState;\n\n const paper = {\n position: 'absolute' as 'absolute',\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n maxWidth: 600,\n backgroundColor: '#FFFFFF',\n boxShadow: 24,\n borderRadius: '16px',\n background: 'var(#FFFFFF, #FFF)',\n '@media (max-width: 900px)': {\n top: '8em',\n left: 'auto',\n margin: 'auto',\n transform: 'none'\n }\n };\n\n const infoIconStyle = {\n color: 'black',\n fontSize: '25px',\n verticalAlign: 'text-top'\n };\n\n return (\n <Modal\n disableEnforceFocus\n open={open}\n onClose={() => handleClose(false, reason)}\n aria-describedby={'notification-title'}\n style={{\n outline: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center'\n }}\n >\n <Box sx={paper}\n style={{\n outline: 'none',\n border: 'none !important',\n maxWidth: '480px',\n }}>\n <Grid\n container\n \n >\n <Grid item xs={12}>\n <Box sx={{ p: 4, paddingY: 3 }}>\n <Typography variant=\"h5\">\n {customTitle || \n <>\n <InfoOutlinedIcon style={infoIconStyle} />\n <span id=\"notification-title\" style={{ fontSize: '23px', marginLeft: '8px' }}>\n {title}\n </span>\n </>\n }\n </Typography>\n </Box>\n </Grid>\n {message && (\n <Grid item xs={12}>\n <Box sx={{ px: 4, pt: 4 }}>\n {typeof message === 'string' ? (\n <Typography component=\"p\">{message}</Typography>\n ) : (\n message\n )}\n </Box>\n </Grid>\n )}\n {component && (\n <Grid item xs={12}>\n <Box sx={{ px: 4 }}>\n <Typography component=\"p\">{component}</Typography>\n </Box>\n </Grid>\n )}\n <Grid item xs={12}>\n <Box sx={{ px: 4 }}>\n <>{customComponent}</>\n </Box>\n </Grid>\n <Grid item xs={12}>\n <Box\n sx={{\n p: 4,\n paddingBottom: 3,\n display: 'flex',\n justifyContent: 'flex-end'\n }}\n >\n <Grid container spacing={1} justifyContent=\"flex-end\">\n <Grid item>\n {removeCancelBtn ? null : (\n <Button\n variant=\"outlined\"\n onClick={() => handleClose(false, reason)}\n >\n Cancel\n </Button>\n )}\n </Grid>\n <Grid item>\n <Button\n variant=\"contained\"\n data-testid=\"popup_update_cta_btn\"\n sx={{\n textTransform: 'capitalize',\n borderRadius: '120px',\n paddingRight: '28px',\n paddingLeft: '28px',\n color: 'white',\n fontSize: '17px',\n fontWeight: '600',\n backgroundColor: '#0b61b0 !important'\n }}\n onClick={() => handleClose(true, reason)}\n >\n {customBtnText ? customBtnText : 'Ok'}\n </Button>\n </Grid>\n </Grid>\n </Box>\n </Grid>\n </Grid>\n </Box>\n </Modal>\n );\n};\n\nexport default PopupUpdateRender;\n","// Notification.tsx\nimport { createContext, FC, useContext, useReducer } from 'react';\nimport { NotificationStatus } from '../../enums/notification-status.enum';\nimport { NotificationReason } from '../../enums/global/notification-reason.enum';\nimport PopupUpdateRender from './PopupUpdateRender';\nimport NotificationRender from './NotificationRender';\n\nexport interface INotificationState {\n id?: number;\n open: boolean;\n onClose: (val: any, reason?: string) => void;\n title: string;\n message?: string | JSX.Element;\n component?: any;\n removeCancelBtn?: boolean;\n customBtnText?: string;\n customBtnFunc?: any;\n customComponent?: any;\n customTitle?: JSX.Element;\n type: 'ERROR' | 'NOTIFICATION';\n toggleNotification?: (val: boolean) => void;\n reason?: string;\n renderType?: 'popupUpdate' | 'notification';\n}\n\nexport interface INotificationReducer {\n type: NotificationStatus.UPDATE | NotificationStatus.RESET;\n data: Partial<INotificationState>;\n renderType?: 'popupUpdate' | 'notification';\n}\n\nexport type AlertPosition =\n | 'top-right'\n | 'top-left'\n | 'bottom-right'\n | 'bottom-left'\n | 'bottom-center';\ninterface IShowAlert {\n title: string;\n message?: string | JSX.Element;\n severity?: 'error' | 'warning' | 'info' | 'success';\n onClose?: () => void;\n position?: AlertPosition;\n action?: JSX.Element;\n icon?: React.ReactNode | boolean;\n}\n\ninterface IMessagingContext {\n notificationState: INotificationState;\n notificationDispatch: (val: INotificationReducer) => void;\n alertState: IShowAlertState;\n alertDispatch: (val: IAlertReducer) => void;\n resetAlert: () => void;\n resetNotification: () => void;\n}\n\ninterface IShowAlertState extends IShowAlert {\n showAlert: (val: IShowAlert) => void;\n showError: (val: Omit<IShowAlert, 'severity'>) => void;\n showWarning: (val: Omit<IShowAlert, 'severity'>) => void;\n showInfo: (val: Omit<IShowAlert, 'severity'>) => void;\n showSuccess: (val: Omit<IShowAlert, 'severity'>) => void;\n}\n\ninterface IAlertReducer {\n type: 'UPDATE' | 'RESET';\n data: Partial<IShowAlert>;\n}\n\nconst defaultNotificationState: INotificationState = {\n open: false,\n title: 'Information',\n type: 'NOTIFICATION',\n onClose: (val) => {},\n toggleNotification: (val: boolean) => {}\n};\n\nconst defaultAlertState = {\n title: '',\n message: ''\n};\n\nconst MessagingContext = createContext<IMessagingContext>({\n notificationState: {} as INotificationState,\n notificationDispatch: (val: INotificationReducer) => {},\n alertState: {} as IShowAlertState,\n alertDispatch: (val: IAlertReducer) => {},\n resetAlert: () => {},\n resetNotification: () => {}\n});\n\nconst notificationReducer = (\n state: INotificationState,\n { type, data, renderType }: INotificationReducer\n) => {\n switch (type) {\n case NotificationStatus.UPDATE:\n return { ...state, ...data, renderType };\n case NotificationStatus.RESET:\n return defaultNotificationState;\n default:\n throw new Error(`Type ${type} in reducer not defined`);\n }\n};\n\nconst alertReducer = (state: IShowAlert, { type, data }: IAlertReducer) => {\n switch (type) {\n case 'UPDATE':\n return { ...state, ...data };\n case 'RESET':\n return defaultAlertState;\n default:\n throw new Error(`Type ${type} in reducer is not defined `);\n }\n};\n\nexport const NotificationProvider: FC = ({ children }: any) => {\n const [_notificationState, notificationDispatch] = useReducer(\n notificationReducer,\n defaultNotificationState\n );\n\n const notificationState: INotificationState = {\n ..._notificationState,\n toggleNotification: (open = false) =>\n notificationDispatch({ type: NotificationStatus.UPDATE, data: { open } })\n };\n\n const [_alertState, alertDispatch] = useReducer(\n alertReducer,\n defaultAlertState\n );\n\n const alertState = {\n ..._alertState,\n showAlert: ({ title, message, severity, onClose }: IShowAlert) =>\n alertDispatch({\n type: 'UPDATE',\n data: { title, message, severity, onClose }\n }),\n showError: ({ title, message, onClose }: Omit<IShowAlert, 'severity'>) =>\n alertDispatch({\n type: 'UPDATE',\n data: { title, message, severity: 'error', onClose }\n }),\n showWarning: ({ title, message, onClose }: Omit<IShowAlert, 'severity'>) =>\n alertDispatch({\n type: 'UPDATE',\n data: { title, message, severity: 'warning', onClose }\n }),\n showInfo: ({ title, message, onClose }: Omit<IShowAlert, 'severity'>) =>\n alertDispatch({\n type: 'UPDATE',\n data: { title, message, severity: 'info', onClose }\n }),\n showSuccess: ({ title, message, onClose }: Omit<IShowAlert, 'severity'>) =>\n alertDispatch({\n type: 'UPDATE',\n data: { title, message, severity: 'success', onClose }\n })\n };\n\n const resetAlert = () => alertDispatch({ type: 'RESET', data: {} });\n const resetNotification = () =>\n notificationDispatch({ type: NotificationStatus.RESET, data: {} });\n\n const messagingState: IMessagingContext = {\n notificationState,\n notificationDispatch,\n alertState,\n alertDispatch,\n resetAlert,\n resetNotification\n };\n return (\n <MessagingContext.Provider value={messagingState}>\n {children}\n </MessagingContext.Provider>\n );\n};\n\nexport const useMessagingContext = () => useContext(MessagingContext);\n\n/**\n *\n * @description\n * This should only be imported one time into the application, all other functionality\n * is handled by useContext\n */\n\nexport const Notification: FC = () => {\n const { notificationState, resetNotification } = useMessagingContext();\n const { renderType } = notificationState;\n\n const handleClose = (val: boolean, reason?: string) => {\n if (!!notificationState.customBtnFunc && val && notificationState.id) {\n notificationState.customBtnFunc(notificationState.id);\n notificationState.onClose(val, reason);\n resetNotification();\n } else if (!!notificationState.customBtnFunc && val) {\n notificationState.customBtnFunc();\n notificationState.onClose(val, reason);\n resetNotification();\n } else {\n if (reason && reason === NotificationReason.BackdropClick) {\n return;\n } else {\n notificationState.onClose(val, reason);\n }\n resetNotification();\n }\n };\n\n return renderType === 'popupUpdate' ? (\n <PopupUpdateRender\n notificationState={notificationState}\n handleClose={handleClose}\n />\n ) : (\n <NotificationRender\n notificationState={notificationState}\n handleClose={handleClose}\n />\n );\n};\n","export enum RFPStatus {\n APPROVED,\n SUBMITTED,\n DRAFT\n}\n\nexport enum RFPStatusLabel {\n APPROVED = 'Approved',\n SUBMITTED = 'Submitted',\n DRAFT = 'Draft',\n ACTIVE = 'Active',\n CLOSED = 'Closed',\n DELETED = 'Deleted'\n}\n","export enum ApplicationStatus {\n AWARDED = 0,\n PENDING = 1,\n REJECTED = 2,\n DRAFT = 3,\n NOT_STARTED = 999\n }","import React, { useState } from 'react';\nimport { Box, Button, Grid, IconButton, Divider, InputAdornment, TextField, Theme, Typography } from '@mui/material';\nimport { Visibility, VisibilityOff } from '@mui/icons-material';\nimport { useHistory, useParams } from \"react-router-dom\";\nimport { useMessagingContext } from '../../../shared/components/modals/Notification';\nimport { UserAuthService } from '../../../shared/services/api-service/user-auth-api.service';\nimport { Controller, useForm } from \"react-hook-form\";\nimport { NotificationStatus } from '../../../shared/enums/notification-status.enum';\n\nconst classes = {\n root: {\n backgroundColor: '#fff',\n borderRadius: '10px',\n boxShadow: '0 0 15px 0 rgba(0,0,0,0.25)',\n },\n textField: {\n [`& fieldset`]: {\n borderRadius: 0,\n border: ' 1px solid #000000',\n boxShadow: 'inset 0 2px 00 #ffffff'\n },\n marginBlockEnd: '25px',\n width: '300px'\n },\n labelLeft: {\n fontWeight: 'bold',\n paddingBottom: '10px',\n lineHeight: '22px',\n letterSpacing: 0,\n },\n resetHeading: {\n lineHeight: '61px',\n fontSize: '50px',\n fontWeight: 'bold',\n textAlign: 'center',\n marginTop: '22px'\n },\n redUnderline: {\n height: '10px',\n backgroundColor: '#E61436',\n margin: '1em',\n width: '70%',\n marginLeft: '15%'\n },\n};\n\ninterface IParams {\n token: string;\n resetType: 'new' | 'reset'\n}\n\nconst passwordMessage = {\n 'reset': { open: true, title: \"Password Reset\", message: \"Password Reset Successfully. Please Log In.\", removeCancelBtn: true },\n 'new': { open: true, title: \"Password Created\", message: \"Password Created Successfully. Please Log In.\", removeCancelBtn: true }\n}\n\nexport const NewPassword = () => {\n\n\n const { token, resetType } = useParams<IParams>();\n const history = useHistory();\n const emailRegex = /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n const passwordRegex = /[a-z0-9!@#:;<>?~%^$*&()\\\\-`.+,/\\\"]{8,}/i;\n\n const [password, setPassword] = useState({\n password: \"\",\n showPassword: false,\n });\n\n const { notificationDispatch } = useMessagingContext();\n\n const handleClickShowPassword = () => {\n setPassword({ ...password, showPassword: !password.showPassword });\n };\n const handleMouseDownPassword = (event: React.MouseEvent<HTMLButtonElement>) => {\n event.preventDefault();\n };\n\n const handleOpen = () => {\n const data = { ...passwordMessage[resetType], onClose: handleClose };\n notificationDispatch({ type: NotificationStatus.UPDATE, data });\n }\n\n const handleClose = (val: boolean) => {\n if (val) {\n // the api endpoint to update a users password logs them out, no need call userAuthService.logout here\n history.push('/justfund/signin')\n }\n };\n\n const handleErrorNotification = () => {\n notificationDispatch({ type: NotificationStatus.UPDATE, data: { open: true, title: 'Error', message: \"Please confirm the email address you entered matches your account.\" } })\n }\n const requiredErrorMessage = \"This field is required\";\n\n const { control, handleSubmit, formState: { errors } } = useForm({ mode: \"onSubmit\" });\n\n const onSubmit = async (formData: any) => {\n let modified: any;\n modified = formData;\n try {\n const reset = await UserAuthService.resetPassword(token, modified.email, modified.password);\n if (reset) handleOpen();\n } catch (err) {\n console.error(err)\n handleErrorNotification()\n }\n }\n\n\n return (\n <Grid container>\n <Box sx={{ ...classes.root, width: '1015px', height: '569px', marginX: 'auto', marginTop: '2em', textAlign: 'center' }}>\n <Grid item sm={12} sx={{ marginBottom: '1em' }}>\n <Typography variant=\"h1\" sx={classes.resetHeading}>Create a New Password</Typography>\n <Box sx={classes.redUnderline} />\n </Grid>\n <form onSubmit={handleSubmit(onSubmit)}>\n <Grid item xs={12}>\n <Typography sx={classes.labelLeft}>Email</Typography>\n <Controller\n name=\"email\"\n control={control}\n defaultValue=\"\"\n rules={{ required: requiredErrorMessage, pattern: { value: emailRegex, message: \"Must be a valid email address\" } }}\n render={({ field }) =>\n <TextField sx={classes.textField}\n placeholder=\"Confirm Email\"\n size=\"small\"\n error={!!errors?.email}\n helperText={!!errors?.email && errors?.email?.message}\n variant=\"outlined\"\n InputProps={{ style: { fontSize: 16 } }}\n {...field}\n />\n }\n />\n </Grid>\n <Grid item xs={12}>\n <Typography sx={classes.labelLeft}>New Password</Typography>\n <Controller\n name=\"password\"\n control={control}\n defaultValue=\"\"\n rules={{ required: requiredErrorMessage, pattern: { value: passwordRegex, message: \"Password must be at least 8 characters\" } }}\n render={({ field }) =>\n <TextField\n sx={classes.textField}\n placeholder=\"Enter new password\"\n size=\"small\"\n variant=\"outlined\"\n id=\"input-with-icon-textfield\"\n type={password.showPassword ? 'text' : 'password'}\n error={!!errors?.password}\n helperText={!!errors?.password && errors?.password?.message}\n {...field}\n InputProps={{\n style: { fontSize: 16 },\n endAdornment: (\n <InputAdornment position=\"end\">\n <IconButton\n aria-label=\"toggle password visibility\"\n onClick={handleClickShowPassword}\n onMouseDown={handleMouseDownPassword}\n size=\"large\">\n {password.showPassword ? <Visibility /> : <VisibilityOff />}\n </IconButton>\n </InputAdornment>\n ),\n }}\n />\n }\n />\n </Grid>\n <Grid item sm={12}>\n <Button variant='contained' type=\"submit\">Submit</Button>\n </Grid>\n </form>\n <Grid item sm={12}>\n </Grid>\n </Box >\n </Grid>\n );\n}\n","import { Box, Button, Grid, TextField, Typography } from '@mui/material';\nimport React, { useEffect, useState } from 'react';\nimport { Controller, useForm } from \"react-hook-form\";\nimport { useHistory } from \"react-router\";\nimport { IUser } from \"../../../shared/interfaces/IUser.interface\";\nimport { IUserAssociations } from \"../../../shared/interfaces/IUserAssociations.interface\";\nimport { UserAuthService } from \"../../../shared/services/api-service/user-auth-api.service\";\nimport { Link } from 'react-router-dom';\nimport { UserEntityType } from '../../../shared/enums/user.enum';\nimport { UserStatus } from '../../../shared/enums/user-status';\nimport { OrgStatus } from '../../../shared/enums/grantee-status.enum';\nimport { INotificationState, useMessagingContext } from \"../../../shared/components/modals/Notification\";\nimport { NotificationStatus } from '../../../shared/enums/notification-status.enum';\nimport { useQuery } from '../../../shared/hooks/useQuery.hook';\nimport { IBloatedFunder } from '../../../shared/interfaces/IFunder';\nimport { IBloatedGrantee } from '../../../shared/interfaces/IGrantee';\nimport { BillingStatus } from '../../../shared/enums/stripe';\n\n// TODO - this whole file _needs_ to be updated / cleaned up. \n\nconst styles = {\n root: {\n backgroundColor: '#fff',\n borderRadius: '10px',\n boxShadow: '0 0 15px 0 rgba(0,0,0,0.25)',\n },\n textField: {\n [`& fieldset`]: {\n borderRadius: 0,\n border: ' 1px solid #091B30',\n },\n },\n block: {\n display: 'block',\n margin: '10px 0px'\n },\n signInButton: {\n backgroundColor: '#1A75BD',\n height: '70px',\n fontSize: '20px',\n fontWeight: 'bold',\n textTransform: 'none',\n borderRadius: 0,\n },\n redUnderline: {\n height: '10px',\n width: '157px',\n backgroundColor: '#E61436',\n margin: '0px 0px 43px 0px'\n },\n signIn: {\n lineHeight: '61px',\n fontSize: '50px',\n fontWeight: 'bold',\n },\n margin: {\n marginLeft: \"90px\"\n }\n};\n\nexport function SignIn(props: any) {\n const { setError, control, handleSubmit, formState: { errors } } = useForm({ mode: \"onSubmit\" });\n const [interactionChoice, setInteractionChoice] = useState(false);\n const [userName, setUserName] = useState<string | undefined>('');\n const [admin, setAdmin] = useState(false);\n const [associations, setAssociations] = useState<IUserAssociations | null>(null);\n const history = useHistory();\n const requiredErrorMessage = \"This field is required\";\n const redirectTo = useQuery().get('redirect');\n const { notificationDispatch } = useMessagingContext();\n\n const completeSignIn = async (user: IUser) => {\n // If they haven't registered yet, send them to the register screen\n if (user.status === UserStatus.UNREGISTERED) return history.push(`/register/${user.id}`);\n // if user.is_admin === true they should *always* have access to admin. Small safety net to ensure JF staff does not accidentally lock themselves out completely. \n // if they try to use the portal they will be logged out automatically, but can change their status at any point in admin. \n else if (user.status !== UserStatus.ACTIVE && !user.is_admin) {\n setAssociations(null);\n const data = {\n open: true,\n title: \"Something Went Wrong\",\n message: `This account has been locked. Please reach out to info@justfund.us for resolution if you feel this was made in error.`,\n onclose: async () => {\n await UserAuthService.logout()\n },\n removeCancelBtn: true\n }\n return notificationDispatch({ type: NotificationStatus.UPDATE, data })\n };\n const userAssociations = await UserAuthService.getAssociations(user.id);\n const funderBillingStatus = userAssociations.funders[0]?.billingEvents?.[0]?.subscription_status;\n setAssociations(userAssociations);\n // default redirect for single association accounts\n if (user.is_admin && getActiveAssociations(userAssociations) <= 0) return history.push('/admin');\n const uncollectableStatus = (funderBillingStatus === BillingStatus.UNCOLLECTABLE || funderBillingStatus === BillingStatus.VOID || funderBillingStatus === BillingStatus.CANCELED);\n\n if (getActiveAssociations(userAssociations) === 1 && uncollectableStatus) {\n const data: INotificationState = {\n open: true,\n title: 'Your plan is no longer active',\n message: \"Your subscription plan is no longer active. To renew your plan, please reach out to sales@justfund.us\",\n removeCancelBtn: true,\n type: 'NOTIFICATION',\n onClose: async () => {\n await UserAuthService.logout()\n },\n }\n notificationDispatch({ type: NotificationStatus.UPDATE, data });\n } else if (getActiveAssociations(userAssociations) <= 0) {\n const data: INotificationState = {\n open: true,\n title: uncollectableStatus ? 'Your plan is no longer active' : 'Unable to login!',\n message: uncollectableStatus ?\n \"Your subscription plan is no longer active. To renew your plan, please reach out to sales@justfund.us\" :\n `We're sorry, you no longer have access to this account. If you believe you've received this message in error, please contact info@justfund.us.`,\n removeCancelBtn: true,\n type: 'NOTIFICATION',\n onClose: async () => {\n await UserAuthService.logout()\n },\n }\n notificationDispatch({ type: NotificationStatus.UPDATE, data });\n } \n\n // If an admin reset their password, force them to change it\n // TODO: Update this so the user can't do anything in the portal until their password has been changed\n if (user?.force_password_reset) {\n history.push(`/justfund/reset-password-required/${user?.id}`);\n };\n\n // set user and associations\n setAdmin(user?.is_admin);\n setUserName(user?.first_name);\n\n // choice of role for login\n setInteractionChoice(true);\n }\n\n const onSubmit = async (formData: any) => {\n const trimmedEmail = `${formData.email}`.trim(); // clean up spaces before/after\n try {\n\n const result = await UserAuthService.login(trimmedEmail, formData.password);\n if (result.userId) {\n const { user } = await UserAuthService.verifyLogin();\n await completeSignIn(user);\n }\n return;\n\n } catch (err: any) {\n setError('email', { type: 'value', message: 'Incorrect email or password.' }, { shouldFocus: true });\n }\n }\n\n const goToRoute = (rootPath: \"f\" | \"o\" | \"admin\", id?: number) => {\n const shouldRedirect = redirectTo?.split('/')?.[1] === rootPath;\n switch (rootPath) {\n case 'f':\n return id && shouldRedirect ? redirectTo : `/f/funder/${id}`;;\n case 'o':\n return shouldRedirect ? redirectTo : `/o/`;\n case 'admin':\n return shouldRedirect ? redirectTo : `/admin/`;\n default:\n return '';\n }\n }\n\n // Returns count of non role and active user associations\n const getActiveAssociations = (userAssociations: IUserAssociations): number => {\n return (\n userAssociations?.funders.filter(\n (funder: IBloatedFunder) => funder.status !== OrgStatus.ARCHIVED)\n .concat(\n userAssociations?.grantees.filter(\n (grantee: IBloatedGrantee) => grantee.status !== OrgStatus.ARCHIVED)\n ).length\n );\n };\n\n function updateEntity(id: number, type: UserEntityType) {\n UserAuthService.setEntity({ entityId: id.toString(), entityType: type?.toString() });\n }\n\n useEffect(() => {\n if (!UserAuthService.tokenIsExpired()) {\n UserAuthService.verifyLogin().then(verification => {\n completeSignIn(verification.user);\n }).catch(err => console.log(err));\n }\n else UserAuthService.exchangeToken().then(newToken => {\n if (!UserAuthService.tokenIsExpired()) {\n UserAuthService.verifyLogin().then(verification => {\n completeSignIn(verification.user);\n }).catch(err => console.log(err));\n }\n });\n }, []);\n\n return (\n <Grid\n container\n >\n <Grid \n container \n item \n lg={4} md={8} sm={12} xs={12} \n sx={styles.root}\n height=\"auto\"\n mt=\"2rem\"\n mx=\"auto\"\n p=\"4rem 5rem 5rem 4rem\"\n >\n <Grid container alignItems=\"center\" sx={{ display: interactionChoice ? 'none' : '' }}>\n <Grid item xs={12}>\n </Grid>\n <Grid item md={8} xs={12}>\n <Typography sx={styles.signIn}>Sign In</Typography>\n <Box sx={styles.redUnderline} />\n </Grid>\n <Grid item md={4} xs={12}>\n <Typography variant=\"body1\"> Don't have an account yet?</Typography>\n <Box sx={styles.block}>\n <a href=\"https://justfund.us/sign-up/\">\n Sign Up\n </a>\n </Box>\n </Grid>\n </Grid>\n\n <form onSubmit={handleSubmit(onSubmit)}>\n <Grid container spacing={3} sx={{ display: interactionChoice ? 'block' : 'none' }}>\n <Grid item xs={12}>\n <Typography variant='h4' data-testid='welcome_header'>Welcome, {userName}!</Typography>\n <Grid item xs={12} mt='1rem' mb='1rem'>\n <Typography variant='h5'>How would you like to interact with the portal?</Typography>\n </Grid>\n {admin ?\n <Grid item sx={{ paddingBottom: '0.5em' }}>\n <Typography variant='h5' data-testid='admin_header'>As an Admin:</Typography>\n <Box sx={{ fontSize: 16 }}>\n <Link to={goToRoute('admin')} data-testid='adminconsole_link'>Go to Admin</Link>\n </Box>\n </Grid>\n : \"\"\n }\n {(associations?.funders?.filter((funder) => funder.status !== OrgStatus.ARCHIVED).length) ?\n <Grid item sm={12} mb='0.5rem'>\n <Typography variant='h6' data-testid='funder_header'>As a Funder:</Typography>\n {associations?.funders.filter((funder) => funder.status !== OrgStatus.ARCHIVED).map((funder) => {\n return (\n <Grid item sm={12} key={funder.id} sx={{ fontSize: 16 }}>\n <Link to={goToRoute('f', funder.id)} onClick={() => updateEntity(funder?.id, UserEntityType.FUNDER)} data-testid={'funder_link_'+funder.id}>{funder.name}</Link>\n </Grid>\n )\n })}\n\n </Grid>\n : \"\"\n }\n {(associations?.grantees?.filter((grantee) => grantee.status !== OrgStatus.ARCHIVED).length) ?\n <Grid item sm={12} mb='0.5rem'>\n <Typography variant='h6' data-testid='applicant_header'>As an Organization:</Typography>\n {associations?.grantees.filter((grantee) => grantee.status !== OrgStatus.ARCHIVED).map((grantee) => {\n return (\n <Grid item sm={12} key={grantee.id} sx={{ fontSize: 16 }}>\n <Link to={goToRoute('o')} onClick={() => updateEntity(grantee?.id, UserEntityType.GRANTEE)} data-testid={'applicant_link_'+grantee.id}>{grantee.name}</Link>\n </Grid>\n )\n })}\n </Grid>\n : \"\"\n }\n </Grid>\n </Grid>\n <Grid container alignItems=\"center\" sx={{ display: interactionChoice ? 'none' : '' }} spacing={3}>\n <Grid item xs={12}>\n <Controller\n name=\"email\"\n control={control}\n defaultValue={\"\"}\n rules={{ required: requiredErrorMessage }}\n render={({ field }) =>\n <TextField\n sx={styles.textField}\n error={!!errors.email}\n helperText={!!errors.email && <>{errors.email?.message}</>}\n fullWidth\n label='Email Address*'\n autoFocus\n autoCapitalize='none'\n autoCorrect='off'\n placeholder='name@domain.org'\n inputProps={{\n 'data-testid': 'email'\n }}\n {...field}\n />\n }\n />\n </Grid>\n <Grid item xs={12}>\n <Controller\n name=\"password\"\n control={control}\n defaultValue={\"\"}\n rules={{ required: requiredErrorMessage }}\n render={({ field }) =>\n <TextField\n type=\"password\"\n sx={styles.textField}\n error={!!errors.password}\n helperText={!!errors.password && <>{errors.password?.message}</>}\n fullWidth\n label='Password*'\n autoCapitalize='none'\n autoCorrect='off'\n placeholder='Password'\n inputProps={{\n 'data-testid': 'password'\n }}\n {...field}\n />\n }\n />\n </Grid>\n <Grid item xs={12}>\n <Button fullWidth sx={styles.signInButton} variant=\"contained\" type='submit' data-testid='signin_btn'>SIGN IN</Button>\n </Grid>\n <Grid item sm={6}>\n <Link to=\"/justfund/forgot-password\">\n I forgot my password\n </Link>\n </Grid>\n </Grid>\n </form>\n </Grid>\n </Grid>\n );\n}\n","import React, { useEffect, useState } from 'react';\nimport { Box, Button, Grid, IconButton, InputAdornment, TextField, Typography } from '@mui/material';\nimport { Visibility, VisibilityOff } from '@mui/icons-material';\nimport { useHistory, useParams } from \"react-router-dom\";\nimport { useMessagingContext } from '../../../shared/components/modals/Notification';\nimport { UserAuthService } from '../../../shared/services/api-service/user-auth-api.service';\nimport { UserService } from '../../../shared/services/api-service/user-api.service';\nimport { Controller, useForm } from \"react-hook-form\";\nimport { NotificationStatus } from '../../../shared/enums/notification-status.enum';\n\n\n// TODO: Clean up these CSS classes, a lot of these probably aren't necessary now that the theme is fully stood up\nconst classes = {\n root: {\n backgroundColor: '#fff',\n borderRadius: '10px',\n boxShadow: '0 0 15px 0 rgba(0,0,0,0.25)',\n },\n textField: {\n [`& fieldset`]: {\n borderRadius: 0,\n border: ' 1px solid #000000',\n boxShadow: 'inset 0 2px 00 #ffffff'\n },\n marginBlockEnd: '25px',\n width: '300px'\n },\n fields: {\n width: '100%',\n margin: 'auto',\n },\n labelLeft: {\n fontWeight: 'bold',\n paddingBottom: '10px',\n lineHeight: '22px',\n letterSpacing: 0,\n },\n resetHeading: {\n lineHeight: '61px',\n fontSize: '50px',\n fontWeight: 'bold',\n textAlign: 'center',\n marginTop: '22px'\n },\n redUnderline: {\n height: '10px',\n backgroundColor: '#E61436',\n margin: '1em',\n width: '70%',\n marginLeft: '15%'\n },\n};\n\ninterface IParams {\n id: string;\n}\nexport const RequiredResetPassword = () => {\n\n\n const userId = useParams<IParams>();\n const history = useHistory();\n const passwordRegex = /[a-z0-9!@#:;<>?~%^$*&()\\\\-`.+,/\"]{8,}/i;\n const requiredErrorMessage = \"This field is required\";\n\n const { control, handleSubmit, formState: { errors } } = useForm({ mode: \"onSubmit\" });\n const { notificationDispatch } = useMessagingContext();\n\n const [password, setPassword] = useState({ password: \"\", showPassword: false });\n const [verifyId, setVerifyId] = useState<number>();\n\n\n const handleClickShowPassword = () => {\n setPassword({ ...password, showPassword: !password.showPassword });\n };\n\n const handleMouseDownPassword = (event: React.MouseEvent<HTMLButtonElement>) => {\n event.preventDefault();\n };\n\n const handleOpen = () => {\n const data = { open: true, title: \"Password Reset\", message: \"Password Reset Successfully. Please Log In.\", onClose: handleClose, removeCancelBtn: true };\n notificationDispatch({ type: NotificationStatus.UPDATE, data });\n }\n\n const handleClose = (val: boolean) => {\n if (val) {\n history.push(`/justfund/signin`);\n }\n };\n\n const handleErrorNotification = () => {\n notificationDispatch({ type: NotificationStatus.UPDATE, data: { open: true, title: 'Error', message: \"Something has gone wrong. Please try again or contact info@justfund.us\" } })\n }\n\n const onSubmit = async (formData: any) => {\n if (verifyId === parseInt(userId.id, 10))\n try {\n const reset = await UserService.forcePasswordReset(formData);\n if (reset) handleOpen();\n } catch (err) {\n console.error(err)\n handleErrorNotification()\n }\n }\n\n useEffect(() => {\n UserAuthService.verifyLogin().then(response => {\n setVerifyId(response.user?.id);\n })\n }, [])\n\n return (\n <Grid container>\n <Box sx={{ ...classes.root, width: '1015px', height: '569px', marginX: 'auto', marginTop: '2em', textAlign: 'center' }}>\n <Grid item sm={12} sx={{ marginBottom: '1em' }}>\n <Typography variant=\"h1\" sx={classes.resetHeading}>Create a New Password</Typography>\n <Box sx={classes.redUnderline} />\n </Grid>\n <Grid item sm={12} sx={{ marginBottom: '1em' }}>\n <Typography variant=\"h3\">Your password has been reset, please enter a new password</Typography>\n </Grid>\n <form onSubmit={handleSubmit(onSubmit)}>\n <Grid item xs={12}>\n <Typography sx={classes.labelLeft}>New Password</Typography>\n <Controller\n name=\"password\"\n control={control}\n defaultValue=\"\"\n rules={{ required: requiredErrorMessage, pattern: { value: passwordRegex, message: \"Password must be at least 8 characters\" } }}\n render={({ field }) =>\n <TextField\n sx={classes.textField}\n placeholder=\"Enter new password\"\n size=\"small\"\n variant=\"outlined\"\n id=\"input-with-icon-textfield\"\n type={password.showPassword ? 'text' : 'password'}\n error={!!errors?.password}\n helperText={!!errors?.password?.message}\n {...field}\n InputProps={{\n style: { fontSize: 16 },\n endAdornment: (\n <InputAdornment position=\"end\">\n <IconButton\n aria-label=\"toggle password visibility\"\n onClick={handleClickShowPassword}\n onMouseDown={handleMouseDownPassword}\n size=\"large\">\n {password.showPassword ? <Visibility /> : <VisibilityOff />}\n </IconButton>\n </InputAdornment>\n ),\n }}\n />\n }\n />\n </Grid>\n <Button variant='contained' type=\"submit\">Submit</Button>\n </form>\n <Grid item sm={12}>\n </Grid>\n </Box >\n </Grid>\n );\n}\n","import React from 'react';\nimport { Box, Button, Grid, Link, TextField, Typography } from '@mui/material';\nimport { UserAuthService } from '../../../shared/services/api-service/user-auth-api.service';\nimport { useMessagingContext } from \"../../../shared/components/modals/Notification\";\nimport { NotificationStatus } from '../../../shared/enums/notification-status.enum';\nimport { useHistory } from \"react-router\";\nimport { Controller, useForm } from 'react-hook-form';\n\nconst classes = {\n root: {\n backgroundColor: '#fff',\n borderRadius: '10px',\n boxShadow: '0 0 15px 0 rgba(0,0,0,0.25)',\n },\n textField: {\n [`& fieldset`]: {\n borderRadius: 0,\n border: ' 1px solid #091B30',\n },\n width: '100%',\n marginBottom: '1em'\n },\n caption: {\n fontWeight: 'bold',\n paddingBottom: '10px',\n lineHeight: '22px',\n letterSpacing: 0,\n },\n resetHeading: {\n lineHeight: '61px',\n fontSize: '50px',\n fontWeight: 'bold',\n textAlign: 'center',\n marginTop: '22px'\n },\n redUnderline: {\n height: '10px',\n backgroundColor: '#E61436',\n margin: '1em',\n width: '70%',\n marginLeft: '15%'\n },\n fontWeight: {\n fontWeight: 500,\n },\n alignInfo: {\n '@media (min-width: 700px)': {\n marginLeft: '15%'\n },\n }\n};\n\nexport function JFForgotPassword() {\n\n const history = useHistory();\n const { notificationDispatch } = useMessagingContext();\n const emailRegex = /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n const requiredErrorMessage = \"This field is required\";\n\n const handleOpen = () => {\n const data = { removeCancelBtn: true, open: true, title: \"Check your email\", message: \"We have emailed you a reset password link. Go to your email and click the reset password link to continue.\", onClose: handleClose }\n notificationDispatch({ type: NotificationStatus.UPDATE, data });\n };\n\n const handleErrorNotification = () => {\n const data = { removeCancelBtn: true, open: true, title: \"Invalid Email\", message: `Not a registered Email. Please check and try again.` }\n notificationDispatch({ type: NotificationStatus.UPDATE, data });\n };\n\n const onSubmit = async (formData: any) => {\n let modified;\n modified = formData;\n try {\n const foundUser = await UserAuthService.sendPasswordReset(modified.email);\n if (foundUser) handleOpen();\n } catch (err) {\n handleErrorNotification();\n }\n };\n\n const handleClose = (val: boolean) => {\n if (val) {\n history.push(`/`);\n }\n };\n\n const { control, handleSubmit, formState: { errors } } = useForm({ mode: \"onSubmit\" });\n\n return (\n <Grid container sx={{ justifyContent: 'center', alignItems: 'center' }}>\n <Box sx={{ ...classes.root, marginTop: '1em', padding: '2em' }}>\n <Grid item xs={12}>\n <Typography variant='h1' sx={classes.resetHeading}>Reset Password</Typography>\n <Box sx={classes.redUnderline} />\n </Grid>\n <Grid item xs={12} sm={8} sx={classes.alignInfo}>\n <Typography sx={classes.fontWeight} paragraph>\n To reset your password, provide your login email address and a new password\n will be emailed to you.\n </Typography>\n </Grid>\n <Grid item sx={classes.alignInfo}>\n <form onSubmit={handleSubmit(onSubmit)}>\n <Grid item xs={12} sm={8}>\n <Typography sx={classes.caption} variant=\"body2\">Email Address*</Typography>\n <Controller\n name=\"email\"\n control={control}\n defaultValue=\"\"\n rules={{ required: requiredErrorMessage, pattern: { value: emailRegex, message: \"Must be a valid email address\" } }}\n render={({ field }) =>\n <TextField sx={classes.textField}\n placeholder=\"Confirm Email\"\n size=\"small\"\n error={!!errors?.email}\n helperText={!!errors?.email && errors?.email?.message}\n variant=\"outlined\"\n InputProps={{ style: { fontSize: 16 } }}\n {...field}\n />\n }\n />\n </Grid>\n <Grid item>\n <Button variant='contained' type=\"submit\" sx={{ marginRight: '1em' }}>\n Reset\n </Button>\n <Link href={'/justfund/signin'} underline=\"none\">\n <Button variant='outlined' type='button'>\n Cancel\n </Button>\n </Link>\n </Grid>\n </form>\n </Grid>\n </Box>\n </Grid>\n )\n}\n\n","import React, { useState } from 'react';\nimport { Box, Tab, Tabs, Typography } from '@mui/material';\n\nexport const Info = () => {\n const [value, setValue] = useState ('funder');\n\n function onChange (e, newValue) {\n setValue (newValue);\n }\n\n return (\n <Box maxWidth={1024} p='10px 4px' mx='auto'>\n <Tabs\n value={value}\n indicatorColor='primary'\n onChange={onChange}\n aria-label='How Justfund works for funders and organizations'\n >\n <Tab value='funder' label='For Funders' id='tabFunder' aria-controls='tabPanelFunder' />\n <Tab value='group' label='For Organizations' id='tabGroup' aria-controls='tabPanelGroup' />\n </Tabs>\n { value === 'funder' && <TabPanelFunder /> }\n { value === 'group' && <TabPanelGroup /> }\n </Box>\n );\n};\n\nconst TabPanelFunder = () => (\n <Box id='tabPanelFunder' role='tabpanel' aria-labelledby='tabFunder' m={1} mt={2}>\n <Typography variant='h4'>How It Works for Funders</Typography>\n <Typography variant='body1' paragraph>\n JustFund allows funders to leverage their decisions and move resources more quickly to the field, while\n facilitating greater trust, transparency, and accountability across networks and between funders and\n organizers. For funders interested in resourcing groups on the front lines, finding innovative projects is\n hard. JustFund connects foundations and donors with critical projects around the country and provides funders\n with personal endorsements from other funding colleagues, as well as direct access to organizations, allowing\n funders to move resources confidently.\n </Typography>\n <Typography variant='h5'>Connect with Other Funders</Typography>\n <Typography variant='body1' paragraph>\n Funders can set their notification settings to receive emails on a daily or “as it comes†basis to follow the\n activity on proposals they are following, funding, or have endorsed. The community activity feature in every\n proposal allows funders to ask questions to each other and the organization. This feature connects funders,\n allowing them to find new colleagues who are interested in resourcing the same focus areas or projects!\n Funders can also create profile pages to promote their work, share information about their fund, identify\n potential collaborative partnerships, and help leverage their support to obtain additional funds for the\n organizations they fund.\n </Typography>\n <Typography variant='h5'>Find New, Exciting Proposals</Typography>\n <Typography variant='body1' paragraph>\n Whether you are an established foundation looking for new, exciting projects that fit in your existing\n portfolios, looking to build a rapid response fund, or you are a family foundation with limited staffing,\n JustFund will help you quickly find groups to resource, filtering down the pool of proposals to your specific\n interests.\n </Typography>\n <Typography variant='h5'>Influence Others to Move Resources</Typography>\n <Typography variant='body1' paragraph>\n JustFund is a great way for funders to share funding decisions with other foundations and donors to help\n facilitate additional resources for groups they are currently funding or have funded in the past. The\n community activity feature allows funders to start a dialogue between an organization and other funders using\n the portal. Funders can learn more about the organization’s work or share background with a funding colleague\n to help them decide to move resources to a particular group.\n </Typography>\n <Typography variant='h5'>Learn from the Expertise of Multiple Collaborative Funds</Typography>\n <Typography variant='body1' paragraph>\n The Emergent Fund, Defending the Dream Fund, Threshold Foundation, Solidaire, and others accept proposals for\n their various funds through the portal. All funders have access to the proposals these funds receive, the\n decisions they make, and the ability to learn from their experience, knowledge, and expertise on various\n issues and strategies.\n </Typography>\n </Box>\n);\n\nconst TabPanelGroup = () => (\n <Box id='tabPanelGroup' role='tabpanel' aria-labelledby='tabGroup' m={1} mt={2}>\n <Typography variant='h4' m='20px 0 10px 0'>How it Works for Organizations</Typography>\n <Typography variant='body1' paragraph>\n JustFund provides a new proposal model for philanthropy that simplifies the application process for\n organizations. Groups can submit a single proposal and interact with a host of funders, providing those\n working on the front lines of social change greater access to networks and resources.\n </Typography>\n <Typography variant='h5'>Respect Organizations and their Leadership’s Time</Typography>\n <Typography variant='body1' paragraph>\n The portal operates using one “Common Proposal†that organizations fill out one time. The Common Proposal\n focuses on the core questions that funders need to make thoughtful funding decisions and respects\n organizations and their leadership’s time, reducing the number of different proposal forms they are expected\n to complete. Organizations can use the same proposal to apply to as many grant opportunities as they wish in\n JustFund.\n </Typography>\n <Typography variant='h5'>Increase Organization’s Visibility and Reach</Typography>\n <Typography variant='body1' paragraph>\n Proposals are not only viewed by the funds to which they apply, but are available to all funders on the\n portal. This saves time for organizations and increases the reach of each submitted proposal to new funders\n and networks. JustFund also extends the “shelf life†of each proposal, further expanding its reach.\n </Typography>\n <Typography variant='h5'>Collect Key Information in Order to Move Resources Quickly</Typography>\n <Typography variant='body1' paragraph>\n Organizations can create profiles that save their key information, allowing funders to quickly issue grants\n when they are ready to do so. Funders can review an organization’s EIN, point of contact, and information\n about where a check should go, including if it should be sent to a fiscal sponsor. This allows for resources\n to be moved quickly, avoiding the typical back and forth.\n </Typography>\n <Typography variant='h5'>Share updates and Connect with Funders</Typography>\n <Typography variant='body1' paragraph>\n Organizations can also use the community activity feature in their proposal to connect with existing or\n prospective funders. They can ask/answer questions, thank funders for their support, and post key updates\n about their proposal, including campaign/project progress, op-eds, and articles. This helps facilitate\n greater transparency and connectivity!\n </Typography>\n </Box>\n);\n","import React from 'react';\nimport { Box, Link } from '@mui/material';\nimport { LinkExternal, LinkInternal } from '../../../shared/components/legacy-ui';\n\nexport const PrivacyNotice = () => (\n <Box maxWidth={1024} mx='auto' pt='20px'>\n <h1>Privacy Policy</h1>\n <p>Last Modified: September 1, 2020</p>\n\n <p> </p>\n\n <p>\n The following sets for the Privacy Policy (“<b>Privacy Policy</b>â€) of JustFund.us, a project of the\n Proteus Fund (“<b>Proteus</b>â€, “<b>we</b>†or “<b>our</b>â€), and is incorporated into and made\n a part of Proteus’ Terms of Use, available at{' '}\n <LinkInternal href='/justfund/terms'>\n https://www.justfund.us/justfund/terms\n </LinkInternal>.\n </p>\n\n <p> </p>\n\n <p>The privacy of your personal information (in some countries\n referred to as “personal data†or “personally identifiable informationâ€) is\n important to us. We respect your privacy and are committed to protecting it\n through our compliance with this Privacy Policy.\n </p>\n\n <p> </p>\n\n <p>To better protect your privacy, we provide you with our\n Privacy Policy so that you will understand our commitment to you and to your\n privacy. This Privacy Policy describes what information we may collect about\n you; how we use your information; how we protect it; and what choices you have\n about how that information is used. At Proteus we want you to feel as\n comfortable as possible visiting the JustFund.us Portal and using our services.\n </p>\n\n <p> </p>\n\n <p>As our Privacy Policy changes in significant ways, we will\n make every effort to notify you of the changes. Minor changes to the policy\n may occur that will not affect our use of individually identifiable or personal\n data. As new features and functionalities are added, we may need to update or\n review the Privacy Policy and reserve the right to do so at any time, without\n prior notice and by posting the revised version. In case we modify the policy\n in a way that your awareness of the changes shall be required, we will provide\n notice at the top of the Privacy Policy for at least 30 days after the new\n effective date so that you can see at a glance that the Policy has changed. In\n other cases we may specifically ask your consent. We will post Privacy Policy\n changes on our website in a timely manner.\n </p>\n\n <p> </p>\n\n <h2>Introduction</h2>\n\n <p> </p>\n\n <p>This policy describes the types of information we may\n collect from you or that you may provide when you visit the\n website <LinkExternal href='https://www.justfund.us'>www.justfund.us</LinkExternal> and\n any applicable subdomains thereof, and through any applications, mobile\n applications, functionalities, content, materials, or other online services\n provided by Proteus (the “<b>Portal</b>â€)\n and our practices for collecting, using, maintaining, protecting and disclosing\n that information.\n </p>\n\n <p> </p>\n\n <p>Specifically, this policy applies to information we collect:</p>\n\n <ul>\n <li>On this Portal.</li>\n <li>In e-mail, text, and other electronic messages between you and this Portal</li>\n </ul>\n\n <p> </p>\n\n <p>It does not apply to information collected by:</p>\n\n <ul>\n <li>Us offline or through any other means, including on any other\n website operated by Proteus or any third party (including our affiliates and\n subsidiaries); or\n </li>\n\n <li>Any third party (including our affiliates and subsidiaries),\n including through any application or content that may link to or be accessible\n from or on the Portal.\n </li>\n </ul>\n\n <p> </p>\n\n <p>Please read this policy carefully to understand our policies\n and practices regarding your information and how we will treat it. If you do\n not agree with our policies and practices, your choice is not to use our\n Portal. By accessing or using this Portal, you agree to this privacy policy.\n This policy may change from time to time. Your continued use of this Portal\n after we make changes is deemed to be acceptance of those changes, so please\n check the policy periodically for updates.\n </p>\n\n <p> </p>\n\n <h2>Children Under the Age of 18</h2>\n\n <p> </p>\n\n <p>Our Portal is not intended for children under 18 years of\n age. No one under age 18 may provide any personal information to or on the\n Portal. We do not knowingly collect personal information from children under\n 18. If you are under 18, do not use or provide any information on this Portal\n or on or through any of its features, register on the Portal, make any\n purchases through the Portal, use any of the interactive or public comment\n features of this Portal or provide any information about yourself to us, including\n your name, address, telephone number, e-mail address or any screen name or user\n name you may use. If we learn we have collected or received personal\n information from a child under 18 without verification of parental consent, we\n will delete that information. If you believe we might have any information\n from or about a child under 18, please contact us\n at <Link href='mailto:info@justfund.us'>info@justfund.us</Link>.\n </p>\n\n <p> </p>\n\n <h2>Information We Collect About You and How We Collect It</h2>\n\n <p> </p>\n\n <p>We collect several types of information from and about users\n of our Portal, including information:\n </p>\n\n <ul>\n <li>By which you or your organization may be personally identified,\n such as name, postal address, email address, telephone number or ANY OTHER\n INFORMATION THE WEBSITE COLLECTS THAT IS DEFINED AS PERSONAL OR PERSONALLY\n IDENTIFIABLE INFORMATION UNDER AN APPLICABLE LAW (“<b>personal information</b>â€);\n </li>\n\n <li>That is about you but individually does not identify you; and/or</li>\n\n <li>About your internet connection, the equipment you use to access our Portal, and usage details.</li>\n </ul>\n\n <p> </p>\n\n <p>We collect this information:</p>\n\n <ul>\n <li>Directly from you when you provide it to us.</li>\n\n <li>Automatically as you navigate through the site. Information\n collected automatically may include usage details, IP addresses and information\n collected through cookies, web beacons and other tracking technologies.\n </li>\n\n <li>From third parties, for example, our business partners.</li>\n </ul>\n\n <p> </p>\n\n <h2>Information You Provide to Us</h2>\n\n <p> </p>\n\n <p>The information we collect on or through our Portal may include:</p>\n\n <ul>\n <li>Information that you provide by filling in forms or uploading\n information or documentation through our Portal.\n </li>\n\n <li>Records and copies of your correspondence (including email addresses), if you contact us.</li>\n\n <li>Your responses to surveys that we might ask you to complete for research purposes.</li>\n\n <li>Details of transactions you carry out through our Portal and of\n the fulfillment of your membership registration. You may be required to\n provide financial information before registering as a member with our Portal.\n </li>\n\n <li>Your search queries on the Portal.</li>\n </ul>\n\n <p> </p>\n\n <p>You also may provide information to be published or\n displayed (hereinafter, “<b>posted</b>â€)\n on publicly viewable areas of the Portal, also known as “<b>Community Activity</b>â€,\n or transmitted to other users of the Portal or third parties\n (collectively, “<b>User Contributions</b>â€). Your User\n Contributions are posted on and transmitted to others at your own risk.\n Although we limit access to certain pages, please be aware that no security\n measures are perfect or impenetrable. Additionally, we cannot control the\n actions of other users of the Portal with whom you may choose to share your\n User Contributions. Therefore, we cannot and do not guarantee that your User\n Contributions will not be viewed by unauthorized persons.\n </p>\n\n <p> </p>\n\n <h2>Information We Collect Through Automatic Data Collection Technologies</h2>\n\n <p> </p>\n\n <p>As you navigate through and interact with our Portal, we may\n use automatic data collection technologies to collect certain information about\n your equipment, browsing actions and patterns, including:\n </p>\n\n <ul>\n <li>Details of your visits to our Portal, including traffic data,\n location data, logs and other communication data and the resources that you\n access and use on the Portal.\n </li>\n\n <li>Information about your computer and internet connection,\n including your IP address, operating system and browser type.\n </li>\n </ul>\n\n <p> </p>\n\n <p>We also may use these technologies to collect information\n about your online activities over time and across third-party websites or other\n online services (behavioral tracking). The information we collect automatically\n is statistical data and does not include personal information, but we may\n maintain it or associate it with personal information we collect in other ways\n or receive from third parties. It helps us to improve our Portal and to\n deliver a better and more personalized service, including by enabling us to:\n </p>\n\n <ul>\n <li>Estimate our audience size and usage patterns.</li>\n\n <li>Store information about your preferences, allowing us to customize our\n Portal according to your individual interests.\n </li>\n\n <li>Speed up your searches.</li>\n\n <li>Recognize you when you return to our Portal.</li>\n </ul>\n\n <p> </p>\n\n <p>The technologies we use for this automatic data collection may include:</p>\n\n <ul>\n <li><b>Cookies (or browser cookies).</b> A cookie is a small file\n placed on the hard drive of your computer. You may refuse to accept browser\n cookies by activating the appropriate setting on your browser. However, if you\n select this setting you may be unable to access certain parts of our Portal.\n Unless you have adjusted your browser setting so that it will refuse cookies,\n our system will issue cookies when you direct your browser to our Portal.\n </li>\n\n <li><b>Flash Cookies.</b> Certain features of our Portal may use\n local stored objects (or Flash cookies) to collect and store information about\n your preferences and navigation to, from and on our Portal. Flash cookies are\n not managed by the same browser settings as are used for browser cookies.\n </li>\n\n <li><b>Web Beacons.</b> Pages of our Portal and our e-mails may\n contain small electronic files known as web beacons (also referred to as clear\n gifs. pixel tags and single-pixel gifs) that permit Proteus, for example, to\n count users who have visited those pages or opened an e-mail and for other\n related website statistics (for example, recording the popularity of certain\n website content and verifying system and server integrity).\n </li>\n </ul>\n\n <p> </p>\n\n <p>We do not collect personal information automatically, but we\n may tie this information to personal information about you that we collect from\n other sources or you provide to us.\n </p>\n\n <p> </p>\n\n <h2>Third-party Use of Cookies and Other Tracking Technologies</h2>\n\n <p> </p>\n\n <p>Some content or applications on the Portal may be served by\n third-parties. These third parties may use cookies alone or in conjunction\n with web beacons or other tracking technologies to collect information about\n you when you use our website. The information they collect may be associated\n with your personal information or they may collect information, including\n personal information, about your online activities over time and across\n different websites and other online services. They may use this information to\n provide you with interest-based (behavioral) or other targeted content.\n </p>\n\n <p> </p>\n\n <p>We do not control these third parties’ tracking technologies\n or how they may be used. If you have any questions about targeted content, you\n should contact the responsible provider directly.\n </p>\n\n <p> </p>\n\n <h2>How We Use Your Information</h2>\n\n <p> </p>\n\n <p>We use information that we collect about you or that you\n provide to us, including any personal information:\n </p>\n\n <ul>\n <li>To present our Portal and its contents to you.</li>\n\n <li>To provide you with information, products or services that you request from us.</li>\n\n <li>To fulfill any other purpose for which you provide it.</li>\n\n <li>To carry out our obligations and enforce our rights arising from\n any contracts entered into between you and us.\n </li>\n\n <li>To notify you about changes to our Portal or any products or\n services we offer or provide though it.\n </li>\n\n <li>To allow you to participate in interactive features on our Portal.</li>\n\n <li>In any other way we may describe when you provide theinformation.</li>\n\n <li>For any other purpose with your consent.</li>\n </ul>\n\n <p> </p>\n\n <p>We may also use your information to contact you about our\n own and third-parties’ services that may be of interest to you. If you do not\n want us to use your information in this way, please check the relevant box\n located on the form on which we collect your data.\n </p>\n\n <p> </p>\n\n <h2>Disclosure of Your Information</h2>\n\n <p> </p>\n\n <p>We may disclose aggregated information about our users, and\n information that does not identify any individual, without restriction. We may\n disclose personal information that we collect or you provide as described in\n this privacy policy:\n </p>\n\n <ul>\n <li>To our subsidiaries and affiliates.</li>\n\n <li>To contractors, service providers and other third parties we use\n to support our business and who are bound by contractual obligations to keep\n personal information confidential and use it only for the purposes for which we\n disclose it to them.\n </li>\n\n <li>To a successor in the event of a merger, divestiture,\n restructuring, reorganization, dissolution or other sale or transfer of some or\n all of Proteus’s assets, whether as a going concern or as part of bankruptcy,\n liquidation or similar proceeding, in which personal information held by\n Proteus about our Portal users is among the assets transferred.\n </li>\n\n <li>To third parties to market their products or services to you if\n you have not opted out of these disclosures. We contractually require these\n third parties to keep personal information confidential and use it only for the\n purposes for which we disclose it to them.\n </li>\n\n <li>To fulfill the purpose for which you provide it. </li>\n\n <li>For any other purpose disclosed by us when you provide the information.</li>\n\n <li>With your consent.</li>\n </ul>\n\n <p> </p>\n\n <p>We may also disclose your personal information:</p>\n\n <ul>\n <li>To comply with any court order, law or legal process, including\n to respond to any government or regulatory request.\n </li>\n\n <li>To enforce or apply our\n Portal <LinkInternal href='/justfund/terms'>Terms of Use</LinkInternal> and\n other agreements, including for member billing and collection purposes.\n </li>\n\n <li>If we believe disclosure is necessary or appropriate to protect\n the rights, property, or safety of Proteus, our members or others.\n </li>\n </ul>\n\n <p> </p>\n\n <h2>Choices About How We Use and Disclose Your Information</h2>\n\n <p> </p>\n\n <p>We strive to provide you with choices regarding the personal\n information you provide to us. We have created mechanisms to provide you with\n the following control over your information:\n </p>\n\n <ul>\n <li><b>Tracking Technologies and Advertising.</b> You can set your\n browser to refuse all or some browser cookies, or to alert you when cookies are\n being sent. To learn how you can manage your Flash cookie settings, visit the\n Flash player settings page on Adobe’s website. If you disable or refuse\n cookies, please note that some parts of this site may then be inaccessible or\n not function properly.\n </li>\n </ul>\n\n <p><b> </b></p>\n\n <p>You may communicate with us via email\n at <Link href='mailto:info@justfund.us'>info@justfund.us</Link> to\n request access to, correct or delete any personal information that you have\n provided to us. We cannot delete your personal information except by also\n deleting your user account. We may not accommodate a request to change\n information if we believe the change would violate any law or legal requirement\n or cause the information to be incorrect.\n </p>\n\n <p> </p>\n\n <p>If you delete your User Contributions from the Portal,\n copies of your User Contributions may remain viewable in cached and archived\n pages, or might have been copied or stored by other Portal users. Proper access\n and use of information provided on the Portal, including User Contributions, is\n governed by our <LinkInternal href='/justfund/terms'>Terms of Use</LinkInternal>.\n </p>\n\n <p> </p>\n\n <h2>Your California Privacy Rights</h2>\n\n <p> </p>\n\n <p>California Civil Code Section § 1798.83 permits users of our\n Portal that are California residents to request certain information regarding\n our disclosure of personal information to third parties for their direct\n marketing purposes. To make such a request, please send an email\n to <Link href='mailto:info@justfund.us'>info@justfund.us</Link>.\n </p>\n\n <p> </p>\n\n <h2>Data Security</h2>\n\n <p> </p>\n\n <p>We have implemented measures designed to secure your\n personal information from accidental loss and from unauthorized access, use,\n alteration and disclosure. All information you provide to us is stored on our\n secure servers behind firewalls. Any payment in connection with a membership\n registration will be encrypted.\n </p>\n\n <p> </p>\n\n <p>The safety and security of your information also depends on\n you. Where we have given you (or where you have chosen) a password for access\n to certain parts of our Portal, you are responsible for keeping this password\n confidential. We ask you not to share your password with anyone. We urge you\n to be careful about giving out information in public areas of the Portal like\n message boards. The information you share in public areas may be viewed by any\n user of the Portal.\n </p>\n\n <p> </p>\n\n <p>Unfortunately, the transmission of information via the\n internet is not completely secure. Although we do our best to protect your\n personal information, we cannot guarantee the security of your personal\n information transmitted to our Portal. Any transmission of personal\n information is at your own risk. We are not responsible for circumvention of\n any privacy settings or security measures contained on the Portal.\n </p>\n\n <p> </p>\n\n <h2>Changes to Our Privacy Policy</h2>\n\n <p>It is our policy to post any changes we make to our privacy\n policy on this page with a notice that the privacy policy has been updated on\n the Portal home page. If we make material changes to how we treat our users’\n personal information, we will notify you by email to the email address\n specified in your account and/or through a notice on the Portal home page. The\n date the privacy policy was last revised is identified at the top of the page.\n You are responsible for ensuring we have an up-to-date active and deliverable\n email address for you, and for periodically visiting our Portal and this\n privacy policy to check for any changes.\n </p>\n\n <p> </p>\n\n <h2>Contact Information</h2>\n\n <p>To ask questions or comment about this privacy policy and\n our privacy practices, please send an email\n to <Link href='mailto:info@justfund.us' tc='cBrand1'>info@justfund.us</Link>.\n </p>\n </Box>\n);\n","import React from 'react';\nimport { Box, Link } from '@mui/material';\nimport { LinkExternal, LinkInternal } from '../../../shared/components/legacy-ui';\n\nexport const TermsOfUse = () => (\n <Box maxWidth={1024} mx='auto' pt='20px'>\n <h1>Terms of Use</h1>\n <p>Last Modified: September 1, 2020</p>\n\n <p> </p>\n\n <h2>1. Acceptance of the Terms of Use</h2>\n\n <p> </p>\n\n <p>Welcome to the website of <b>JustFund.us</b>,\n a project of Proteus Fund (“<b>Proteus</b>â€, “<b>we</b>â€, “<b>our</b>â€\n or “<b>us</b>â€). Proteus Fund,\n Inc. is a Massachusetts not for profit corporation with tax-exempt status under\n Section 501(c)(3) of the United States Internal Revenue Code. The following\n terms and conditions, together with any documents they expressly incorporate by\n reference (collectively, these “<b>Terms of Use</b>â€), govern your access to\n and use of this portal, including any content, functionality and services\n offered on or through www.justfund.us and any applicable subdomains thereof,\n and through any applications, mobile applications, functionalities, content,\n materials, or other online services provided by us (the “<b>Portal</b>â€).\n </p>\n\n <p> </p>\n\n <p>The Portal connects private\n foundations, donors, and collaborative funds (“<b>Funders</b>â€) with critical\n projects around the United States (“<b>Proposals</b>â€) (the “<b>Service</b>â€).\n Proposals may be submitted by: 1) organizations that have been determined be to\n tax-exempt under an applicable provision of the Internal Revenue Code, as\n amended (the “<b>Code</b>â€); 2) organizations that have not been determined be\n to tax-exempt under the Code, but may be fiscally sponsored by an organization\n that has been determined to be tax-exempt under the Code; or 3) projects that\n may otherwise qualify for charitable and/or educational funding. PROTEUS DOES\n NOT VERIFY THE EXEMPT STATUS OR GOOD STANDING OF PROPOSALS AND MAKES NO\n REPRESENTATION AS TO THE DEDUCTIBILITY OF CONTRIBUTIONS IN SUPPORT OF A\n PROPOSAL. FUNDERS MUST COMPLETE THEIR OWN DUE DILIGENCE WHEN DETERMINING\n WHETHER OR NOT TO PROCEED WITH FUNDING A PARTICULAR PROPOSAL. JUSTFUND.US DOES\n NOT TRANSMIT CONTRIBUTIONS BETWEEN FUNDERS AND PROPOSALS, AND FUNDERS MUST MAKE\n THEIR OWN INDEPENDENT ARRANGEMENTS TO FUND PROPOSALS. YOU AGREE THAT PROTEUS\n SHALL NOT BE LIABLE TO YOU OR TO ANY THIRD PARTY FROM THE FAILURE OF A FUNDER\n TO FUND A PROPOSAL FOR ANY REASON OR NO REASON AT ALL.\n </p>\n\n <p> </p>\n\n <p>Please read the Terms of Use\n carefully before you start to use the Portal.{' '}\n <b>By accessing or using the\n Service provided by or through the Portal, whether or not you become a member\n of the Service, you accept and agree to be bound and abide by these Terms of Use and\n our <LinkInternal href='/justfund/privacy'>Privacy Policy</LinkInternal> incorporated\n herein by reference.\n </b>{' '}\n If you do not want to agree to these Terms of Use or\n our Privacy Policy, you must not access or use the Portal.\n </p>\n\n <p> </p>\n\n <p>For purposes of this Agreement,\n the term “<b>Member</b>†means a Funder or Organizational Leader, which\n provides information to this Portal or to participate in the Service in any\n manner, whether such person uses the Service as a free member or as a paid\n Member of the Service.\n </p>\n\n <p> </p>\n\n <p>This Portal is offered and\n available to users who are 18 years of age or older and reside in the United\n States. By using this Portal, you represent and warrant that you are of legal\n age to form a binding contract with Proteus and meet all of the foregoing\n eligibility requirements. If you do not meet all of these requirements, you\n must not access or use the Portal.\n </p>\n\n <p> </p>\n\n <h2>2. Changes to the Terms of Use</h2>\n\n <p> </p>\n\n <p>We may revise and update these\n Terms of Use from time to time in our sole discretion. All changes are\n effective immediately when we post them, and apply to all access to and use of\n the Portal thereafter. Your continued use of the Portal following the posting\n of revised Terms of Use means that you accept and agree to the changes. You are\n encouraged to check this page each time you access this Portal so you are aware\n of any changes, as they are binding on you.\n </p>\n\n <p> </p>\n\n <h2>3. Accessing the Portal and Account Security</h2>\n\n <p> </p>\n\n <p>We reserve the right to withdraw\n or amend this Portal, and any service or material we provide on the Portal, in\n our sole discretion without notice. We will not be liable if for any reason all\n or any part of the Portal is unavailable at any time or for any period. From\n time to time, we may restrict access to some parts of the Portal or the entire\n Portal to users, including registered users.\n </p>\n\n <p> </p>\n\n <p>You are responsible for:</p>\n\n <ul>\n <li>Making all arrangements necessary for you to have access to the Portal.</li>\n <li>\n Ensuring that all persons who access the Portal through your\n internet connection are aware of these Terms of Use and comply with them.\n </li>\n </ul>\n\n <p> </p>\n\n <p>Access to certain areas of the\n Portal is restricted. Proteus reserves the right to restrict access to areas\n of the Portal, or indeed the entire Portal, at its discretion. To access the\n Portal or some of the resources it offers, you may be asked to provide certain\n registration details or other information. It is a condition of your use of\n the Portal that all the information you provide on the Portal is correct,\n current and complete. You agree that all information you provide to register\n with this Portal or otherwise, including but not limited to through the use of\n any interactive features on the Portal, is governed by\n our <LinkInternal href='/justfund/privacy'>Privacy Policy</LinkInternal>,\n and you consent to all actions\n we take with respect to your information consistent with our Privacy Policy.\n </p>\n\n <p> </p>\n\n <p>\n If you choose, or are provided\n with, a username, password, or any other piece of information as part of our\n security procedures, you must treat such information as confidential, and you\n must not disclose it to any other person or entity. You also acknowledge that\n your account is personal to you and agree not to provide any other person with\n access to this Portal or portions of it using your username, password, or other\n security information. You agree to notify us immediately of any unauthorized\n access to or use of your username or password or any other breach of security.\n You also agree to ensure that you exit from your account at the end of each\n session. You should use particular caution when accessing your account from a\n public or shared computer so that others are not able to view or record your\n password or other personal information.\n </p>\n\n <p> </p>\n\n <p>\n We have the right to disable any\n username, password, or other identifier, whether chosen by you or provided by\n us, at any time in our sole discretion for any or no reason, including if, in\n our opinion, you have violated any provision of these Terms of Use.\n </p>\n\n <p> </p>\n\n <h2>4. Available Services</h2>\n\n <p> </p>\n\n <p>\n As a non-paying Member, you may\n access the Portal and use some, but not all, of the features and services\n available within the Portal. The features and services that may be available\n to you may be changed or eliminated at any time in Proteus’ sole and absolute\n discretion. Additional features and services may be made available to you upon\n becoming a paying Member to the Service. If you are not a paying Member, you\n acknowledge and agree that you will not be able to use all the features and\n services available within the Service. A Member profile may remain posted on\n the Portal even if that Member is not actively using the Service, but Proteus\n may remove any Member profile at any time in its sole and absolute discretion,\n with or without cause.\n </p>\n\n <p> </p>\n\n <p>\n So long as you maintain a\n fully-paid membership for the Services, Proteus will make the Services\n available to you pursuant to this Agreement on an as-available basis. The\n Services may be unavailable as a result of planned or emergency downtime and\n any unavailability caused by circumstances beyond Proteus’ reasonable\n control, including, including by way of example and without limitation, an act\n of God, act of government, flood, fire, earthquake, civil unrest, act of\n terror, strike or other labor problem, Internet service provider failure or\n delay or denial of service attack. Proteus reserves the right at any time to\n modify or discontinue the Service or any part thereof, temporarily or\n permanently, with or without notice. You agree that Proteus shall not be\n liable to you or to any third party for any modification, suspension or\n discontinuance of the Service. Proteus reserves the right at any time in its\n sole discretion to block users, including without limitation users from certain\n IP addresses, from accessing the Service.\n </p>\n\n <p> </p>\n\n <h2>5. Membership</h2>\n\n <p> </p>\n\n <p>Proteus may offer services on a\n membership fee basis according to the pricing and payment schedule available\n through the Portal (the “<b>Membership Fees</b>â€). You agree to pay the Membership Fees\n and any other charges incurred in connection with your Account (including any\n and all applicable taxes) at the rates in effect when the charges were\n incurred. If your membership includes access to areas containing premium\n content or services, your access to such areas may be subject to additional\n fees, terms and conditions, which will be separately disclosed in such areas.\n </p>\n\n <p> </p>\n\n <p>Proteus bills all charges\n automatically to your credit card, PayPal account or other payment method that\n Proteus offers and you select. Each membership term shall be for one month,\n which term shall automatically renew unless you terminate your subscription\n prior to the beginning of the end of the then-current term. All payments are\n due in advance of the subscription term. Membership Fees will be billed\n beginning on or about the day of the month in which Proteus activates your\n Account (the “<b>Membership Date</b>â€) and on or about the monthly anniversary\n of each Membership Date thereafter for the term of this Agreement and any\n renewal thereof until you cancel your membership. If you cancel your\n membership, you may use your membership until the end of your then-current\n membership term and your membership will not be renewed after your then-current\n membership term expires; however, you won’t be eligible for a prorated refund\n of any portion of the membership fee paid for the then-current membership\n period.\n </p>\n\n <p> </p>\n\n <p>Unless Proteus otherwise agrees\n in writing, all fees and charges are nonrefundable. Proteus may change the\n fees and charges then in effect, or add new fees or charges, by giving you\n notice in advance. If you want to use a different credit card or payment method\n than one previously provided or there is a change in credit card validity or\n expiration date, or if you believe someone has accessed the Services using your\n user name and password without your authorization, you must contact us\n immediately. If you initiate a chargeback or otherwise reverse a payment made\n with your payment method, Proteus may in its discretion terminate your\n account immediately. If Proteus successfully disputes the reversal, and the\n reversed funds are returned, you are not entitled to a refund or to have your\n account or membership reinstated. You are responsible for any fees or charges\n incurred to access the Services through an Internet access provider or other\n third-party service. By way of example and without limitation, the Services\n may include large video and/or image files. You are responsible for payment of\n any bandwidth, data, or subscription charges you may incur from a service provider\n while utilizing the Services.\n </p>\n\n <p> </p>\n\n <h2>6. Intellectual Property Rights</h2>\n\n <p> </p>\n\n <p>The Portal and its entire\n contents, features, and functionality (including but not limited to all\n information, software, text, displays, images, video and audio, and the design,\n selection and arrangement thereof), are owned by Proteus, its licensors, or\n other providers of such material and are protected by United States and\n international copyright, trademark, patent, trade secret and other intellectual\n property or proprietary rights laws.\n </p>\n\n <p> </p>\n\n <p>These Terms of Use permit you to\n use the Portal for your personal, non-commercial use only. You must not\n reproduce, distribute, modify, create derivative works of, publicly display,\n publicly perform, republish, download, store or transmit the Portal or any of\n the material on our Portal. You must not access or use for any commercial\n purposes any part of the Portal or any services or materials available through\n the Portal.\n </p>\n\n <p> </p>\n\n <p>If you wish to make any use of\n material on the Portal other than that set out in this section, please contact\n us at info@justfund.us.\n </p>\n\n <p> </p>\n\n <p>If you print, copy, modify,\n download, or otherwise use or provide any other person with access to any part\n of the Portal in breach of the Terms of Use, your right to use the Portal will\n cease immediately and you must, at our option, return or destroy any copies of\n the materials you have made. No right, title or interest in or to the Portal\n or any content on the Portal is transferred to you, and all rights not\n expressly granted are reserved by Proteus. Any use of the Portal not\n expressly permitted by these Terms of Use is a breach of these Terms of Use and\n may violate copyright, trademark and other laws.\n </p>\n\n <p> </p>\n\n <h2>7. Trademarks</h2>\n\n <p> </p>\n\n <p>The Justfund.us name, Proteus\n name, the term “Proteusâ€, the Proteus logo and all related names, logos,\n product and service names, designs and slogans are trademarks of Proteus or\n its affiliates or licensors. You must not use such marks without the prior\n written permission of Proteus. All other names, logos, product and service\n names, designs and slogans on this Portal are the trademarks of their\n respective owners.\n </p>\n\n <p> </p>\n\n <h2>8. Prohibited Uses</h2>\n\n <p> </p>\n\n <p>You may use the Portal only for\n lawful purposes and in accordance with these Terms of Use. You agree not to use\n the Portal:\n </p>\n\n <ul>\n <li>\n In any way that violates any applicable federal, state, local or\n international law or regulation (including, without limitation, any laws\n regarding the export of data or software to and from the US or other\n countries).\n </li>\n\n <li>\n For the purpose of exploiting, harming or attempting to exploit\n or harm minors in any way by exposing them to inappropriate content, asking for\n personally identifiable information or otherwise.\n </li>\n\n <li>\n To send, knowingly receive, upload, download, use or re-use any\n material which does not comply with the Content Standards set out in these\n Terms of Use.\n </li>\n\n <li>\n To transmit, or procure the sending of, any advertising or\n promotional material, including any “junk mailâ€, “chain letter†or “spam†or\n any other similar solicitation.\n </li>\n\n <li>\n To impersonate or attempt to impersonate Proteus, a Proteus\n employee, another user or any other person or entity (including, without\n limitation, by using e-mail addresses or screen names associated with any of\n the foregoing).\n </li>\n\n <li>\n To engage in any other conduct that restricts or inhibits\n anyone’s use or enjoyment of the Portal, or which, as determined by us, may\n harm Proteus or users of the Portal or expose them to liability.\n </li>\n </ul>\n\n <p> </p>\n\n <p>Additionally, you agree not to:</p>\n\n <ul>\n <li>\n Use the Portal in any manner that could disable, overburden,\n damage, or impair the site or interfere with any other party’s use of the\n Portal, including their ability to engage in real time activities through the\n Portal.\n </li>\n\n <li>\n Use any robot, spider or other automatic device, process or means\n to access the Portal for any purpose, including monitoring or copying any of\n the material on the Portal.\n </li>\n\n <li>\n Use any manual process to monitor or copy any of the material on\n the Portal or for any other unauthorized purpose without our prior written\n consent.\n </li>\n\n <li>\n Use any device, software or routine that interferes with the\n proper working of the Portal.\n </li>\n\n <li>\n Introduce any viruses, trojan horses, worms, logic bombs or other\n material which is malicious or technologically harmful.\n </li>\n\n <li>\n Attempt to gain unauthorized access to, interfere with, damage or\n disrupt any parts of the Portal, the server on which the Portal is stored, or\n any server, computer or database connected to the Portal.\n </li>\n\n <li>\n Attack the Portal via a denial-of-service attack or a distributed\n denial-of-service attack.\n </li>\n\n <li>\n Otherwise attempt to interfere with the proper working of the\n Portal.\n </li>\n </ul>\n\n <p> </p>\n\n <h2>9. Interactions With Other Members / User Contributions</h2>\n\n <p> </p>\n\n <p>PROTEUS MAKES NO\n REPRESENTATIONS OR WARRANTIES AS TO THE CONDUCT OF MEMBERS. YOU ARE SOLELY\n RESPONSIBLE FOR YOUR INTERACTIONS WITH OTHER MEMBERS. YOU UNDERSTAND THAT\n PROTEUS CURRENTLY DOES NOT (I) CONDUCT CRIMINAL BACKGROUND CHECKS OR\n SCREENINGS OF ITS MEMBERS, (II) INQUIRE INTO THE BACKGROUNDS OF ITS MEMBERS OR\n (III) REGULARLY ATTEMPT TO VERIFY THE STATEMENTS OF ITS MEMBERS, INCLUDING\n WITHOUT LIMITATION ANY OF THE REPRESENTATIONS AND WARRANTIES SET FORTH IN THIS\n AGREEMENT. PROTEUS RESERVES THE RIGHT TO CONDUCT SCREENINGS AT ANY TIME AND\n USING AVAILABLE PUBLIC RECORDS. PROTEUS MAY TERMINATE THE MEMBERSHIP OF ANY\n MEMBER IF IT BELIEVES IN ITS SOLE DISCRETION THAT SUCH MEMBER HAS OR MAY\n VIOLATE ANY OF THE TERMS AND/OR CONDITIONS OF THIS AGREEMENT.\n </p>\n\n <p> </p>\n\n <p>PROTEUS IS NOT RESPONSIBLE FOR\n THE CONDUCT OF ANY MEMBER. IN NO EVENT SHALL PROTEUS, ITS OFFICERS,\n DIRECTORS, EMPLOYEES, OR THEIR RESPECTIVE AFFILIATES BE LIABLE (DIRECTLY OR\n INDIRECTLY) FOR ANY LOSSES OR DAMAGES WHATSOEVER, WHETHER DIRECT, INDIRECT,\n GENERAL, SPECIAL, COMPENSATORY, CONSEQUENTIAL, AND/OR INCIDENTAL, ARISING OUT\n OF OR RELATING TO THE CONDUCT OF YOU OR ANYONE ELSE IN CONNECTION WITH THE USE\n OF THE WEBSITE OR SERVICE.\n </p>\n\n <p> </p>\n\n <p>The Portal may contain message\n boards, chat rooms, personal web pages, or profiles, forums, bulletin boards\n and other interactive features (collectively, “<b>Interactive Services</b>â€)\n that allow users to post, submit, publish, display or transmit to other users\n or other persons (hereinafter, “<b>post</b>â€) content or materials (collectively,\n “<b>User Contributions</b>â€) on or through the Portal.\n </p>\n\n <p> </p>\n\n <p>All User Contributions must comply with the Content Standards\n set out in these Terms of Use.\n </p>\n\n <p> </p>\n\n <p>Any User Contribution you post to\n the site will be considered non-confidential and non-proprietary. By providing\n any User Contribution on the Portal, you grant us and our affiliates and\n service providers, and each of their and our respective licensees, successors\n and assigns the limited right to use, reproduce, modify, perform, display,\n distribute any such material.\n </p>\n\n <p> </p>\n\n <p>You represent and warrant that: </p>\n\n <ul>\n <li>\n You own or control all rights in and to the User Contributions\n and have the right to grant the license granted above to us and our affiliates\n and service providers, and each of their and our respective licensees, successors\n and assigns.\n </li>\n\n <li>\n All of your User Contributions do and will comply with these\n Terms of Use.\n </li>\n\n <li>\n You understand and acknowledge that you are responsible for any\n User Contributions you submit or contribute, and you, not Proteus, have full\n responsibility for such content, including its legality, reliability, accuracy\n and appropriateness.\n </li>\n\n <li>\n We are not responsible, or liable to any third party, for the\n content or accuracy of any User Contributions posted by you or any other user\n of the Portal.\n </li>\n </ul>\n\n <p> </p>\n\n <h2>10. Monitoring and Enforcement; Termination</h2>\n\n <p> </p>\n\n <p>We have the right to:</p>\n\n <ul>\n <li>\n Remove or refuse to post any User Contributions for any or no\n reason in our sole discretion.\n </li>\n\n <li>\n Take any action with respect to any User Contribution that we\n deem necessary or appropriate in our sole discretion, including if we believe\n that such User Contribution violates the Terms of Use, including the Content\n Standards, infringes any intellectual property right or other right of any\n person or entity, threatens the personal safety of users of the Portal or the\n public or could create liability for Proteus.\n </li>\n\n <li>\n Disclose your identity or other information about you to any\n third party who claims that material posted by you violates their rights,\n including their intellectual property rights or their right to privacy.\n </li>\n\n <li>\n Take appropriate legal action, including without limitation,\n referral to law enforcement, for any illegal or unauthorized use of the Portal.\n </li>\n\n <li>\n Terminate or suspend your access to all or part of the Portal for\n any or no reason, including without limitation, any violation of these Terms of\n Use.\n </li>\n </ul>\n\n <p> </p>\n\n <p>Without limiting the foregoing,\n we have the right to fully cooperate with any law enforcement authorities or\n court order requesting or directing us to disclose the identity or other\n information of anyone posting any materials on or through the Portal. YOU\n WAIVE AND HOLD HARMLESS PROTEUS AND ITS AFFILIATES, LICENSEES, AND SERVICE\n PROVIDERS FROM ANY CLAIMS RESULTING FROM ANY ACTION TAKEN BY ANY OF THE\n FOREGOING PARTIES DURING OR AS A RESULT OF ITS INVESTIGATIONS AND FROM ANY\n ACTIONS TAKEN AS A CONSEQUENCE OF INVESTIGATIONS BY EITHER SUCH PARTIES OR LAW\n ENFORCEMENT AUTHORITIES.\n </p>\n\n <p> </p>\n\n <p>However, we do not undertake to\n review material before it is posted on the Portal, and cannot ensure prompt\n removal of objectionable material after it has been posted. Accordingly, we\n assume no liability for any action or inaction regarding transmissions,\n communications, or content provided by any user or third party. We have no\n liability or responsibility to anyone for performance or nonperformance of the\n activities described in this section.\n </p>\n\n <p> </p>\n\n <h2>11. Content Standards</h2>\n\n <p> </p>\n\n <p>These content standards apply to\n any and all User Contributions and use of Interactive Services. User\n Contributions must in their entirety comply with all applicable federal, state,\n local and international laws and regulations. Without limiting the foregoing,\n User Contributions must not:\n </p>\n\n <ul>\n <li>\n Contain any material which is defamatory, obscene, indecent,\n abusive, offensive, harassing, violent, hateful, inflammatory, or otherwise\n objectionable.\n </li>\n\n <li>\n Promote sexually explicit material, violence, or discrimination\n based on race, sex, religion, nationality, disability, sexual orientation, or\n age.\n </li>\n\n <li>\n Infringe any patent, trademark, trade secret, copyright or other\n intellectual property, or other rights of any other person.\n </li>\n\n <li>\n Violate the legal rights (including the rights of publicity and\n privacy) of others or contain any material that could give rise to any civil or\n criminal liability under applicable laws or regulations or that otherwise may\n be in conflict with these Terms of Use and\n our <LinkInternal href='/justfund/privacy'>Privacy Policy</LinkInternal>.\n </li>\n\n <li>\n Be likely to deceive any person.\n </li>\n\n <li>\n Promote any illegal activity, or advocate, promote, or assist any\n unlawful act.\n </li>\n\n <li>\n Cause annoyance, inconvenience or needless anxiety or be likely\n to upset, embarrass, alarm or annoy any other person.\n </li>\n\n <li>\n Impersonate any person, or misrepresent your identity or\n affiliation with any person or organization.\n </li>\n\n <li>\n Involve commercial activities or sales, such as contests,\n sweepstakes, and other sales promotions, barter or advertising.\n </li>\n\n <li>\n Give the impression that they emanate from or are endorsed by us\n or any other person or entity, if this is not the case.\n </li>\n </ul>\n\n <p> </p>\n\n <p><b>12. Copyright Infringement</b></p>\n\n <p> </p>\n\n <p>\n Proteus respects the\n intellectual property rights of others and we expect our users to do the same.\n We will respond to notices of alleged copyright infringement if they comply\n with the Digital Millennium Copyright Act of 1998, the text of which may be\n found at the U.S. Copyright Office website at{' '}\n <LinkExternal href='http://www.copyright.gov/legislation/dmca.pdf'>\n http://www.copyright.gov/legislation/dmca.pdf\n </LinkExternal>.\n Claims of copyright infringement in connection with our service and/or the\n Proteus website must be reported to our Designated Copyright Agent identified\n in the sample notice below.\n </p>\n\n <p> </p>\n\n <p>Copyright owners, those\n authorized to act on behalf of one, or those authorized to act under any exclusive\n right under copyright, may report alleged copyright infringements that occur on\n or through our service or website by completing the following DMCA Notice of\n Alleged Infringement and by delivering it to Proteus’ Designated Copyright\n Agent. Before submitting a Notice, consider whether fair use or a similar\n exception applies. Upon receipt, Proteus will take action, in its sole\n discretion and as it deems appropriate, including removal of allegedly\n infringing content from our service and/or website. We reserve the right to\n delete or disable content alleged to be infringing and to terminate accounts of\n repeat infringers.\n </p>\n\n <p> </p>\n\n <p>DMCA Notice of Alleged Infringement (“Noticeâ€)</p>\n\n <ul>\n <li>\n <b>Description of the Work</b> – Please identify the copyrighted\n work that you claim has been infringed, or, if multiple copyrighted works are\n covered by this Notice, you may provide a representative list of such works in\n a single Notice.\n </li>\n\n <li>\n <b>Specific URL </b>– Please identify the material or link that\n you claim is infringing (or the subject of the infringing activity) and to\n which access should be disabled, including information reasonably sufficient\n for us to locate the material, such as a URL or link or the exact location\n where the allegedly infringing material may be found.\n </li>\n\n <li>\n <b>Your Contact Information</b> – Please provide information\n reasonably sufficient for us to contact you, such as an address, telephone\n number, and if available, an email address.\n </li>\n\n <li>\n <b>Include and Agree to the Following Statements </b>– You must\n include both of the following statements in the body of the Notice: “I hereby\n state that I have a good faith belief that the disputed use of the copyrighted\n material is not authorized by the copyright owner, its agent, or the law (e.g.,\n as a fair use). I hereby state that the information contained in this Notice\n is accurate and, under penalty of perjury, that I am the owner, or authorized\n to act on behalf of the owner, of the copyright or of an exclusive right under\n the copyright that is allegedly infringed.â€\n </li>\n\n <li>\n <b>Your Signature</b> – Please provide the full legal name and a\n physical or electronic signature of the individual authorized to act on behalf\n of the owner of an exclusive right that has been infringed.\n </li>\n </ul>\n\n <p> </p>\n\n <p>Deliver this Notice with each of\n the above items to our Designated Copyright Agent:\n </p>\n\n <p> </p>\n\n <p>Copyright Agent</p>\n\n <p>\n Bernstein Shur<br />\n P.O. Box 9729<br />\n Portland, ME 04104<br />\n Attn: Proteus Fund\n </p>\n\n <p>207-774-1200</p>\n\n <p>dmcanotice@bernsteinshur.com</p>\n\n <p> </p>\n\n <h2>13. Reliance on Information Posted</h2>\n\n <p> </p>\n\n <p>The information presented on or\n through the Portal is made available solely for general information purposes.\n We do not warrant the accuracy, completeness, or usefulness of this\n information. Any reliance you place on such information is strictly at your\n own risk. We disclaim all liability and responsibility arising from any\n reliance placed on such materials by you or any other visitor to the Portal, or\n by anyone who may be informed of any of its contents.\n </p>\n\n <p> </p>\n\n <p>This Portal may include content\n provided by third parties, including materials provided by other users,\n bloggers and third-party licensors, syndicators, aggregators and/or reporting\n services. All statements and/or opinions expressed in these materials, and all\n articles and responses to questions and other content, other than the content\n provided by Proteus, are solely the opinions and the responsibility of the\n person or entity providing those materials. These materials do not necessarily\n reflect the opinion of Proteus. We are not responsible, or liable to you or\n any third party, for the content or accuracy of any materials provided by any\n third parties.\n </p>\n\n <p> </p>\n\n <h2>14. Changes to the Portal</h2>\n\n <p> </p>\n\n <p>We may update the content on this\n Portal from time to time, but its content is not necessarily complete or\n up-to-date. Any of the material on the Portal may be out of date at any given\n time, and we are under no obligation to update such material.\n </p>\n\n <p> </p>\n\n <h2>15. Information About You and Your Visits to the Portal</h2>\n\n <p> </p>\n\n <p>\n All information we collect on this Portal is subject to\n our <LinkInternal href='/justfund/privacy'>Privacy Policy</LinkInternal>.\n By using the Portal, you consent to all actions taken by us with respect to\n your information in compliance with the Privacy Policy.\n </p>\n\n <p> </p>\n\n <h2>16. Linking to the Portal and Social Media Features</h2>\n\n <p> </p>\n\n <p>You may link to our homepage,\n provided you do so in a way that is fair and legal and does not damage our\n reputation or take advantage of it, but you must not establish a link in such a\n way as to suggest any form of association, approval or endorsement on our part\n without our express written consent.\n </p>\n\n <p> </p>\n\n <p>This Portal may provide certain social media features that enable you to:</p>\n\n <ul>\n <li>\n Link from your own or certain third-party websites to certain\n content on this Portal.\n </li>\n\n <li>\n Send emails or other communications with certain content, or\n links to certain content, on this Portal.\n </li>\n\n <li>\n Cause limited portions of content on this Portal to be displayed\n or appear to be displayed on your own or certain third-party websites.\n </li>\n\n <li>\n You may use these features solely as they are provided by us, and\n solely with respect to the content they are displayed with, and otherwise in\n accordance with any additional terms and conditions we provide with respect to\n such features.\n </li>\n </ul>\n\n <p> </p>\n\n <p>Subject to the foregoing, you must not:</p>\n\n <ul>\n <li>\n Establish a link from any website that is not owned by you.\n </li>\n\n <li>\n Cause the Portal or portions of it to be displayed, or appear to\n be displayed by, for example, framing, deep linking or in-line linking, on any\n other site.\n </li>\n\n <li>\n Link to any part of the Portal other than the homepage.\n </li>\n\n <li>\n Otherwise take any action with respect to the materials on this\n Portal that is inconsistent with any other provision of these Terms of Use.\n </li>\n\n <li>\n The website from which you are linking, or on which you make\n certain content accessible, must comply in all respects with the Content\n Standards set out in these Terms of Use.\n </li>\n </ul>\n\n <p> </p>\n\n <p>You agree to cooperate with us in\n causing any unauthorized framing or linking immediately to cease. We reserve\n the right to withdraw linking permission without notice. We may disable all or\n any social media features and any links at any time without notice in our\n discretion.\n </p>\n\n <p> </p>\n\n <h2>17. Links from the Portal</h2>\n\n <p> </p>\n\n <p>If the Portal contains links to\n other sites and resources provided by third parties, these links are provided\n for your convenience only. We have no control over the contents of those sites\n or resources, and accept no responsibility for them or for any loss or damage\n that may arise from your use of them. If you decide to access any of the third\n party websites linked to this Portal, you do so entirely at your own risk and subject\n to the terms and conditions of use for such websites.\n </p>\n\n <p> </p>\n\n <h2>18. Geographic Restrictions</h2>\n\n <p> </p>\n\n <p>The owner of the Portal is based\n in the Commonwealth of Massachusetts in the United States. We provide this\n Portal for use only by persons located in the United States. We make no claims\n that the Portal or any of its content is accessible or appropriate outside of\n the United States. Access to the Portal may not be legal by certain persons or\n in certain countries. If you access the Portal from outside the United States,\n you do so on your own initiative and are responsible for compliance with local\n laws.\n </p>\n\n <p> </p>\n\n <h2>19. Disclaimer of Warranties</h2>\n\n <p> </p>\n\n <p>You understand that we cannot and\n do not guarantee or warrant that files available for downloading from the\n internet or the Portal will be free of viruses or other destructive code. You\n are responsible for implementing sufficient procedures and checkpoints to\n satisfy your particular requirements for anti-virus protection and accuracy of\n data input and output, and for maintaining a means external to our site for any\n reconstruction of any lost data. WE WILL NOT BE LIABLE FOR ANY LOSS OR DAMAGE\n CAUSED BY A DISTRIBUTED DENIAL-OF-SERVICE ATTACK, VIRUSES, OR OTHER\n TECHNOLOGICALLY HARMFUL MATERIAL THAT MAY INFECT YOUR COMPUTER EQUIPMENT,\n COMPUTER PROGRAMS, DATA OR OTHER PROPRIETARY MATERIAL DUE TO YOUR USE OF THE\n WEBSITE OR ANY SERVICES OR ITEMS OBTAINED THROUGH THE WEBSITE OR TO YOUR\n DOWNLOADING OF ANY MATERIAL POSTED ON IT, OR ON ANY WEBSITE LINKED TO IT.\n </p>\n\n <p> </p>\n\n <p>YOUR USE OF THE WEBSITE, ITS\n CONTENT AND ANY SERVICES OR ITEMS OBTAINED THROUGH THE WEBSITE IS AT YOUR OWN\n RISK. THE WEBSITE, ITS CONTENT AND ANY SERVICES OR ITEMS OBTAINED THROUGH THE\n WEBSITE ARE PROVIDED ON AN “AS IS†AND “AS AVAILABLE†BASIS, WITHOUT ANY\n WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED. NEITHER PROTEUS NOR ANY\n PERSON ASSOCIATED WITH PROTEUS MAKES ANY WARRANTY OR REPRESENTATION WITH RESPECT\n TO THE COMPLETENESS, SECURITY, RELIABILITY, QUALITY, ACCURACY OR AVAILABILITY\n OF THE WEBSITE. WITHOUT LIMITING THE FOREGOING, NEITHER PROTEUS NOR ANYONE\n ASSOCIATED WITH PROTEUS REPRESENTS OR WARRANTS THAT THE WEBSITE, ITS CONTENT\n OR ANY SERVICES OR ITEMS OBTAINED THROUGH THE WEBSITE WILL BE ACCURATE,\n RELIABLE, ERROR-FREE OR UNINTERRUPTED, THAT DEFECTS WILL BE CORRECTED, THAT OUR\n SITE OR THE SERVER THAT MAKES IT AVAILABLE ARE FREE OF VIRUSES OR OTHER HARMFUL\n COMPONENTS OR THAT THE WEBSITE OR ANY SERVICES OR ITEMS OBTAINED THROUGH THE\n WEBSITE WILL OTHERWISE MEET YOUR NEEDS OR EXPECTATIONS.\n </p>\n\n <p> </p>\n\n <p>PROTEUS HEREBY DISCLAIMS ALL\n WARRANTIES OF ANY KIND, WHETHER EXPRESS OR IMPLIED, STATUTORY OR OTHERWISE,\n INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY,\n NON-INFRINGEMENT AND FITNESS FOR PARTICULAR PURPOSE. THE FOREGOING DOES NOT\n AFFECT ANY WARRANTIES WHICH CANNOT BE EXCLUDED OR LIMITED UNDER APPLICABLE LAW.\n </p>\n\n <p> </p>\n\n <h2>20. Limitation on Liability</h2>\n\n <p> </p>\n\n <p>IN NO EVENT WILL PROTEUS, ITS\n AFFILIATES, OR THEIR LICENSORS, SERVICE PROVIDERS, EMPLOYEES, AGENTS, OFFICERS\n OR DIRECTORS BE LIABLE FOR DAMAGES OF ANY KIND, UNDER ANY LEGAL THEORY, ARISING\n OUT OF OR IN CONNECTION WITH YOUR USE, OR INABILITY TO USE, THE WEBSITE, ANY\n WEBSITES LINKED TO IT, ANY CONTENT ON THE WEBSITE OR SUCH OTHER WEBSITES OR ANY\n SERVICES OR ITEMS OBTAINED THROUGH THE WEBSITE OR SUCH OTHER WEBSITES,\n INCLUDING ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, CONSEQUENTIAL OR PUNITIVE\n DAMAGES, INCLUDING BUT NOT LIMITED TO, PERSONAL INJURY, PAIN AND SUFFERING,\n EMOTIONAL DISTRESS, LOSS OF REVENUE, LOSS OF PROFITS, LOSS OF BUSINESS OR\n ANTICIPATED SAVINGS, LOSS OF USE, LOSS OF GOODWILL, LOSS OF DATA, AND WHETHER\n CAUSED BY TORT (INCLUDING NEGLIGENCE), BREACH OF CONTRACT OR OTHERWISE, EVEN IF\n FORESEEABLE.\n </p>\n\n <p> </p>\n\n <p>THE FOREGOING DOES NOT AFFECT ANY\n LIABILITY WHICH CANNOT BE EXCLUDED OR LIMITED UNDER APPLICABLE LAW.\n </p>\n\n <p> </p>\n\n <h2>21. Indemnification</h2>\n\n <p> </p>\n\n <p>You agree to defend, indemnify\n and hold harmless Proteus, its affiliates, licensors and service providers,\n and its and their respective officers, directors, employees, contractors,\n agents, licensors, suppliers, successors and assigns from and against any\n claims, liabilities, damages, judgments, awards, losses, costs, expenses or\n fees (including reasonable attorneys’ fees) arising out of or relating to your\n violation of these Terms of Use or your use of the Portal, including, but not\n limited to, your User Contributions, any use of the Portal’s content, services\n and products other than as expressly authorized in these Terms of Use or your use\n of any information obtained from the Portal.\n </p>\n\n <p> </p>\n\n <h2>22. Governing Law and Jurisdiction</h2>\n\n <p> </p>\n\n <p>All matters relating to the\n Portal and these Terms of Use and any dispute or claim arising therefrom or\n related thereto (in each case, including non-contractual disputes or claims), shall\n be governed by and construed in accordance with the internal laws of the Commonwealth\n of Massachusetts without giving effect to any choice or conflict of law\n provision or rule (whether of the Commonwealth of Massachusetts or any other\n jurisdiction).\n </p>\n\n <p> </p>\n\n <p>Any legal suit, action or\n proceeding arising out of, or related to, these Terms of Use or the Portal\n shall be instituted exclusively in the federal courts of the United States or\n the courts of the Commonwealth of Massachusetts although we retain the right to\n bring any suit, action or proceeding against you for breach of these Terms of\n Use in your country of residence or any other relevant country. You waive any\n and all objections to the exercise of jurisdiction over you by such courts and\n to venue in such courts.\n </p>\n\n <p> </p>\n\n <h2>23. Limitation on Time to File Claims</h2>\n\n <p> </p>\n\n <p>ANY CAUSE OF ACTION OR CLAIM YOU\n MAY HAVE ARISING OUT OF OR RELATING TO THESE TERMS OF USE OR THE WEBSITE MUST\n BE COMMENCED WITHIN ONE (1) YEAR AFTER THE CAUSE OF ACTION ACCRUES, OTHERWISE,\n SUCH CAUSE OF ACTION OR CLAIM IS PERMANENTLY BARRED.\n </p>\n\n <p> </p>\n\n <h2>24. Waiver and Severability</h2>\n\n <p> </p>\n\n <p>No waiver by Proteus of any\n term or condition set forth in these Terms of Use shall be deemed a further or\n continuing waiver of such term or condition or a waiver of any other term or\n condition, and any failure of Proteus to assert a right or provision under\n these Terms of Use shall not constitute a waiver of such right or provision.\n </p>\n\n <p> </p>\n\n <p>If any provision of these Terms\n of Use is held by a court or other tribunal of competent jurisdiction to be\n invalid, illegal or unenforceable for any reason, such provision shall be\n eliminated or limited to the minimum extent such that the remaining provisions\n of the Terms of Use will continue in full force and effect.\n </p>\n\n <p> </p>\n\n <h2>25. Entire Agreement</h2>\n\n <p> </p>\n\n <p>The Terms of Use and our Privacy\n Policy constitute the sole and entire agreement between you and Proteus with\n respect to the Portal and supersede all prior and contemporaneous\n understandings, agreements, representations and warranties, both written and\n oral, with respect to the Portal.\n </p>\n\n <p> </p>\n\n <h2>26. Your Comments and Concerns</h2>\n\n <p>This website is operated by Proteus Fund.</p>\n\n <p> </p>\n\n <p>All notices of copyright\n infringement claims should be sent to the copyright agent as designated herein.\n </p>\n\n <p> </p>\n\n <p>If you have any other feedback,\n comments, requests for technical support or other communications relating to\n the Portal, please contact us\n at <Link href='mailto:info@justfund.us'>info@justfund.us</Link>.\n </p>\n\n <p><b> </b></p>\n\n <p>Thank you for visiting the Portal.</p>\n </Box>\n);\n","import React, { Fragment } from 'react';\nimport { AppBar, Box, Button, Toolbar } from '@mui/material';\nimport { useHistory } from 'react-router-dom';\n\nconst location = window.location;\n\nconst StyledAppBar = {\n minHeight: '52px',\n backgroundColor: '#ffffff !important',\n webkitBoxShadow: '0px 1px 1px #eeeeee',\n mozBoxShadow: '0px 1px 1px #eeeeee',\n boxShadow: '0px 1px 1px #eeeeee',\n 'html.translated-ltr&': {\n paddingTop: '40px'\n }\n};\n\nconst StyledToolbar = {\n height: '52px',\n width: '100%',\n maxWidth: '1024px',\n margin: '0 auto'\n};\n\nexport interface NavProps {\n showSignIn?: boolean;\n}\nexport const Nav = ({ showSignIn }: NavProps = { showSignIn: true }) => {\n const history = useHistory();\n\n return (\n <Fragment>\n <AppBar sx={StyledAppBar} position=\"fixed\">\n <Toolbar sx={StyledToolbar}>\n <img\n src=\"/images/justfund.svg\"\n height=\"36px\"\n width=\"auto\"\n alt=\"JustFund logo\"\n style={{ cursor: 'pointer' }}\n onClick={() => location.replace('https://justfund.us')}\n />\n <div style={{ flex: '1 1 auto' }} />\n {showSignIn && (\n <Box sx={{ align: 'right' }}>\n <Button\n onClick={() => {\n history.push('/justfund/signin');\n }}\n variant=\"text\"\n color=\"primary\"\n >\n SIGN IN\n </Button>\n </Box>\n )}\n </Toolbar>\n </AppBar>\n <Toolbar />\n </Fragment>\n );\n};\n","import React, { useState } from 'react';\nimport { Button, Box, Typography } from '@mui/material';\nimport { Redirect, useHistory, useParams } from 'react-router';\nimport { useCancellableEffect } from '../../../shared/hooks/useCancellableEffect';\nimport { PublicAPIService } from '../../../shared/services/api-service/public-api.service';\nimport { LoadingPage } from '../../../shared/components/LoadingPage';\nimport { useEffect } from 'react';\nimport { Loading } from '../../../shared/components/legacy-ui/Loading';\n\nexport const DynamicRedirect = () => {\n const { slug } = useParams<{ slug: string }>();\n\n // have this set up on the API to return a funders name / website if JF decides they want to open this up to other funders and show a profile,\n // or a funder / grantee users website etc. \n // useCancellableEffect(signal => {\n // PublicAPIService.funderSlug(slug, { signal }).then(response => {\n // return response.website ? window.location.href = response.website : null;\n // }).catch(err => err.message !== 'cancelled' && err);\n // }, [])\n\n useEffect(() => {\n if (slug.toLowerCase() === 'houseus') window.location.replace('http://www.houseus.org/');\n return;\n }, [slug])\n\n return (\n <Loading />\n )\n}","import { Box, Button, Typography, styled } from '@mui/material';\n\nexport const Root = styled(Box)(() => ({\n border: '1px solid #E9E9EA',\n backgroundColor: '#fff',\n borderRadius: '8px',\n padding: '2rem',\n maxWidth: '900px',\n textAlign: 'left',\n margin: 'auto'\n}));\n\nexport const EmailText = styled(Typography)(() => ({\n fontSize: '18px',\n fontWeight: '600',\n marginBottom: '0.8rem'\n}));\n\nexport const MessageText = styled(Typography)(() => ({\n fontSize: '16px',\n marginBottom: '0.8rem'\n}));\n\nexport const UnsubscribeText = styled(Typography)(() => ({\n fontSize: '24px',\n fontWeight: '600',\n marginBottom: '0.8rem'\n}));\n\nexport const StyledButton = styled(Button)(() => ({\n borderRadius: '120px',\n border: '1px solid #616161',\n color: '#616161',\n background: '#FFF',\n textTransform: 'none',\n fontSize: '14px',\n margin: '0',\n marginTop: '0.7rem'\n}));\n","import { Box } from '@mui/material';\nimport { useLocation } from 'react-router-dom';\nimport { useEffect } from 'react';\n\nimport { errorToast } from '../../../shared/util/toast';\nimport { useDialog } from '../../../shared/context/GeneralDialog.context';\nimport { UserAuthService } from '../../../shared/services/api-service/user-auth-api.service';\n\nimport { Root, EmailText, MessageText, UnsubscribeText, StyledButton } from './UnsubscribeEmailPage.styled';\n\nconst UnsubscribeEmailPage = () => {\n const location = useLocation();\n const query = new URLSearchParams(location.search);\n const token = query.get('token');\n const email = query.get('email');\n const userId = query.get('userId');\n\n const { showLoading, closeDialog } = useDialog();\n\n useEffect(() => {\n if (token) {\n const unsubscribe = async () => {\n showLoading('Unsubscribing...');\n try {\n await UserAuthService.unSubscribeEmailFrequencyByToken(token);\n } catch (err) {\n errorToast('Failed to unsubscribe. Please contact administrator.');\n } finally {\n closeDialog();\n }\n };\n\n unsubscribe();\n }\n }, [token]);\n\n const handleManagePreference = () => {\n window.location.href = `/f/userprofile/${userId}?tab=settings`;\n };\n\n return (\n <Box sx={{ marginTop: '2rem' }}>\n <Root>\n <>\n <EmailText>{email}</EmailText>\n <UnsubscribeText>\n You’ve unsubscribed. You will no longer receive updates about\n funding needs in your focus areas.\n </UnsubscribeText>\n <MessageText>\n You can resubscribe if this was an error.\n </MessageText>\n <StyledButton\n variant=\"outlined\"\n onClick={handleManagePreference}\n >\n Manage preference\n </StyledButton>\n </>\n </Root>\n </Box>\n );\n};\n\nexport default UnsubscribeEmailPage;\n","import { Route, Switch, useLocation } from 'react-router-dom';\nimport { Box, CssBaseline } from '@mui/material';\nimport { ThemeProvider, StyledEngineProvider } from '@mui/material/styles';\nimport { ScrollToTop } from '../../../shared/util/scrollToTop';\nimport { JFForgotPassword, RequiredResetPassword, SignIn } from '../signin';\nimport { NewPassword } from '../signin/NewPasswordForm';\nimport { Info } from '../info';\nimport { PrivacyNotice, TermsOfUse } from '../notices';\nimport { Nav } from './Nav';\nimport { Footer } from '../../../shared/components/Footer';\nimport { jfTheme } from '../../../styles/jf.theme';\nimport { DynamicRedirect } from '../redirect/DynamicRedirect';\nimport UnsubscribeEmailPage from '../unsubscribe-email/UnsubscribeEmailPage';\nimport { DialogProvider } from '../../../shared/context/GeneralDialog.context';\n\n\n\nconst theme = jfTheme;\n\nexport const App = () => {\n const location = useLocation();\n\n const routesWithoutFooterAndSignIn = ['/justfund/unsubscribe-email'];\n\n const shouldShowFooter = !routesWithoutFooterAndSignIn.includes(location.pathname);\n\n return (\n <StyledEngineProvider injectFirst>\n \n <DialogProvider>\n <ThemeProvider theme={theme}>\n <ScrollToTop />\n <CssBaseline />\n <Box display=\"flex\" flexDirection=\"column\" minHeight=\"100vh\">\n <Nav showSignIn={false} />\n <Box flexGrow={1} flexShrink={1}>\n <Switch>\n <Route exact path=\"/\" component={SignIn} />\n <Route exact path=\"/:slug\" component={DynamicRedirect} />\n <Route exact path=\"/justfund/howitworks\" component={Info} />\n <Route exact path=\"/justfund/signin\" component={SignIn} />\n <Route\n exact\n path=\"/justfund/forgot-password\"\n component={JFForgotPassword}\n />\n <Route\n exact\n path=\"/justfund/password/:resetType/:token\"\n component={NewPassword}\n />\n <Route\n exact\n path=\"/justfund/reset-password-required/:id\"\n component={RequiredResetPassword}\n />\n <Route exact path=\"/justfund/terms\" component={TermsOfUse} />\n <Route\n exact\n path=\"/justfund/privacy\"\n component={PrivacyNotice}\n />\n <Route\n exact\n path=\"/justfund/unsubscribe-email\"\n component={UnsubscribeEmailPage}\n />\n </Switch>\n </Box>\n\n {shouldShowFooter && <Footer />}\n </Box>\n </ThemeProvider>\n </DialogProvider>\n </StyledEngineProvider>\n );\n};\n","import { useParams } from 'react-router-dom';\nimport { Box, Button, Divider, List, ListItem, Typography } from '@mui/material';\nimport { IRfp } from '../../interfaces/IRfp.interfaces';\nimport { Grid } from '@mui/material';\nimport { FetchPage } from '../consumers';\nimport DOMPurify from 'dompurify';\nimport { KeyDates } from './KeyDates';\nimport { ISurveyQuestion } from '../../interfaces/ISurvey.interfaces';\nimport { RFPStatus } from '../../enums/rfp-status';\nimport { Markdown } from '../legacy-ui';\nimport ApplicationSpecificQuestions from './RfpSections/ApplicationSpecificQuestions';\nimport JFReadOnlyTextField from '../../../common/components/JFReadOnlyTextField/JFReadOnlyTextField.component';\nimport { processHtmlWithAsterisk } from '../../util/util';\n\nexport interface IParams {\n id: string;\n}\n\nconst classes = {\n fontSizeFix: {\n fontSize: 18\n },\n boxPadding: {\n m: '20px 4px'\n },\n applyBox: {\n marginTop: '2em',\n border: '5px solid #1A75BD',\n borderRadius: '5px',\n padding: '2em'\n },\n infoBox: {\n marginTop: '1em',\n marginBottom: '1em',\n borderRadius: '5px',\n backgroundColor: '#5D5F73',\n color: '#ffffff',\n padding: '1em'\n },\n warning: {\n backgroundColor: '#ffd2da',\n margin: 'auto',\n width: '85%',\n marginBottom: '3rem'\n },\n bold: {\n fontWeight: 'bold',\n textAlign: 'left',\n paddingLeft: '3rem',\n paddingTop: '1rem'\n },\n alignLeft: {\n textAlign: 'left',\n paddingLeft: '3rem'\n },\n previewTab: {\n marginTop: '10px',\n backgroundColor: '#1A75BD',\n width: '150px',\n textAlign: 'center',\n fontWeight: 'bold',\n color: '#fff',\n position: 'absolute'\n },\n commonQuestionsStyle: {\n fontWeight: '700',\n fontSize: '18px'\n }\n};\n\n// TODO - condense this with the non-public RFP page. Will need to update query based on URL.\nexport const PublicRfp = () => {\n const { id } = useParams<{ id: string }>();\n return (\n <FetchPage url={`/api/public/rfp/${id}`} renderSuccess={(data) => <DisplayRfp rfp={data} />} />\n );\n};\n\nexport const DisplayRfp = ({ rfp }: { rfp: IRfp }) => {\n const logo = rfp?.funder?.logo;\n //@ts-ignore\n const surveyQuestions: ISurveyQuestion[] | null = rfp.surveyQuestions;\n // DOMPurify will remove target=blank because potential security risk.. need to re-add it manually.\n const aboutRfp = rfp?.about ? DOMPurify.sanitize(rfp?.about) : '';\n const application = rfp?.application\n ? DOMPurify.sanitize(rfp?.application, { ADD_ATTR: ['target'] })\n : '';\n const eligibility = rfp?.eligibility ? DOMPurify.sanitize(rfp?.eligibility) : '';\n const grantAwardRange = rfp?.grant_award_range ? DOMPurify.sanitize(rfp?.grant_award_range) : '';\n const attachments =\n rfp?.requiredResources && rfp.requiredResources.length > 0\n ? rfp.requiredResources.filter((resource) => resource.description !== '')\n : null;\n const rfpContact = rfp?.rfpContact?.find(\n (contact) => !!contact.email\n );\n const validUrlTest = new RegExp(/https?:\\/\\//);\n const currentDate = new Date();\n const rfpDeadlineDate = new Date(rfp.deadline_date);\n const rfpAnnouncementDate = new Date(rfp.announcement_date);\n\n const rfpDateMessage = (): JSX.Element | void => {\n if (currentDate > rfpDeadlineDate) {\n return (\n <Typography>\n Thank you for your interest. This opportunity is now closed. Please contact{' '}\n <Box\n component=\"a\"\n sx={{ color: '#ffffff' }}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n href={`mailto:info@justfund.us`}\n >\n info@justfund.us\n </Box>{' '}\n or{' '}\n <Box\n component=\"a\"\n sx={{ color: '#ffffff' }}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n href=\"https://justfund.us/sign-up\"\n >\n sign up\n </Box>{' '}\n for JustFund to see more opportunities.\n </Typography>\n );\n }\n if (currentDate < rfpAnnouncementDate || rfp.status !== RFPStatus.APPROVED) {\n return (\n <Typography>\n This opportunity is not yet open. Please contact{' '}\n <Box\n component=\"a\"\n sx={{ color: '#ffffff' }}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n href={`mailto:info@justfund.us`}\n >\n info@justfund.us\n </Box>{' '}\n or{' '}\n <Box\n component=\"a\"\n sx={{ color: '#ffffff' }}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n href=\"https://justfund.us/sign-up\"\n >\n sign up\n </Box>{' '}\n for JustFund to see more opportunities.\n </Typography>\n );\n }\n // If legacy data has dates that are super messed up, we don't want to display both\n if (currentDate < rfpAnnouncementDate && currentDate > rfpDeadlineDate) return;\n return;\n };\n\n return (\n <Box>\n <Box maxWidth=\"1024px\" m=\"0 auto\" sx={{ paddingTop: '30px' }}>\n {rfp ? (\n <>\n {!!logo ? (\n <Box width=\"100%\" bgcolor={!!logo ? '#ffffff' : ''} textAlign=\"center\">\n <Box\n component=\"img\"\n src={logo?.url ? logo.url : '/images/placeholder.png'}\n alt={logo?.name ? logo.name : 'placeholder image'}\n height=\"140px\"\n style={{ objectFit: 'contain' }}\n />\n </Box>\n ) : (\n ''\n )}\n <Box sx={classes.boxPadding} textAlign=\"center\">\n <Typography variant=\"h1\">{rfp.name}</Typography>\n </Box>\n </>\n ) : (\n <Typography paragraph>Funding Opportunity not found.</Typography>\n )}\n <Divider />\n <Box sx={classes.boxPadding}>\n {(currentDate > rfpDeadlineDate ||\n currentDate < rfpAnnouncementDate ||\n rfp.status !== RFPStatus.APPROVED) && (\n <Box textAlign=\"left\" sx={classes.infoBox}>\n {rfpDateMessage()}\n </Box>\n )}\n {rfp?.page ? (\n <Markdown source={rfp?.page} />\n ) : (\n <Grid container spacing={3}>\n {rfp?.about && (\n <Grid item sm={12}>\n <Typography variant=\"h2\">About</Typography>\n <Box sx={classes.fontSizeFix} dangerouslySetInnerHTML={{ __html: aboutRfp }} />\n </Grid>\n )}\n {rfp?.eligibility && (\n <Grid item sm={12}>\n <Typography variant=\"h2\">Eligibility</Typography>\n <Box sx={classes.fontSizeFix} dangerouslySetInnerHTML={{ __html: eligibility }} />\n </Grid>\n )}\n {rfp?.grant_award_range && (\n <Grid item sm={12}>\n <Typography variant=\"h2\">Grant Award Range</Typography>\n <Box\n sx={classes.fontSizeFix}\n dangerouslySetInnerHTML={{ __html: grantAwardRange }}\n />\n </Grid>\n )}\n <Grid item sm={12}>\n <Typography variant=\"h2\">Key Dates</Typography>\n <KeyDates rfp={rfp} />\n </Grid>\n {rfp?.application && (\n <Grid item sm={12}>\n <Typography variant=\"h2\">Application</Typography>\n <Box sx={classes.fontSizeFix} dangerouslySetInnerHTML={{ __html: application }} />\n </Grid>\n )}\n {surveyQuestions && <ApplicationSpecificQuestions surveyQuestions={surveyQuestions} />}\n {attachments && (\n <Grid item sm={12}>\n <Typography variant=\"h3\">Application Specific Attachments</Typography>\n <Box sx={classes.fontSizeFix}>\n <List sx={{ listStyleType: 'disc', pl: 4 }}>\n {attachments.map(({ id, description, required }) => (\n <ListItem sx={{ display: 'list-item' }} key={id}>\n <JFReadOnlyTextField isHtml value={processHtmlWithAsterisk(description || '', required)} />\n </ListItem>\n ))}\n </List>\n </Box>\n </Grid>\n )}\n {(rfpContact ||\n rfp?.website ||\n rfp?.facebook ||\n rfp?.twitter ||\n rfp?.instagram) && (\n <Grid item sm={12}>\n <Typography variant=\"h2\">Contact Information</Typography>\n {(rfpContact?.first_name || rfpContact?.last_name) && (\n <Grid item sm={12}>\n <Typography variant=\"body2\">\n <strong>Name:</strong> {rfpContact?.first_name}{' '}\n {rfpContact?.last_name}\n </Typography>\n </Grid>\n )}\n {rfpContact && (\n <Grid item sm={12}>\n <Typography variant=\"body2\">\n <strong>Email:</strong>{' '}\n <a href={`mailto:${rfpContact.email}`}>{rfpContact.email}</a>\n </Typography>\n </Grid>\n )}\n {rfp?.website && (\n <Grid item sm={12}>\n {validUrlTest.test(rfp?.website) ? (\n <Typography variant=\"body2\">\n <strong>Website:</strong>{' '}\n <a target=\"_blank\" rel=\"noopener noreferrer\" href={rfp?.website}>\n {rfp?.website}\n </a>\n </Typography>\n ) : (\n <Typography variant=\"body2\">\n <strong>Website:</strong>{' '}\n <a\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n href={`https://${rfp?.website}`}\n >\n https://{rfp?.website}\n </a>\n </Typography>\n )}\n </Grid>\n )}\n {rfp?.facebook && (\n <Grid item sm={12}>\n {validUrlTest.test(rfp?.facebook) ? (\n <Typography variant=\"body2\">\n <strong>Facebook:</strong>{' '}\n <a target=\"_blank\" rel=\"noopener noreferrer\" href={rfp?.facebook}>\n {rfp?.facebook}\n </a>\n </Typography>\n ) : (\n <Typography variant=\"body2\">\n <strong>Facebook:</strong>{' '}\n <a\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n href={`https://${rfp?.facebook}`}\n >\n https://{rfp?.facebook}\n </a>\n </Typography>\n )}\n </Grid>\n )}\n {rfp?.twitter && (\n <Grid item sm={12}>\n {validUrlTest.test(rfp?.twitter) ? (\n <Typography variant=\"body2\">\n <strong>Twitter:</strong>{' '}\n <a target=\"_blank\" rel=\"noopener noreferrer\" href={rfp?.twitter}>\n {rfp?.twitter}\n </a>\n </Typography>\n ) : (\n <Typography variant=\"body2\">\n <strong>Twitter:</strong>{' '}\n <a\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n href={`https://${rfp?.twitter}`}\n >\n https://{rfp?.twitter}\n </a>\n </Typography>\n )}\n </Grid>\n )}\n {rfp?.instagram && (\n <Grid item sm={12}>\n {validUrlTest.test(rfp?.instagram) ? (\n <Typography variant=\"body2\">\n <strong>Instagram:</strong>{' '}\n <a target=\"_blank\" rel=\"noopener noreferrer\" href={rfp?.instagram}>\n {rfp?.instagram}\n </a>\n </Typography>\n ) : (\n <Typography variant=\"body2\">\n <strong>Instagram:</strong>{' '}\n <a\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n href={`https://${rfp?.instagram}`}\n >\n https://{rfp?.instagram}\n </a>\n </Typography>\n )}\n </Grid>\n )}\n </Grid>\n )}\n </Grid>\n )}\n {currentDate < rfpDeadlineDate &&\n currentDate > rfpAnnouncementDate &&\n rfp.status === RFPStatus.APPROVED && (\n <Grid container>\n <Grid item xs={12}>\n <Box textAlign=\"center\" sx={classes.applyBox}>\n <Typography variant=\"h4\" gutterBottom>\n How To Apply\n </Typography>\n <Typography paragraph gutterBottom>\n Sign up for JustFund to apply for this opportunity.\n </Typography>\n <Button\n variant=\"contained\"\n type=\"button\"\n onClick={() => window.open('https://justfund.us/sign-up', '_blank')}\n sx={{ marginBottom: '1em' }}\n >\n Sign Up For JustFund\n </Button>\n <Typography paragraph>\n <a\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n href={`${\n window.location.origin\n }/justfund/signin?redirect=${encodeURIComponent(`/o/rfps/${rfp.id}`)}`}\n >\n Sign in to your account\n </a>\n </Typography>\n </Box>\n </Grid>\n </Grid>\n )}\n </Box>\n </Box>\n </Box>\n );\n};\n","import { Button, Box, styled, Drawer, List, ListItem } from '@mui/material'\n\nconst classes = {\n typographyStyle: {\n textTransform: 'none',\n justifyContent: 'flex-start'\n },\n btnRight: {\n display: 'flex',\n justifyContent: 'flex-end',\n zIndex: '900'\n },\n listItem: {\n padding: '10px 12px',\n borderBottom: '1px solid',\n borderColor: 'rgba(0, 0, 0, 0.12)'\n }\n};\n\ninterface mobileProps {\n open: boolean;\n mobileOpen: () => void;\n}\n\nexport const PublicMobileMenu = ({ mobileOpen, open }: mobileProps) => {\n const Ul = {\n display: 'flex',\n flexFlow: 'row nowrap',\n listStyle: 'none',\n\n '@media (max-width: 900px)': {\n transform: open ? 'translateX(0)' : 'translateX(100%)',\n color: '#ffffff',\n flexFlow: 'column nowrap',\n height: '100%',\n position: 'fixed',\n paddingTop: '3.5rem',\n right: '0',\n top: '0',\n transition: 'transform 0.3s ease -in -out',\n width: '300px',\n }\n }\n\n const DrawerHeader = styled('div')(({ theme }) => ({\n display: 'flex',\n alignItems: 'center',\n padding: theme.spacing(0, 1),\n // necessary for content to be below app bar\n ...theme.mixins.toolbar,\n justifyContent: 'flex-start',\n }));\n\n\n return (\n <Drawer variant='persistent' anchor='right' sx={{\n ...Ul,\n }} open={open}>\n <Box>\n <DrawerHeader />\n <List>\n <ListItem sx={classes.listItem}>\n <Button\n onClick={() => window.open('/justfund/signin')}\n sx={classes.typographyStyle}\n color='secondary'\n fullWidth={true}\n size='medium'\n variant='text'\n >Sign In</Button>\n </ListItem>\n <ListItem sx={classes.listItem}>\n <Button\n onClick={() => window.open('https://justfund.us/sign-up/')}\n sx={classes.typographyStyle}\n fullWidth={true}\n color='secondary'\n size='medium'\n variant='text'\n >Sign Up</Button>\n </ListItem>\n <ListItem sx={classes.listItem}>\n <Button\n onClick={() => window.open('https://help.justfund.us/')}\n sx={classes.typographyStyle}\n fullWidth={true}\n color='secondary'\n size='medium'\n variant='text'\n >\n Help\n </Button>\n </ListItem>\n </List>\n </Box>\n </Drawer>\n )\n\n}","import { useState } from 'react';\nimport { Link } from 'react-router-dom';\nimport { AppBar, Box, Button, Grid, IconButton, styled, Toolbar } from '@mui/material';\nimport { Logo } from '../../../common/logo/Logo';\nimport HelpIcon from '@mui/icons-material/Help';\nimport { theme } from '../../../shared/util/util';\nimport { PublicMobileMenu } from './PublicMobileMenu';\nimport { MobileLogo } from '../../../common/logo/MobileLogo';\nimport MenuIcon from '@mui/icons-material/Menu';\nimport CloseIcon from '@mui/icons-material/Close';\n\nconst classes = {\n btnRight: {\n display: 'flex',\n justifyContent: 'flex-end',\n zIndex: '900'\n },\n typographyStyle: {\n textTransform: 'none',\n fontSize: '14px !important',\n color: '#000'\n },\n typographyButtonStyle: {\n fontWeight: 'bold !important',\n textTransform: 'none',\n fontSize: '14px !important',\n },\n linkStyle: {\n textDecoration: 'none',\n color: '#091b30'\n },\n linkColor: {\n color: '#000'\n },\n styledNav: {\n height: '52px',\n width: '100%',\n maxWidth: '1024px',\n margin: '0 auto',\n [theme.breakpoints.down('md')]: {\n display: 'none !important' // Override MUI styles\n }\n }\n\n};\n\nexport const PublicNav = () => {\n const [mobileMenuOpen, setMobileMenuOpen] = useState<boolean>(false);\n\n const onMenuMobileClick = () => {\n setMobileMenuOpen(!mobileMenuOpen)\n };\n\n const StyledMobileBar = styled('div')(({ theme }) => ({\n width: '2rem',\n height: '2rem',\n position: 'fixed',\n top: '15px',\n right: '20px',\n zIndex: 20,\n display: 'none',\n div: {\n width: '12rem',\n height: '-1rem',\n backgroundColor: '#ffffff',\n borderRadius: '0px',\n transformOrigin: '1px',\n transition: 'all 0.3s linear'\n\n },\n [theme.breakpoints.down('md')]: {\n display: 'flex',\n justifyContent: 'space-around',\n flexFlow: 'column nowrap',\n },\n }));\n\n\n const StyledMobileLogo = styled('div')(({ theme }) => ({\n display: 'none',\n [theme.breakpoints.down('md')]: {\n display: 'flex'\n }\n }));\n\n return (\n <Box sx={{ displayPrint: 'none' }}>\n <AppBar component='nav' color='default'>\n <StyledMobileLogo>\n <MobileLogo img='/images/justfund.svg' to='/o' />\n </StyledMobileLogo>\n <StyledMobileBar>\n <IconButton onClick={onMenuMobileClick} sx={classes.btnRight} size='large'>\n {mobileMenuOpen ? <CloseIcon /> : <MenuIcon />}\n </IconButton>\n <PublicMobileMenu open={mobileMenuOpen} mobileOpen={onMenuMobileClick} />\n </StyledMobileBar>\n <Toolbar sx={classes.styledNav}>\n <Link to={{ pathname: 'https://justfund.us/' }} target='_blank' rel= \"noopener noreferrer\">\n <Logo img='/images/justfund.svg' mlf='-1em' />\n </Link>\n <Grid container spacing={1} alignItems='center' justifyContent='flex-end' flexDirection='row' width='100%' sx={classes.typographyStyle}>\n <Grid item xs={1}>\n <Button sx={classes.typographyStyle} variant='text' color='primary'>\n <Link to='/justfund/signin' style={classes.linkStyle} target='_blank'>Sign In</Link>\n </Button>\n </Grid>\n <Grid item xs={1}>\n <Button sx={classes.typographyStyle} variant='text' color='primary'>\n <Link to={{ pathname: 'https://justfund.us/sign-up/' }} style={classes.linkStyle} target='_blank' rel= \"noopener noreferrer\">Sign Up</Link>\n </Button>\n </Grid>\n <Grid item xs={1}>\n <Link to={{ pathname: 'https://help.justfund.us/' }} style={classes.linkColor} target='_blank' rel= \"noopener noreferrer\">\n <HelpIcon />\n </Link>\n </Grid>\n </Grid>\n </Toolbar>\n </AppBar>\n <Toolbar />\n </Box >\n );\n};\n","import React from 'react';\nimport { Route, Switch } from 'react-router-dom';\nimport { Box, CssBaseline } from '@mui/material';\nimport { ThemeProvider, StyledEngineProvider } from '@mui/material/styles';\nimport { jfTheme } from '../../../styles/jf.theme'\nimport { ScrollToTop } from '../../../shared/util/scrollToTop';\nimport { NotFoundPage } from '../../../shared/util/NotFoundPage';\nimport { PublicRfp } from '../../../shared/components/viewRfp/PublicRFP';\nimport { PublicNav } from './PublicNav';\nimport { Footer } from '../../../shared/components/Footer';\n\nconst theme = jfTheme;\n\nexport const App = () => {\n\n return (\n <StyledEngineProvider injectFirst>\n <ThemeProvider theme={theme}>\n <ScrollToTop />\n <CssBaseline />\n <Box display='flex' flexDirection='column' minHeight='100vh'>\n <PublicNav />\n <Box flexGrow={1} flexShrink={1}>\n <Switch>\n <Route path='/p/rfps/:id' component={PublicRfp} />\n <Route path='*' component={NotFoundPage} />\n </Switch>\n </Box>\n <Footer />\n </Box>\n </ThemeProvider>\n </StyledEngineProvider>\n );\n};\n","import { Box, Divider, Drawer, Typography, styled } from '@mui/material';\nimport { Link } from 'react-router-dom';\n\nexport const NavbarBox = styled(Box)({\n display: 'flex',\n justifyContent: 'end',\n flexGrow: 1,\n marginRight: '30px',\n});\n\nexport const NavMenuLink = styled(Link)({\n textDecoration: 'none',\n color: '#000',\n padding: '10px 24px',\n display: 'block',\n fontSize: '18px',\n lineHeight: '20px',\n fontWeight: 700,\n});\n\nexport const MenuLabel = styled(Typography)({\n position: 'relative',\n '&:after': {\n content: '\"\"',\n width: '0',\n height: '3px',\n display: 'block',\n background: 'none',\n borderBottom: '3px solid #E61436',\n transition: 'width .25s ease',\n marginLeft: 0,\n position: 'absolute',\n },\n '&:hover:after': {\n width: '100%',\n marginLeft: 0,\n }\n});\n\nexport const SignInSignUpLink = styled(Link)({\n textDecoration: 'none',\n color: '#E61436',\n display: 'flex',\n gap: '10px',\n fontSize: '18px',\n lineHeight: '25px',\n fontWeight: 500,\n flexDirection: 'row',\n padding: '0 10px',\n '& .MuiSvgIcon-root': {\n fontSize: '25px',\n },\n});\n\nexport const StyledDivider = styled(Divider)({\n width: '2px',\n backgroundColor: '#E61436',\n margin: '0 10px',\n});\n\nexport const StyledDrawer = styled(Drawer)({\n '& .MuiDrawer-paper': {\n boxSizing: 'border-box',\n width: 240\n },\n});\n\nexport const DrawerMenuLink = styled(Link)(({ isBold }: { isBold?: boolean }) => ({\n textDecoration: 'none',\n color: '#000',\n padding: '10px 15px',\n display: 'block',\n fontSize: '20px',\n lineHeight: '20px',\n fontWeight: isBold ? 700 : 'normal',\n textAlign: 'center',\n width: '100%',\n}));","import { useCallback, useMemo, useState } from 'react';\nimport {\n AppBar,\n Toolbar,\n Box,\n Menu,\n Divider,\n List,\n ListItem,\n IconButton\n} from '@mui/material';\nimport { Link } from 'react-router-dom';\nimport { Logo } from '../../../common/logo/Logo';\nimport {\n MenuLabel,\n NavMenuLink,\n NavbarBox,\n StyledDivider,\n SignInSignUpLink,\n StyledDrawer,\n DrawerMenuLink\n} from './PublicAppBar.styles';\nimport LoginIcon from '@mui/icons-material/Login';\nimport PersonAddAltIcon from '@mui/icons-material/PersonAddAlt';\nimport MenuIcon from '@mui/icons-material/Menu';\n\ntype INavItem = {\n title: string;\n pathname: string;\n items?: Array<{ title: string; link: string }>;\n};\n\ntype iPublicAppBarProps = {\n window: () => Window;\n};\n\nexport const PublicAppBar = ({ window }: iPublicAppBarProps) => {\n const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null);\n const [subMenuIndex, setSubMenuIndex] = useState<number | null>(null);\n const [mobileOpen, setMobileOpen] = useState(false);\n const container = window !== undefined ? () => window().document.body : undefined;\n const mobileDisplay = { display : { xs: 'none', sm: 'flex' }};\n\n const handleMouseEnter = useCallback(\n (event: React.MouseEvent<HTMLElement>, index: number) => {\n setAnchorEl(event.currentTarget);\n setSubMenuIndex(index);\n },\n []\n );\n\n const handleMouseLeave = useCallback(() => {\n setAnchorEl(null);\n setSubMenuIndex(null);\n }, []);\n\n const NAV_ITEMS: INavItem[] = useMemo(() => ([\n {\n title: 'How It Works',\n pathname: 'https://justfund.us/how-it-works/',\n items: [\n { title: 'For Applicants', link: 'https://justfund.us/how-it-works/for-grantseekers/' },\n { title: 'For Grantmakers', link: 'https://justfund.us/how-it-works/for-grantmakers/' },\n { title: 'Common Application', link: 'https://justfund.us/common-application/' }\n ]\n },\n {\n title: 'About',\n pathname: 'https://justfund.us/about/',\n items: [\n { title: 'Our Approach', link: 'https://justfund.us/about/#ourapproach' },\n { title: 'Our Values', link: 'https://justfund.us/about/values/' },\n { title: 'Our Team', link: 'https://justfund.us/about/our-team/' },\n { title: 'Our Careers', link: 'https://boards.greenhouse.io/justfund' }\n ]\n },\n {\n title: 'Services',\n pathname: 'https://justfund.us/services/'\n },\n {\n title: 'News & Events',\n pathname: 'https://justfund.us/news-events/',\n items: [\n { title: 'Blog', link: 'https://justfund.us/news-events/' },\n { title: 'Webinars', link: 'https://learn.justfund.us/grantseeker-training' },\n { title: 'Contact Us', link: 'https://justfund.us/contact-us/' },\n ]\n },\n ]), []);\n\n const renderNavItems = useCallback(() => {\n return (\n <Box display='flex' flexDirection='row'>\n { NAV_ITEMS.map(({ title, pathname, items }, index) => {\n return (\n <NavMenuLink\n key={`nav-menu-${index}`}\n to={{ pathname }}\n target='_blank'\n rel=\"noopener noreferrer\"\n onMouseEnter={ \n (event) => handleMouseEnter(event, index)\n }\n onMouseLeave={handleMouseLeave}\n replace\n >\n <MenuLabel as='span'>{title}</MenuLabel>\n {items && (\n <Menu\n anchorEl={anchorEl}\n open={subMenuIndex === index}\n onClose={handleMouseLeave}\n keepMounted\n >\n { items.map(({ link, title }, subIndex) => (\n <NavMenuLink\n key={`nav-submenu-${subIndex}`}\n to={{ pathname: link }}\n target='_blank'\n rel=\"noopener noreferrer\"\n onClick={handleMouseLeave}\n replace\n >\n <MenuLabel as='span'>{title}</MenuLabel>\n </NavMenuLink>\n ))}\n </Menu>\n )}\n </NavMenuLink>\n );\n })}\n </Box>\n )\n }, [NAV_ITEMS, subMenuIndex, anchorEl, handleMouseEnter, handleMouseLeave]);\n\n const handleDrawerToggle = () => {\n setMobileOpen((prevState) => !prevState);\n };\n\n const renderDrawer = useCallback(() => (\n <Box onClick={handleDrawerToggle}>\n <Box py={2} textAlign='center'>\n <Link\n to={{ pathname: 'https://justfund.us/' }}\n target='_top'\n rel=\"noopener noreferrer\"\n replace\n >\n <Logo img='/images/justfund.svg' mlf={20}/>\n </Link>\n </Box>\n <Divider />\n <List>\n { NAV_ITEMS.map(({ title, pathname, items }, index) => {\n return (\n <>\n <ListItem key={`nav-menu-${index}`} disablePadding>\n <DrawerMenuLink\n to={{ pathname }} \n target='_top'\n rel= \"noopener noreferrer\"\n replace\n isBold\n >\n {title}\n </DrawerMenuLink>\n </ListItem>\n {items && (\n items.map(({ link, title }, subIndex) => (\n <ListItem key={`nav-submenu-${subIndex}`} disablePadding>\n <DrawerMenuLink\n to={{ pathname: link }} \n target='_top'\n rel= \"noopener noreferrer\"\n replace\n >\n {title}\n </DrawerMenuLink>\n </ListItem>\n ))\n )}\n <Divider />\n </>\n );\n })}\n </List>\n <Box display='flex' flexDirection='column' gap='10px' alignItems='center' paddingY='20px'>\n <SignInSignUpLink \n to={{ pathname: 'https://portal.justfund.us/justfund/signin' }} \n target='_top'\n rel= \"noopener noreferrer\"\n >\n <LoginIcon /> Sign In\n </SignInSignUpLink>\n <Divider sx={{ width: \"80%\" }} />\n <SignInSignUpLink\n to={{ pathname: 'https://justfund.us/sign-up-2' }} \n target='_top'\n rel= \"noopener noreferrer\"\n replace\n >\n <PersonAddAltIcon/> Sign Up\n </SignInSignUpLink>\n </Box>\n </Box>\n ), [NAV_ITEMS]);\n\n return (\n <>\n <AppBar position=\"sticky\" component='nav'>\n <Toolbar \n sx={{\n maxWidth: '1200px',\n margin: 'auto',\n justifyContent: 'space-between',\n width: '100%'\n }}\n >\n <Link\n to={{ pathname: 'https://justfund.us/' }}\n target='_top'\n rel=\"noopener noreferrer\" \n replace\n style={{ marginTop: '10px' }}\n >\n <Logo img='/images/justfund.svg' />\n </Link>\n <NavbarBox sx={{ ...mobileDisplay }}>\n {renderNavItems()}\n </NavbarBox>\n \n <Box flexDirection='row' display='flex' sx={{ ...mobileDisplay }}>\n <SignInSignUpLink \n to={{ pathname: 'https://portal.justfund.us/justfund/signin' }} \n target='_top'\n rel= \"noopener noreferrer\"\n >\n <LoginIcon /> Sign In\n </SignInSignUpLink>\n <StyledDivider orientation=\"vertical\" variant='middle' flexItem />\n <SignInSignUpLink\n to={{ pathname: 'https://justfund.us/sign-up-2' }} \n target='_top'\n rel= \"noopener noreferrer\"\n replace\n >\n <PersonAddAltIcon/> Sign Up\n </SignInSignUpLink>\n </Box>\n <IconButton\n aria-label=\"open drawer\"\n edge=\"start\"\n onClick={handleDrawerToggle}\n sx={{ display: { sm: 'none', flexGrow: 1, justifyContent: 'end' } }}\n >\n <MenuIcon />\n </IconButton>\n </Toolbar>\n </AppBar>\n <nav>\n <StyledDrawer\n container={container}\n variant=\"temporary\"\n anchor='right'\n open={mobileOpen}\n onClose={handleDrawerToggle}\n ModalProps={{\n keepMounted: true,\n }}\n sx={{\n display: { xs: 'block', sm: 'none'},\n }}\n >\n {renderDrawer()}\n </StyledDrawer>\n </nav>\n </>\n );\n};","// mui components\nimport { Box, Grid, Tooltip, Typography } from '@mui/material';\nimport { IProfile } from '../../../interfaces/IViewProfile.interface';\nimport { JFProfileImage, JFBanner } from '../../../../common/components';\nimport { FocusIcon } from '../../legacy-ui';\nimport bipocImage from '../../../../images/bipoc.svg';\n\n\ntype IHeaderProps = {\n entity: Pick<IProfile, 'name' | 'focuses' | 'bipoc_led' | 'hero' | 'logo_url' | 'logo'> & {\n summary?: string;\n }\n}\n\nexport const Header = ({ entity }: IHeaderProps) => {\n const { name, focuses, bipoc_led, summary } = entity\n const bannerImage = entity?.hero?.url;\n const logoImage = entity?.logo_url || entity?.logo?.url;\n\n return (\n <Grid container marginBottom={5}>\n <Grid container item sm={12} lg={12}>\n <JFBanner\n height={220}\n hasSrc={!!bannerImage}\n src={bannerImage ?? '/images/banner_default.svg'}\n alt=\"organization banner\"\n />\n </Grid>\n <Grid container item>\n <Grid item xs=\"auto\">\n <JFProfileImage\n alt=\"Organization Logo\"\n hasSrc={!!logoImage}\n marginTop={-100}\n objectFit='contain'\n size={200}\n src={logoImage || '/images/profile_default.svg'}\n />\n </Grid>\n <Grid item container xs={12} md spacing={4} paddingTop={3}>\n <Grid item container xs alignContent=\"center\" spacing={1}>\n <Grid item display=\"flex\" gap={2} alignItems=\"center\">\n <Typography variant=\"h1\" fontSize={28} fontWeight={600}>\n {name}\n </Typography>\n { bipoc_led ? (\n <Tooltip title=\"BIPOC-led\">\n <Box\n component=\"img\"\n sx={{ height: '28px' }}\n src={bipocImage}\n alt=\"bipoc led logo\"\n />\n </Tooltip>\n ) : null }\n {!!focuses?.length && (\n <Box>\n { focuses\n .toSorted((a: any, b: any) => a.FunderFocus?.order - b.FunderFocus?.order)\n .map((focus: any) => (\n <FocusIcon key={focus.id} focus={focus.id} size=\"23px\" />\n ))}\n </Box>\n )}\n </Grid>\n {summary ? (\n <Grid container item xs={12}>\n <Typography variant=\"body1\" fontSize={16} fontWeight={400}>\n {summary}\n </Typography>\n </Grid>\n ): null}\n </Grid>\n </Grid>\n </Grid>\n </Grid>\n );\n};","import { Box, Grid, Icon, Typography } from \"@mui/material\";\n\ninterface AmountCardProps {\n amount: string;\n currency?: string;\n title: string;\n icon: any;\n}\n\nexport const AmountCard = ({ amount, currency, title, icon }: AmountCardProps) => {\n return (\n <Box sx={{ backgroundColor: \"#EFF5F9\", borderRadius: '10px', padding: '20px' }}>\n <Grid container spacing={2} alignItems=\"center\">\n <Grid item justifyItems='center'>\n <Icon component={icon} fontSize=\"small\" />\n </Grid>\n <Grid item>\n <Box padding={0}>\n <Typography variant=\"caption\" fontSize={20} fontWeight={600}>\n {amount}\n </Typography>\n {currency ? (\n <Typography\n variant=\"caption\"\n fontSize={20}\n fontWeight={400}\n sx={{ marginLeft: '8px' }}\n >\n {currency}\n </Typography>\n ): null}\n </Box>\n <Box padding={0}>\n <Typography variant=\"caption\" fontSize={16} fontWeight={400}>\n {title}\n </Typography>\n </Box>\n </Grid>\n </Grid>\n </Box>\n );\n}","import { Button, Divider, Grid, Typography } from '@mui/material'\nimport { Dispatch, SetStateAction, useCallback, useEffect, useState } from 'react'\nimport { dollarFormatter } from '../../../util/util'\nimport { Card } from '../../../../common/components'\nimport { AvatarAndName } from '../../avatarAndName'\nimport { IProfile } from '../../../interfaces/IProfile'\nimport { IProfile as IViewProfile } from '../../../interfaces/IViewProfile.interface'\nimport { PublicAPIService } from '../../../services/api-service/public-api.service'\nimport { AmountCard } from '../amountCard/AmountCard'\nimport RequestQuoteOutlinedIcon from '@mui/icons-material/RequestQuoteOutlined';\nimport VerifiedOutlinedIcon from '@mui/icons-material/VerifiedOutlined';\nimport OpenInNewIcon from '@mui/icons-material/OpenInNew';\n\ninterface IProfileFundingProps {\n entity: IViewProfile\n profileSlug: string\n setIsOrganizationsModalOpen: Dispatch<SetStateAction<boolean>>\n}\n\nexport const ProfileFunding = ({\n entity,\n profileSlug,\n setIsOrganizationsModalOpen\n}: IProfileFundingProps) => {\n const [funded, setFunded] = useState<IProfile[]>([]);\n\n const renderRecentlyFunded = useCallback(() => funded.map((profile) => {\n const isFunder = !!profile.funder;\n const organization = {\n id: isFunder ? profile.funder?.id! : profile.id,\n name: profile.name,\n logo: isFunder ? profile.funder?.logo?.url : profile.logoUrl,\n isPublished: isFunder ? profile.funder?.isPublished : profile.isPublished,\n isGrantee: !isFunder,\n }\n return (\n <Grid item container key={`avatarAndName-${profile.name}`}>\n <AvatarAndName\n shortProfile={organization}\n avatarSize={56}\n />\n </Grid>\n )\n }), [funded]);\n\n useEffect(() => {\n PublicAPIService.getFundedTabBySlug(\n profileSlug,\n {\n limit: 3,\n sortFields: [\n { sortBy: 'created_at', sortDir: 'desc' },\n { sortBy: 'id', sortDir: 'desc' }\n ]\n }\n ).then((res) => {\n setFunded(res);\n })\n .catch(err => err.message !== 'canceled' && err);\n }, [profileSlug]);\n\n return (\n <Card paddingX={30} paddingY={40}>\n <Grid container spacing={4}>\n <Grid item container spacing={1} direction=\"column\">\n <Grid item>\n <Typography variant=\"h2\" fontSize={24} fontWeight={600}>JustFunded</Typography>\n </Grid>\n <Grid item>\n <AmountCard\n amount={dollarFormatter(entity.totalFunded, 0)}\n currency={'USD'}\n title={'Total'}\n icon={RequestQuoteOutlinedIcon}\n />\n </Grid>\n <Grid item>\n <AmountCard\n amount={entity?.commitments.toString()}\n title={'Grants'}\n icon={VerifiedOutlinedIcon}\n />\n </Grid>\n {funded?.length ? (\n <>\n <Grid item marginY={2}>\n <Divider />\n </Grid>\n <Grid item paddingBottom={2}>\n <Typography variant=\"h3\" fontSize={24} fontWeight={600}>Recently Funded</Typography>\n </Grid>\n {renderRecentlyFunded()}\n </>\n ): null}\n </Grid>\n <Grid item>\n {funded?.length ? (\n <Button\n variant=\"text\"\n onClick={() => setIsOrganizationsModalOpen?.(true)}\n endIcon={<OpenInNewIcon />}\n >\n <Typography fontSize={'16px'} textTransform={'none'}>See more</Typography>\n </Button>\n ): null}\n </Grid>\n </Grid>\n </Card>\n )\n}\n","import { Link } from \"react-router-dom\";\nimport { Button, Container, Grid, Typography } from \"@mui/material\";\nimport GroupsIcon from '@mui/icons-material/Groups';\n\n\ninterface IBluredInfoProps {\n selectedTab: string;\n name: string;\n}\n\nexport const BluredInfo = ({ selectedTab, name }: IBluredInfoProps) => {\n return (\n <Container\n sx={{\n backgroundImage: `url(/images/blur-${selectedTab}.png)`,\n backgroundRepeat: 'no-repeat',\n minHeight: '500px',\n }}\n >\n <Grid\n container\n direction='column'\n spacing={1}\n marginTop='24px'\n >\n <Grid item>\n <Typography fontSize={24} fontWeight={600}>\n Sign Up to get full access to JustFund\n </Typography>\n </Grid>\n <Grid item direction='row' display='flex' gap={1} alignItems='center'>\n <GroupsIcon fontSize=\"small\" /> \n <Typography fontSize={16} fontWeight={400}>\n Are you looking to apply for funding opportunities offered by {name} and more?\n </Typography>\n </Grid>\n <Grid item>\n <Button\n sx={{ width: '120px', fontSize: 'large', marginY: '24px' }}\n onClick={() => window.open('https://justfund.us/sign-up-2', '_top')}\n variant=\"contained\"\n color=\"secondary\"\n >\n Sign Up\n </Button>\n </Grid>\n <Grid item>\n <Typography fontSize={16} fontWeight={400}>\n Already a member?\n <Link\n to={{ pathname: 'https://portal.justfund.us/justfund/signin' }}\n target='_top'\n style={{ color: '#4288C5', marginLeft: '8px'}}\n >\n Login\n </Link>\n </Typography>\n </Grid>\n <Grid item>\n <Typography fontSize={16} fontWeight={400}>\n Are you a funder looking to learn more about JustFund? \n <Link \n to={{ pathname: 'https://sales.justfund.us/justfund-request-demo' }}\n target='_top'\n style={{ color: '#4288C5', marginLeft: '8px'}}\n >\n Request a demo.\n </Link>\n </Typography>\n </Grid>\n </Grid>\n </Container>\n );\n}","import { Button, Grid, Typography } from '@mui/material';\nimport { useEffect, useState } from 'react';\nimport { ProfileCard } from '../../profileCard/ProfileCard';\n\nimport { EProfileType } from '../../../enums/profile.enum';\nimport { IProfile } from '../../../interfaces/IProfile';\nimport { Loading } from '../../legacy-ui';\nimport { PublicAPIService } from '../../../services/api-service/public-api.service';\nimport { Card } from '../../../../common/components';\nimport ProfileDrawer from '../../newPublicProfile/funded/profileDrawer';\n\ninterface IFundedTabContent {\n profileSlug: string;\n setIsOrganizationsModalOpen: React.Dispatch<React.SetStateAction<boolean>>;\n totalFundedTab: number;\n profileName: string\n}\n\nconst FundedTabContent = ({ profileSlug, setIsOrganizationsModalOpen, totalFundedTab, profileName }: IFundedTabContent) => {\n const [loading, setLoading] = useState<boolean>(true);\n const [fundedOrganizations, setFundedOrganizations] = useState<IProfile[]>([]);\n const [offset, setOffset] = useState<number>(0);\n const [drawerOpen, setDrawerOpen] = useState<IProfile>();\n const limit = 9;\n\n const getOrganizations = async () => {\n const data = await PublicAPIService.getFundedTabBySlug(profileSlug, {\n limit,\n offset\n })\n\n if (data) {\n setFundedOrganizations(data);\n setOffset(offset + limit);\n }\n if (loading) {\n setLoading(false);\n }\n };\n\n const hasMore = totalFundedTab > offset;\n\n useEffect(() => {\n getOrganizations();\n }, []);\n\n return (\n loading ? (\n <Loading />\n ) : (\n <Card paddingX={50} paddingY={40}>\n <Grid item xs={12}>\n <Typography variant=\"h3\" fontSize={24} fontWeight={600}>\n Funded Organizations\n </Typography>\n </Grid>\n {!fundedOrganizations.length ? (\n <Grid item xs={12}>\n <Typography variant=\"body1\" fontSize={16} fontWeight={400} marginTop={2}>\n This Funder has not funded any Applicants yet\n </Typography>\n </Grid>\n ) : (\n <Grid container spacing={3} marginTop={4}>\n {fundedOrganizations.map((grantee) => (\n <Grid item key={grantee.id} md={4} sm={12} xs={12}>\n <ProfileCard\n profile={grantee}\n profileType={grantee.funder ? EProfileType.FUNDER : EProfileType.GRANTEE}\n isAdmin={false}\n showFunders={false}\n openDetails={() => setDrawerOpen(grantee!)}\n />\n </Grid>\n ))}\n {drawerOpen && <ProfileDrawer open onClose={() => setDrawerOpen(undefined)} entity={drawerOpen} funderName={profileName}/>}\n {hasMore && (\n <Grid item xs={12} textAlign='center'>\n <Button\n variant=\"text\"\n size=\"medium\"\n sx={{\n color: \"#4288C5\",\n fontSize: \"14px\",\n fontWeight: 400,\n textTransform: \"none\"\n }}\n onClick={() => setIsOrganizationsModalOpen(true)}\n >\n See all {totalFundedTab} Organizations\n </Button>\n </Grid>\n )}\n </Grid>\n )}\n </Card>\n )\n );\n};\n\nexport default FundedTabContent;","import { Dispatch, SetStateAction, useEffect, useState } from 'react';\nimport { useHistory, useParams } from 'react-router-dom';\nimport { Box, CircularProgress, Grid, Tab } from '@mui/material';\nimport { IProfile } from '../../interfaces/IViewProfile.interface';\nimport { Header } from './header/Header';\nimport { JFContainer, SocialMedia } from '../../../common/components';\nimport { ProfileDetails } from '../newPublicProfile/about/ProfileDetails';\nimport { ProfileFunding } from './profileFunding/ProfileFunding';\nimport { useCancellableEffect } from '../../hooks/useCancellableEffect';\nimport { PublicAPIService } from '../../services/api-service/public-api.service';\nimport FundedOrganizationsModal from '../newPublicProfile/funded/fundedOrganizationsModal';\nimport { TabContext, TabList, TabPanel } from '@mui/lab';\nimport { BluredInfo } from './bluredInfo/BluredInfo';\nimport { NotFoundPage } from '../../util/NotFoundPage';\nimport FundedTabContent from './fundedTabContent/FundedTabContent';\n\ninterface CustomPublicProfileParams {\n profileSlug: string;\n}\ntype IEntity = IProfile & {\n based_in?: { name: string };\n totalFundedTab: number;\n}\n\nexport const CustomPublicProfile = () => {\n const [entity, setEntity] = useState<IEntity>({} as IEntity);\n const [isPublicProfile, setIsPublicProfile] = useState<boolean>(false);\n const [isLoading, setIsLoading] = useState<boolean>(true);\n const { profileSlug } = useParams<CustomPublicProfileParams>()\n const [selectedTab, setSelectedTab]: [string, Dispatch<SetStateAction<string>>] = useState(\"about\");\n const history = useHistory();\n\n const isEntityEmpty = Object.keys(entity).length === 0;\n const socialMedia = {\n facebook: entity.facebook,\n instagram: entity.instagram,\n twitter: entity.twitter,\n linkedIn: entity.linkedIn,\n website: entity.website,\n };\n\n const tabHandler = (_: React.SyntheticEvent, newValue: string) => {\n setSelectedTab(newValue);\n }\n\n useCancellableEffect((signal: AbortSignal) => {\n PublicAPIService.getFunderBySlug(profileSlug, { signal })\n .then((data) => {\n setEntity(data);\n setIsPublicProfile(true);\n setIsLoading(false);\n })\n .catch(() => {\n setIsPublicProfile(false);\n }).finally(() => {\n setIsLoading(false);\n });\n }, [profileSlug]);\n\n useEffect(() => {\n if (entity.name)\n document.title = `JustFund | ${entity.name}`;\n }, [entity]);\n\n if (isLoading) {\n return <CircularProgress />;\n }\n \n const navigateToAllOrganizations = () => {\n history.push(`/publicprofile/${profileSlug}/all-organizations`);\n };\n\n return (\n <JFContainer>\n { !isPublicProfile ? (\n <NotFoundPage />\n ) : (\n <>\n <Header entity={entity} />\n <Box\n display='flex'\n justifyContent='end'\n marginBottom={-5}\n sx={{\n \"@media (max-width: 600px)\": {\n justifyContent: 'center',\n marginBottom: '16px'\n }\n }}\n >\n <SocialMedia socialMedia={socialMedia} />\n </Box>\n <TabContext value={selectedTab}>\n <TabList\n onChange={tabHandler}\n sx={{ \n '.MuiTab-root': {\n fontSize: '16px',\n textTransform: 'none'\n },\n '.Mui-selected': {\n color: '#4288C5'\n },\n '.MuiTabs-indicator': {\n backgroundColor: '#4288C5',\n height: 3\n },\n }}\n >\n <Tab value=\"about\" label=\"About\" />\n <Tab value=\"funded\" label=\"Funded\" />\n <Tab value=\"activity\" label=\"Activity\" />\n </TabList>\n <TabPanel sx={{ paddingX: 0 }} value=\"about\">\n <Grid container spacing={2}>\n <Grid item xs={12} md={8}>\n <Grid item>\n <Grid item marginBottom='24px'>\n <ProfileDetails entity={entity} isPublicProfile />\n </Grid>\n <Grid item>\n <BluredInfo selectedTab={selectedTab} name={entity.name} />\n </Grid>\n </Grid>\n </Grid>\n <Grid item xs={12} md={4} height={'fit-content'}>\n {!isEntityEmpty ? (\n <ProfileFunding \n entity={entity}\n profileSlug={profileSlug}\n setIsOrganizationsModalOpen={navigateToAllOrganizations}\n />\n ) : null}\n </Grid>\n </Grid>\n </TabPanel>\n <TabPanel sx={{ paddingX: 0 }} value=\"funded\">\n { selectedTab === 'funded' && (\n <>\n <FundedTabContent\n profileSlug={profileSlug}\n profileName={entity.name}\n setIsOrganizationsModalOpen={navigateToAllOrganizations}\n totalFundedTab={entity.totalFundedTab}\n \n />\n <BluredInfo selectedTab={selectedTab} name={entity.name} />\n </>\n )}\n </TabPanel>\n <TabPanel sx={{ paddingX: 0 }} value=\"activity\">\n <BluredInfo selectedTab={selectedTab} name={entity.name} />\n </TabPanel>\n </TabContext>\n </>\n )}\n </JFContainer>\n );\n};","import { Switch, Route } from 'react-router-dom';\nimport { Box, CssBaseline } from '@mui/material';\nimport { ThemeProvider, StyledEngineProvider } from '@mui/material/styles';\nimport { jfTheme } from '../../../styles/jf.theme'\nimport { PublicAppBar } from './PublicAppBar';\nimport { NotFoundPage } from '../../../shared/util/NotFoundPage';\nimport { CustomPublicProfile } from '../../../shared/components/customPublicProfile/CustomPublicProfile';\nimport AllOrganizations from '../../../shared/components/newPublicProfile/funded/allOrganizations';\n\nconst theme = jfTheme;\n\nexport const PublicRoutes = () => {\n\n return (\n <StyledEngineProvider injectFirst>\n <ThemeProvider theme={theme}>\n <CssBaseline />\n <Box display='flex' flexDirection='column' minHeight='100vh'>\n <PublicAppBar window={() => window} />\n <Box flexGrow={1} flexShrink={1}>\n <Switch>\n <Route\n exact\n path=\"/publicprofile/:profileSlug/all-organizations\"\n component={AllOrganizations}\n />\n <Route path='/publicprofile/:profileSlug' component={CustomPublicProfile} />\n <Route path='*' component={NotFoundPage} />\n </Switch>\n </Box>\n </Box>\n </ThemeProvider>\n </StyledEngineProvider>\n );\n};\n","import CloseIcon from '@mui/icons-material/Close';\nimport { Alert, AlertTitle, Box, IconButton } from '@mui/material';\nimport { useEffect, useState } from 'react';\nimport { useMessagingContext } from './Notification';\nimport { alertStyles, getPositionStyles } from './styles';\n\nexport const AlertComponent = () => {\n const {\n alertState: {\n title,\n message,\n severity,\n onClose,\n position = 'top-right',\n action,\n icon = false\n },\n resetAlert\n } = useMessagingContext();\n // TODO some weird CSS preventing this from showing correctly but mechanisms are in place\n const [show, setShow] = useState(false);\n useEffect(() => {\n let shouldShow = false;\n if (title || message) {\n shouldShow = true;\n setTimeout(() => {\n resetAlert();\n setShow(false);\n onClose?.();\n }, 3000);\n }\n setShow(shouldShow);\n }, [title, message]);\n\n return (\n <>\n {show && (\n <Alert\n icon={icon}\n onClose={() => {\n resetAlert();\n onClose?.();\n }}\n severity={severity}\n variant=\"filled\"\n action={\n <Box sx={{ display: 'flex', gap: 1, alignItems: 'center' }}>\n {action}\n <IconButton\n color=\"inherit\"\n size=\"small\"\n onClick={() => {\n resetAlert();\n onClose?.();\n }}\n >\n <CloseIcon sx={{ fontSize: '1.375rem' }} />\n </IconButton>\n </Box>\n }\n sx={{ ...alertStyles.alert, ...getPositionStyles(position) } as any}\n >\n <AlertTitle style={alertStyles.alertTitle}>{title}</AlertTitle>\n {message}\n </Alert>\n )}\n </>\n );\n};\n","import React from 'react';\nimport {\n Grid,\n TextField,\n Typography\n} from '@mui/material';\nimport { IUser } from '../../../shared/interfaces/IUser.interface';\nimport { maskedValue } from \"../../../shared/util/util\";\nimport { Controller, useFormContext } from 'react-hook-form';\nimport { emailRegex } from '../../../shared/util/constants';\n\nexport interface IUserDetailsProps {\n setUser: React.Dispatch<React.SetStateAction<any>>\n user: IUser;\n emailError: string;\n}\n\nexport function RegisterUserDetails({ user, emailError }: IUserDetailsProps) {\n const { control, formState: { errors }, setValue } = useFormContext();\n const requiredErrorMessage = \"This field is required\";\n\n return (\n <Grid item container spacing={2} xs={12}>\n <Grid item xs={12} md={6}>\n <Typography variant=\"h6\" align=\"justify\">First Name*</Typography>\n <Controller\n name=\"first_name\"\n defaultValue={user?.first_name}\n rules={{ required: requiredErrorMessage }}\n control={control}\n render={({ field }) =>\n <TextField\n error={!!errors.first_name}\n helperText={!!errors.first_name && errors.first_name?.message}\n placeholder=\"Jane\"\n size=\"small\"\n fullWidth\n variant=\"outlined\"\n defaultValue={user?.first_name}\n InputProps={{ style: { fontSize: 16 } }}\n inputProps={{ tabIndex: 1 }}\n {...field}\n />\n }\n />\n </Grid>\n <Grid item xs={12} md={6}>\n <Typography variant=\"h6\" align=\"justify\">Last Name*</Typography>\n <Controller\n name=\"last_name\"\n control={control}\n defaultValue={user?.last_name || \"\"}\n rules={{ required: requiredErrorMessage }}\n render={({ field }) =>\n <TextField\n placeholder=\"Doe\"\n size=\"small\"\n fullWidth\n variant=\"outlined\"\n error={!!errors.last_name}\n helperText={!!errors.last_name && errors.last_name?.message}\n InputProps={{ style: { fontSize: 16 } }}\n inputProps={{ tabIndex: 2 }}\n {...field}\n />\n }\n />\n </Grid>\n <Grid item xs={12} md={6}>\n <Typography variant=\"h6\" align=\"justify\">Email*</Typography>\n <Controller\n name=\"email\"\n defaultValue={user?.email || \"\"}\n rules={{ required: requiredErrorMessage, pattern: { value: emailRegex, message: \"Must be a valid email address\" } }}\n control={control}\n render={({ field }) =>\n <TextField\n placeholder=\"jdoe@gmail.com\"\n size=\"small\"\n fullWidth\n variant=\"outlined\"\n error={!!errors.email || !!emailError}\n helperText={emailError ? emailError : (!!errors.email && errors.email?.message)}\n InputProps={{ style: { fontSize: 16 } }}\n inputProps={{ tabIndex: 5 }}\n {...field}\n />\n }\n />\n </Grid>\n <Grid item xs={12} md={6}>\n <Typography variant=\"h6\" align=\"justify\">Role/Title*</Typography>\n <Controller\n name=\"role_title\"\n defaultValue={user?.role_title || \"\"}\n rules={{ required: requiredErrorMessage }}\n control={control}\n render={({ field }) =>\n <TextField\n placeholder=\"Enter Role/Title\"\n size=\"small\"\n fullWidth\n variant=\"outlined\"\n error={!!errors.role_title}\n helperText={!!errors.role_title && errors.role_title?.message}\n InputProps={{ style: { fontSize: 16 } }}\n inputProps={{ tabIndex: 4 }}\n {...field}\n />\n }\n />\n </Grid>\n <Grid item xs={12} md={6}>\n <Typography variant=\"h6\" align=\"justify\">Phone*</Typography>\n <Controller\n name=\"phone\"\n control={control}\n defaultValue={user?.phone}\n rules={{ required: requiredErrorMessage }}\n render={({ field }) =>\n <TextField\n placeholder=\"___ - ___ - ____\"\n size=\"small\"\n fullWidth\n variant=\"outlined\"\n error={!!errors.phone}\n helperText={!!errors.phone && errors.phone?.message}\n InputProps={{ style: { fontSize: 16 } }}\n inputProps={{ tabIndex: 6 }}\n {...field}\n onChange={(e) => field.onChange(() => {\n let masked: string = maskedValue('000-000-0000', e.target.value)\n setValue(field.name, masked)\n return masked\n })}\n />\n }\n />\n </Grid>\n </Grid>\n )\n}","import React, { useEffect, useState } from 'react';\nimport { Grid, MenuItem, TextField, Typography, Select, FormControlLabel, Checkbox, Box, RadioGroup, Radio, FormControl, Tooltip } from '@mui/material';\nimport { FocusApiServices } from '../../../shared/services/api-service/focus-api.services';\nimport { IFocus } from '../../../shared/interfaces/IFocus';\nimport { IUser } from '../../../shared/interfaces/IUser.interface';\nimport { FunderServiceLevel } from '../../../shared/enums/funder/funder-enums';\nimport { useFunderContext } from '../../../funder/providers/UserProvider';\nimport { Controller, useFormContext, useWatch } from 'react-hook-form';\nimport { urlRegex } from '../../../shared/util/constants';\nimport blueinfo from '../../../images/blueinfo.svg';\nimport _ from 'lodash';\nimport { requiredErrorMessage } from '../../../shared/util/util';\nimport { UserVisibilityType } from '../../../shared/enums/user.enum';\n\nconst classes = {\n root: {\n backgroundColor: '#fff',\n borderRadius: '10px',\n boxShadow: '0 0 15px 0 rgba(0,0,0,0.25)',\n width: '2573px',\n maxHeight: \"604px\"\n },\n menuItem: {\n maxWidth: '75%',\n '@media (max-width: 900px)': {\n maxWidth: '50%',\n }\n },\n checkbox: {\n fontSize: '16px'\n },\n label: {\n transform: \"translateY(1rem)\",\n '@media (max-width: 900px)': {\n transform: \"translateY(0.5em)\"\n }\n }\n};\n\ninterface IBankProps {\n requireBank: boolean,\n checked: boolean,\n membersLength: number[]\n};\n\nexport interface IUserSettingsProps {\n setUser: React.Dispatch<React.SetStateAction<any>>,\n user: IUser,\n // TODO: Implement bank field and anonymous setting later\n // bankField: IBankProps,\n // setBankField: React.Dispatch<React.SetStateAction<any>>,\n // hideOptOut: () => boolean,\n // anonymousSetting: UserVisibilityType,\n // setAnonymousSetting: React.Dispatch<React.SetStateAction<any>>\n};\n\nexport function RegisterFunderDetails({ user, setUser }: IUserSettingsProps) {\n const [focusAreas, setFocusAreas] = useState([{ id: '', name: '', urgent: '' }]);\n const { funder } = useFunderContext();\n const { control, formState: { errors }, watch } = useFormContext();\n // const bankUrl = useWatch({ control, name: 'bank_url', defaultValue: user?.bank_url || \"\" })\n // Commented out until focus areas are in a multi select\n // const focusAreasSelected = watch('focusAreas', false);\n const invalidUrlMessage = 'Must be a valid url i.e. www.google.com or https://www.google.com';\n\n const sortFocus = (order: number) => {\n return user.userFocuses.map((userFocus) => {\n if (userFocus.order === order) return userFocus.focus_id;\n }).filter(focus => focus !== undefined)\n }\n\n // might not need to check against the context funder here, but leaving in as an extra safety measure. \n const isIndividualFunder = user?.funders?.find((fund) => fund.service_level === FunderServiceLevel.Individual);\n const funderBankUrl = funder?.bank_url;\n\n // const determineRequiredBank = (): boolean => {\n // if (bankField.checked) return false;\n // if (isIndividualFunder && bankField.requireBank) return true;\n // return false;\n // };\n\n useEffect(() => {\n FocusApiServices.get().then(response => {\n const focus = response.map((focus: IFocus) => {\n return {\n id: `${focus.id}`,\n name: `${focus.name}`,\n urgent: `${focus.urgent}`\n }\n })\n setFocusAreas(focus)\n });\n if (funderBankUrl && isIndividualFunder) return setUser({ bank_url: funderBankUrl, funder_id: funder?.id });\n }, []);\n\n return (\n <Grid container spacing={2}>\n {/* <Grid item xs={12} md={6}>\n <Typography variant=\"h6\">Fund Account Link{determineRequiredBank() === true ? '*' : ''}</Typography>\n <Controller\n name=\"bank_url\"\n control={control}\n defaultValue={user?.bank_url || \"\"}\n rules={{ required: determineRequiredBank(), pattern: { value: urlRegex, message: invalidUrlMessage } }}\n render={({ field }) =>\n <TextField\n fullWidth\n disabled={bankField.checked}\n variant=\"outlined\"\n defaultValue={user?.bank_url || \"\"}\n error={!!errors?.bank_url}\n helperText={!!errors?.bank_url && errors?.bank_url?.message}\n placeholder=\"ex: https://www.bankofamerica.com\"\n size=\"small\"\n InputProps={{ style: { fontSize: 16 } }}\n inputProps={{ tabIndex: 3 }}\n {...field}\n />\n }\n />\n </Grid> */}\n {\n // !hideOptOut() &&\n // <Grid item xs={12} sx={classes.checkbox}>\n // <Box display={'flex'}>\n // <Controller\n // name=\"activity_visibility\"\n // control={control}\n // render={({ field }) =>\n // <Checkbox\n // disabled={bankUrl}\n // defaultChecked={bankField.checked}\n // sx={classes.checkbox}\n // {...field}\n // onChange={() => setBankField({ ...bankField, checked: !bankField.checked, requireBank: false })}\n // />\n // }\n // />\n // <Typography variant='body2' textAlign={'left'} sx={classes.label}>I do not have / I do not wish to add a Fund Account Link</Typography>\n // </Box>\n // </Grid>\n }\n {\n // TODO: Uncomment\n // <Grid item xs={12}>\n // {/* TODO: Implement this functionality for Anynonmous funding in a separate ticket */}\n // {/* Do we want this for individual funders only? */}\n // <Typography variant=\"h6\" align=\"justify\">\n // Anonymous Preference {' '}\n // <Tooltip\n // title='Select whether you would like your name to appear as \"Anonymous\" to grantees and/or other funders. You will be able to see your own name on your commitments. You can also choose to update the name that is displayed when you mark a commitment.'>\n // <Box component='img' src={blueinfo} alt='more info' />\n // </Tooltip>\n // </Typography>\n // <FormControl>\n // <Controller\n // control={control}\n // name=\"anonymous_preference\"\n // defaultValue={0}\n // render={({ field }) =>\n // <RadioGroup\n // row={false}\n // aria-label=\"profile options\"\n // {...field}\n // >\n // <FormControlLabel\n // value={0}\n // onChange={(e) => setAnonymousSetting(parseInt(e.target.value))}\n // control={<Radio size=\"small\" color=\"primary\" />}\n // label={<Typography variant=\"body2\">Not Anonymous</Typography>}\n // />\n // <FormControlLabel\n // value={1}\n // onChange={(e) => setAnonymousSetting(parseInt(e.target.value))}\n // control={<Radio size=\"small\" color=\"primary\" />}\n // label={<Typography variant=\"body2\">Not Anonymous, Change my Display Name</Typography>}\n // />\n // <FormControlLabel\n // value={2}\n // onChange={(e) => setAnonymousSetting(parseInt(e.target.value))}\n // control={<Radio size=\"small\" color=\"primary\" />}\n // label={<Typography variant=\"body2\">Anonymous to Grantees Only</Typography>}\n // />\n // <FormControlLabel\n // value={3}\n // onChange={(e) => setAnonymousSetting(parseInt(e.target.value))}\n // control={<Radio size=\"small\" color=\"primary\" />}\n // label={<Typography variant=\"body2\">Anonymous to both Funders and Grantees</Typography>}\n // />\n // </RadioGroup>\n // }\n // />\n // </FormControl>\n // </Grid>\n }\n {/* {(anonymousSetting === UserVisibilityType.FALSE) ?\n <Grid item xs={12} md={6}>\n <Typography variant=\"h6\" align=\"justify\">Display Name*</Typography>\n <Controller\n name=\"display_name\"\n control={control}\n rules={(anonymousSetting === UserVisibilityType.FALSE) ? { required: requiredErrorMessage } : {}}\n render={({ field }) =>\n <TextField\n placeholder=\"Enter display name\"\n size=\"small\"\n fullWidth\n error={!!errors.display_name}\n helperText={!!errors.display_name && errors.display_name?.message}\n variant=\"outlined\"\n InputProps={{ style: { fontSize: 16 } }}\n inputProps={{ tabIndex: 3 }}\n {...field}\n />\n }\n />\n </Grid>\n : <Grid item xs={0} md={6}></Grid>\n } */}\n {/* <Grid item xs={12}>\n TODO: Finish implementing multiselect to replace dropdowns\n <Typography variant=\"h6\">Focus Areas</Typography>\n <Controller\n name=\"focusAreas\"\n control={control}\n defaultValue={[]}\n // defaultValue={funder.funderfocusAreas!.map((funderfocusArea) => funderfocusArea.focusArea_id)}\n render={({ field }) =>\n <Select\n // sx={classes.menuItem}\n {...field}\n variant=\"outlined\"\n size=\"small\"\n multiple\n fullWidth\n renderValue={(selected) => focusAreas ? _.truncate(renderSelections(selected, focusAreas), { 'length': 60 }) : []}\n >\n {focusAreas && focusAreas?.map((focusArea) => (\n <MenuItem\n disabled={(focusAreasSelected?.length === 3 && !focusAreasSelected?.includes(focusArea.id)) ? true : false}\n key={focusArea.id}\n value={focusArea.id}\n >\n <Checkbox checked={field.value.includes(focusArea.id)} />\n <ListItemText primary={_.truncate(focusArea.name)} />\n </MenuItem>\n ))}\n </Select>\n }\n />\n </Grid> */}\n <Grid item xs={0} md={6}></Grid>\n <Grid item xs={12}>\n <Typography variant=\"h5\">\n My Focus Area Interests {' '}\n <Tooltip\n title='Please choose your top three focus areas to create personalized proposal recommendations.'>\n <Box component='img' src={blueinfo} alt='more info' />\n </Tooltip>\n </Typography>\n </Grid>\n <Grid item xs={12} md={4}>\n <Typography variant=\"h6\">Focus Area 1</Typography>\n <Controller\n name=\"userFocuses[0].focus_id\"\n control={control}\n defaultValue={sortFocus(0) || \"none\"}\n render={({ field }) =>\n <Select\n sx={{ fontSize: '16px' }}\n size=\"small\"\n fullWidth\n variant=\"outlined\"\n {...field}\n >\n {focusAreas.map((focus) => {\n return (\n <MenuItem key={focus.id} value={focus.id} sx={{ fontSize: '16px' }}>\n {window.innerWidth < 900 ? _.truncate(focus.name, { 'length': 40 }) : focus.name}\n </MenuItem>\n )\n })}\n </Select>\n }\n />\n </Grid>\n <Grid item xs={12} md={4}>\n <Typography variant=\"h6\">Focus Area 2</Typography>\n <Controller\n name=\"userFocuses[1].focus_id\"\n control={control}\n defaultValue={sortFocus(1) || \"none\"}\n render={({ field }) =>\n <Select\n sx={{ fontSize: '16px' }}\n size=\"small\"\n fullWidth\n variant=\"outlined\"\n {...field}\n >\n {focusAreas.map((focus) => {\n return (\n <MenuItem key={focus.id} value={focus.id} sx={{ fontSize: '16px' }}>\n {window.innerWidth < 900 ? _.truncate(focus.name, { 'length': 40 }) : focus.name}\n </MenuItem>\n )\n })}\n </Select>\n }\n />\n </Grid>\n <Grid item xs={12} md={4}>\n <Typography variant=\"h6\">Focus Area 3</Typography>\n <Controller\n name=\"userFocuses[2].focus_id\"\n control={control}\n defaultValue={sortFocus(2) || \"none\"}\n render={({ field }) =>\n <Select\n sx={{ fontSize: '16px' }}\n size=\"small\"\n fullWidth\n variant=\"outlined\"\n {...field}\n >\n {focusAreas.map((focus) => {\n return (\n <MenuItem key={focus.id} value={focus.id} sx={{ fontSize: '16px' }}>\n {window.innerWidth < 900 ? _.truncate(focus.name, { 'length': 40 }) : focus.name}\n </MenuItem>\n )\n })}\n </Select>\n }\n />\n </Grid>\n </Grid>\n )\n}","import { Dispatch, SetStateAction, useEffect, useReducer, useState } from 'react';\nimport { Alert, Box, Button, Checkbox, Container, Grid, Typography } from '@mui/material';\nimport { IUser } from '../../../shared/interfaces/IUser.interface'\nimport { useMessagingContext } from '../../../shared/components/modals/Notification'\nimport { UserService } from '../../../shared/services/api-service/user-api.service';\nimport { useParams, useHistory } from 'react-router-dom';\nimport { FormProvider, useForm } from 'react-hook-form';\nimport { FetchPage } from '../../../shared/components/consumers';\nimport { RegisterUserDetails } from './RegisterUserDetails';\nimport { RegisterFunderDetails } from './RegisterFunderDetails';\nimport { FunderServiceLevel } from '../../../shared/enums/funder';\nimport { UserVisibilityType } from '../../../shared/enums/user.enum';\n\nconst classes = {\n root: {\n backgroundColor: '#fff',\n borderRadius: '10px',\n boxShadow: '0 0 15px 0 rgba(0,0,0,0.25)',\n },\n saveButton: {\n paddingBottom: '1em',\n justifyContent: 'flex-end',\n '@media (max-width: 900px)': {\n marginTop: '1.5em',\n justifyContent: 'center'\n }\n },\n label: {\n transform: \"translateY(0.5rem)\"\n },\n logoImg: {\n cursor: 'pointer',\n marginRight: '1em',\n marginBottom: '10px',\n height: '70px',\n width: 'auto'\n },\n checkbox: {\n marginRight: '10px',\n alignSelf: 'flex-start'\n }\n};\n\nexport function UserRegister() {\n const { id } = useParams<{ id: string }>();\n return <FetchPage url={`/api/users/${id}`} renderSuccess={data => <Profile userProfile={data} />} />;\n};\n\ninterface IUserProps {\n userProfile: IUser\n};\n\ninterface IBankProps {\n requireBank: boolean,\n checked: boolean,\n membersLength: number[]\n};\n\nconst bankObj: IBankProps = {\n requireBank: true,\n checked: false,\n membersLength: []\n};\n\nfunction Profile({ userProfile }: IUserProps) {\n const userObj = {\n ...userProfile,\n id: userProfile.id,\n first_name: userProfile.first_name,\n last_name: userProfile.last_name,\n email: userProfile.email,\n phone: userProfile.phone,\n bank_url: userProfile.bank_url,\n display_name: userProfile.display_name,\n is_admin: userProfile.is_admin\n };\n\n const [selectedPage, setSelectedPage]: [number, Dispatch<SetStateAction<number>>] = useState(1);\n const [privacyPolicy, setPrivacyPolicy] = useState<boolean>(false);\n const [requireBank, setRequireBank] = useState<boolean>(false);\n const [emailError, setEmailError] = useState<string>('');\n const [loading, setLoading] = useState<boolean>(false);\n const [anonymousSetting, setAnonymousSetting] = useState<number>(0);\n const [user, setUser] = useReducer(\n (user: IUser, newUser: any) => ({ ...user, ...newUser }),\n userObj\n );\n\n const { id: userId } = useParams<{ id: string }>();\n const { alertState, alertDispatch } = useMessagingContext();\n const history = useHistory();\n const isFunder = user.funderRoles.length;\n const isGrantee = user.grantees.length;\n\n const methods = useForm({\n shouldUnregister: false,\n mode: \"onBlur\",\n });\n\n const [bankField, setBankField] = useReducer(\n (bankField: IBankProps, setBankField: any) => ({ ...bankField, ...setBankField }),\n bankObj\n );\n\n const determineIndividual = (user: IUser): boolean => {\n const isIndividual = user?.funders?.find((fund) => fund.service_level === FunderServiceLevel.Individual);\n return isIndividual;\n };\n\n const individualOnly = (user: IUser): boolean => {\n const onlyIndivudal = !user?.funders?.find((fund) => fund.service_level !== FunderServiceLevel.Individual);\n return onlyIndivudal;\n };\n\n const isIndividualFunder = determineIndividual(user);\n const isIndividualOnly = individualOnly(user);\n\n const hideOptOut = (): boolean => {\n if (!isIndividualFunder) {\n setRequireBank(false);\n return true\n };\n if (isIndividualFunder && isIndividualOnly) {\n setRequireBank(true);\n return true\n };\n if (isIndividualFunder && !isIndividualOnly) {\n setRequireBank(true);\n return false;\n };\n return false;\n };\n\n const getUser = async () => {\n try {\n if (!userId) return;\n setLoading(true);\n const retrieved = await UserService.getById(parseInt(userId, 10));\n setUser({ ...retrieved, location: { ...retrieved?.locations?.[0], location_id: retrieved?.locations?.[0]?.id } });\n } catch (exc) {\n console.error(exc)\n alertState.showError({ title: 'Something went wrong!', message: 'Unable to get user.' })\n } finally {\n setLoading(false);\n };\n };\n\n useEffect(() => {\n getUser();\n }, []);\n\n const validateEmail = async (formEmail: string) => {\n setEmailError('');\n if (userObj?.email === formEmail) {\n return true;\n };\n const validEmail = await UserService.checkEmail(formEmail);\n if (!validEmail) {\n setEmailError(`${formEmail} email is already in use, please choose another`);\n return false;\n };\n };\n\n const checkFields = (user: any) => {\n const { first_name, last_name, email, phone, role_title, bank_url } = user;\n if (!isFunder && (first_name && last_name && email && phone && role_title)) {\n return true;\n } else if ((isFunder && (first_name && last_name && email && phone && role_title))) {\n return true;\n } else {\n alertDispatch({ type: 'UPDATE', data: { title: 'Something went wrong!', message: 'This form is not valid', severity: 'error' } })\n console.error('This form is not valid');\n return false;\n };\n };\n\n const onSubmit = async (formData: any) => {\n try {\n // Set focuses\n let userData = formData;\n if (userData.userFocuses?.length) {\n userData.userFocuses = userData.userFocuses.map((focus: { focus_id: string }, index: number) => {\n return {\n focus_id: focus.focus_id,\n order: index\n }\n }).filter((focus: { focus_id: string }) => !!focus.focus_id && focus.focus_id !== 'none' && !!focus.focus_id?.length);\n };\n // Check required focuses - Not Required currently\n // if (isFunder && userData.userFocuses.length !== 3) return;\n // Check required fields\n if (!checkFields(userData)) return;\n // Check if email used / valid\n const validEmail = validateEmail(userData.email);\n if (!validEmail) return;\n if (anonymousSetting !== UserVisibilityType.FALSE && userData.display_name) delete userData.display_name;\n // Send formData to API to edit user\n await UserService.register(userData);\n history.push('/justfund/signin');\n } catch (err) {\n console.error(err);\n alertDispatch({ type: 'UPDATE', data: { title: 'Something went wrong!', message: 'This form is not valid', severity: 'error' } });\n };\n };\n\n const handleNext = async () => {\n const isValid = await methods.trigger();\n isValid && setSelectedPage(2);\n }\n\n return (\n <Grid container xs={12} sm={6} md={8} display='flex' flexDirection='column' minHeight='100vh' marginX='auto'>\n <Box margin='1em'>\n <Box component='img'\n src='/images/justfund.svg'\n height='70px'\n width='auto'\n alt='JustFund logo'\n sx={classes.logoImg}\n />\n <Typography paragraph gutterBottom>\n Welcome to JustFund! Please confirm your account by filling in the required fields below and clicking Save. You can update your Profile information at any time after your registration is complete.\n </Typography>\n </Box>\n {loading ? <Typography>Loading...</Typography> :\n <Box component='form' onSubmit={methods.handleSubmit(onSubmit, (val) => {\n alertDispatch({ type: 'UPDATE', data: { title: 'Something went wrong!', severity: 'error' } })\n console.error('Something went wrong');\n })}>\n <FormProvider {...methods}>\n <Container sx={classes.root}>\n {(selectedPage === 1) &&\n <RegisterUserDetails setUser={setUser} user={user} emailError={emailError} />\n }\n {isFunder && (selectedPage === 2) ?\n <RegisterFunderDetails setUser={setUser} user={user} /> :\n <></>\n }\n <Box display={'flex'} sx={{ width: '90%', marginTop: '2em' }}>\n <Checkbox sx={classes.checkbox} checked={privacyPolicy} onChange={({ target }) => setPrivacyPolicy(target.checked)} />\n <Typography variant='body2' textAlign={'left'} sx={classes.label}>\n By checking this box, I represent that I have reviewed and agree to\n the <Box component='a' href='https://justfund.us/terms-of-use/' target={'_blank'} rel=\"noreferrer\">Justfund Terms of Service</Box> and {\" \"}\n <Box component='a' href='https://justfund.us/privacy-policy/' target={'_blank'} rel=\"noreferrer\">Privacy Policy</Box>\n </Typography>\n </Box>\n <Grid container sx={classes.saveButton}>\n {isFunder && (selectedPage === 1) ?\n <Button variant='contained' type=\"button\" onClick={handleNext}>Next</Button> :\n <Box>\n {!isGrantee && <Button variant='outlined' type=\"button\" sx={{ marginRight: '1em' }} onClick={() => setSelectedPage(1)}>Back</Button>}\n <Button disabled={!privacyPolicy} variant='contained' type=\"submit\">Save</Button>\n </Box>\n }\n </Grid>\n </Container>\n </FormProvider>\n </Box>\n }\n </Grid>\n )\n}\n","import React, { Suspense, useEffect } from 'react';\nimport './App.css';\nimport { App as Start } from './start/components/app/App';\nimport { App as Public } from './public/components/app/App';\nimport { PublicRoutes } from './public/components/publicRoutes/PublicRoutes';\nimport { jfTheme } from './styles/jf.theme';\nimport { Notification, NotificationProvider } from './shared/components/modals/Notification';\nimport { AlertComponent } from './shared/components/modals/Alert';\nimport { StyledEngineProvider } from '@mui/material/styles';\nimport { LicenseInfo } from '@mui/x-data-grid-pro';\nimport { Route, Switch, useLocation } from 'react-router-dom';\nimport { LoadingPage } from './shared/components/LoadingPage';\nimport { createTheme as createMUITheme, ThemeProvider as MUIThemeProvider, Theme } from \"@mui/material\";\nimport { StylesProvider } from '@mui/styles';\nimport { LocalizationProvider } from '@mui/x-date-pickers';\nimport { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFns';\nimport { HubspotService } from './shared/services';\nimport { UserRegister } from './admin/manage/user-logins/UserRegister';\nimport UserProvider from './group/providers/UserProvider';\nimport AdminProvider from './admin/providers/adminProvider.provider';\nimport FunderProvider from './funder/providers/UserProvider';\nimport { ToastContainer } from 'react-toastify';\nimport 'react-toastify/dist/ReactToastify.css';\ndeclare module '@mui/styles/defaultTheme' {\n // eslint-disable-next-line @typescript-eslint/no-empty-interface\n interface DefaultTheme extends Theme { }\n}\n\n// Key for DataGridPro\nLicenseInfo.setLicenseKey(process.env.REACT_APP_MUI_DATAGRID_LICENSE as string);\n\nconst Group = React.lazy(() => import('./group/components/app/App'));\nconst Funder = React.lazy(() => import('./funder/components/app/App'));\nconst Admin = React.lazy(() => import('./admin/Admin'));\n\n// build theme\n// const theme = createTheme();\nconst MUITheme = createMUITheme(jfTheme);\n\n// https://cssinjs.org/jss-api/?v=v10.9.0#generate-your-class-names\nconst generateClassName = () => {\n const randomInt = () => crypto.getRandomValues(new Uint16Array(1))[0];\n return (rule: any, sheet: any) => `JF-${rule.key}-${randomInt()}`;\n}\n\nfunction App() {\n const location = useLocation();\n\n useEffect(() => {\n HubspotService.recordPageView();\n window.gtag(\"event\", \"page_view\", {\n page_path: location.pathname + location.search + location.hash,\n page_search: location.search,\n page_hash: location.hash,\n });\n }, [location]);\n\n return (\n <StylesProvider generateClassName={generateClassName()}>\n <StyledEngineProvider injectFirst={true}>\n {/* Required per https://mui.com/guides/interoperability/#css-injection-order-2 */}\n <MUIThemeProvider theme={MUITheme}>\n {/* <CssBaseline /> */}\n {/* <ThemeProvider theme={theme}> */}\n <LocalizationProvider dateAdapter={AdapterDateFns}>\n <NotificationProvider>\n <AlertComponent />\n <ToastContainer\n icon={false}\n />\n <Switch>\n <Route path=\"/o\">\n <UserProvider>\n <Suspense fallback={\n <LoadingPage\n message={'Loading...'}\n error={null}\n />\n }>\n <Group />\n </Suspense>\n </UserProvider>\n </Route>\n <Route path=\"/admin\">\n <AdminProvider>\n <Suspense fallback={<LoadingPage\n message={'Loading...'}\n error={null}\n />}>\n <Admin />\n </Suspense>\n </AdminProvider>\n </Route>\n <Route path=\"/f\">\n <FunderProvider>\n <Suspense fallback={<LoadingPage\n message={'Loading...'}\n error={null}\n />}>\n <Funder />\n </Suspense>\n </FunderProvider>\n </Route>\n <Route path=\"/p\">\n <Public />\n </Route>\n <Route path=\"/publicprofile/:profileid\">\n <PublicRoutes />\n </Route>\n <Route path='/register/:id'>\n <UserRegister />\n </Route>\n <Route path=\"/\">\n <Start />\n </Route>\n </Switch>\n <Notification />\n </NotificationProvider>\n </LocalizationProvider>\n {/* </ThemeProvider> */}\n </MUIThemeProvider>\n </StyledEngineProvider >\n </StylesProvider>\n );\n}\n\nexport default App;\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport App from './App';\nimport './index.css';\nimport { BrowserRouter } from 'react-router-dom';\n\n\nReactDOM.render(\n <React.StrictMode>\n <BrowserRouter>\n <App />\n </BrowserRouter>\n </React.StrictMode>,\n document.getElementById('root')\n);\n","import { EnumInterpreter } from \"../classes/Interpreter\";\n\nexport enum OrgStatus {\n ARCHIVED = 0,\n ACTIVE = 1,\n}\n\nexport enum ConsolidatedStatus {\n ARCHIVED = 0,\n ACTIVE = 1,\n ACTIVE_UNPAID = 2,\n ACTIVE_CANCELED = 3\n}\n\nexport const FunderStatusInterpreter = new EnumInterpreter<ConsolidatedStatus>(new Map([\n [ConsolidatedStatus.ACTIVE, 'Active'],\n [ConsolidatedStatus.ARCHIVED, 'Archived'],\n [ConsolidatedStatus.ACTIVE_UNPAID, 'Active - Unpaid'],\n [ConsolidatedStatus.ACTIVE_CANCELED, 'Active - Canceled']\n]));\n ","export enum BipocLed {\n NO = 0,\n YES = 1,\n NOTSURE = 2\n}\n\nexport const BipocLedOptions = [\n { value: BipocLed.YES, label: 'Yes' },\n { value: BipocLed.NO, label: 'No' },\n { value: BipocLed.NOTSURE, label: 'Not Sure' }\n];\n","import { createTheme } from '@mui/material/styles';\nimport type { } from '@mui/x-date-pickers/themeAugmentation';\n\nexport const jfTheme = createTheme(({\n palette: {\n primary: {\n main: '#091b30',\n contrastText: '#fdfbe4',\n },\n secondary: {\n main: '#e61436',\n contrastText: '#fdfbe4',\n light: '#0A61B0'\n },\n background: {\n paper: '#f7f7f7',\n default: '#f7f7f7',\n },\n warning: {\n main: '#E0611D',\n contrastText: '#fdfbe4',\n },\n info: {\n main: '#5d5f73',\n },\n },\n typography: {\n fontFamily: 'Proxima Nova, sans-serif',\n fontSize: 20,\n h1: {\n fontWeight: 900,\n fontSize: 54,\n },\n h2: {\n fontWeight: 900,\n fontSize: 40,\n },\n h3: {\n fontWeight: 900,\n fontSize: 30,\n },\n h4: {\n fontWeight: 700,\n fontSize: 26,\n },\n h5: {\n fontWeight: 600,\n fontSize: 22,\n },\n h6: {\n fontWeight: 600,\n fontSize: 16,\n },\n body1: {\n fontSize: 20,\n },\n body2: {\n fontSize: 16,\n },\n caption: {\n fontSize: 14,\n },\n button: {\n fontSize: '1rem',\n fontWeight: 700,\n },\n subTitle: { \n color: '#616161', \n fontSize: 14,\n fontWeight: 400,\n lineHeight: '20px',\n margin: 0,\n },\n\n },\n components: {\n MuiOutlinedInput: {\n styleOverrides: {\n input: {\n backgroundColor: '#ffffff',\n }\n }\n },\n MuiInputLabel: {\n styleOverrides: {\n root: {\n color: '#000000',\n fontSize: '16px'\n },\n standard: {\n position: 'relative',\n fontFamily: '\"Proxima Nova\", sans-serif',\n fontWeight: 600,\n fontSize: 16,\n lineHeight: 1.6,\n transform: 'unset'\n }\n }\n },\n MuiFilledInput: {\n styleOverrides: {\n input: {\n backgroundColor: '#ffffff',\n '&:focus': {\n backgroundColor: '#fcffff',\n },\n },\n multiline: {\n backgroundColor: '#ffffff',\n '&:hover': {\n backgroundColor: '#ffffff',\n },\n '&:focus': {\n backgroundColor: '#fcffff',\n },\n },\n adornedStart: {\n backgroundColor: '#fafafa',\n },\n adornedEnd: {\n backgroundColor: '#fafafa',\n },\n }\n },\n MuiSelect: {\n styleOverrides: {\n select: {\n '&:focus': {\n backgroundColor: '#fcffff',\n },\n },\n }\n },\n MuiButton: {\n styleOverrides: {\n contained: {\n backgroundColor: '#3E86C7'\n },\n outlined: {\n border: '2px solid black',\n '&:hover': {\n border: '2px solid black',\n }\n },\n containedPrimary: {\n backgroundColor: '#3E86C7'\n },\n root: {\n '&.MuiButton-containedPrimary': {\n backgroundColor: '#3E86C7'\n },\n '&.MuiButton-containedSecondary:hover': {\n backgroundColor: '#24659E'\n },\n '&.MuiButton-outlinedSecondary:hover': {\n boxShadow: \"0px 2px 4px -1px rgba(0,0,0,0.2), 0px 4px 5px 0px rgba(0,0,0,0.14), 0px 1px 10px 0px rgba(0,0,0,0.12)\",\n borderColor: '#24659E',\n color: '#4288C5',\n backgroundColor: 'inherit'\n }\n },\n containedSecondary: {\n backgroundColor: '#4288C5',\n textTransform: \"none\",\n borderRadius: \"50px\",\n boxShadow: 'none',\n },\n outlinedSecondary: {\n borderRadius: \"50px\",\n boxShadow: 'none',\n textTransform: \"none\",\n borderColor: '#4288C5',\n color: '#4288C5'\n }\n }\n },\n MuiStepIcon: {\n styleOverrides: {\n root: {\n '&$completed': {\n color: '#754482',\n },\n '&$active': {\n color: '#fdab3e',\n },\n },\n }\n },\n MuiAppBar: {\n styleOverrides: {\n colorPrimary: {\n backgroundColor: '#ffffff',\n },\n root: {\n '&.MuiAppBar': { \n backgroundColor: '#fff'\n }\n }\n }\n },\n MuiCard: {\n styleOverrides: {\n root: {\n fontSize: '16px',\n },\n }\n },\n MuiTypography: {\n defaultProps: {\n fontFamily: \"Proxima Nova, sans-serif\"\n }\n },\n MuiCssBaseline: {\n styleOverrides: {\n fontFamily: \"Proxima Nova, sans-serif\"\n }\n }\n },\n}))\n","import { Avatar, AvatarGroup, Button, Divider, Grid, Typography, styled } from '@mui/material'\n\nexport const ProfileCardWrapper = styled(Grid)`\n & .MuiTypography-root {\n color: #515660;\n }\n`\n\nexport const ProfileCardTitle = styled(Typography)`\n display: -webkit-box;\n overflow: hidden;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 1;\n color: black !important;\n`\n\nexport const ProfileCardFocusesWrapper = styled(Grid)`\n min-height: 42px;\n`\n\nexport const ProfileCardDescriptionWrapper = styled(Grid)`\n height: 51px;\n margin: 12px 0px;\n color: #757575;\n`\n\nexport const ProfileCardDescription = styled(Typography)`\n overflow: hidden;\n display: -webkit-box;\n -webkit-line-clamp: 3; /* number of lines to show */\n line-clamp: 3;\n -webkit-box-orient: vertical;\n font-size: 14px;\n font-weight: 500;\n line-height: normal;\n color: #757575 !important;\n`\n\nexport const ProfileCardDividiver = styled(Divider)`\n width: 100%;\n border-color: '#E7E7E7';\n`\n\nexport const FundButton = styled(Button)`\n border-radius: 29px;\n background-color: #4288C5;\n color: #FFF;\n font-weight: 600;\n font-size: 14px;\n padding: 3px 18px;\n margin-right: 3px;\n line-height: 1.5;\n\n &:hover {\n background-color: #24659e;\n }\n`\n\nconst commonAvatarProps = `\n background-color: #DBE4F3;\n color: #7C94BD;\n font-weight: 500;\n`\n\nexport const FundersAvatarGroup = styled(AvatarGroup)`\n .MuiAvatar-root {\n ${commonAvatarProps}\n border: none;\n height: 26px;\n width: 26px;\n font-size: 14px;\n }\n`\n\nexport const ProfileCardTitleAvatar = styled(Avatar)`\n ${commonAvatarProps}\n height: 64px;\n width: 64px;\n font-size: 16px;\n`","import DOMPurify from 'dompurify';\nimport styled from 'styled-components';\nimport { cleanIndentHTML } from '../../../shared/util/util';\n\ninterface IJFReadOnlyTextFieldProps {\n value?: string;\n isHtml?: boolean;\n dataTestId?: string;\n}\n\nconst StyledDiv = styled.div`\n white-space: normal;\n font-size: 16px;\n\n p {\n margin: 0px 0px;\n }\n`;\n\nconst JFReadOnlyTextField = (props: IJFReadOnlyTextFieldProps) => {\n const { value = \"\", isHtml = false, dataTestId = \"\" } = props;\n\n const htmlValue = value ? DOMPurify.sanitize(value, { ADD_ATTR: ['target'] }) : ''\n const processedHtmlValue = cleanIndentHTML(htmlValue);\n\n\n if (isHtml) {\n return (\n <StyledDiv data-testid={dataTestId}\n dangerouslySetInnerHTML={{\n __html: processedHtmlValue\n }}\n />\n );\n }\n\n return (\n <div style={{ whiteSpace: 'pre-wrap', fontSize: '16px' }}>{value}</div>\n );\n};\n\nexport default JFReadOnlyTextField;\n\n","export enum SurveyType {\n CYCLE,\n GENERAL\n}\n\nexport enum SurveyStatus {\n ACTIVE,\n INACTIVE\n}\n\nexport enum SurveyQuestionType {\n OPEN,\n SINGLE,\n MULTIPLE,\n RATING\n}\n\nexport enum SurveyQuestionGetter {\n QUESTION_DELETE = 'deleteQuestion',\n QUESTION_DESCRIPTION = 'description',\n QUESTION_HASH = 'hash',\n QUESTION_ID = 'id',\n QUESTION_PAYLOAD = 'payload',\n QUESTION_REQUIRED = 'is_required',\n QUESTION_TYPE = 'type',\n SUPPLEMENTARY_QUESTIONS = 'questions',\n SURVEY_DELETE = 'deleteSurvey'\n}\n","import axios, { AxiosResponse } from \"axios\";\nimport { UserAuthService } from \"./user-auth-api.service\";\n\n/**\n * This file doesn't do much. It's just a wrapper for axios that only exists to:\n * 1 - Set the base URL on axios from environment vars\n * 2 - Stuff the `Authorization` header in before a request goes out\n * 3 - Maybe other stuff later\n */\naxios.defaults.baseURL = process.env.REACT_APP_API_BASE_URL;\n\n\n// add an interceptor to check for a `response` in the error and throw that if it exists\naxios.interceptors.response.use(\n response => response,\n error => {\n console.error(error)\n if (error.response && error.response.data) {\n return Promise.reject(error.response.data);\n }\n return Promise.reject(error);\n }\n);\n\n// Secondary usage of axios in case we need one without auth headers .. i.e. for login.\nexport const axiosService = axios;\n\n// Export our custom axios instance with auth headers added\nexport const api = axios.create({\n // baseURL: \"/api\",\n timeout: 60 * 1000\n});\n\napi.interceptors.request.use(async (config) => {\n \n let token = UserAuthService.token;\n\n if (UserAuthService.tokenIsExpired() && token !== null && !config.url?.includes('api/auth/refresh') && !config.url?.includes('api/auth/login')) {\n await UserAuthService.exchangeToken();\n token = UserAuthService.token;\n }\n \n const { entityType, entityId } = UserAuthService.getEntity();\n const newConfig = {\n ...config,\n }\n\n if (!newConfig.headers) newConfig.headers = {};\n\n newConfig.headers.Authorization = `Bearer ${token}`;\n newConfig.headers['entity-type'] = entityType || '';\n newConfig.headers['entity-id'] = entityId || '';\n\n return newConfig;\n}, (exc) => Promise.reject(exc));\n\napi.interceptors.response.use((res: AxiosResponse) => {\n return res\n}, (err) => {\n return Promise.reject(err);\n});\n","import React, { createContext, useCallback, useContext, useEffect, useMemo, useReducer, useState } from 'react';\nimport _ from \"lodash\";\nimport { ILoginFunder } from '../../shared/interfaces/IFunder';\nimport { IUserAssociations } from '../../shared/interfaces/IUserAssociations.interface';\nimport { IUser } from '../../shared/interfaces/IUser.interface';\nimport { FunderService } from '../../shared/services/api-service/funder-api.service';\nimport { UserAuthService } from '../../shared/services/api-service/user-auth-api.service';\nimport { UserService } from '../../shared/services/api-service/user-api.service';\nimport { FunderServiceLevel, FunderUserRole } from '../../shared/enums/funder/funder-enums';\nimport { BookmarkService } from '../../shared/services/api-service/bookmark.service';\nimport { BookmarkEntityType } from '../../shared/enums/bookmark.enum';\nimport { hotjarService } from '../../shared/services/hotjar-service/hotjar.service';\nimport { UserEntityType } from '../../shared/enums/user.enum';\nimport { useCancellableEffect } from '../../shared/hooks/useCancellableEffect';\nimport { HubspotService } from '../../shared/services';\nimport { FollowsProvider } from '../../shared/providers/follows.provider';\nimport RealtimeProvider from '../../shared/providers/realtime.provider';\nimport { groupWithAppcues, identifyUserWithAppcues } from '../../shared/util/appcuesIntegration';\nimport { Utils } from '../components/grantCycles/GrantRequestForm/utils';\nimport { ISummaryMemberResult } from '../../shared/services/api-service/analyze-api.service';\nimport { GranteeUserRole } from '../../shared/enums/grantee.enum';\n\ndeclare global {\n interface Window {\n Appcues: any;\n }\n}\ndeclare global {\n interface Window {\n AppcuesSettings: any;\n }\n}\n\ntype UserContextProvider = {\n associations: IUserAssociations | null;\n selectFunder: (id: number) => void;\n funder: ILoginFunder | null;\n user: IUser | null;\n markFundingPermissions: () => boolean;\n discoverProposalsPermissions: () => boolean;\n bookmarkCount: number;\n hasRole: (funderUserRole: FunderUserRole) => boolean;\n refreshBookmarkCount: () => void;\n isScoreManager: () => boolean;\n hasScoringPermissions: () => boolean;\n hasTempManPermissions: () => boolean;\n isIndividualFindFund: boolean;\n hasAllowedCheckIn: boolean;\n memberships: ISummaryMemberResult[];\n setMemberships: React.Dispatch<React.SetStateAction<ISummaryMemberResult[]>>;\n};\n\nconst FunderContext = createContext<UserContextProvider>({\n associations: null,\n selectFunder: () => {},\n funder: null,\n user: null,\n markFundingPermissions: () => false,\n discoverProposalsPermissions: () => false,\n bookmarkCount: 0,\n hasRole: () => false,\n refreshBookmarkCount: () => {},\n // setFunder: null,\n isScoreManager: () => false,\n hasScoringPermissions: () => false,\n isIndividualFindFund: false,\n hasTempManPermissions: () => false,\n hasAllowedCheckIn: false,\n memberships: [],\n setMemberships: () => {}\n});\n\nexport const useFunderContext = () => useContext(FunderContext);\n\nconst allowedScoringAndTempManServiceLevels = [\n FunderServiceLevel.Enterprise,\n FunderServiceLevel.FullService,\n FunderServiceLevel.Standard,\n FunderServiceLevel.Premium,\n FunderServiceLevel.Basic\n];\n\nexport default function FunderProvider({\n children\n}: {\n children: React.ReactNode;\n}) {\n const [user, setUser] = useState({} as IUser);\n const [loading, setLoading] = useState(true);\n const [bookmarkCount, setBookmarkCount] = useState(0);\n const [funder, setFunder] = useState({} as ILoginFunder);\n const [associations, setAssociations] = useState<IUserAssociations | null>(\n null\n );\n const [memberships, setMemberships] = useState<ISummaryMemberResult[]>([]);\n const [bookmarkChange, refreshBookmarkCount] = useReducer((state) => {\n return state + 1;\n }, 0);\n\n const initializeContext = useCallback(() => {\n const { entityType, entityId } = UserAuthService.getEntity();\n if (entityType && parseInt(entityType, 10) === UserEntityType.FUNDER) {\n selectFunder(parseInt(entityId!, 10));\n } else {\n console.log('logging out');\n UserAuthService.logout(true);\n return;\n }\n }, []);\n\n const selectFunder = async (id: number) => {\n const newFunder = await FunderService.getContextFunder(id);\n setFunder(newFunder);\n // this is a bandaid. Should really run through our context tree(s) with a fine toothed comb, and see what fat can be cut.\n // We call context a lot uncessarily, especially this 'verifyUser' function, which by side effect calls selectFunder.\n // Removing this re-route for now, maybe added later as a TODO\n // if (newFunder.invitedEvents.length > 0 && !location.pathname.includes('/f/proposals')) {\n // history.push('/f/events');\n // }\n return;\n };\n\n const scoringAndTempManEnabled = useMemo(\n () => allowedScoringAndTempManServiceLevels.includes(funder.service_level),\n [funder]\n );\n\n const isScoreManager = () =>\n scoringAndTempManEnabled && hasRole(FunderUserRole.MARK_FUNDING);\n\n const hasScoringPermissions = () =>\n scoringAndTempManEnabled &&\n (hasRole(FunderUserRole.MARK_FUNDING) || user?.hasScoring);\n\n const hasTempManPermissions = () =>\n scoringAndTempManEnabled &&\n (hasRole(FunderUserRole.MARK_FUNDING) || user?.hasTemplateManagement);\n\n const hasRole = (funderUserRole: FunderUserRole): boolean => {\n return (\n user?.funderRoles?.some(\n (role) =>\n role.role_id === funderUserRole && role.funder_id === funder?.id\n ) || false\n );\n };\n\n const isIndividualFindFund =\n funder?.service_level === FunderServiceLevel['IndividualFind&Fund'];\n\n const hasAllowedCheckIn = Utils.allowedCheckInFeatures(funder?.service_level);\n\n /**\n * @deprecated\n * @returns\n */\n const markFundingPermissions = () => {\n const markFunding = user?.funderRoles?.filter(\n (r) => r.funder_id === funder?.id\n );\n return markFunding\n ? markFunding.some((r) => r.role_id === FunderUserRole.MARK_FUNDING)\n : false;\n };\n\n /**\n * @deprecated\n * @returns\n */\n\n // TODO - this isn't used anywhere yet, need API update to integrate Discover Proposals permissions.\n /**\n * @deprecated\n * @returns\n */\n const discoverProposalsPermissions = () => {\n const discoverProposals = user?.funderRoles?.filter(\n (r) => r.funder_id === funder?.id\n );\n return discoverProposals\n ? discoverProposals.some(\n (r) => r.role_id === FunderUserRole.DISCOVER_PROPOSALS\n )\n : false;\n };\n\n useEffect(() => {\n UserAuthService.verifyLogin().then(async (loginVerification) => {\n const userId = loginVerification.user.id;\n hotjarService.userId = userId;\n HubspotService.identifyUser(loginVerification.user?.email!);\n const associationsResponse = UserAuthService.getAssociations(userId).then(\n (userAssociations) => {\n setAssociations(userAssociations);\n hotjarService.hasGranteeAssociations =\n !!userAssociations?.grantees &&\n userAssociations.grantees.length > 0;\n hotjarService.hasFunderAssociations =\n !!userAssociations?.funders && userAssociations.funders.length > 0;\n }\n );\n const userResponse = UserService.getById(userId).then((jfUser) => {\n setUser(jfUser);\n hotjarService.userEmail = jfUser.email!;\n });\n Promise.all([associationsResponse, userResponse]).then(() =>\n setLoading(false)\n );\n });\n }, []);\n\n useEffect(() => {\n initializeContext();\n }, [initializeContext]);\n\n useEffect(() => {\n if (!_.isEmpty(funder) && !_.isEmpty(user)) {\n const searchList = [\n FunderUserRole.MARK_FUNDING,\n FunderUserRole.DISCOVER_PROPOSALS,\n FunderUserRole.MANAGE_PROFILE,\n FunderUserRole.MANAGE_USERS,\n FunderUserRole.MANAGE_GRANTS\n ];\n\n const funderId = funder.id;\n\n const exists = user?.funderRoles\n ?.filter((item) => item.funder_id === funderId)\n .filter((item) => searchList.includes(item.role_id as FunderUserRole));\n\n // Define a mapping of role IDs to functions\n const roleActions = (role: FunderUserRole | GranteeUserRole) => {\n switch (role) {\n case FunderUserRole.MARK_FUNDING:\n return { marking_funding: true };\n case FunderUserRole.DISCOVER_PROPOSALS:\n return { discover: true };\n case FunderUserRole.MANAGE_PROFILE:\n return { manage_profile: true };\n case FunderUserRole.MANAGE_USERS:\n return { manage_users: true };\n case FunderUserRole.MANAGE_GRANTS:\n return { manage_grants: true };\n default:\n return {};\n }\n };\n\n // Find the first matching role and execute its associated function\n const matchingRole = exists?.filter((item) => roleActions(item.role_id));\n\n const roles = matchingRole?.reduce(\n (acc, role) => {\n const actionResult = roleActions(role.role_id);\n return {\n ...acc,\n ...actionResult\n };\n },\n {\n marking_funding: false,\n discover: false,\n manage_profile: false,\n manage_users: false,\n manage_grants: false\n }\n );\n\n identifyUserWithAppcues(user, funder, roles);\n\n // Group ID grantee\n groupWithAppcues({\n id: `u${user.id}g${funder.grantee_id}`,\n name: funder?.grantee?.name,\n service_level: funder?.grantee?.service_level,\n created_at: funder?.grantee?.created_at,\n type: 'Grantee'\n });\n\n // Group ID funder\n groupWithAppcues({\n id: `u${user.id}f${funder.id}`,\n name: funder.name,\n service_level: funder.service_level,\n created_at: funder.created_at,\n type: 'Funder'\n });\n }\n }, [funder, user]);\n\n useCancellableEffect(\n (signal) => {\n BookmarkService.getCount({\n params: {\n bookmarkTypes: [\n BookmarkEntityType.FUNDER,\n BookmarkEntityType.GRANTEE,\n BookmarkEntityType.PROPOSAL,\n BookmarkEntityType.COMMON_APPLICATION\n ]\n },\n signal\n }).then((result) => {\n setBookmarkCount(result.count);\n });\n },\n [bookmarkChange]\n );\n\n return (\n <FunderContext.Provider\n value={{\n associations,\n selectFunder,\n user: user,\n funder: funder,\n markFundingPermissions,\n discoverProposalsPermissions,\n bookmarkCount,\n refreshBookmarkCount,\n hasRole,\n isScoreManager,\n hasScoringPermissions,\n isIndividualFindFund,\n hasTempManPermissions,\n hasAllowedCheckIn,\n memberships,\n setMemberships\n }}\n >\n <RealtimeProvider user={user}>\n <FollowsProvider user={user}>\n {!loading ? children : null}\n </FollowsProvider>\n </RealtimeProvider>\n </FunderContext.Provider>\n );\n}\n","export enum UserEntityType {\n USER = 1,\n FUNDER = 2,\n GRANTEE = 4\n}\n\nexport enum UserVisibilityType {\n TRUE = 0,\n FALSE = 1\n}","export enum UserStatus {\n INACTIVE = 0,\n ACTIVE = 1,\n SUSPENDED = 2,\n DELETED = 3,\n UNREGISTERED = 4,\n INVITED = 5\n}","declare global {\n interface Window {\n hj: Function\n }\n}\n\ninterface userAttributes {\n email?: string,\n user_type_grantee?: boolean,\n user_type_funder?: boolean\n}\n\nclass HotjarService {\n\n private _userId: number | null = null;\n\n constructor(private hotjarClient = window.hj!) {}\n\n private updateUserAttributes(attributes: userAttributes): void {\n this.hotjarClient('identify', this._userId, attributes);\n }\n\n public set userId(id: number) {\n this._userId = id;\n }\n\n public set userEmail(email: string) {\n this.updateUserAttributes({ email });\n }\n\n public set hasGranteeAssociations(hasGranteeAssociations: boolean) {\n this.updateUserAttributes({ user_type_grantee: hasGranteeAssociations });\n }\n\n public set hasFunderAssociations(hasFunderAssociations: boolean) {\n this.updateUserAttributes({ user_type_funder: hasFunderAssociations })\n }\n}\n\nexport const hotjarService = new HotjarService();","import { Close } from \"@mui/icons-material\";\nimport { Avatar, Box, Drawer, Grid, styled } from \"@mui/material\";\nimport { Link } from \"react-router-dom\";\nimport { jfTheme } from \"../../../../../styles/jf.theme\";\n\nexport const ProfileCardTitleAvatar = styled(Avatar)({\n backgroundColor: '#DBE4F3',\n color: '#7C94BD',\n fontWeight: 500,\n height: '50px',\n width: '50px',\n marginRight: '8px',\n fontSize: '24px',\n});\n\nexport const TitleContainer = styled(Grid)({\n borderBottom: '1px solid #EEEEEE',\n padding: '20px',\n});\n\nexport const InfoContainer = styled(Box)({\n backgroundColor: '#EFF5F9',\n padding: '16px',\n borderRadius: '8px',\n margin: '16px 0px',\n});\n\nexport const CloseButton = styled(Close)({\n width: '20px',\n height: '20px',\n cursor: 'pointer',\n});\n\nexport const Container = styled(Grid)({\n justifyContent: 'center',\n maxHeight: '85vh',\n overflow: 'scroll',\n padding: '0px 24px',\n marginTop: '6px',\n});\n\nexport const DrawerBox = styled(Box)({\n width: '640px',\n overflow: 'hidden',\n});\n\nexport const CustomLink = styled(Link)({\n color: jfTheme.palette.secondary.light,\n});\n\nexport const CustomDrawer = styled(Drawer)({\n zIndex: 9999,\n});","export enum ECommitmentType {\n ON_BEHALF_GRANT_CYCLE = 0,\n ON_BEHALF_FUNDER = 2\n}\n\nexport enum ECommitmentReason {\n NONE = 0,\n GENERAL = 1,\n PROGRAM_SUPPORT = 2,\n OTHER = 3\n}\n\nexport enum EFundOrigin {\n PROPOSAL = 0,\n APPLICATION = 1,\n PROFILE = 2,\n SUBMISSION_TABLE = 3\n}\n\nexport enum ECheckInStatus {\n OVERDUE = 'overdue',\n PENDING = 'pending',\n SCHEDULED = 'scheduled',\n DONE = 'done'\n}\n"],"sourceRoot":""}