{"version":3,"file":"js/app-8dcb2febdc701b3ed8f9.js","mappings":"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","sources":["webpack://halo/./app/client/src/redux/reducers/adminReducer.ts","webpack://halo/./app/client/src/redux/reducers/companyReducer.ts","webpack://halo/./app/client/src/redux/reducers/defaultReducer.jsx","webpack://halo/./app/client/src/redux/reducers/profileReducer.jsx","webpack://halo/./app/client/src/redux/reducers/windowDimensionsReducer.jsx","webpack://halo/./app/client/src/redux/reducers/index.jsx","webpack://halo/./app/client/src/redux/rootReducer.ts","webpack://halo/./app/client/src/redux/store.ts","webpack://halo/./app/client/packs/app.tsx","webpack://halo/./app/client/src/components/MasqueradeBar/MasqueradeBar.tsx","webpack://halo/./app/client/src/components/Messenger/MessengerHeader.tsx","webpack://halo/./app/client/src/components/Messenger/ParticipantsInfoModal.tsx","webpack://halo/./app/client/src/components/Messenger/Messenger.tsx","webpack://halo/./app/client/src/components/MobileRestricted/MobileRestricted.tsx","webpack://halo/./app/client/src/components/MobileRestricted/index.ts","webpack://halo/./app/client/src/components/PrivateRoute.tsx","webpack://halo/./app/client/src/components/PrivateSponsorRoute.tsx","webpack://halo/./app/client/src/components/SubscriptionWarning/SubscriptionEndedModal.tsx","webpack://halo/./app/client/src/components/SubscriptionWarning/SubscriptionWarning.tsx","webpack://halo/./app/client/src/components/TaxonomyUpdateModal/TaxonomyUpdateModal.tsx","webpack://halo/./app/client/src/components/TaxonomyUpdateModal/index.ts","webpack://halo/./app/client/src/components/modals/SSOSponsorOnboardingModal.tsx","webpack://halo/./app/client/src/routes/SubmitProposalRedirect.tsx","webpack://halo/./app/client/src/utils/ScrollToTop.ts","webpack://halo/./app/client/src/components/Navbar/NavbarDropdownMenu.tsx","webpack://halo/./app/client/src/components/LoginSignUpModal/LoginModal.styles.jsx","webpack://halo/./app/client/src/components/LoginSignUpModal/SignUpModal.tsx","webpack://halo/./app/client/src/components/LoginSignUpModal/LoginSignUpModal.tsx","webpack://halo/./app/client/src/components/LoginSignUpModal/index.jsx","webpack://halo/./app/client/src/components/Navbar/NavbarLink.tsx","webpack://halo/./app/client/src/components/Navbar/ScientistNavbarLinks.tsx","webpack://halo/./app/client/src/components/Navbar/LoggedOutNavbarLinks.tsx","webpack://halo/./app/client/src/components/Navbar/MobileMenu.tsx","webpack://halo/./app/client/src/components/Navbar/SponsorNavbarLinks.tsx","webpack://halo/./app/client/src/components/Navbar/UniversityAdminNavbarLinks.tsx","webpack://halo/./app/client/src/components/Navbar/navbarLists.ts","webpack://halo/./app/client/src/components/Navbar/Navbar.tsx","webpack://halo/./app/client/src/routes/notification_campaign_routes.tsx","webpack://halo/./app/client/src/routes/opportunity_routes.tsx","webpack://halo/./app/client/src/routes/request_for_expert_routes.tsx","webpack://halo/./app/client/src/routes/rfp_routes.tsx","webpack://halo/./app/client/src/views/StatusPages/401.tsx","webpack://halo/./app/client/src/views/StatusPages/403.tsx","webpack://halo/./app/client/src/views/ErrorBoundary/ErrorBoundaryFallback.tsx","webpack://halo/./app/client/src/views/ErrorBoundary/ErrorBoundary.tsx","webpack://halo/./app/client/src/requests/googleScholarAuthors.ts","webpack://halo/./app/client/src/views/Onboarding/Progress.tsx","webpack://halo/./app/client/src/views/Onboarding/Step2/Step2.tsx","webpack://halo/./app/client/src/views/Onboarding/Step3aGoogleScholar/AuthorCard.tsx","webpack://halo/./app/client/src/views/Onboarding/Step3aGoogleScholar/Step3aGoogleScholar.tsx","webpack://halo/./app/client/src/views/Onboarding/Step4/Step4NextStep.tsx","webpack://halo/./app/client/src/views/Onboarding/Step4/Step4.tsx","webpack://halo/./app/client/src/views/Onboarding/OnboardingContainer.tsx","webpack://halo/./app/client/src/App.tsx","webpack://halo/./app/client/src/components/FeatureRequestButton/FeatureRequestButton.tsx","webpack://halo/./app/client/src/components/Footer/Footer.tsx","webpack://halo/./app/client/src/components/InviteModal/InviteModal.styles.jsx","webpack://halo/./app/client/src/components/InviteModal/InviteModal.jsx","webpack://halo/./app/client/src/components/InviteModal/index.jsx","webpack://halo/./app/client/src/components/LoginSignUpModal/LoginModal.tsx","webpack://halo/./app/client/src/components/Messenger/Conversation/Participants.tsx","webpack://halo/./app/client/src/utils/ably.ts","webpack://halo/./app/client/src/components/Messenger/Conversation/AttachmentsInfoModal.tsx","webpack://halo/./app/client/src/components/Messenger/Conversation/MessageCompose.tsx","webpack://halo/./app/client/src/components/Messenger/Conversation/MessageList.tsx","webpack://halo/./app/client/src/components/Messenger/Conversation/Conversation.tsx","webpack://halo/./app/client/src/components/modals/RfpQuestionSubmittedModal.tsx","webpack://halo/./app/client/src/requests/requestComments.ts","webpack://halo/./app/client/src/components/RequestDiscussion/tooltipContent.tsx","webpack://halo/./app/client/src/components/RequestDiscussion/RequestDiscussionSubmitForm.tsx","webpack://halo/./app/client/src/components/RequestDiscussion/RequestDiscussionEditForm.tsx","webpack://halo/./app/client/src/components/RequestDiscussion/RequestComment.tsx","webpack://halo/./app/client/src/components/RequestDiscussion/RequestDiscussion.tsx","webpack://halo/./app/client/src/components/RequestFAQs/faqs.ts","webpack://halo/./app/client/src/components/RequestFAQs/RequestFAQs.tsx","webpack://halo/./app/client/src/components/RequestPageComponents/AboutCompany.tsx","webpack://halo/./app/client/src/components/modals/RelevanceFeedbackModal.tsx","webpack://halo/./app/client/src/components/RequestPageComponents/tooltipContent.tsx","webpack://halo/./app/client/src/components/RequestPageComponents/RefineRecommendations.tsx","webpack://halo/./app/client/src/components/RequestPageComponents/RequestPageBanner.tsx","webpack://halo/./app/client/src/hooks/useIsImageLoadable.ts","webpack://halo/./app/client/src/components/RfpCard/RefineRecommendations.tsx","webpack://halo/./app/client/src/components/RfpCard/RfpCardFooter.tsx","webpack://halo/./app/client/src/components/RfpCard/RfpCard.tsx","webpack://halo/./app/client/src/components/SSOEnabledHint/SSOEnabledHint.tsx","webpack://halo/./app/client/src/components/ScientistContribution/ScientistContribution.tsx","webpack://halo/./app/client/src/components/TRLs/TRLs.tsx","webpack://halo/./app/client/src/components/UserVerificationCode/ResendConfirmationModal.tsx","webpack://halo/./app/client/src/components/UserVerificationCode/UserVerificationCode.tsx","webpack://halo/./app/client/src/components/library/Inputs/SearchBarInput.tsx","webpack://halo/./app/client/src/components/library/ModalBases/ShareWithinCompanyModal.tsx","webpack://halo/./app/client/src/components/libraryOld/SelectionMenus/Dropdown.styles.js","webpack://halo/./app/client/src/components/libraryOld/SelectionMenus/Dropdown.jsx","webpack://halo/./app/client/src/components/modals/FuelModal.tsx","webpack://halo/./app/client/src/components/modals/KeywordSignUpModal.tsx","webpack://halo/./app/client/src/components/modals/MessageAttachmentGalleryModal/MessageAttachmentGalleryPreview.tsx","webpack://halo/./app/client/src/components/modals/MessageAttachmentGalleryModal/MessageAttachmentGalleryModal.tsx","webpack://halo/./app/client/src/hooks/useEffectRefresh.ts","webpack://halo/./app/client/src/components/modals/ScientistQuickViewModal/hooks.ts","webpack://halo/./app/client/src/components/modals/InviteNetworkScientistModal.tsx","webpack://halo/./app/client/src/components/RfpCard/UnsubscribedRfpCard.tsx","webpack://halo/./app/client/src/components/modals/RfpUnsubscribeModal.tsx","webpack://halo/./app/client/src/components/modals/SponsorShareScientistModal.tsx","webpack://halo/./app/client/src/components/modals/ScientistQuickViewModal/ScientistQuickViewModal.tsx","webpack://halo/./app/client/src/constants/requests.ts","webpack://halo/./app/client/src/constants/users.ts","webpack://halo/./app/client/src/hooks/router.ts","webpack://halo/./app/client/src/hooks/useFollowRequest.tsx","webpack://halo/./app/client/src/hooks/useHubspotCTAs.ts","webpack://halo/./app/client/src/hooks/useIsMount.ts","webpack://halo/./app/client/src/hooks/useLocalStorage.ts","webpack://halo/./app/client/src/hooks/useSSOSensitiveEmail.ts","webpack://halo/./app/client/src/requests/sso.ts","webpack://halo/./app/client/src/redux/actions/adminActions.ts","webpack://halo/./app/client/src/redux/actions/companyActions.ts","webpack://halo/./app/client/src/requests/subscriptions.ts","webpack://halo/./app/client/src/redux/actions/defaultActions.jsx","webpack://halo/./app/client/src/redux/actions/profileActions.ts","webpack://halo/./app/client/src/redux/actions/windowDimensionsActions.jsx","webpack://halo/./app/client/src/requests/hubspot.js","webpack://halo/./app/client/src/requests/notifications.ts","webpack://halo/./app/client/src/requests/rfps.ts","webpack://halo/./app/client/src/requests/sponsors.ts","webpack://halo/./app/client/src/requests/universities.ts","webpack://halo/./app/client/src/requests/userFollowedRequests.tsx","webpack://halo/./app/client/src/requests/user_request_preferences.ts","webpack://halo/./app/client/src/requests/users.tsx","webpack://halo/./app/client/src/tsTypes/__generated__/enums/proposal_review_status.ts","webpack://halo/./app/client/src/tsTypes/__generated__/enums/user_request_preference_source.ts","webpack://halo/./app/client/src/tsTypes/proposals.ts","webpack://halo/./app/client/src/tsTypes/proposaly.ts","webpack://halo/./app/client/src/tsTypes/roles.ts","webpack://halo/./app/client/src/tsTypes/universityProfiles.ts","webpack://halo/./app/client/src/utils/authUtils.ts","webpack://halo/./app/client/src/utils/dateUtils.ts","webpack://halo/./app/client/src/utils/proposalyUtils.ts","webpack://halo/./app/client/src/utils/requestUtils.ts","webpack://halo/./app/client/src/utils/tsUtils.ts","webpack://halo/./app/client/src/utils/userUtils.ts","webpack://halo/./app/client/src/views/Marketplace/RespondToRequestsFilters.tsx","webpack://halo/./app/client/src/views/Marketplace/RespondToRequests.tsx","webpack://halo/./app/client/src/views/Marketplace/sharedFilterStyles.tsx","webpack://halo/./app/client/src/views/Onboarding/Step3/CompanyScientist.tsx","webpack://halo/./app/client/src/views/Onboarding/Step3/CompanySponsor.tsx","webpack://halo/./app/client/src/views/Onboarding/Step3/ResearchInstitutionAdmin.jsx","webpack://halo/./app/client/src/views/Onboarding/Step3/ResearchInstitutionScientist.tsx","webpack://halo/./app/client/src/views/Onboarding/Step3/Step3.jsx","webpack://halo/./app/client/src/views/Onboarding/StepStyles.tsx","webpack://halo/./app/client/src/views/RFPPage/AccessCode.tsx","webpack://halo/./app/client/src/views/RFPPage/BenefitCard.tsx","webpack://halo/./app/client/src/views/RFPPage/Benefits.tsx","webpack://halo/./app/client/src/components/library/Attachments/RequestAttachment.tsx","webpack://halo/./app/client/src/components/library/Attachments/RequestAttachmentsContainer.tsx","webpack://halo/./app/client/src/views/RFPPage/PreviewRfpPageBanner.tsx","webpack://halo/./app/client/src/components/modals/JoinWaitlistModal.tsx","webpack://halo/./app/client/src/views/RFPPage/AddToCalendarButton.tsx","webpack://halo/./app/client/src/views/RFPPage/RfpCta.tsx","webpack://halo/./app/client/src/views/RFPPage/RfpKeywordsContainer.tsx","webpack://halo/./app/client/src/views/RFPPage/AccessCodeBanner.tsx","webpack://halo/./app/client/src/views/RFPPage/RfpPage.tsx","webpack://halo/./app/client/src/views/StatusPages/404.tsx","webpack://halo/./app/client/src/views/StatusPages/StatusPage.tsx","webpack://halo/./app/client/src/views/UniversityTeam/UniversityTeamSearch.tsx","webpack://halo/./app/client/src/views/UniversityTeam/searchOptions.ts","webpack://halo/./app/client/src/tsTypes/companies.js.erb"],"sourcesContent":["import { SET_IS_ABSOLUTE, SET_SHOULD_SHOW_PRODUCT_TOURS } from \"@redux/actions/adminActions\";\nimport { Reducer } from \"redux\";\n\ninterface AdminReducer {\n  shouldShowProductTours: boolean;\n  isAbsolute: boolean;\n}\n\nconst initialState: AdminReducer = {\n  shouldShowProductTours: false,\n  isAbsolute: false,\n};\n\nconst adminReducer: Reducer<AdminReducer> = (state = initialState, action) => {\n  switch (action.type) {\n    case SET_SHOULD_SHOW_PRODUCT_TOURS:\n      return {\n        ...state,\n        shouldShowProductTours: action.payload,\n      };\n    case SET_IS_ABSOLUTE:\n      return {\n        ...state,\n        isAbsolute: action.payload,\n      };\n    default:\n      return state;\n  }\n};\n\nexport default adminReducer;\n","import { CompanyMember } from \"@tsTypes/index\";\nimport { ShowSubscription } from \"@tsTypes/subscriptions/show\";\nimport { Reducer } from \"redux\";\nimport {\n  LOADING_MESSAGES,\n  LOAD_COMPANY_MEMBERS,\n  LOAD_PROPOSALS,\n  LOAD_SUBSCRIPTION,\n  LOAD_USER_FOLLOW,\n  SET_COMPANY_MEMBERS,\n  SET_MESSAGES,\n  SET_PROPOSAL_AS_SEEN,\n  SET_PROPOSAL_DASHBOARD_RFP,\n  SET_SUBSCRIPTION,\n  SET_USER_FOLLOW,\n  SET_VIEW_AS_COMPANY_SUPER_ADMIN,\n} from \"../actions/companyActions\";\n\ninterface CompanyState {\n  isLoadingSubscription: boolean;\n  subscription: ShowSubscription | null;\n  loadingProposals: boolean;\n  proposals: any[];\n  proposalDashboardRequest: any;\n  userFollow: boolean;\n  loadingUserFollow: boolean;\n  researchAreaHeadline: string;\n  researchAreaImageUrl: string;\n  loadingCompanyMembers: boolean;\n  companyMembers: CompanyMember[];\n  loadingMessages: boolean;\n  messages: any[];\n  viewAsCompanySuperAdmin: boolean;\n}\n\nconst initialState: CompanyState = {\n  isLoadingSubscription: false,\n  subscription: null,\n  loadingProposals: false,\n  proposals: [],\n  proposalDashboardRequest: {},\n  userFollow: false,\n  loadingUserFollow: false,\n  researchAreaHeadline: \"\",\n  researchAreaImageUrl: \"\",\n  loadingCompanyMembers: false,\n  companyMembers: [],\n  loadingMessages: false,\n  messages: [],\n  viewAsCompanySuperAdmin: false,\n};\n\nconst companyReducer: Reducer<CompanyState> = (state = initialState, action) => {\n  switch (action.type) {\n    case LOAD_SUBSCRIPTION:\n      return {\n        ...state,\n        isLoadingSubscription: true,\n      };\n    case SET_SUBSCRIPTION:\n      return {\n        ...state,\n        subscription: action.payload,\n        isLoadingSubscription: false,\n      };\n    case LOAD_USER_FOLLOW:\n      return {\n        ...state,\n        loadingUserFollow: true,\n      };\n    case SET_USER_FOLLOW:\n      return {\n        ...state,\n        userFollow: action.payload,\n        loadingUserFollow: false,\n      };\n    case LOAD_PROPOSALS:\n      return {\n        ...state,\n        loadingProposals: true,\n      };\n    case SET_PROPOSAL_DASHBOARD_RFP:\n      return {\n        ...state,\n        proposalDashboardRequest: action.payload,\n      };\n    case LOAD_COMPANY_MEMBERS:\n      return {\n        ...state,\n        loadingCompanyMembers: true,\n      };\n    case SET_COMPANY_MEMBERS:\n      return {\n        ...state,\n        companyMembers: action.payload,\n        loadingCompanyMembers: false,\n      };\n    case LOADING_MESSAGES:\n      return {\n        ...state,\n        loadingMessages: true,\n      };\n    case SET_MESSAGES:\n      return {\n        ...state,\n        loadingMessages: false,\n        messages: action.payload,\n      };\n    case SET_VIEW_AS_COMPANY_SUPER_ADMIN:\n      return {\n        ...state,\n        viewAsCompanySuperAdmin: action.payload,\n      };\n    case SET_PROPOSAL_AS_SEEN:\n      return {\n        ...state,\n        proposals: state.proposals.map((p) => {\n          if (p.id == action.payload.proposalId) {\n            p.seen = true;\n\n            const seen_by = p?.seen_by || [];\n\n            const fullName =\n              action.payload.currentUser?.first_name + \" \" + action.payload.currentUser?.last_name;\n\n            if (seen_by.filter((name) => name.join(\" \") === fullName).length === 0) {\n              p?.seen_by.push([\n                action.payload.currentUser?.first_name,\n                action.payload.currentUser?.last_name,\n              ]);\n            }\n\n            return p;\n          }\n          return p;\n        }),\n      };\n    default:\n      return state;\n  }\n};\n\nexport default companyReducer;\n","import {\n  ADD_FILTER,\n  LOADING_CURRENT_COMPANY,\n  LOAD_CURRENT_RFP,\n  LOAD_DELETE_COMPANY_INTEREST_PARTNER,\n  REMOVE_FILTER,\n  SEARCH_TERM,\n  SET_COMPANIES,\n  SET_COMPANY_INFO,\n  SET_COMPANY_INTEREST,\n  SET_COMPANY_LOGO,\n  SET_COMPANY_VIDEO,\n  SET_CURRENT_COMPANY,\n  SET_FOLLOWED_REQUESTS_INFO,\n  SET_FOUNDATIONS,\n  SET_GOVERNMENT_ORGANIZATIONS,\n  SET_INVITED_USERS,\n  SET_LAST_VIEWED_RFP_IDENTIFIER,\n  SET_LOAD_COMPANY_INFO,\n  SET_LOAD_COMPANY_INTEREST,\n  SET_LOAD_COMPANY_PARTNER,\n  SET_LOAD_INVITED_USERS,\n  SET_UNIVERSITY_TEAM_MEMBERS,\n  SHOW_ERROR_BOUNDARY,\n  UPDATE_CURRENT_RFP,\n  UPDATE_RESULT_LIST,\n} from \"../actions/defaultActions\";\n\nconst initialState = {\n  showErrorBoundary: false,\n  filters: {},\n  searchTerm: \"\",\n  isUpdatingToggleRFP: {},\n  isUpdatingFollowedCompanies: {},\n  isUpdatingResearchFollows: false,\n  followedRequestsInfo: [],\n  followedCompanies: {},\n  resultList: [],\n  companies: [],\n  foundations: [],\n  government_organizations: [],\n  currentCompany: {},\n  currentRFP: {},\n  loadingCurrentCompany: false,\n  loadingCurrentRFP: false,\n  loadingInvitedUsers: false,\n  invitedUsers: [],\n  universityTeamMembers: {},\n  lastViewedRfpIdentifier: \"\",\n};\n\nconst defaultReducer = (state = initialState, action) => {\n  switch (action.type) {\n    case SHOW_ERROR_BOUNDARY:\n      return {\n        ...state,\n        showErrorBoundary: action.payload,\n      };\n    case ADD_FILTER:\n      const newFilters = state.filters[action.payload.filterType] || [];\n      newFilters.push(action.payload.filterValue);\n      return {\n        ...state,\n        filters: {\n          ...state.filters,\n          [action.payload.filterType]: Array.from(new Set(newFilters)),\n        },\n      };\n    case REMOVE_FILTER:\n      return {\n        ...state,\n        filters: {\n          ...state.filters,\n          [action.payload.filterType]: state.filters[action.payload.filterType].filter(\n            (v) => v !== action.payload.filterValue\n          ),\n        },\n      };\n    case LOADING_CURRENT_COMPANY:\n      return {\n        ...state,\n        loadingCurrentCompany: action.payload,\n      };\n    case SEARCH_TERM:\n      return {\n        ...state,\n        searchTerm: action.payload,\n      };\n    case SET_FOLLOWED_REQUESTS_INFO:\n      return {\n        ...state,\n        followedRequestsInfo: action.payload,\n      };\n    case UPDATE_RESULT_LIST:\n      return {\n        ...state,\n        resultList: action.payload,\n      };\n    case UPDATE_CURRENT_RFP:\n      return {\n        ...state,\n        currentRFP: action.payload,\n        loadingCurrentRFP: false,\n      };\n    case LOAD_CURRENT_RFP:\n      return {\n        ...state,\n        loadingCurrentRFP: true,\n      };\n    case SET_CURRENT_COMPANY:\n      return {\n        ...state,\n        currentCompany: action.payload,\n      };\n    case SET_COMPANIES:\n      return {\n        ...state,\n        companies: action.payload,\n      };\n    case SET_FOUNDATIONS:\n      return {\n        ...state,\n        foundations: action.payload,\n      };\n    case SET_GOVERNMENT_ORGANIZATIONS:\n      return {\n        ...state,\n        government_organizations: action.payload,\n      };\n    case SET_LOAD_COMPANY_PARTNER:\n      return {\n        ...state,\n        loadingCompanyPartner: action.payload,\n      };\n    case SET_LOAD_COMPANY_INTEREST:\n      return {\n        ...state,\n        loadingCompanyInterest: action.payload,\n      };\n    case SET_COMPANY_INTEREST:\n      return {\n        ...state,\n        currentCompany: {\n          ...state.currentCompany,\n          company_research_interests: action.payload,\n        },\n        loadingCompanyInterest: false,\n      };\n    case SET_LOAD_COMPANY_INFO:\n      return {\n        ...state,\n        loadingCompanyInfo: action.payload,\n      };\n    case SET_COMPANY_INFO:\n      return {\n        ...state,\n        currentCompany: {\n          ...state.currentCompany,\n          location: action.payload.location,\n          employee_count: action.payload.employee_count,\n          rd_spend_amount: action.payload.rd_spend_amount,\n          company_type: action.payload.company_type,\n          description: action.payload.description,\n        },\n        loadingCompanyInfo: false,\n      };\n    case LOAD_DELETE_COMPANY_INTEREST_PARTNER:\n      return {\n        ...state,\n        loadingDeleteCompanyInterestPartner: action.payload,\n      };\n    case SET_INVITED_USERS:\n      return {\n        ...state,\n        invitedUsers: action.payload.invited_users,\n        loadingInvitedUsers: false,\n      };\n    case SET_LOAD_INVITED_USERS:\n      return {\n        ...state,\n        loadingInvitedUsers: action.payload,\n      };\n    case SET_UNIVERSITY_TEAM_MEMBERS:\n      return {\n        ...state,\n        universityTeamMembers: action.payload,\n      };\n    case SET_COMPANY_LOGO:\n      return {\n        ...state,\n        currentCompany: {\n          ...state.currentCompany,\n          logo: {\n            url: action.payload,\n          },\n        },\n      };\n    case SET_COMPANY_VIDEO:\n      return {\n        ...state,\n        currentCompany: {\n          ...state.currentCompany,\n          video: {\n            url: action.payload,\n          },\n        },\n      };\n    case SET_LAST_VIEWED_RFP_IDENTIFIER:\n      return {\n        ...state,\n        lastViewedRfpIdentifier: action.payload,\n      };\n    default:\n      return state;\n  }\n};\nexport default defaultReducer;\n","import _ from \"lodash\";\nimport {\n  FINISH_DELETE_PROPOSAL,\n  FINISH_FOLLOW_UNFOLLOW_COMPANY,\n  LOADING_RESEARCH_INTEREST_FOLLOWS,\n  LOAD_CURRENT_USER,\n  LOAD_FUNDINGS,\n  LOAD_PATENTS,\n  LOAD_PUBLICATIONS,\n  SET_CURRENT_USER,\n  SET_FUNDINGS,\n  SET_PATENTS,\n  SET_PROPOSAL_EVAL,\n  SET_PUBLICATIONS,\n  SET_UNREAD_COUNT,\n  START_DELETE_PROPOSAL,\n  TOGGLE_LOGIN_MODAL,\n  UPDATE_PROFILE_IMAGE,\n  UPDATE_RESEARCH_INTEREST_FOLLOWS,\n} from \"../actions/profileActions\";\n\nconst initialState = {\n  currentUser: {\n    profile_info: {},\n  },\n  loadingCurrentUser: false,\n  loadingPatents: false,\n  loadingPublications: false,\n  loadingFundings: false,\n  loginModalOpen: false,\n  loginModalLanding: \"signup\", // or \"login\"\n  previousAction: \"\",\n  currentPatentId: null,\n  currentPublicationId: null,\n  currentFundingId: null,\n  patents: [],\n  publications: [],\n  fundings: [],\n  loadingResearchInterestFollows: false,\n  unreadCount: 0,\n  proposalEval: {},\n};\n\nconst profileReducer = (state = initialState, action) => {\n  let newObj;\n  switch (action.type) {\n    case SET_CURRENT_USER:\n      return {\n        ...state,\n        currentUser: action.payload,\n        loadingCurrentUser: false,\n      };\n    case LOAD_CURRENT_USER:\n      return {\n        ...state,\n        loadingCurrentUser: true,\n      };\n    case SET_PUBLICATIONS:\n      return {\n        ...state,\n        publications: action.payload,\n        loadingPublications: false,\n      };\n    case LOAD_PUBLICATIONS:\n      return {\n        ...state,\n        loadingPublications: true,\n      };\n    case SET_PATENTS:\n      return {\n        ...state,\n        patents: action.payload,\n        loadingPatents: false,\n      };\n    case LOAD_PATENTS:\n      return {\n        ...state,\n        loadingPatents: true,\n      };\n    case SET_FUNDINGS:\n      return {\n        ...state,\n        fundings: action.payload,\n        loadingFundings: false,\n      };\n    case LOAD_FUNDINGS:\n      return {\n        ...state,\n        loadingFundings: true,\n      };\n    case TOGGLE_LOGIN_MODAL:\n      return {\n        ...state,\n        loginModalOpen: action.payload.open,\n        previousAction: action.payload.previousAction,\n        prePopulatedSignupEmail: action.payload.prePopulatedSignupEmail,\n        loginModalLanding: action.payload.landing ?? \"signup\",\n      };\n    case START_DELETE_PROPOSAL:\n      return {\n        ...state,\n        deletingProposal: true,\n      };\n    case FINISH_DELETE_PROPOSAL:\n      newObj = _.merge({}, state);\n      if (action.payload && action.payload.proposalId) {\n        newObj.currentUser.proposals = _.filter(\n          newObj.currentUser.proposals,\n          (p) => p.id !== action.payload.proposalId\n        );\n      }\n      return {\n        ...newObj,\n        deletingProposal: false,\n      };\n    case FINISH_FOLLOW_UNFOLLOW_COMPANY:\n      return {\n        ...state,\n        currentUser: {\n          ...state.currentUser,\n          profile_info: {\n            ...state.currentUser.profile_info,\n            followed_companies_info: action.payload.isFollowing\n              ? [...state.currentUser.profile_info.followed_companies_info, action.payload.company]\n              : state.currentUser.profile_info.followed_companies_info.filter(\n                  (company) => company.id !== action.payload.company.id\n                ),\n          },\n        },\n      };\n    case LOADING_RESEARCH_INTEREST_FOLLOWS:\n      return {\n        ...state,\n        loadingResearchInterestFollows: action.payload,\n      };\n    case UPDATE_RESEARCH_INTEREST_FOLLOWS:\n      return {\n        ...state,\n        currentUser: {\n          ...state.currentUser,\n          profile_info: {\n            ...state.currentUser.profile_info,\n            followed_research_interests: action.payload,\n          },\n        },\n        loadingResearchInterestFollows: false,\n      };\n    case SET_UNREAD_COUNT:\n      return {\n        ...state,\n        unreadCount: action.payload,\n      };\n    case SET_PROPOSAL_EVAL:\n      return {\n        ...state,\n        proposalEval: action.payload,\n      };\n    case UPDATE_PROFILE_IMAGE:\n      return {\n        ...state,\n        currentUser: {\n          ...state.currentUser,\n          image: action.payload,\n        },\n      };\n    default:\n      return state;\n  }\n};\nexport default profileReducer;\n","import { UPDATE_WINDOW_DIMENSION } from \"../actions/windowDimensionsActions\";\n\nconst initialState = {\n  width: window.innerWidth,\n  height: window.innerHeight,\n  scrollPercent: 0,\n};\n\nexport const windowDimensionReducer = (state = initialState, action) => {\n  switch (action.type) {\n    case UPDATE_WINDOW_DIMENSION:\n      return {\n        ...state,\n        ...action.payload,\n      };\n    default:\n      return state;\n  }\n};\n\nexport default windowDimensionReducer;\n","import adminReducer from \"./adminReducer\";\nimport companyReducer from \"./companyReducer\";\nimport defaultReducer from \"./defaultReducer\";\nimport messengerReducer from \"./messengerReducer\";\nimport profileReducer from \"./profileReducer\";\nimport windowDimensionsReducer from \"./windowDimensionsReducer\";\n\nexport default {\n  defaultReducer,\n  profileReducer,\n  messengerReducer,\n  companyReducer,\n  windowDimensionsReducer,\n  adminReducer,\n};\n","import { combineReducers } from \"redux\";\nimport { PersistConfig, persistReducer } from \"redux-persist\";\nimport storage from \"redux-persist/lib/storage\";\n\nimport reducers from \"./reducers\";\n\nconst {\n  defaultReducer,\n  profileReducer,\n  companyReducer,\n  windowDimensionsReducer,\n  messengerReducer,\n  adminReducer,\n} = reducers;\n\nconst defaultConfig = {\n  key: \"defaultReducer\",\n  storage: storage,\n  blacklist: [\"filters\", \"searchTerm\", \"researchFollows\"],\n};\n\nconst profilesConfig = {\n  key: \"profileReducer\",\n  storage: storage,\n  whitelist: [\"currentUser\"],\n};\n\nconst messengerConfig: PersistConfig<any> = {\n  key: \"messengerReducer\",\n  storage: storage,\n};\n\nconst rootReducer = combineReducers({\n  defaultReducer: persistReducer(defaultConfig, defaultReducer),\n  profiles: persistReducer(profilesConfig, profileReducer),\n  messenger: persistReducer(messengerConfig, messengerReducer),\n  company: companyReducer,\n  window: windowDimensionsReducer,\n  admin: adminReducer,\n});\n\n// Redux persist\nconst persistConfig = {\n  key: \"root\",\n  storage,\n  blacklist: [\"defaultReducer\", \"profiles\", \"window\", \"company\"],\n};\n\nconst persistedReducer = persistReducer(persistConfig, rootReducer);\n\nexport default persistedReducer;\n","import { applyMiddleware, compose, createStore } from \"redux\";\nimport { persistStore } from \"redux-persist\";\nimport thunkMiddleware from \"redux-thunk\";\n\nimport rootReducer from \"./rootReducer\";\n\n// Redux DevTools\nconst composeEnhancers = (window as any).__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;\nconst enhancer = composeEnhancers(applyMiddleware(thunkMiddleware));\n\nexport const store = createStore(rootReducer, enhancer);\n\n(window as any).store = store;\n\nexport const persistor = persistStore(store);\n\nexport type RootState = ReturnType<typeof store.getState>;\nexport type AppDispatch = typeof store.dispatch;\n","// Run this example by adding <%= javascript_pack_tag 'hello_react' %> to the head of your layout file,\n// like app/views/layouts/application.html.erb. All it does is render <div>Hello React</div> at the bottom\n// of the page.\n\nimport ReactDOM from \"react-dom\";\nimport { Provider } from \"react-redux\";\nimport { withRouter } from \"react-router\";\nimport { Route, BrowserRouter as Router } from \"react-router-dom\";\nimport { PersistGate } from \"redux-persist/integration/react\";\nimport { Container, Loader } from \"semantic-ui-react\";\n\nimport App from \"../src/App\";\nimport { persistor, store } from \"../src/redux/store\";\n\nconst LoaderContainer = () => (\n  <Container textAlign=\"center\">\n    <Loader />\n  </Container>\n);\n\nconst Root = () => (\n  <Provider store={store}>\n    <PersistGate loading={<LoaderContainer />} persistor={persistor}>\n      <Router onUpdate={() => window.scrollTo(0, 0)}>\n        <Route path=\"/:filter?\" component={withRouter(App)} />\n      </Router>\n    </PersistGate>\n  </Provider>\n);\n\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n  ReactDOM.render(<Root />, document.getElementById(\"full-container\"));\n});\n","import { BlankModal, Checkbox, TextButton } from \"@components/library\";\nimport { COLORS, FONTS } from \"@constants\";\nimport { setIsAbsolute, setShouldShowProductTours } from \"@redux/actions/adminActions\";\nimport { RootState } from \"@redux/store\";\nimport { useState } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport styled from \"styled-components\";\n\nexport default function MasqueradeBar() {\n  const [isOptionsOpen, setIsOptionsOpen] = useState(false);\n  const [requiresRefresh, setRequiresRefresh] = useState(false);\n\n  const dispatch = useDispatch();\n  const currentUser = useSelector((state: RootState) => state.profiles.currentUser);\n  const shouldShowProductTours = useSelector(\n    (state: RootState) => state.admin.shouldShowProductTours\n  );\n  const isAbsolute = useSelector((state: RootState) => state.admin.isAbsolute);\n\n  return (\n    <>\n      <BlankModal\n        isOpen={isOptionsOpen}\n        onClose={() => setIsOptionsOpen(false)}\n        width=\"400px\"\n        headerText=\"Masquerade options\"\n        subHeaderText=\"Changes are applied immediately.\"\n      >\n        <ModalContent>\n          <Checkbox\n            label=\"Absolute positioning\"\n            size=\"sm\"\n            isChecked={isAbsolute}\n            onChange={(e) => {\n              dispatch(setIsAbsolute(e.target.checked));\n            }}\n          />\n          <Checkbox\n            label=\"Show product tours\"\n            size=\"sm\"\n            isChecked={shouldShowProductTours}\n            onChange={(e) => {\n              dispatch(setShouldShowProductTours(e.target.checked));\n              setRequiresRefresh(true);\n            }}\n          />\n          {requiresRefresh && (\n            <TextButton\n              size=\"sm\"\n              text=\"Requires refresh. Click here to refresh.\"\n              iconName=\"Refresh\"\n              color={COLORS.HALO_BLUE}\n              onClick={() => window.location.reload()}\n            />\n          )}\n        </ModalContent>\n      </BlankModal>\n      <Container\n        position={isAbsolute ? \"absolute\" : \"\"}\n        background={gon.global?.env === \"production\" ? COLORS.RED : COLORS.HALO_BLUE}\n      >\n        Masquerading as {currentUser.first_name} {currentUser.last_name} (ID: {currentUser.id})\n        <div>|</div>\n        <a href={gon.back_masquerade_path}>\n          <TextButton\n            size=\"sm\"\n            text=\"Return to your main user\"\n            color={COLORS.WHITE}\n            iconName=\"Open in a new tab\"\n          />\n        </a>\n        <div>|</div>\n        <TextButton\n          size=\"sm\"\n          text=\"Open options\"\n          color={COLORS.WHITE}\n          iconName={null}\n          onClick={() => setIsOptionsOpen(true)}\n        />\n      </Container>\n    </>\n  );\n}\n\nconst Container = styled.div`\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  gap: 20px;\n\n  width: 100%;\n  z-index: 100000;\n  text-align: center;\n\n  background: ${({ background }) => background};\n  color: white;\n\n  position: ${({ position }) => position};\n  top: 0;\n\n  ${FONTS.SEMIBOLD_3};\n`;\n\nconst ModalContent = styled.div`\n  padding: 20px;\n  display: flex;\n  flex-direction: column;\n  gap: 20px;\n`;\n","import {\n  Icon,\n  IconButton,\n  MoreActionsDropdown,\n  MultiUserPreview,\n  Thumbnail,\n  UserPreview,\n} from \"@components/library\";\nimport type { ExtendedDropdownOption } from \"@components/library/Dropdowns/DropdownOption\";\nimport { COLORS, FONTS, STYLES } from \"@constants\";\nimport {\n  clearMessengerState,\n  setHasUnreadMessage,\n  setIsMessengerExpanded,\n  setIsMessengerMinimized,\n  setIsMessengerOpen,\n} from \"@redux/actions/messengerActions\";\nimport { InboxMessageThread, MessageRecipient } from \"@tsTypes/index\";\nimport { Dispatch, SetStateAction } from \"react\";\nimport { batch, useDispatch } from \"react-redux\";\nimport { useHistory } from \"react-router-dom\";\nimport styled, { css } from \"styled-components\";\n\ninterface Props {\n  recipient: MessageRecipient;\n  messengerThread?: InboxMessageThread;\n  proposalTitle?: string | null;\n  isMessengerMinimized: boolean;\n  isMessengerExpanded: boolean;\n  hasUnreadMessage: boolean;\n  setIsParticipantsModalOpen: Dispatch<SetStateAction<boolean>>;\n}\n\nconst MessengerHeader = ({\n  recipient,\n  proposalTitle,\n  isMessengerMinimized,\n  messengerThread,\n  isMessengerExpanded,\n  hasUnreadMessage,\n  setIsParticipantsModalOpen,\n}: Props) => {\n  const history = useHistory();\n  const dispatch = useDispatch();\n\n  const toggleMinimizeMessenger = () => {\n    // if user opens messenger mark as read\n    if (isMessengerMinimized) dispatch(setHasUnreadMessage(false));\n    // reduce size of messenger window if minimized\n    if (isMessengerExpanded) dispatch(setIsMessengerExpanded(false));\n    dispatch(setIsMessengerMinimized(!isMessengerMinimized));\n  };\n\n  const handleCloseMessenger = (e: Event) => {\n    e.stopPropagation();\n    batch(() => {\n      dispatch(setIsMessengerOpen(false));\n      dispatch(clearMessengerState());\n    });\n  };\n\n  const noThreadMoreActionsOptions: ExtendedDropdownOption[] = [\n    {\n      // expand if reduced and reduce if expanded\n      value: \"EXPAND_OR_REDUCE\",\n      label: isMessengerExpanded ? \"Reduce\" : \"Expand\",\n      onSelect: () => dispatch(setIsMessengerExpanded(!isMessengerExpanded)),\n      iconName: isMessengerExpanded ? \"Reduce\" : \"Expand\",\n    },\n    {\n      value: \"VIEW_PROFILE\",\n      label: `Visit ${recipient.name}'s profile`,\n      onSelect: () => history.push(`/profile/${recipient.profile_id}`),\n      iconName: \"Profile\",\n    },\n  ];\n  const moreActionsOptions: ExtendedDropdownOption[] = [\n    ...noThreadMoreActionsOptions,\n    {\n      value: \"OPEN_IN_INBOX\",\n      label: \"Open in Inbox\",\n      onSelect: () => history.push(`/inbox?thread_id=${messengerThread?.id}`),\n      iconName: \"Open in a new tab\",\n    },\n    {\n      value: \"WHO_CAN_SEE_THIS_CONVERSATION\",\n      label: `Who can see this conversation`,\n      onSelect: () => setIsParticipantsModalOpen(true),\n      iconName: \"Employees\",\n    },\n  ];\n\n  let participants;\n  if (!messengerThread) {\n    participants = [recipient];\n  } else if (\"proposal\" in messengerThread) {\n    participants = [\n      messengerThread.scientist_user,\n      ...((\"company_members\" in messengerThread && messengerThread.company_members) || []),\n    ];\n  } else {\n    participants = messengerThread.recipients;\n  }\n\n  const IS_SINGLE_PARTICIPANT = participants.length <= 2;\n\n  const userPreview = IS_SINGLE_PARTICIPANT ? (\n    <UserPreview size=\"sm\" user={recipient} />\n  ) : (\n    <MultiUserPreview users={participants} />\n  );\n\n  return (\n    <HeaderContainer\n      isMessengerMinimized={isMessengerMinimized}\n      onClick={isMessengerMinimized ? toggleMinimizeMessenger : undefined}\n    >\n      {isMessengerMinimized ? (\n        <FlexContainer>\n          <Thumbnail size=\"sm\" users={participants} single={IS_SINGLE_PARTICIPANT} />\n          {IS_SINGLE_PARTICIPANT && (\n            <Name hasUnreadMessage={hasUnreadMessage}>{recipient.name}</Name>\n          )}\n          {hasUnreadMessage && <UnreadDot />}\n        </FlexContainer>\n      ) : (\n        <div>\n          {userPreview}\n          {proposalTitle && (\n            <ProposalTitleContainer isMulti={!IS_SINGLE_PARTICIPANT}>\n              <Icon name=\"Proposal\" size=\"sm\" margin=\"0 4px 0 0\" color={COLORS.NEUTRAL_500} />\n              <ProposalTitle>{proposalTitle}</ProposalTitle>\n            </ProposalTitleContainer>\n          )}\n        </div>\n      )}\n      <IconContainer>\n        {!isMessengerMinimized && (\n          <>\n            <MoreActionsDropdown\n              options={messengerThread ? moreActionsOptions : noThreadMoreActionsOptions}\n              menuHorizontalPosition=\"right\"\n            >\n              <IconButton size=\"xs\" variant=\"fourth\" iconName=\"More Actions\" tooltipWidth=\"100px\" />\n            </MoreActionsDropdown>\n            <IconButton\n              iconName=\"Minimize\"\n              size=\"xs\"\n              variant=\"fourth\"\n              onClick={toggleMinimizeMessenger}\n            />\n          </>\n        )}\n        <IconButton\n          iconName=\"Close\"\n          size=\"xs\"\n          variant=\"fourth\"\n          onClick={handleCloseMessenger}\n          data-testid=\"close-button\"\n        />\n      </IconContainer>\n    </HeaderContainer>\n  );\n};\n\nexport default MessengerHeader;\n\nconst HeaderContainer = styled.div`\n  width: 100%;\n  display: flex;\n  justify-content: space-between;\n  position: relative;\n  padding: ${({ isMessengerMinimized }) => (isMessengerMinimized ? \"8px\" : \"12px 8px 12px 12px\")};\n  border: 0px solid ${COLORS.NEUTRAL_200};\n  box-shadow: 0px 4px 3px -2px rgba(0, 115, 200, 0.1);\n  border-radius: 12px 12px 0px 0px;\n  ${({ isMessengerMinimized }) =>\n    isMessengerMinimized &&\n    css`\n      &:hover {\n        background: ${COLORS.NEUTRAL_50};\n        cursor: pointer;\n      }\n    `}\n`;\n\nconst IconContainer = styled.div`\n  display: flex;\n  height: 24px;\n`;\n\nconst FlexContainer = styled.div`\n  display: flex;\n  align-items: center;\n`;\n\nconst Name = styled.div`\n  width: max-content;\n  max-width: ${({ hasUnreadMessage }) => (hasUnreadMessage ? \"93px\" : \"115px\")};\n  margin-left: 8px;\n  color: ${COLORS.BLACK};\n  ${FONTS.TAG_SEMIBOLD_1};\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n`;\n\nconst UnreadDot = styled.div`\n  width: 8px;\n  height: 8px;\n  border-radius: 50%;\n  background-color: ${COLORS.RED};\n  margin-left: 8px;\n`;\nconst ProposalTitleContainer = styled.div`\n  display: flex;\n  margin-left: ${({ isMulti }) => (isMulti ? \"60\" : \"44\")}px;\n  margin-top: 8px;\n`;\nconst ProposalTitle = styled.div`\n  color: ${COLORS.NEUTRAL_500};\n  ${FONTS.MEDIUM_3};\n  ${STYLES.ONE_LINE}\n`;\n","import { BlankModal } from \"@components/library\";\nimport styled from \"styled-components\";\nimport Participants from \"./Conversation/Participants\";\n\nconst ParticipantsInfoModal = ({ messengerThread, isOpen, closeModal }) => {\n  return (\n    <BlankModal\n      isOpen={isOpen}\n      onClose={closeModal}\n      headerText=\"Who can see this conversation\"\n      width=\"540px\"\n      height=\"534px\"\n      disableBackgroundScroll={false}\n    >\n      <Container>\n        <Participants currentThread={messengerThread} isModal={true} />\n      </Container>\n    </BlankModal>\n  );\n};\n\nexport default ParticipantsInfoModal;\n\nconst Container = styled.div`\n  padding: 20px;\n  min-height: 450px;\n  display: flex;\n  flex-direction: column;\n`;\n","import Conversation from \"@components/Messenger/Conversation\";\nimport { COLORS, STYLES } from \"@constants\";\nimport {\n  fetchCurrentThreadByParticipants,\n  fetchCurrentThreadByProposal,\n} from \"@redux/actions/messengerActions\";\nimport { RootState } from \"@redux/store\";\nimport { useEffect, useState } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { Action } from \"redux\";\nimport { ThunkDispatch } from \"redux-thunk\";\nimport { Loader } from \"semantic-ui-react\";\nimport styled from \"styled-components\";\nimport MessengerHeader from \"./MessengerHeader\";\nimport ParticipantsInfoModal from \"./ParticipantsInfoModal\";\n\nconst Messenger = () => {\n  const [isParticipantsModalOpen, setIsParticipantsModalOpen] = useState(false);\n\n  const dispatch = useDispatch<ThunkDispatch<any, any, Action>>();\n\n  const currentUser = useSelector((state: RootState) => state.profiles.currentUser);\n  const messengerData = useSelector((state: RootState) => state.messenger.messengerData);\n  const isMessengerOpen = useSelector((state: RootState) => state.messenger.isMessengerOpen);\n  const isMessengerThreadLoading = useSelector(\n    (state: RootState) => state.messenger.isMessengerThreadLoading\n  );\n  const isMessengerMinimized = useSelector(\n    (state: RootState) => state.messenger.isMessengerMinimized\n  );\n  const isMessengerExpanded = useSelector(\n    (state: RootState) => state.messenger.isMessengerExpanded\n  );\n  const hasUnreadMessage = useSelector((state: RootState) => state.messenger.hasUnreadMessage);\n  const messengerThread = useSelector((state: RootState) => state.messenger.messengerThread);\n  const messengerOffsetRight = useSelector(\n    (state: RootState) => state.messenger.messengerOffsetRight\n  );\n\n  useEffect(() => {\n    (async () => {\n      if (!messengerData.recipient) return;\n\n      const userId: number = messengerData.recipient.id;\n      const { proposalyId, proposalyType } = messengerData;\n\n      if (proposalyId && proposalyType) {\n        await dispatch(fetchCurrentThreadByProposal(userId, proposalyType, proposalyId));\n      } else {\n        await dispatch(fetchCurrentThreadByParticipants(currentUser.id, userId));\n      }\n    })();\n  }, [messengerData]);\n\n  if (!isMessengerOpen) return null;\n\n  if (isMessengerThreadLoading && isMessengerOpen) {\n    return (\n      <MessengerContainer\n        isMessengerMinimized={isMessengerMinimized}\n        messengerOffsetRight={messengerOffsetRight}\n      >\n        <Loader active inline=\"centered\" style={{ margin: \"auto\" }} />\n      </MessengerContainer>\n    );\n  }\n\n  return (\n    <>\n      <ParticipantsInfoModal\n        messengerThread={messengerThread}\n        isOpen={isParticipantsModalOpen}\n        closeModal={() => setIsParticipantsModalOpen(false)}\n      />\n      <MessengerContainer\n        isMessengerMinimized={isMessengerMinimized}\n        isMessengerExpanded={isMessengerExpanded}\n        messengerOffsetRight={messengerOffsetRight}\n        data-testid=\"messenger\"\n      >\n        <MessengerHeader\n          recipient={messengerData?.recipient}\n          proposalTitle={messengerData?.proposalTitle}\n          isMessengerMinimized={isMessengerMinimized}\n          messengerThread={messengerThread}\n          isMessengerExpanded={isMessengerExpanded}\n          hasUnreadMessage={hasUnreadMessage}\n          setIsParticipantsModalOpen={setIsParticipantsModalOpen}\n        />\n        <ConversationContainer>\n          <Conversation currentThread={messengerThread} />\n        </ConversationContainer>\n      </MessengerContainer>\n    </>\n  );\n};\n\nexport default Messenger;\n\nconst MessengerContainer = styled.div`\n  display: flex;\n  flex-direction: ${({ isMessengerMinimized }) => (isMessengerMinimized ? \"row\" : \"column\")};\n  background: ${COLORS.WHITE};\n  border: 1px solid ${COLORS.NEUTRAL_200};\n  box-shadow: ${STYLES.SHADOW_C};\n  border-radius: 12px 12px 0px 0px;\n  width: ${({ isMessengerMinimized, isMessengerExpanded }) => {\n    if (isMessengerMinimized) {\n      return \"216px\";\n    }\n    if (isMessengerExpanded) {\n      return \"600px\";\n    }\n    return \"426px\";\n  }};\n  height: ${({ isMessengerMinimized, isMessengerExpanded }) => {\n    if (isMessengerMinimized) {\n      return \"52px\";\n    }\n    if (isMessengerExpanded) {\n      return \"725px\";\n    }\n    return \"570px\";\n  }};\n  position: fixed;\n  max-height: calc(100% - 115px);\n  right: calc(0% + ${({ messengerOffsetRight }) => messengerOffsetRight}px);\n  bottom: 0px;\n  z-index: 500;\n  margin-left: 16px;\n  transition-timing-function: cubic-bezier(0, 0, 0.2, 1);\n  transition-duration: 167ms;\n  transition-property: width, height;\n  transition: right 0.25s ease-out;\n`;\nconst ConversationContainer = styled.div`\n  overflow: hidden;\n  position: relative;\n  flex: 1 0 0px;\n  display: flex;\n  height: 266px;\n`;\n","import { Link } from \"react-router-dom\";\nimport styled from \"styled-components\";\n\nimport { Button } from \"@components/library\";\nimport { COLORS, FONTS } from \"@constants\";\n\nimport macbook from \"src/views/AboutUs/images/macbook.png\";\n\ninterface Props {\n  breakpoint: string;\n  children: any;\n}\n\nconst MobileRestricted = ({ breakpoint, children }: Props) => {\n  return (\n    <Controller breakpoint={breakpoint}>\n      <Children>{children}</Children>\n      <Restriction>\n        <Image src={macbook} alt=\"Marketplace\" />\n        <Text>\n          Access Halo on a larger screen\n          <br />\n          to enjoy the full experience\n        </Text>\n        <Link to=\"/\">\n          <Button\n            type=\"button\"\n            variant=\"secondary\"\n            size=\"md\"\n            iconName=\"Arrow Right\"\n            iconPosition=\"right\"\n          >\n            Go home\n          </Button>\n        </Link>\n      </Restriction>\n    </Controller>\n  );\n};\n\nexport default MobileRestricted;\n\nconst Children = styled.div``;\n\nconst Restriction = styled.div``;\n\nconst Controller = styled.div`\n  ${Children} {\n    display: unset;\n  }\n  ${Restriction} {\n    display: none;\n  }\n  @media screen and (max-width: ${({ breakpoint }) => breakpoint}) {\n    ${Children} {\n      display: none;\n    }\n    ${Restriction} {\n      display: flex;\n      flex-direction: column;\n      align-items: center;\n      margin-top: 15vh;\n      gap: 40px;\n    }\n  }\n`;\n\nconst Image = styled.img`\n  width: 333px;\n`;\n\nconst Text = styled.div`\n  ${FONTS.REGULAR_1}\n  color: ${COLORS.NEUTRAL_500};\n  text-align: center;\n`;\n","import MobileRestricted from \"./MobileRestricted\";\n\nexport default MobileRestricted;\n","import { RootState } from \"@redux/store\";\nimport { setPrevUrlCookie } from \"@utils/authUtils\";\nimport { useSelector } from \"react-redux\";\nimport { Route } from \"react-router-dom\";\n\nconst PrivateRoute = ({ ...props }) => {\n  const currentUser = useSelector((state: RootState) => state.profiles.currentUser);\n\n  if (!currentUser.id) {\n    setPrevUrlCookie(window.location.href);\n    window.location.href = \"/login\";\n  }\n\n  return currentUser.id ? <Route {...props} /> : null;\n};\n\nexport default PrivateRoute;\n","import { RootState } from \"@redux/store\";\nimport { setPrevUrlCookie } from \"@utils/authUtils\";\nimport { useSelector } from \"react-redux\";\nimport { Redirect } from \"react-router-dom\";\nimport { USER_ROLES } from \"src/constants/users\";\nimport PrivateRoute from \"./PrivateRoute\";\n\nconst PrivateSponsorRoute = ({ ...props }) => {\n  const currentUser = useSelector((state: RootState) => state.profiles.currentUser);\n\n  if (!currentUser.id) {\n    setPrevUrlCookie(window.location.href);\n    window.location.href = \"/login\";\n  }\n\n  if (currentUser.role !== USER_ROLES.sponsor) {\n    console.warn(\"User %o attempted to access sponsor-only route.\", currentUser);\n    return <Redirect to=\"/403\" />;\n  }\n\n  return <PrivateRoute {...props} />;\n};\n\nexport default PrivateSponsorRoute;\n","import { Button } from \"@components/library\";\nimport BlankModal, { BlankModalProps } from \"@components/library/ModalBases/BlankModal\";\nimport { COLORS, FONTS } from \"@constants\";\nimport { RootState } from \"@redux/store\";\nimport { UserRole } from \"@tsTypes/users\";\nimport { t } from \"@utils/i18n\";\nimport { Dispatch, SetStateAction, useEffect } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { Link, useHistory, useLocation } from \"react-router-dom\";\nimport styled from \"styled-components\";\n\ninterface Props extends BlankModalProps {\n  setIsSubscriptionEndedModalOpen: Dispatch<SetStateAction<boolean>>;\n  bannerMessage: string;\n}\n\nconst BLOCKED_PATHS = [\"/proposal_library\"];\nconst EXTENDED_ACCESS_PATHS = [\"/review_system\", \"/proposal\"];\n\nconst SubscriptionEndedModal = ({\n  isOpen,\n  onClose,\n  setIsSubscriptionEndedModalOpen,\n  bannerMessage,\n}: Props) => {\n  const currentUser = useSelector((state: RootState) => state.profiles.currentUser);\n  const subscription = useSelector((state: RootState) => state.company.subscription);\n\n  const { pathname } = useLocation();\n  const history = useHistory();\n\n  const isBlockedPage =\n    BLOCKED_PATHS.includes(pathname) ||\n    (!subscription?.has_extension &&\n      EXTENDED_ACCESS_PATHS.some((path) => pathname.startsWith(path)));\n\n  useEffect(() => {\n    setIsSubscriptionEndedModalOpen(isBlockedPage);\n  }, [isBlockedPage]);\n\n  return (\n    <BlankModal\n      isOpen={isOpen}\n      onClose={onClose}\n      hideCloseButton={isBlockedPage}\n      closeOnDimmerClick={!isBlockedPage}\n      backgroundMode=\"blur\"\n    >\n      <Container>\n        <Title>{bannerMessage}</Title>\n        {t([\n          \"components.subscription_warning.modal\",\n          currentUser.role === UserRole.SPONSOR ? \"sponsor\" : \"expert\",\n        ])}\n        <Buttons>\n          {currentUser.profile_info.is_admin && (\n            <Link to={\"/contact\"} target=\"_blank\">\n              <Button type=\"button\">{t(\"components.subscription_warning.cta\")}</Button>\n            </Link>\n          )}\n          {isBlockedPage && (\n            <Button\n              variant={currentUser.profile_info.is_admin ? \"secondary\" : \"primary\"}\n              onClick={() => history.push(\"/reviewer_dashboard\")}\n            >\n              Go to dashboard\n            </Button>\n          )}\n        </Buttons>\n      </Container>\n    </BlankModal>\n  );\n};\n\nexport default SubscriptionEndedModal;\n\nconst Container = styled.div`\n  display: flex;\n  flex-direction: column;\n  color: ${COLORS.BLACK};\n  padding: 60px 60px 48px;\n  ${FONTS.REGULAR_1};\n`;\nconst Title = styled.div`\n  ${FONTS.HEADING_4_SEMIBOLD};\n  margin-bottom: 20px;\n`;\nconst Buttons = styled.div`\n  display: flex;\n  gap: 32px;\n  margin: 32px auto 0;\n`;\n","import { Button, Icon } from \"@components/library\";\nimport { COLORS, FONTS, WINDOW_DIMENSIONS } from \"@constants\";\nimport { RootState } from \"@redux/store\";\nimport { daysUntilDate } from \"@utils/dateUtils\";\nimport { t } from \"@utils/i18n\";\nimport dayjs from \"dayjs\";\nimport { useEffect, useState } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { Link } from \"react-router-dom\";\nimport styled from \"styled-components\";\nimport SubscriptionEndedModal from \"./SubscriptionEndedModal\";\n\nconst { TABLET_MEDIA_QUERY } = WINDOW_DIMENSIONS;\n\nconst SUBSCRIPTION_ENDING_WARNING_DAYS = 60;\n\nconst SubscriptionWarning = () => {\n  const [isSubscriptionEndedModalOpen, setIsSubscriptionEndedModalOpen] = useState(false);\n\n  const currentUser = useSelector((state: RootState) => state.profiles.currentUser);\n  const subscription = useSelector((state: RootState) => state.company.subscription);\n\n  const daysUntilSubscriptionEnds = daysUntilDate(subscription?.end_at);\n\n  useEffect(() => {\n    setIsSubscriptionEndedModalOpen(daysUntilSubscriptionEnds < 0);\n  }, [daysUntilSubscriptionEnds]);\n\n  if (\n    !subscription?.end_at ||\n    daysUntilSubscriptionEnds > SUBSCRIPTION_ENDING_WARNING_DAYS ||\n    subscription?.has_upcoming_subscription\n  )\n    return null;\n\n  const isAdmin = currentUser.profile_info.is_admin;\n  const bannerMessage = t(\n    [\n      \"components.subscription_warning\",\n      daysUntilSubscriptionEnds < 0 ? \"ended\" : \"ending_soon\",\n      isAdmin ? \"admin\" : \"non_admin\",\n    ],\n    {\n      subscriptionEndDate: dayjs(subscription?.end_at).format(\"MMMM D, YYYY\"),\n    }\n  );\n\n  return (\n    <>\n      {daysUntilSubscriptionEnds < 0 && (\n        <SubscriptionEndedModal\n          isOpen={isSubscriptionEndedModalOpen}\n          onClose={() => setIsSubscriptionEndedModalOpen(false)}\n          setIsSubscriptionEndedModalOpen={setIsSubscriptionEndedModalOpen}\n          bannerMessage={bannerMessage}\n        />\n      )}\n      <SubscriptionEndBanner>\n        <Icon name=\"Attention\" size=\"lg\" color={COLORS.WHITE} margin=\"0 5px 0 0\" />\n        {bannerMessage}\n        {isAdmin && (\n          <Link to={\"/contact\"} target=\"_blank\" style={{ backgroundColor: COLORS.WHITE }}>\n            <Button type=\"button\" variant=\"destructive-ghost\" size=\"sm\">\n              {t(\"components.subscription_warning.cta\")}\n            </Button>\n          </Link>\n        )}\n      </SubscriptionEndBanner>\n    </>\n  );\n};\n\nconst SubscriptionEndBanner = styled.div`\n  display: flex;\n  align-items: center;\n  height: 60px;\n  width: 100%;\n  margin: 0px;\n  padding: 0 ${WINDOW_DIMENSIONS.PAGE_SIDE_PADDING}px;\n  background-color: ${COLORS.RED};\n  color: ${COLORS.WHITE};\n  ${FONTS.REGULAR_2};\n\n  & > a {\n    margin-left: auto;\n  }\n\n  ${TABLET_MEDIA_QUERY} {\n    width: 100%;\n    height: 80px;\n    left: 0;\n    padding: 0 18px;\n  }\n`;\n\nexport default SubscriptionWarning;\n","import { useState } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { Link } from \"react-router-dom\";\nimport styled from \"styled-components\";\n\nimport toast from \"@components/Toast\";\nimport { Button } from \"@components/library\";\nimport KeywordsDropdown from \"@components/library/Dropdowns/KeywordsDropdown/KeywordsDropdown\";\nimport BlankModal, { BlankModalProps } from \"@components/library/ModalBases/BlankModal\";\nimport { COLORS, FONTS } from \"@constants\";\nimport { setCurrentUser } from \"@redux/actions/profileActions\";\nimport { RootState } from \"@redux/store\";\nimport { skipUpdateUserKeywords, updateUserKeywords } from \"@requests/users\";\nimport { UserRole } from \"@tsTypes/users\";\n\nconst TaxonomyUpdateModal = ({ isOpen, onClose }: BlankModalProps) => {\n  if (!isOpen) return null;\n\n  const currentUser = useSelector((state: RootState) => state.profiles.currentUser);\n  const dispatch = useDispatch();\n\n  const [disciplines, setDisciplines] = useState<string[]>(currentUser.disciplines);\n  const [areasOfExpertise, setAreasOfExpertise] = useState<string[]>(\n    currentUser.areas_of_expertise\n  );\n  const [isSubmitting, setIsSubmitting] = useState(false);\n\n  const onSkip = () => {\n    try {\n      skipUpdateUserKeywords(currentUser.id);\n    } catch (err) {\n      console.error(err);\n    }\n    onClose();\n    toast.success(\n      <p>\n        You can always update your expertise in{\" \"}\n        <Link to=\"/account\" style={{ textDecoration: \"underline\", color: \"white\" }}>\n          Account Settings\n        </Link>\n        .\n      </p>\n    );\n  };\n\n  const handleSubmit = async (e) => {\n    e.preventDefault();\n    setIsSubmitting(true);\n    try {\n      const response = await updateUserKeywords(currentUser.id, {\n        disciplines,\n        areasOfExpertise,\n      });\n      if (response.data.success) {\n        dispatch(\n          setCurrentUser({\n            ...currentUser,\n            disciplines,\n            areas_of_expertise: areasOfExpertise,\n            has_updated_taxonomy: true,\n          })\n        );\n        onClose();\n      }\n    } catch (err) {\n      console.error(err);\n    }\n    setIsSubmitting(false);\n  };\n\n  const header =\n    currentUser.role === 0\n      ? `${currentUser.first_name}, it's time for a keyword checkup`\n      : `${currentUser.first_name}, what is your expertise?`;\n  const title =\n    currentUser.role === 0\n      ? \"We made some changes to our taxonomy\"\n      : `We want to help R&D teams collaborate, and we made some changes to our taxonomy`;\n  const text =\n    currentUser.role === 0\n      ? \"Please take a second and update your keywords so we can better recommend opportunities that will interest you.\"\n      : `Please take a second and add or update relevant keywords to your profile so R&D teams across ${\n          currentUser.profile_info?.company_name ?? \"your company\"\n        } can find you.`;\n\n  return (\n    <BlankModal\n      width=\"600px\"\n      isOpen={isOpen}\n      onClose={onClose}\n      hideCloseButton={true}\n      closeOnDimmerClick={false}\n      disableBackgroundScroll={true}\n      headerText={header}\n    >\n      <form onSubmit={handleSubmit}>\n        <Content>\n          <Title>{title}</Title>\n          <Text>{text}</Text>\n          {currentUser.role === UserRole.SCIENTIST && (\n            <>\n              <Label>Which disciplines are most relevant to your work?</Label>\n              <KeywordsDropdown\n                keywordType=\"discipline\"\n                targetType=\"scientist\"\n                value={disciplines}\n                onChange={setDisciplines}\n                isPortal\n              />\n            </>\n          )}\n          <Label>What is your expertise?</Label>\n          <KeywordsDropdown\n            keywordType=\"area_of_expertise\"\n            targetType={currentUser.role === UserRole.SCIENTIST ? \"scientist\" : \"sponsor\"}\n            value={areasOfExpertise}\n            onChange={setAreasOfExpertise}\n            isPortal\n          />\n        </Content>\n        <Footer>\n          <div>{currentUser.role === 1 && <SkipLink onClick={onSkip}>Skip for now</SkipLink>}</div>\n          <Button\n            size=\"md\"\n            disabled={\n              isSubmitting ||\n              (currentUser.role === 0 && (!disciplines.length || !areasOfExpertise.length)) ||\n              (currentUser.role === 1 && !areasOfExpertise.length)\n            }\n          >\n            Update\n          </Button>\n        </Footer>\n      </form>\n    </BlankModal>\n  );\n};\n\nexport default TaxonomyUpdateModal;\n\nconst Content = styled.div`\n  padding: 20px;\n`;\n\nconst Footer = styled.div`\n  padding: 16px 20px;\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  margin-top: 16px;\n  border-top: 1px solid ${COLORS.NEUTRAL_300};\n`;\n\nconst Title = styled.div`\n  ${FONTS.SEMIBOLD_1}\n`;\n\nconst Text = styled.div`\n  ${FONTS.REGULAR_1}\n`;\n\nconst Label = styled.div`\n  ${FONTS.MEDIUM_2}\n  margin: 40px 0 8px;\n`;\nconst SkipLink = styled.a`\n  ${FONTS.REGULAR_2}\n  color: ${COLORS.NEUTRAL_500};\n  text-decoration: underline;\n  margin-top: -0.5em;\n\n  &:hover {\n    color: ${COLORS.BLACK};\n    cursor: pointer;\n  }\n`;\n","import TaxonomyUpdateModal from \"./TaxonomyUpdateModal\";\nexport default TaxonomyUpdateModal;\n","import { useEffect, useState } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport styled from \"styled-components\";\n\nimport { COLORS, FONTS } from \"@constants\";\nimport { fetchCurrentUser } from \"@redux/actions/profileActions\";\nimport { RootState } from \"@redux/store\";\nimport { getCompany } from \"@requests/companies\";\nimport { updateUserKeywords, updateUserProfile } from \"@requests/users\";\nimport { SponsorRole } from \"@tsTypes/sponsorProfiles\";\nimport { getOptionFromValue } from \"@utils/dropdownUtils\";\nimport { USER_ROLES } from \"src/constants/users\";\n\nimport { BlankModal, Button, SingleSelectDropdown, TextButton } from \"@components/library\";\nimport { DropdownOption } from \"@components/library/Dropdowns/DropdownOption\";\nimport KeywordsDropdown from \"@components/library/Dropdowns/KeywordsDropdown/KeywordsDropdown\";\nimport { BlankModalProps } from \"@components/library/ModalBases/BlankModal\";\n\nimport haloLogo from \"@images/logos/halo_logo.svg\";\nimport { sponsorOnboarded } from \"@requests/hubspot\";\nimport { ShowCompany } from \"@tsTypes/index\";\nimport appsignal from \"@utils/appsignal\";\nimport { t } from \"@utils/i18n\";\n\nconst SPONSOR_ROLES_DROPDOWN_OPTIONS = Object.values(SponsorRole).map(\n  getOptionFromValue\n) as DropdownOption[];\n\nconst SSOSponsorOnboardingModal = ({ isOpen, onClose }: BlankModalProps) => {\n  const dispatch = useDispatch();\n  const currentUser = useSelector((state: RootState) => state.profiles.currentUser);\n  const isCommenter = currentUser.profile_info.commenter;\n\n  const [step, setStep] = useState<1 | 2>(1);\n  const [company, setCompany] = useState<ShowCompany>({} as ShowCompany);\n  const [isSubmitting, setIsSubmitting] = useState(false);\n\n  const [title, setTitle] = useState(currentUser.profile_info.title);\n  const [role, setRole] = useState(currentUser.profile_info.role);\n  const [areasOfExpertise, setAreasOfExpertise] = useState<string[]>(\n    currentUser.areas_of_expertise\n  );\n\n  const handleSubmit = async (e) => {\n    e.preventDefault();\n    e.stopPropagation();\n\n    setIsSubmitting(true);\n\n    try {\n      if (step === 1) {\n        await updateUserProfile(currentUser.id, USER_ROLES.sponsor, {\n          ...currentUser.profile_info,\n          title,\n          role,\n        });\n\n        sponsorOnboarded(currentUser);\n\n        dispatch(fetchCurrentUser());\n\n        setStep(2);\n      } else {\n        const response = await updateUserKeywords(currentUser.id, {\n          disciplines: [],\n          areasOfExpertise,\n        });\n\n        if (response.data.success) {\n          dispatch(fetchCurrentUser());\n        }\n\n        onClose();\n      }\n    } catch (err) {\n      appsignal.sendError(err);\n    } finally {\n      setIsSubmitting(false);\n    }\n  };\n\n  const handleSkip = (e) => {\n    e.preventDefault();\n    onClose();\n  };\n\n  useEffect(() => {\n    (async () => {\n      try {\n        if (!currentUser?.profile_info?.company_identifier) {\n          return;\n        }\n\n        const response = await getCompany(currentUser.profile_info.company_identifier);\n\n        setCompany(response.company);\n      } catch (err) {\n        appsignal.sendError(err);\n      }\n    })();\n  }, [currentUser]);\n\n  if (!company?.id) return null;\n\n  return (\n    <BlankModal\n      isOpen={isOpen}\n      onClose={onClose}\n      closeOnDimmerClick={false}\n      hideCloseButton\n      width=\"540px\"\n    >\n      <Container onSubmit={handleSubmit}>\n        <Top>\n          <Logo src={haloLogo} alt=\"Halo logo\" />\n          <CompanyLogo src={company.logo?.url} />\n        </Top>\n        {(() => {\n          switch (step) {\n            case 1:\n              return (\n                <>\n                  <Bottom>\n                    <Header>\n                      {t(\n                        [\n                          \"components.modals.sso_sponsor_onboarding_modal\",\n                          isCommenter ? \"commenter_header\" : \"normal_header\",\n                        ],\n                        { company_name: company.company_name }\n                      )}\n                    </Header>\n                    <SingleSelectDropdown\n                      label=\"What's your role?\"\n                      value={role ? { value: role, label: role } : null}\n                      options={SPONSOR_ROLES_DROPDOWN_OPTIONS}\n                      onChange={(newOption) => {\n                        if (newOption) {\n                          setRole(newOption.value);\n                        }\n                      }}\n                      placeholder=\"Select your role\"\n                      isPortal={true}\n                    />\n                    <div>\n                      <Title>What&rsquo;s your job title?</Title>\n                      <Input\n                        key=\"title-input-id\"\n                        type=\"text\"\n                        name=\"title\"\n                        value={title}\n                        onChange={(e) => {\n                          setTitle(e.target.value);\n                        }}\n                        autoComplete=\"off\"\n                        data-testid=\"scinet-signup-title-input\"\n                        placeholder=\"Enter your job title\"\n                      />\n                    </div>\n                  </Bottom>\n                  <ButtonContainer>\n                    <Button type=\"submit\" disabled={!role || !title || isSubmitting}>\n                      Submit\n                    </Button>\n                  </ButtonContainer>\n                </>\n              );\n            case 2:\n              return (\n                <>\n                  <Bottom>\n                    <div style={{ margin: \"0 0 8px\" }}>\n                      Thanks for creating an account.\n                      <br />\n                      Complete your profile so other teams at {company.company_name} can find you.\n                    </div>\n                    <div>\n                      <Label>Areas of expertise</Label>\n                      <KeywordsDropdown\n                        keywordType=\"area_of_expertise\"\n                        targetType=\"sponsor\"\n                        value={areasOfExpertise}\n                        onChange={setAreasOfExpertise}\n                        isPortal\n                      />\n                    </div>\n                  </Bottom>\n                  <ButtonContainer>\n                    <TextButton text=\"Skip\" onClick={handleSkip} iconName={null} />\n                    <Button disabled={isSubmitting || !areasOfExpertise.length}>\n                      Add to profile\n                    </Button>\n                  </ButtonContainer>\n                </>\n              );\n            default:\n              return null;\n          }\n        })()}\n      </Container>\n    </BlankModal>\n  );\n};\n\nconst Container = styled.form`\n  ${FONTS.REGULAR_2};\n  b {\n    ${FONTS.BOLD_2};\n  }\n`;\n\nconst Top = styled.div`\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n\n  width: 100%;\n\n  padding: 16px 32px;\n\n  border-bottom: 1px solid ${COLORS.NEUTRAL_200};\n`;\n\nconst Bottom = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 16px;\n\n  width: 100%;\n\n  padding: 24px 32px;\n\n  ${FONTS.REGULAR_2};\n\n  border-bottom: 1px solid ${COLORS.NEUTRAL_200};\n`;\n\nconst Logo = styled.img`\n  height: 32px;\n`;\n\nconst CompanyLogo = styled.img`\n  box-sizing: border-box;\n\n  display: flex;\n  flex-direction: row;\n  justify-content: center;\n  align-items: center;\n\n  padding: 8px;\n\n  width: 64px;\n  height: 64px;\n\n  border: 1px solid ${COLORS.NEUTRAL_250};\n  border-radius: 12px;\n\n  object-fit: contain;\n`;\n\nconst Header = styled.div`\n  ${FONTS.HEADING_5_MEDIUM}\n\n  margin: 0 0 24px;\n`;\n\nconst Title = styled.label`\n  display: flex;\n  flex-direction: column;\n\n  width: 100%;\n  margin: 0 0 10px;\n\n  ${FONTS.SEMIBOLD_2};\n`;\n\nconst Input = styled.input`\n  height: 36px;\n  width: 100%;\n  padding: 10px;\n\n  border: solid 1px ${COLORS.NEUTRAL_300};\n  ${({ error }) => error && `border: solid 1px ${COLORS.RED};`}\n  border-radius: 6px;\n\n  ${FONTS.REGULAR_2}\n`;\n\nconst ButtonContainer = styled.div`\n  display: flex;\n  justify-content: flex-end;\n  align-items: center;\n  gap: 24px;\n\n  width: 100%;\n\n  padding: 16px 32px;\n`;\n\nconst Label = styled.div`\n  ${FONTS.MEDIUM_2}\n`;\n\nexport default SSOSponsorOnboardingModal;\n","import toast from \"@components/Toast\";\nimport api from \"@requests/request\";\nimport appsignal from \"@utils/appsignal\";\nimport { requestProposalUrlPath } from \"@utils/requestUtils\";\nimport { useEffect } from \"react\";\nimport { useHistory, useParams } from \"react-router-dom\";\n\n// Redirects from old url /submit_proposal/:request_slug to /submit/:request_type/:request_slug\nexport default function SubmitProposalRedirect() {\n  const { rfp_identifier: requestSlug } = useParams();\n  const history = useHistory();\n\n  useEffect(() => {\n    (async () => {\n      try {\n        const response = await api.get(`/requests/${requestSlug}`);\n        history.push(requestProposalUrlPath(response.data.request));\n      } catch (err) {\n        console.error(err);\n        toast.error(\n          \"Sorry! We couldn't find the request you're looking for. Please visit the My Proposals page to see your proposals.\"\n        );\n        history.push(\"/404\");\n        appsignal.sendError(err, (span) => {\n          span.setAction(\"SubmitProposalRedirect#useEffect\");\n        });\n      }\n    })();\n  }, [requestSlug]);\n\n  return null;\n}\n","import { useEffect } from \"react\";\nimport { useLocation } from \"react-router-dom\";\n\nexport default function ScrollToTop({ children }) {\n  const { pathname } = useLocation();\n\n  useEffect(() => {\n    window.scrollTo(0, 0);\n  }, [pathname]);\n\n  return children;\n}\n","import { Icon } from \"@components/library\";\nimport { AdminTag, LicenseTag, SuperAdminTag } from \"@components/library/Tags/users\";\nimport { COLORS, JS_FONTS, WINDOW_DIMENSIONS } from \"@constants\";\nimport { setShowErrorBoundary } from \"@redux/actions/defaultActions\";\nimport { RootState } from \"@redux/store\";\nimport { signOut } from \"@requests/users\";\nimport { marketplacePath } from \"@routes/utils\";\nimport { SegmentEventName } from \"@tsTypes/__generated__/enums\";\nimport { UserRole } from \"@tsTypes/users\";\nimport { track } from \"@utils/appUtils\";\nimport { t } from \"@utils/i18n\";\nimport { StyleSheet, css } from \"aphrodite\";\nimport { useState } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { useHistory } from \"react-router-dom\";\nimport { Button, Popup } from \"semantic-ui-react\";\nimport styled from \"styled-components\";\n\nconst NavbarDropdownMenu = () => {\n  const [isMenuOpen, setIsMenuOpen] = useState(false);\n\n  const currentUser = useSelector((state: RootState) => state.profiles.currentUser);\n  const showErrorBoundary = useSelector(\n    (state: RootState) => state.defaultReducer.showErrorBoundary\n  );\n\n  const history = useHistory();\n  const dispatch = useDispatch();\n\n  const navigate = (to: string) => {\n    if (!showErrorBoundary) {\n      history.push(to);\n    } else {\n      dispatch(setShowErrorBoundary(false));\n      window.location.href = to;\n    }\n  };\n\n  const navigateToLogout = async () => {\n    await signOut();\n    // This needs to use window.location.href instead of history.push to prevent\n    // accessing the previous session via the browser cache\n    window.location.href = marketplacePath();\n  };\n\n  const navigateToProfile = () => {\n    navigate(`/profile/${currentUser.first_name}-${currentUser.last_name}-${currentUser.id}`);\n    setIsMenuOpen(false);\n  };\n\n  const navigateToAccount = () => {\n    navigate(\"/account\");\n    setIsMenuOpen(false);\n  };\n\n  const navigateToDashboard = () => {\n    navigate(\"/reviewer_dashboard\");\n    setIsMenuOpen(false);\n  };\n\n  const navigateToPublicProfile = async () => {\n    navigate(\n      `/profile/${currentUser.first_name}-${currentUser.last_name}-${currentUser.id}?public=true`\n    );\n    setIsMenuOpen(false);\n  };\n\n  const navigateToCompanyProfile = () => {\n    navigate(`/company/${currentUser.profile_info.company_identifier}`);\n    setIsMenuOpen(false);\n  };\n\n  const navigateToInbox = () => {\n    navigate(\"/inbox\");\n    setIsMenuOpen(false);\n  };\n\n  const navigateToUniversityProposalLibrary = () => {\n    navigate(\"/university_dashboard/proposals\");\n    setIsMenuOpen(false);\n  };\n\n  const currentPFPic = currentUser?.image?.medium?.url;\n\n  return (\n    <Popup\n      trigger={\n        <button\n          type=\"button\"\n          data-testid=\"navbar-menu-trigger\"\n          className={css(styles.Navbar_menuWrap)}\n        >\n          {!currentPFPic ? (\n            <div\n              className={css(styles.Navbar_menuProfilePic)}\n              data-testid=\"navbar-menu-profile-pic\"\n            >\n              {currentUser.first_name?.[0]?.toUpperCase()}\n              {currentUser.last_name?.[0]?.toUpperCase()}\n            </div>\n          ) : (\n            <div\n              className={css(styles.Navbar_menuProfilePic)}\n              data-testid=\"navbar-menu-profile-pic\"\n              style={{\n                backgroundImage: `url(${currentUser.image.small.url})`,\n              }}\n            />\n          )}\n          <div className={css(styles.Navbar_icon)}>\n            <Icon name=\"Chevron Down\" />\n          </div>\n          <div className={css(styles.Navbar_iconMobile)}>\n            <Icon name=\"Burger\" />\n          </div>\n        </button>\n      }\n      on=\"click\"\n      basic\n      className={`${css(styles.Navbar_accountPopup)} transition-fadein`}\n      hideOnScroll\n      hoverable\n      position=\"bottom right\"\n      open={isMenuOpen}\n      onOpen={() => setIsMenuOpen(true)}\n      onClose={() => setIsMenuOpen(false)}\n      content={\n        <div\n          className={css(styles.Navbar_accountPopupContainer)}\n          onMouseEnter={() => setIsMenuOpen(true)}\n          onMouseLeave={() => setIsMenuOpen(false)}\n        >\n          <div className={css(styles.Navbar_popupContainer)}>\n            <div className={css(styles.Navbar_profilePicContainer)}>\n              {!currentPFPic ? (\n                <div className={css(styles.Navbar_regularProfilePic)}>\n                  {currentUser?.first_name?.[0]?.toUpperCase()}\n                  {currentUser?.last_name?.[0]?.toUpperCase()}\n                </div>\n              ) : (\n                <div\n                  className={css(styles.Navbar_popupProfilePic)}\n                  style={{\n                    backgroundImage: `url(${currentUser.image.medium.url})`,\n                  }}\n                />\n              )}\n            </div>\n            <div className={css(styles.Navbar_popupRightPanel)}>\n              <div className={css(styles.Navbar_popupName)}>\n                {currentUser.first_name} {currentUser.last_name}\n                {currentUser.role === UserRole.SPONSOR &&\n                  currentUser.profile_info?.is_super_admin && (\n                    <SuperAdminTagContainer>\n                      <SuperAdminTag />\n                    </SuperAdminTagContainer>\n                  )}\n              </div>\n              <div className={css(styles.Navbar_popupPosition)}>\n                {currentUser.role === UserRole.SPONSOR\n                  ? currentUser.profile_info.company_name\n                  : currentUser.profile_info.title}\n              </div>\n              {currentUser.role === UserRole.SCIENTIST && (\n                <div\n                  onClick={navigateToProfile}\n                  className={css(styles.Navbar_profileButton)}\n                  data-testid=\"profile-dropdown-edit-button\"\n                >\n                  Edit Profile\n                </div>\n              )}\n              {currentUser.role === UserRole.SPONSOR && (\n                <ProfileTags>\n                  {Boolean(currentUser.profile_info?.license) && (\n                    <LicenseTag type={currentUser.profile_info?.license} />\n                  )}\n                  {currentUser.profile_info?.is_admin && <AdminTag />}\n                </ProfileTags>\n              )}\n            </div>\n          </div>\n          <Button onClick={navigateToAccount} className={css(styles.Navbar_button)}>\n            Account Settings\n          </Button>\n          {currentUser.role === UserRole.SPONSOR && !currentUser.profile_info.commenter ? (\n            <Button onClick={navigateToDashboard} className={css(styles.Navbar_button)}>\n              View Dashboard\n            </Button>\n          ) : null}\n          {currentUser.role === UserRole.SCIENTIST && currentUser.profile_info.is_expert && (\n            <Button\n              onClick={navigateToProfile}\n              className={css(styles.Navbar_button, styles.Navbar_buttonEditProfile)}\n            >\n              {t(\"components.navbar.links.expert_dashboard\")}\n            </Button>\n          )}\n          {currentUser.id &&\n            currentUser.role !== UserRole.UNIVERSITY_ADMIN &&\n            !(currentUser.role === UserRole.SPONSOR && !currentUser.profile_info.verified) && (\n              <Button\n                onClick={navigateToInbox}\n                className={css(styles.Navbar_button, styles.Navbar_inbox)}\n              >\n                Inbox\n              </Button>\n            )}\n          {currentUser.role === UserRole.SCIENTIST && (\n            <Button\n              onClick={navigateToProfile}\n              className={css(styles.Navbar_button, styles.Navbar_buttonEditProfile)}\n            >\n              Edit Profile\n            </Button>\n          )}\n          {currentUser.role === UserRole.SPONSOR && (\n            <Button onClick={navigateToCompanyProfile} className={css(styles.Navbar_button)}>\n              {currentUser.profile_info.is_admin ? \"Edit\" : \"View\"} Company Page\n            </Button>\n          )}\n          {currentUser.role === UserRole.UNIVERSITY_ADMIN && (\n            <Button\n              onClick={navigateToUniversityProposalLibrary}\n              className={css(styles.Navbar_button)}\n            >\n              View Proposals\n            </Button>\n          )}\n          <Button\n            onClick={() => {\n              track(SegmentEventName.Click, {\n                ui_component: \"Navbar Help Center\",\n              });\n              window.location.href = \"https://knowledge.halo.science/\";\n            }}\n            className={css(styles.Navbar_button)}\n          >\n            Help Center\n          </Button>\n          {currentUser.role === UserRole.SCIENTIST && (\n            <Button\n              data-testid=\"view-public-profile-button\"\n              onClick={navigateToPublicProfile}\n              className={css(styles.Navbar_button)}\n            >\n              View Public Profile\n            </Button>\n          )}\n          <Button onClick={navigateToLogout} className={css(styles.Navbar_signOutButton)}>\n            Sign Out\n          </Button>\n        </div>\n      }\n    />\n  );\n};\n\nexport default NavbarDropdownMenu;\n\nconst ProfileTags = styled.div`\n  display: flex;\n  align-items: center;\n  gap: 4px;\n  margin-top: 8px;\n`;\nconst SuperAdminTagContainer = styled.span`\n  display: inline-block;\n  position: relative;\n  left: 4px;\n  top: 2px;\n  width: 20px;\n  pointer-events: none;\n`;\nconst { TABLET_MEDIA_QUERY } = WINDOW_DIMENSIONS;\nconst styles = StyleSheet.create({\n  Navbar_menuWrap: {\n    display: \"flex\",\n    alignItems: \"center\",\n    marginLeft: 24,\n    border: \"none\",\n    background: \"none\",\n    outline: \"none\",\n    [TABLET_MEDIA_QUERY]: {\n      marginLeft: \"auto\",\n    },\n  },\n  Navbar_menuProfilePic: {\n    height: \"36px\",\n    width: \"36px\",\n    color: COLORS.BLACK,\n    backgroundColor: COLORS.NEUTRAL_100,\n    marginRight: \"5px\",\n    display: \"flex\",\n    justifyContent: \"center\",\n    alignItems: \"center\",\n    ...JS_FONTS.MEDIUM_1,\n    cursor: \"pointer\",\n    borderRadius: \"50%\",\n    backgroundRepeat: \"no-repeat\",\n    backgroundPosition: \"center center\",\n    backgroundSize: \"cover\",\n    [TABLET_MEDIA_QUERY]: {\n      display: \"none\",\n    },\n  },\n  Navbar_icon: {\n    cursor: \"pointer\",\n    [TABLET_MEDIA_QUERY]: {\n      display: \"none\",\n    },\n  },\n  Navbar_iconMobile: {\n    display: \"none\",\n    [TABLET_MEDIA_QUERY]: {\n      display: \"block\",\n      fontSize: \"1.2em\",\n    },\n  },\n  Navbar_accountPopup: {\n    marginTop: \"15px\",\n    marginBottom: \"0px\",\n    paddingBottom: \"0px\",\n    paddingLeft: \"0px\",\n    paddingRight: \"0px\",\n    border: \"none\",\n    minWidth: \"300px\",\n    [TABLET_MEDIA_QUERY]: {\n      boxShadow: \"28px 15px 24px rgba(0, 0, 0, 0.15)\",\n      width: \"100%\",\n      maxWidth: \"100%\",\n      left: 0,\n    },\n  },\n  Navbar_accountPopupContainer: {\n    width: \"300px\",\n    padding: `10px 0px 0`,\n    zIndex: 2000,\n    [TABLET_MEDIA_QUERY]: {\n      width: \"100%\",\n      paddingTop: 0,\n      paddingRight: \"32px\",\n      paddingBottom: \"25px\",\n      paddingLeft: \"32px\",\n    },\n  },\n  Navbar_popupContainer: {\n    display: \"flex\",\n    marginBottom: \"8px\",\n    [TABLET_MEDIA_QUERY]: {\n      display: \"none\",\n    },\n  },\n  Navbar_profilePicContainer: {\n    width: \"35%\",\n  },\n  Navbar_regularProfilePic: {\n    height: \"80px\",\n    width: \"80px\",\n    color: COLORS.BLACK,\n    backgroundColor: COLORS.NEUTRAL_100,\n    marginLeft: \"20px\",\n    display: \"flex\",\n    justifyContent: \"center\",\n    alignItems: \"center\",\n    ...JS_FONTS.HEADING_2_SEMIBOLD,\n    borderRadius: \"50%\",\n    backgroundRepeat: \"no-repeat\",\n    backgroundPosition: \"center center\",\n    backgroundSize: \"cover\",\n  },\n  Navbar_popupProfilePic: {\n    height: \"80px\",\n    width: \"80px\",\n    backgroundColor: COLORS.NEUTRAL_100,\n    marginLeft: \"20px\",\n    borderRadius: \"50%\",\n    backgroundRepeat: \"no-repeat\",\n    backgroundPosition: \"center center\",\n    backgroundSize: \"cover\",\n  },\n  Navbar_popupRightPanel: {\n    marginLeft: \"20px\",\n    width: \"65%\",\n    marginTop: \"8px\",\n    marginRight: \"20px\",\n  },\n  Navbar_popupName: {\n    gap: \"6px\",\n    color: COLORS.BLACK,\n    ...JS_FONTS.MEDIUM_2,\n    textTransform: \"capitalize\",\n  },\n  Navbar_popupPosition: {\n    ...JS_FONTS.MEDIUM_3,\n    color: COLORS.BLACK,\n  },\n  Navbar_profileButton: {\n    cursor: \"pointer\",\n    ...JS_FONTS.MEDIUM_2,\n    color: COLORS.HALO_BLUE,\n  },\n  Navbar_inbox: {\n    display: \"none\",\n    [TABLET_MEDIA_QUERY]: {\n      display: \"unset\",\n    },\n  },\n  Navbar_buttonEditProfile: {\n    display: \"none\",\n    [TABLET_MEDIA_QUERY]: {\n      display: \"block\",\n    },\n  },\n  Navbar_button: {\n    padding: \"15px 20px\",\n    backgroundColor: COLORS.WHITE,\n    borderBottom: `1px solid ${COLORS.NEUTRAL_200}`,\n    ...JS_FONTS.MEDIUM_2,\n    color: COLORS.NEUTRAL_500,\n    width: \"300px\",\n    borderRadius: \"0px\",\n    marginRight: \"0\",\n    textAlign: \"left\",\n    [TABLET_MEDIA_QUERY]: {\n      width: \"100%\",\n      paddingLeft: 0,\n      paddingRight: 0,\n      color: COLORS.BLACK,\n      ...JS_FONTS.REGULAR_2,\n    },\n    \":hover\": {\n      backgroundColor: COLORS.NEUTRAL_50,\n    },\n  },\n  Navbar_signOutButton: {\n    padding: \"15px 20px\",\n    ...JS_FONTS.MEDIUM_2,\n    backgroundColor: COLORS.WHITE,\n    color: COLORS.NEUTRAL_500,\n    marginBottom: \"0px\",\n    width: \"300px\",\n    borderRadius: \"0px\",\n    marginRight: \"0\",\n    textAlign: \"left\",\n    [TABLET_MEDIA_QUERY]: {\n      width: \"100%\",\n      paddingLeft: 0,\n      paddingRight: 0,\n      color: COLORS.BLACK,\n      ...JS_FONTS.REGULAR_2,\n    },\n    \":hover\": {\n      backgroundColor: COLORS.NEUTRAL_50,\n    },\n  },\n});\n","import { COLORS, JS_FONTS, WINDOW_DIMENSIONS } from \"@constants\";\nimport { StyleSheet } from \"aphrodite\";\n\nconst { MOBILE_MEDIA_QUERY } = WINDOW_DIMENSIONS;\n\nconst styles = StyleSheet.create({\n  LoginModal_modal: {\n    borderRadius: \"3px\",\n    padding: \"30px 30px 14px\",\n  },\n  LoginModal_innerContainer: {\n    backgroundColor: \"white\",\n  },\n  LoginModal_logoContainer: {\n    marginTop: \"8px\",\n    textAlign: \"center\",\n  },\n  LoginModal_closeicon: {\n    position: \"absolute\",\n    top: \"24px\",\n    right: \"24px\",\n  },\n  LoginModal_hero: {\n    marginTop: \"15px\",\n  },\n  LoginModal_headline: {\n    color: COLORS.BLACK,\n    ...JS_FONTS.HEADING_4_SEMIBOLD,\n    marginBottom: \"5px\",\n    textAlign: \"center\",\n  },\n  LoginModal_subheadline: {\n    color: COLORS.BLACK,\n    ...JS_FONTS.REGULAR_2,\n    textAlign: \"center\",\n  },\n  LoginModal_subheadline_rfp: {\n    color: COLORS.BLACK,\n    textAlign: \"center\",\n    \":nth-child(2)\": {\n      ...JS_FONTS.REGULAR_1,\n      marginBottom: \"12px\",\n    },\n    \":last-child\": {\n      color: COLORS.NEUTRAL_500,\n      ...JS_FONTS.REGULAR_2,\n      marginBottom: \"8px\",\n    },\n  },\n  LoginModal_innerLeftPane: {\n    width: \"50%\",\n    display: \"inline-block\",\n    verticalAlign: \"top\",\n    padding: \"20px 5px 0\",\n    ...JS_FONTS.MEDIUM_2,\n    [MOBILE_MEDIA_QUERY]: {\n      width: \"100%\",\n      margin: \"auto\",\n      padding: \"15px 0 0\",\n    },\n  },\n  LoginModal_modalText: {\n    color: COLORS.BLACK,\n    ...JS_FONTS.REGULAR_2,\n    width: \"90%\",\n    marginBottom: \"15px\",\n    display: \"flex\",\n    [MOBILE_MEDIA_QUERY]: {\n      marginBottom: \"10px\",\n      \":last-child\": {\n        marginBottom: \"5px\",\n      },\n    },\n  },\n  LoginModal_lineItem: {\n    marginLeft: \"5px\",\n  },\n  LoginModal_innerRightPane: {\n    width: \"50%\",\n    display: \"inline-block\",\n    padding: \"5px 0 0\",\n    [MOBILE_MEDIA_QUERY]: {\n      width: \"100%\",\n      margin: \"auto\",\n    },\n  },\n  LoginModal_innerRightPane_rfp: {\n    padding: \"5px 0 0\",\n    margin: \"0 auto\",\n  },\n  LoginModal_formField: {\n    marginTop: \"15px\",\n    marginBottom: \"15px\",\n    \":first-child\": {\n      margin: \"0\",\n    },\n  },\n  LoginModal_inputField: {\n    width: \"100%\",\n    border: `1px solid ${COLORS.NEUTRAL_200}`,\n    padding: \"4px 12px\",\n    borderRadius: \"4px\",\n    height: \"48px\",\n    ...JS_FONTS.REGULAR_3,\n  },\n  LoginModal_nameField: {\n    margin: \"0\",\n    width: \"48%\",\n    display: \"inline-block\",\n    \":first-child\": {\n      margin: \"0 4% 0 0\",\n    },\n  },\n  LoginModal_placeholderText: {\n    marginBottom: \"10px\",\n    ...JS_FONTS.REGULAR_3,\n    visibility: \"hidden\",\n    textAlign: \"center\",\n  },\n  LoginModal_errorMessage: {\n    marginBottom: \"10px\",\n    color: \"orange\",\n    ...JS_FONTS.REGULAR_3,\n    textAlign: \"center\",\n  },\n  LoginModal_errorField: {\n    border: \"solid 1px orange\",\n  },\n  LoginModal_alreadyHaveAccount: {\n    textAlign: \"center\",\n    display: \"inline-block\",\n    ...JS_FONTS.MEDIUM_2,\n    width: \"100%\",\n    color: COLORS.BLACK,\n  },\n  LoginModal_signInLink: {\n    marginLeft: \"7px\",\n    ...JS_FONTS.REGULAR_2,\n    display: \"inline-block\",\n    color: COLORS.BLACK,\n    cursor: \"pointer\",\n    textDecoration: \"underline\",\n  },\n  LoginModal_forgotPasswordContainer: {\n    textAlign: \"center\",\n    marginTop: \"14px\",\n  },\n  LoginModal_footerText: {\n    color: COLORS.BLACK,\n    ...JS_FONTS.REGULAR_3,\n  },\n  LoginModal_forgotPassword: {\n    textDecoration: \"underline\",\n    color: COLORS.BLACK,\n    ...JS_FONTS.REGULAR_3,\n    marginBottom: \"3px\",\n  },\n  LoginModal_horizontalRule: {\n    marginTop: \"14px\",\n    marginBottom: \"12px\",\n  },\n});\n\nexport default styles;\n","import { SSOEnabledHint } from \"@components/SSOEnabledHint\";\nimport { Button, Icon, IconButton } from \"@components/library\";\nimport { COLORS, FONTS } from \"@constants\";\nimport { useSSOSensitiveEmail } from \"@hooks/useSSOSensitiveEmail\";\nimport haloLogo from \"@images/logos/halo_logo.svg\";\nimport api from \"@requests/request\";\nimport { RfpPageRequest } from \"@tsTypes/index\";\nimport { identify, track, usedPersonalEmail } from \"@utils/appUtils\";\nimport { setPrevUrlCookie } from \"@utils/authUtils\";\nimport { css } from \"aphrodite\";\nimport { Dispatch, SetStateAction, useEffect, useState } from \"react\";\nimport { Form, Grid } from \"semantic-ui-react\";\nimport styled from \"styled-components\";\nimport Validator from \"validator\";\nimport styles from \"./LoginModal.styles\";\nimport { ModalType } from \"./LoginSignUpModal\";\n\ninterface Props {\n  onClose: () => void;\n  previousAction: string;\n  setModalType: Dispatch<SetStateAction<ModalType>>;\n  currentRFP?: RfpPageRequest;\n}\n\nconst SignUpModal = ({ onClose, previousAction, setModalType, currentRFP }: Props) => {\n  const [errors, setErrors] = useState({});\n  const [errorMessage, setErrorMessage] = useState(\"\");\n  const [isSubmitting, setIsSubmitting] = useState(false);\n  const [hasSubmitted, setHasSubmitted] = useState(false);\n\n  const [firstName, setFirstName] = useState(\"\");\n  const [lastName, setLastName] = useState(\"\");\n  const [password, setPassword] = useState(\"\");\n  const { email, setEmail, isEmailSSOEnabled, redirectToSSO } = useSSOSensitiveEmail(\"\");\n  const [shouldShowSSO, setShouldShowSSO] = useState(isEmailSSOEnabled);\n\n  const easyApply = previousAction === \"easy apply\";\n  const isRfpPage = window.location.pathname.includes(\"/research/\") && currentRFP;\n  const isProposalPage = window.location.pathname.startsWith(\"/proposal/\");\n  const isMarketplace = window.location.pathname.startsWith(\"/marketplace\");\n\n  let signupHeadline = \"Move Science Forward\";\n  let signupSubtitle = \"Find funding opportunities from industry and bring your ideas to life\";\n  let lineItemsHeader = \"\";\n  let lineItems = [\n    \"Submit a proposal in less than an hour\",\n    \"Receive feedback directly from the industry contact\",\n    \"Get discovered by industry partners looking for your expertise\",\n  ];\n  if (isMarketplace) {\n    signupHeadline = \"Explore more opportunities\";\n    signupSubtitle = \"Create a free account to access our full selection of opportunities\";\n    lineItemsHeader = \"Account benefits:\";\n    lineItems = [\n      \"Get discovered by industry partners seeking your expertise\",\n      \"Get matched to opportunities that suit your profile\",\n      \"Submit proposals in less than an hour\",\n      \"Receive feedback directly from industry contacts\",\n    ];\n  }\n\n  const isScientist = !isProposalPage;\n  const isCompany = isProposalPage;\n\n  let userType = \"\";\n  if (isScientist) {\n    userType = \"sci\";\n  } else if (isCompany) {\n    userType = \"spo\";\n  } else {\n    userType = \"adm\";\n  }\n\n  useEffect(() => {\n    const event = `${userType}-create account-start`;\n    const type = `modal-${previousAction}`;\n\n    track(event, { type });\n  }, [userType, previousAction]);\n\n  useEffect(() => {\n    setHasSubmitted(false);\n  }, [firstName, lastName, email, password]);\n\n  useEffect(() => {\n    if (isEmailSSOEnabled) setShouldShowSSO(true);\n  }, [isEmailSSOEnabled]);\n\n  const handleRegister = async () => {\n    setIsSubmitting(true);\n    setHasSubmitted(true);\n    setErrors({});\n\n    if (shouldShowSSO) {\n      if (!isEmailSSOEnabled) {\n        setErrorMessage(\"Your email/company is not enabled to use SSO.\");\n        setIsSubmitting(false);\n        return;\n      }\n\n      redirectToSSO();\n      return;\n    }\n\n    if (invalidSubmit()) {\n      setIsSubmitting(false);\n      return;\n    }\n\n    let originalReferrerId;\n    if (localStorage?.getItem(\"original_referrer_id\")) {\n      originalReferrerId = localStorage.getItem(\"original_referrer_id\");\n      localStorage.removeItem(\"original_referrer_id\");\n    }\n\n    try {\n      const responseJson = await api.post(\"/users\", {\n        user: {\n          email,\n          password,\n          first_name: firstName,\n          last_name: lastName,\n          ...(isCompany && { company: true }),\n        },\n      });\n\n      if (isRfpPage) {\n        if (easyApply && currentRFP.slug) {\n          setPrevUrlCookie(`/submit/request_for_proposal/${currentRFP.slug}`, 0);\n        } else {\n          setPrevUrlCookie();\n        }\n      }\n\n      const user = responseJson.data;\n      identify(user);\n      await track(`${userType}-create account-complete`, {\n        type: `modal-${previousAction}`,\n      });\n\n      if (originalReferrerId) {\n        window.location.href = `/redirect_login?referrer_id=${originalReferrerId}`;\n      } else {\n        window.location.href = \"/redirect_login\";\n      }\n    } catch (error) {\n      setIsSubmitting(false);\n      console.log(error);\n      if (error.response.data.errors.email[0].indexOf(\"already been taken\") > -1) {\n        setErrorMessage(\"That email has already been taken.\");\n      } else if (\n        error.response.data.errors.email[0].indexOf(\"must be a company or university email\") > -1\n      ) {\n        setErrorMessage(\"Please use company or university email.\");\n      } else {\n        setErrorMessage(\"Something went wrong. Please try again.\");\n      }\n\n      setErrors(error.response.data.errors);\n    }\n  };\n\n  const handleLogin = () => {\n    if (isRfpPage && easyApply && currentRFP.slug) {\n      setPrevUrlCookie(`/submit/request_for_proposal/${currentRFP.slug}`);\n    }\n    setModalType(\"login\");\n  };\n\n  const invalidSubmit = () => {\n    if (Validator.isEmpty(firstName) || Validator.isEmpty(lastName) || Validator.isEmpty(email)) {\n      setErrorMessage(\"Please fill in all fields before continuing.\");\n      return true;\n    } else if (!Validator.isEmail(email)) {\n      setErrorMessage(\"Please enter a valid email address.\");\n      return true;\n    } else if (usedPersonalEmail(email)) {\n      setErrorMessage(`Please use company ${!isCompany ? \"or university \" : \"\"}email.`);\n      return true;\n    } else if (!Validator.isLength(password, { min: 8, max: 30 })) {\n      setErrorMessage(\"Passwords must be between 8-30 characters long.\");\n      return true;\n    }\n  };\n\n  const hasErrors =\n    hasSubmitted && (errorMessage.length > 0 || Object.keys(errors || {}).length > 0);\n\n  return (\n    <div>\n      <div className={css(styles.LoginModal_closeicon)}>\n        <IconButton variant=\"fourth\" iconName=\"Close\" onClick={onClose} tooltipPosition=\"bottom\" />\n      </div>\n      <div className={css(styles.LoginModal_logoContainer)}>\n        <a href=\"/\">\n          <img src={haloLogo} />\n        </a>\n      </div>\n      <Grid centered columns={2}>\n        <Grid.Row centered columns={2}>\n          <Grid.Column width={15}>\n            <div className={css(styles.LoginModal_hero)}>\n              <div className={css(styles.LoginModal_headline)}>{signupHeadline}</div>\n              <div className={css(styles.LoginModal_subheadline)}>{signupSubtitle}</div>\n              {isScientist && isRfpPage && (\n                <div className={css(styles.LoginModal_subheadline)}>\n                  This opportunity is for Halo members only. Please create an account to continue.\n                </div>\n              )}\n            </div>\n            {lineItems.length > 0 && (\n              <div className={css(styles.LoginModal_innerLeftPane)}>\n                <p>{lineItemsHeader}</p>\n                {lineItems.map((lineItem) => {\n                  return (\n                    <div className={css(styles.LoginModal_modalText)} key={lineItem}>\n                      <span>\n                        <Icon name=\"Verified\" color={COLORS.HALO_BLUE} />{\" \"}\n                      </span>\n                      <div className={css(styles.LoginModal_lineItem)}>{lineItem}</div>\n                    </div>\n                  );\n                })}\n              </div>\n            )}\n            <div className={css(styles.LoginModal_innerRightPane)}>\n              <div\n                className={css(\n                  errorMessage ? styles.LoginModal_errorMessage : styles.LoginModal_placeholderText\n                )}\n              >\n                {errorMessage ? errorMessage : \"Placeholder Text\"}\n              </div>\n              <div>\n                <Form error={hasErrors} onSubmit={handleRegister}>\n                  {(!shouldShowSSO || firstName || lastName) && (\n                    <>\n                      <Form.Field\n                        className={css(styles.LoginModal_formField, styles.LoginModal_nameField)}\n                      >\n                        <input\n                          className={css(\n                            styles.LoginModal_inputField,\n                            hasSubmitted && !firstName && styles.LoginModal_errorField\n                          )}\n                          data-testid=\"signup-form-first-name-input\"\n                          name=\"firstName\"\n                          onChange={(e) => setFirstName(e.target.value)}\n                          placeholder=\"First Name\"\n                          value={firstName}\n                        />\n                      </Form.Field>\n                      <Form.Field\n                        className={css(styles.LoginModal_formField, styles.LoginModal_nameField)}\n                      >\n                        <input\n                          className={css(\n                            styles.LoginModal_inputField,\n                            hasSubmitted && !lastName && styles.LoginModal_errorField\n                          )}\n                          data-testid=\"signup-form-last-name-input\"\n                          name=\"lastName\"\n                          onChange={(e) => setLastName(e.target.value)}\n                          placeholder=\"Last Name\"\n                          value={lastName}\n                        />\n                      </Form.Field>\n                    </>\n                  )}\n                  <Form.Field className={css(styles.LoginModal_formField)}>\n                    <input\n                      className={css(\n                        styles.LoginModal_inputField,\n                        (usedPersonalEmail(email) || (hasSubmitted && !Validator.isEmail(email))) &&\n                          styles.LoginModal_errorField\n                      )}\n                      data-testid=\"signup-form-email-input\"\n                      name=\"email\"\n                      onChange={(e) => setEmail(e.target.value)}\n                      placeholder={isCompany ? \"Company Email\" : \"Company or University Email\"}\n                      value={email}\n                    />\n                  </Form.Field>\n                  {shouldShowSSO ? (\n                    <>\n                      <SSOHintContainer>\n                        <SSOEnabledHint />\n                      </SSOHintContainer>\n                      <Button\n                        data-testid=\"signup-form-submit-button\"\n                        disabled={isSubmitting || !email}\n                        type=\"submit\"\n                        width=\"100%\"\n                      >\n                        Continue\n                      </Button>\n                      <SSOToggleContainer\n                        onClick={() => {\n                          if (isEmailSSOEnabled) setEmail(\"\");\n                          setShouldShowSSO(false);\n                        }}\n                      >\n                        <SSOToggle>Use email/password instead</SSOToggle>\n                      </SSOToggleContainer>\n                    </>\n                  ) : (\n                    <>\n                      <Form.Field className={css(styles.LoginModal_formField)}>\n                        <input\n                          className={css(\n                            styles.LoginModal_inputField,\n                            hasSubmitted &&\n                              (password.length < 8 || password.length > 30) &&\n                              styles.LoginModal_errorField\n                          )}\n                          data-testid=\"signup-form-password-input\"\n                          name=\"password\"\n                          onChange={(e) => setPassword(e.target.value)}\n                          placeholder=\"Password\"\n                          type=\"password\"\n                          value={password}\n                        />\n                      </Form.Field>\n                      <Button\n                        data-testid=\"signup-form-submit-button\"\n                        disabled={isSubmitting}\n                        type=\"submit\"\n                        width=\"100%\"\n                      >\n                        Create Account\n                      </Button>\n                      <SSOToggleContainer>\n                        <SSOToggle onClick={() => setShouldShowSSO(true)}>\n                          Sign in with SSO\n                        </SSOToggle>\n                      </SSOToggleContainer>\n                    </>\n                  )}\n                </Form>\n                <div className={css(styles.LoginModal_forgotPasswordContainer)}>\n                  <div className={css(styles.LoginModal_footerText)}>\n                    By signing up you agree to the{\" \"}\n                  </div>\n                  <a\n                    className={css(styles.LoginModal_forgotPassword)}\n                    href=\"/terms\"\n                    target=\"_blank\"\n                  >\n                    Terms of Service\n                  </a>\n                  <span className={css(styles.LoginModal_footerText)}>{\" & \"}</span>\n                  <a\n                    className={css(styles.LoginModal_forgotPassword)}\n                    href=\"/privacy\"\n                    target=\"_blank\"\n                  >\n                    Privacy Policy\n                  </a>\n                </div>\n              </div>\n            </div>\n            <hr className={css(styles.LoginModal_horizontalRule)} />\n            <div className={css(styles.LoginModal_alreadyHaveAccount)}>\n              Already have an account?\n              <span style={{ marginLeft: \"2px\" }}>\n                <div className={css(styles.LoginModal_signInLink)} onClick={handleLogin}>\n                  Sign in\n                </div>\n              </span>\n            </div>\n          </Grid.Column>\n        </Grid.Row>\n      </Grid>\n    </div>\n  );\n};\n\nexport default SignUpModal;\n\nconst SSOHintContainer = styled.div`\n  display: flex;\n  justify-content: center;\n  margin: 20px;\n`;\n\nconst SSOToggleContainer = styled.div`\n  display: flex;\n  justify-content: center;\n  margin-top: 10px;\n`;\n\nconst SSOToggle = styled.div`\n  display: flex;\n  align-items: center;\n  gap: 4px;\n\n  text-decoration: underline;\n  color: ${COLORS.BLACK};\n  ${FONTS.REGULAR_2}\n\n  &:hover {\n    cursor: pointer;\n    color: ${COLORS.BLUE_900};\n  }\n`;\n","import { toggleLoginModal } from \"@redux/actions/profileActions\";\nimport { RootState } from \"@redux/store\";\nimport { getRfpForRfpPage } from \"@requests/rfps\";\nimport { css } from \"aphrodite\";\nimport { useEffect, useState } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { Modal } from \"semantic-ui-react\";\n\nimport { SegmentEventName } from \"@tsTypes/__generated__/enums\";\nimport { RfpPageRequest } from \"@tsTypes/index\";\nimport { track } from \"@utils/appUtils\";\nimport LoginModal from \"./LoginModal\";\nimport styles from \"./LoginModal.styles\";\nimport SignUpModal from \"./SignUpModal\";\n\nexport type ModalType = \"signup\" | \"login\";\n\nfunction LoginSignUpModal() {\n  const [modalType, setModalType] = useState<ModalType>(\"signup\");\n  const [currentRFP, setCurrentRFP] = useState<RfpPageRequest>();\n\n  const loginModalOpen = useSelector((state: RootState) => state.profiles.loginModalOpen);\n  const previousAction = useSelector((state: RootState) => state.profiles.previousAction);\n  const loginModalLanding = useSelector((state: RootState) => state.profiles.loginModalLanding);\n\n  const dispatch = useDispatch();\n\n  useEffect(() => {\n    (async () => {\n      const isRfpPage =\n        window.location.pathname.includes(\"/research/\") &&\n        window.location.pathname.split(\"/\").length > 3;\n\n      if (isRfpPage) {\n        const identifier = window.location.pathname.split(\"/\").at(-1);\n        try {\n          const { request } = await getRfpForRfpPage(identifier!);\n          setCurrentRFP(request);\n        } catch (e) {\n          if (e.response.status === 401) {\n            console.error(\"Waiting for access code\");\n            return;\n          }\n          throw e;\n        }\n      }\n    })();\n  }, []);\n\n  useEffect(() => {\n    setModalType(loginModalLanding as ModalType);\n  }, [loginModalLanding]);\n\n  const modalWidth = () => {\n    if (modalType === \"signup\") {\n      return \"720px\";\n    }\n    return \"450px\";\n  };\n\n  const closeLoginModal = () => {\n    dispatch(toggleLoginModal({ open: false }));\n  };\n\n  if (loginModalOpen) {\n    track(SegmentEventName.View, {\n      ui_component: \"Login Modal\",\n    });\n  }\n\n  return (\n    <Modal\n      open={loginModalOpen}\n      onClose={closeLoginModal}\n      size=\"small\"\n      className={css(styles.LoginModal_modal)}\n      style={{ width: modalWidth(), maxWidth: \"95%\" }}\n    >\n      <div data-testid=\"login-modal\">\n        {modalType === \"signup\" && (\n          <SignUpModal\n            onClose={closeLoginModal}\n            currentRFP={currentRFP}\n            previousAction={previousAction}\n            setModalType={setModalType}\n          />\n        )}\n        {modalType === \"login\" && <LoginModal setModalType={setModalType} compat />}\n      </div>\n    </Modal>\n  );\n}\n\nexport default LoginSignUpModal;\n","import LoginSignUpModal from \"./LoginSignUpModal\";\n\nexport default LoginSignUpModal;\n","import { InfoTag } from \"@components/library\";\nimport { COLORS, FONTS } from \"@constants\";\nimport { setShowErrorBoundary } from \"@redux/actions/defaultActions\";\nimport { RootState } from \"@redux/store\";\nimport { ReactNode } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { NavLink, useLocation } from \"react-router-dom\";\nimport styled from \"styled-components\";\n\ninterface Props {\n  to: string;\n  children: ReactNode;\n  asAnchor?: boolean;\n  withNewTag?: boolean;\n  \"data-testid\"?: string;\n  activeStylesMatchType?: \"startsWith\" | \"exact\";\n}\n\nfunction NavbarLink({\n  to,\n  children,\n  asAnchor = false,\n  withNewTag = false,\n  \"data-testid\": dataTestId,\n  activeStylesMatchType = \"exact\",\n}: Props) {\n  const showErrorBoundary = useSelector(\n    (state: RootState) => state.defaultReducer.showErrorBoundary\n  );\n\n  const dispatch = useDispatch();\n  const { pathname } = useLocation();\n\n  const handleClick = () => {\n    if (showErrorBoundary) {\n      dispatch(setShowErrorBoundary(false));\n      window.location.href = to;\n    }\n  };\n\n  let isActive = false;\n  if (activeStylesMatchType === \"startsWith\") {\n    isActive = String(pathname).startsWith(to) && !showErrorBoundary;\n  } else if (activeStylesMatchType === \"exact\") {\n    isActive = String(pathname) === to && !showErrorBoundary;\n  }\n\n  return (\n    <Container isActive={isActive}>\n      <Link\n        to={to}\n        as={asAnchor ? \"a\" : NavLink}\n        href={asAnchor && to}\n        onClick={handleClick}\n        $isActive={isActive}\n        data-testid={dataTestId}\n      >\n        {children}\n        {withNewTag && (\n          <InfoTag accent marginLeft=\"8px\">\n            NEW\n          </InfoTag>\n        )}\n      </Link>\n    </Container>\n  );\n}\n\nexport default NavbarLink;\n\nconst Container = styled.div`\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  height: 100%;\n  padding: 6px 16px 0;\n  border-bottom: 3px solid ${({ isActive }) => (isActive ? COLORS.HALO_BLUE : \"transparent\")};\n`;\nconst Link = styled(NavLink)`\n  display: flex;\n  align-items: center;\n  ${FONTS.MEDIUM_2};\n  color: ${COLORS.BLACK};\n  &:hover,\n  &:focus {\n    color: ${COLORS.HALO_BLUE};\n    text-decoration: none;\n  }\n  ${({ $isActive }) =>\n    $isActive &&\n    `\n      color: ${COLORS.HALO_BLUE};\n      text-decoration: none;\n    `}\n`;\n","import NavbarLink from \"@components/Navbar/NavbarLink\";\nimport { InfoTag } from \"@components/library\";\nimport { COLORS } from \"@constants\";\nimport { RootState } from \"@redux/store\";\nimport { marketplacePath } from \"@routes/utils\";\nimport { t } from \"@utils/i18n\";\nimport { useSelector } from \"react-redux\";\nimport styled from \"styled-components\";\n\nconst ScientistNavbarLinks = () => {\n  const currentUser = useSelector((state: RootState) => state.profiles.currentUser);\n  const unreadCount = useSelector((state: RootState) => state.profiles.unreadCount);\n\n  return (\n    <UserLinks>\n      <NavbarLink to={marketplacePath()}>{t(\"components.navbar.links.marketplace\")}</NavbarLink>\n      <NavbarLink to=\"/my_proposals\">\n        {t(\"components.navbar.links.my_proposals\")}\n      </NavbarLink>\n      {currentUser.profile_info.is_expert && (\n        <NavbarLink to=\"/review_system\">{t(\"components.navbar.links.expert_dashboard\")}</NavbarLink>\n      )}\n      <NavbarLink to=\"/inbox\">\n        {t(\"components.navbar.links.inbox\")}\n        {unreadCount > 0 && (\n          <InfoTag marginLeft=\"4px\" backgroundColor={COLORS.RED_700}>\n            {unreadCount}\n          </InfoTag>\n        )}\n      </NavbarLink>\n    </UserLinks>\n  );\n};\n\nexport default ScientistNavbarLinks;\n\n// For use in LoggedOutNavbarLinks, ScientistNavbarLinks, SponsorNavbarLinks, and UniversityAdminNavbarLinks\n// Note: This needs to be exported from one of the above components and will not work if exported from Navbar.tsx\nexport const UserLinks = styled.div`\n  display: flex;\n  gap: 16px;\n  height: 100%;\n  margin-left: auto;\n`;\n","import NavbarLink from \"@components/Navbar/NavbarLink\";\nimport { marketplace_path } from \"@routes/routes\";\nimport { t } from \"@utils/i18n\";\nimport styled from \"styled-components\";\nimport { UserLinks } from \"./ScientistNavbarLinks\";\n\nconst LoggedOutNavbarLinks = () => {\n  return (\n    <Container>\n      <NavbarLink to={marketplace_path()} activeStylesMatchType=\"startsWith\" asAnchor>\n        {t(\"components.navbar.links.marketplace\")}\n      </NavbarLink>\n      <NavbarLink to=\"https://blog.halo.science/\" asAnchor>\n        {t(\"components.navbar.links.blog\")}\n      </NavbarLink>\n      <NavbarLink to=\"/scientists\" asAnchor>\n        {t(\"components.navbar.links.scientists\")}\n      </NavbarLink>\n    </Container>\n  );\n};\n\nexport default LoggedOutNavbarLinks;\n\nconst Container = styled(UserLinks)`\n  margin-left: 36px;\n`;\n","import { Button, Icon } from \"@components/library\";\nimport SlideModalBase, { SlideModalBaseProps } from \"@components/library/ModalBases/SlideModalBase\";\nimport { COLORS } from \"@constants\";\nimport { RootState } from \"@redux/store\";\nimport { marketplacePath } from \"@routes/utils\";\nimport { useSelector } from \"react-redux\";\nimport { Link } from \"react-router-dom\";\nimport styled from \"styled-components\";\n\nconst MobileMenu = ({ isOpen, onClose }: SlideModalBaseProps) => {\n  if (!isOpen) return null;\n\n  const currentUser = useSelector((state: RootState) => state.profiles.currentUser);\n\n  const links: { name: string; isCurrentPage: boolean; to?: string; as?: string; href?: string }[] =\n    [\n      {\n        name: \"Marketplace\",\n        to: marketplacePath(),\n        isCurrentPage: window.location.pathname.startsWith(\"/marketplace\"),\n      },\n      {\n        name: \"Blog\",\n        as: \"a\",\n        href: \"/blog\",\n        isCurrentPage: window.location.pathname.startsWith(\"/blog\"),\n      },\n      {\n        name: \"For Scientists\",\n        to: \"/scientists\",\n        isCurrentPage: window.location.pathname.startsWith(\"/scientists\"),\n      },\n    ];\n\n  return (\n    <SlideModalBase isOpen={isOpen} onClose={onClose} direction=\"bottom\" hideCloseButton>\n      <Container>\n        <NavLinks>\n          <CloseButton type=\"button\" onClick={onClose}>\n            <Icon name=\"Close\" size=\"lg\" />\n          </CloseButton>\n          {links.map((link) => (\n            <NavLink\n              key={link.name}\n              as={link.as}\n              to={link.to}\n              href={link.href}\n              isCurrentPage={link.isCurrentPage}\n            >\n              {link.name}\n            </NavLink>\n          ))}\n        </NavLinks>\n        {!currentUser.id && (\n          <a href=\"/login\">\n            <Button type=\"button\" variant=\"secondary\" margin=\"36px 0 0\" width=\"100%\">\n              Sign in\n            </Button>\n          </a>\n        )}\n      </Container>\n    </SlideModalBase>\n  );\n};\n\nexport default MobileMenu;\n\nconst Container = styled.div`\n  position: relative;\n  padding: 40px;\n`;\nconst CloseButton = styled.button`\n  position: absolute;\n  top: 40px;\n  right: 32px;\n  border: none;\n  background-color: transparent;\n`;\nconst NavLinks = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 24px;\n`;\nconst NavLink = styled(Link)`\n  font-size: 18px;\n  font-weight: 600;\n  line-height: 1.7;\n  color: ${({ isCurrentPage }) => (isCurrentPage ? COLORS.HALO_BLUE : COLORS.BLACK)};\n  &:hover {\n    color: ${COLORS.HALO_BLUE};\n    text-decoration: none;\n  }\n`;\n","import NavbarLink from \"@components/Navbar/NavbarLink\";\nimport { InfoTag, TextButton } from \"@components/library\";\nimport { COLORS } from \"@constants\";\nimport { RootState } from \"@redux/store\";\nimport { scientistNetworkName, t } from \"@utils/i18n\";\nimport { useSelector } from \"react-redux\";\nimport { NavLink } from \"react-router-dom\";\nimport styled from \"styled-components\";\nimport { UserLinks } from \"./ScientistNavbarLinks\";\n\nconst SponsorNavbarLinks = () => {\n  const currentUser = useSelector((state: RootState) => state.profiles.currentUser);\n  const unreadCount = useSelector((state: RootState) => state.profiles.unreadCount);\n  const subscription = useSelector((state: RootState) => state.company.subscription);\n  const lastViewedRfpIdentifier = useSelector(\n    (state: RootState) => state.defaultReducer.lastViewedRfpIdentifier\n  );\n\n  if (!currentUser.profile_info.verified && !currentUser.profile_info.is_admin)\n    return <Container />;\n\n  const showBackToProposalReviewDashboard =\n    currentUser.profile_info.verified &&\n    currentUser.profile_info.commenter &&\n    !location.pathname.startsWith(\"/review_system\");\n\n  return (\n    <Container showBackToProposalReviewDashboard={showBackToProposalReviewDashboard}>\n      {showBackToProposalReviewDashboard && (\n        <ButtonLink to={`/review_system?request=${lastViewedRfpIdentifier}`}>\n          <TextButton text=\"Back to proposal review\" iconName=\"Arrow Left\" iconPosition=\"left\" />\n        </ButtonLink>\n      )}\n      {!currentUser.profile_info.commenter && (\n        <NavbarLink to=\"/reviewer_dashboard\">\n          {t(\"components.navbar.links.reviewer_dashboard\")}\n        </NavbarLink>\n      )}\n      {subscription?.features.proposal_library && (\n        <NavbarLink to=\"/proposal_library\">\n          {t(\"components.navbar.links.proposal_library\")}\n        </NavbarLink>\n      )}\n      {subscription?.features.company_scientist_network && (\n        <NavbarLink to=\"/network\">{scientistNetworkName(subscription)}</NavbarLink>\n      )}\n      {currentUser.profile_info.verified && (\n        <NavbarLink to=\"/reviewer_dashboard/teams\">\n          {t(\"components.navbar.links.my_team\")}\n        </NavbarLink>\n      )}\n      {currentUser.profile_info.verified && !currentUser.profile_info.commenter && (\n        <NavbarLink to=\"/inbox\" data-testid=\"navbar-inbox-link\">\n          {t(\"components.navbar.links.inbox\")}\n          {unreadCount > 0 && (\n            <InfoTag marginLeft=\"4px\" backgroundColor={COLORS.RED_700}>\n              {unreadCount}\n            </InfoTag>\n          )}\n        </NavbarLink>\n      )}\n    </Container>\n  );\n};\n\nexport default SponsorNavbarLinks;\n\nconst Container = styled(UserLinks)`\n  ${({ showBackToProposalReviewDashboard }) => showBackToProposalReviewDashboard && `width: 100%;`}\n`;\nconst ButtonLink = styled(NavLink)`\n  display: flex;\n  align-items: center;\n  height: 100%;\n  margin-right: auto;\n  &:hover {\n    text-decoration: none;\n  }\n`;\n","import NavbarLink from \"@components/Navbar/NavbarLink\";\nimport { marketplacePath } from \"@routes/utils\";\nimport { t } from \"@utils/i18n\";\nimport { UserLinks } from \"./ScientistNavbarLinks\";\n\nconst UniversityAdminNavbarLinks = () => {\n  return (\n    <UserLinks>\n      <NavbarLink to={marketplacePath()}>{t(\"components.navbar.links.marketplace\")}</NavbarLink>\n      <NavbarLink to=\"/university_dashboard/proposals\" withNewTag>\n        {t(\"components.navbar.links.university_proposals\")}\n      </NavbarLink>\n      <NavbarLink to=\"/university_dashboard/team\">\n        {t(\"components.navbar.links.university_team\")}\n      </NavbarLink>\n    </UserLinks>\n  );\n};\n\nexport default UniversityAdminNavbarLinks;\n","export const NAVBAR_HIDDEN_PATHS = [\n  \"/submit/\",\n  \"/preview-rfp/\",\n  \"/get-started\",\n  \"/login\",\n  \"/onboarding\",\n  \"/review_system\",\n  \"/opportunities\",\n];\n\nexport const NAVBAR_BORDER_PATHS = [\n  \"/inbox\",\n  \"/account\",\n  \"/reviewer_dashboard\",\n  \"/reviewer_dashboard/teams\",\n  \"/reviewer_dashboard/proposals\",\n  \"/proposal_library\",\n  \"/network\",\n  \"/startup_program\",\n  \"/request_for_experts\",\n];\n","import NavbarDropdownMenu from \"@components/Navbar/NavbarDropdownMenu\";\nimport { Button, GradientButton, Icon } from \"@components/library\";\nimport haloLogo from \"@images/logos/halo_logo.svg\";\nimport { RootState } from \"@redux/store\";\nimport { marketplacePath } from \"@routes/utils\";\nimport { UserRole } from \"@tsTypes/users\";\nimport { useEffect, useState } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { Link, useLocation } from \"react-router-dom\";\nimport { COLORS, WINDOW_DIMENSIONS } from \"src/constants\";\nimport styled from \"styled-components\";\nimport LoginSignUpModal from \"../LoginSignUpModal\";\nimport LoggedOutNavbarLinks from \"./LoggedOutNavbarLinks\";\nimport MobileMenu from \"./MobileMenu\";\nimport ScientistNavbarLinks from \"./ScientistNavbarLinks\";\nimport SponsorNavbarLinks from \"./SponsorNavbarLinks\";\nimport UniversityAdminNavbarLinks from \"./UniversityAdminNavbarLinks\";\nimport { NAVBAR_BORDER_PATHS, NAVBAR_HIDDEN_PATHS } from \"./navbarLists\";\n\ninterface Props {\n  shouldIgnoreHiddenPaths?: boolean;\n}\n\nconst Navbar = ({ shouldIgnoreHiddenPaths }: Props) => {\n  const [isSticky, setIsSticky] = useState(false);\n  const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false);\n\n  const currentUser = useSelector((state: RootState) => state.profiles.currentUser);\n  const isTablet = useSelector((state: RootState) => state.window.isTablet);\n\n  const { pathname } = useLocation();\n\n  const isUserLoggedOut = !currentUser.id;\n\n  // Make nav bar sticky on main pages when user is logged out\n  const isLandingPage = pathname === \"/\" || pathname.startsWith(\"/scientists\");\n  const isInMarketplaceRelatedPage =\n    pathname.startsWith(\"/marketplace\") ||\n    pathname.startsWith(\"/research\") ||\n    pathname.startsWith(\"/company\");\n\n  const handleScroll = () => {\n    if (isUserLoggedOut && window.scrollY >= 720 && (isLandingPage || isInMarketplaceRelatedPage)) {\n      setIsSticky(true);\n    } else if (window.scrollY === 0) {\n      setIsSticky(false);\n    }\n  };\n\n  useEffect(() => {\n    window.addEventListener(\"scroll\", handleScroll);\n    return () => {\n      window.removeEventListener(\"scroll\", handleScroll);\n    };\n  }, [pathname]);\n\n  const shouldHideNavbar =\n    NAVBAR_HIDDEN_PATHS.some((path) => pathname !== \"/\" && pathname.startsWith(path)) &&\n    !shouldIgnoreHiddenPaths;\n  if (shouldHideNavbar) return null;\n\n  const hasBorder = NAVBAR_BORDER_PATHS.some(\n    (path) => pathname !== \"/\" && pathname.startsWith(path)\n  );\n\n  // Currently this is essentially only used for when a user is logged out.  Eventually this\n  // should be consolidated with NavbarDropdownMenu.tsx, designs pending\n  const showMobileMenuButton =\n    pathname === \"/\" ||\n    pathname.startsWith(\"/about\") ||\n    pathname.startsWith(\"/scientists\") ||\n    pathname.startsWith(\"/unsubscribe\") ||\n    (!currentUser.id && isInMarketplaceRelatedPage);\n\n  return (\n    <>\n      <LoginSignUpModal />\n      <MobileMenu isOpen={isMobileMenuOpen} onClose={() => setIsMobileMenuOpen(false)} />\n      <Container isSticky={isSticky} hasBorder={hasBorder} data-testid=\"navbar-main\">\n        <Links>\n          {isTablet && showMobileMenuButton && (\n            <OpenMobileMenuButton type=\"button\" onClick={() => setIsMobileMenuOpen(true)}>\n              <Icon name=\"Burger\" size=\"lg\" />\n            </OpenMobileMenuButton>\n          )}\n          {isUserLoggedOut ? (\n            <a href=\"/\">\n              <Logo src={haloLogo} alt=\"Halo logo\" />\n            </a>\n          ) : (\n            <Link to={marketplacePath()}>\n              <Logo src={haloLogo} alt=\"Halo logo\" />\n            </Link>\n          )}\n          {(() => {\n            if (isTablet) return null;\n            if (isUserLoggedOut) return <LoggedOutNavbarLinks />;\n            if (currentUser.role === UserRole.SCIENTIST) return <ScientistNavbarLinks />;\n            if (currentUser.role === UserRole.SPONSOR) return <SponsorNavbarLinks />;\n            if (currentUser.role === UserRole.UNIVERSITY_ADMIN)\n              return <UniversityAdminNavbarLinks />;\n          })()}\n          {isUserLoggedOut ? (\n            <SignInButtons>\n              {!isTablet && (\n                <a href=\"/login\">\n                  <Button variant=\"ghost\" margin=\"0 8px 0 0\">\n                    Sign in\n                  </Button>\n                </a>\n              )}\n              <a href=\"/get-started\">\n                <GradientButton size=\"md\">Join now</GradientButton>\n              </a>\n            </SignInButtons>\n          ) : (\n            <NavbarDropdownMenu />\n          )}\n        </Links>\n      </Container>\n    </>\n  );\n};\n\nexport default Navbar;\n\nconst Container = styled.div`\n  display: flex;\n  align-items: center;\n  position: ${({ isSticky }) => (isSticky ? \"sticky\" : \"static\")};\n  top: ${({ isSticky }) => (isSticky ? 0 : \"-84px\")};\n  height: 84px;\n  width: 100%;\n  padding: 0 ${WINDOW_DIMENSIONS.PAGE_SIDE_PADDING}px;\n  background-color: ${COLORS.WHITE};\n  border-bottom: 1px solid ${({ hasBorder }) => (hasBorder ? COLORS.NEUTRAL_200 : \"transparent\")};\n  z-index: 100;\n  transition: top 0.3s ease;\n  ${WINDOW_DIMENSIONS.TABLET_MEDIA_QUERY} {\n    padding: 0 24px;\n  }\n  ${WINDOW_DIMENSIONS.MOBILE_MEDIA_QUERY} {\n    padding: 0 16px 0 10px;\n  }\n`;\nconst Links = styled.div`\n  display: flex;\n  align-items: center;\n  width: 100%;\n  height: 100%;\n  margin: 0 auto;\n`;\nconst Logo = styled.img`\n  height: 32px;\n  margin-right: 24px;\n  margin-left: 8px;\n`;\nconst SignInButtons = styled.div`\n  display: flex;\n  margin-left: auto;\n  & a:hover {\n    text-decoration: none;\n  }\n`;\nconst OpenMobileMenuButton = styled.button`\n  border: none;\n  background-color: transparent;\n  &:focus {\n    outline: none;\n  }\n`;\n","import { lazyWithRetry } from \"@utils/appUtils\";\nimport { Route } from \"react-router-dom\";\nimport {\n  notification_campaigns_unsubscribe_path,\n  resume_outreach_notification_campaigns_path,\n} from \"./routes.js\";\nimport { formatPathForRouter } from \"./utils\";\n\nconst UnsubscribePage = lazyWithRetry(\n  () => import(\"../views/NotificationCampaigns/Unsubscribe/UnsubscribePage\")\n);\nconst ResumeOutreachPage = lazyWithRetry(\n  () => import(\"../views/NotificationCampaigns/ResumeOutreach/ResumeOutreachPage\")\n);\n\nconst routes = [\n  <Route\n    exact\n    key=\"notification_campaign_routes/1\"\n    path={formatPathForRouter(notification_campaigns_unsubscribe_path())}\n    component={UnsubscribePage}\n  />,\n  <Route\n    exact\n    key=\"notification_campaign_routes/2\"\n    path={formatPathForRouter(resume_outreach_notification_campaigns_path())}\n    component={ResumeOutreachPage}\n  />,\n];\n\nexport default routes;\n","import PrivateSponsorRoute from \"@components/PrivateSponsorRoute\";\nimport { lazyWithRetry } from \"@utils/appUtils\";\nimport { RequestType } from \"src/App\";\nimport { edit_opportunity_path, new_opportunity_path } from \"./routes\";\n\nconst RfpRequestForm = lazyWithRetry(() => import(\"../views/RfpRequestForm\"));\n\nconst renderForm = (props) => {\n  const searchParams = new URLSearchParams(props.location.search);\n  const request_type = searchParams.get(\"type\");\n  switch (request_type) {\n    case RequestType.REQUEST_FOR_PROPOSAL:\n      return <RfpRequestForm />;\n    default:\n      console.error(\"Unexpected request_type: %s.\", request_type);\n  }\n};\n\nconst routes = [\n  <PrivateSponsorRoute key=\"opportunity-new\" exact path={new_opportunity_path()}>\n    {renderForm}\n  </PrivateSponsorRoute>,\n  <PrivateSponsorRoute key=\"opportunity-edit\" exact path={edit_opportunity_path(\":slug\")}>\n    {renderForm}\n  </PrivateSponsorRoute>,\n];\n\nexport default routes;\n","import { RequestableType } from \"@tsTypes/requests\";\nimport { lazyWithRetry } from \"@utils/appUtils\";\nimport { Route } from \"react-router-dom\";\nimport { request_for_expert_path } from \"./routes.js\";\nimport { formatPathForRouter } from \"./utils\";\n\nconst RfePage = lazyWithRetry(() => import(\"../views/RequestForExpertsPage\"));\nconst ProposalPage = lazyWithRetry(() => import(\"../views/ProposalPage\"));\n\nconst routes = [\n  <Route\n    exact\n    key=\"rfe_routes/1\"\n    path={formatPathForRouter(request_for_expert_path)}\n    component={RfePage}\n  />,\n  <Route exact key=\"rfe_routes/2\" path={\"/request_for_expert_proposals/:slug\"}>\n    <ProposalPage requestableType={RequestableType.REQUEST_FOR_EXPERT} />\n  </Route>,\n];\n\nexport default routes;\n","import { lazyWithRetry } from \"@utils/appUtils\";\nimport { Redirect, Route } from \"react-router-dom\";\nimport { seo_request_for_proposal_path } from \"./routes.js\";\nimport { formatPathForRouter } from \"./utils\";\n\nconst RfpPage = lazyWithRetry(() => import(\"../views/RFPPage\"));\n\nconst routes = [\n  <Route\n    key=\"rfp_routes/1\"\n    path={formatPathForRouter(seo_request_for_proposal_path)}\n    render={({ match, location }) => (\n      <Redirect to={`/request_for_solutions/${match.params.identifier}${location.search}`} />\n    )}\n  />,\n  <Route key=\"rfp_routes/2\" exact path=\"/request_for_solutions/:identifier\" component={RfpPage} />,\n  <Route key=\"rfp_routes/3\" exact path=\"/preview-rfp/:previewHash\">\n    <RfpPage asPreview />\n  </Route>,\n];\n\nexport default routes;\n","import { t, t_html } from \"@utils/i18n\";\nimport StatusPage from \"./StatusPage\";\n\nconst Unauthorized401 = () => {\n  return (\n    <StatusPage\n      quote={t(\"pages.error_pages.401.quote\")}\n      author={t(\"pages.error_pages.401.author\")}\n      errorMessage={t_html(\"pages.error_pages.401.error_message_html\")}\n    />\n  );\n};\n\nexport default Unauthorized401;\n","import { t, t_html } from \"@utils/i18n\";\nimport StatusPage from \"./StatusPage\";\n\nconst Forbidden403 = () => {\n  return (\n    <StatusPage\n      quote={t(\"pages.error_pages.403.quote\")}\n      author={t(\"pages.error_pages.403.author\")}\n      errorMessage={t_html(\"pages.error_pages.403.error_message_html\")}\n    />\n  );\n};\n\nexport default Forbidden403;\n","import Footer from \"@components/Footer\";\nimport NavBar from \"@components/Navbar\";\nimport { setShowErrorBoundary } from \"@redux/actions/defaultActions\";\nimport { t, t_html } from \"@utils/i18n\";\nimport { ReactNode, useEffect } from \"react\";\nimport { useDispatch } from \"react-redux\";\nimport styled from \"styled-components\";\nimport NotFound404 from \"../StatusPages\";\nimport Unauthorized401 from \"../StatusPages/401\";\nimport Forbidden403 from \"../StatusPages/403\";\nimport StatusPage from \"../StatusPages/StatusPage\";\n\nconst ErrorBoundaryFallback = ({ error }: { error: any }) => {\n  const dispatch = useDispatch();\n\n  useEffect(() => {\n    dispatch(setShowErrorBoundary(true));\n  }, []);\n\n  // NOTE: (justinpchang) If ChunkLoadError, attempt to refresh the page once to refresh JS cache.\n  if (error.name === \"ChunkLoadError\") {\n    if (!window.location.hash.endsWith(\"refresh\")) {\n      window.location.replace(window.location + \"#refresh\");\n      window.location.reload();\n    }\n  }\n\n  let innerComponent: ReactNode | null = null;\n  if (error.isAxiosError) {\n    const status = error.response.status;\n    if (status === 401) {\n      innerComponent = <Unauthorized401 />;\n    } else if (status === 404) {\n      innerComponent = <NotFound404 />;\n    } else if (status === 403) {\n      innerComponent = <Forbidden403 />;\n    }\n  } else {\n    innerComponent = (\n      <StatusPage\n        quote={t_html(\"pages.error_pages.fallback.quote_html\")}\n        author={t(\"pages.error_pages.fallback.author\")}\n        errorMessage={t_html(\"pages.error_pages.fallback.error_message_html\")}\n        isErrorBoundary\n      />\n    );\n  }\n\n  return (\n    <Container>\n      <NavBar shouldIgnoreHiddenPaths />\n      {innerComponent}\n      <Footer />\n    </Container>\n  );\n};\n\nexport default ErrorBoundaryFallback;\n\nconst Container = styled.div`\n  height: 100%;\n`;\n","import { ErrorBoundary as AppsignalErrorBoundary } from \"@appsignal/react\";\nimport { useSelector } from \"react-redux\";\n\nimport { RootState } from \"@redux/store\";\nimport appsignal from \"@utils/appsignal\";\nimport ErrorBoundaryFallback from \"./ErrorBoundaryFallback\";\n\nconst ErrorBoundary = ({ children }) => {\n  const currentUser = useSelector((state: RootState) => state.profiles.currentUser);\n\n  return (\n    <AppsignalErrorBoundary\n      instance={appsignal}\n      // eslint-disable-next-line react/no-unstable-nested-components\n      fallback={(error) => <ErrorBoundaryFallback error={error} />}\n      tags={{ userId: currentUser?.id, userEmail: currentUser?.email }}\n    >\n      {children}\n    </AppsignalErrorBoundary>\n  );\n};\n\nexport default ErrorBoundary;\n","import { google_scholar_authors_path } from \"@routes/routes\";\nimport { GoogleScholarAuthor } from \"@tsTypes/google_scholar_authors\";\nimport request from \"./request\";\n\nexport const getGoogleScholarAuthors = async (): Promise<GoogleScholarAuthor[]> => {\n  const response = await request.get(google_scholar_authors_path());\n  return response.data?.authors || [];\n};\n\nexport const getGoogleScholarAuthor = async (\n  authorId: string\n): Promise<{\n  user_id: number;\n}> => {\n  const response = await request.post(\n    google_scholar_authors_path(),\n    { author_id: authorId },\n    { timeout: 10000 }\n  );\n  return response.data;\n};\n","import { ProgressStep } from \"@components/library\";\nimport { COLORS, WINDOW_DIMENSIONS } from \"@constants\";\nimport { t } from \"@utils/i18n\";\nimport styled from \"styled-components\";\n\ninterface Props {\n  completionState: {\n    step1: boolean;\n    step2: boolean;\n    step3a: boolean;\n    step3b: boolean;\n  };\n}\n\nconst i18nPrefix = \"pages.onboarding_container.progress\";\n\nexport function Progress({ completionState: { step1, step2, step3b } }: Props) {\n  return (\n    <Tabs>\n      <Tab>\n        <ProgressStep\n          stepNumber={1}\n          label={t([i18nPrefix, \"step1\"])}\n          isCurrent={!step1}\n          isComplete={step1}\n          needsUpdate={false}\n          formVariant=\"proposal\"\n        />\n        <TabUnderline isCurrent={!step1} isComplete={step1} />\n      </Tab>\n      <Tab>\n        <ProgressStep\n          stepNumber={2}\n          label={t([i18nPrefix, \"step2\"])}\n          isCurrent={step1 && !step2}\n          isComplete={step2}\n          needsUpdate={false}\n          formVariant=\"proposal\"\n        />\n        <TabUnderline isCurrent={step1 && !step2} isComplete={step2} />\n      </Tab>\n      <Tab>\n        <ProgressStep\n          stepNumber={3}\n          label={t([i18nPrefix, \"step3\"])}\n          isCurrent={step1 && step2 && !step3b}\n          isComplete={step3b}\n          needsUpdate={false}\n          formVariant=\"proposal\"\n        />\n        <TabUnderline isCurrent={step1 && step2 && !step3b} isComplete={step3b} />\n      </Tab>\n    </Tabs>\n  );\n}\nconst Tabs = styled.div`\n  width: 100%;\n  display: flex;\n  gap: 8px;\n  margin-bottom: 72px;\n  padding: 0 50px;\n\n  ${WINDOW_DIMENSIONS.TABLET_LANDSCAPE_MEDIA_QUERY} {\n    padding: 0 10px;\n  }\n`;\n\nconst Tab = styled.div`\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: space-between;\n  gap: 8px;\n  width: 100%;\n`;\n\nconst TabUnderline = styled.div`\n  width: 100%;\n  height: 5px;\n  background: ${({ isCurrent }) => {\n    if (isCurrent) return COLORS.BLUE_LIGHT_500;\n    return COLORS.NEUTRAL_200;\n  }};\n  border-radius: 4px;\n  &:after {\n    display: block;\n    content: \"\";\n    height: 5px;\n    width: ${({ isCurrent }) => (isCurrent ? \"50%\" : \"100%\")};\n    background: ${({ isCurrent, isComplete }) => {\n      if (isCurrent) return COLORS.HALO_BLUE;\n      if (isComplete) return COLORS.GREEN;\n      return COLORS.NEUTRAL_200;\n    }};\n  }\n`;\n","import { Button } from \"@components/library\";\nimport { COLORS, FEATURE_FLAGS, FONTS } from \"@constants\";\nimport { signOut } from \"@requests/users\";\nimport { SegmentEventName } from \"@tsTypes/__generated__/enums\";\nimport { track } from \"@utils/appUtils\";\nimport { assertAbsurd } from \"@utils/tsUtils\";\nimport { useEffect } from \"react\";\nimport styled from \"styled-components\";\nimport { UserDetailedType, UserInfo } from \"../OnboardingContainer\";\nimport * as S from \"../StepStyles\";\n\ninterface Props {\n  values: UserInfo;\n  setWork: (v?: string) => void;\n  setRole: (v?: string) => void;\n  setDetailedType: (v?: UserDetailedType) => void;\n  onContinue: () => void;\n}\n\nfunction Step2({ values, setWork, setRole, setDetailedType, onContinue }: Props) {\n  const { work, role, detailedType } = values;\n\n  useEffect(() => {\n    switch (detailedType) {\n      case UserDetailedType.COMPANY_SPONSOR:\n      case UserDetailedType.VENTURE_CAPITAL_SPONSOR:\n      case UserDetailedType.GOVERNMENT_SPONSOR:\n        setRole(\"company-sponsor\");\n        break;\n      case UserDetailedType.UNIVERSITY_SCIENTIST:\n        setRole(\"research-scientist\");\n        break;\n      case UserDetailedType.STARTUP_SCIENTIST:\n      case UserDetailedType.SUPPLIER:\n      case UserDetailedType.CONSULTANT:\n        setRole(\"company-scientist\");\n        break;\n      case UserDetailedType.UNIVERSITY_ADMINISTRATOR:\n        setRole(\"research-administrator\");\n        break;\n      case undefined:\n        break;\n      default:\n        assertAbsurd(detailedType);\n    }\n\n    if (detailedType) {\n      track(SegmentEventName.Click, {\n        react_component: \"Onboarding - Step2\",\n        ui_component: \"Detailed type selection\",\n        detailed_type: detailedType,\n      });\n    }\n  }, [detailedType]);\n\n  return (\n    <S.StepContainer width=\"608px\">\n      <S.StepHeader\n        subheading=\"Welcome to Halo\"\n        heading=\"Tell us about your organization and role.\"\n      />\n      <OptionsHeading>Research Institutions</OptionsHeading>\n      <OptionsContainer>\n        <Option\n          selected={detailedType === UserDetailedType.UNIVERSITY_SCIENTIST}\n          onClick={() => setDetailedType(UserDetailedType.UNIVERSITY_SCIENTIST)}\n        >\n          I&rsquo;m a <b>researcher</b> at a university, lab, or institute\n        </Option>\n        <Option\n          selected={detailedType === UserDetailedType.UNIVERSITY_ADMINISTRATOR}\n          onClick={() => setDetailedType(UserDetailedType.UNIVERSITY_ADMINISTRATOR)}\n        >\n          I&rsquo;m an <b>administrator</b> at a university\n        </Option>\n      </OptionsContainer>\n      <OptionsHeading>Private Sector</OptionsHeading>\n      <OptionsContainer>\n        <Option\n          selected={detailedType === UserDetailedType.COMPANY_SPONSOR}\n          onClick={() => setDetailedType(UserDetailedType.COMPANY_SPONSOR)}\n        >\n          I&rsquo;m in <b>corporate R&D</b>, looking to post partnering requests\n        </Option>\n        <Option\n          selected={detailedType === UserDetailedType.STARTUP_SCIENTIST}\n          onClick={() => setDetailedType(UserDetailedType.STARTUP_SCIENTIST)}\n          data-testid=\"startup-scientist-radio-button\"\n        >\n          I&rsquo;m at a <b>startup</b>, looking to submit proposals or apply to programs\n        </Option>\n        <Option\n          selected={detailedType === UserDetailedType.SUPPLIER}\n          onClick={() => setDetailedType(UserDetailedType.SUPPLIER)}\n        >\n          I&rsquo;m at a <b>supplier or corporation</b>, looking to submit proposals\n        </Option>\n        <Option\n          selected={detailedType === UserDetailedType.CONSULTANT}\n          onClick={() => setDetailedType(UserDetailedType.CONSULTANT)}\n        >\n          I&rsquo;m at a <b>consultancy</b>, looking to submit proposals\n        </Option>\n      </OptionsContainer>\n      <ButtonContainer work={work}>\n        {FEATURE_FLAGS.SIGN_OUT_ON_ONBOARDING && (\n          <Button\n            type=\"button\"\n            onClick={async () => {\n              await signOut();\n            }}\n          >\n            Sign Out\n          </Button>\n        )}\n        <Button\n          type=\"button\"\n          data-testid=\"step2-submit-button\"\n          disabled={!role}\n          onClick={onContinue}\n          width=\"120px\"\n        >\n          Continue\n        </Button>\n      </ButtonContainer>\n    </S.StepContainer>\n  );\n}\n\nexport default Step2;\n\nconst ButtonContainer = styled.div<{ work?: string }>`\n  margin-top: ${({ work }) => (work ? \"40px\" : \"0px\")};\n`;\n\nconst OptionsHeading = styled.h2`\n  margin: 0 0 16px;\n  ${FONTS.SEMIBOLD_1}\n`;\n\nconst OptionsContainer = styled.div`\n  display: flex;\n  gap: 32px;\n  flex-wrap: wrap;\n  margin-bottom: 56px;\n`;\n\nconst Option = styled.div<{ selected?: boolean }>`\n  flex-shrink: 0;\n  width: 288px;\n  padding: 16px;\n  border: 1px solid ${COLORS.NEUTRAL_250};\n  border-radius: 6px;\n  cursor: pointer;\n  ${FONTS.REGULAR_1}\n\n  ${({ selected }) =>\n    selected &&\n    `\n    border: 1px solid ${COLORS.HALO_BLUE};\n    background: ${COLORS.BLUE_LIGHT_300};\n    color: ${COLORS.BLUE_650};\n  `}\n`;\n","import { Icon, ProfilePicture } from \"@components/library\";\nimport { COLORS, FONTS, STYLES, WINDOW_DIMENSIONS } from \"@constants\";\nimport { GoogleScholarAuthor } from \"@tsTypes/google_scholar_authors\";\nimport styled from \"styled-components\";\n\ninterface Props {\n  author: GoogleScholarAuthor;\n  isSelected: boolean;\n  onSelect: (id: number) => void;\n}\n\nconst VISIBLE_PUBLICATION_COUNT = 3;\n\nexport function AuthorCard({ author, isSelected, onSelect }: Props) {\n  return (\n    <Card isSelected={isSelected} onClick={() => onSelect(author.id)}>\n      <ProfilePicture size=\"md\" user={author} />\n      <Info>\n        <h3 title={author.name}>{author.name}</h3>\n        <h4 title={author.title}>{author.title}</h4>\n        <h5 title={author.location}>{author.location}</h5>\n      </Info>\n      <Publications>\n        {author.publications.slice(0, VISIBLE_PUBLICATION_COUNT).map((publication) => (\n          <Publication key={`publication-${publication.id}`}>\n            <Icon name=\"Publication\" size=\"md\" color={COLORS.NEUTRAL_500} />\n            <span title={publication.title!}>{publication.title}</span>\n          </Publication>\n        ))}\n      </Publications>\n    </Card>\n  );\n}\n\nconst Info = styled.div`\n  * {\n    margin: 0;\n    color: inherit;\n    ${STYLES.ONE_LINE_ALT}\n  }\n  h3 {\n    ${FONTS.SEMIBOLD_1}\n  }\n  h4 {\n    ${FONTS.MEDIUM_2}\n  }\n  h5 {\n    ${FONTS.REGULAR_2}\n    color: ${COLORS.NEUTRAL_500};\n  }\n`;\n\nconst Publications = styled.div`\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  gap: 8px;\n`;\n\nconst Card = styled.div`\n  display: grid;\n  grid-template-columns: 50px 200px 1fr;\n  grid-gap: 16px;\n\n  width: 100%;\n  height: 137px;\n  padding: 24px;\n  border-radius: 4px;\n  cursor: pointer;\n\n  ${({ isSelected }) =>\n    isSelected\n      ? `\n    background: ${COLORS.BLUE_LIGHT_50};\n    border: 1px solid ${COLORS.HALO_BLUE};\n    color: ${COLORS.HALO_BLUE};\n  `\n      : `\n    background: ${COLORS.WHITE};\n    border: 1px solid ${COLORS.NEUTRAL_250};\n    color: ${COLORS.BLACK};\n  `}\n\n  ${WINDOW_DIMENSIONS.TABLET_MEDIA_QUERY} {\n    display: flex;\n    flex-wrap: wrap;\n    height: fit-content;\n\n    & > ${ProfilePicture} {\n      flex-basis: 50px;\n    }\n    & > ${Info} {\n      flex-basis: calc(100% - 50px - 16px);\n    }\n    & > ${Publications} {\n      flex-basis: 100%;\n    }\n  }\n`;\n\nconst Publication = styled.div`\n  display: grid;\n  grid-template-columns: auto 1fr;\n  grid-gap: 11px;\n  max-width: 100%;\n\n  color: ${COLORS.NEUTRAL_500};\n  ${FONTS.MEDIUM_2}\n\n  & > span {\n    ${STYLES.ONE_LINE_ALT}\n  }\n`;\n","import toast from \"@components/Toast\";\nimport { Button, InfoTag } from \"@components/library\";\nimport { SearchBarInput } from \"@components/library/Inputs/SearchBarInput\";\nimport { COLORS, FONTS, WINDOW_DIMENSIONS } from \"@constants\";\nimport { getGoogleScholarAuthor } from \"@requests/googleScholarAuthors\";\nimport { useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport { SegmentEventName } from \"@tsTypes/__generated__/enums\";\nimport { GoogleScholarAuthor } from \"@tsTypes/google_scholar_authors\";\nimport { track } from \"@utils/appUtils\";\nimport appsignal from \"@utils/appsignal\";\nimport Fuse from \"fuse.js\";\nimport { Dispatch, SetStateAction, useEffect, useMemo, useState } from \"react\";\nimport { Loader } from \"semantic-ui-react\";\nimport styled from \"styled-components\";\nimport { UserInfo } from \"../OnboardingContainer\";\nimport { StepHeader } from \"../StepStyles\";\nimport { AuthorCard } from \"./AuthorCard\";\n\ninterface Props {\n  userInfo: UserInfo;\n  onContinue: (step: string) => void;\n  onBack: (step: string) => void;\n  authors: GoogleScholarAuthor[];\n  selectedAuthorId: number | null;\n  setSelectedAuthorId: Dispatch<SetStateAction<number | null>>;\n  numDisplayed: number;\n  setNumDisplayed: Dispatch<SetStateAction<number>>;\n  filteredAuthorIds: number[];\n  setFilteredAuthorIds: Dispatch<SetStateAction<number[]>>;\n  isFetching: boolean;\n}\n\nexport const DISPLAY_INCREMENT = 3;\n\nconst getAuthorIdFromUrl = (url: string): string | null => {\n  try {\n    const urlObj = new URL(url);\n    if (urlObj.host.includes(\"scholar.google\")) {\n      const authorId = urlObj.searchParams.get(\"user\");\n      if (authorId) {\n        return authorId;\n      }\n    }\n  } catch (e) {\n    // Not a valid URL\n  }\n\n  return null;\n};\n\nexport function Step3aGoogleScholar({\n  userInfo,\n  onContinue,\n  onBack,\n  authors,\n  selectedAuthorId,\n  setSelectedAuthorId,\n  numDisplayed,\n  setNumDisplayed,\n  filteredAuthorIds,\n  setFilteredAuthorIds,\n  isFetching,\n}: Props) {\n  const [searchText, setSearchText] = useState(\"\");\n  const [isLoading, setIsLoading] = useState(false);\n\n  const queryClient = useQueryClient();\n\n  useEffect(() => {\n    setNumDisplayed(DISPLAY_INCREMENT);\n    setFilteredAuthorIds(authors.map((author) => author.id));\n  }, []);\n\n  useEffect(() => {\n    if (filteredAuthorIds.length === 0) {\n      setFilteredAuthorIds(authors.map((author) => author.id));\n    }\n  }, [authors]);\n\n  useEffect(() => {\n    if (!searchText && filteredAuthorIds.length === 0) {\n      setFilteredAuthorIds(authors.map((author) => author.id));\n      setNumDisplayed(DISPLAY_INCREMENT);\n    }\n  }, [searchText]);\n\n  const { mutate: getAuthor } = useMutation({\n    mutationFn: getGoogleScholarAuthor,\n    onSuccess: ({ user_id }) => {\n      setTimeout(() => {\n        queryClient.invalidateQueries({ queryKey: [\"getGoogleScholarAuthors\"] });\n        setSelectedAuthorId(user_id);\n        setFilteredAuthorIds([user_id]);\n        setIsLoading(false);\n      }, 1000);\n    },\n    onError: (err) => {\n      toast.error(\n        \"Something went wrong while fetching your Google Scholar profile. Please try again.\"\n      );\n      appsignal.sendError(err as any, (span) => {\n        span.setAction(\"Step3aGoogleScholar#getAuthor\");\n      });\n      setIsLoading(false);\n    },\n  });\n\n  const fuse = useMemo(\n    () => new Fuse(authors, { keys: [\"name\", \"location\", \"publications.title\"] }),\n    [authors]\n  );\n\n  const filter = (input: string): void => {\n    setNumDisplayed(DISPLAY_INCREMENT);\n\n    if (!input) {\n      setFilteredAuthorIds(authors.map((author) => author.id));\n      return;\n    }\n\n    // Check if input is a Google Scholar URL\n    const authorId = getAuthorIdFromUrl(input);\n\n    track(SegmentEventName.Search, {\n      react_component: \"Step3aGoogleScholar\",\n      search_query: input,\n      has_author_id: Boolean(authorId),\n    });\n\n    if (authorId) {\n      setIsLoading(true);\n      getAuthor(authorId);\n      return;\n    }\n\n    const result = fuse.search(input);\n    setFilteredAuthorIds(result.map((r) => r.item.id));\n  };\n\n  const isResearcher =\n    userInfo.role === \"research-scientist\" || userInfo.role === \"company-scientist\";\n  const hasResults = authors.length > 0;\n\n  // Skip if not researcher or no results (after final refetch)\n  if (!isResearcher || (!isFetching && !hasResults)) {\n    onContinue(\"step3a\");\n    return null;\n  }\n\n  // Show loader if final refetch is underway\n  if (!hasResults) {\n    return <Loader active inline=\"centered\" />;\n  }\n\n  return (\n    <Container>\n      <StepHeader\n        subheading=\"Import profile information\"\n        heading={\n          <>\n            Is this you? You can select a <b>Google Scholar</b> account to save time building your\n            Halo profile, or skip to the next step.\n          </>\n        }\n      />\n      <FilterContainer>\n        <SearchBarInput\n          value={searchText}\n          onChange={setSearchText}\n          onSubmit={filter}\n          placeholder=\"Filter by institution, publication, Google Scholar URL, etc.\"\n        />\n        <div>\n          <InfoTag backgroundColor={COLORS.NEUTRAL_400}>{filteredAuthorIds.length}</InfoTag>\n          Google Scholar accounts found\n        </div>\n      </FilterContainer>\n      <AuthorsContainer>\n        {isLoading ? (\n          <>\n            Searching for provided Google Scholar URL...\n            <Loader active inline=\"centered\" />\n          </>\n        ) : (\n          <>\n            {filteredAuthorIds.slice(0, numDisplayed).map((authorId) => {\n              const author = authors.find(({ id }) => id === authorId);\n              if (!author) return null;\n              return (\n                <AuthorCard\n                  key={`author-${author.id}`}\n                  author={author}\n                  isSelected={selectedAuthorId === author.id}\n                  onSelect={(id) => {\n                    setSelectedAuthorId(id);\n                    track(SegmentEventName.Click, {\n                      react_component: \"Step3aGoogleScholar\",\n                      ui_component: \"AuthorCard\",\n                      author_id: id,\n                    });\n                  }}\n                />\n              );\n            })}\n            {numDisplayed < filteredAuthorIds.length && (\n              <Button\n                type=\"button\"\n                variant=\"ghost\"\n                size=\"sm\"\n                onClick={() => {\n                  setNumDisplayed(numDisplayed + DISPLAY_INCREMENT);\n                  track(SegmentEventName.Click, {\n                    react_component: \"Step3aGoogleScholar\",\n                    ui_component: \"Load More Button\",\n                    num_displayed: numDisplayed + DISPLAY_INCREMENT,\n                    total: filteredAuthorIds.length,\n                  });\n                }}\n              >\n                Load more\n              </Button>\n            )}\n          </>\n        )}\n      </AuthorsContainer>\n      <ButtonsContainer canLoadMore={numDisplayed < authors.length}>\n        <Button\n          type=\"button\"\n          variant=\"ghost\"\n          size=\"sm\"\n          onClick={() => {\n            onBack(\"step2\");\n            track(SegmentEventName.Click, {\n              react_component: \"Step3aGoogleScholar\",\n              ui_component: \"Back Button\",\n              total: filteredAuthorIds.length,\n              author_id: selectedAuthorId,\n            });\n          }}\n        >\n          Back\n        </Button>\n        <Button\n          type=\"button\"\n          variant=\"primary\"\n          size=\"sm\"\n          margin=\"0 24px\"\n          onClick={() => {\n            onContinue(\"step3a\");\n            track(SegmentEventName.Click, {\n              react_component: \"Step3aGoogleScholar\",\n              ui_component: \"Next Button (with selection)\",\n              total: filteredAuthorIds.length,\n              author_id: selectedAuthorId,\n            });\n          }}\n          disabled={!selectedAuthorId}\n        >\n          Continue\n        </Button>\n        <Button\n          type=\"button\"\n          variant=\"secondary\"\n          size=\"sm\"\n          onClick={() => {\n            setSelectedAuthorId(null);\n            onContinue(\"step3a\");\n            track(SegmentEventName.Click, {\n              react_component: \"Step3aGoogleScholar\",\n              ui_component: \"Skip Button\",\n              total: filteredAuthorIds.length,\n            });\n          }}\n        >\n          Skip\n        </Button>\n      </ButtonsContainer>\n    </Container>\n  );\n}\n\nexport const Container = styled.div`\n  text-align: left;\n  padding: 0;\n  width: 800px;\n  margin-bottom: 200px;\n\n  ${WINDOW_DIMENSIONS.TABLET_MEDIA_QUERY} {\n    padding: 0 30px;\n    width: 100%;\n  }\n`;\n\nexport const StepTitle = styled.h1`\n  margin: 0 0 8px;\n  color: ${COLORS.NEUTRAL_500};\n  ${FONTS.SEMIBOLD_1}\n`;\n\nexport const StepInfo = styled.h2`\n  margin: 0;\n  ${FONTS.HEADING_3_REGULAR}\n`;\n\nconst FilterContainer = styled.div`\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  flex-wrap: wrap;\n  gap: 12px;\n  margin: 32px 0;\n  color: ${COLORS.BLACK};\n  ${FONTS.REGULAR_2}\n\n  & > form {\n    width: min(100%, 515px);\n  }\n\n  & > div {\n    display: flex;\n    align-items: center;\n    gap: 4px;\n  }\n`;\n\nconst AuthorsContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: 16px;\n  ${FONTS.SEMIBOLD_2}\n`;\n\nconst ButtonsContainer = styled.div`\n  width: 100%;\n  margin-top: ${({ canLoadMore }) => (canLoadMore ? \"28px\" : \"40px\")};\n  padding-top: 44px;\n  border-top: 1px solid ${COLORS.NEUTRAL_200};\n  line-height: 50px;\n`;\n","import Icon, { IconName } from \"@components/library/Icon/Icon\";\nimport { COLORS, FONTS } from \"@constants\";\nimport { ReactNode } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport styled from \"styled-components\";\n\ninterface Props {\n  iconName: IconName;\n  title: string | ReactNode;\n  description: string | ReactNode;\n  to: string;\n  width: string;\n}\n\nexport default function Step4NextStep({ iconName, title, description, to, width }: Props) {\n  return (\n    <Container to={to} width={width}>\n      <Icon name={iconName} size=\"md\" color={COLORS.BLACK} />\n      <Title>{title}</Title>\n      <Description>{description}</Description>\n    </Container>\n  );\n}\n\nconst Container = styled(Link)`\n  display: flex;\n  flex-direction: column;\n  justify-content: space-between;\n\n  width: ${({ width }) => width};\n  height: 152px;\n  padding: 16px;\n\n  cursor: pointer;\n  border-radius: 6px;\n  border: 1px solid ${COLORS.NEUTRAL_250};\n\n  &:hover {\n    text-decoration: none;\n  }\n`;\n\nconst Title = styled.h3`\n  margin: 0;\n  color: ${COLORS.HALO_BLUE};\n  ${FONTS.REGULAR_1}\n`;\n\nconst Description = styled.p`\n  margin: 0;\n  color: ${COLORS.NEUTRAL_500};\n  ${FONTS.MEDIUM_3}\n  line-height: 1.5;\n`;\n","import { TextButton } from \"@components/library\";\nimport { WINDOW_DIMENSIONS } from \"@constants\";\nimport { RootState } from \"@redux/store\";\nimport { company_scientist_network_path, reviewer_dashboard_path } from \"@routes/routes\";\nimport { marketplacePath } from \"@routes/utils\";\nimport { getPrevUrlCookie } from \"@utils/authUtils\";\nimport { useSelector } from \"react-redux\";\nimport styled from \"styled-components\";\nimport * as S from \"../StepStyles\";\nimport Step4NextStep from \"./Step4NextStep\";\n\nconst Step4 = ({ userType }) => {\n  const currentUser = useSelector((state: RootState) => state.profiles.currentUser);\n  const subscription = useSelector((state: RootState) => state.company.subscription);\n\n  const routeToPrevUrl = () => {\n    getPrevUrlCookie(marketplacePath(\"requests\", { follow: \"true\" }), false, currentUser.role);\n  };\n\n  const hasPreviousAction = Boolean(getPrevUrlCookie(\"\", false, currentUser.role ?? 0, false));\n\n  return (\n    <S.StepContainer\n      width={[\"research-scientist\", \"company-scientist\"].includes(userType) ? \"800px\" : \"592px\"}\n    >\n      <S.StepHeader\n        subheading=\"Explore Halo\"\n        heading={\n          <>\n            Welcome, {currentUser.first_name}!\n            <br />\n            Here&apos;s what you can do next on Halo.\n          </>\n        }\n      />\n      <NextStepsContainer>\n        {(() => {\n          switch (userType) {\n            case \"research-scientist\":\n            case \"company-scientist\":\n              return (\n                <>\n                  <Step4NextStep\n                    iconName=\"Profile\"\n                    title=\"Refine your profile and get discovered\"\n                    description=\"Add a summary of your work, publications, patents, and more.\"\n                    to={`/profile/${currentUser.first_name}-${currentUser.last_name}-${currentUser.id}`}\n                    width=\"246px\"\n                  />\n                  <Step4NextStep\n                    iconName=\"Search\"\n                    title=\"Find opportunities on the marketplace\"\n                    description=\"Find opportunities to offer your expertise or apply to R&D requests.\"\n                    to={marketplacePath(\"requests\")}\n                    width=\"246px\"\n                  />\n                  <Step4NextStep\n                    iconName=\"Organization\"\n                    title=\"Join company networks\"\n                    description=\"Discover and connect with R&D teams actively looking to engage with experts.\"\n                    to={marketplacePath(\"partners\")}\n                    width=\"246px\"\n                  />\n                </>\n              );\n            case \"company-sponsor\":\n              return (\n                <>\n                  <Step4NextStep\n                    iconName=\"RFP\"\n                    title=\"Draft your first partnering request\"\n                    description=\"Create a draft of your request and submit it for publishing.\"\n                    to={reviewer_dashboard_path({ create: true })}\n                    width=\"280px\"\n                  />\n                  {subscription?.features.company_scientist_network &&\n                    (subscription.features.global_network_search ? (\n                      <Step4NextStep\n                        iconName=\"Search\"\n                        title=\"Search for partners on Halo's network\"\n                        description=\"Search our network of experts actively seeking to partner.\"\n                        to={company_scientist_network_path()}\n                        width=\"280px\"\n                      />\n                    ) : (\n                      <Step4NextStep\n                        iconName=\"Profile\"\n                        title=\"Help build your organization's network\"\n                        description=\"Use Halo to centralize your network of existing partners for your team.\"\n                        to={company_scientist_network_path()}\n                        width=\"280px\"\n                      />\n                    ))}\n                </>\n              );\n            case \"research-administrator\":\n              return (\n                <>\n                  <Step4NextStep\n                    iconName=\"Profile\"\n                    title=\"Invite faculty members to join Halo\"\n                    description=\"Introduce researchers to Halo to help them find relevant opportunities.\"\n                    to=\"/\"\n                    width=\"280px\"\n                  />\n                  <Step4NextStep\n                    iconName=\"Search\"\n                    title=\"Find opportunities on the marketplace\"\n                    description=\"Find opportunities to share with faculty members.\"\n                    to={marketplacePath(\"requests\")}\n                    width=\"280px\"\n                  />\n                </>\n              );\n          }\n        })()}\n      </NextStepsContainer>\n      {(hasPreviousAction || userType === \"company-sponsor\") && (\n        <TextButton\n          onClick={routeToPrevUrl}\n          text=\"...or continue where you left off\"\n          size=\"md\"\n          iconName=\"Arrow Right\"\n          margin=\"48px 0 0\"\n        />\n      )}\n    </S.StepContainer>\n  );\n};\n\nexport default Step4;\n\nconst NextStepsContainer = styled.div`\n  display: flex;\n  gap: 32px;\n\n  ${WINDOW_DIMENSIONS.TABLET_MEDIA_QUERY} {\n    flex-direction: column;\n  }\n`;\n","import toast from \"@components/Toast\";\nimport UserVerificationCode from \"@components/UserVerificationCode\";\nimport { TextButton } from \"@components/library\";\nimport { COLORS } from \"@constants\";\nimport { useSearchParams } from \"@hooks/router\";\nimport haloLogo from \"@images/logos/halo_logo.svg\";\nimport { fetchSubscription } from \"@redux/actions/companyActions\";\nimport { setCurrentUser } from \"@redux/actions/profileActions\";\nimport { RootState } from \"@redux/store\";\nimport { getCompany } from \"@requests/companies\";\nimport { getGoogleScholarAuthors } from \"@requests/googleScholarAuthors\";\nimport { trackRegistration } from \"@requests/hubspot\";\nimport { UserNotVerifiedError, cancelSignUp, onboard } from \"@requests/users\";\nimport { proposal_review_system_path } from \"@routes/routes\";\nimport { useMutation, useQuery } from \"@tanstack/react-query\";\nimport { SegmentEventName } from \"@tsTypes/__generated__/enums\";\nimport { ShowCompany } from \"@tsTypes/index\";\nimport { UserRole } from \"@tsTypes/users\";\nimport { identify, track } from \"@utils/appUtils\";\nimport appsignal from \"@utils/appsignal\";\nimport { t } from \"@utils/i18n\";\nimport { toastErrorHandler } from \"@utils/requests\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { useHistory, useParams } from \"react-router-dom\";\nimport styled from \"styled-components\";\nimport { Progress } from \"./Progress\";\nimport Step2 from \"./Step2\";\nimport Step3 from \"./Step3\";\nimport { DISPLAY_INCREMENT, Step3aGoogleScholar } from \"./Step3aGoogleScholar/Step3aGoogleScholar\";\nimport Step4 from \"./Step4\";\n\nexport enum UserDetailedType {\n  // Scientist user types\n  UNIVERSITY_SCIENTIST = \"university scientist\",\n  STARTUP_SCIENTIST = \"startup scientist\",\n  SUPPLIER = \"supplier\",\n  CONSULTANT = \"consultant\",\n  // Sponsor user types\n  COMPANY_SPONSOR = \"company sponsor\",\n  VENTURE_CAPITAL_SPONSOR = \"venture capital sponsor\", // Deprecated\n  GOVERNMENT_SPONSOR = \"government sponsor\", // Deprecated\n  // Admin user types\n  UNIVERSITY_ADMINISTRATOR = \"university administrator\",\n}\n\nexport interface UserInfo {\n  work: string;\n  role: string;\n  detailedType?: UserDetailedType;\n}\n\nfunction OnboardingContainer() {\n  const [profileInfo, setProfileInfo] = useState<any>({});\n  const [completionState, setCompletionState] = useState({\n    step1: false,\n    step2: false,\n    step3a: false,\n    step3b: false,\n  });\n  const [userInfo, setUserInfo] = useState<UserInfo>({\n    work: \"\",\n    role: \"\",\n    detailedType: undefined,\n  });\n  const [company, setCompany] = useState<ShowCompany | null>(null);\n\n  const [selectedGoogleScholarAuthorId, setSelectedGoogleScholarAuthorId] = useState<number | null>(\n    null\n  );\n  const [googleScholarAuthorsDisplayCount, setGoogleScholarAuthorsDisplayCount] =\n    useState(DISPLAY_INCREMENT);\n  const [filteredGoogleScholarAuthorIds, setFilteredGoogleScholarAuthorIds] = useState<number[]>(\n    []\n  );\n\n  const currentUser = useSelector((state: RootState) => state.profiles.currentUser);\n\n  const { company_identifier } = useParams();\n  const dispatch = useDispatch();\n  const history = useHistory();\n\n  const [searchParams] = useSearchParams();\n  const commenterInviteRequest = searchParams.get(\"commenter_invite_request\");\n\n  useEffect(() => {\n    if (currentUser.profile_info?.id) {\n      history.push(\"/\");\n    }\n    if (currentUser.verified) {\n      onContinue(\"step1\");\n    }\n  }, []);\n\n  useEffect(() => {\n    if (completionState.step1 && commenterInviteRequest) {\n      setUserInfo({\n        ...userInfo,\n        role: \"company-sponsor\",\n        detailedType: UserDetailedType.COMPANY_SPONSOR,\n      });\n      setCompletionState({ ...completionState, step1: true, step2: true });\n    }\n  }, [completionState.step1]);\n\n  useEffect(() => {\n    (async () => {\n      if (company_identifier) {\n        try {\n          const response = await getCompany(company_identifier);\n          setCompany(response.company);\n        } catch (error) {\n          console.error(error);\n        }\n      }\n    })();\n  }, [company_identifier]);\n\n  const scrollToRef = useRef<HTMLDivElement | null>(null);\n  useEffect(() => {\n    scrollToRef.current?.scrollIntoView({ behavior: \"smooth\" });\n    track(SegmentEventName.View, {\n      react_component: \"OnboardingContainer\",\n      completionState,\n    });\n  }, [completionState]);\n\n  const {\n    data: googleScholarAuthors,\n    refetch: refetchGoogleScholarAuthors,\n    isFetching: isGoogleScholarAuthorsFetching,\n  } = useQuery({\n    queryKey: [\"getGoogleScholarAuthors\"],\n    queryFn: getGoogleScholarAuthors,\n    refetchInterval: () => {\n      if (completionState.step2) {\n        return false;\n      }\n      return 3000;\n    },\n  });\n\n  const onboardMutation = useMutation({\n    mutationFn: (userType: string) =>\n      onboard({\n        userType,\n        profileInfo,\n        googleScholarAuthorUserId: selectedGoogleScholarAuthorId,\n        detailedType: userInfo.detailedType,\n        commenterInviteRequest,\n      }),\n    onError: (error, variables, context): void => {\n      if (error instanceof UserNotVerifiedError) {\n        setCompletionState({\n          step1: false,\n          step2: false,\n          step3a: false,\n          step3b: false,\n        });\n        toast.error(t(\"pages.onboarding_container.user_not_verified_message\"));\n        return;\n      }\n      toastErrorHandler(error, variables, context);\n    },\n    onSuccess: async (updatedUser: any) => {\n      dispatch(setCurrentUser(updatedUser));\n\n      await trackRegistration({\n        ...updatedUser,\n        ...(updatedUser.userType === \"admin\" && { role: 2 }),\n      });\n      identify(updatedUser);\n\n      if (updatedUser.role === UserRole.SPONSOR) {\n        dispatch(fetchSubscription(updatedUser.profile_info.company_identifier));\n\n        if (commenterInviteRequest) {\n          history.push(proposal_review_system_path({ request: commenterInviteRequest }));\n        }\n      }\n\n      onContinue(\"step3b\");\n    },\n  });\n\n  const cancelSignUpMutation = useMutation({\n    mutationFn: () => cancelSignUp(completionState.toString()),\n    onSuccess: () => {\n      // Take user back to landing page after canceling sign up\n      window.location.href = \"/\";\n    },\n    onError: toastErrorHandler,\n  });\n\n  const handleOnboard = (userType: string) => {\n    if (onboardMutation.isLoading) {\n      return;\n    }\n    onboardMutation.mutate(userType);\n  };\n\n  const onVerify = () => {\n    dispatch(\n      setCurrentUser({\n        ...currentUser,\n        verified: true,\n      })\n    );\n    onContinue(\"step1\");\n  };\n\n  const updateValue = (value, newValue) => {\n    if (newValue !== userInfo[value]) {\n      setProfileInfo({\n        ...(profileInfo?.university ? { university: profileInfo.university } : null),\n      });\n    }\n    // if user selects a new work value, then clear role value\n    if (value === \"work\" && newValue !== userInfo.work) {\n      setUserInfo({\n        work: newValue,\n        role: \"\",\n      });\n    } else {\n      setUserInfo((prevUserInfo) => {\n        const updatedUserInfo = { ...prevUserInfo };\n        updatedUserInfo[value] = newValue;\n        return updatedUserInfo;\n      });\n    }\n  };\n\n  // when the back button is pressed, set the previous step to incomplete\n  const onBack = (previousStep) => {\n    setCompletionState({ ...completionState, [previousStep]: false });\n  };\n\n  // when the continue button is pressed, set the current step to complete\n  const onContinue = (currentStep) => {\n    setCompletionState({ ...completionState, [currentStep]: true });\n  };\n\n  const currentStep = () => {\n    const { step1, step2, step3a, step3b } = completionState;\n    if (!step1) {\n      return <UserVerificationCode onContinue={onVerify} />;\n    } else if (!step2) {\n      return (\n        <Step2\n          values={userInfo}\n          setWork={(v) => updateValue(\"work\", v)}\n          setRole={(v) => updateValue(\"role\", v)}\n          setDetailedType={(v) => updateValue(\"detailedType\", v)}\n          onContinue={() => {\n            refetchGoogleScholarAuthors();\n            onContinue(\"step2\");\n          }}\n        />\n      );\n    } else if (!step3a) {\n      return (\n        <Step3aGoogleScholar\n          userInfo={userInfo}\n          onContinue={onContinue}\n          onBack={onBack}\n          authors={googleScholarAuthors ?? []}\n          selectedAuthorId={selectedGoogleScholarAuthorId}\n          setSelectedAuthorId={setSelectedGoogleScholarAuthorId}\n          numDisplayed={googleScholarAuthorsDisplayCount}\n          setNumDisplayed={setGoogleScholarAuthorsDisplayCount}\n          filteredAuthorIds={filteredGoogleScholarAuthorIds}\n          setFilteredAuthorIds={setFilteredGoogleScholarAuthorIds}\n          isFetching={isGoogleScholarAuthorsFetching}\n        />\n      );\n    } else if (!step3b) {\n      return (\n        <Step3\n          userType={userInfo.role}\n          handleOnboard={handleOnboard}\n          isSubmitting={onboardMutation.isLoading}\n          onBack={() => {\n            setCompletionState({\n              ...completionState,\n              // Go all the way back to step2 if step3a was not supposed to be shown\n              step2:\n                Number(googleScholarAuthors?.length) > 0 &&\n                (userInfo.role === \"research-scientist\" || userInfo.role === \"company-scientist\"),\n              step3a: false,\n            });\n          }}\n          profileInfo={profileInfo}\n          setProfileInfo={setProfileInfo}\n          user={currentUser}\n          selectedGoogleScholarAuthor={googleScholarAuthors?.find(\n            ({ id }) => id === selectedGoogleScholarAuthorId\n          )}\n        />\n      );\n    }\n    return <Step4 userType={userInfo.role} />;\n  };\n\n  const allStepsComplete = Object.values(completionState).every((step) => step);\n\n  return (\n    <OnboardingPage>\n      <Banner>\n        <img src={haloLogo} />\n        {!allStepsComplete && (\n          <TextButton\n            text={t(\"pages.onboarding_container.cancel_sign_up\")}\n            color={COLORS.HALO_BLUE}\n            iconName={null}\n            onClick={() => {\n              track(SegmentEventName.Click, {\n                react_component: \"OnboardingContainer\",\n                ui_component: \"Cancel sign up button\",\n              });\n              cancelSignUpMutation.mutate({});\n            }}\n            disabled={cancelSignUpMutation.isLoading}\n          />\n        )}\n      </Banner>\n      <Progress completionState={completionState} />\n      <StepContainer>\n        <div ref={scrollToRef} />\n        {currentStep()}\n      </StepContainer>\n    </OnboardingPage>\n  );\n}\n\nexport default OnboardingContainer;\n\nconst OnboardingPage = styled.div`\n  display: flex;\n  flex: 1;\n  flex-direction: column;\n  height: 100%;\n  width: 100%;\n  align-items: center;\n`;\n\nconst Banner = styled.div`\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  position: relative;\n  text-align: center;\n  background-color: ${COLORS.WHITE};\n  height: 84px;\n  margin-bottom: 48px;\n  width: 100vw;\n  padding: 26px 36px;\n  border-bottom: 1px solid ${COLORS.NEUTRAL_200};\n`;\nconst StepContainer = styled.div`\n  padding-bottom: 40px;\n`;\n","import MasqueradeBar from \"@components/MasqueradeBar\";\nimport Messenger from \"@components/Messenger/Messenger\";\nimport MobileRestricted from \"@components/MobileRestricted\";\nimport PrivateSponsorRoute from \"@components/PrivateSponsorRoute\";\nimport SubscriptionWarning from \"@components/SubscriptionWarning\";\nimport TaxonomyUpdateModal from \"@components/TaxonomyUpdateModal\";\nimport { Toaster } from \"@components/Toast\";\nimport toast from \"@components/Toast/Toast\";\nimport SSOSponsorOnboardingModal from \"@components/modals/SSOSponsorOnboardingModal\";\nimport { COLORS, FEATURE_FLAGS, JS_FONTS, WINDOW_DIMENSIONS } from \"@constants\";\nimport { fetchSubscription as fetchSubscriptionAction } from \"@redux/actions/companyActions\";\nimport { clearMessengerState as clearMessengerStateAction } from \"@redux/actions/messengerActions\";\nimport { signOut } from \"@requests/users\";\nimport SubmitProposalRedirect from \"@routes/SubmitProposalRedirect\";\nimport { login_path, profile_page_path } from \"@routes/routes\";\nimport { marketplacePath } from \"@routes/utils\";\nimport { MutationCache, QueryClient, QueryClientProvider } from \"@tanstack/react-query\";\nimport { ReactQueryDevtools } from \"@tanstack/react-query-devtools\";\nimport { RequestableType } from \"@tsTypes/requests\";\nimport { UserRole } from \"@tsTypes/users\";\nimport ScrollToTop from \"@utils/ScrollToTop\";\nimport { identify, lazyWithRetry, page, setPageTitle } from \"@utils/appUtils\";\nimport { setPrevUrlCookie } from \"@utils/authUtils\";\nimport { t } from \"@utils/i18n\";\nimport { StyleSheet, css } from \"aphrodite\";\nimport axios from \"axios\";\nimport dayjs from \"dayjs\";\nimport { PureComponent, Suspense } from \"react\";\nimport { connect } from \"react-redux\";\nimport { Redirect, Route, Switch } from \"react-router-dom\";\nimport { Loader } from \"semantic-ui-react\";\nimport Footer from \"./components/Footer\";\nimport Navbar from \"./components/Navbar\";\nimport PrivateRoute from \"./components/PrivateRoute\";\nimport { USER_ROLES } from \"./constants/users\";\nimport {\n  checkUnread as checkUnreadAction,\n  fetchCurrentUser as fetchCurrentUserAction,\n  setCurrentUser as setCurrentUserAction,\n} from \"./redux/actions/profileActions\";\nimport { updateWindowDimension as updateWindowDimensionAction } from \"./redux/actions/windowDimensionsActions\";\nimport NotificationCampaignRoutes from \"./routes/notification_campaign_routes\";\nimport OpportunityRoutes from \"./routes/opportunity_routes\";\nimport RequestForExpertRoutes from \"./routes/request_for_expert_routes\";\nimport RfpRoutes from \"./routes/rfp_routes\";\nimport ErrorBoundary from \"./views/ErrorBoundary\";\nimport OnboardingContainer from \"./views/Onboarding/OnboardingContainer\";\nimport Unauthorized401 from \"./views/StatusPages/401\";\nimport Forbidden403 from \"./views/StatusPages/403\";\nimport NotFound404 from \"./views/StatusPages/404\";\nconst RequestForStartupPage = lazyWithRetry(() => import(\"./views/RequestForStartupPage\"));\nconst JobPage = lazyWithRetry(() => import(\"./views/JobPage\"));\nconst CompanyPage = lazyWithRetry(() => import(\"./views/CompanyPage\"));\nconst ProfilePage = lazyWithRetry(() => import(\"./views/ProfilePage\"));\nconst ReviewerDashboard = lazyWithRetry(() => import(\"./views/ReviewerDashboard\"));\nconst ProposalReviewSystem = lazyWithRetry(() => import(\"./views/ProposalReviewSystem\"));\nconst Account = lazyWithRetry(() => import(\"./views/Account\"));\nconst RfpOpenCallProposalForm = lazyWithRetry(() => import(\"./views/RfpOpenCallProposalForm\"));\nconst RequestForStartupProposalForm = lazyWithRetry(\n  () => import(\"./views/RequestForStartupProposalForm\")\n);\nconst RequestForExpertProposalForm = lazyWithRetry(\n  () => import(\"./views/RequestForExpertProposalForm\")\n);\nconst CommercialApplicationPage = lazyWithRetry(() => import(\"./views/CommercialApplicationPage\"));\nconst Marketplace = lazyWithRetry(() => import(\"./views/Marketplace\"));\nconst TermsPage = lazyWithRetry(() => import(\"./views/TermsPage\"));\nconst PrivacyPage = lazyWithRetry(() => import(\"./views/PrivacyPage\"));\nconst ContactPage = lazyWithRetry(() => import(\"./views/ContactPage\"));\nconst SponsorTeam = lazyWithRetry(() => import(\"./views/SponsorTeam\"));\nconst ForgotPassword = lazyWithRetry(() => import(\"./views/ForgotPassword\"));\nconst ChangePassword = lazyWithRetry(() => import(\"./views/ChangePassword\"));\nconst ProposalPage = lazyWithRetry(() => import(\"./views/ProposalPage\"));\nconst ScientistProposalLibrary = lazyWithRetry(() => import(\"./views/ScientistProposalLibrary\"));\nconst Careers = lazyWithRetry(() => import(\"./views/Careers\"));\nconst Inbox = lazyWithRetry(() => import(\"./views/Inbox\"));\nconst ProposalLibrary = lazyWithRetry(() => import(\"./views/ProposalLibrary\"));\nconst ScientistNetwork = lazyWithRetry(() => import(\"./views/ScientistNetwork\"));\nconst AboutUs = lazyWithRetry(() => import(\"./views/AboutUs\"));\nconst LoginPage = lazyWithRetry(() => import(\"./views/LoginPage\"));\nconst SignUp = lazyWithRetry(() => import(\"./views/SignUp/SignUp\"));\nconst ScientistNetworkSignUp = lazyWithRetry(() => import(\"./views/ScientistNetworkSignUp\"));\nconst RecommendedRfpSignUp = lazyWithRetry(() => import(\"./views/RecommendedRfpSignUp\"));\nconst UniversityProposalLibrary = lazyWithRetry(() => import(\"./views/UniversityProposalLibrary\"));\nconst UniversityTeam = lazyWithRetry(() => import(\"./views/UniversityTeam\"));\nconst FeatureRequestSplashPage = lazyWithRetry(() => import(\"./views/FeatureRequestSplashPage\"));\n\nconst { TABLET_MEDIA_QUERY } = WINDOW_DIMENSIONS;\n\nexport enum RequestType {\n  REQUEST_FOR_PROPOSAL = \"request_for_proposal\",\n  OPEN_CALL = \"open_call\",\n  REQUEST_FOR_STARTUP = \"request_for_startup\",\n  REQUEST_FOR_EXPERT = \"request_for_experts\",\n}\n\nexport const REQUESTABLE_TO_REQUEST_TYPE = {\n  [RequestableType.RFP]: RequestType.REQUEST_FOR_PROPOSAL,\n  [RequestableType.OPEN_CALL]: RequestType.OPEN_CALL,\n  [RequestableType.REQUEST_FOR_STARTUP]: RequestType.REQUEST_FOR_STARTUP,\n  [RequestableType.REQUEST_FOR_EXPERT]: RequestType.REQUEST_FOR_EXPERT,\n};\n\n// TODO: (overload119) Add correct typing.\ntype Props = any;\ninterface State {\n  isTaxonomyUpdateModalOpen: boolean;\n  isSSOSponsorOnboardingModalOpen: boolean;\n  isCurrentUserLoading: boolean;\n}\n\nconst queryClient = new QueryClient({\n  mutationCache: new MutationCache({\n    onError: (error, _variables, _context, mutation) => {\n      // Skip if the mutation has its own error handler\n      if (mutation.options.onError) return;\n\n      const meta = mutation.meta;\n      if (!meta?.useGlobalErrorHandler || !axios.isAxiosError(error)) {\n        return;\n      }\n\n      const errorMessage = error.response?.data?.error ?? error.response?.data.errors;\n      if (Array.isArray(errorMessage)) {\n        toast.error(\n          <div className=\"with-list\">\n            The following errors prevented that action:\n            <ul>\n              {errorMessage.map((err) => (\n                <li key={err}>{err}</li>\n              ))}\n            </ul>\n          </div>\n        );\n      } else if (errorMessage) {\n        toast.error(errorMessage);\n      } else if (error.response?.status === 401) {\n        toast.error(\n          <div>\n            You have to be logged in to do that. <a href={login_path()}>Click here to log in</a>\n          </div>\n        );\n      } else if (error.response?.status === 403) {\n        toast.error(\"You don't have permission to do that.\");\n      } else {\n        const status = error?.response?.status;\n        toast.error(\n          t([\"error\", status ? \"default_with_code\" : \"default\"], { status: status ?? 500 })\n        );\n      }\n    },\n  }),\n  defaultOptions: {\n    queries: {\n      refetchOnWindowFocus: false,\n    },\n  },\n});\n\nconst TIMEOUT_IN_MS = 900000; // 15 minutes\nlet sessionTimer: null | number = null;\n\nconst isPageRequiringReload = (url: string): boolean => {\n  return url.startsWith(\"/scientists\");\n};\n\nclass App extends PureComponent<Props, State> {\n  listener: (() => void) | null;\n\n  constructor(props) {\n    super(props);\n\n    this.listener = null;\n    this.state = {\n      isTaxonomyUpdateModalOpen: false,\n      isSSOSponsorOnboardingModalOpen: false,\n      isCurrentUserLoading: true,\n    };\n\n    axios.defaults.headers.common.Accept = \"application/json\";\n    axios.defaults.headers.common[\"Content-Type\"] = \"application/json\";\n  }\n\n  async componentDidMount() {\n    const {\n      updateWindowDimension,\n      fetchCurrentUser,\n      checkUnread,\n      clearMessengerState,\n      fetchSubscription,\n      history,\n    } = this.props;\n\n    this.listener = history.listen((location, action: \"POP\" | \"PUSH\") => {\n      if (action === \"POP\" && isPageRequiringReload(location.pathname)) {\n        window.location.reload();\n      }\n    });\n\n    checkUnread();\n    page();\n\n    // Listen for window resizing, and update `windowDimension` in Redux\n    window.addEventListener(\"resize\", updateWindowDimension);\n\n    if (window.outerWidth > 0 && window.outerHeight > 0) {\n      // Sometimes window hasn't fully loaded yet so we shouldn't set to 0 in those\n      // cases\n      updateWindowDimension();\n    }\n\n    const user = await fetchCurrentUser(true);\n\n    if (!user.id) {\n      clearMessengerState();\n    } else {\n      // Fetch subscription info if user is a sponsor\n      if (user.role === USER_ROLES.sponsor) {\n        fetchSubscription(user.profile_info.company_identifier);\n      }\n\n      const wasUserCreatedMoreThan1DayAgo = dayjs().diff(dayjs(user.created_at), \"days\") > 1;\n      const isSponsorUserMissingTitleAndRole =\n        user?.role === UserRole.SPONSOR &&\n        user.profile_info &&\n        !user.profile_info.title &&\n        !user.profile_info.role;\n\n      this.setState({\n        isTaxonomyUpdateModalOpen:\n          !location.pathname.startsWith(\"/onboarding\") &&\n          !location.pathname.startsWith(\"/contact\") &&\n          user?.role !== UserRole.UNIVERSITY_ADMIN &&\n          user?.has_updated_taxonomy === false,\n        isSSOSponsorOnboardingModalOpen:\n          !location.pathname.startsWith(\"/onboarding\") &&\n          !location.pathname.startsWith(\"/network\") &&\n          !location.pathname.startsWith(\"/contact\") &&\n          wasUserCreatedMoreThan1DayAgo &&\n          isSponsorUserMissingTitleAndRole,\n      });\n    }\n\n    this.setState({\n      isCurrentUserLoading: false,\n    });\n\n    // Move webflow content into the webflow container in order to place between navbar and footer\n    const webflowContent = document.getElementById(\"webflow-content\");\n    if (webflowContent) {\n      const webflowContainer = document.getElementById(\"webflow-container\");\n\n      if (\n        this.props.location.pathname === \"/\" ||\n        this.props.location.pathname.startsWith(\"/scientists\")\n      ) {\n        webflowContainer?.appendChild(webflowContent);\n\n        // Display the webflow content after moving to prevent initial flashing\n        webflowContent.style.display = \"block\";\n      }\n    }\n  }\n\n  componentDidUpdate(prevProps) {\n    if (prevProps.windowWidth === this.props.windowWidth) {\n      this.props.checkUnread();\n    }\n\n    if (this.props?.currentUser) {\n      identify(this.props.currentUser);\n\n      // NOTE: (overload119) An idle page will\n      // auto-logout if this feature is enabled.\n      if (this.props.currentUser?.id && FEATURE_FLAGS.SESSION_TIMEOUT) {\n        // Prevent more than 1 instance of the timeout.\n        if (sessionTimer !== null) {\n          clearTimeout(sessionTimer);\n        }\n        sessionTimer = setTimeout(async () => {\n          await signOut();\n          toast.error(\"You have been signed out due to inactivity.\");\n          clearTimeout(sessionTimer as number);\n          sessionTimer = null;\n        }, TIMEOUT_IN_MS) as unknown as number;\n      }\n    }\n\n    if (this.props.location !== prevProps.location) {\n      page();\n    }\n  }\n\n  componentWillUnmount() {\n    const { updateWindowDimension } = this.props;\n    window.removeEventListener(\"resize\", updateWindowDimension);\n    this.listener?.();\n  }\n\n  render() {\n    const { location, currentUser } = this.props;\n\n    setPageTitle(location.pathname);\n\n    const isWebflow = location.pathname === \"/\" || location.pathname.startsWith(\"/scientists\");\n\n    const noFooter =\n      location.pathname.includes(\"/submit_proposal\") ||\n      location.pathname.startsWith(\"/opportunities\") ||\n      location.pathname.startsWith(\"/university_dashboard\") ||\n      location.pathname.startsWith(\"/submit/\") ||\n      location.pathname.startsWith(\"/inbox\") ||\n      location.pathname.startsWith(\"/login\") ||\n      location.pathname.startsWith(\"/get-started\") ||\n      location.pathname.startsWith(\"/preview-rfp/\") ||\n      location.pathname.startsWith(\"/onboarding\") ||\n      location.pathname.includes(\"/signup\") ||\n      location.pathname.startsWith(\"/review_system\");\n\n    const noChat =\n      !currentUser.id ||\n      location.pathname.includes(\"/submit_proposal\") ||\n      location.pathname.startsWith(\"/submit/\") ||\n      location.pathname.startsWith(\"/preview-rfp/\") ||\n      location.pathname.startsWith(\"/onboarding\") ||\n      location.pathname.includes(\"/signup\");\n\n    // Track original referrer id\n    if (localStorage && !localStorage.getItem(\"original_referrer_id\")) {\n      const urlParams = new URLSearchParams(window.location.search);\n      const referrer_id = urlParams.get(\"referrer_id\");\n\n      if (referrer_id) {\n        localStorage.setItem(\"original_referrer_id\", referrer_id);\n      }\n    }\n\n    // HACK: Temporary fix for unsubscribe page not working.\n    // Remove this later and rethink this statement.\n    if (\n      (!location.pathname.startsWith(\"/contact\") &&\n        !location.pathname.startsWith(\"/unsubscribe\") &&\n        !gon.current_user_id &&\n        currentUser.id) ||\n      this.state.isCurrentUserLoading\n    ) {\n      return <Loader style={{ marginTop: \"30vh\" }} active inline=\"centered\" />;\n    }\n\n    let homepage = marketplacePath();\n    if (currentUser.role === USER_ROLES.sponsor) {\n      if (currentUser.profile_info.commenter) homepage = \"/reviewer_dashboard/proposals\";\n      else homepage = \"/reviewer_dashboard\";\n    }\n    if (currentUser.role === USER_ROLES.university_admin) homepage = \"/university_dashboard/team\";\n\n    return (\n      <QueryClientProvider client={queryClient}>\n        {gon.user_masquerade && <MasqueradeBar />}\n        <ErrorBoundary>\n          <div className={css(styles.Marketplace_app)}>\n            <div\n              data-test-profile-id={currentUser.profile_id}\n              data-testid=\"marketplace-container-main\"\n              className={css(\n                isWebflow ? null : styles.Marketplace_mainContainer,\n                noFooter ? styles.Marketplace_noFooter : null\n              )}\n            >\n              {!noChat && <Messenger />}\n              <Navbar />\n              {currentUser.role === UserRole.SPONSOR && <SubscriptionWarning />}\n              <ScrollToTop>\n                <Suspense\n                  fallback={\n                    <Loader\n                      style={{\n                        marginTop: \"200px\",\n                        height: \"500px\",\n                        alignItems: \"center\",\n                        justifyContent: \"center\",\n                        display: \"flex\",\n                      }}\n                      active\n                      inline=\"centered\"\n                    />\n                  }\n                >\n                  {this.state.isTaxonomyUpdateModalOpen && (\n                    <TaxonomyUpdateModal\n                      isOpen={this.state.isTaxonomyUpdateModalOpen}\n                      onClose={() => this.setState({ isTaxonomyUpdateModalOpen: false })}\n                    />\n                  )}\n                  {this.state.isSSOSponsorOnboardingModalOpen && (\n                    <SSOSponsorOnboardingModal\n                      isOpen={this.state.isSSOSponsorOnboardingModalOpen}\n                      onClose={() => this.setState({ isSSOSponsorOnboardingModalOpen: false })}\n                    />\n                  )}\n                  <Switch>\n                    {currentUser.id && (\n                      <Route exact path=\"/\">\n                        <Redirect to={homepage} />\n                      </Route>\n                    )}\n                    <Route exact path=\"/about\" component={AboutUs} />\n                    <Route exact path=\"/home\" component={Marketplace} />\n                    <PrivateRoute exact path=\"/my_proposals\" component={ScientistProposalLibrary} />\n                    <Route exact path=\"/login\" component={LoginPage} />\n                    <Redirect from=\"/register\" to=\"/get-started\" />\n                    <Route exact path=\"/get-started/network\" component={ScientistNetworkSignUp} />\n                    {currentUser.id ? (\n                      <Route exact path=\"/get-started/keywords\">\n                        <Redirect to={profile_page_path(currentUser.profile_id, { keywords: 1 })} />\n                      </Route>\n                    ) : (\n                      <Route\n                        exact\n                        path=\"/get-started/keywords\"\n                        render={() => {\n                          setPrevUrlCookie(\"/get-started/keywords\");\n                          return <Redirect to=\"/login\" />;\n                        }}\n                      />\n                    )}\n                    <Route\n                      exact\n                      path=\"/get-started/opportunities\"\n                      component={RecommendedRfpSignUp}\n                    />\n                    <Route exact path=\"/get-started\" component={SignUp} />\n                    {/* Regular onboarding */}\n                    <PrivateRoute exact path=\"/onboarding\" component={OnboardingContainer} />\n                    <Route exact path=\"/submit/:request_type/:slug\">\n                      {({ match }) => {\n                        const { request_type } = match.params;\n                        switch (request_type) {\n                          case RequestType.REQUEST_FOR_PROPOSAL:\n                          case RequestType.OPEN_CALL:\n                            return <RfpOpenCallProposalForm />;\n                          case RequestType.REQUEST_FOR_STARTUP:\n                            return <RequestForStartupProposalForm />;\n                          case RequestType.REQUEST_FOR_EXPERT:\n                            return <RequestForExpertProposalForm />;\n                          default:\n                            console.error(\"Unexpected request_type: %s.\", request_type);\n                        }\n                      }}\n                    </Route>\n                    <Route exact path=\"/submit_proposal/:rfp_identifier\">\n                      <SubmitProposalRedirect />\n                    </Route>\n                    <Route exact path=\"/company/:identifier\" component={CompanyPage} />\n                    <Route exact path=\"/profile/:id\" component={ProfilePage} />\n                    <PrivateSponsorRoute\n                      exact\n                      path=\"/reviewer_dashboard\"\n                      component={ReviewerDashboard}\n                    />\n                    <PrivateRoute\n                      exact\n                      path=\"/reviewer_dashboard/proposals\"\n                      render={({ location: _location }) => (\n                        <Redirect to={{ ..._location, pathname: \"/review_system\" }} />\n                      )}\n                    />\n                    <PrivateRoute path=\"/review_system\" exact component={ProposalReviewSystem} />\n                    <Redirect path=\"/expert_dashboard\" to=\"/review_system\" />\n                    <PrivateRoute\n                      exact\n                      path=\"/reviewer_dashboard/teams\"\n                      render={() => (\n                        <MobileRestricted breakpoint=\"500px\">\n                          <SponsorTeam />\n                        </MobileRestricted>\n                      )}\n                    />\n                    <PrivateRoute\n                      exact\n                      path=\"/university_dashboard/proposals\"\n                      component={UniversityProposalLibrary}\n                    />\n                    <PrivateRoute\n                      exact\n                      path=\"/university_dashboard/team\"\n                      component={UniversityTeam}\n                    />\n                    <PrivateRoute exact path=\"/account\" component={Account} />\n                    <Route exact path=\"/startup_program/:slug\" component={RequestForStartupPage} />\n                    <Route\n                      exact\n                      path=\"/company/:company_identifier/job/:identifier\"\n                      component={JobPage}\n                    />\n                    {/* NOTE: (justinpchang) Consider refactoring route once more request types are added */}\n                    <Route exact path=\"/proposal/:slug\" component={ProposalPage} />\n                    <Route exact path=\"/startup_program_proposal/:slug\">\n                      <ProposalPage requestableType={RequestableType.REQUEST_FOR_STARTUP} />\n                    </Route>\n                    <PrivateRoute exact path=\"/proposal_library\" component={ProposalLibrary} />\n                    {RfpRoutes}\n                    {RequestForExpertRoutes}\n                    {NotificationCampaignRoutes}\n                    {OpportunityRoutes}\n                    <Route exact path=\"/network\" component={ScientistNetwork} />\n                    <Route\n                      exact\n                      path=\"/application/:commercial_application\"\n                      component={CommercialApplicationPage}\n                    />\n                    <Route exact path=\"/terms\" component={TermsPage} />\n                    <Route exact path=\"/privacy\" component={PrivacyPage} />\n                    <Route exact path=\"/contact\" component={ContactPage} />\n                    <PrivateRoute exact path=\"/inbox\" component={Inbox} />\n                    <Route exact path=\"/forgot_password\" component={ForgotPassword} />\n                    <Route exact path=\"/change_password\" component={ChangePassword} />\n                    <Route exact path=\"/careers\" component={Careers} />\n                    <Route exact path=\"/sponsors\">\n                      <Redirect to=\"/marketplace/partners\" />\n                    </Route>\n                    <Route path={\"/marketplace\"} component={Marketplace} />\n                    <Route exact path=\"/feature_requests\" component={FeatureRequestSplashPage} />\n                    {/*\n                      We render nothing on / since the Webflow layout is active on this page.\n                      For unhandled routes we use window.location.href which properly refreshes the assets\n                      and loads the Webflow layout. Otherwise it'd be an empty screen.\n                    */}\n                    <Route exact path=\"/\" />\n                    <Route exact path=\"/scientists\" />\n                    <Route exact path=\"/401\" component={Unauthorized401} />\n                    <Route exact path=\"/403\" component={Forbidden403} />\n                    <Route exact path=\"/404\" component={NotFound404} />\n                    <Route path=\"*\" component={NotFound404} />\n                  </Switch>\n                </Suspense>\n              </ScrollToTop>\n            </div>\n          </div>\n          {isWebflow && <div id=\"webflow-container\" />}\n          <Toaster />\n          {!noFooter && <Footer />}\n        </ErrorBoundary>\n        {!process.env.CYPRESS && <ReactQueryDevtools initialIsOpen={false} />}\n      </QueryClientProvider>\n    );\n  }\n}\n\nconst mapStateToProps = (state) => ({\n  currentUser: state.profiles.currentUser,\n  windowWidth: state.window.width,\n});\n\nconst mapDispatchToProps = {\n  updateWindowDimension: updateWindowDimensionAction,\n  fetchCurrentUser: fetchCurrentUserAction,\n  setCurrentUser: setCurrentUserAction,\n  checkUnread: checkUnreadAction,\n  clearMessengerState: clearMessengerStateAction,\n  fetchSubscription: fetchSubscriptionAction,\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(App);\n\nconst styles = StyleSheet.create({\n  Marketplace_app: {\n    position: \"relative\",\n    display: \"grid\",\n    height: \"fit-content\",\n    gridTemplateColumns: \"100%\",\n  },\n  Marketplace_mainContainer: {\n    display: \"inline-block\",\n    position: \"relative\",\n    minHeight: \"100vh\",\n    marginBottom: \"40px\",\n  },\n  Marketplace_mobileContainer: {\n    [TABLET_MEDIA_QUERY]: {\n      \":nth-child(1n) > .ui.container\": {\n        marginLeft: \"unset\",\n        marginRight: \"unset\",\n        paddingLeft: \"unset\",\n        paddingRight: \"unset\",\n      },\n    },\n  },\n  Marketplace_noFooter: {\n    marginBottom: \"0px\",\n  },\n  toast_body: {\n    color: COLORS.WHITE,\n    marginRight: \"10px\",\n    ...JS_FONTS.MEDIUM_3,\n  },\n  toast_progress: {\n    background: COLORS.HALO_BLUE,\n  },\n  toast_inner: {\n    padding: \"15px\",\n    paddingBottom: \"20px\",\n    borderRadius: \"4px\",\n  },\n  toast_container: {\n    zIndex: 1000000,\n  },\n  toast_close: {\n    position: \"initial\",\n  },\n});\n","import { StyledLink } from \"@components/Footer/Footer\";\nimport { Button } from \"@components/library\";\nimport { toggleLoginModal } from \"@redux/actions/profileActions\";\nimport { RootState } from \"@redux/store\";\nimport { SegmentEventName } from \"@tsTypes/__generated__/enums\";\nimport { UserRole } from \"@tsTypes/users\";\nimport { track } from \"@utils/appUtils\";\nimport { setPrevUrlCookie } from \"@utils/authUtils\";\nimport { useEffect } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport styled from \"styled-components\";\n\ninterface Props {\n  type?: \"button\" | \"link\";\n}\n\nconst CANNY_APP_ID = \"660af386fa664b82e994fd67\";\n\nconst FeatureRequestButton = ({ type = \"link\" }: Props) => {\n  const { id, name, email, image, role, profile_info, created_at, roles } = useSelector(\n    (state: RootState) => state.profiles.currentUser\n  );\n  const isSponsor = role === UserRole.SPONSOR;\n  const isUniversityAdmin = role === UserRole.UNIVERSITY_ADMIN;\n\n  const dispatch = useDispatch();\n\n  useEffect(() => {\n    if (!id) return;\n\n    let userType: \"Scientist\" | \"Sponsor\" | \"University Admin\" = \"Scientist\";\n    if (isSponsor) userType = \"Sponsor\";\n    else if (isUniversityAdmin) userType = \"University Admin\";\n\n    window.Canny?.(\"identify\", {\n      appID: CANNY_APP_ID,\n      user: {\n        id,\n        name,\n        email,\n        avatarURL: image.url,\n        created: new Date(created_at).toISOString(),\n        ...(isSponsor && {\n          companies: [\n            {\n              id: profile_info.company_id,\n              name: profile_info.company_name,\n            },\n          ],\n        }),\n        // Canny prettifies custom field names in the UI using snake_case (or kebab-case)\n        customFields: {\n          user_type: userType,\n          ...(role === UserRole.SCIENTIST && {\n            is_startup_scientist: profile_info.is_startup_scientist,\n            scientist_affiliation: profile_info.location,\n            scientist_number_of_proposals: (profile_info.proposals || []).filter(\n              (proposal) => proposal.completed && !proposal.deleted_at\n            ).length,\n          }),\n          ...(isSponsor && {\n            is_company_admin: profile_info.is_admin,\n            is_company_super_admin: profile_info.is_super_admin,\n            sponsor_license_type: profile_info.license,\n            sponsor_number_of_review_teams: roles.filter(\n              (_role) => _role.resource_type === \"Request\"\n            ).length,\n          }),\n          ...(isUniversityAdmin && {\n            university_admin_affiliation: profile_info.university,\n            university_admin_number_of_invites: profile_info.invited_users_count,\n            university_admin_number_of_accepted_invites: profile_info.accepted_users_count,\n          }),\n        },\n      },\n    });\n  }, [id]);\n\n  const handleClick = () => {\n    track(SegmentEventName.Click, {\n      ui_component: `Feature Request Button (${type === \"button\" ? \"Splash Page\" : \"Footer\"})`,\n    });\n\n    if (!id) {\n      setPrevUrlCookie(window.location.pathname);\n      dispatch(\n        toggleLoginModal({\n          open: true,\n          previousAction: \"submit-feature-request\",\n        })\n      );\n      return;\n    }\n\n    const authenticatedLink = window.Canny?.(\n      \"authenticateCannyLink\",\n      isSponsor\n        ? \"https://halo-science.canny.io/feature-requests\"\n        : \"https://halo-science.canny.io/scientists-startups-feature-requests\"\n    );\n    window.open(authenticatedLink, \"_blank\");\n  };\n\n  return type === \"button\" ? (\n    <Button onClick={handleClick}>Submit feature request</Button>\n  ) : (\n    <LinkContainer>\n      <StyledLink as=\"button\" onClick={handleClick}>\n        Feature requests\n      </StyledLink>\n    </LinkContainer>\n  );\n};\n\nexport default FeatureRequestButton;\n\nconst LinkContainer = styled.div`\n  line-height: 1;\n  button {\n    padding: 0;\n    background: none;\n    border: none;\n    &:focus {\n      outline: none;\n    }\n  }\n`;\n","import FeatureRequestButton from \"@components/FeatureRequestButton\";\nimport { GradientButton, Icon } from \"@components/library\";\nimport { COLORS, FONTS, WINDOW_DIMENSIONS } from \"@constants\";\nimport { useHubspotCTAs } from \"@hooks/useHubspotCTAs\";\nimport haloLogo from \"@images/halo-inverse.svg\";\nimport { Link } from \"react-router-dom\";\nimport styled from \"styled-components\";\n\nconst Footer = () => {\n  // Initialize HubSpot CTAs for the \"Subscribe\" button\n  // Without this, the \"Subscribe\" button doesn't work for signed in users\n  useHubspotCTAs([]);\n\n  return (\n    <OuterContainer>\n      <InnerContainer>\n        <TopContainer>\n          <Logo src={haloLogo} alt=\"Halo home\" />\n          <EmailDigestCTAContainer>\n            <Header>\n              Discover tomorrow&apos;s\n              <br />\n              breakthroughs today.\n            </Header>\n            <SubHeader>\n              Get new partnering opportunities\n              <br />\n              delivered to your inbox.\n            </SubHeader>\n            <div>\n              <GradientButton\n                size=\"md\"\n                width=\"127px\"\n                maxHeight=\"36px\"\n                // Trigger HubSpot CTA for Email Digest Signup\n                // https://app.hubspot.com/calls-to-action/6895929/edit/125612443295/content\n                className=\"hs-cta-trigger-button hs-cta-trigger-button-125612443295\"\n              >\n                Subscribe\n              </GradientButton>\n            </div>\n          </EmailDigestCTAContainer>\n          <MobileSocialIcons>\n            <a href=\"https://twitter.com/halodotscience\" target=\"_blank\" rel=\"noreferrer\">\n              <Icon name=\"Twitter\" size=\"xl\" color={COLORS.NEUTRAL_900} />\n            </a>\n            <a\n              href=\"https://www.linkedin.com/company/halodotscience\"\n              target=\"_blank\"\n              rel=\"noreferrer\"\n            >\n              <Icon name=\"LinkedIn\" size=\"xl\" color={COLORS.NEUTRAL_900} />\n            </a>\n          </MobileSocialIcons>\n          <Line mobileOnly />\n          <LinksContainer>\n            <LinkColumn>\n              <LinkHeader>Company</LinkHeader>\n              <StyledLink as=\"a\" href=\"/about\">\n                About\n              </StyledLink>\n              <StyledLink as=\"a\" href=\"https://blog.halo.science\">\n                Blog\n              </StyledLink>\n              <StyledLink as=\"a\" href=\"/careers\">\n                Careers\n              </StyledLink>\n              <StyledLink\n                as=\"a\"\n                href=\"https://blog.halo.science/a-look-back-at-the-2019-halo-awards\"\n              >\n                Halo Awards\n              </StyledLink>\n            </LinkColumn>\n            <LinkColumn>\n              <LinkHeader>Support</LinkHeader>\n              <StyledLink as=\"a\" href=\"https://knowledge.halo.science/faq\">\n                FAQs\n              </StyledLink>\n              <StyledLink as=\"a\" href=\"https://knowledge.halo.science/\">\n                Help center\n              </StyledLink>\n              <FeatureRequestButton />\n              <StyledLink as=\"a\" href=\"/contact\">\n                Contact us\n              </StyledLink>\n            </LinkColumn>\n            <LinkColumn>\n              <LinkHeader>Sponsors</LinkHeader>\n              <StyledLink as=\"a\" href=\"https://meetings.hubspot.com/sheena-pulapaka\">\n                Request a demo\n              </StyledLink>\n              <StyledLink as=\"a\" href=\"https://info.halo.science/customer-stories\">\n                Customer stories\n              </StyledLink>\n              {/* TODO: (thaske) temporarily hide until we have this */}\n              {/* <StyledLink to=\"/claim\">Claim your page</StyledLink> */}\n            </LinkColumn>\n          </LinksContainer>\n        </TopContainer>\n        <SocialIcons>\n          <a href=\"https://twitter.com/halodotscience\" target=\"_blank\" rel=\"noreferrer\">\n            <Icon name=\"Twitter\" size=\"xl\" color={COLORS.NEUTRAL_900} />\n          </a>\n          <a\n            href=\"https://www.linkedin.com/company/halodotscience\"\n            target=\"_blank\"\n            rel=\"noreferrer\"\n          >\n            <Icon name=\"LinkedIn\" size=\"xl\" color={COLORS.NEUTRAL_900} />\n          </a>\n        </SocialIcons>\n      </InnerContainer>\n      <Line />\n      <InnerContainer>\n        <BottomContainer>\n          <BottomLinks>\n            <StyledLink as=\"a\" href=\"/privacy\" color={COLORS.NEUTRAL_250}>\n              Privacy Policy\n            </StyledLink>\n            <StyledLink as=\"a\" href=\"/terms\" color={COLORS.NEUTRAL_250}>\n              Terms of Service\n            </StyledLink>\n            {/* TODO: (thaske) temporarily hide until we have this */}\n            {/* <BottomLink>Cookie Policy</BottomLink> */}\n            {/* <BottomLink>Accessibility Policy</BottomLink> */}\n          </BottomLinks>\n          <CopyRight>© 2023 Halo Cures, Inc.</CopyRight>\n        </BottomContainer>\n      </InnerContainer>\n    </OuterContainer>\n  );\n};\n\nexport default Footer;\n\nconst FOOTER_MEDIA_QUERY = `@media (max-width: 1090px)`;\n\nconst OuterContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n\n  position: relative;\n\n  padding: 76px ${WINDOW_DIMENSIONS.PAGE_SIDE_PADDING}px 40px;\n\n  ${FONTS.REGULAR_1}\n  color: ${COLORS.WHITE};\n  background-color: ${COLORS.NEUTRAL_900};\n\n  ${FOOTER_MEDIA_QUERY} {\n    padding: 80px 32px 32px;\n  }\n`;\n\nconst InnerContainer = styled.div`\n  max-width: ${WINDOW_DIMENSIONS.DEFAULT_MAX_WIDTH}px;\n  width: 100%;\n`;\n\nconst TopContainer = styled.div`\n  display: flex;\n  justify-content: space-between;\n\n  margin: 0 0 48px;\n\n  ${FOOTER_MEDIA_QUERY} {\n    flex-direction: column;\n    gap: 0;\n  }\n`;\n\nconst Logo = styled.img`\n  width: 65px;\n  height: 32px;\n\n  ${FOOTER_MEDIA_QUERY} {\n    margin: 0 0 64px;\n  }\n`;\n\nconst Header = styled.div`\n  ${FONTS.HEADING_3_REGULAR};\n  margin: 0 0 39px;\n\n  ${FOOTER_MEDIA_QUERY} {\n    margin: 0 0 24px;\n  }\n`;\n\nconst SubHeader = styled.div`\n  margin-bottom: 20px;\n`;\n\nconst EmailDigestCTAContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n\n  width: 440px;\n\n  @media (max-width: 1440px) {\n    width: unset;\n  }\n`;\n\n// Also used in FeatureRequestButton, which mainly exists as a \"link\" in the footer\nexport const StyledLink = styled(Link)<{ color?: string }>`\n  width: fit-content;\n\n  ${FONTS.REGULAR_1}\n\n  color: ${({ color }) => color || COLORS.WHITE};\n\n  &&:hover {\n    color: ${COLORS.BLUE_LIGHT_600};\n\n    text-decoration: underline !important;\n    text-decoration-color: ${COLORS.BLUE_600} !important;\n    -webkit-text-decoration-color: ${COLORS.BLUE_600} !important;\n    text-underline-offset: 4px !important;\n  }\n\n  &:focus {\n    color: ${COLORS.WHITE};\n    text-decoration: none;\n  }\n`;\n\nconst LinksContainer = styled.div`\n  display: flex;\n  gap: 110px;\n\n  ${FOOTER_MEDIA_QUERY} {\n    flex-wrap: wrap;\n    row-gap: 48px;\n\n    margin: 42px 0 0;\n  }\n`;\n\nconst LinkColumn = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 16px;\n\n  & ${StyledLink} {\n    line-height: 1 !important;\n  }\n`;\n\nconst LinkHeader = styled.div`\n  ${FONTS.SEMIBOLD_1}\n\n  margin: 0 0 24px;\n\n  ${FOOTER_MEDIA_QUERY} {\n    margin: 0 0 8px;\n  }\n`;\n\nconst SocialIcons = styled.div`\n  display: flex;\n  margin: 0 0 30px;\n\n  ${FOOTER_MEDIA_QUERY} {\n    display: none;\n  }\n`;\n\nconst MobileSocialIcons = styled.div`\n  display: none;\n  margin: 0 0 30px;\n\n  ${FOOTER_MEDIA_QUERY} {\n    display: flex;\n    margin: 32px 0;\n  }\n`;\n\nconst Line = styled.div<{ mobileOnly?: boolean }>`\n  height: 1px;\n  width: 100vw;\n  background: rgba(217, 217, 217, 0.2);\n\n  ${({ mobileOnly }) =>\n    mobileOnly &&\n    `\n      display: none;\n\n      ${FOOTER_MEDIA_QUERY} {\n        display: block;\n\n        position: relative;\n        left: -32px;\n      }\n    `}\n`;\n\nconst BottomContainer = styled.div`\n  display: flex;\n  justify-content: space-between;\n  width: 100%;\n  padding: 40px 0 0;\n\n  ${FOOTER_MEDIA_QUERY} {\n    flex-direction: column;\n    padding: 0;\n  }\n`;\n\nconst BottomLinks = styled.div`\n  display: flex;\n  gap: 34px;\n\n  line-height: 1;\n\n  ${FOOTER_MEDIA_QUERY} {\n    flex-direction: column;\n    gap: 16px;\n\n    margin: 48px 0 84px;\n  }\n`;\n\nconst CopyRight = styled.div`\n  ${FONTS.REGULAR_1}\n\n  color: ${COLORS.NEUTRAL_250};\n\n  ${FOOTER_MEDIA_QUERY} {\n    width: 100%;\n    text-align: center;\n  }\n`;\n","import { COLORS, FONTS, JS_FONTS, WINDOW_DIMENSIONS } from \"@constants\";\nimport { StyleSheet } from \"aphrodite\";\nimport styled from \"styled-components\";\n\nconst { MOBILE_MEDIA_QUERY } = WINDOW_DIMENSIONS;\n\nexport const styles = StyleSheet.create({\n  InviteModal_modal: {\n    maxWidth: \"654px\",\n    width: \"100% !important\",\n    padding: \"40px 38px !important\",\n    overflow: \"visible\",\n    [MOBILE_MEDIA_QUERY]: {\n      width: \"350px\",\n      padding: \"4.8em 2em\",\n    },\n  },\n  InviteModal_content: {\n    padding: \"0px\",\n    maxHeight: \"none\",\n  },\n  InviteModal_modalTextArea: {\n    width: \"100%\",\n    maxWidth: \"574px\",\n    height: \"190px\",\n    margin: \"auto\",\n    padding: \"10px\",\n    ...JS_FONTS.REGULAR_2,\n    color: COLORS.BLACK,\n    resize: \"none\",\n    borderRadius: \"3px\",\n    border: `1px solid ${COLORS.NEUTRAL_400}`,\n    \":focus\": {\n      outline: \"none\",\n      borderColor: COLORS.HALO_BLUE,\n      boxShadow: \"none !important\",\n    },\n    \"::placeholder\": {\n      color: COLORS.NEUTRAL_500,\n      ...JS_FONTS.REGULAR_2,\n    },\n  },\n  InviteModal_modalInput: {\n    margin: \".3rem 0 .3rem .3rem\",\n    ...JS_FONTS.REGULAR_2,\n    border: \"none\",\n    outline: \"none\",\n    background: \"transparent\",\n    \":focus\": {\n      outline: \"none\",\n      border: \"none\",\n    },\n    \"::placeholder\": {\n      color: COLORS.NEUTRAL_500,\n    },\n  },\n  InviteModal_modalInputZero: {\n    marginLeft: \"10px\",\n  },\n  InviteModal_modalButtonHolder: {\n    width: \"100%\",\n    maxWidth: \"357px\",\n    display: \"flex\",\n    textAlign: \"right\",\n    marginTop: \"16px\",\n  },\n  InviteModal_header: {\n    display: \"flex\",\n    justifyContent: \"space-between\",\n    ...JS_FONTS.HEADING_4_SEMIBOLD,\n    color: COLORS.BLACK,\n    textAlign: \"left\",\n    margin: \"0 auto 15px\",\n  },\n  InviteModal_closeModalButton: {\n    width: \"12px\",\n    height: \"12px\",\n    cursor: \"pointer\",\n    marginLeft: \"6px\",\n  },\n  InviteModal_subheader: {\n    color: COLORS.BLACK,\n    ...JS_FONTS.REGULAR_2,\n    margin: \"0px auto 21px\",\n    textAlign: \"left\",\n  },\n  ConfirmationInviteModal_subheader: {\n    margin: \"0px auto 10px\",\n  },\n  ConfirmationInviteModal_footer: {\n    margin: \"30px auto\",\n  },\n  InviteModal_deleteIcon: {\n    width: \"12px\",\n    height: \"12px\",\n    border: \"none\",\n    ...JS_FONTS.MEDIUM_1,\n    margin: \"6px\",\n    padding: 0,\n    display: \"flex\",\n    alignItems: \"center\",\n    justifyContent: \"center\",\n    cursor: \"pointer\",\n  },\n  InviteModal_errorMessage: {\n    marginTop: \"5px\",\n    color: COLORS.RED,\n    ...JS_FONTS.REGULAR_2,\n    textAlign: \"left\",\n    marginBottom: \"5px\",\n  },\n  InviteModal_errorField: {\n    border: `solid 1px ${COLORS.RED}`,\n  },\n  InviteModal_emailChip: {\n    backgroundColor: COLORS.NEUTRAL_200,\n    ...JS_FONTS.REGULAR_2,\n    borderRadius: \"3px\",\n    height: \"24px\",\n    color: COLORS.BLACK,\n    padding: \"0 4px 0 1rem\",\n    display: \"inline-flex\",\n    alignItems: \"center\",\n    margin: \"0.3rem\",\n    position: \"relative\",\n  },\n  InviteModal_invalidEmailChip: {\n    backgroundColor: \"#FFEDED\",\n  },\n  ConfirmationInviteModal_emailChip: {\n    padding: \"4px 6px\",\n  },\n  InviteModal_modalInputDiv: {\n    width: \"574px\",\n    display: \"flex\",\n    flexWrap: \"wrap\",\n    minHeight: \"38px\",\n    margin: \"0px auto 0px\",\n    ...JS_FONTS.REGULAR_2,\n    border: `1px solid ${COLORS.NEUTRAL_400}`,\n    borderRadius: \"3px\",\n  },\n  InviteModal_smallerInputDiv: {\n    width: \"429px\",\n  },\n  InviteModal_modalInputDivFocus: {\n    outline: \"none\",\n    borderColor: COLORS.HALO_BLUE,\n  },\n  InviteModal_inputLabel: {\n    ...JS_FONTS.REGULAR_2,\n    color: COLORS.BLACK,\n    marginBottom: \"5px\",\n  },\n  InviteModal_inputLabelDropdown: {\n    marginLeft: \"15px\",\n  },\n  InviteModal_emailDropdown: {\n    display: \"flex\",\n    position: \"absolute\",\n    alignItems: \"center\",\n    marginBottom: \"12px\",\n    paddingLeft: \"10px\",\n    minHeight: \"36px\",\n    width: \"100%\",\n    color: COLORS.HALO_BLUE,\n    backgroundColor: COLORS.WHITE,\n    ...JS_FONTS.REGULAR_2,\n    border: `0.5px solid ${COLORS.NEUTRAL_200}`,\n    boxSizing: \"border-box\",\n    borderRadius: \"3px\",\n    \":hover\": {\n      opacity: 1,\n      cursor: \"pointer\",\n    },\n  },\n  InviteModal_modalInputDivFilled: {\n    padding: \"0.6rem 0px 0.6rem 0.6rem \",\n  },\n});\n\nexport const InviteModalDropdown = styled.div`\n  margin-left: 14px;\n  width: 130px !important;\n  height: 38px !important;\n  ${FONTS.REGULAR_2};\n  padding: 10px 11px !important;\n  border-radius: 3px !important;\n  border: ${(props) =>\n    props.dropdownActive\n      ? `1px solid ${COLORS.HALO_BLUE}`\n      : `1px solid ${COLORS.NEUTRAL_400}`} !important;\n  &&&&&& i {\n    ${FONTS.REGULAR_3};\n    color: ${(props) => (props.dropdownActive ? COLORS.HALO_BLUE : COLORS.NEUTRAL_400)};\n    margin-right: 0px;\n    position: relative;\n    right: 0px;\n    padding-left: ${(props) => (props.admin ? \"6px\" : \"46px\")};\n  }\n`;\nexport const DropdownMenu = styled.div`\n  &&&& {\n    max-height: unset;\n    width: 350px;\n    box-sizing: border-box;\n    border: 0.5px solid ${COLORS.NEUTRAL_200};\n    border-radius: 0px;\n    overflow: auto;\n    margin-top: 1px;\n  }\n`;\nexport const DropdownItem = styled.div`\n  border: 2px solid ${COLORS.BLUE_LIGHT_300};\n  box-sizing: border-box;\n  box-shadow: 0px 14px 24px rgba(151, 158, 170, 0.25);\n  border-radius: 3px;\n  &&&& {\n    ${FONTS.MEDIUM_2};\n    color: ${(props) => (props.red ? COLORS.RED : COLORS.BLACK)} !important;\n    border-bottom: 1px solid ${COLORS.NEUTRAL_200};\n    height: 83px;\n  }\n`;\nexport const DropdownSubHeader = styled.div`\n  ${FONTS.REGULAR_3};\n  color: ${COLORS.NEUTRAL_500};\n  margin-top: 5px;\n`;\nexport default styles;\n","import { Button, Icon, IconButton } from \"@components/library\";\nimport { COLORS } from \"@constants\";\nimport { fetchUniversityMembers as fetchUniversityMembersAction } from \"@redux/actions/defaultActions\";\nimport { SegmentEventName, SegmentEventObject } from \"@tsTypes/__generated__/enums\";\nimport { UserRole } from \"@tsTypes/users\";\nimport { track, usedPersonalEmail } from \"@utils/appUtils\";\nimport { css } from \"aphrodite\";\nimport { PureComponent } from \"react\";\nimport { connect } from \"react-redux\";\nimport { Dropdown, Modal } from \"semantic-ui-react\";\nimport api from \"src/requests/request\";\nimport Validator from \"validator\";\nimport {\n  DropdownItem,\n  DropdownMenu,\n  DropdownSubHeader,\n  InviteModalDropdown,\n  styles,\n} from \"./InviteModal.styles\";\n\nconst ROLES = {\n  0: \"Faculty\",\n  2: \"Administrator\",\n};\n\nclass InviteModal extends PureComponent {\n  constructor(props) {\n    super(props);\n    this.state = {\n      contactModalLoading: false,\n      message: props.inviteMessage,\n      toEmails: \"\",\n      email: \"\",\n      isExpanded: true,\n      step: 0,\n      emailList: [],\n      error: \"\",\n      focused: true,\n      dropdownActive: false,\n      role: props.role,\n    };\n  }\n\n  initialState = () => {\n    const { inviteMessage, role } = this.props;\n\n    return {\n      contactModalLoading: false,\n      message: inviteMessage,\n      toEmails: \"\",\n      email: \"\",\n      isExpanded: true,\n      error: \"\",\n      step: 0,\n      emailList: [],\n      focused: true,\n      role: role,\n    };\n  };\n\n  componentDidUpdate(prevProps) {\n    if (prevProps.open !== this.props.open) {\n      this.setState(this.initialState());\n    }\n  }\n\n  handleSubmitMessage = async (e) => {\n    const {\n      closeModal,\n      currentUser,\n      typeOfInvite,\n      inviteUrl,\n      organization,\n      trackAndToastHandler,\n      requestId,\n      fetchUniversityMembers,\n    } = this.props;\n\n    const { role } = this.state;\n\n    e.preventDefault();\n\n    const { message, isExpanded, emailList } = this.state;\n\n    this.setState({\n      contactModalLoading: true,\n    });\n\n    const emails = emailList\n      .map((email) => {\n        return email.value;\n      })\n      .join(\",\");\n\n    const data = {\n      ...(isExpanded && message && message.length > 0 && { message }),\n      to_emails: emails,\n      organization,\n      role,\n      invited_by: currentUser.id,\n    };\n\n    if (requestId) data.request_id = requestId;\n\n    const responseJson = await api.post(inviteUrl, data);\n\n    if (!responseJson.data.success) {\n      this.setState({\n        contactModalLoading: false,\n      });\n    } else {\n      if (typeOfInvite === \"shareRFP\") {\n        track(SegmentEventName.Share, {\n          request_id: requestId,\n          object: SegmentEventObject.Request,\n        });\n\n        // Don't display confirmation modal for sharing an RFP\n        closeModal();\n      }\n\n      this.setState({\n        message: \"\",\n        contactModalLoading: false,\n        toEmails: \"\",\n        step: 1,\n      });\n      if (currentUser.role === UserRole.UNIVERSITY_ADMIN)\n        fetchUniversityMembers(currentUser.profile_info.university_id);\n      trackAndToastHandler?.();\n    }\n  };\n\n  handleChange = (e, attr) => {\n    // make sure an empty space is not added\n    if (attr === \"email\") {\n      if (e.target.value.length === 1 && e.target.value === \" \") {\n        e.preventDefault();\n        return;\n      }\n    }\n    this.setState({ [attr]: e.target.value, error: \"\" });\n  };\n\n  handleAddOrRemoveEmail = (e) => {\n    if (\n      this.state.email &&\n      ([\"Enter\", \"Tab\", \",\", \";\"].includes(e.key) || e.type === \"blur\" || e.type === \"click\")\n    ) {\n      e.preventDefault();\n      const email = {\n        value: this.state.email.trim().toLowerCase(),\n        isValid: false,\n      };\n\n      if (email.value && this.isValid(email.value)) {\n        email.isValid = true;\n      }\n\n      const emailList = [...this.state.emailList, email];\n      this.setState({\n        emailList,\n        email: \"\",\n      });\n    }\n\n    if (e.key === \"Backspace\") {\n      if (!this.state.email && this.state.emailList.length) {\n        const emailList = [...this.state.emailList];\n        emailList.pop();\n\n        this.setState({\n          emailList,\n          error: \"\",\n        });\n      }\n    }\n  };\n\n  isValid = (email) => {\n    let error = null;\n\n    if (!Validator.isEmail(email)) {\n      error = `${email} is not a valid email address.`;\n    }\n\n    if (usedPersonalEmail(email)) {\n      error = \"Please enter a university or company email.\";\n    }\n\n    if (this.state.emailList.some((e) => e.value === email)) {\n      const temp = email;\n      // clearing email state to display error message of a duplicate email\n      this.setState({ email: \"\" });\n      error = `${temp} has already been added.`;\n    }\n    if (error) {\n      this.setState({ error });\n      return false;\n    }\n    return true;\n  };\n\n  handlePaste = (e) => {\n    e.preventDefault();\n\n    const paste = e.clipboardData.getData(\"text\");\n    let emails = paste.match(/[\\w\\d\\.-]+@[\\w\\d\\.-]+\\.[\\w\\d\\.-]+/g);\n    // take care of duplicates copied to clipboard\n    emails = [...new Set(emails)];\n\n    if (emails) {\n      const emailList = this.state.emailList.map((e) => e.value);\n      const filteredDuplicateEmails = emails.filter((email) => !emailList.includes(email));\n\n      const toBeAdded = filteredDuplicateEmails.map((email) => ({\n        value: email,\n        isValid: !usedPersonalEmail(email),\n      }));\n\n      this.setState({\n        emailList: [...this.state.emailList, ...toBeAdded],\n      });\n    }\n  };\n\n  // make sure the list of emails are all valid\n  validEmailList = () => {\n    const { emailList } = this.state;\n\n    if (emailList.length < 1) return false;\n\n    return !emailList.some((email) => !email.isValid);\n  };\n\n  handleNextStep = (e) => {\n    const { emailList, error } = this.state;\n\n    const email = this.state.email.trim().toLowerCase();\n\n    if (email && this.isValid(email)) {\n      const emailList = [...this.state.emailList, email];\n      const toEmails = emailList.join(\", \");\n\n      this.setState({\n        emailList,\n        email: \"\",\n        toEmails,\n        error: \"\",\n      });\n    } else if (emailList.length > 0 && email.length === 0) {\n      if (this.validEmailList()) {\n        this.handleSubmitMessage(e);\n      } else {\n        this.setState({ error: \"Please make sure that all addresses are properly formed.\" });\n      }\n    } else if (!email && emailList.length === 0) {\n      this.setState({ error: \"Please add an email to invite\" });\n    }\n  };\n\n  deleteEmailFromList = (emailIndex) => {\n    const emailList = [...this.state.emailList];\n    emailList.splice(emailIndex, 1);\n\n    this.setState({\n      emailList,\n      error: \"\",\n    });\n  };\n\n  focusInput = (e) => {\n    const children = e.target.children;\n    this.setState({ focused: true });\n    if (children.length) children[children.length - 1].focus();\n  };\n\n  handleBlur = (e) => {\n    this.handleAddOrRemoveEmail(e);\n    this.setState({ focused: false });\n  };\n\n  handleCloseConfirmationModal = () => {\n    const { closeModal } = this.props;\n\n    closeModal();\n    this.setState({ emailList: [] });\n  };\n\n  render() {\n    const {\n      open,\n      closeModal,\n      currentUser,\n      activeTabIndex,\n      typeOfInvite,\n      modalHeader,\n      modalSubheader,\n      inviteSubject,\n    } = this.props;\n\n    const {\n      message,\n      toEmails,\n      email,\n      isExpanded,\n      contactModalLoading,\n      emailList,\n      step,\n      error,\n      focused,\n      role,\n      dropdownActive,\n    } = this.state;\n\n    const emails = emailList.map((email, i) => {\n      if (step === 0) {\n        return (\n          <div\n            key={`email-tile-${i}`}\n            className={css(\n              styles.InviteModal_emailChip,\n              !email.isValid && styles.InviteModal_invalidEmailChip\n            )}\n            data-testid=\"invite-modal-email\"\n          >\n            {email.value}\n            <div\n              className={css(styles.InviteModal_deleteIcon)}\n              onClick={() => this.deleteEmailFromList(i)}\n            >\n              <Icon name=\"X\" size=\"xs\" color={email.isValid ? COLORS.BLACK : COLORS.RED} />\n            </div>\n          </div>\n        );\n      }\n      return (\n        <div\n          key={i}\n          className={css(\n            styles.InviteModal_emailChip,\n            styles.ConfirmationInviteModal_emailChip,\n            emailList.length === 1 && styles.InviteModal_oneEmailChip\n          )}\n          data-testid=\"invite-modal-email\"\n        >\n          {email.value}\n        </div>\n      );\n    });\n\n    const placeholder =\n      emails.length > 0\n        ? \"Add email\"\n        : typeOfInvite === \"shareRFP\"\n        ? \"Enter email address\"\n        : \"Add one or more email addresses\";\n\n    return (\n      <Modal\n        open={open}\n        onClose={closeModal}\n        size=\"tiny\"\n        children\n        className={`${css(styles.InviteModal_modal)}`}\n        data-testid=\"invite-modal\"\n      >\n        {step === 0 ? (\n          <Modal.Content className={`${css(styles.InviteModal_content)}`}>\n            <div className={css(styles.InviteModal_header)}>\n              {modalHeader}\n              <IconButton iconName=\"Close\" size=\"sm\" onClick={closeModal} variant=\"fourth\" />\n            </div>\n            <div className={css(styles.InviteModal_subheader)}>{modalSubheader}</div>\n            <div style={{ display: \"flex\" }}>\n              <div>\n                <div className={css(styles.InviteModal_inputLabel)}>Email Address</div>\n                <div\n                  className={css(\n                    styles.InviteModal_modalInputDiv,\n                    focused && styles.InviteModal_modalInputDivFocus,\n                    emails.length > 0 && styles.InviteModal_modalInputDivFilled,\n                    error && styles.InviteModal_errorField,\n                    typeOfInvite === \"university\" && styles.InviteModal_smallerInputDiv\n                  )}\n                >\n                  {emails}\n                  <input\n                    type=\"text\"\n                    className={css(\n                      styles.InviteModal_modalInput,\n                      emails.length === 0 && styles.InviteModal_modalInputZero\n                    )}\n                    style={{\n                      width: email.length + \"ch\",\n                      minWidth: emails.length > 0 ? \"10ch\" : \"85%\",\n                    }}\n                    placeholder={placeholder}\n                    value={email}\n                    autoFocus\n                    onFocus={this.focusInput}\n                    onChange={(e) => this.handleChange(e, \"email\")}\n                    onKeyDown={this.handleAddOrRemoveEmail}\n                    onPaste={this.handlePaste}\n                    onBlur={this.handleBlur}\n                    data-testid=\"invite-new-user-text-field\"\n                  />\n                </div>\n              </div>\n              {typeOfInvite === \"university\" && (\n                <div>\n                  <div\n                    className={css(\n                      styles.InviteModal_inputLabel,\n                      styles.InviteModal_inputLabelDropdown\n                    )}\n                  >\n                    Role\n                  </div>\n                  <InviteModalDropdown\n                    as={Dropdown}\n                    fluid\n                    admin={role === 2}\n                    text={ROLES[role]}\n                    selection\n                    dropdownActive={dropdownActive}\n                    onClick={() => this.setState({ dropdownActive: !dropdownActive })}\n                    onBlur={() => this.setState({ dropdownActive: false })}\n                    icon=\"chevron down\"\n                  >\n                    <DropdownMenu as={Dropdown.Menu}>\n                      <DropdownItem as={Dropdown.Item} onClick={() => this.setState({ role: 2 })}>\n                        Administrator\n                        <DropdownSubHeader>\n                          Administrators can share opportunities with faculty, but cannot submit\n                          proposals.\n                        </DropdownSubHeader>\n                      </DropdownItem>\n                      <DropdownItem as={Dropdown.Item} onClick={() => this.setState({ role: 0 })}>\n                        Faculty\n                        <DropdownSubHeader>\n                          Faculty conduct research and can submit proposals to opportunities\n                        </DropdownSubHeader>\n                      </DropdownItem>\n                    </DropdownMenu>\n                  </InviteModalDropdown>\n                </div>\n              )}\n            </div>\n            {email.length > 0 && (\n              <div style={{ position: \"relative\" }}>\n                <div\n                  className={css(styles.InviteModal_emailDropdown)}\n                  onClick={this.handleAddOrRemoveEmail}\n                >\n                  Invite '{email.trim().toLowerCase()}' by email\n                </div>\n              </div>\n            )}\n            <div className={css(styles.InviteModal_errorMessage)}>{error}</div>\n            <div style={{ margin: \"auto\", paddingTop: \"25px\" }}>\n              <div className={css(styles.InviteModal_inputLabel)}>Message (Optional)</div>\n              <textarea\n                className={css(styles.InviteModal_modalTextArea)}\n                placeholder={\n                  typeOfInvite === \"shareRFP\" ? \"Add a message\" : \"Add a message to your invite\"\n                }\n                value={message}\n                rows={5}\n                onFocus={(e) =>\n                  e.currentTarget.setSelectionRange(\n                    e.currentTarget.value.length,\n                    e.currentTarget.value.length\n                  )\n                }\n                onChange={(e) => this.handleChange(e, \"message\")}\n                data-testid=\"invite-new-user-message-field\"\n              />\n            </div>\n            <div className={css(styles.InviteModal_modalButtonHolder)}>\n              <Button\n                type=\"button\"\n                disabled={contactModalLoading || emailList.length === 0}\n                onClick={this.handleNextStep}\n                data-testid=\"invite-new-user-submit-button\"\n              >\n                {typeOfInvite === \"shareRFP\" ? \"Share\" : \"Send Invite\"}\n              </Button>\n            </div>\n          </Modal.Content>\n        ) : (\n          <Modal.Content className={`${css(styles.InviteModal_content)} scrolling`}>\n            <div className={css(styles.InviteModal_header)}>Invitation sent!</div>\n            <div\n              className={css(\n                styles.InviteModal_subheader,\n                styles.ConfirmationInviteModal_subheader\n              )}\n            >\n              Your invitation to the following people has been sent:\n            </div>\n            <div>{emails}</div>\n            <div\n              className={css(styles.InviteModal_subheader, styles.ConfirmationInviteModal_footer)}\n            >\n              Once they accept your invitation, they will become part of your team!\n            </div>\n            <Button type=\"button\" onClick={this.handleCloseConfirmationModal}>\n              Got it\n            </Button>\n          </Modal.Content>\n        )}\n      </Modal>\n    );\n  }\n}\n\nconst mapStateToProps = (state) => {\n  return {\n    currentUser: state.profiles.currentUser,\n  };\n};\n\nconst mapDispatchToProps = {\n  fetchUniversityMembers: fetchUniversityMembersAction,\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(InviteModal);\n","import InviteModal from \"./InviteModal\";\n\nexport default InviteModal;\n","import {\n  ChangeEvent,\n  Dispatch,\n  ReactNode,\n  SetStateAction,\n  SyntheticEvent,\n  useEffect,\n  useState,\n} from \"react\";\nimport { Link } from \"react-router-dom\";\nimport styled from \"styled-components\";\n\nimport { SSOEnabledHint } from \"@components/SSOEnabledHint\";\nimport { GradientButton, Icon } from \"@components/library\";\nimport { COLORS, FONTS, STYLES, WINDOW_DIMENSIONS } from \"@constants\";\nimport { useSearchParams } from \"@hooks/router\";\nimport { useSSOSensitiveEmail } from \"@hooks/useSSOSensitiveEmail\";\nimport haloLogo from \"@images/logos/halo_logo.svg\";\nimport { RootState } from \"@redux/store\";\nimport { signIn } from \"@requests/users\";\nimport { getPrevUrlCookie } from \"@utils/authUtils\";\nimport { t } from \"@utils/i18n\";\nimport { useSelector } from \"react-redux\";\nimport { ModalType } from \"./LoginSignUpModal\";\n\ninterface Props {\n  header?: ReactNode;\n  title?: ReactNode;\n  bottom?: ReactNode;\n  setModalType?: Dispatch<SetStateAction<ModalType>>;\n  // Flag for changing styles to be compatible with the old login modal\n  // @components/LoginModal/LoginModal.tsx\n  compat?: boolean;\n}\n\nconst LoginModal = ({ header, title, bottom, setModalType, compat = false }: Props) => {\n  const [password, setPassword] = useState(\"\");\n  const [submitting, setSubmitting] = useState(false);\n  const [hasSubmitted, setHasSubmitted] = useState(false);\n  const [error, setError] = useState(\"\");\n\n  const { email, setEmail, isEmailSSOEnabled, redirectToSSO } = useSSOSensitiveEmail(\"\");\n  const [shouldShowSSO, setShouldShowSSO] = useState(isEmailSSOEnabled);\n\n  const previousAction = useSelector((state: RootState) => state.profiles.previousAction);\n\n  const [searchParams] = useSearchParams();\n\n  useEffect(() => {\n    if (isEmailSSOEnabled) setShouldShowSSO(true);\n  }, [isEmailSSOEnabled]);\n\n  const handleLogin = async (e: SyntheticEvent) => {\n    e.preventDefault();\n\n    setSubmitting(true);\n    setHasSubmitted(true);\n    setError(\"\");\n\n    if (shouldShowSSO) {\n      if (!isEmailSSOEnabled) {\n        setError(\"Your email/company is not enabled to use SSO. Please use your password instead.\");\n        setSubmitting(false);\n        return;\n      }\n\n      redirectToSSO();\n      return;\n    }\n\n    if (!email || !password) {\n      setError(\"Please fill in all fields before continuing.\");\n      setSubmitting(false);\n      return;\n    }\n\n    try {\n      const response = await signIn({ email, password });\n\n      let redirectUrl = \"\";\n      if (previousAction === \"submit-feature-request\") {\n        redirectUrl = \"/feature_requests\";\n      } else {\n        const commenterInviteRequest = searchParams.get(\"commenter_invite_request\");\n        redirectUrl = `/redirect_login${\n          commenterInviteRequest ? `?commenter_invite_request=${commenterInviteRequest}` : \"\"\n        }`;\n      }\n\n      getPrevUrlCookie(redirectUrl, true, response.data.role);\n    } catch (err) {\n      switch (err.response.status) {\n        case 403:\n          setError(t(\"error.generic_retry\"));\n          break;\n        case 429:\n          setError(\"You have made too many attempts. Please try again in a few minutes.\");\n          break;\n        default:\n          setError(err.response.data.error);\n      }\n      setSubmitting(false);\n    }\n  };\n\n  const urlParams = new URLSearchParams();\n  const commenterInviteRequest = searchParams.get(\"commenter_invite_request\");\n  if (commenterInviteRequest) urlParams.append(\"commenter_invite_request\", commenterInviteRequest);\n\n  return (\n    <Modal compat={compat}>\n      <Top compat={compat}>\n        {header ?? (\n          <Logo to=\"/\">\n            <img src={haloLogo} />\n          </Logo>\n        )}\n        {title ?? (\n          <Title>\n            <Header>Welcome Back!</Header>\n            <Subheader>Sign in to find research partners and keep moving science forward</Subheader>\n          </Title>\n        )}\n        <Form onSubmit={handleLogin}>\n          <Error data-testid=\"auth-error-message\">{error}</Error>\n          <Input\n            error={(hasSubmitted && !email) || error}\n            data-testid=\"login-form-email-input\"\n            name=\"email\"\n            value={email}\n            type=\"email\"\n            placeholder=\"Email\"\n            onChange={(e) => {\n              setHasSubmitted(false);\n              setEmail(e.target.value);\n            }}\n          />\n          {shouldShowSSO ? (\n            <>\n              <SSOEnabledHint />\n              <GradientButton\n                data-testid=\"auth-button\"\n                width=\"100%\"\n                size=\"md\"\n                disabled={submitting}\n                type=\"submit\"\n              >\n                Continue with SSO\n              </GradientButton>\n              <LoginLink\n                as=\"div\"\n                onClick={() => {\n                  if (isEmailSSOEnabled) setEmail(\"\");\n                  setShouldShowSSO(false);\n                }}\n              >\n                Go back {isEmailSSOEnabled && \" and use a different email\"}\n              </LoginLink>\n            </>\n          ) : (\n            <>\n              <Input\n                error={(hasSubmitted && !password) || error}\n                data-testid=\"login-form-password-input\"\n                name=\"password\"\n                value={password}\n                type=\"password\"\n                placeholder=\"Password\"\n                onChange={(e: ChangeEvent<HTMLInputElement>) => {\n                  setHasSubmitted(false);\n                  setPassword(e.target.value);\n                }}\n              />\n              <GradientButton\n                data-testid=\"auth-button\"\n                width=\"100%\"\n                size=\"md\"\n                disabled={submitting}\n                type=\"submit\"\n              >\n                Sign in\n              </GradientButton>\n              <LinkContainer>\n                <LoginLink as=\"div\" onClick={() => setShouldShowSSO(true)}>\n                  <Icon name=\"Lock\" size=\"sm\" /> Sign in with SSO\n                </LoginLink>\n                <LoginLink to=\"/forgot_password\">Forgot password?</LoginLink>\n              </LinkContainer>\n            </>\n          )}\n        </Form>\n      </Top>\n      <Bottom compat={compat}>\n        {bottom ?? (\n          <>\n            Don&rsquo;t have an account?&nbsp;\n            {setModalType ? (\n              <SignUp to=\"#\" onClick={() => setModalType(\"signup\")}>\n                Sign up\n              </SignUp>\n            ) : (\n              <SignUp to={`/get-started${urlParams.size > 0 ? `?${urlParams.toString()}` : \"\"}`}>\n                Sign up\n              </SignUp>\n            )}\n          </>\n        )}\n      </Bottom>\n    </Modal>\n  );\n};\n\nexport default LoginModal;\n\nconst { TABLET_MEDIA_QUERY, MOBILE_MEDIA_QUERY } = WINDOW_DIMENSIONS;\n\nconst Modal = styled.div`\n  border-radius: 12px;\n  background-color: ${COLORS.WHITE};\n\n  ${({ compat }) => !compat && `box-shadow: ${STYLES.SHADOW_E};`}\n\n  ${TABLET_MEDIA_QUERY} {\n    max-width: 95%;\n    width: unset;\n  }\n\n  ${MOBILE_MEDIA_QUERY} {\n    max-width: 100%;\n    height: 100%;\n    border-radius: 0;\n  }\n`;\n\nconst Logo = styled(Link)`\n  text-align: center;\n`;\n\nconst Title = styled.div`\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: 8px;\n`;\n\nconst Header = styled.div`\n  ${FONTS.HEADING_3_SEMIBOLD}\n  ${MOBILE_MEDIA_QUERY} {\n    ${FONTS.HEADING_4_SEMIBOLD}\n  }\n`;\n\nconst Subheader = styled.div`\n  ${FONTS.REGULAR_1}\n  max-width: 372px;\n  text-align: center;\n  ${MOBILE_MEDIA_QUERY} {\n    display: none;\n  }\n`;\n\nconst Form = styled.form`\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: 16px;\n  margin-top: -32px;\n`;\n\nconst Error = styled.div`\n  ${FONTS.REGULAR_3}\n  margin-top: 5px;\n  min-height: 20px;\n  color: ${COLORS.RED};\n  text-align: center;\n  max-width: 300px;\n`;\n\nconst Input = styled.input`\n  ${FONTS.REGULAR_2}\n\n  height: 42px;\n  width: 100%;\n  padding: 10px;\n\n  border: solid 1px ${COLORS.NEUTRAL_200};\n  border-radius: 6px;\n\n  ${({ error }) => error && `border: solid 1px ${COLORS.RED};`}\n\n  ${MOBILE_MEDIA_QUERY} {\n    border-color: ${COLORS.NEUTRAL_200};\n  }\n`;\n\nconst Top = styled.div`\n  display: flex;\n  justify-content: center;\n  flex-direction: column;\n  gap: 40px;\n  ${({ compat }) => (compat ? `padding: 10px 10px 30px;` : `padding: 48px;`)}\n  ${TABLET_MEDIA_QUERY} {\n    padding: 40px 24px;\n  }\n`;\n\nconst Bottom = styled.div`\n  width: 100%;\n\n  display: flex;\n  justify-content: center;\n  flex-direction: column;\n\n  border-top: 1px solid ${COLORS.NEUTRAL_300};\n\n  padding: 16px;\n\n  text-align: center;\n  display: inline-block;\n\n  ${({ compat }) =>\n    compat\n      ? `\n    ${FONTS.MEDIUM_2}\n    padding-bottom: 4px;`\n      : `\n    ${FONTS.SEMIBOLD_2}\n  `}\n\n  ${MOBILE_MEDIA_QUERY} {\n    margin-top: 15px;\n    width: 100%;\n    color: ${COLORS.NEUTRAL_500};\n    ${FONTS.SEMIBOLD_1}\n    text-align: left;\n  }\n`;\n\nconst LinkContainer = styled.div`\n  display: flex;\n  justify-content: space-between;\n  width: 100%;\n  margin-top: 8px;\n`;\n\nconst LoginLink = styled(Link)`\n  display: flex;\n  align-items: center;\n  gap: 4px;\n\n  text-decoration: underline;\n  color: ${COLORS.BLACK};\n  ${FONTS.REGULAR_2}\n\n  ${MOBILE_MEDIA_QUERY} {\n    color: ${COLORS.NEUTRAL_500};\n    ${FONTS.SEMIBOLD_1}\n\n    text-decoration: none;\n  }\n\n  &:hover {\n    cursor: pointer;\n    color: ${COLORS.BLUE_900};\n  }\n`;\n\nconst SignUp = styled(Link)`\n  text-decoration: underline;\n  color: ${COLORS.BLACK};\n  ${FONTS.REGULAR_2}\n\n  ${MOBILE_MEDIA_QUERY} {\n    display: flex;\n    justify-content: center;\n    align-items: center;\n\n    height: 48px;\n    margin-top: 12px;\n\n    border-radius: 3px;\n    border-style: solid;\n    border-width: 2px;\n\n    color: ${COLORS.HALO_BLUE};\n    ${FONTS.SEMIBOLD_1}\n\n    text-decoration: none;\n  }\n`;\n","import {\n  CompanyAvatar,\n  Icon,\n  IconButton,\n  MoreActionsDropdown,\n  UserPreview,\n} from \"@components/library\";\nimport type { ExtendedDropdownOption } from \"@components/library/Dropdowns/DropdownOption\";\nimport { COLORS, FONTS, STYLES } from \"@constants\";\nimport type { RootState } from \"@redux/store\";\nimport { InboxMessageThread, MessageRecipient } from \"@tsTypes/index\";\nimport { UserRole } from \"@tsTypes/users\";\nimport { useSelector } from \"react-redux\";\nimport { Link } from \"react-router-dom\";\nimport styled from \"styled-components\";\n\ninterface Props {\n  currentThread: InboxMessageThread;\n  isModal?: boolean;\n}\n\nconst Participants = ({ currentThread, isModal }: Props) => {\n  if (\"proposal\" in currentThread) {\n    const currentUser = useSelector((state: RootState) => state.profiles.currentUser);\n\n    const { company, scientist_user } = currentThread;\n\n    const isCompanyHidden = \"private_alias\" in company;\n\n    const moreActionsOptions: ExtendedDropdownOption[] = [\n      {\n        value: \"VIEW_PROFILE\",\n        label: `View Profile`,\n        onSelect: () => window.open(`/profile/${scientist_user.profile_id}`, \"_blank\"),\n        iconName: \"Profile\",\n      },\n    ];\n\n    return (\n      <>\n        <div data-testid=\"scientist-participant\">\n          <SectionTitle>Scientist</SectionTitle>\n          <UserPreviewContainer>\n            <UserPreview size=\"sm\" user={scientist_user} />\n            {isModal && (\n              <MoreActionsDropdown options={moreActionsOptions} menuHorizontalPosition=\"right\">\n                <IconButton\n                  size=\"sm\"\n                  variant=\"fourth\"\n                  iconName=\"More Actions\"\n                  tooltipWidth=\"100px\"\n                />\n              </MoreActionsDropdown>\n            )}\n          </UserPreviewContainer>\n        </div>\n        <CompanySectionTitle data-testid=\"company-participant\">\n          <UnstyledLink\n            as={isCompanyHidden ? \"div\" : Link}\n            to={!isCompanyHidden ? `/company/${company.identifier}` : undefined}\n            target=\"_blank\"\n          >\n            {isCompanyHidden ? company.private_alias ?? \"Private Company\" : company.company_name}\n          </UnstyledLink>\n        </CompanySectionTitle>\n        <CompanyMembers isModal={isModal} data-testid=\"company-members\">\n          {(\"company_members\" in currentThread && !isCompanyHidden\n            ? currentThread.company_members\n            : [{}]\n          ).map((member) => {\n            const isScientistUser = currentUser.id === currentThread.scientist_user.id;\n            const shouldDisplayAsExternalLead =\n              isScientistUser && member.role === UserRole.SCIENTIST && !(\"id\" in member);\n\n            return shouldDisplayAsExternalLead && !isCompanyHidden ? (\n              <ExternalLead>\n                <CompanyAvatar\n                  isPrivate={isCompanyHidden}\n                  imageUrl={company.avatar.url}\n                  size=\"sm\"\n                />\n                <ExternalLeadName>{company.company_name} team</ExternalLeadName>\n              </ExternalLead>\n            ) : (\n              <UserPreviewContainer key={(member as MessageRecipient).id}>\n                <UserPreview\n                  size=\"sm\"\n                  user={member as MessageRecipient}\n                  userRole={isScientistUser ? UserRole.SPONSOR : member.role}\n                  isUserHidden={isCompanyHidden}\n                  isExternalLead={member.role === UserRole.SCIENTIST}\n                />\n              </UserPreviewContainer>\n            );\n          })}\n        </CompanyMembers>\n        {currentUser.role === UserRole.SPONSOR && (\n          <Warning isModal={isModal}>\n            <Icon name=\"Proposal Privacy\" color={COLORS.ORANGE} size=\"lg\" margin=\"0 0 12px 0\" />\n            This conversation is stored with the proposal so you and your team can reference it in\n            the future.\n          </Warning>\n        )}\n      </>\n    );\n  }\n\n  // Create map of participants grouped by location\n  const dmParticipants = new Map();\n  [...(currentThread.recipients ?? [])].forEach((participant) => {\n    if (!participant) return;\n    if (!dmParticipants.has(participant.location)) {\n      dmParticipants.set(participant.location, [participant]);\n      return;\n    }\n    dmParticipants.get(participant.location).push(participant);\n  });\n\n  return (\n    <DMParticipants>\n      {Array.from(dmParticipants.keys()).map((location) => (\n        <div key={location}>\n          <DMSectionTitle>{location}</DMSectionTitle>\n          {dmParticipants.get(location).map((participant) => (\n            <UserPreviewContainer key={`user-preview-${participant.id}`}>\n              <UserPreview size=\"sm\" user={participant} userRole={participant.role} />\n            </UserPreviewContainer>\n          ))}\n        </div>\n      ))}\n    </DMParticipants>\n  );\n};\n\nexport default Participants;\n\nconst UnstyledLink = styled(Link)`\n  color: inherit;\n  text-decoration: none;\n\n  &:hover,\n  &:focus {\n    color: inherit;\n    text-decoration: none;\n  }\n`;\n\nconst SectionTitle = styled.div`\n  ${FONTS.SEMIBOLD_2}\n  color: ${COLORS.NEUTRAL_500};\n  margin-bottom: 12px;\n`;\n\nconst CompanySectionTitle = styled(SectionTitle)`\n  margin-top: 32px;\n`;\n\nconst DMParticipants = styled.div`\n  margin-top: -32px;\n`;\n\nconst DMSectionTitle = styled(SectionTitle)`\n  margin-top: 32px;\n`;\n\nconst CompanyMembers = styled.div`\n  ${({ isModal }) => isModal && \"min-height: 158px\"};\n  ${({ isModal }) => !isModal && \"margin-bottom: 16px\"};\n  height: 100%;\n  overflow-y: scroll;\n\n  &::-webkit-scrollbar {\n    width: 6px;\n  }\n  ::-webkit-scrollbar-track {\n    background: none;\n  }\n  &::-webkit-scrollbar-thumb {\n    background-color: ${COLORS.NEUTRAL_300};\n  }\n`;\n\nconst ExternalLead = styled.div`\n  display: grid;\n  grid-template-columns: 40px 1fr;\n  gap: 6px;\n  margin-bottom: 10px;\n  margin-left: 14px;\n  &:last-child {\n    margin-bottom: 0;\n  }\n`;\nconst ExternalLeadName = styled.div`\n  height: fit-content;\n  margin-top: 2px;\n  ${STYLES.TWO_LINES};\n  ${FONTS.TAG_SEMIBOLD_1};\n`;\n\nconst Warning = styled.div`\n  ${FONTS.MEDIUM_3};\n  background-color: ${COLORS.ORANGE_100};\n  color: ${COLORS.ORANGE};\n  border-radius: 6px;\n  padding: 20px;\n  height: 142px;\n  ${({ isModal }) =>\n    isModal &&\n    `\n      height: 88px;\n      display: flex;\n      align-items: center;\n      ${FONTS.MEDIUM_2};\n      gap: 10px;\n    `}\n`;\n\nconst UserPreviewContainer = styled.div`\n  margin-bottom: 10px;\n  margin-left: 16px;\n  display: flex;\n  gap: 10px;\n  &:last-child {\n    margin-bottom: 0;\n  }\n`;\n","import { CREDENTIALS } from \"@constants\";\nimport Ably from \"ably\";\n\n// Do not auto-connect in order to \"save\" connections only when we need it (free plan is up to 200)\n// If you require realtime functionality, we should purchase a full plan.\nconst ably = new Ably.Realtime({\n  key: CREDENTIALS.ABLY_FRONTEND_API_KEY,\n  autoConnect: false,\n});\n\nexport default ably;\n","import { Button, InfoBanner } from \"@components/library\";\nimport BlankModal, { BlankModalProps } from \"@components/library/ModalBases/BlankModal\";\nimport { FONTS } from \"@constants\";\nimport { t } from \"@utils/i18n\";\n\nimport styled from \"styled-components\";\n\ninterface Props {\n  openFileBrowser: () => any;\n}\n\nconst AttachmentsInfoModal = ({\n  openFileBrowser,\n  isOpen,\n  onClose,\n}: Props & Pick<BlankModalProps, \"isOpen\" | \"onClose\">) => {\n  if (!isOpen) return null;\n\n  return (\n    <BlankModal isOpen={isOpen} onClose={onClose} width=\"494px\" disableBackgroundScroll>\n      <Content data-testid=\"attachments-info-modal\">\n        <Heading>Attachment Requirements</Heading>\n        <List>\n          <li>The maximum size for each is 5MB</li>\n          <li>The file format needs to be PNG, JPG, or PDF</li>\n        </List>\n        <InfoBanner\n          type=\"attention-orange\"\n          text={t(\"common.misc.confidential\")}\n          shouldDisplay\n          width=\"100%\"\n        />\n        <ButtonContainer>\n          <Button width=\"132px\" onClick={openFileBrowser} data-testid=\"got-it-button\">\n            Got it\n          </Button>\n        </ButtonContainer>\n      </Content>\n    </BlankModal>\n  );\n};\n\nexport default AttachmentsInfoModal;\n\nconst Content = styled.div`\n  padding: 48px 56px 24px;\n`;\n\nconst Heading = styled.div`\n  ${FONTS.HEADING_3_SEMIBOLD}\n`;\n\nconst List = styled.ul`\n  ${FONTS.REGULAR_1}\n  margin: 16px 0;\n  list-style: inside;\n  padding-left: 5px;\n`;\n\nconst ButtonContainer = styled.div`\n  display: flex;\n  justify-content: flex-end;\n  width: 100%;\n  margin-top: 56px;\n`;\n","import {\n  Button,\n  ErrorModal,\n  Icon,\n  IconButton,\n  InfoBanner,\n  MessageAttachment,\n  Tooltip,\n} from \"@components/library\";\nimport { ABLY_CHANNELS, COLORS, FONTS, STYLES } from \"@constants\";\nimport { setMessengerThread } from \"@redux/actions/messengerActions\";\nimport { RootState } from \"@redux/store\";\nimport {\n  MessageAttachmentAsJson,\n  addMessageToThread,\n  createMessageThread,\n  getDraftMessage,\n  setDraftMessage,\n  uploadAttachment,\n} from \"@requests/messages\";\nimport {\n  InboxMessageThread,\n  MessageAttachmentPartial,\n  MessagePartial,\n  MessageRecipient,\n} from \"@tsTypes/index\";\nimport { MessageAttachmentContentType } from \"@tsTypes/messages\";\nimport { User } from \"@tsTypes/schema\";\nimport { UserRole } from \"@tsTypes/users\";\nimport ably from \"@utils/ably\";\nimport { debounce } from \"@utils/appUtils\";\nimport { t } from \"@utils/i18n\";\nimport {\n  ChangeEvent,\n  Dispatch,\n  ReactNode,\n  SetStateAction,\n  useEffect,\n  useRef,\n  useState,\n} from \"react\";\nimport { flushSync } from \"react-dom\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { USER_ROLES } from \"src/constants/users\";\nimport styled from \"styled-components\";\nimport AttachmentsInfoModal from \"./AttachmentsInfoModal\";\n\ninterface Props {\n  currentThread?: InboxMessageThread | null;\n  setMessages: Dispatch<SetStateAction<MessagePartial[]>>;\n  isInbox?: boolean;\n  openGallery: (attachments: MessageAttachmentPartial[], attachmentId: number) => void;\n  // recipient is undefined when the current user is the associated scientist of a proposal thread and the\n  // request is confidential\n  recipient?: MessageRecipient | Pick<User, \"role\">;\n}\n\nconst MAX_FILE_SIZE_IN_BYTES = 5_000_000; // 5MB\nconst MESSAGE_INPUT_MIN_HEIGHT = 112;\n\nconst MessageCompose = ({\n  currentThread,\n  setMessages,\n  isInbox = false,\n  recipient,\n  openGallery,\n}: Props) => {\n  const [messageInput, setMessageInput] = useState(\"\");\n  const [isFetchingDraft, setIsFetchingDraft] = useState(true);\n  const [isSubmitting, setIsSubmitting] = useState(false);\n  const [attachments, setAttachments] = useState<\n    (MessageAttachmentAsJson | MessageAttachmentPartial)[]\n  >([]);\n  const [isAttachmentsInfoModalOpen, setIsAttachmentsInfoModalOpen] = useState(false);\n  const [isAttachmentUploading, setIsAttachmentUploading] = useState(false);\n  const [uploadPercentage, setUploadPercentage] = useState<number>();\n  const [hasOpenedAttachmentsInfoModal, setHasOpenedAttachmentsInfoModal] = useState(false);\n  const [attachmentError, setAttachmentError] = useState<ReactNode>();\n  const [shouldShowJumpToBottom, setShouldShowJumpToBottom] = useState(false);\n\n  const dispatch = useDispatch();\n\n  const currentUser = useSelector((state: RootState) => state.profiles.currentUser);\n  let proposalyId = useSelector((state: RootState) => state.messenger.messengerData.proposalyId);\n  let proposalyType = useSelector(\n    (state: RootState) => state.messenger.messengerData.proposalyType\n  );\n  // overwrite proposal ID if exists\n  if (currentThread?.proposaly_id && currentThread.proposaly_type) {\n    proposalyType = currentThread.proposaly_type;\n    proposalyId = currentThread.proposaly_id;\n  }\n\n  // Used for draft message loading\n  const messageRef = useRef(messageInput);\n  const fetchingProposalIdRef = useRef(proposalyId);\n  // Used for grabbing file from file input\n  const fileInputRef = useRef<HTMLInputElement>(null);\n  // Used for cancelling an in-progress upload\n  const uploadAttachmentAbortControllerRef = useRef<AbortController>();\n  // Used for scroll to just added attachment\n  const attachmentsRef = useRef<HTMLDivElement | null>(null);\n  // Used for auto-resizing text area\n  const messageInputRef = useRef<HTMLTextAreaElement | null>(null);\n  // Used for jump to bottom functionality\n  const inputContainerRef = useRef<HTMLDivElement | null>(null);\n  const inputBottomRef = useRef<HTMLDivElement | null>(null);\n\n  useEffect(() => {\n    // Reset state on thread change\n    setMessageInput(\"\");\n    setAttachments([]);\n    setShouldShowJumpToBottom(false);\n    // Abort upload\n    uploadAttachmentAbortControllerRef.current?.abort();\n    // Only show attachments info modal once per conversation per session\n    setHasOpenedAttachmentsInfoModal(false);\n\n    ably.connect();\n    const channel = ably.channels.get(`message_thread_${currentThread?.id}`);\n    channel.subscribe(ABLY_CHANNELS.NEW_MESSAGE, function (message) {\n      const messageData = JSON.parse(message.data);\n      setMessages((messages) => [...messages, messageData]);\n    });\n\n    return () => {\n      channel.unsubscribe();\n    };\n  }, [currentThread]);\n\n  // Fetching drafts\n  // TODO adapt for direct message\n  const debouncedSetDraftMessage = debounce(setDraftMessage, 500);\n  useEffect(() => {\n    if (proposalyId && proposalyType) {\n      (async () => {\n        // Set the most recent currently-fetching proposal\n        fetchingProposalIdRef.current = proposalyId;\n        setIsFetchingDraft(true);\n\n        const draftMessage = await getDraftMessage({ proposalyId, proposalyType });\n\n        // This prevents applying the fetched draft in case a new draft started fetching in the meantime\n        if (draftMessage && fetchingProposalIdRef.current === proposalyId) {\n          // If the user started typing while the draft was fetching, this combines the\n          // draft + input instead or replacing what they had typed with the fetched draft\n          setMessageInput(draftMessage.content + messageRef.current);\n          setAttachments(draftMessage.message_attachments);\n        }\n\n        setIsFetchingDraft(false);\n      })();\n    }\n  }, [proposalyId]);\n\n  // Setting drafts\n  // TODO adapt for direct message\n  useEffect(() => {\n    // Reset message container size\n    if (messageInput.length === 0 && messageInputRef.current) {\n      messageInputRef.current.style.height = \"unset\";\n    }\n\n    if (proposalyId) {\n      // Store the user's input so it can be added to the fetched draft after fetching is done\n      messageRef.current = messageInput;\n\n      // Don't set drafts while fetching, because they use the same record and can cause a race\n      // condition.  Also prevents setting the draft as \"\" while the draft is fetching\n      // Also don't set drafts while uploading an attachment (and do it afterwards)\n      if (!(isFetchingDraft || isAttachmentUploading)) {\n        debouncedSetDraftMessage({\n          proposalyId,\n          proposalyType,\n          content: messageInput,\n          attachmentIds: attachments\n            .map((attachment) => attachment.id)\n            .filter((id) => Boolean(id)) as unknown as number[],\n        });\n      }\n    }\n  }, [messageInput]);\n\n  const openFileBrowser = () => {\n    fileInputRef.current?.click();\n  };\n\n  const handleAttachmentInitiation = () => {\n    // Open info modal if the first time, or go straight to file browser otherwise\n    if (!hasOpenedAttachmentsInfoModal) {\n      setHasOpenedAttachmentsInfoModal(true);\n      setIsAttachmentsInfoModalOpen(true);\n    } else {\n      openFileBrowser();\n    }\n  };\n\n  const handleAttachmentUpload = async (event: ChangeEvent<HTMLInputElement>) => {\n    event.preventDefault();\n    setIsAttachmentUploading(true);\n    setIsAttachmentsInfoModalOpen(false);\n\n    const files = event.target.files;\n\n    if (!files || files.length === 0) {\n      setIsAttachmentUploading(false);\n      setAttachmentError(\"For some reason the upload didn't work. Please try again\");\n      return;\n    }\n\n    const file = files[0];\n\n    if (file.size > MAX_FILE_SIZE_IN_BYTES) {\n      setIsAttachmentUploading(false);\n      setAttachmentError(\n        <>\n          This file is too large.\n          <br />\n          Please upload a file that is smaller than 5MB.\n        </>\n      );\n      return;\n    }\n\n    if (\n      attachments.some(\n        (attachment) =>\n          attachment.filename === file.name &&\n          attachment.size_in_bytes === file.size &&\n          attachment.mime_content_type === file.type\n      )\n    ) {\n      setIsAttachmentUploading(false);\n      setAttachmentError(\"You have already attached that file.\");\n      return;\n    }\n\n    // Display in progress attachment\n    const oldAttachments = [...attachments];\n    // flushSync is warned against by the React beta docs due to weird behavior\n    // with flushing pending state. Here it makes sense, but be wary when\n    // modifying this component logic.\n    flushSync(() => {\n      setAttachments([\n        ...oldAttachments,\n        {\n          filename: file.name,\n          size_in_bytes: file.size,\n          mime_content_type: file.type as MessageAttachmentContentType,\n        } as MessageAttachmentPartial,\n      ]);\n    });\n\n    const inputContainer = inputContainerRef.current;\n    if (inputContainer && messageInputRef.current) {\n      const hasVerticalScrollbar =\n        inputContainer.scrollHeight > inputContainer.clientHeight &&\n        messageInputRef.current.clientHeight > MESSAGE_INPUT_MIN_HEIGHT;\n\n      if (hasVerticalScrollbar) {\n        // Scroll to newly added attachment if scrollable\n        attachmentsRef.current?.lastElementChild?.scrollIntoView({\n          behavior: \"smooth\",\n          block: \"center\",\n        });\n\n        // Show jump to bottom icon if scrollable\n        setShouldShowJumpToBottom(true);\n      }\n    }\n\n    // Upload attachment\n    let attachment: MessageAttachmentAsJson | undefined;\n    uploadAttachmentAbortControllerRef.current = new AbortController();\n    try {\n      attachment = await uploadAttachment(\n        file,\n        uploadAttachmentAbortControllerRef.current.signal,\n        setUploadPercentage\n      );\n    } catch (_) {\n      setAttachmentError(\"For some reason the upload didn't work, please try again\");\n      setAttachments(oldAttachments);\n    }\n\n    // Check if aborted\n    if (attachment) {\n      // Replace in progress attachment in state with uploaded attachment response\n      const newAttachments = [...oldAttachments, attachment];\n      setAttachments(newAttachments);\n\n      // Update draft message after new attachment finished uploading\n      debouncedSetDraftMessage({\n        proposalyId,\n        proposalyType,\n        content: messageInput,\n        attachmentIds: newAttachments\n          .map((_attachment) => _attachment.id)\n          .filter((id) => Boolean(id)) as unknown as number[],\n      });\n    }\n\n    // eslint-disable-next-line require-atomic-updates\n    event.target.value = \"\";\n    setIsAttachmentUploading(false);\n  };\n\n  const handleAttachmentRemove = (attachmentId?: number) => {\n    if (attachmentId) {\n      const newAttachments = attachments.filter((attachment) => attachment.id !== attachmentId);\n      setAttachments(newAttachments);\n\n      // Remove attachment from draft message\n      debouncedSetDraftMessage({\n        proposalyId,\n        proposalyType,\n        content: messageInput,\n        attachmentIds: newAttachments\n          .map((_attachment) => _attachment.id)\n          .filter((id) => Boolean(id)) as unknown as number[],\n      });\n    } else {\n      // Abort upload\n      uploadAttachmentAbortControllerRef.current?.abort();\n      // Remove last (in progress) attachment\n      setAttachments([...attachments.slice(0, attachments.length - 1)]);\n    }\n  };\n\n  // Set message input value and resize textarea to fit text\n  // Called on onChange AND onKeyDown to cover all input cases\n  const handleInputResizeAndChange = (e: ChangeEvent<HTMLTextAreaElement>) => {\n    const element = e.target;\n    if (!element) return;\n    element.style.height = \"inherit\";\n    element.style.height = `${element.scrollHeight}px`;\n\n    setMessageInput(element.value);\n  };\n\n  // Scroll to bottom of message input and place cursor at end of input\n  const jumpToBottom = () => {\n    inputBottomRef.current?.scrollIntoView({\n      behavior: \"smooth\",\n      block: \"end\",\n    });\n    setShouldShowJumpToBottom(false);\n\n    // Focus end of text\n    const textarea = messageInputRef.current;\n    if (!textarea) return;\n    textarea.focus();\n    textarea.setSelectionRange(messageInput.length, messageInput.length);\n  };\n\n  const handleSubmit = async () => {\n    setIsSubmitting(true);\n\n    const attachmentIds = attachments\n      .map((attachment) => attachment.id)\n      .filter(Boolean) as unknown as number[];\n\n    if (currentThread?.id) {\n      await addMessageToThread({\n        messageThreadId: currentThread.id,\n        content: messageInput,\n        attachmentIds,\n      });\n    } else {\n      const { message_thread } = await createMessageThread({\n        proposalyType,\n        proposalyId,\n        userId: (recipient as MessageRecipient).id,\n        content: messageInput,\n        attachmentIds,\n      });\n      dispatch(setMessengerThread(message_thread));\n    }\n    // TODO update the return value of addMessageToThread so that we can just add it to state\n    // instead of re-fetching all messages\n\n    setAttachments([]);\n    setMessageInput(\"\");\n    setShouldShowJumpToBottom(false);\n    setIsSubmitting(false);\n  };\n\n  const isProposalThread = currentThread && \"request\" in currentThread;\n  const isExternalLead =\n    currentUser.role === UserRole.SCIENTIST && currentUser.id !== currentThread?.scientist_user?.id;\n  const isToExternalLead =\n    currentUser.id === currentThread?.scientist_user?.id && recipient?.role === UserRole.SCIENTIST;\n\n  let placeholderRecipientName = (recipient as MessageRecipient | undefined)?.name;\n  if (\n    isProposalThread &&\n    \"private_alias\" in currentThread.company &&\n    currentThread.request.confidential &&\n    currentUser.id === currentThread.scientist_user.id\n  ) {\n    placeholderRecipientName = currentThread.company.private_alias ?? \"the company\";\n  } else if (isProposalThread && isToExternalLead && \"company_name\" in currentThread.company) {\n    placeholderRecipientName = `the ${currentThread.company.company_name} team`;\n  }\n\n  return (\n    <>\n      <FileInput\n        type=\"file\"\n        accept=\"image/png, image/jpeg, application/pdf\"\n        ref={fileInputRef}\n        onChange={handleAttachmentUpload}\n      />\n      <AttachmentsInfoModal\n        isOpen={isAttachmentsInfoModalOpen}\n        onClose={() => setIsAttachmentsInfoModalOpen(false)}\n        openFileBrowser={openFileBrowser}\n      />\n      <ErrorModal\n        isOpen={Boolean(attachmentError)}\n        onClose={() => setAttachmentError(undefined)}\n        message={attachmentError}\n      />\n      <Container isInbox={isInbox}>\n        {isProposalThread &&\n          currentThread.request.confidential &&\n          (currentUser.role === USER_ROLES.sponsor || isExternalLead) && (\n            <InfoBanner\n              type=\"attention-orange\"\n              text={`You are messaging about an opportunity where ${\n                isExternalLead ? \"the\" : \"your\"\n              } company's name is anonymized. Do not reveal information about ${\n                isExternalLead ? \"the\" : \"your\"\n              } company.`}\n              margin=\"-16px 0 16px\"\n              font={FONTS.REGULAR_3}\n            />\n          )}\n        <InputContainer isInbox={isInbox} ref={inputContainerRef}>\n          <div>\n            {attachments.length > 0 && (\n              <AttachmentsContainer ref={attachmentsRef}>\n                {attachments.map((attachment) => (\n                  <MessageAttachment\n                    key={`attachment-${attachment.id ?? \"in-prog\"}`}\n                    attachment={attachment}\n                    isInbox={isInbox}\n                    uploadPercentage={!attachment.id ? uploadPercentage : 100}\n                    onRemove={() => handleAttachmentRemove(attachment.id)}\n                    onClick={() =>\n                      attachment.id &&\n                      openGallery(attachments as MessageAttachmentPartial[], attachment.id)\n                    }\n                  />\n                ))}\n              </AttachmentsContainer>\n            )}\n            <TextInput\n              data-testid=\"message-input\"\n              ref={messageInputRef}\n              placeholder={\n                isFetchingDraft && proposalyId\n                  ? \"\"\n                  : `Write a message to ${placeholderRecipientName}`\n              }\n              value={messageInput}\n              isInbox={isInbox}\n              onKeyDown={handleInputResizeAndChange}\n              onChange={handleInputResizeAndChange}\n              onFocus={() => setShouldShowJumpToBottom(false)}\n            />\n            <div ref={inputBottomRef} />\n          </div>\n        </InputContainer>\n        <JumpToBottomContainer>\n          <JumpToBottom isVisible={shouldShowJumpToBottom} onClick={jumpToBottom}>\n            <Icon name=\"Chevron Down\" size=\"lg\" color={COLORS.WHITE} />\n          </JumpToBottom>\n        </JumpToBottomContainer>\n        <BottomContainer isInbox={isInbox}>\n          <WarningMessageContainer isInbox={isInbox}>\n            <Icon name=\"Attention\" color={COLORS.BLACK} />\n            <WarningMessage isInbox={isInbox}>{t(\"common.misc.confidential\")}</WarningMessage>\n          </WarningMessageContainer>\n          <BottomButtonContainer>\n            <IconButton\n              iconName=\"Attachment\"\n              tooltipWidth=\"122px\"\n              tooltipText=\"Add attachments\"\n              onClick={handleAttachmentInitiation}\n              disabled={isSubmitting || isAttachmentUploading}\n              variant=\"ghost\"\n              data-testid=\"add-attachment-button\"\n            />\n            <Tooltip\n              isActive={!messageInput}\n              tooltipWidth={isInbox ? \"310px\" : \"120px\"}\n              position=\"top\"\n              content={\n                isInbox\n                  ? \"Please include a message with your attachment(s)\"\n                  : \"Please include a message\"\n              }\n            >\n              <Button\n                type=\"button\"\n                data-testid=\"send-message-button\"\n                iconName=\"Send Message\"\n                iconPosition=\"right\"\n                onClick={handleSubmit}\n                disabled={!messageInput || isSubmitting || isAttachmentUploading}\n                size={isInbox ? \"md\" : \"sm\"}\n              >\n                Send\n              </Button>\n            </Tooltip>\n          </BottomButtonContainer>\n        </BottomContainer>\n      </Container>\n    </>\n  );\n};\n\nexport default MessageCompose;\n\nconst FileInput = styled.input`\n  && {\n    display: none;\n  }\n`;\n\nconst Container = styled.div`\n  background-color: ${({ isInbox }) => (isInbox ? COLORS.NEUTRAL_100 : COLORS.WHITE)};\n  padding: ${({ isInbox }) => (isInbox ? \"24px\" : \"8px 10px 0px\")};\n  margin-top: 10px;\n  border-radius: 8px;\n`;\n\nconst BottomContainer = styled.div`\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  margin-top: ${({ isInbox }) => (isInbox ? \"16px\" : \"8px\")};\n`;\n\nconst InputContainer = styled.div`\n  background: ${({ isInbox }) => (isInbox ? COLORS.WHITE : COLORS.NEUTRAL_100)};\n  max-height: 30vh;\n  overflow-y: auto;\n  // Use column-reverse to keep the auto-expanding text area scrolled down\n  display: flex;\n  flex-direction: column-reverse;\n`;\n\nconst JumpToBottomContainer = styled.div`\n  width: 100%;\n  height: 0;\n  position: relative;\n`;\n\nconst JumpToBottom = styled.div`\n  position: absolute;\n  left: 50%;\n  transform: translateX(-50%);\n  bottom: 15px;\n\n  display: ${({ isVisible }) => (isVisible ? \"flex\" : \"none\")};\n  align-items: center;\n  justify-content: center;\n\n  width: 30px;\n  height: 30px;\n  border-radius: 50%;\n\n  background-color: ${COLORS.BLACK};\n  box-shadow: ${STYLES.SHADOW_D};\n  cursor: pointer;\n\n  transition: opacity 0.3s ease-in;\n  opacity: ${({ isVisible }) => (isVisible ? \"0.5\" : \"0\")};\n\n  &:hover {\n    opacity: 1;\n  }\n`;\n\nconst AttachmentsContainer = styled.div`\n  padding: 16px 0 0 12px;\n  display: flex;\n  flex-direction: column;\n  gap: 10px;\n`;\n\nconst TextInput = styled.textarea`\n  min-height: ${MESSAGE_INPUT_MIN_HEIGHT}px;\n  width: 100%;\n  padding: ${({ isInbox }) => (isInbox ? \"14px 16px\" : \"8px 12px 0 12px\")};\n  resize: none;\n  border-radius: 6px;\n  border: none;\n  ${FONTS.REGULAR_2};\n  vertical-align: top;\n  background: ${({ isInbox }) => !isInbox && COLORS.NEUTRAL_100};\n  overflow: hidden;\n\n  &::placeholder {\n    ${FONTS.REGULAR_2};\n    color: ${COLORS.NEUTRAL_500};\n  }\n`;\n\nconst WarningMessageContainer = styled.div`\n  display: flex;\n  align-items: center;\n`;\nconst WarningMessage = styled.div`\n  ${({ isInbox }) => (isInbox ? FONTS.MEDIUM_2 : FONTS.TAG_MEDIUM_2)};\n`;\nconst BottomButtonContainer = styled.div`\n  display: flex;\n  align-items: center;\n  gap: 10px;\n`;\n","import { CompanyAvatar, MessageAttachment, ProfilePicture } from \"@components/library\";\nimport { COLORS, FONTS } from \"@constants\";\nimport {\n  InboxMessageThread,\n  MessageAttachmentPartial,\n  MessagePartial,\n  MessageRecipient,\n} from \"@tsTypes/index\";\nimport { User } from \"@tsTypes/schema\";\nimport { UserRole } from \"@tsTypes/users\";\nimport { renderNewlines } from \"@utils/textUtils\";\nimport { AxiosError } from \"axios\";\nimport dayjs from \"dayjs\";\nimport { useEffect, useRef } from \"react\";\nimport { Loader } from \"semantic-ui-react\";\nimport styled from \"styled-components\";\n\ninterface Props {\n  messages: MessagePartial[];\n  messageError: AxiosError | undefined;\n  recipient?: MessageRecipient | Pick<User, \"role\">;\n  currentThread?: InboxMessageThread | null;\n  isInbox: boolean;\n  isLoading: boolean;\n  openGallery: (attachments: MessageAttachmentPartial[], attachmentId: number) => void;\n}\n\nfunction MessageList({\n  messages,\n  messageError,\n  isInbox = false,\n  recipient,\n  isLoading,\n  currentThread,\n  openGallery,\n}: Props) {\n  const endOfMessagesRef = useRef<null | HTMLDivElement>(null);\n\n  useEffect(() => {\n    setTimeout(() => {\n      endOfMessagesRef.current?.scrollIntoView({\n        behavior: \"smooth\",\n        block: \"start\",\n        inline: \"nearest\",\n      });\n    }, 50);\n  }, [messages]);\n\n  if (isLoading && messages.length === 0) {\n    return (\n      <Container>\n        <Loader active inline=\"centered\" style={{ margin: \"auto\" }} />\n      </Container>\n    );\n  }\n\n  return (\n    <Container data-testid=\"messages-list\">\n      <Messages>\n        {messages.length && currentThread ? (\n          messages.map((message, index: number) => {\n            const isFromExternalLead =\n              message.user.role === UserRole.SCIENTIST && !(\"id\" in message.user);\n            const isUserHidden = Boolean(\n              currentThread &&\n                \"company\" in currentThread &&\n                \"private_alias\" in currentThread.company\n            );\n\n            return (\n              <Message\n                key={`inbox-message-${message.id}`}\n                ref={index === messages.length - 1 ? endOfMessagesRef : null}\n                isInbox={isInbox}\n                data-testid=\"message\"\n              >\n                <MessageTime>{dayjs(message.created_at ?? \"\").fromNow()}</MessageTime>\n                <MessageContainer>\n                  <ProfilePictureContainer>\n                    {isFromExternalLead && !isUserHidden ? (\n                      <CompanyAvatar\n                        isPrivate={isUserHidden}\n                        imageUrl={\n                          \"company\" in currentThread && \"avatar\" in currentThread.company\n                            ? currentThread.company.avatar.url\n                            : undefined\n                        }\n                        size=\"sm\"\n                      />\n                    ) : (\n                      <ProfilePicture\n                        size=\"sm\"\n                        user={message.user as MessageRecipient}\n                        isUserHidden={isUserHidden}\n                      />\n                    )}\n                  </ProfilePictureContainer>\n                  <MessageContent data-testid=\"message-content\">\n                    {message.message_attachments.length > 0 && (\n                      <MessageAttachmentContainer>\n                        {message.message_attachments.map((attachment) => (\n                          <MessageAttachment\n                            key={`sent-attachment-${attachment.id}`}\n                            attachment={attachment}\n                            isInbox={isInbox}\n                            onClick={() => openGallery(message.message_attachments, attachment.id)}\n                          />\n                        ))}\n                      </MessageAttachmentContainer>\n                    )}\n                    {renderNewlines(message.content)}\n                  </MessageContent>\n                </MessageContainer>\n              </Message>\n            );\n          })\n        ) : (\n          <MessageContent>\n            {messageError ? (\n              <ZeroMessagesState>\n                Something went wrong loading your messages. Please try again later\n              </ZeroMessagesState>\n            ) : (\n              <ZeroMessagesState>\n                {`This is the beginning of your conversation with ${\n                  (recipient as MessageRecipient | undefined)?.name\n                }`}\n              </ZeroMessagesState>\n            )}\n          </MessageContent>\n        )}\n      </Messages>\n    </Container>\n  );\n}\n\nexport default MessageList;\n\nconst Container = styled.div`\n  display: flex;\n  flex-direction: column;\n  height: 100%;\n  min-height: 0;\n  overflow-y: auto;\n\n  &::-webkit-scrollbar {\n    width: 6px;\n  }\n  ::-webkit-scrollbar-track {\n    background: none;\n  }\n  &::-webkit-scrollbar-thumb {\n    background-color: ${COLORS.NEUTRAL_300};\n  }\n`;\n\nconst MessageTime = styled.div`\n  ${FONTS.MEDIUM_3}\n  color: ${COLORS.NEUTRAL_400};\n  margin-bottom: 16px;\n`;\n\nconst Message = styled.div`\n  margin-bottom: 28px;\n  padding: ${(props) => (props.isInbox ? \"0 30px 0 0\" : \"0 19px\")};\n\n  &:last-child {\n    margin-bottom: ${(props) => (props.isInbox ? \"24px\" : \"18px\")};\n  }\n  ${({ isInbox }) =>\n    !isInbox &&\n    `\n      &:first-child {\n        margin-top: 18px;\n      }\n    `}\n`;\n\nconst MessageContainer = styled.div`\n  display: flex;\n  overflow-y: hidden;\n  flex: 1 0 0px;\n  word-break: break-word;\n`;\n\nconst ProfilePictureContainer = styled.div`\n  width: 36px;\n  height: 36px;\n  margin-right: 12px;\n`;\n\nconst MessageContent = styled.div`\n  ${FONTS.REGULAR_2}\n`;\n\nconst MessageAttachmentContainer = styled.div`\n  & > div {\n    margin-bottom: 8px;\n  }\n`;\n\nconst Messages = styled.div`\n  margin-top: auto;\n`;\nconst ZeroMessagesState = styled.div`\n  ${FONTS.MEDIUM_2};\n  color: ${COLORS.NEUTRAL_500};\n  max-width: calc(100% - 94px);\n  padding-left: 12px;\n`;\n","import { Icon } from \"@components/library\";\nimport MessageAttachmentGalleryModal from \"@components/modals/MessageAttachmentGalleryModal/MessageAttachmentGalleryModal\";\nimport { COLORS, FONTS, STYLES } from \"@constants\";\nimport emptyState from \"@images/halo-empty-state.png\";\nimport { checkUnread } from \"@redux/actions/profileActions\";\nimport { RootState } from \"@redux/store\";\nimport {\n  InboxMessageThread,\n  MessageAttachmentPartial,\n  MessagePartial,\n  MessageRecipient,\n} from \"@tsTypes/index\";\nimport { User } from \"@tsTypes/schema\";\nimport { t } from \"@utils/i18n\";\nimport { proposalyPagePath } from \"@utils/proposalyUtils\";\nimport { AxiosError } from \"axios\";\nimport { useEffect, useState } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { Link } from \"react-router-dom\";\nimport { getMessages } from \"src/requests/messages\";\nimport styled from \"styled-components\";\nimport MessageCompose from \"./MessageCompose\";\nimport MessageList from \"./MessageList\";\n\ninterface Props {\n  currentThread?: InboxMessageThread | null;\n  isInbox?: boolean;\n  height?: string;\n}\n\nconst Conversation = ({ currentThread, isInbox, height }: Props) => {\n  const [messages, setMessages] = useState<MessagePartial[]>([]);\n  const [messageError, setMessageError] = useState<AxiosError>();\n  const [isLoadingMessages, setIsLoadingMessages] = useState(true);\n\n  // Empty array closes the gallery, adding items opens it\n  const [galleryAttachments, setGalleryAttachments] = useState<MessageAttachmentPartial[]>([]);\n  const [focusedGalleryAttachmentIndex, setFocusedGalleryAttachmentIndex] = useState<number>();\n\n  const currentUser = useSelector((state: RootState) => state.profiles.currentUser);\n  const messengerData = useSelector((state: RootState) => state.messenger.messengerData);\n  const isMessengerMinimized = useSelector(\n    (state: RootState) => state.messenger.isMessengerMinimized\n  );\n\n  const dispatch = useDispatch();\n\n  useEffect(() => {\n    (async () => {\n      if (currentThread?.id && (!isMessengerMinimized || isInbox)) {\n        try {\n          const { message_thread } = await getMessages(currentThread.id);\n\n          setMessages(message_thread.messages);\n          setIsLoadingMessages(false);\n          dispatch(checkUnread());\n        } catch (e) {\n          setMessageError(e);\n          setIsLoadingMessages(false);\n        }\n      } else {\n        setMessages([]);\n        setIsLoadingMessages(false);\n      }\n    })();\n  }, [currentThread, isMessengerMinimized]);\n\n  // Opens gallery with provided attachments array, focused on provided attachment id\n  const openGallery = (attachments: MessageAttachmentPartial[], attachmentId: number) => {\n    setGalleryAttachments(attachments);\n    const index = attachments.findIndex((attachment) => attachment.id === attachmentId);\n    setFocusedGalleryAttachmentIndex(index);\n  };\n\n  const closeGallery = () => {\n    setGalleryAttachments([]);\n    setFocusedGalleryAttachmentIndex(undefined);\n  };\n\n  if (!currentThread?.id && isInbox) {\n    return (\n      <ZeroState>\n        <ZeroStateImage src={emptyState} alt=\"pen and paper\" />\n      </ZeroState>\n    );\n  }\n\n  const isThreadScientistUser =\n    currentThread && currentUser.id === currentThread.scientist_user?.id;\n  const isNonConfidentialProposalThread = currentThread && \"company_members\" in currentThread;\n  const isDmThread = currentThread && \"recipients\" in currentThread;\n\n  let recipient: MessageRecipient | Pick<User, \"role\"> | undefined;\n  if (isInbox && currentThread) {\n    if (!isThreadScientistUser) {\n      recipient = currentThread.scientist_user;\n    } else if (isNonConfidentialProposalThread) {\n      recipient = currentThread.company_members[0];\n    } else if (isDmThread) {\n      recipient = currentThread.recipients.find(\n        (_recipient) => _recipient.id !== currentThread.scientist_user.id\n      );\n    }\n    // recipient is undefined when the current user is the associated scientist of a proposal thread and the\n    // request is confidential\n  } else {\n    recipient = messengerData.recipient;\n  }\n\n  const hasProposalBanner = isInbox && currentThread && \"proposal\" in currentThread;\n\n  return (\n    <>\n      <MessageAttachmentGalleryModal\n        attachments={galleryAttachments}\n        focusedAttachmentIndex={focusedGalleryAttachmentIndex}\n        setFocusedAttachmentIndex={setFocusedGalleryAttachmentIndex}\n        closeGallery={closeGallery}\n      />\n      <Container height={height}>\n        <Messenger isInbox={isInbox}>\n          <MessageListContainer hasBanner={hasProposalBanner}>\n            {hasProposalBanner && (\n              <ProposalBanner data-testid=\"proposal-banner\">\n                <ProposalLabel>\n                  <Icon name=\"Proposal\" size=\"xs\" color={COLORS.NEUTRAL_500} margin=\"0 6px 0 0\" />{\" \"}\n                  Proposal\n                </ProposalLabel>\n                <ProposalTitle>\n                  <div>{currentThread.proposal.title ?? t(\"common.misc.untitled_proposal\")}</div>\n                  <ViewProposal\n                    to={proposalyPagePath({\n                      proposaly_type: currentThread.proposaly_type!,\n                      slug: currentThread.proposal.slug,\n                    })}\n                    target=\"_blank\"\n                  >\n                    <Icon name=\"Open in a new tab\" />\n                  </ViewProposal>\n                </ProposalTitle>\n              </ProposalBanner>\n            )}\n            <MessageList\n              messages={messages}\n              messageError={messageError}\n              currentThread={currentThread}\n              isInbox={Boolean(isInbox)}\n              recipient={recipient}\n              isLoading={isLoadingMessages}\n              openGallery={openGallery}\n            />\n          </MessageListContainer>\n          <MessageCompose\n            currentThread={currentThread}\n            setMessages={setMessages}\n            isInbox={isInbox}\n            recipient={recipient}\n            openGallery={openGallery}\n          />\n        </Messenger>\n      </Container>\n    </>\n  );\n};\n\nexport default Conversation;\n\nconst Container = styled.div`\n  display: flex;\n  flex: auto;\n  flex-direction: column;\n  height: ${(props) => props.height};\n`;\n\nconst Messenger = styled.div`\n  display: grid;\n  grid-template-rows: 1fr auto;\n  height: 100%;\n  padding: ${(props) => (props.isInbox ? \"24px 20px\" : \"0 0 16px 0\")};\n`;\n\nconst MessageListContainer = styled.div`\n  display: grid;\n  grid-template-rows: ${({ hasBanner }) => (hasBanner ? \"auto 1fr\" : \"1fr\")};\n  height: 100%;\n  min-height: 0;\n`;\n\nconst ProposalBanner = styled.div`\n  min-width: 480px;\n  margin-bottom: 24px;\n`;\n\nconst ProposalLabel = styled.div`\n  display: flex;\n  align-items: center;\n  ${FONTS.MEDIUM_3}\n  color: ${COLORS.NEUTRAL_500};\n`;\n\nconst ProposalTitle = styled.div`\n  display: flex;\n  justify-content: space-between;\n  ${FONTS.MEDIUM_1};\n  margin-top: 5px;\n\n  div {\n    ${STYLES.TWO_LINES}\n    word-break: break-word;\n  }\n`;\n\nconst ViewProposal = styled(Link)`\n  color: ${COLORS.HALO_BLUE};\n  margin: 5px 25px 0 20px;\n  ${FONTS.REGULAR_3};\n`;\n\nconst ZeroState = styled.div`\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  width: 100%;\n  height: 100%;\n`;\n\nconst ZeroStateImage = styled.img`\n  width: 250px;\n`;\n","import { BlankModal, Icon, TextButton } from \"@components/library\";\nimport Button from \"@components/library/Buttons/Button\";\nimport { COLORS, FONTS } from \"@constants\";\nimport { useEffect, useState } from \"react\";\nimport styled from \"styled-components\";\n\nconst RfpQuestionSubmittedModal = ({ onClose, isOpen, handleOpenShareModal }) => {\n  const [isCopied, setIsCopied] = useState(false);\n\n  useEffect(() => {\n    if (isCopied) {\n      setTimeout(() => {\n        setIsCopied(false);\n      }, 2000);\n    }\n  }, [isCopied]);\n\n  useEffect(() => {\n    if (isOpen) {\n      setIsCopied(false);\n    }\n  }, [isOpen]);\n\n  return (\n    <BlankModal onClose={onClose} isOpen={isOpen} width=\"548px\" height=\"350px\">\n      <ModalContent>\n        <Icon name=\"Success\" color={COLORS.GREEN} size=\"xxl\" />\n        <div>\n          <Top>\n            <Header>Your question was submitted!</Header>\n            <SubHeader>\n              Your question is currently under review by the team at Halo. We&rsquo;ll let you know\n              when it&rsquo;s published.\n            </SubHeader>\n          </Top>\n          <SubHeader>Have a colleague who might be interested?</SubHeader>\n          <Button iconName=\"Share\" margin=\"0 0 16px 0\" onClick={handleOpenShareModal}>\n            Share this opportunity\n          </Button>\n          <Or>\n            or{\" \"}\n            <TextButton\n              onClick={() => {\n                navigator.clipboard.writeText(window.location.href);\n                setIsCopied(true);\n              }}\n              text={isCopied ? \"Copied!\" : \"Copy link to clipboard\"}\n              color={isCopied ? COLORS.GREEN : COLORS.HALO_BLUE}\n              iconName=\"Copy\"\n              iconPosition=\"left\"\n              size=\"sm\"\n            />\n          </Or>\n        </div>\n      </ModalContent>\n    </BlankModal>\n  );\n};\n\nexport default RfpQuestionSubmittedModal;\n\nconst ModalContent = styled.div`\n  display: flex;\n  align-items: flex-start;\n  justify-content: center;\n  gap: 8px;\n  padding: 48px 32px;\n`;\nconst Header = styled.div`\n  color: ${COLORS.BLACK};\n  ${FONTS.HEADING_4_SEMIBOLD};\n  margin: 4px 0px 0px 0px;\n`;\nconst SubHeader = styled.div`\n  ${FONTS.REGULAR_2};\n  margin: 6px auto 26px auto;\n`;\nconst Top = styled.div`\n  display: flex;\n  flex-direction: column;\n  align-items: flex-start;\n`;\nconst Or = styled.div`\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  ${FONTS.REGULAR_3};\n`;\n","import {\n  downvote_request_comment_path,\n  request_comment_path,\n  request_comments_path,\n  upvote_request_comment_path,\n} from \"@routes/routes\";\nimport api from \"./request\";\n\nexport const getRequestComments = async (requestId: number, sortBy: string) => {\n  const response = await api.get(`/request_comments`, {\n    params: {\n      request_id: requestId,\n      sort_by: sortBy,\n    },\n  });\n  return response.data;\n};\n\nexport const createRequestComment = ({\n  requestId,\n  text,\n  replyToId,\n  open,\n}: {\n  requestId: number;\n  text: string;\n  replyToId?: number;\n  open: boolean;\n}) =>\n  api.post(request_comments_path(), {\n    request_id: requestId,\n    reply_to_id: replyToId,\n    text,\n    open,\n  });\n\nexport const editRequestComment = (id: number, text?: string, open?: boolean) =>\n  api.put(request_comment_path({ id: id }), { text, open });\n\nexport const upvoteRequestComment = (id: number) => api.post(upvote_request_comment_path({ id }));\n\nexport const downvoteRequestComment = (id: number) =>\n  api.post(downvote_request_comment_path({ id }));\n\nexport const deleteRequestComment = (id: number) => api.delete(request_comment_path({ id }));\n","import styled from \"styled-components\";\n\nconst List = styled.ul`\n  margin: 0;\n  padding-left: 20px;\n`;\n\nconst TOOLTIP_CONTENT = {\n  SCIENTIST_UPVOTE: <>Vote up</>,\n  SCIENTIST_NEW_QUESTION: (\n    <>\n      <b>Pro Tips</b>\n      <List>\n        <li>\n          Before submitting a new question, consider upvoting other questions that might address\n          your inquiry\n        </li>\n        <li>Ask questions you think could be valuable to others</li>\n        <li>Be succinct — aim for a single sentence question that addresses one core concept</li>\n      </List>\n    </>\n  ),\n  SPONSOR_NEW_ANSWER: (\n    <>\n      <b>Pro Tips</b>\n      <List>\n        <li>Answer the question as directly as possible</li>\n        <li>Provide context and framing to help your audience understand your answer</li>\n        <li>Keep your response to 5-8 sentences maximum</li>\n      </List>\n    </>\n  ),\n};\n\nexport default TOOLTIP_CONTENT;\n","import {\n  Button,\n  Checkbox,\n  InfoBanner,\n  InputTooltip,\n  ProfilePicture,\n  TextInput,\n  TextLink,\n} from \"@components/library\";\nimport { COLORS, FONTS } from \"@constants\";\nimport { RootState } from \"@redux/store\";\nimport { createRequestComment } from \"@requests/requestComments\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport { SegmentEventName } from \"@tsTypes/__generated__/enums\";\nimport { RequestCommentPartial, RfpPageRequest } from \"@tsTypes/index\";\nimport { RequestForStartupsShowResponse } from \"@tsTypes/request_for_startups/show\";\nimport { track } from \"@utils/appUtils\";\nimport { toastErrorHandler } from \"@utils/requests\";\nimport { Dispatch, SetStateAction, useEffect, useRef, useState } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { USER_ROLES } from \"src/constants/users\";\nimport styled from \"styled-components\";\nimport line from \"./line.svg\";\nimport TOOLTIP_CONTENT from \"./tooltipContent\";\n\ninterface Props {\n  companyName: string;\n  request: RfpPageRequest | RequestForStartupsShowResponse;\n  replyTo?: RequestCommentPartial;\n  commentTreeLevel?: number;\n  onSuccess: (requestCommentId: number) => void;\n  setIsCommenting: Dispatch<SetStateAction<boolean>>;\n}\n\nconst RequestDiscussionSubmitForm = ({\n  companyName,\n  request,\n  replyTo,\n  commentTreeLevel = 0,\n  onSuccess,\n  setIsCommenting,\n}: Props) => {\n  const [text, setText] = useState(\"\");\n  const [isOpen, setIsOpen] = useState(true);\n  const startedWritingRef = useRef(false);\n\n  const currentUser = useSelector((state: RootState) => state.profiles.currentUser);\n\n  const createCommentMutation = useMutation({\n    mutationFn: createRequestComment,\n    onSuccess: (response) => {\n      const { id } = response.data;\n      setText(\"\");\n      onSuccess(id);\n    },\n    onError: toastErrorHandler,\n  });\n\n  const handleSubmitComment = () => {\n    createCommentMutation.mutate({\n      text,\n      requestId: request.id,\n      replyToId: replyTo?.id ?? undefined,\n      open: isOpen,\n    });\n  };\n\n  useEffect(() => {\n    if (text.length > 0) startedWritingRef.current = true;\n  }, [text]);\n\n  useEffect(() => {\n    return () => {\n      if (startedWritingRef.current && text.length > 0)\n        track(SegmentEventName.Abandon, {\n          ui_component: \"Abandoned Comment\",\n          react_component: \"RequestDiscussionSubmitForm\",\n          request_slug: request.slug,\n        });\n    };\n  }, []);\n\n  const answering = replyTo?.id;\n\n  return (\n    <Container answering={answering}>\n      {answering && <Line src={line} />}\n      <Context>\n        <ProfilePicture user={currentUser as any} size=\"xs\" />{\" \"}\n        {answering ? <>Respond to {replyTo?.user?.name ?? companyName}</> : <>Ask {companyName}</>}\n      </Context>\n      <InputTooltip\n        content={\n          answering ? TOOLTIP_CONTENT.SPONSOR_NEW_ANSWER : TOOLTIP_CONTENT.SCIENTIST_NEW_QUESTION\n        }\n        width=\"316px\"\n        arrowOffsetTop={answering ? \"90px\" : \"125px\"}\n        tooltipOffsetTop={answering ? \"-12px\" : \"-100px\"}\n      >\n        <TextInput\n          value={text}\n          labelFont={FONTS.HEADING_5_SEMIBOLD}\n          onChange={(e) => setText(e.target.value)}\n          textarea\n          startingHeight={answering ? \"175px\" : \"64px\"}\n          resize=\"none\"\n          characterLimit={answering ? undefined : 220}\n        />\n      </InputTooltip>\n      {request.confidential && answering && currentUser.role === USER_ROLES.sponsor && (\n        <InfoBanner\n          type=\"attention-orange\"\n          text=\"You are posting publicly on an opportunity where your company's name is anonymized. Do not reveal information about your company.\"\n          margin=\"16px 0 0\"\n          font={FONTS.REGULAR_3}\n        />\n      )}\n      <CheckboxContainer>\n        {answering && currentUser.role === USER_ROLES.sponsor && (\n          <Checkbox\n            label={\n              <span>\n                Allow {replyTo?.user?.name} to respond with a follow-up comment or question.\n                {commentTreeLevel > 1 && replyTo?.user?.role === USER_ROLES.scientist ? (\n                  <span>\n                    {\" \"}\n                    You can also{\" \"}\n                    <TextLink to={`/profile/${replyTo?.user?.profile_id}`} color={COLORS.HALO_BLUE}>\n                      message them directly\n                    </TextLink>\n                    .\n                  </span>\n                ) : null}\n              </span>\n            }\n            isChecked={isOpen}\n            onChange={(e) => setIsOpen(e.target.checked)}\n            size=\"sm\"\n          />\n        )}\n      </CheckboxContainer>\n      <Submit>\n        <Button\n          size=\"sm\"\n          width=\"160px\"\n          onClick={handleSubmitComment}\n          disabled={text.length === 0 || createCommentMutation.isLoading}\n        >\n          Submit\n        </Button>\n        <Cancel onClick={() => setIsCommenting(false)}>Cancel</Cancel>\n      </Submit>\n    </Container>\n  );\n};\n\nexport default RequestDiscussionSubmitForm;\n\nexport const Submit = styled.div`\n  display: flex;\n  align-items: center;\n  gap: 24px;\n  ${FONTS.REGULAR_2}\n  ${({ isEditing }) => isEditing && \"float: right; margin: 16px 0 0;\"}\n`;\nconst Context = styled.div`\n  display: inline-flex;\n  align-items: center;\n  gap: 8px;\n  ${FONTS.MEDIUM_2}\n  color: ${COLORS.NEUTRAL_500};\n  margin-bottom: 8px;\n`;\nconst Container = styled.div`\n  position: relative;\n  margin: ${({ answering }) => (answering ? \"0 0 32px 24px\" : \"32px 0 56px 0\")};\n`;\nexport const CheckboxContainer = styled.div`\n  margin: 16px 0;\n`;\n\nexport const Cancel = styled.div`\n  display: block;\n  text-decoration: none;\n  cursor: pointer;\n  ${FONTS.SEMIBOLD_2}\n  color: ${COLORS.HALO_BLUE};\n`;\n\nconst Line = styled.img`\n  position: absolute;\n  left: -18px;\n  top: -100px;\n  z-index: -1;\n`;\n","import toast from \"@components/Toast\";\nimport { Button, Checkbox, TextInput } from \"@components/library\";\nimport { FONTS } from \"@constants\";\nimport { RootState } from \"@redux/store\";\nimport { editRequestComment } from \"@requests/requestComments\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport { RequestCommentPartial } from \"@tsTypes/index\";\nimport { Dispatch, SetStateAction, useState } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport styled from \"styled-components\";\nimport { Cancel, CheckboxContainer, Submit } from \"./RequestDiscussionSubmitForm\";\n\ninterface Props {\n  comment: RequestCommentPartial;\n  onSuccess: () => Promise<void>;\n  setIsEditing: Dispatch<SetStateAction<boolean>>;\n}\n\nconst RequestDiscussionEditForm = ({ comment, onSuccess, setIsEditing }: Props) => {\n  const [text, setText] = useState(comment.text ?? \"\");\n  const [isOpen, setIsOpen] = useState(comment.open ?? true);\n\n  const currentUser = useSelector((state: RootState) => state.profiles.currentUser);\n\n  const mutation = useMutation({\n    mutationFn: () => editRequestComment(comment.id, text, isOpen),\n    onSuccess: async () => {\n      setText(\"\");\n      toast.success(\"Response edited!\");\n      await onSuccess();\n    },\n    meta: {\n      useGlobalErrorHandler: true,\n    },\n  });\n\n  const handleSubmitComment = () => {\n    mutation.mutate();\n  };\n\n  const answering = currentUser.role === 1;\n\n  return (\n    <EditContainer>\n      <TextInput\n        value={text}\n        labelFont={FONTS.HEADING_5_SEMIBOLD}\n        placeholder=\"Write your answer\"\n        onChange={(e) => setText(e.target.value)}\n        textarea\n        startingHeight=\"150px\"\n        resize=\"none\"\n      />\n      <CheckboxContainer>\n        {answering && (\n          <Checkbox\n            label=\"Allow researchers to respond to your comment\"\n            isChecked={isOpen}\n            onChange={(e) => setIsOpen(e.target.checked)}\n            size=\"sm\"\n          />\n        )}\n      </CheckboxContainer>\n      <Submit isEditing>\n        <Button\n          size=\"sm\"\n          margin=\"0 0 0 16px\"\n          onClick={handleSubmitComment}\n          disabled={mutation.isLoading || text?.length === 0}\n        >\n          Submit\n        </Button>\n        <Cancel onClick={() => setIsEditing(false)}>Cancel</Cancel>\n      </Submit>\n    </EditContainer>\n  );\n};\n\nexport default RequestDiscussionEditForm;\n\nconst EditContainer = styled.div`\n  width: 100%;\n`;\n","import toast from \"@components/Toast\";\nimport { Button, Icon, ProfilePicture, TextLink, Tooltip } from \"@components/library\";\nimport { COLORS, FONTS } from \"@constants\";\nimport { toggleLoginModal } from \"@redux/actions/profileActions\";\nimport { RootState } from \"@redux/store\";\nimport {\n  deleteRequestComment,\n  downvoteRequestComment,\n  editRequestComment,\n  upvoteRequestComment,\n} from \"@requests/requestComments\";\nimport { SegmentEventName } from \"@tsTypes/__generated__/enums\";\nimport {\n  RequestCommentPartial,\n  RfpPageRequest,\n  ScientistProfilePartial,\n  SponsorProfilePartial,\n  UniversityProfilePartial,\n} from \"@tsTypes/index\";\nimport { RequestForStartupsShowResponse } from \"@tsTypes/request_for_startups/show\";\nimport { UserRole } from \"@tsTypes/users\";\nimport { track } from \"@utils/appUtils\";\nimport appsignal from \"@utils/appsignal\";\nimport dayjs from \"dayjs\";\nimport { useState } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { Link } from \"react-router-dom\";\nimport styled from \"styled-components\";\nimport RequestDiscussionEditForm from \"./RequestDiscussionEditForm\";\nimport RequestDiscussionSubmitForm from \"./RequestDiscussionSubmitForm\";\nimport line from \"./line.svg\";\nimport TOOLTIP_CONTENT from \"./tooltipContent\";\n\ninterface Props {\n  comment: RequestCommentPartial;\n  request: RfpPageRequest | RequestForStartupsShowResponse;\n  commentTreeLevel?: number;\n  refreshComments: () => Promise<void>;\n  canAnswer: boolean;\n  isCompanyHidden: boolean;\n  canShowQA?: boolean;\n}\n\nconst RequestComment = ({\n  comment,\n  request,\n  commentTreeLevel = 0,\n  refreshComments,\n  canAnswer,\n  isCompanyHidden,\n  canShowQA = true,\n}: Props) => {\n  const {\n    id,\n    user,\n    created_at,\n    text,\n    open,\n    reply_to,\n    replies,\n    cached_votes_up,\n    cached_votes_down,\n    upvoted_by_current_user,\n    downvoted_by_current_user,\n  } = comment;\n\n  const [isCommenting, setIsCommenting] = useState(false);\n  const [isEditing, setIsEditing] = useState(false);\n\n  const currentUser = useSelector((state: RootState) => state.profiles.currentUser);\n  const dispatch = useDispatch();\n\n  const isScientist = currentUser.role === UserRole.SCIENTIST;\n  const isSponsor = currentUser.role === UserRole.SPONSOR;\n  const isUniversityAdmin = currentUser.role === UserRole.UNIVERSITY_ADMIN;\n\n  const commentBelongsToCurrentUser = currentUser.id && currentUser.id === user?.id;\n\n  const isQuestion = commentTreeLevel === 0;\n  const showEditActions =\n    commentBelongsToCurrentUser && !isEditing && !(isQuestion && Number(replies?.length) > 0);\n  const canUpvote = !isSponsor && !commentBelongsToCurrentUser;\n  const showAnswerButton = !isCommenting && isQuestion && !replies?.length && canAnswer;\n  const showReplyButton = (() => {\n    if (isCommenting || isQuestion || replies?.length) return false;\n\n    if (!open) return false;\n\n    if (isScientist || isUniversityAdmin) {\n      const belongsToThread = reply_to?.user?.id === currentUser.id;\n\n      return belongsToThread;\n    }\n\n    if (isSponsor) {\n      const replyToCompanyId = (reply_to?.user?.profile_info as SponsorProfilePartial)?.company_id;\n      const currentUserCompanyId = currentUser.profile_info?.company_id;\n\n      return replyToCompanyId === currentUserCompanyId;\n    }\n\n    return false;\n  })();\n\n  const commenterName =\n    isCompanyHidden && user?.role === UserRole.SPONSOR ? \"Team Member\" : user?.name;\n\n  let commenterTitle: string | null = \"\";\n  let commenterLocation: string | null = \"\";\n\n  if (user?.role === UserRole.SCIENTIST) {\n    commenterLocation = (user.profile_info as ScientistProfilePartial)?.location;\n    commenterTitle = (user.profile_info as ScientistProfilePartial)?.title ?? \"Scientist\";\n  } else if (user?.role === UserRole.UNIVERSITY_ADMIN) {\n    commenterLocation = (user.profile_info as UniversityProfilePartial)?.university;\n    commenterTitle = (user.profile_info as UniversityProfilePartial)?.role;\n  } else if (isCompanyHidden) {\n    commenterLocation = \"Private Company\";\n    commenterTitle = \"Reviewer\";\n  } else if ((user?.profile_info as SponsorProfilePartial)?.company_name) {\n    commenterLocation = (user?.profile_info as SponsorProfilePartial).company_name;\n    commenterTitle = (user?.profile_info as SponsorProfilePartial)?.title ?? \"Reviewer\";\n  }\n\n  const onUndo = async (requestCommentId) => {\n    try {\n      await deleteRequestComment(requestCommentId);\n\n      await refreshComments();\n\n      toast.success(\"Comment deleted!\");\n    } catch (e) {\n      toast.error(\"There was an error deleting this comment. Please try again later.\");\n\n      appsignal.sendError(e, (span) => {\n        span.setAction(\"RequestDiscussionSubmitForm#onUndo\");\n        span.setTags({\n          commentId: String(requestCommentId),\n          userId: currentUser.id,\n          userEmail: currentUser.email,\n        });\n      });\n    }\n  };\n\n  const onReplySuccess = async (requestCommentId) => {\n    setIsEditing(false);\n    setIsCommenting(false);\n    await refreshComments();\n    toast.success(\n      <ToastContent>\n        {\"Response posted!\"}\n        <UndoButton onClick={() => onUndo(requestCommentId)}>Undo</UndoButton>\n      </ToastContent>\n    );\n  };\n\n  const onEditSuccess = async () => {\n    setIsEditing(false);\n    setIsCommenting(false);\n    await refreshComments();\n  };\n\n  const onUpvote = async () => {\n    if (!currentUser.id) {\n      dispatch(toggleLoginModal({ open: true }));\n      return;\n    }\n\n    if (!canUpvote) return;\n\n    try {\n      await upvoteRequestComment(id);\n      track(SegmentEventName.Click, {\n        ui_component: \"Upvote Comment\",\n        react_component: \"RequestComment\",\n        request_slug: request.slug,\n        is_undo: upvoted_by_current_user,\n      });\n      refreshComments();\n    } catch (e) {\n      toast.error(\"There was an error upvoting this comment. Please try again later.\");\n\n      appsignal.sendError(e, (span) => {\n        span.setAction(\"RequestComment#onUpvote\");\n        span.setTags({\n          commentId: String(id),\n          userId: currentUser.id,\n          userEmail: currentUser.email,\n        });\n      });\n    }\n  };\n\n  const onDownvote = async () => {\n    if (!currentUser.id) {\n      dispatch(toggleLoginModal({ open: true }));\n      return;\n    }\n\n    if (!isScientist && !isUniversityAdmin) return;\n\n    try {\n      await downvoteRequestComment(id);\n      track(SegmentEventName.Click, {\n        ui_component: \"Downvote Comment\",\n        react_component: \"RequestComment\",\n        request_slug: request.slug,\n        is_undo: upvoted_by_current_user,\n      });\n      refreshComments();\n    } catch (e) {\n      toast.error(\"There was an error downvoting this comment. Please try again later.\");\n\n      appsignal.sendError(e, (span) => {\n        span.setAction(\"RequestComment#onDownvote\");\n        span.setTags({\n          commentId: String(id),\n          userId: currentUser.id,\n          userEmail: currentUser.email,\n        });\n      });\n    }\n  };\n\n  const onDelete = async () => {\n    try {\n      await deleteRequestComment(id);\n      toast.success(\"Comment deleted!\");\n      refreshComments();\n    } catch (e) {\n      toast.error(\"There was an error deleting this comment. Please try again later.\");\n\n      appsignal.sendError(e, (span) => {\n        span.setAction(\"RequestComment#onDelete\");\n        span.setTags({\n          commentId: String(id),\n          userId: currentUser.id,\n          userEmail: currentUser.email,\n        });\n      });\n    }\n  };\n\n  const onCloseThread = async () => {\n    try {\n      await editRequestComment(id, undefined, false);\n      track(SegmentEventName.Click, {\n        ui_component: \"Close Thread\",\n        react_component: \"RequestComment\",\n        request_slug: request.slug,\n      });\n      toast.success(\n        <ToastContent>\n          {\"Thread closed!\"}\n          <UndoButton onClick={() => editRequestComment(id, undefined, true)}>Undo</UndoButton>\n        </ToastContent>\n      );\n      refreshComments();\n    } catch (e) {\n      toast.error(\"There was an error closing this thread. Please try again later.\");\n\n      appsignal.sendError(e, (span) => {\n        span.setAction(\"RequestComment#onCloseThread\");\n        span.setTags({\n          commentId: String(id),\n          userId: currentUser.id,\n          userEmail: currentUser.email,\n        });\n      });\n    }\n  };\n\n  const showAwaitingResponse =\n    (showAnswerButton || showReplyButton) && currentUser.role === UserRole.SPONSOR;\n\n  return (\n    <Container highlight={showAwaitingResponse} isQuestion={isQuestion}>\n      {showAwaitingResponse && isQuestion && (\n        <AwaitingReponse>Awaiting your response</AwaitingReponse>\n      )}\n      <Comment>\n        <MainContent>\n          {isEditing ? (\n            <RequestDiscussionEditForm\n              comment={comment}\n              onSuccess={onEditSuccess}\n              setIsEditing={setIsEditing}\n            />\n          ) : (\n            <TextContainer isQuestion={isQuestion}>\n              <QuestionAnswer highlight={showAnswerButton} canShowQA={canShowQA}>\n                {isQuestion ? \"Q.\" : \"A.\"}\n              </QuestionAnswer>\n              <div>\n                {showAwaitingResponse && !isQuestion && (\n                  <AwaitingReponse>Awaiting your response</AwaitingReponse>\n                )}\n                <TextContent>{text}</TextContent>\n              </div>\n            </TextContainer>\n          )}\n          {showEditActions && (\n            <MessageActions>\n              {isSponsor && (\n                <Button variant=\"secondary\" size=\"xs\" onClick={() => setIsEditing(true)}>\n                  Edit\n                </Button>\n              )}\n              <Delete onClick={onDelete}>Delete</Delete>\n            </MessageActions>\n          )}\n          <User isQuestion={isQuestion} isEditing={isEditing}>\n            <PictureContainer\n              to={user?.role === UserRole.SCIENTIST ? `/profile/${user?.profile_id}` : undefined}\n            >\n              <ProfilePicture\n                user={user!}\n                size=\"sm\"\n                isUserHidden={user?.role === UserRole.SPONSOR && isCompanyHidden}\n              />\n            </PictureContainer>\n            <UserInfo>\n              <Name>\n                {user?.role === UserRole.SCIENTIST ? (\n                  <TextLink\n                    to={`/profile/${user?.profile_id}`}\n                    font={FONTS.REGULAR_3}\n                    onClick={() =>\n                      track(SegmentEventName.Click, {\n                        ui_component: \"Scientist Profile Link\",\n                        react_component: \"RequestComment\",\n                        request_slug: request.slug,\n                      })\n                    }\n                  >\n                    {commenterName}, {commenterTitle}, {commenterLocation}\n                  </TextLink>\n                ) : (\n                  <>\n                    {commenterName}, {commenterTitle}, {commenterLocation}\n                    <Icon name=\"Verified\" color={COLORS.HALO_BLUE} size=\"xs\" margin=\"0 0 0 2px\" />\n                  </>\n                )}\n              </Name>\n              <DatePosted>{dayjs(created_at).format(\"MMMM D, YYYY\")}</DatePosted>\n            </UserInfo>\n          </User>\n        </MainContent>\n        {user?.role !== UserRole.SPONSOR && (\n          <Tooltip\n            content={TOOLTIP_CONTENT.SCIENTIST_UPVOTE}\n            position=\"right\"\n            tooltipWidth=\"max-content\"\n            arrowOffsetTop=\"15px\"\n          >\n            <QuestionVoteContainer\n              canVote={canUpvote}\n              didVote={upvoted_by_current_user}\n              onClick={onUpvote}\n            >\n              <Icon name=\"Chevron Up\" size=\"md\" color={COLORS.HALO_BLUE} />\n              <QuestionVoteScore>{cached_votes_up}</QuestionVoteScore>\n            </QuestionVoteContainer>\n          </Tooltip>\n        )}\n      </Comment>\n      {user?.role === UserRole.SPONSOR && (\n        <Helpful>\n          {currentUser.role === UserRole.SPONSOR\n            ? \"Researcher rating\"\n            : \"Is this response helpful?\"}\n          <HelpfulThumb canVote={canUpvote} onClick={onUpvote}>\n            <Icon\n              name={`Thumb Up${upvoted_by_current_user ? \" Filled\" : \"\"}`}\n              size=\"sm\"\n              color={canUpvote ? COLORS.HALO_BLUE : COLORS.NEUTRAL_400}\n            />{\" \"}\n            {cached_votes_up}\n          </HelpfulThumb>\n          <HelpfulThumb canVote={canUpvote} onClick={onDownvote}>\n            <Icon\n              name={`Thumb Down${downvoted_by_current_user ? \" Filled\" : \"\"}`}\n              size=\"sm\"\n              color={canUpvote ? COLORS.HALO_BLUE : COLORS.NEUTRAL_400}\n            />{\" \"}\n            {cached_votes_down}\n          </HelpfulThumb>\n        </Helpful>\n      )}\n      {(showAnswerButton || showReplyButton) && (\n        <>\n          <Button\n            variant=\"secondary\"\n            size=\"sm\"\n            onClick={() => setIsCommenting(true)}\n            margin={showAnswerButton ? \"32px 0 0 24px\" : \"32px 0 8px 24px\"}\n            width=\"min-content\"\n          >\n            {isQuestion ? \"Answer\" : \"Reply\"}\n          </Button>\n          {open && reply_to && currentUser.role === UserRole.SPONSOR && (\n            <Button\n              size=\"sm\"\n              variant=\"ghost\"\n              onClick={onCloseThread}\n              margin=\"0 0 0 24px\"\n              width=\"min-content\"\n            >\n              Close thread\n            </Button>\n          )}\n        </>\n      )}\n      {isCommenting && (\n        <RequestDiscussionSubmitForm\n          companyName={\n            isCompanyHidden ? \"Private Company\" : (user?.profile_info as any).company_name\n          }\n          request={request}\n          replyTo={comment}\n          commentTreeLevel={commentTreeLevel}\n          onSuccess={onReplySuccess}\n          setIsCommenting={setIsCommenting}\n        />\n      )}\n      {!isQuestion && Number(replies?.length) > 0 && <HorizontalLine />}\n      <Answers indentAnswers={isQuestion && Number(replies?.length)}>\n        {Number(replies?.length) > 0 && (\n          <>\n            {isQuestion && <Line src={line} />}\n            {replies?.map((reply, index) => (\n              <RequestComment\n                key={reply.id}\n                commentTreeLevel={commentTreeLevel + 1}\n                canShowQA={isQuestion && index === 0}\n                request={request}\n                comment={reply}\n                refreshComments={refreshComments}\n                canAnswer={canAnswer}\n                isCompanyHidden={isCompanyHidden}\n              />\n            ))}\n          </>\n        )}\n      </Answers>\n    </Container>\n  );\n};\n\nexport default RequestComment;\n\nconst Container = styled.div`\n  ${({ highlight, isQuestion }) =>\n    highlight &&\n    `\n      padding: 16px ${isQuestion ? \"16px\" : \"0px\"} 0px;\n      border-radius: 8px;\n      background: ${COLORS.ORANGE_50};\n      margin-bottom: 56px;\n    `}\n`;\n\nconst HorizontalLine = styled.div`\n  width: 100%;\n  height: 1px;\n  background: ${COLORS.NEUTRAL_200};\n  margin: 32px 0;\n`;\n\nconst Comment = styled.div`\n  display: flex;\n  margin: 0 0 24px 0;\n`;\nconst MainContent = styled.div`\n  flex: 1;\n`;\nconst TextContainer = styled.div`\n  ${({ isQuestion }) => (isQuestion ? FONTS.SEMIBOLD_1 : FONTS.REGULAR_1)}\n  display: flex;\n  gap: 8px;\n`;\nconst QuestionAnswer = styled.strong`\n  background: ${({ highlight }) => (highlight ? COLORS.ORANGE_50 : COLORS.WHITE)};\n  height: min-content;\n  ${({ canShowQA }) => !canShowQA && \"visibility: hidden;\"}\n`;\nconst TextContent = styled.div`\n  word-break: break-word;\n`;\nconst User = styled.div`\n  display: inline-flex;\n  gap: 8px;\n  ${FONTS.REGULAR_3}\n  margin-top: 16px;\n  margin-left: ${({ isEditing }) => (isEditing ? \"0\" : \"24px\")};\n`;\nconst PictureContainer = styled(Link)`\n  flex-grow: 1;\n  pointer-events: ${({ to }) => (to ? \"auto\" : \"none\")};\n  text-decoration: none !important;\n`;\nconst UserInfo = styled.div`\n  text-overflow: ellipsis;\n  flex-shrink: 1;\n`;\nconst Name = styled.div`\n  display: inline-flex;\n  align-items: center;\n  ${FONTS.REGULAR_3}\n  line-height: 1.5;\n`;\nconst DatePosted = styled.div`\n  ${FONTS.REGULAR_3}\n  color: ${COLORS.NEUTRAL_500};\n`;\nconst Delete = styled.div`\n  display: block;\n  text-decoration: underline;\n  cursor: pointer;\n  ${FONTS.SEMIBOLD_2}\n  color: ${COLORS.RED};\n`;\nconst QuestionVoteContainer = styled.div`\n  display: inline-flex;\n  flex-direction: column;\n  align-items: center;\n  padding: 10px;\n  border: 2px solid ${COLORS.NEUTRAL_100};\n  border-radius: 12px;\n  font-weight: 600;\n  font-size: 12px;\n  line-height: 20px;\n  color: ${COLORS.BLUE_LIGHT_700};\n  height: 100%;\n  margin-left: 24px;\n  color: ${COLORS.NEUTRAL_500};\n  ${({ didVote }) => didVote && `color: ${COLORS.HALO_BLUE};`}\n  ${({ canVote }) =>\n    canVote &&\n    `\n      cursor: pointer;\n      &:hover {\n        background: ${COLORS.BLUE_LIGHT_300};\n        border: 2px solid ${COLORS.BLUE_LIGHT_300};\n      }\n    `}\n`;\nconst QuestionVoteScore = styled.div`\n  margin-top: -4px;\n`;\nconst Answers = styled.div`\n  position: relative;\n  margin: 32px 0 0;\n  ${({ indentAnswers }) =>\n    indentAnswers &&\n    `\n    margin: 32px 0 56px;\n    padding-left: 28px;\n  `}\n  width: 100%;\n  display: flex;\n  flex-direction: column;\n  gap: 24px;\n`;\nconst Line = styled.img`\n  position: absolute;\n  left: 5px;\n  top: -108px;\n  z-index: -1;\n`;\nconst MessageActions = styled.div`\n  margin: 16px 0 8px 24px;\n  display: flex;\n  align-items: center;\n  gap: 16px;\n`;\nconst Helpful = styled.div`\n  margin: 16px 0 8px 24px;\n  display: flex;\n  align-items: center;\n  gap: 16px;\n  ${FONTS.REGULAR_3}\n`;\nconst HelpfulThumb = styled.div`\n  ${({ canVote }) => canVote && \"cursor: pointer;\"}\n  display: flex;\n  align-items: center;\n  gap: 4px;\n  color: ${({ canVote }) => (canVote ? COLORS.HALO_BLUE : COLORS.NEUTRAL_400)};\n`;\nconst AwaitingReponse = styled.div`\n  ${FONTS.TAG_MEDIUM_2}\n  color: ${COLORS.ORANGE_900};\n  margin: 0 0 8px;\n`;\nconst ToastContent = styled.div`\n  display: flex;\n  align-items: center;\n  gap: 8px;\n`;\nconst UndoButton = styled.button`\n  background: none;\n  border: none;\n  padding: 0;\n  cursor: pointer;\n  text-decoration: underline;\n`;\n","import { Button, SelectableDropdown } from \"@components/library\";\nimport { DropdownOption } from \"@components/library/Dropdowns/DropdownOption\";\nimport FuelModal from \"@components/modals/FuelModal\";\nimport RfpQuestionSubmittedModal from \"@components/modals/RfpQuestionSubmittedModal\";\nimport { COLORS, FONTS } from \"@constants\";\nimport { toggleLoginModal } from \"@redux/actions/profileActions\";\nimport { RootState } from \"@redux/store\";\nimport { getRequestComments } from \"@requests/requestComments\";\nimport { getCanSubmitProposal } from \"@requests/requests\";\nimport { RequestCommentPartial, RfpPageRequest, SponsorCurrentUser } from \"@tsTypes/index\";\nimport { RequestForExpertsShowResponse } from \"@tsTypes/request_for_experts/show\";\nimport { RequestForStartupsShowResponse } from \"@tsTypes/request_for_startups/show\";\nimport { LaunchableRequestStatus, RequestableType } from \"@tsTypes/requests\";\nimport { UserRole } from \"@tsTypes/users\";\nimport {\n  canAccessRequestAsLead,\n  getLaunchableRequestStatus,\n  LaunchableRequest,\n} from \"@utils/requestUtils\";\nimport { checkRfpCompanyHidden } from \"@utils/rfpUtils\";\nimport { Dispatch, ForwardedRef, forwardRef, SetStateAction, useEffect, useState } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { USER_ROLES } from \"src/constants/users\";\nimport styled from \"styled-components\";\nimport RequestComment from \"./RequestComment\";\nimport RequestDiscussionSubmitForm from \"./RequestDiscussionSubmitForm\";\n\ninterface Props {\n  request: RfpPageRequest | RequestForStartupsShowResponse | RequestForExpertsShowResponse;\n  isCommenting: boolean;\n  setIsCommenting: Dispatch<SetStateAction<boolean>>;\n  setIsShareModalOpen: Dispatch<SetStateAction<boolean>>;\n}\n\nconst SORT_BY_OPTIONS: DropdownOption[] = [\n  {\n    value: \"votes\",\n    label: \"Most upvoted\",\n  },\n  {\n    value: \"recent\",\n    label: \"Most recent\",\n  },\n  {\n    value: \"awaiting_response\",\n    label: \"Awaiting response\",\n  },\n];\n\nconst RequestDiscussion = (\n  { request, isCommenting, setIsCommenting, setIsShareModalOpen }: Props,\n  ref: ForwardedRef<HTMLDivElement>\n) => {\n  const [successModalOpen, setSuccessModalOpen] = useState(false);\n  const [isFuelModalOpen, setIsFuelModalOpen] = useState(false);\n\n  const currentUser = useSelector((state: RootState) => state.profiles.currentUser);\n  const dispatch = useDispatch();\n\n  const isForRfs = request.requestable_type === RequestableType.REQUEST_FOR_STARTUP;\n  const isCompanyHidden = checkRfpCompanyHidden(request, currentUser);\n  const companyName = isCompanyHidden ? \"the company\" : (request.company as any)?.company_name;\n  const isFuel =\n    \"company_name\" in request.company && request.company.company_name?.includes(\"FUEL\");\n\n  const _canAccessRequestAsLead =\n    currentUser.role === UserRole.SPONSOR &&\n    canAccessRequestAsLead(currentUser as SponsorCurrentUser, request);\n  const showRfpDiscussion =\n    getLaunchableRequestStatus(request as LaunchableRequest) === LaunchableRequestStatus.ACTIVE;\n\n  const [sortBy, setSortBy] = useState<DropdownOption>(\n    _canAccessRequestAsLead ? SORT_BY_OPTIONS[2] : SORT_BY_OPTIONS[0]\n  );\n  const [comments, setComments] = useState<RequestCommentPartial[]>([]);\n\n  const canAskQuestion = [UserRole.SCIENTIST, UserRole.UNIVERSITY_ADMIN].includes(currentUser.role);\n\n  const refreshComments = async () => {\n    const { request_comments } = await getRequestComments(request.id, sortBy.value);\n    setComments(request_comments);\n  };\n\n  useEffect(() => {\n    refreshComments();\n  }, [sortBy]);\n\n  useEffect(() => {\n    if (_canAccessRequestAsLead) setSortBy(SORT_BY_OPTIONS[2]);\n  }, [currentUser.role]);\n\n  const onCommentSuccess = () => {\n    refreshComments();\n    setIsCommenting(false);\n\n    if (canAskQuestion) {\n      setSuccessModalOpen(true);\n    }\n  };\n\n  return (\n    <>\n      <RfpQuestionSubmittedModal\n        onClose={() => setSuccessModalOpen(false)}\n        isOpen={successModalOpen}\n        handleOpenShareModal={() => setIsShareModalOpen(true)}\n      />\n      <FuelModal isOpen={isFuelModalOpen} onClose={() => setIsFuelModalOpen(false)} />\n      <Heading ref={ref} id=\"q-a\">\n        Q&A with {companyName}\n      </Heading>\n      {showRfpDiscussion ? (\n        <>\n          <p>\n            Ask the team at {companyName} any questions you have about this{\" \"}\n            {isForRfs ? \"startup program\" : \"RFP\"}.\n          </p>\n          {(() => {\n            if (currentUser.id === undefined) {\n              return (\n                <QuestionCTA>\n                  <div>Ask your question</div>\n                  <Button\n                    onClick={() => {\n                      dispatch(toggleLoginModal({ open: true }));\n                    }}\n                  >\n                    Sign In\n                  </Button>\n                </QuestionCTA>\n              );\n            }\n            if (isCommenting) {\n              return (\n                <RequestDiscussionSubmitForm\n                  companyName={companyName ?? \"the company\"}\n                  request={request as any}\n                  onSuccess={onCommentSuccess}\n                  setIsCommenting={setIsCommenting}\n                />\n              );\n            }\n            if (canAskQuestion) {\n              return (\n                <Button\n                  margin=\"32px 0 16px 0\"\n                  onClick={async () => {\n                    if (isFuel) {\n                      const canSubmit = await getCanSubmitProposal(request.id);\n                      if (canSubmit) setIsCommenting(true);\n                      else setIsFuelModalOpen(true);\n                    } else {\n                      setIsCommenting(true);\n                    }\n                  }}\n                >\n                  Ask your question\n                </Button>\n              );\n            }\n          })()}\n        </>\n      ) : (\n        <Closed>\n          <p>The Q&amp;A is now closed.</p>\n        </Closed>\n      )}\n      {comments.length > 0 && (\n        <SortBy>\n          Sort by:\n          <SelectableDropdown\n            options={\n              currentUser.role === USER_ROLES.sponsor\n                ? SORT_BY_OPTIONS\n                : SORT_BY_OPTIONS.filter((option) => option.value !== \"replies\")\n            }\n            value={sortBy}\n            onChange={(e) => setSortBy(e)}\n          />\n        </SortBy>\n      )}\n      <Questions>\n        {comments.map((comment) => (\n          <RequestComment\n            key={comment.id}\n            request={request as RfpPageRequest}\n            comment={comment}\n            commentTreeLevel={0}\n            canAnswer={_canAccessRequestAsLead}\n            isCompanyHidden={isCompanyHidden}\n            refreshComments={refreshComments}\n          />\n        ))}\n      </Questions>\n    </>\n  );\n};\n\nexport default forwardRef(RequestDiscussion);\n\nconst QuestionCTA = styled.div`\n  display: flex;\n  justify-content: center;\n  gap: 30px;\n  align-items: center;\n  margin: 32px 0 16px 0;\n  background: ${COLORS.BLUE_LIGHT_250};\n  padding: 16px 32px;\n  border-radius: 12px;\n`;\nconst SortBy = styled.div`\n  display: flex;\n  align-items: center;\n  margin-top: 32px;\n  margin-bottom: 16px;\n  ${FONTS.REGULAR_2};\n`;\nconst Heading = styled.div`\n  ${FONTS.HEADING_2_SEMIBOLD};\n  margin-bottom: 24px;\n  &:not(:first-of-type) {\n    margin-top: 48px;\n  }\n`;\nconst Questions = styled.div`\n  margin-top: 16px;\n`;\nconst Closed = styled.div`\n  margin-bottom: 16px;\n`;\n","export const FAQS = [\n  {\n    href: \"https://knowledge.halo.science/what-is-the-proposal-process\",\n    text: \"What are the proposal questions?\",\n  },\n  {\n    href: \"https://knowledge.halo.science/where-do-i-submit-a-proposal\",\n    text: \"Where do I submit a proposal?\",\n  },\n  {\n    href: \"https://knowledge.halo.science/who-is-eligible-to-apply\",\n    text: \"Who is eligible to submit a proposal?\",\n  },\n  {\n    href: \"https://knowledge.halo.science/do-proposals-require-confidential-information-faq\",\n    text: \"Do proposals require confidential information?\",\n  },\n  {\n    href: \"https://knowledge.halo.science/can-university-administrators-join-halo\",\n    text: \"Can university administrators join Halo?\",\n  },\n  {\n    href: \"https://knowledge.halo.science/are-indirect-costs-included-in-the-funding-range-provided-by-sponsors\",\n    text: \"Are indirect costs included in the funding provided?\",\n  },\n  {\n    href: \"https://knowledge.halo.science/does-halo-charge-universities-or-scientists\",\n    text: \"Does Halo charge universities?\",\n  },\n];\n\nexport const TESTING4AG_FAQS = [\n  {\n    href: \"https://knowledge.halo.science/what-are-the-proposal-questions-for-testing4ag\",\n    text: \"What are the proposal questions for Testing4Ag?\",\n  },\n  {\n    href: \"https://knowledge.halo.science/what-happens-after-i-submit-a-proposal\",\n    text: \"What happens after I submit a proposal for Testing4Ag?\",\n  },\n  {\n    href: \"https://knowledge.halo.science/bayer-testing4ag-shared-results\",\n    text: \"How will the results be shared with researchers?\",\n  },\n  {\n    href: \"https://knowledge.halo.science/why-is-an-mta-required-for-testing4ag\",\n    text: \"Why is an MTA required?\",\n  },\n  {\n    href: \"https://knowledge.halo.science/what-are-the-terms-of-the-mta-for-bayers-testing4ag-program\",\n    text: \"What are the terms of the MTA?\",\n  },\n  {\n    href: \"https://knowledge.halo.science/what-if-i-have-questions-about-the-mta-for-bayers-testing4ag-program\",\n    text: \"What if I have questions about the MTA?\",\n  },\n];\n\nexport const BASF_RFM_FAQS = [\n  {\n    href: \"https://knowledge.halo.science/information-basf-request-for-materials\",\n    text: \"What information will I need to share to start the Request for Materials process with BASF?\",\n  },\n  {\n    href: \"https://knowledge.halo.science/what-does-the-request-for-materials-process-with-basf-look-like\",\n    text: \"What does the Request for Materials process with BASF look like?\",\n  },\n  {\n    href: \"https://knowledge.halo.science/what-biological-results-will-i-get-from-basf\",\n    text: \"What biological results will I get from BASF?\",\n  },\n  {\n    href: \"https://knowledge.halo.science/do-i-still-own-the-rights-to-my-molecules\",\n    text: \"Do I still own the rights to my molecules?\",\n  },\n  {\n    href: \"https://knowledge.halo.science/what-if-i-have-questions-about-the-basf-mta\",\n    text: \"What if I have questions about the BASF MTA?\",\n  },\n];\n\nexport const BAYER_COLAB_CAMBRIDGE_RFS_FAQS = [\n  {\n    text: \"Are selected startups for Co.Lab Cambridge expected to relocate?\",\n    href: \"https://knowledge.halo.science/are-selected-startups-expected-to-relocate\",\n  },\n  {\n    text: \"How long is the Co.Lab Cambridge incubator program?\",\n    href: \"https://knowledge.halo.science/how-long-is-the-co.lab-cambridge-incubator-program\",\n  },\n  {\n    text: \"Is there a virtual option for the Co.Lab incubator program?\",\n    href: \"https://knowledge.halo.science/is-there-a-virtual-option-for-the-co.lab-cambridge-incubator-program\",\n  },\n  {\n    text: \"If my startup is already based in Cambridge, am I still eligible to apply to Co.Lab Cambridge?\",\n    href: \"https://knowledge.halo.science/if-my-startup-is-already-based-in-cambridge-am-i-still-eligible-to-apply-to-co.lab-cambridge\",\n  },\n];\n\nexport const FUEL_FAQS = [\n  {\n    href: \"https://knowledge.halo.science/fuel-eligibility\",\n    text: \"What are the eligibility requirements for FUEL requests?\",\n  },\n  {\n    href: \"https://knowledge.halo.science/find-more-info-about-fuel\",\n    text: \"Where can I find more information about FUEL, its opportunities, proposal budgets, eligibility, or similar topics?\",\n  },\n  {\n    href: \"https://knowledge.halo.science/fuel-budget-constraints\",\n    text: \"What are the budget requirements and constraints for FUEL requests?\",\n  },\n  {\n    href: \"https://knowledge.halo.science/can-the-same-proposal-submitted-to-fuel-be-submitted-to-other-agencies-or-sponsors-for-simultaneous-review\",\n    text: \"Can the same proposal submitted to FUEL be submitted to other agencies or sponsors for simultaneous review?\",\n  },\n];\n","import { TextLink } from \"@components/library\";\nimport { COLORS, COMPANIES, FONTS } from \"@constants\";\nimport { RfpPageRequest } from \"@tsTypes/index\";\nimport styled from \"styled-components\";\nimport {\n  BASF_RFM_FAQS,\n  BAYER_COLAB_CAMBRIDGE_RFS_FAQS,\n  FAQS,\n  FUEL_FAQS,\n  TESTING4AG_FAQS,\n} from \"./faqs\";\n\ninterface Props {\n  request: RfpPageRequest;\n}\n\nconst { FUEL_ID } = COMPANIES;\n\nconst RequestFAQs = ({ request }: Props) => {\n  const defaultFaqs = [...FAQS];\n\n  if (request.requestable.hubspot_faq_tag) {\n    defaultFaqs.push({\n      href: `https://knowledge.halo.science/rfps#${request.requestable.hubspot_faq_tag}`,\n      text: \"View questions specific to this opportunity\",\n    });\n  }\n\n  const isTesting4Ag = request.title.includes(\"Testing4Ag\");\n  const isBasfRfm = request.slug.includes(\n    \"free-in-vivo-testing-unleash-your-molecule-s-potential-as-a-crop-protector\"\n  );\n  const isBayerColabCambridgeRfs = request.slug === \"co-lab-cambridge\";\n  const isFuelRequest = request.company.id === FUEL_ID;\n\n  let faqs = defaultFaqs;\n  if (isTesting4Ag) {\n    faqs = TESTING4AG_FAQS;\n  } else if (isBasfRfm) {\n    faqs = BASF_RFM_FAQS;\n  } else if (isBayerColabCambridgeRfs) {\n    faqs = BAYER_COLAB_CAMBRIDGE_RFS_FAQS;\n  } else if (isFuelRequest) {\n    faqs = FUEL_FAQS;\n  }\n\n  return (\n    <Container>\n      <Heading>Frequently Asked Questions</Heading>\n      {faqs.map((faq) => (\n        <div key={faq.href}>\n          <TextLink to={{ pathname: faq.href }} font={FONTS.REGULAR_2} newTab>\n            {faq.text}\n          </TextLink>\n        </div>\n      ))}\n    </Container>\n  );\n};\n\nexport default RequestFAQs;\n\nconst Container = styled.div`\n  border: 1px solid ${COLORS.NEUTRAL_250};\n  border-radius: 8px;\n  padding: 24px;\n  & ul {\n    padding-left: 24px;\n    margin-bottom: 0;\n  }\n`;\nconst Heading = styled.div`\n  ${FONTS.SEMIBOLD_1};\n  margin-bottom: 16px;\n`;\n","import { TextLink, UserPreview } from \"@components/library\";\nimport { COLORS, FONTS, WINDOW_DIMENSIONS } from \"@constants\";\nimport { ReviewTeamMember } from \"@tsTypes/index\";\nimport { RequestUnion } from \"@tsTypes/requests\";\nimport { RoleName } from \"@tsTypes/roles\";\nimport { UserRole } from \"@tsTypes/users\";\nimport { canAccessRequestAsLead, findRequestRoleNameOnUser } from \"@utils/requestUtils\";\nimport { renderMarkdownText } from \"@utils/textUtils\";\nimport { sortByHasProfilePicture } from \"@utils/userUtils\";\nimport styled from \"styled-components\";\n\ninterface Props {\n  request: RequestUnion;\n  isResponsive?: boolean;\n  withMarginTop?: boolean;\n  customText?: string; // Override the default company \"Who we are\" text\n  lineHeight?: string;\n}\n\nexport default function AboutCompany({\n  request,\n  isResponsive = true,\n  withMarginTop = true,\n  customText,\n  lineHeight,\n}: Props) {\n  const company = request.company;\n\n  if (request.confidential || \"private_alias\" in company) return null;\n\n  let reviewTeamMembers: ReviewTeamMember[] = [];\n  if (\"review_team_members\" in request) {\n    reviewTeamMembers = request.review_team_members;\n  }\n\n  let reviewTeamMembersForDisplay: ReviewTeamMember[] = reviewTeamMembers.filter((reviewer) =>\n    canAccessRequestAsLead(reviewer, request)\n  );\n  reviewTeamMembersForDisplay = sortByHasProfilePicture(reviewTeamMembersForDisplay);\n  reviewTeamMembersForDisplay = reviewTeamMembersForDisplay.sort(\n    (a, b) =>\n      Number(findRequestRoleNameOnUser(b, request) === RoleName.REQUEST_LEAD) -\n      Number(findRequestRoleNameOnUser(a, request) === RoleName.REQUEST_LEAD)\n  );\n\n  const text = customText ?? company.description;\n\n  return (\n    <Container data-testid=\"rfp-about-company\" lineHeight={lineHeight}>\n      {Number(text?.length) > 0 && (\n        <>\n          <Heading id=\"who-we-are\" withMarginTop={withMarginTop}>\n            Who we are\n          </Heading>\n          <div>\n            {customText ? (\n              renderMarkdownText(text)\n            ) : (\n              <>\n                {renderMarkdownText(text)}\n                &nbsp;\n                <TextLink\n                  to={`/company/${company.identifier}`}\n                  color={COLORS.HALO_BLUE}\n                  font={FONTS.MEDIUM_1}\n                  underline\n                  newTab\n                >\n                  Learn more\n                </TextLink>\n              </>\n            )}\n          </div>\n        </>\n      )}\n      {reviewTeamMembersForDisplay.length > 0 && (\n        <>\n          <Heading withMarginTop>Reviewers</Heading>\n          <Reviewers isResponsive={isResponsive}>\n            {reviewTeamMembersForDisplay.map((member) => (\n              <UserPreview\n                key={\"reviewer-\" + member.id}\n                user={member as any}\n                size=\"xl\"\n                userRole={UserRole.SPONSOR}\n              />\n            ))}\n          </Reviewers>\n        </>\n      )}\n    </Container>\n  );\n}\n\nconst Container = styled.div`\n  ${FONTS.REGULAR_1}\n  line-height: ${({ lineHeight }) => lineHeight ?? \"2\"};\n  & p {\n    margin-bottom: 16px !important;\n  }\n`;\nconst Heading = styled.div`\n  ${FONTS.HEADING_4_SEMIBOLD};\n  ${({ withMarginTop }) => withMarginTop && `margin-top: 64px;`}\n  margin-bottom: 24px;\n`;\nconst Reviewers = styled.div`\n  display: grid;\n  grid-template-columns: 1fr;\n  grid-gap: 64px 48px;\n  ${({ isResponsive }) =>\n    isResponsive &&\n    `\n      ${WINDOW_DIMENSIONS.EXTRA_WIDE_MEDIA_QUERY} {\n        grid-template-columns: 1fr 1fr;\n      }\n  `}\n`;\n","import { BlankModal, Button, Icon } from \"@components/library\";\nimport { COLORS, FONTS } from \"@constants\";\nimport { SegmentEventName } from \"@tsTypes/__generated__/enums\";\nimport { RequestUnion } from \"@tsTypes/requests\";\nimport { track } from \"@utils/appUtils\";\nimport { t } from \"@utils/i18n\";\nimport React, { useState } from \"react\";\nimport styled from \"styled-components\";\n\ninterface RelevanceFeedbackModalProps {\n  isOpen: boolean;\n  onClose: () => void;\n  isRelevant?: boolean;\n  request: RequestUnion;\n  trackingProps?: Record<string, any>;\n  onSubmit?: (option?: string) => void;\n}\n\nconst i18nPrefix = \"components.refine_recommendations\";\n\nconst RelevanceFeedbackModal: React.FC<RelevanceFeedbackModalProps> = ({\n  isOpen,\n  onClose,\n  isRelevant,\n  request,\n  trackingProps = {},\n  onSubmit,\n}) => {\n  const [selectedOption, setSelectedOption] = useState<string | undefined>(undefined);\n  const [otherText, setOtherText] = useState<string>(\"\");\n\n  // Reset state and close modal\n  const handleCloseModal = () => {\n    setSelectedOption(undefined);\n    setOtherText(\"\");\n    onClose();\n  };\n\n  const handleSubmit = () => {\n    const feedbackText = selectedOption === \"Other\" ? `Other: ${otherText}` : selectedOption;\n\n    track(SegmentEventName.Submit, {\n      react_component: \"RelevanceFeedbackModal\",\n      ui_component: isRelevant ? \"Relevant modal\" : \"Not relevant modal\",\n      request_slug: request.slug,\n      selected_option: feedbackText,\n      ...trackingProps,\n    });\n\n    onSubmit?.(feedbackText);\n\n    handleCloseModal();\n  };\n\n  const options = isRelevant\n    ? t([i18nPrefix, \"modal.options.relevant\"])\n    : t([i18nPrefix, \"modal.options.not_relevant\"]);\n\n  const description = isRelevant\n    ? t([i18nPrefix, \"modal.description_relevant\"])\n    : t([i18nPrefix, \"modal.description_not_relevant\"]);\n\n  const isOtherSelected = selectedOption === \"Other\";\n  const isSubmitDisabled = !selectedOption || (isOtherSelected && !otherText.trim());\n\n  return (\n    <BlankModal isOpen={isOpen} onClose={handleCloseModal} width=\"400px\">\n      <ModalContent>\n        {!isRelevant && (\n          <ModalIcon>\n            <Icon name=\"Checkmark\" color={COLORS.NEUTRAL_700} size=\"lg\" />\n          </ModalIcon>\n        )}\n\n        <Header>{t([i18nPrefix, \"modal.header\"])}</Header>\n\n        <SubHeader>{description}</SubHeader>\n        <OptionsContainer>\n          {(Array.isArray(options) ? options : []).map((option) => (\n            <OptionButton\n              key={option}\n              isSelected={selectedOption === option}\n              onClick={() => setSelectedOption(option)}\n            >\n              {option}\n            </OptionButton>\n          ))}\n\n          {isOtherSelected && (\n            <TextInputContainer>\n              <TextInput\n                placeholder={t([i18nPrefix, \"modal.options.other\"])}\n                value={otherText}\n                onChange={(e) => setOtherText(e.target.value)}\n                autoFocus\n              />\n            </TextInputContainer>\n          )}\n        </OptionsContainer>\n\n        <ModalActions>\n          <Button variant=\"secondary\" onClick={handleCloseModal} size=\"md\">\n            {t([i18nPrefix, \"modal.skip\"])}\n          </Button>\n          <Button variant=\"primary\" onClick={handleSubmit} disabled={isSubmitDisabled} size=\"md\">\n            {t([i18nPrefix, \"modal.submit\"])}\n          </Button>\n        </ModalActions>\n      </ModalContent>\n    </BlankModal>\n  );\n};\n\nexport default RelevanceFeedbackModal;\n\nconst ModalContent = styled.div`\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  padding: 48px;\n  width: 100%;\n  text-align: center;\n`;\n\nconst ModalIcon = styled.div`\n  margin-bottom: 16px;\n`;\n\nconst Header = styled.h3`\n  ${FONTS.HEADING_5_REGULAR};\n  margin: 0 0 16px 0;\n  color: ${COLORS.NEUTRAL_800};\n`;\n\nconst SubHeader = styled.p`\n  ${FONTS.REGULAR_2};\n  color: ${COLORS.NEUTRAL_500};\n  margin: 0 0 24px 0;\n  max-width: 400px;\n`;\n\nconst OptionsContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  width: 100%;\n  gap: 12px;\n  margin-bottom: 24px;\n`;\n\nconst OptionButton = styled.button<{ isSelected: boolean }>`\n  padding: 16px;\n  border-radius: 8px;\n  border: 1px solid ${(props) => (props.isSelected ? COLORS.BLUE_500 : COLORS.NEUTRAL_250)};\n  background-color: ${(props) => (props.isSelected ? COLORS.BLUE_LIGHT_50 : \"white\")};\n  text-align: left;\n  ${FONTS.REGULAR_2};\n  color: ${COLORS.NEUTRAL_700};\n  cursor: pointer;\n  transition: all 0.2s;\n\n  &:hover {\n    border-color: ${COLORS.BLUE_450};\n    background-color: ${(props) => (props.isSelected ? COLORS.BLUE_LIGHT_50 : COLORS.NEUTRAL_50)};\n  }\n`;\n\nconst TextInputContainer = styled.div`\n  width: 100%;\n  margin-top: -4px;\n`;\n\nconst TextInput = styled.input`\n  width: 100%;\n  padding: 12px 16px;\n  border-radius: 8px;\n  border: 1px solid ${COLORS.NEUTRAL_250};\n  ${FONTS.REGULAR_2};\n  color: ${COLORS.NEUTRAL_700};\n\n  &:focus {\n    outline: none;\n    border-color: ${COLORS.BLUE_450};\n  }\n`;\n\nconst ModalActions = styled.div`\n  display: flex;\n  justify-content: center;\n  gap: 12px;\n  width: 100%;\n`;\n","import { Link } from \"react-router-dom\";\n\nexport const TOOLTIP_CONTENT = {\n  RELEVANT: {\n    NOT_SIGNED_IN: (\n      <>\n        <b>Mark as relevant</b>\n        <div>Help Halo improve our request recommendations.</div>\n      </>\n    ),\n    SIGNED_IN: (\n      <>\n        <b>Mark as relevant</b>\n        <div>\n          Help Halo improve our request recommendations. Requests you mark as relevant will also be\n          added to your{\" \"}\n          <Link to=\"/my_proposals\" style={{ textDecoration: \"underline\", color: \"white\" }}>\n            Saved requests\n          </Link>\n        </div>\n      </>\n    ),\n  },\n  NOT_RELEVANT: (\n    <>\n      <b>Mark as not relevant</b>\n      <div>\n        Remove this partnering request from your marketplace view and decline any updates about it.\n      </div>\n    </>\n  ),\n};\n","import { Icon, Tooltip } from \"@components/library\";\nimport RelevanceFeedbackModal from \"@components/modals/RelevanceFeedbackModal\";\nimport { COLORS, FONTS, STYLES } from \"@constants\";\nimport useLocalStorage from \"@hooks/useLocalStorage\";\nimport { RootState } from \"@redux/store\";\nimport {\n  getUserRequestPreference,\n  updateUserRequestPreference,\n} from \"@requests/user_request_preferences\";\nimport { useMutation, useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport { SegmentEventName } from \"@tsTypes/__generated__/enums\";\nimport { UserRequestPreferenceSource } from \"@tsTypes/__generated__/enums/user_request_preference_source\";\nimport { RequestUnion } from \"@tsTypes/requests\";\nimport appsignal from \"@utils/appsignal\";\nimport { track } from \"@utils/appUtils\";\nimport { openLoginModalWithRedirect } from \"@utils/authUtils\";\nimport { t } from \"@utils/i18n\";\nimport React, { useState } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport styled from \"styled-components\";\nimport { TOOLTIP_CONTENT } from \"./tooltipContent\";\n\ninterface RefineRecommendationsProps {\n  request: RequestUnion;\n  isComplete: boolean;\n  trackingProps?: Record<string, any>;\n}\n\nfunction useRequestPreferences(requestId: number, isLoggedIn: boolean) {\n  const [localPreference, setLocalPreference] = useLocalStorage<boolean | null>(\n    `request_preference_${requestId}`,\n    null\n  );\n\n  const queryClient = useQueryClient();\n  const queryKey = [\"userRequestPreference\", requestId, isLoggedIn, localPreference];\n\n  const { data: isInterestedQuery } = useQuery({\n    queryKey: queryKey,\n    queryFn: async () => {\n      if (isLoggedIn) {\n        const preference = await getUserRequestPreference(requestId);\n        return preference?.is_interested ?? null;\n      }\n      return localPreference;\n    },\n  });\n\n  const { mutate: updateInterest } = useMutation({\n    mutationFn: async ({ isInterested, reason }: { isInterested: boolean; reason?: string }) => {\n      if (isLoggedIn) {\n        return updateUserRequestPreference({\n          requestId,\n          isInterested,\n          source: UserRequestPreferenceSource.RequestPage,\n          reason,\n        });\n      }\n      setLocalPreference(isInterested);\n    },\n    onSuccess: () => {\n      queryClient.invalidateQueries(queryKey);\n    },\n    onError: (error: Error) => {\n      appsignal.sendError(error, (span) => {\n        span.setAction(\"RefineRecommendations#updatePreference\");\n        span.setTags({\n          requestId: String(requestId),\n        });\n      });\n    },\n  });\n\n  return {\n    isInterested: isInterestedQuery,\n    updateInterest,\n  };\n}\n\nconst i18nPrefix = \"components.refine_recommendations\";\n\nconst RefineRecommendations: React.FC<RefineRecommendationsProps> = ({\n  request,\n  trackingProps = {},\n  isComplete,\n}) => {\n  const [isRelevant, setIsRelevant] = useState<boolean | undefined>(undefined);\n  const [showModal, setShowModal] = useState(false);\n\n  const dispatch = useDispatch();\n  const currentUser = useSelector((state: RootState) => state.profiles.currentUser);\n  const isLoggedIn = Boolean(currentUser.id);\n\n  const { isInterested, updateInterest } = useRequestPreferences(request.id, isLoggedIn);\n\n  const handleRelevantClick = () => {\n    if (isInterested) return;\n\n    track(SegmentEventName.Click, {\n      react_component: \"RefineRecommendations\",\n      ui_component: \"Relevant button\",\n      request_slug: request.slug,\n      is_logged_in: isLoggedIn,\n      ...trackingProps,\n    });\n\n    if (!isComplete) {\n      setIsRelevant(true);\n      setShowModal(true);\n    } else {\n      updateInterest({ isInterested: true });\n    }\n  };\n\n  const handleNotRelevantClick = () => {\n    if (isInterested === false) return;\n\n    track(SegmentEventName.Click, {\n      react_component: \"RefineRecommendations\",\n      ui_component: \"Not relevant button\",\n      request_slug: request.slug,\n      is_logged_in: isLoggedIn,\n      ...trackingProps,\n    });\n\n    setIsRelevant(false);\n    setShowModal(true);\n  };\n\n  const handleFeedbackSubmit = (reason?: string) => {\n    if (isRelevant === undefined) return;\n\n    track(SegmentEventName.Submit, {\n      react_component: \"RefineRecommendations\",\n      ui_component: isRelevant ? \"Relevant feedback\" : \"Not relevant feedback\",\n      request_slug: request.slug,\n      selected_option: reason,\n      is_logged_in: isLoggedIn,\n      ...trackingProps,\n    });\n\n    updateInterest({ isInterested: isRelevant, reason });\n    setShowModal(false);\n\n    if (!isLoggedIn) {\n      dispatch(openLoginModalWithRedirect());\n    }\n  };\n\n  const handleModalClose = () => {\n    setShowModal(false);\n    if (!isLoggedIn) {\n      dispatch(openLoginModalWithRedirect());\n    }\n  };\n\n  return (\n    <>\n      <Container>\n        <SectionHeading>\n          <Icon name=\"Magic\" color={COLORS.NEUTRAL_700} size=\"sm\" />\n          <HeadingText>{t([i18nPrefix, \"header\"])}</HeadingText>\n        </SectionHeading>\n        <QuestionText>{t([i18nPrefix, \"question\"])}</QuestionText>\n        <ButtonContainer>\n          <Tooltip\n            position=\"left\"\n            tooltipWidth=\"275px\"\n            contentWidth=\"100%\"\n            arrowOffsetTop={\"36px\"}\n            content={TOOLTIP_CONTENT.RELEVANT.NOT_SIGNED_IN}\n            // Uncomment this when Saved Requests page is built:\n            // content={TOOLTIP_CONTENT.RELEVANT[isLoggedIn ? \"SIGNED_IN\" : \"NOT_SIGNED_IN\"]}\n            // arrowOffsetTop={isLoggedIn ? \"56px\" : \"36px\"}\n          >\n            <RelevantButton\n              onClick={handleRelevantClick}\n              $selected={isInterested}\n              aria-label={t([i18nPrefix, \"buttons.relevant.aria_label\"])}\n            >\n              <Icon name=\"Checkmark\" color={COLORS.BLUE_500} size=\"sm\" />\n              {t([i18nPrefix, \"buttons.relevant.text\"])}\n            </RelevantButton>\n          </Tooltip>\n          <Tooltip\n            position=\"left\"\n            tooltipWidth=\"275px\"\n            arrowOffsetTop=\"45px\"\n            contentWidth=\"100%\"\n            content={TOOLTIP_CONTENT.NOT_RELEVANT}\n          >\n            <NotRelevantButton\n              onClick={handleNotRelevantClick}\n              $selected={isInterested === false}\n              aria-label={t([i18nPrefix, \"buttons.not_relevant.aria_label\"])}\n            >\n              <Icon name=\"Block\" color={COLORS.NEUTRAL_500} size=\"sm\" />\n              {t([i18nPrefix, \"buttons.not_relevant.text\"])}\n            </NotRelevantButton>\n          </Tooltip>\n        </ButtonContainer>\n      </Container>\n\n      <RelevanceFeedbackModal\n        request={request}\n        isOpen={showModal}\n        isRelevant={isRelevant}\n        trackingProps={trackingProps}\n        onClose={handleModalClose}\n        onSubmit={handleFeedbackSubmit}\n      />\n    </>\n  );\n};\n\nexport default RefineRecommendations;\n\nconst Container = styled.div`\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  padding: 24px;\n  width: 100%;\n`;\n\nconst SectionHeading = styled.div`\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  margin-bottom: 16px;\n`;\n\nconst HeadingText = styled.div`\n  ${FONTS.SEMIBOLD_1};\n  color: ${COLORS.NEUTRAL_800};\n`;\n\nconst QuestionText = styled.div`\n  ${FONTS.REGULAR_2};\n  color: ${COLORS.NEUTRAL_500};\n  margin-bottom: 16px;\n`;\n\nconst ButtonContainer = styled.div`\n  display: flex;\n  align-items: center;\n  align-self: stretch;\n`;\n\nconst BaseButton = styled.button`\n  display: flex;\n  height: 43px;\n  padding: 8px 10px;\n  justify-content: center;\n  align-items: center;\n  gap: 4px;\n  flex: 1 0 0;\n\n  width: 100%;\n\n  border: 1px solid ${COLORS.NEUTRAL_250};\n  background-color: ${COLORS.WHITE};\n\n  box-shadow: ${STYLES.SHADOW_CARD};\n\n  color: ${COLORS.BLUE_500};\n\n  ${FONTS.BUTTON_3}\n`;\n\nconst RelevantButton = styled(BaseButton)<{ $selected?: boolean }>`\n  color: ${COLORS.BLUE_500};\n  background: ${COLORS.WHITE};\n\n  border-radius: 4px 0px 0px 4px;\n\n  box-shadow: 0px 1px 3px 0px rgba(4, 11, 19, 0.06);\n\n  border: 1px solid ${COLORS.NEUTRAL_250};\n  margin-right: 0;\n\n  ${(props) =>\n    props.$selected &&\n    `\n    background: ${COLORS.BLUE_LIGHT_300};\n    border: 1px solid ${COLORS.BLUE_500};\n    margin-right: -1px;\n  `}\n`;\n\nconst NotRelevantButton = styled(BaseButton)<{ $selected?: boolean }>`\n  color: ${COLORS.NEUTRAL_500};\n  background: ${COLORS.WHITE};\n\n  border-radius: 0px 4px 4px 0px;\n\n  box-shadow: 0px 1px 3px 0px rgba(4, 11, 19, 0.06);\n\n  border: 1px solid ${COLORS.NEUTRAL_250};\n  border-left: none;\n  margin-left: 0;\n\n  ${(props) =>\n    props.$selected &&\n    `\n    background: ${COLORS.NEUTRAL_100};\n    border: 1px solid ${COLORS.NEUTRAL_500};\n    margin-left: -1px;\n  `}\n`;\n","import { CompanyAvatar, Icon } from \"@components/library\";\nimport Tooltip from \"@components/library/Tooltips/Tooltip\";\nimport { COLORS, FONTS, WINDOW_DIMENSIONS } from \"@constants\";\nimport useIsImageLoadable from \"@hooks/useIsImageLoadable\";\nimport { RootState } from \"@redux/store\";\nimport { CompanyPartial, ConfidentialCompany } from \"@tsTypes/index\";\nimport { Link } from \"react-router-dom\";\nimport styled from \"styled-components\";\n// @ts-ignore\nimport { CompanyVerificationStatus } from \"@tsTypes/companies.js.erb\";\nimport { RequestForStartupsShowResponse } from \"@tsTypes/request_for_startups/show\";\nimport { RequestableType, RequestUnion } from \"@tsTypes/requests\";\nimport { useSelector } from \"react-redux\";\n\nconst HALO_COMPANY_ID = 2825;\n\ninterface Props {\n  request: RequestUnion;\n  asPreview?: boolean;\n}\nexport default function Banner({ request, asPreview = false }: Props) {\n  const isTablet = useSelector((state: RootState) => state.window.isTablet);\n\n  const isCompanyPrivate = \"private_alias\" in request.company || request.confidential;\n  const isRfs = request.requestable_type === RequestableType.REQUEST_FOR_STARTUP;\n  const typedRfs = request.requestable as RequestForStartupsShowResponse[\"requestable\"];\n  const isHaloCompanyRequest = request.company.id === HALO_COMPANY_ID;\n\n  const backgroundImageUrl =\n    (isRfs && typedRfs.banner_image.url) || request.commercial_application?.banner_image.url;\n  const isImageLoadable = useIsImageLoadable(backgroundImageUrl);\n\n  return (\n    <Container backgroundImageUrl={isImageLoadable && backgroundImageUrl} asPreview={asPreview}>\n      <TopRow asPreview={asPreview}>\n        <CompanyContainer\n          as={\n            (isCompanyPrivate || isHaloCompanyRequest || (isRfs && !typedRfs.company_linked)) &&\n            \"div\"\n          }\n          to={\n            !isCompanyPrivate &&\n            !isHaloCompanyRequest &&\n            ((isRfs && typedRfs.company_linked) || !isRfs) &&\n            `/company/${(request.company as CompanyPartial).identifier}`\n          }\n          asPreview={asPreview}\n          data-testid=\"company-name\"\n        >\n          <CompanyAvatar\n            imageUrl={\"avatar\" in request.company ? request.company.avatar.url : null}\n            isPrivate={isCompanyPrivate}\n            size={isTablet ? \"sm\" : \"lg\"}\n          />\n          {isCompanyPrivate\n            ? (request.company as ConfidentialCompany).private_alias ?? \"Private Company\"\n            : (request.company as CompanyPartial).company_name}\n          {request.company.verification_status === CompanyVerificationStatus.VERIFIED && (\n            <Icon name=\"Verified\" size=\"sm\" margin=\"0 0 0 -12px\" color={COLORS.BLUE_LIGHT_650} />\n          )}\n          {isCompanyPrivate && (\n            <Tooltip\n              content={\n                <>\n                  This industry partner has opted to post this partnering request anonymously and\n                  will disclose their identity to finalists.\n                  <br />\n                  <a\n                    href=\"https://knowledge.halo.science/why-are-sponsors-private-for-some-rfps\"\n                    target=\"_blank\"\n                    rel=\"noopener noreferrer\"\n                  >\n                    Learn more.\n                  </a>\n                </>\n              }\n              position=\"right\"\n              tooltipWidth=\"300px\"\n              shouldFlex={true}\n              asPortal={true}\n              arrowOffsetTop=\"45px\"\n            >\n              <IconWrapper>\n                <Icon name=\"Info Inverted\" size=\"sm\" color={COLORS.BLUE_450} />\n              </IconWrapper>\n            </Tooltip>\n          )}\n        </CompanyContainer>\n        {isRfs && <ParentProgram asPreview={asPreview}>{typedRfs.parent_program}</ParentProgram>}\n      </TopRow>\n      <Title title={request.title} asPreview={asPreview} data-testid=\"rfp-title\">\n        {request.title}\n      </Title>\n      {request.commercial_application ? (\n        <CommercialApplication to={`/application/${request.commercial_application.slug}`}>\n          {request.commercial_application.name}\n        </CommercialApplication>\n      ) : (\n        <div />\n      )}\n    </Container>\n  );\n}\n\nconst Container = styled.div`\n  display: flex;\n  flex-direction: column;\n  justify-content: space-between;\n  gap: 16px;\n  min-height: 400px;\n  padding: 32px;\n  background: ${({ backgroundImageUrl }) =>\n    backgroundImageUrl ? `url(${backgroundImageUrl})` : \"#3B82F6\"};\n  background-size: cover;\n  border-radius: 12px;\n`;\nconst TopRow = styled.div`\n  display: flex;\n  align-items: center;\n  gap: 16px;\n  ${({ asPreview }) =>\n    !asPreview &&\n    `\n    ${WINDOW_DIMENSIONS.MOBILE_MEDIA_QUERY} {\n      flex-direction: column;\n      align-items: flex-start;\n      gap: 16px;\n    }\n  `}\n`;\nconst CompanyContainer = styled(Link)`\n  display: flex;\n  align-items: center;\n  gap: 16px;\n  color: ${COLORS.WHITE};\n  ${FONTS.HEADING_5_BOLD};\n  &:hover {\n    color: ${COLORS.WHITE};\n    text-decoration: none;\n  }\n`;\nconst ParentProgram = styled.div`\n  color: ${COLORS.WHITE};\n  ${FONTS.HEADING_5_REGULAR};\n  ${({ asPreview }) =>\n    !asPreview &&\n    `\n    ${WINDOW_DIMENSIONS.TABLET_MEDIA_QUERY} {\n      ${FONTS.REGULAR_2};\n    }\n  `}\n`;\nconst Title = styled.div`\n  max-width: 1048px;\n  ${({ title }) => {\n    if (title.length > 50) return FONTS.HEADING_JUMBO;\n    return FONTS.HEADING_BANNER;\n  }};\n  margin-bottom: 48px;\n  color: ${COLORS.WHITE};\n  line-height: 1.2;\n  letter-spacing: -0.03em;\n  overflow-wrap: break-word;\n  ${({ asPreview, title }) =>\n    !asPreview &&\n    `\n      font-size: ${(() => {\n        if (title.length > 67) return 52;\n        return 64;\n      })()}px;\n      @media screen and (max-width: 1212px) {\n        font-size: 52px;\n      }\n      @media screen and (max-width: 784px) {\n        font-size: 42px;\n      }\n  `}\n`;\nconst CommercialApplication = styled(Link)`\n  display: flex;\n  align-items: center;\n  width: fit-content;\n  height: 32px;\n  padding: 0 12px 2px;\n  background-color: ${COLORS.BLUE_750};\n  border-radius: 100px;\n  color: ${COLORS.WHITE};\n  ${FONTS.SEMIBOLD_3};\n  &:hover {\n    color: ${COLORS.WHITE};\n    background-color: ${COLORS.BLUE_600};\n    text-decoration: none;\n  }\n`;\n\nconst IconWrapper = styled.div`\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  height: 20px;\n  width: 20px;\n  margin-left: -12px;\n`;\n","import { useEffect, useState } from \"react\";\n\nexport default function useIsImageLoadable(imageUrl: string | null | undefined) {\n  const [isLoadable, setIsLoadable] = useState(false);\n\n  useEffect(() => {\n    if (imageUrl) {\n      const img = new Image();\n      img.onload = () => setIsLoadable(true);\n      img.onerror = () => setIsLoadable(false);\n      img.src = imageUrl;\n    }\n  }, [imageUrl]);\n\n  return isLoadable;\n}\n","import { Icon } from \"@components/library\";\nimport toast from \"@components/Toast\";\nimport { COLORS, STYLES } from \"@constants\";\nimport useLocalStorage from \"@hooks/useLocalStorage\";\nimport { RootState } from \"@redux/store\";\nimport {\n  deleteUserRequestPreference,\n  getUserRequestPreference,\n  updateUserRequestPreference,\n} from \"@requests/user_request_preferences\";\nimport { useMutation, useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport { SegmentEventName } from \"@tsTypes/__generated__/enums\";\nimport { UserRequestPreferenceSource } from \"@tsTypes/__generated__/enums/user_request_preference_source\";\nimport { RequestForCard } from \"@tsTypes/index\";\nimport appsignal from \"@utils/appsignal\";\nimport { track } from \"@utils/appUtils\";\nimport { t } from \"@utils/i18n\";\nimport React, { useEffect } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport styled from \"styled-components\";\n\ninterface RefineRecommendationsProps {\n  request: RequestForCard;\n  trackingProps?: Record<string, any>;\n  handleFade: () => void;\n  handleReveal: () => void;\n}\n\nfunction useRequestPreferences(request: RequestForCard, isLoggedIn: boolean) {\n  const [localPreference, setLocalPreference] = useLocalStorage<boolean | null>(\n    `request_preference_${request.id}`,\n    null\n  );\n\n  const queryClient = useQueryClient();\n  const queryKey = [\"userRequestPreference\", request.id, isLoggedIn, localPreference];\n\n  const { data: isInterestedQuery } = useQuery({\n    queryKey,\n    queryFn: async () => {\n      if (isLoggedIn) {\n        const preference = await getUserRequestPreference(request.id);\n        return preference?.is_interested ?? null;\n      }\n      return localPreference;\n    },\n    initialData: request.user_request_preference?.is_interested,\n    // Prevent automatic refetching\n    // This allows us to use the initial data from request.user_request_preference\n    // and only update the data when mutations explicitly invalidate the query\n    staleTime: Infinity,\n  });\n\n  const { mutate: updateInterest } = useMutation({\n    mutationFn: async (isInterested: boolean) => {\n      if (isLoggedIn)\n        return updateUserRequestPreference({\n          requestId: request.id,\n          isInterested,\n          source: UserRequestPreferenceSource.MarketplaceCard,\n        });\n      setLocalPreference(isInterested);\n    },\n    onSuccess: () => {\n      queryClient.invalidateQueries(queryKey);\n    },\n    onError: (error: Error) => {\n      appsignal.sendError(error, (span) => {\n        span.setAction(\"useRequestPreferences#updateInterest\");\n        span.setTags({\n          requestId: String(request.id),\n        });\n      });\n    },\n  });\n\n  const { mutate: deleteInterest } = useMutation({\n    mutationFn: async () => {\n      if (isLoggedIn) return deleteUserRequestPreference(request.id);\n      setLocalPreference(null);\n    },\n    onSuccess: () => {\n      queryClient.invalidateQueries(queryKey);\n    },\n    onError: (error: Error) => {\n      appsignal.sendError(error, (span) => {\n        span.setAction(\"useRequestPreferences#deleteInterest\");\n        span.setTags({\n          requestId: String(request.id),\n        });\n      });\n    },\n  });\n\n  return {\n    isInterested: isInterestedQuery,\n    updateInterest,\n    deleteInterest,\n  };\n}\n\nconst i18nPrefix = \"components.refine_recommendations\";\n\nconst RefineRecommendations: React.FC<RefineRecommendationsProps> = ({\n  request,\n  trackingProps = {},\n  handleFade,\n  handleReveal,\n}) => {\n  const currentUser = useSelector((state: RootState) => state.profiles.currentUser);\n  const isLoggedIn = Boolean(currentUser.id);\n\n  const { isInterested, updateInterest, deleteInterest } = useRequestPreferences(\n    request,\n    isLoggedIn\n  );\n\n  const handleRelevantClick = (e) => {\n    e.preventDefault();\n    e.stopPropagation();\n\n    track(SegmentEventName.Click, {\n      react_component: \"RefineRecommendations\",\n      ui_component: \"Relevant button\",\n      request_slug: request.slug,\n      is_logged_in: isLoggedIn,\n      ...trackingProps,\n    });\n\n    updateInterest(true);\n\n    toast.success(\n      <div>\n        {t([i18nPrefix, \"toasts.relevant\"])}{\" \"}\n        <UndoButton onClick={deleteInterest}>{t([i18nPrefix, \"buttons.undo\"])}</UndoButton>\n      </div>\n    );\n  };\n\n  const handleNotRelevantClick = (e) => {\n    e.preventDefault();\n    e.stopPropagation();\n\n    track(SegmentEventName.Click, {\n      react_component: \"RefineRecommendations\",\n      ui_component: \"Not relevant button\",\n      request_slug: request.slug,\n      is_logged_in: isLoggedIn,\n      ...trackingProps,\n    });\n\n    updateInterest(false);\n\n    toast.success(\n      <div>\n        {t([i18nPrefix, \"toasts.not_relevant\"])}{\" \"}\n        <UndoButton onClick={deleteInterest}>{t([i18nPrefix, \"buttons.undo\"])}</UndoButton>\n      </div>\n    );\n  };\n\n  useEffect(() => {\n    if (isInterested === false) handleFade();\n    else handleReveal();\n  }, [isInterested]);\n\n  return (\n    <ButtonContainer>\n      <RelevantButton\n        onClick={handleRelevantClick}\n        $selected={isInterested}\n        aria-label={t([i18nPrefix, \"buttons.relevant.aria_label\"])}\n      >\n        <Icon name=\"Checkmark\" color={COLORS.BLUE_500} size=\"sm\" />\n      </RelevantButton>\n      <NotRelevantButton\n        onClick={handleNotRelevantClick}\n        $selected={isInterested === false}\n        aria-label={t([i18nPrefix, \"buttons.not_relevant.aria_label\"])}\n      >\n        <Icon name=\"Block\" color={COLORS.NEUTRAL_500} size=\"sm\" />\n      </NotRelevantButton>\n    </ButtonContainer>\n  );\n};\n\nexport default RefineRecommendations;\n\nconst ButtonContainer = styled.div`\n  display: flex;\n  align-items: center;\n`;\n\nconst BaseButton = styled.button`\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  width: 40px;\n  height: 34px;\n\n  border: 1px solid ${COLORS.NEUTRAL_250};\n  background-color: ${COLORS.WHITE};\n\n  box-shadow: ${STYLES.SHADOW_CARD};\n`;\n\nconst RelevantButton = styled(BaseButton)<{ $selected?: boolean }>`\n  border-radius: 4px 0px 0px 4px;\n\n  border: 1px solid ${COLORS.NEUTRAL_250};\n  margin-right: 0;\n\n  ${(props) =>\n    props.$selected &&\n    `\n    background: ${COLORS.BLUE_LIGHT_300};\n    border: 1px solid ${COLORS.BLUE_500};\n  `}\n`;\n\nconst NotRelevantButton = styled(BaseButton)<{ $selected?: boolean }>`\n  border-radius: 0px 4px 4px 0px;\n\n  border: 1px solid ${COLORS.NEUTRAL_250};\n  border-left: none;\n  margin-left: 0;\n\n  ${(props) =>\n    props.$selected &&\n    `\n    background: ${COLORS.NEUTRAL_100};\n    border: 1px solid ${COLORS.NEUTRAL_500};\n    margin-left: -1px;\n  `}\n`;\nconst UndoButton = styled.button`\n  background: none;\n  border: none;\n  padding: 0;\n  cursor: pointer;\n  text-decoration: underline;\n`;\n","import { Button, Icon, RequestStatusIcon, Tag } from \"@components/library\";\nimport { IconName } from \"@components/library/Icon/Icon\";\nimport { COLORS, FONTS, WINDOW_DIMENSIONS } from \"@constants\";\nimport { RootState } from \"@redux/store\";\nimport { SegmentEventName } from \"@tsTypes/__generated__/enums\";\nimport { RequestForCard } from \"@tsTypes/index\";\nimport { RequestableType } from \"@tsTypes/requests\";\nimport { RfpStatus } from \"@tsTypes/rfps\";\nimport { UserRole } from \"@tsTypes/users\";\nimport { track } from \"@utils/appUtils\";\nimport { getRfpStatus, getRfpStatusText } from \"@utils/rfpUtils\";\nimport dayjs from \"dayjs\";\nimport { useSelector } from \"react-redux\";\nimport styled from \"styled-components\";\n\ninterface Props {\n  request: RequestForCard;\n  isUserFollowing: boolean;\n  isCardHovered: boolean;\n  shouldShowUnsubscribeButton?: boolean;\n}\n\nconst RfpCardFooter = ({\n  request,\n  isUserFollowing,\n  isCardHovered,\n  shouldShowUnsubscribeButton = false,\n}: Props) => {\n  const currentUser = useSelector((state: RootState) => state.profiles.currentUser);\n\n  const statusElementOptions = {\n    comingSoon: <Status color={COLORS.ORANGE}>Coming soon!</Status>,\n    active: (\n      <Status color={COLORS.GREEN_800}>\n        Apply by {dayjs(request.requestable.deadline ?? 0).format(\"MMM D\")}\n      </Status>\n    ),\n    inExtension: <Status color={COLORS.NEUTRAL_600}>Complete</Status>,\n    pastDeadline: <Status color={COLORS.NEUTRAL_600}>Complete</Status>,\n  };\n\n  if (request.requestable_type === RequestableType.RFP && request.requestable.is_trial) {\n    const waitListStatus = (\n      <Status color={COLORS.GREEN_800}>\n        <RequestStatusIcon status=\"trial\" />\n        Accepting first 5 proposals\n      </Status>\n    );\n\n    statusElementOptions.active = waitListStatus;\n    statusElementOptions.inExtension = waitListStatus;\n  }\n\n  let statusTagContent = \"Solutions\";\n  let statusTagIconName: IconName = \"RFP\";\n  switch (request.requestable_type) {\n    case RequestableType.REQUEST_FOR_EXPERT:\n      statusTagContent = \"Experts\";\n      statusTagIconName = \"Request for experts\";\n      break;\n  }\n\n  const shouldShowNotifyButton =\n    getRfpStatus(request) === RfpStatus.COMING_SOON && currentUser.role !== UserRole.SPONSOR;\n\n  return (\n    <Container data-testid=\"footer\">\n      {!shouldShowUnsubscribeButton && !shouldShowNotifyButton && (\n        <Tag\n          size=\"sm\"\n          backgroundColor={COLORS.BLUE_LIGHT_300}\n          color={COLORS.BLUE_600}\n          font={FONTS.SEMIBOLD_3}\n          content={statusTagContent}\n          iconName={statusTagIconName}\n        />\n      )}\n      {getRfpStatusText(request, statusElementOptions)}\n      {shouldShowUnsubscribeButton ? (\n        <Button\n          variant=\"destructive-secondary\"\n          size=\"sm\"\n          onClick={() => {\n            track(SegmentEventName.Click, {\n              react_component: \"RfpCardFooter\",\n              ui_component: \"Decline Updates Button\",\n              request_slug: request.slug,\n            });\n          }}\n        >\n          Stop notifications\n        </Button>\n      ) : (\n        shouldShowNotifyButton &&\n        (isUserFollowing ? (\n          <OptedIn>\n            <Icon name=\"Success\" color={COLORS.GREEN} size=\"sm\" />\n            You&apos;ll be notified\n          </OptedIn>\n        ) : (\n          <NotifyMe>\n            <Icon name=\"Bell\" color={COLORS.HALO_BLUE} />\n            <NotifyMeText isCardHovered={isCardHovered}>Notify me</NotifyMeText>\n          </NotifyMe>\n        ))\n      )}\n    </Container>\n  );\n};\n\nexport default RfpCardFooter;\n\nconst Container = styled.div`\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  padding: 18px 24px;\n  border-top: 1px solid ${COLORS.NEUTRAL_200};\n  ${FONTS.SEMIBOLD_3};\n`;\nconst Status = styled.div`\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  color: ${({ color }) => color};\n`;\nconst OptedIn = styled.div`\n  display: flex;\n  align-items: center;\n  gap: 4px;\n  color: ${COLORS.GREEN};\n`;\nconst NotifyMe = styled.div`\n  display: flex;\n  align-items: center;\n  overflow: hidden;\n  color: ${COLORS.HALO_BLUE};\n  pointer-events: fill;\n  -webkit-transition: all 0.2s ease-in-out;\n  -moz-transition: all 0.2s ease-in-out;\n  -o-transition: all 0.2s ease-in-out;\n  transition: all 0.2s ease-in-out;\n`;\nconst NotifyMeText = styled.span`\n  display: inline-block;\n  max-width: 0;\n  white-space: nowrap;\n  overflow: hidden;\n  -webkit-transition: 0.2s ease-in-out;\n  transition: 0.2s ease-in-out;\n  ${({ isCardHovered }) =>\n    isCardHovered &&\n    `\n      max-width: 67px;\n      margin-left: 4px;\n  `}\n  ${WINDOW_DIMENSIONS.MOBILE_MEDIA_QUERY} {\n    max-width: 67px;\n    margin-left: 4px;\n  }\n`;\n","import { Card, CompanyAvatar, Tag, TruncatedText, XMoreWrapper } from \"@components/library\";\nimport { COLORS, FEATURE_FLAGS, FONTS } from \"@constants\";\nimport useFollowRequest from \"@hooks/useFollowRequest\";\nimport { RootState } from \"@redux/store\";\nimport { SegmentEventName } from \"@tsTypes/__generated__/enums\";\nimport { ConfidentialCompany, RequestForCard } from \"@tsTypes/index\";\nimport { LaunchableRequestStatus } from \"@tsTypes/requests\";\nimport { UserRole } from \"@tsTypes/users\";\nimport { track } from \"@utils/appUtils\";\nimport { getLaunchableRequestStatus, requestPageUrlPath } from \"@utils/requestUtils\";\nimport { checkRfpCompanyHidden } from \"@utils/rfpUtils\";\nimport { useState } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { Link } from \"react-router-dom\";\nimport styled from \"styled-components\";\nimport RefineRecommendations from \"./RefineRecommendations\";\nimport RfpCardFooter from \"./RfpCardFooter\";\n\ninterface Props {\n  request: RequestForCard;\n  onClick?: (...args: any[]) => any;\n  shouldShowUnsubscribeButton?: boolean;\n  fromHref?: string;\n}\n\nconst RfpCard = ({ request, onClick, shouldShowUnsubscribeButton = false, fromHref }: Props) => {\n  const [isCardHovered, setIsCardHovered] = useState(false);\n  const [shouldFade, setShouldFade] = useState(false);\n\n  const currentUser = useSelector((state: RootState) => state.profiles.currentUser);\n\n  const { title, company, disciplines, areas_of_expertise } = request;\n\n  const { handleFollowRequest, isUserFollowing } = useFollowRequest(request.id);\n\n  const handleNotify = () => {\n    if (getLaunchableRequestStatus(request) !== LaunchableRequestStatus.COMING_SOON) return;\n\n    handleFollowRequest();\n\n    track(SegmentEventName.Click, {\n      ui_component: \"Coming soon request card\",\n      react_component: \"RfpCardNew\",\n      logged_in: false,\n    });\n  };\n\n  let keywords: string[];\n  if (!currentUser?.id) {\n    keywords = [...(disciplines ?? []), ...(areas_of_expertise ?? [])];\n  } else if (currentUser.role === UserRole.UNIVERSITY_ADMIN) {\n    keywords = disciplines;\n  } else {\n    keywords = areas_of_expertise;\n  }\n  // Remove duplicates just in case\n  keywords = Array.from(new Set(keywords));\n\n  const isComingSoon = getLaunchableRequestStatus(request) === LaunchableRequestStatus.COMING_SOON;\n  const isPrivate = checkRfpCompanyHidden(request, currentUser);\n\n  const CardLink = isComingSoon || shouldShowUnsubscribeButton ? DisabledCardLink : ActiveCardLink;\n\n  return (\n    <FadeWrapper shouldFade={shouldFade}>\n      <CardLink\n        to={{\n          pathname: requestPageUrlPath(request),\n          fromHref,\n        }}\n      >\n        <Card\n          padding=\"0px\"\n          showHoverBorder\n          onClick={onClick ?? handleNotify}\n          onMouseEnter={() => setIsCardHovered(true)}\n          onMouseLeave={() => setIsCardHovered(false)}\n          data-testid=\"rfp-card\"\n        >\n          <MainContent>\n            <Company data-testid=\"company-name\">\n              <CompanyAvatar\n                isPrivate={isPrivate}\n                imageUrl={\"avatar\" in company ? company.avatar.url : null}\n                size=\"sm\"\n              />\n              {isPrivate ? (\n                (company as ConfidentialCompany).private_alias ?? \"Private\"\n              ) : (\n                <TruncatedText\n                  text={\"company_name\" in company ? company.company_name : \"\"}\n                  font={FONTS.SEMIBOLD_1}\n                  textWidth=\"calc(100% - 48px)\"\n                  tooltipWidth=\"200px\"\n                />\n              )}\n            </Company>\n            <Title data-testid=\"title\">\n              <TruncatedText text={title} lines={4} font={FONTS.MEDIUM_1} />\n            </Title>\n            <KeywordContainer data-testid=\"keywords\">\n              <XMoreWrapper maxLines={2}>\n                {keywords.map((keyword) => (\n                  <Tag key={keyword} content={keyword} size=\"sm\" />\n                ))}\n              </XMoreWrapper>\n            </KeywordContainer>\n            {FEATURE_FLAGS.RELEVANT_NOT_RELEVANT_BUTTONS && (\n              <RefineRecommendations\n                request={request}\n                handleReveal={() => setShouldFade(false)}\n                handleFade={() => setShouldFade(true)}\n              />\n            )}\n          </MainContent>\n          <RfpCardFooter\n            request={request}\n            isUserFollowing={isUserFollowing ?? false}\n            isCardHovered={isCardHovered}\n            shouldShowUnsubscribeButton={shouldShowUnsubscribeButton}\n          />\n        </Card>\n      </CardLink>\n    </FadeWrapper>\n  );\n};\n\nexport default RfpCard;\n\nconst FadeWrapper = styled.div<{ shouldFade: boolean }>`\n  opacity: ${({ shouldFade }) => (shouldFade ? 0.4 : 1)};\n  transition: opacity 0.3s ease-out;\n`;\n\nconst ActiveCardLink = styled(Link)`\n  display: block;\n  :visited,\n  :link {\n    color: ${COLORS.BLACK};\n    text-decoration: none;\n  }\n`;\nconst DisabledCardLink = styled.div`\n  display: block;\n  color: ${COLORS.BLACK};\n  text-decoration: none;\n`;\nconst MainContent = styled.div`\n  display: flex;\n  flex-direction: column;\n  min-height: 305px;\n  background-color: ${({ backgroundColor }) => backgroundColor};\n  padding: 24px 24px 16px;\n  border-radius: ${({ borderRadius }) => borderRadius};\n`;\nconst Company = styled.div`\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  margin-bottom: 32px;\n  ${FONTS.SEMIBOLD_1};\n`;\nconst Title = styled.div`\n  height: 54px;\n  margin-bottom: auto;\n  ${FONTS.MEDIUM_1};\n`;\nconst KeywordContainer = styled.div`\n  margin-bottom: 16px;\n`;\n","import { Icon } from \"@components/library\";\nimport { COLORS, FONTS } from \"@constants\";\nimport styled from \"styled-components\";\n\nconst SSOEnabledHint = ({ text = \"Single sign-on enabled\" }) => (\n  <Hint>\n    <Icon name=\"Lock\" color={COLORS.NEUTRAL_500} size=\"xs\" />\n    {text}\n  </Hint>\n);\n\nexport { SSOEnabledHint };\n\nconst Hint = styled.div`\n  display: flex;\n  align-items: center;\n  gap: 8px;\n\n  color: ${COLORS.NEUTRAL_500};\n  ${FONTS.REGULAR_2}\n`;\n","import { Icon } from \"@components/library\";\nimport { COLORS, FONTS, STYLES } from \"@constants\";\nimport { FundingPartial } from \"@tsTypes/fundings/_funding\";\nimport { ScientistAttachmentProposal } from \"@tsTypes/index\";\nimport { PatentPartial } from \"@tsTypes/patents/_patent\";\nimport { PublicationPartial } from \"@tsTypes/publications/_publication\";\nimport { RequestableType } from \"@tsTypes/requests\";\nimport { Company, Foundation, GovernmentOrganization, University } from \"@tsTypes/schema\";\nimport { t } from \"@utils/i18n\";\nimport { proposalyPagePath } from \"@utils/proposalyUtils\";\nimport { REQUESTABLE_TO_ICON_NAME } from \"@utils/requestUtils\";\nimport dayjs from \"dayjs\";\nimport { ReactNode, useState } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport styled from \"styled-components\";\n\ninterface Props {\n  contribution: PublicationPartial | FundingPartial | PatentPartial | ScientistAttachmentProposal;\n  isExpandable?: boolean;\n  size?: \"sm\" | \"md\" | \"lg\";\n}\n\nfunction formatDate(date: string) {\n  return dayjs(date).format(\"MMM YYYY\");\n}\n\nconst ScientistContribution = ({ contribution, isExpandable = true, size = \"lg\" }: Props) => {\n  const [isExpanded, setIsExpanded] = useState(false);\n\n  let url: string | null | undefined;\n  if (\"url\" in contribution) url = contribution.url;\n  if (\"requestable_type\" in contribution) {\n    url = proposalyPagePath(contribution);\n  }\n\n  let title = contribution.title;\n  let additionalInfo: ReactNode;\n  let date: string | null = null;\n  let content: string | null = null;\n  // Publication\n  if (\"publication_name\" in contribution) {\n    additionalInfo = (\n      <PublicationName isExpanded={isExpanded} hasUrl={Boolean(url)}>\n        <Icon name=\"Publication\" color={COLORS.NEUTRAL_400} />\n        <span>{contribution.publication_name}</span>\n      </PublicationName>\n    );\n    if (contribution.date) date = formatDate(contribution.date);\n    content = contribution.abstract;\n\n    // Funding\n  } else if (\"amount\" in contribution) {\n    const { sponsor } = contribution;\n    if (sponsor || contribution.other_sponsor) {\n      title = `${\n        (sponsor as Foundation)?.foundation_name ??\n        (sponsor as GovernmentOrganization)?.org_name ??\n        (sponsor as Company)?.company_name ??\n        (sponsor as University)?.name ??\n        contribution.other_sponsor\n      } - ${title}`;\n    }\n    if (contribution.amount) {\n      additionalInfo = (\n        <Detail>\n          <Icon name=\"Funding\" color={COLORS.NEUTRAL_400} />$\n          {Intl.NumberFormat().format(Math.floor(contribution.amount))}\n        </Detail>\n      );\n    }\n    if (contribution.date) date = formatDate(contribution.date);\n    if (contribution.end_date) date += ` - ${formatDate(contribution.end_date)}`;\n    content = contribution.description;\n\n    // Patent\n  } else if (\"filing_date\" in contribution) {\n    if (contribution.status) {\n      additionalInfo = (\n        <Detail>\n          <Icon name=\"Status\" color={COLORS.NEUTRAL_400} />\n          Status: {t([\"models.patent.status\", contribution.status])}\n        </Detail>\n      );\n    }\n    if (contribution.filing_date) {\n      date = `Filing Date: ${formatDate(contribution.filing_date)}`;\n    }\n    content = contribution.abstract;\n\n    // Proposal\n  } else if (\"requestable_type\" in contribution) {\n    const { requestable_type, request, completed, first_completed_at } = contribution;\n\n    if (!title) title = `RFP: ${request.title}`;\n\n    let requestLabel = \"RFP\";\n    switch (requestable_type) {\n      case RequestableType.REQUEST_FOR_EXPERT:\n        requestLabel = \"Request for Experts\";\n        break;\n      case RequestableType.OPEN_CALL:\n        requestLabel = \"Open Call\";\n        break;\n      case RequestableType.REQUEST_FOR_STARTUP:\n        requestLabel = \"Startup Program\";\n        break;\n    }\n    additionalInfo = (\n      <Detail>\n        <Icon\n          name={REQUESTABLE_TO_ICON_NAME[requestable_type]}\n          color={COLORS.NEUTRAL_400}\n          size=\"sm\"\n        />\n        {requestLabel}: {request.title}\n      </Detail>\n    );\n\n    if (completed && first_completed_at) {\n      date = formatDate(first_completed_at);\n    } else if (!completed) {\n      date = \"Not submitted (Draft)\";\n    }\n\n    content = contribution.preview;\n  }\n\n  return (\n    <Container size={size}>\n      <Preview\n        type=\"button\"\n        onClick={() => isExpandable && setIsExpanded(!isExpanded)}\n        size={size}\n        isExpandable={isExpandable}\n      >\n        <TopRow size={size}>\n          <Title\n            as={(() => {\n              if (url && \"requestable_type\" in contribution) return Link;\n              else if (url) return \"a\";\n              return \"div\";\n            })()}\n            href={\n              // eslint-disable-next-line no-nested-ternary\n              url?.startsWith(\"http\")\n                ? url\n                : url?.startsWith(\"10.\")\n                ? `https://doi.org/${url}`\n                : `https://${url}`\n            }\n            to={url}\n            target=\"_blank\"\n            size={size}\n            isExpanded={isExpanded}\n            onClick={(e) => url && e.stopPropagation()}\n          >\n            {title}\n          </Title>\n          {isExpandable && content && <Icon name={isExpanded ? \"Chevron Up\" : \"Chevron Down\"} />}\n        </TopRow>\n        {isExpanded && <Content>{content}</Content>}\n        <Details isExpanded={isExpanded}>\n          {additionalInfo}\n          {date && (\n            <Detail>\n              <Icon name=\"Calendar\" color={COLORS.NEUTRAL_400} />\n              {date}\n            </Detail>\n          )}\n        </Details>\n      </Preview>\n    </Container>\n  );\n};\n\nexport default ScientistContribution;\n\nconst Container = styled.div`\n  width: 100%;\n  min-width: 0;\n  padding: ${({ size }) => (size === \"sm\" ? \"4px 8px\" : \"16px\")};\n  background: ${({ size }) => (size === \"md\" ? COLORS.NEUTRAL_200 : COLORS.NEUTRAL_50)};\n  border-radius: 8px;\n`;\nconst Preview = styled.button`\n  display: flex;\n  flex-direction: column;\n  justify-content: space-between;\n  height: 100%;\n  width: 100%;\n  padding: 0;\n  ${FONTS.MEDIUM_3};\n  text-align: left;\n  background: none;\n  border: none;\n  &:hover {\n    text-decoration: none;\n    cursor: ${({ isExpandable }) => (isExpandable ? \"pointer\" : \"default\")};\n  }\n  &:focus {\n    outline: none;\n    text-decoration: none;\n  }\n`;\nconst TopRow = styled.div`\n  display: flex;\n  justify-content: space-between;\n  gap: 16px;\n  ${({ size }) => size === \"sm\" && \"height: 40px\"};\n  margin-bottom: 4px;\n  width: 100%;\n`;\nconst Title = styled.div`\n  ${({ size }) => (size === \"sm\" ? FONTS.MEDIUM_3 : FONTS.MEDIUM_2)};\n  ${({ isExpanded, size }) => {\n    if (size === \"lg\" && !isExpanded) return STYLES.ONE_LINE_ALT;\n    if (size === \"sm\") return STYLES.TWO_LINES;\n    if (size === \"md\") return STYLES.THREE_LINES;\n  }};\n  color: ${COLORS.BLACK};\n  ${({ as: _as }) =>\n    _as !== \"div\" &&\n    `\n  &:hover,\n  &:focus {\n    color: ${COLORS.BLACK};\n    text-decoration: underline;\n    outline: none;\n  }\n  `}\n`;\nconst Details = styled.div`\n  display: flex;\n  align-items: ${({ isExpanded }) => (isExpanded ? \"flex-start\" : \"center\")};\n  gap: 24px;\n  color: ${COLORS.NEUTRAL_400};\n  width: 100%;\n`;\nconst Detail = styled.div`\n  display: flex;\n  align-items: center;\n  gap: 4px;\n`;\nconst PublicationName = styled(Detail)`\n  ${({ isExpanded }) => isExpanded && \"align-items: flex-start\"};\n  max-width: calc(100% - 110px);\n  & > span {\n    ${({ isExpanded }) => isExpanded && \"margin-top: 2px\"};\n    ${({ isExpanded, hasUrl }) => (hasUrl || !isExpanded) && STYLES.ONE_LINE_ALT};\n  }\n`;\nconst Content = styled.div`\n  margin: 12px 0;\n  ${FONTS.REGULAR_3};\n`;\n","import { Icon, Tooltip } from \"@components/library\";\nimport { COLORS, FONTS, STYLES } from \"@constants\";\nimport { TECHNOLOGY_READINESS_LEVELS } from \"@tsTypes/proposals\";\nimport Slider from \"rc-slider\";\nimport styled from \"styled-components\";\n\ninterface Props {\n  trlRange: [number, number];\n  asInput?: boolean;\n  onChange?: (values: [number, number]) => void;\n}\n\nexport const TOOLTIP_EXAMPLES = {\n  1: \"Literature review to validate initial idea.\",\n  2: \"Hypothesis created and validated using basic science principles in the lab.\",\n  3: \"Ideas validated using cell models, computational modeling or in-silico experiments.\",\n  4: \"Drug validated in a mouse model or genetically-modified plants grown in a greenhouse.\",\n  5: \"Hypothesis evaluated and refined in a small-scale experimental test in a relevant environment.\",\n  6: \"Product tested in clinical trials, factories, or field trials with no further requirement to make changes to the product.\",\n  7: \"Product received FDA approval.\",\n  8: \"Product can be manufactured at scale.\",\n  9: \"Product is accessible for consumers.\",\n};\n\nexport const DEFAULT_TRL_RANGE = [1, 9] as [number, number];\n\nconst SliderHandle = (handle) => (\n  // eslint-disable-next-line react/jsx-props-no-spreading\n  <div {...handle.props} className=\"rc-slider-handle\" data-testid=\"trl-handle\">\n    {sliderHandleIcon}\n  </div>\n);\n\nconst TRLs = ({ trlRange, asInput = false, onChange }: Props) => {\n  const handleLabelClick = (level) => {\n    if (!onChange) return;\n\n    const halfwayPoint = (trlRange[0] + trlRange[1]) / 2;\n    if (level < halfwayPoint) {\n      onChange([level, trlRange[1]]);\n    } else {\n      onChange([trlRange[0], level]);\n    }\n  };\n\n  return (\n    <Container>\n      <SliderContainer asInput={asInput}>\n        <SliderTrackBackground />\n        {asInput ? (\n          <Slider\n            range\n            vertical\n            reverse\n            value={trlRange}\n            min={1}\n            max={Object.keys(TECHNOLOGY_READINESS_LEVELS).length}\n            dots\n            allowCross={false}\n            handleRender={SliderHandle}\n            onChange={\n              onChange && ((newRange: number | number[]) => onChange(newRange as [number, number]))\n            }\n          />\n        ) : (\n          <>\n            <DotContainer>\n              {Object.keys(TECHNOLOGY_READINESS_LEVELS).map((level) => (\n                <Dot\n                  key={level}\n                  isActive={Number(level) >= trlRange[0] && Number(level) <= trlRange[1]}\n                />\n              ))}\n            </DotContainer>\n            <SelectedBar trlRange={trlRange} />\n          </>\n        )}\n      </SliderContainer>\n      <Levels>\n        {Object.values(TECHNOLOGY_READINESS_LEVELS).map((value, i) => {\n          const isSelected = trlRange[0] <= i + 1 && trlRange[1] >= i + 1;\n          return (\n            <Level\n              key={value}\n              isSelected={isSelected}\n              data-testid={`trl-${i + 1}`}\n              data-selected={isSelected}\n            >\n              <Label type=\"button\" onClick={() => handleLabelClick(i + 1)} asInput={asInput}>\n                {i + 1}. {value}\n              </Label>\n              <Tooltip\n                content={\n                  <>\n                    <b>Example: </b>\n                    <br />\n                    {TOOLTIP_EXAMPLES[i + 1]}\n                  </>\n                }\n                position=\"right\"\n                tooltipWidth=\"320px\"\n                arrowOffsetTop=\"calc(50% - 8px)\"\n              >\n                <Icon name=\"Info\" size=\"xs\" margin=\"0 0 0 6px\" color={COLORS.NEUTRAL_400} />\n              </Tooltip>\n            </Level>\n          );\n        })}\n      </Levels>\n    </Container>\n  );\n};\n\nexport default TRLs;\n\nconst Container = styled.div`\n  display: flex;\n  gap: 16px;\n  min-width: 410px;\n`;\nconst SliderContainer = styled.div`\n  display: flex;\n  align-items: ${({ asInput }) => (asInput ? \"center\" : \"flex-start\")};\n  position: relative;\n  height: 408px;\n  width: 24px;\n  .rc-slider {\n    height: 384px;\n    width: 6px;\n    padding: 0;\n    left: 9px;\n    cursor: pointer;\n    .rc-slider-rail {\n      width: 6px;\n      left: 0;\n      background-color: ${COLORS.NEUTRAL_200};\n    }\n    .rc-slider-track {\n      background-color: ${COLORS.HALO_BLUE};\n      width: 6px;\n      left: 0;\n    }\n    .rc-slider-step {\n      width: 6px;\n      .rc-slider-dot {\n        width: 6px;\n        height: 1px;\n        margin: 0;\n        border-radius: 0;\n        border: none;\n        background-color: ${COLORS.NEUTRAL_400};\n      }\n      .rc-slider-dot-active {\n        background-color: ${COLORS.NEUTRAL_200};\n      }\n    }\n    .rc-slider-handle {\n      display: flex;\n      justify-content: center;\n      align-items: center;\n      width: 24px;\n      height: 24px;\n      margin-left: -9px;\n      border: none;\n      box-shadow: ${STYLES.SHADOW_A};\n      background-color: ${COLORS.WHITE};\n      opacity: 1;\n    }\n  }\n`;\nconst SliderTrackBackground = styled.div`\n  position: absolute;\n  left: 9px;\n  width: 6px;\n  height: 100%;\n  background-color: ${COLORS.NEUTRAL_200};\n  border-radius: 3px;\n`;\nconst DotContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  justify-content: space-between;\n  position: relative;\n  top: 12px;\n  left: 9px;\n  height: calc(100% - 24px);\n  width: 9px;\n`;\nconst Dot = styled.div`\n  width: 6px;\n  height: 1px;\n  background-color: ${({ isActive }) => (isActive ? COLORS.NEUTRAL_200 : COLORS.NEUTRAL_400)};\n  z-index: 1;\n`;\nconst SelectedBar = styled.div`\n  position: relative;\n  top: ${({ trlRange }) => 48 * (trlRange[0] - 1)}px;\n  height: ${({ trlRange }) => 48 * (trlRange[1] - trlRange[0]) + 24}px;\n  width: 6px;\n  background-color: ${COLORS.HALO_BLUE};\n  border-radius: 3px;\n`;\nconst Levels = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 24px;\n`;\nconst Level = styled.div`\n  display: flex;\n  align-items: center;\n  ${FONTS.MEDIUM_2};\n  color: ${({ isSelected }) => (isSelected ? COLORS.BLACK : COLORS.NEUTRAL_400)};\n`;\nconst Label = styled.button`\n  padding: 0;\n  border: none;\n  background-color: transparent;\n  ${({ asInput }) => !asInput && \"pointer-events: none;\"}\n  :focus {\n    outline: none;\n  }\n`;\nconst sliderHandleIcon = (\n  <svg width=\"10\" height=\"8\" viewBox=\"0 0 10 8\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n    <path d=\"M10 1L-4.17233e-07 1\" stroke={COLORS.HALO_BLUE} strokeWidth=\"1.5\" />\n    <path d=\"M10 4L-4.17233e-07 4\" stroke={COLORS.HALO_BLUE} strokeWidth=\"1.5\" />\n    <path d=\"M10 7L-4.17233e-07 7\" stroke={COLORS.HALO_BLUE} strokeWidth=\"1.5\" />\n  </svg>\n);\n","import { Button } from \"@components/library\";\nimport { COLORS, FONTS } from \"@constants\";\nimport { Modal } from \"semantic-ui-react\";\nimport styled from \"styled-components\";\n\nconst ResendConfirmationModal = ({ confirmationModalOpen, setConfirmationModalOpen }) => {\n  return (\n    <ConfirmationModal\n      open={confirmationModalOpen}\n      onClose={() => setConfirmationModalOpen(false)}\n      size=\"tiny\"\n      closeOnDimmerClick={true}\n      className=\"scrolling\"\n    >\n      <ModalContent>\n        <h1>Your verification email has been resent.</h1>\n        <p>Please check your spam and quarantine folders in your email.</p>\n        <p>\n          If you continue to have problems, please{\" \"}\n          <a href=\"/contact\" target=\"_blank\">\n            contact us\n          </a>{\" \"}\n          for assistance.\n        </p>\n        <Button type=\"button\" onClick={() => setConfirmationModalOpen(false)}>\n          Close\n        </Button>\n      </ModalContent>\n    </ConfirmationModal>\n  );\n};\n\nconst ConfirmationModal = styled(Modal)`\n  overflow: visible;\n  color: ${COLORS.BLACK};\n  ${FONTS.REGULAR_2};\n`;\nconst ModalContent = styled(Modal.Content)`\n  h1 {\n    ${FONTS.HEADING_4_SEMIBOLD};\n    color: ${COLORS.BLACK};\n    border: none;\n    padding-bottom: 12px;\n  }\n  p {\n    ${FONTS.REGULAR_2};\n    color: ${COLORS.BLACK};\n    border: none;\n    padding-bottom: 8px;\n  }\n`;\n\nexport default ResendConfirmationModal;\n","import { useEffect, useState } from \"react\";\nimport ReactCodeInput from \"react-verification-code-input\";\nimport styled from \"styled-components\";\n\nimport toast from \"@components/Toast\";\nimport { Button, TextInput } from \"@components/library\";\nimport { COLORS, FEATURE_FLAGS, FONTS } from \"@constants\";\nimport { RootState } from \"@redux/store\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport { SegmentEventName } from \"@tsTypes/__generated__/enums\";\nimport { track } from \"@utils/appUtils\";\nimport { t, t_link } from \"@utils/i18n\";\nimport { toastErrorHandler } from \"@utils/requests\";\nimport { useSelector } from \"react-redux\";\nimport { TextInputError } from \"src/components/library/Inputs/TextInput\";\nimport { cancelSignUp, resendEmailInvite, signOut, verifyUser } from \"src/requests/users\";\nimport { StepContainer, StepHeader } from \"src/views/Onboarding/StepStyles\";\nimport ResendConfirmationModal from \"./ResendConfirmationModal\";\n\nfunction UserVerificationCode({ onContinue }) {\n  const currentUserEmail = useSelector((state: RootState) => state.profiles.currentUser.email);\n  const isTablet = useSelector((state: RootState) => state.window.isTablet);\n\n  const [isEmailInputVisible, setIsEmailInputVisible] = useState(false);\n  const [email, setEmail] = useState(currentUserEmail || \"\");\n\n  const [confirmationModalOpen, setConfirmationModalOpen] = useState(false);\n  const [code, setCode] = useState(\"\");\n  const [error, setError] = useState(false);\n  const [emailInputError, setEmailInputError] = useState<TextInputError | null>(null);\n\n  const verificationMutation = useMutation({\n    mutationFn: verifyUser,\n    onSuccess: (result) => {\n      if (result) {\n        onContinue();\n      } else {\n        setError(true);\n      }\n    },\n    onError: toastErrorHandler,\n  });\n\n  const resendVerificationMutation = useMutation({\n    mutationFn: resendEmailInvite,\n    onSuccess: () => {\n      toast.success(\"A new verification code has been sent to your email.\");\n      setIsEmailInputVisible(false);\n    },\n    onError: (err: any) => {\n      switch (err.response?.status) {\n        case 409:\n          toast.error(\n            t_link(\n              \"pages.onboarding_container.user_verification_code.error.email_taken\",\n              <span\n                style={{ textDecoration: \"underline\" }}\n                onClick={async () => {\n                  await cancelSignUp(\"resendEmailVerification409\");\n                  window.location.href = \"/login\";\n                }}\n              >\n                log in instead\n              </span>\n            )\n          );\n          return false;\n        case 429:\n          toast.error(\n            t(\"pages.onboarding_container.user_verification_code.error.too_many_requests\")\n          );\n          return false;\n      }\n      throw error;\n    },\n  });\n\n  useEffect(() => {\n    // Auto-verify when user enters 4 digits\n    if (code.length === 4 && !error) {\n      verificationMutation.mutate(code);\n    }\n  }, [code]);\n\n  const handleOnChange = (verificationCode: string) => {\n    if (verificationCode.length && error) setError(false);\n    setCode(verificationCode);\n  };\n\n  return (\n    <>\n      <ResendConfirmationModal\n        confirmationModalOpen={confirmationModalOpen}\n        setConfirmationModalOpen={setConfirmationModalOpen}\n      />\n      <StepContainer step={1} data-testid=\"onboarding-step1\" width=\"470px\">\n        <StepHeader subheading=\"Welcome to Halo\" heading=\"Please verify your email address.\" />\n        <StyledCodeInput\n          error={error}\n          required\n          type=\"number\"\n          fields={4}\n          fieldHeight={isTablet ? 100 : 121}\n          fieldWidth={isTablet ? 85 : 109}\n          placeholder={[\" \", \" \", \" \", \" \"]}\n          onChange={handleOnChange}\n          disabled={verificationMutation.isLoading}\n        />\n        <DropdownRow>\n          {error && (\n            <DropdownTitle style={{ color: COLORS.RED }}>\n              {t(\"pages.onboarding_container.user_verification_code.error.incorrect\")}\n            </DropdownTitle>\n          )}\n          <DropdownTitle>\n            {t(\"pages.onboarding_container.user_verification_code.instructions\")}{\" \"}\n            <ResendEmailLink onClick={() => setIsEmailInputVisible(true)}>\n              {t(\"pages.onboarding_container.user_verification_code.resend_email\")}\n            </ResendEmailLink>\n          </DropdownTitle>\n          {isEmailInputVisible && (\n            <EmailSection\n              onSubmit={(e) => {\n                e.preventDefault();\n                track(SegmentEventName.Submit, {\n                  react_component: \"UserVerificationCode\",\n                  action: \"Resend email verification\",\n                  currentUserEmail,\n                  sentToEmail: email,\n                });\n\n                if (email.trim() === \"\") {\n                  setEmailInputError({\n                    hasError: true,\n                    errorMessage: \"Please enter a valid email address.\",\n                  });\n                  return;\n                }\n                setEmailInputError(null);\n                resendVerificationMutation.mutate(email);\n              }}\n            >\n              <TextInput\n                type=\"email\"\n                value={email}\n                onChange={(e) => setEmail(e.target.value)}\n                errors={emailInputError ? [emailInputError] : undefined}\n              />\n              <Button\n                type=\"submit\"\n                variant=\"primary\"\n                size=\"sm\"\n                margin=\"12px 0 0\"\n                disabled={resendVerificationMutation.isLoading}\n              >\n                {t(\"pages.onboarding_container.user_verification_code.resend_code\")}\n              </Button>\n            </EmailSection>\n          )}\n          <Padding height={20} />\n          {FEATURE_FLAGS.SIGN_OUT_ON_ONBOARDING && (\n            <Button\n              type=\"button\"\n              variant=\"destructive-secondary\"\n              onClick={async () => {\n                await signOut();\n              }}\n              margin=\"0 16px 0 0\"\n            >\n              Sign Out\n            </Button>\n          )}\n        </DropdownRow>\n      </StepContainer>\n    </>\n  );\n}\n\nexport default UserVerificationCode;\n\nconst DropdownRow = styled.div`\n  width: 324px;\n  position: relative;\n  align-self: flex-start;\n  margin-bottom: 28px;\n\n  &:last-of-type {\n    margin-bottom: 35px;\n  }\n`;\n\nconst DropdownTitle = styled.div`\n  ${FONTS.MEDIUM_2};\n  width: 100%;\n  padding-bottom: 7px;\n  color: ${COLORS.BLACK};\n`;\n\n// Styles below overwrite library's default styles to match our design system\nconst StyledCodeInput = styled(ReactCodeInput)`\n  margin-bottom: 33px;\n  width: unset !important;\n  > div {\n    > input {\n      background: ${COLORS.NEUTRAL_100};\n      border: 0.5px solid ${COLORS.HALO_BLUE} !important;\n      border-radius: 4px;\n      color: ${COLORS.BLACK};\n      font-size: 32px;\n      caret-color: ${COLORS.BLACK} !important;\n    }\n    > input:focus {\n      border: 2px solid ${COLORS.HALO_BLUE} !important;\n    }\n    > input:not(:last-child) {\n      margin-right: 8px;\n    }\n    > input:focus + input {\n      border-left: 0.5px solid ${COLORS.HALO_BLUE};\n    }\n    > input:focus + input:not(:placeholder-shown) {\n      border-left: 0.5px solid ${COLORS.HALO_BLUE};\n    }\n    > input:last-child:focus,\n    input:not(:placeholder-shown) {\n      border-color: ${COLORS.HALO_BLUE};\n    }\n    > input {\n      border-color: ${(props) => props.error && COLORS.RED} !important;\n    }\n  }\n`;\n\nconst ResendEmailLink = styled.span`\n  ${FONTS.REGULAR_2};\n  text-align: left;\n  white-space: no-wrap;\n  color: ${COLORS.HALO_BLUE};\n  cursor: pointer;\n  :hover {\n    text-decoration: underline;\n  }\n`;\n\nconst Padding = styled.div`\n  height: ${(props) => (props.height ? `${props.height}px` : \"10px\")};\n  display: block;\n`;\n\nconst EmailSection = styled.form`\n  margin: 12px 0;\n`;\n","import { COLORS, FONTS, WINDOW_DIMENSIONS } from \"@constants\";\nimport styled from \"styled-components\";\nimport Icon from \"../Icon\";\n\ninterface Props {\n  value: string;\n  onChange: (value: string) => any;\n  onSubmit: (value: string) => any;\n  placeholder: string;\n  buttonText?: string | null;\n  shouldSubmitOnClear?: boolean;\n}\n\nexport const SearchBarInput = ({\n  value,\n  onChange,\n  onSubmit,\n  placeholder,\n  buttonText = \"Apply\",\n  shouldSubmitOnClear = true,\n}: Props) => {\n  return (\n    <Container\n      onSubmit={(e) => {\n        e.preventDefault();\n        onSubmit(value);\n      }}\n    >\n      <Icon name=\"Search\" color={COLORS.NEUTRAL_500} margin=\"0 4px 0 0\" />\n      <Input value={value} onChange={(e) => onChange(e.target.value)} placeholder={placeholder} />\n      <ClearContainer\n        onClick={() => {\n          onChange(\"\");\n          if (shouldSubmitOnClear) {\n            onSubmit(\"\");\n          }\n        }}\n      >\n        <Icon name=\"X\" color={COLORS.NEUTRAL_350} size=\"xs\" margin=\"0 6px 0 0\" />\n      </ClearContainer>\n      {Boolean(buttonText) && <Button type=\"submit\">{buttonText}</Button>}\n    </Container>\n  );\n};\n\nconst Container = styled.form`\n  display: flex;\n  align-items: center;\n  padding: 0 3px 0 6px;\n  height: 36px;\n  border: 1px solid ${COLORS.NEUTRAL_200};\n  border-radius: 6px;\n\n  &:focus-within {\n    border: 1px solid ${COLORS.HALO_BLUE};\n  }\n\n  &:hover {\n    cursor: pointer;\n    &:not(:focus-within) {\n      border: 1px solid ${COLORS.NEUTRAL_400};\n    }\n    &:focus-within {\n      border: 1px solid ${COLORS.HALO_BLUE};\n    }\n  }\n\n  ${WINDOW_DIMENSIONS.MOBILE_MEDIA_QUERY} {\n    height: 40px;\n  }\n`;\n\nconst Input = styled.input`\n  flex-grow: 1;\n  min-width: 0;\n  border: none;\n  outline: none;\n  color: ${COLORS.BLACK};\n  ${FONTS.TAG_MEDIUM_1};\n\n  &::placeholder {\n    opacity: 1;\n    color: ${COLORS.NEUTRAL_500};\n    ${FONTS.REGULAR_2};\n  }\n`;\n\nconst ClearContainer = styled.div`\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  height: 100%;\n  opacity: 0.7;\n  &:hover {\n    opacity: 1;\n  }\n`;\n\nconst Button = styled.button`\n  padding: 7px 14px;\n  background-color: ${COLORS.BLUE_LIGHT_300};\n  color: ${COLORS.HALO_BLUE};\n  border: none;\n  border-radius: 4px;\n  ${FONTS.BUTTON_3}\n\n  &:hover {\n    background-color: ${COLORS.BLUE_LIGHT_400};\n  }\n\n  &:active {\n    background-color: ${COLORS.BLUE_LIGHT_500};\n  }\n`;\n","import toast from \"@components/Toast\";\nimport { Button } from \"@components/library\";\nimport EmailDropdown from \"@components/library/Dropdowns/EmailDropdown\";\nimport BlankModal, { BlankModalProps } from \"@components/library/ModalBases/BlankModal\";\nimport { COLORS, FONTS } from \"@constants\";\nimport { fetchAllCompanyMembers } from \"@redux/actions/companyActions\";\nimport { RootState } from \"@redux/store\";\nimport { generateEmailDropdownOptions, getOptionFromValue } from \"@utils/dropdownUtils\";\nimport { SyntheticEvent, useEffect, useState } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport styled from \"styled-components\";\nimport { UserOption } from \"../Dropdowns/UserDropdown\";\n\nexport interface ShareWithinCompanyProps extends BlankModalProps {\n  toastText: string;\n  handleShare: (email: string, message: string) => Promise<any>; // throw on error\n}\n\nconst ShareWithinCompanyModal = ({\n  isOpen,\n  onClose,\n  headerText,\n  toastText,\n  handleShare,\n}: ShareWithinCompanyProps) => {\n  if (!isOpen) return null;\n\n  const dispatch = useDispatch();\n  const companyMembers = useSelector((state: RootState) => state.company.companyMembers);\n  const currentUser = useSelector((state: RootState) => state.profiles.currentUser);\n  const dropdownOptions: UserOption[] = generateEmailDropdownOptions(companyMembers, [\n    currentUser.email,\n  ]);\n\n  const [emails, setEmails] = useState<string[]>([]);\n  const [emailError, setEmailError] = useState(\"\");\n  const [message, setMessage] = useState<string>(\"\");\n  const [isSubmitting, setIsSubmitting] = useState<boolean>(false);\n\n  useEffect(() => {\n    dispatch(fetchAllCompanyMembers(currentUser.profile_info?.company_id));\n  }, []);\n\n  const handleSubmit = (e: SyntheticEvent) => {\n    e.preventDefault();\n    if (isSubmitting) return;\n    setIsSubmitting(true);\n    Promise.all(emails.map((email) => handleShare(email, message)))\n      .then(() => {\n        onClose();\n        toast.success(toastText);\n      })\n      .catch((err) => console.error(err))\n      .finally(() => setIsSubmitting(false));\n  };\n\n  return (\n    <BlankModal\n      isOpen={isOpen}\n      onClose={onClose}\n      closeOnDimmerClick={emails.length === 0 && message.length === 0}\n      headerText={headerText}\n      width=\"600px\"\n    >\n      <Content data-testid=\"share-within-company-modal\">\n        <form onSubmit={handleSubmit}>\n          <Label>Email Address(es)</Label>\n          <EmailDropdown\n            value={emails.map(getOptionFromValue) as any}\n            options={dropdownOptions}\n            onChange={setEmails}\n            setError={setEmailError}\n          />\n          <Error>{emailError}</Error>\n          <Label extraMarginTop>Message (Optional)</Label>\n          <TextArea\n            placeholder=\"Add a message\"\n            rows=\"4\"\n            value={message}\n            onChange={(e) => setMessage(e.target.value)}\n            data-testid=\"message-input\"\n          />\n          <SubmitButtonContainer>\n            <Button\n              type=\"submit\"\n              size={\"md\"}\n              iconName=\"Share\"\n              disabled={emails.length === 0 || Boolean(emailError) || isSubmitting}\n              data-testid=\"submit-button\"\n            >\n              Share\n            </Button>\n          </SubmitButtonContainer>\n        </form>\n      </Content>\n    </BlankModal>\n  );\n};\n\nexport default ShareWithinCompanyModal;\n\nconst Content = styled.div`\n  padding: 20px;\n`;\n\nconst Label = styled.label`\n  ${FONTS.SEMIBOLD_2}\n  margin-bottom: 10px;\n  ${(p) => p.extraMarginTop && \"margin-top: 30px;\"}\n`;\n\nconst Error = styled.div`\n  ${FONTS.REGULAR_2}\n  color: ${COLORS.RED};\n  margin-top: 5px;\n`;\n\nconst TextArea = styled.textarea`\n  ${FONTS.REGULAR_2}\n  width: 100%;\n  margin: auto;\n  padding: 10px;\n  border: 1px solid ${COLORS.NEUTRAL_300};\n  border-radius: 6px;\n  resize: none;\n\n  &::placeholder {\n    ${FONTS.REGULAR_2}\n    color: ${COLORS.NEUTRAL_500};\n  }\n`;\n\nconst SubmitButtonContainer = styled.div`\n  margin-top: 30px;\n`;\n","import DROPDOWN_STYLES from \"@components/library/Dropdowns/dropdownStyles\";\nimport { COLORS, FONTS, JS_FONTS } from \"@constants\";\nimport Select from \"react-select\";\nimport AsyncSelect from \"react-select/async\";\nimport CreatableSelect from \"react-select/creatable\";\nimport styled from \"styled-components\";\n\nconst SelectType = (props) => {\n  return props.creatable ? (\n    <CreatableSelect id=\"clearable-select\" {...props} />\n  ) : props.async ? (\n    <AsyncSelect id=\"async-select\" {...props} />\n  ) : (\n    <Select id=\"regular-select\" {...props} />\n  );\n};\n\nexport const DropdownContainer = styled.div`\n  width: ${({ width }) => width || \"100%\"};\n  ${({ containerStyles }) => `${containerStyles}`};\n  input {\n    box-shadow: none;\n  }\n  ${FONTS.REGULAR_2};\n`;\n\nexport const DropdownStyles = styled(SelectType)`\n  ${DROPDOWN_STYLES};\n\n  .Select__menu {\n    margin-top: 6px;\n  }\n  .Select__menu-list {\n    max-height: 250px;\n  }\n`;\n\nexport const TagContainer = styled.div`\n  width: fit-content;\n  background-color: ${COLORS.NEUTRAL_200};\n  border-radius: 6px;\n  margin: 2px;\n  box-sizing: border-box;\n  ${FONTS.REGULAR_3};\n  padding: 3px 6px 3px 6px;\n  white-space: nowrap;\n  display: flex;\n  min-width: 0;\n`;\n\nexport const CreatedTagContainer = styled(TagContainer)`\n  display: inline-block;\n  padding: none;\n`;\n\nexport const CreateLabel = styled.div`\n  ${FONTS.REGULAR_3};\n  padding-left: 3px;\n`;\n\nexport const menuHeaderStyle = styled.div`\n  padding: 8px 12px;\n  color: grey;\n`;\n\nexport const customStyles = {\n  option: (styles, { isFocused, isSelected }) => ({\n    ...styles,\n    backgroundColor: isFocused || isSelected ? COLORS.NEUTRAL_100 : \"transparent\",\n    border: isSelected ? `1px solid ${COLORS.HALO_BLUE}` : \"unset\",\n    borderRadius: isSelected ? `2px` : \"unset\",\n    \":hover\": {\n      backgroundColor: COLORS.NEUTRAL_100,\n    },\n    ...JS_FONTS.REGULAR_2,\n    color: COLORS.BLACK,\n    cursor: \"pointer\",\n  }),\n  control: (base) => ({\n    ...base,\n    ...JS_FONTS.REGULAR_2,\n    borderRadius: \"6px\",\n  }),\n  menu: (base) => ({\n    ...base,\n    ...JS_FONTS.REGULAR_2,\n    zIndex: 9999,\n    marginTop: \"2px\",\n    borderRadius: \"6px\",\n  }),\n  multiValue: (base) => ({\n    ...base,\n    backgroundColor: COLORS.NEUTRAL_100,\n    ...JS_FONTS.REGULAR_2,\n  }),\n  singleValue: (base) => ({\n    ...base,\n    ...JS_FONTS.REGULAR_2,\n  }),\n  placeholder: (base, { isFocused }) => ({\n    ...base,\n    display: isFocused ? \"none\" : \"block\",\n    color: COLORS.NEUTRAL_500,\n    ...JS_FONTS.REGULAR_2,\n  }),\n};\n","import Fuse from \"fuse.js\";\nimport PropTypes from \"prop-types\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { components } from \"react-select\";\nimport * as S from \"./Dropdown.styles\";\n\nconst TagOption = ({ children, ...props }) => {\n  // This is the best way I found to add different styles to a \"created\" tag\n  if (children.research_type?.includes(\"[New Tag]\")) {\n    return (\n      <components.Option {...props}>\n        <S.CreateLabel>\n          {\"Create \"}\n          <S.CreatedTagContainer>{children.research_type?.substring(9)}</S.CreatedTagContainer>\n        </S.CreateLabel>\n      </components.Option>\n    );\n  }\n  return (\n    <components.Option {...props}>\n      <S.TagContainer>{children.research_type || children}</S.TagContainer>\n    </components.Option>\n  );\n};\n\nconst fuzzySearch = (options, filter) => {\n  if (!(options instanceof Array)) {\n    options = [options];\n  }\n  if (filter.length === 0) {\n    return true;\n  }\n  const fuseOptions = {\n    threshold: 0.1,\n    distance: 0,\n    minMatchCharLength: 1,\n    keys: [\"label\"],\n  };\n  const fuse = new Fuse(options, fuseOptions);\n  return fuse.search(filter).length > 0;\n};\n\nconst MenuList = ({ children, ...props }) => {\n  const { creatable, isMulti } = { ...props };\n\n  const menuHeaderText =\n    props.menuHeaderText ??\n    (creatable ? \"Select an existing tag or create new\" : \"Select an existing tag\");\n\n  return <components.MenuList {...props}>{children}</components.MenuList>;\n};\n\nconst CustomDropdownIndicator = (icon) => (props) => {\n  return <components.DropdownIndicator {...props}>{icon}</components.DropdownIndicator>;\n};\n\nconst CustomNoOptionsMessage = (customNoOptionMessage) => (props) => {\n  return (\n    <components.NoOptionsMessage {...props}>{customNoOptionMessage}</components.NoOptionsMessage>\n  );\n};\n\nconst Dropdown = (props) => {\n  const {\n    menuHeaderText,\n    components,\n    creatable,\n    isMulti,\n    fuzzy,\n    options,\n    maxOptions,\n    onChange,\n    value,\n    icon,\n    isLoading,\n    styles,\n    selectStyles,\n    customNoOptionMessage,\n    placeholder,\n    menuIsOpen,\n    closeMenuOnSelect,\n  } = props;\n\n  const [selectedValue, setSelectedValue] = useState(value ?? []);\n  const [isMenuOpen, setIsMenuOpen] = useState(menuIsOpen);\n\n  const selectedValueRef = useRef(selectedValue);\n\n  const tagLimitReached = selectedValue?.length >= maxOptions;\n\n  useEffect(() => {\n    const val = value?.value || value;\n    setSelectedValue(Array.isArray(val) ? val : [val]);\n  }, [value]);\n\n  useEffect(() => {\n    if (isMulti && selectedValueRef.current?.length === maxOptions) {\n      setIsMenuOpen(false);\n    } else {\n      setIsMenuOpen(menuIsOpen);\n    }\n\n    selectedValueRef.current = selectedValue;\n  }, [selectedValue]);\n\n  const handleChange = (onChange) => (e, sel) => {\n    const val = e ? (Array.isArray(e) ? e.map((x) => x.value ?? x) : e ? [e] : []) : [];\n    setSelectedValue(val);\n    if (typeof onChange === \"function\") {\n      onChange(e, sel);\n    }\n  };\n\n  const placeholderText = placeholder\n    ? placeholder\n    : creatable\n    ? \"Select an existing tag or create new\"\n    : \"Select an existing tag\";\n\n  return (\n    <S.DropdownContainer {...props}>\n      <S.DropdownStyles\n        // note changing classNamePrefix will affect some of the default styles\n        className={\"Select\"}\n        classNamePrefix={\"Select\"}\n        // filterOption={fuzzy ? fuzzySearch : undefined}\n        placeholder={placeholderText}\n        formatCreateLabel={\n          isMulti\n            ? (inputValue) => `[New Tag]${inputValue}`\n            : (inputValue) => `Create: ${inputValue}`\n        }\n        closeMenuOnSelect={!isMulti ? true : closeMenuOnSelect}\n        components={{\n          IndicatorSeparator: () => null,\n          ...(isMulti && { Option: TagOption }),\n          ...(icon && { DropdownIndicator: CustomDropdownIndicator(icon) }),\n          ...(isLoading && { DropdownIndicator: () => null }),\n          ...(customNoOptionMessage && {\n            NoOptionsMessage: CustomNoOptionsMessage(customNoOptionMessage),\n          }),\n          ...(tagLimitReached && {\n            NoOptionsMessage: () => null,\n          }),\n          MenuList: (selectProps) => (\n            <MenuList\n              creatable={creatable}\n              menuHeaderText={\n                tagLimitReached ? \"Max number of tags selected\" : menuHeaderText ?? undefined\n              }\n              {...selectProps}\n            />\n          ),\n          ...components,\n        }}\n        menuIsOpen={isMulti ? isMenuOpen : menuIsOpen}\n        {...props}\n        styles={{\n          ...S.customStyles,\n          ...styles,\n          ...selectStyles,\n        }}\n        // the mapping changes 'text' to 'label' to avoid doing this everywhere the component is used\n        options={tagLimitReached ? [] : options?.map((elem) => ({ label: elem.text, ...elem }))}\n        onChange={handleChange(onChange)}\n        value={\n          value\n            ? isMulti\n              ? options\n                  ?.map((elem) => ({ label: elem.text, ...elem }))\n                  .filter((option) => selectedValue.includes(option?.value))\n              : options\n                  ?.map((elem) => ({ label: elem.text, ...elem }))\n                  .filter((option) => String(selectedValue) === option?.value)?.[0]\n            : undefined\n        }\n      />\n    </S.DropdownContainer>\n  );\n};\n\nDropdown.propTypes = {\n  /** Support multiple selected options */\n  isMulti: PropTypes.bool,\n  /** Support creation of new option. Use CreatableSelect instead of Select*/\n  creatable: PropTypes.bool,\n  /** Use AsyncSelect instead of Select. Note that you don't _have to_ use async component if you just update the options passed asyncronously.*/\n  async: PropTypes.bool,\n  /** Support the fuzzy search. You can customize this with the `filterOption` prop.*/\n  fuzzy: PropTypes.bool,\n  /** Close the select menu when the user selects an option. By default false for isMulti, and true otherwise.*/\n  closeMenuOnSelect: PropTypes.bool,\n  /** Array of options that populate the select menu e.g. `{ label: '', value: '' }` if you use `text` instead of `label` it is changed to `label` internally*/\n  options: PropTypes.array,\n  /** Placeholder for the select value */\n  placeholder: PropTypes.string,\n  /** Text that goes at the menu header, which is above all the options but inside the dropdown.*/\n  menuHeaderText: PropTypes.string,\n  /** Maximum number of options that can be selected (if it is a multi select)*/\n  maxOptions: PropTypes.number,\n  /** Default placement of the menu in relation to the control. 'auto' will flip when there isn't enough space below the control. One of `\"auto\"`, `\"bottom\"`, `\"top\"`.*/\n  menuPlacement: PropTypes.oneOf([\"auto\", \"bottom\", \"top\"]),\n  /** Number of options to jump in menu when page{up|down} keys are used e.g. `number = 5` */\n  pageSize: PropTypes.number,\n  /** The value of the component. If multi, it should be an array. This value should correspond to one or more of the values of the options.*/\n  value: PropTypes.any,\n  /** Will cause the select to be displayed in the loading state, even if the Async select is not currently waiting for loadOptions to resolve*/\n  isLoading: PropTypes.bool,\n  /** Disables default icon styling*/\n  disableIconColor: PropTypes.bool,\n  /** Applies styles to the dropdown. This is the prefered way to style it. (see https://react-select.com/styles). Note that styles in DropdownStyles will have priority over these changes. */\n  selectStyles: PropTypes.object,\n  /** Whether the menu is open*/\n  menuIsOpen: PropTypes.bool,\n  /**\n   * The `onChange` function will be passed an event or a value, action pair. e is an event when the user is typing into the Dropdown component. On actions such as clear, delete, or selection of a tag, e will be the value in the dropdown and action will be a string describing the action. For single selections, e is just the `value` of the corresponding `option` while in multi-select (with `isMulti`) dropdowns it will be an array of values.\n   *\n   * Example of an onChange function that handles asynchronous loading.\n   * ```\n   * (e, action) => {\n   *   if (e.target) { // check if this is an event\n   *    this.asyncAction(e.target.value) // async action you will do\n   *   } else { // if it's not an event, e has the value of the dropdown\n   *     this.setState({\n   *      localValue: e.value,\n   *     });\n   *   }\n   * }\n   * ```\n   */\n  onChange: PropTypes.func,\n  /** Applies error border style */\n  errorColor: PropTypes.bool,\n  /** Default halo styles */\n  defaultShadow: PropTypes.bool,\n  /** Instead of the default \"No Options\" have an alternative message for when no options are present */\n  customNoOptionMessage: PropTypes.string,\n  /** Set width. Can be any valid css value. */\n  width: PropTypes.string,\n  /** Styles to apply to the containing div. This is the best way to apply things like padding. */\n  containerStyles: PropTypes.string,\n};\n\nDropdown.defaultProps = {\n  isMulti: false,\n  creatable: false,\n  async: false,\n  fuzzy: true,\n  menuPlacement: \"auto\",\n  disableIconColor: false,\n  errorColor: false,\n};\n\nexport default Dropdown;\n","import { BlankModal, Icon } from \"@components/library\";\nimport Button from \"@components/library/Buttons/Button\";\nimport { BlankModalProps } from \"@components/library/ModalBases/BlankModal\";\nimport { COLORS, FONTS, WINDOW_DIMENSIONS } from \"@constants\";\nimport styled from \"styled-components\";\n\nconst FuelModal = ({ isOpen, onClose }: BlankModalProps) => {\n  return (\n    <BlankModal onClose={onClose} isOpen={isOpen} width=\"419px\">\n      <Top data-testid=\"fuel-modal\">\n        <Icon name=\"Lock\" size=\"lg\" />\n        <Header>\n          Only FUEL members can <br />\n          respond to this request.\n        </Header>\n        <InfoText>\n          Future Use of Energy in Louisiana (FUEL) is a coalition of organizations focused on\n          positioning Louisiana as a global energy transition leader. Interested in joining FUEL?\n        </InfoText>\n        <Button\n          size=\"md\"\n          iconName=\"Open in a new tab\"\n          iconPosition=\"right\"\n          margin=\"8px 0 0\"\n          to=\"https://fuelouisiana.org/\"\n          openInNewTab\n          isExternalLink\n        >\n          Learn more about FUEL\n        </Button>\n      </Top>\n      <Bottom>\n        Already part of FUEL? <a href=\"mailto:info@fuelouisiana.org\">Contact FUEL for support</a>\n      </Bottom>\n    </BlankModal>\n  );\n};\n\nexport default FuelModal;\n\nconst { MOBILE_MEDIA_QUERY } = WINDOW_DIMENSIONS;\n\nconst Header = styled.h3`\n  color: ${COLORS.BLACK};\n  ${FONTS.HEADING_5_REGULAR};\n  margin: 4px 0px 0px 0px;\n`;\n\nconst InfoText = styled.p`\n  color: ${COLORS.NEUTRAL_500};\n  ${FONTS.REGULAR_2};\n  text-align: center;\n  margin: 16px 0;\n`;\n\nconst Top = styled.div`\n  text-align: center;\n\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  align-items: center;\n\n  padding: 48px;\n`;\n\nconst Bottom = styled.div`\n  width: 100%;\n\n  display: flex;\n  justify-content: center;\n  flex-direction: column;\n\n  border-top: 1px solid ${COLORS.NEUTRAL_300};\n\n  padding: 24px 48px;\n\n  text-align: center;\n  display: inline-block;\n  ${FONTS.MEDIUM_2}\n\n  ${MOBILE_MEDIA_QUERY} {\n    margin-top: 15px;\n    width: 100%;\n    color: ${COLORS.NEUTRAL_500};\n    ${FONTS.SEMIBOLD_1}\n    text-align: left;\n  }\n`;\n","import LoginModal from \"@components/LoginSignUpModal/LoginModal\";\nimport toast from \"@components/Toast\";\nimport { Button, KeywordsDropdown } from \"@components/library\";\nimport { COLORS, FONTS, STYLES, WINDOW_DIMENSIONS } from \"@constants\";\nimport haloLogo from \"@images/logos/halo_logo.svg\";\nimport { setCurrentUser } from \"@redux/actions/profileActions\";\nimport { RootState } from \"@redux/store\";\nimport { skipUpdateUserKeywords, updateUserKeywords } from \"@requests/users\";\nimport { profile_page_path } from \"@routes/routes\";\nimport { marketplacePath } from \"@routes/utils\";\nimport { SegmentEventName } from \"@tsTypes/__generated__/enums\";\nimport { UserRole } from \"@tsTypes/users\";\nimport { track } from \"@utils/appUtils\";\nimport appsignal from \"@utils/appsignal\";\nimport { setPrevUrlCookie } from \"@utils/authUtils\";\nimport { t } from \"@utils/i18n\";\nimport { useEffect, useState } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { Link, useHistory } from \"react-router-dom\";\nimport { USER_ROLES } from \"src/constants/users\";\nimport styled from \"styled-components\";\n\ninterface Props {\n  onSubmit?: () => void;\n}\n\nconst KeywordSignUpModal = (props: Props) => {\n  const currentUser = useSelector((state: RootState) => state.profiles.currentUser);\n  const dispatch = useDispatch();\n  const history = useHistory();\n\n  const [modalState, setModalState] = useState<\"login\" | \"keywords\">(\"login\");\n\n  const [isSubmitting, setIsSubmitting] = useState(false);\n\n  const [disciplines, setDisciplines] = useState<string[]>(currentUser.disciplines);\n  const [areasOfExpertise, setAreasOfExpertise] = useState<string[]>(\n    currentUser.areas_of_expertise\n  );\n\n  const handleSubmit = async (e) => {\n    e.preventDefault();\n\n    track(SegmentEventName.Click, {\n      ui_component: \"Add to Profile\",\n      react_component: \"KeywordSignUp\",\n    });\n\n    setIsSubmitting(true);\n\n    let response: any;\n    try {\n      response = await updateUserKeywords(currentUser.id, {\n        disciplines,\n        areasOfExpertise,\n      });\n      setIsSubmitting(false);\n    } catch (err) {\n      appsignal.sendError(err, (span) => {\n        span.setAction(\"KeywordSignUp#handleSubmit\");\n        span.setTags({\n          currentUserId: currentUser.id,\n        });\n      });\n    }\n\n    if (response?.data?.success) {\n      dispatch(\n        setCurrentUser({\n          ...currentUser,\n          disciplines,\n          areas_of_expertise: areasOfExpertise,\n          has_updated_taxonomy: true,\n        })\n      );\n\n      if (currentUser.role === USER_ROLES.scientist) {\n        history.push(profile_page_path(currentUser.profile_id));\n      } else {\n        history.push(\"/\");\n      }\n\n      props.onSubmit?.();\n    }\n  };\n\n  const onSkip = () => {\n    track(SegmentEventName.Click, {\n      ui_component: \"Skip\",\n      react_component: \"KeywordSignUp\",\n    });\n\n    try {\n      skipUpdateUserKeywords(currentUser.id);\n    } catch (err) {\n      console.error(err);\n    }\n\n    history.push(marketplacePath());\n\n    toast.success(\n      <p>\n        {t(\"pages.keyword_sign_up.toast.text\")}\n        <Link\n          to={`/profile/${currentUser.first_name}-${currentUser.last_name}-${currentUser.id}`}\n          style={{ textDecoration: \"underline\", color: \"white\" }}\n        >\n          {t(\"pages.keyword_sign_up.toast.link\")}\n        </Link>\n      </p>\n    );\n  };\n\n  useEffect(() => {\n    if (currentUser.id) {\n      if (currentUser.role === USER_ROLES.sponsor) {\n        history.push(\"/reviewer_dashboard\");\n        return;\n      }\n\n      setModalState(\"keywords\");\n    } else if (modalState === \"login\") {\n      setPrevUrlCookie();\n    }\n  }, [currentUser.id]);\n\n  if (modalState === \"keywords\") {\n    return (\n      <Modal>\n        <Top>\n          <Logo>\n            <Link to=\"/\">\n              <img src={haloLogo} />\n            </Link>\n          </Logo>\n          <Header>\n            {currentUser.role === UserRole.SCIENTIST\n              ? t(\"pages.keyword_sign_up.header.scientist\")\n              : t(\"pages.keyword_sign_up.header.admin\")}\n          </Header>\n          <Form onSubmit={handleSubmit}>\n            <SingleInputContainer>\n              <Title>\n                {t([\n                  \"pages.keyword_sign_up.disciplines_label\",\n                  currentUser.role === UserRole.SCIENTIST ? \"scientist\" : \"university_admin\",\n                ])}\n              </Title>\n              <KeywordsDropdown\n                keywordType=\"discipline\"\n                targetType={\n                  currentUser.role === UserRole.SCIENTIST ? \"scientist\" : \"university_admin\"\n                }\n                value={disciplines}\n                onChange={setDisciplines}\n                isPortal\n              />\n            </SingleInputContainer>\n            {currentUser.role === USER_ROLES.scientist && (\n              <SingleInputContainer>\n                <Title>{t(\"pages.keyword_sign_up.expertise_label\")}</Title>\n                <KeywordsDropdown\n                  keywordType=\"area_of_expertise\"\n                  targetType=\"scientist\"\n                  value={areasOfExpertise}\n                  onChange={setAreasOfExpertise}\n                  isPortal\n                />\n              </SingleInputContainer>\n            )}\n          </Form>\n        </Top>\n        <Bottom>\n          <ButtonContainer>\n            <Button\n              size=\"md\"\n              type=\"submit\"\n              variant=\"ghost\"\n              disabled={isSubmitting}\n              onClick={onSkip}\n              data-testid=\"keyword-signup-skip-button\"\n            >\n              {t(\"pages.keyword_sign_up.skip\")}\n            </Button>\n            <Button\n              size=\"md\"\n              type=\"submit\"\n              disabled={isSubmitting}\n              onClick={handleSubmit}\n              data-testid=\"keyword-signup-add-to-profile-button\"\n            >\n              {t(\"pages.keyword_sign_up.primary_button\")}\n            </Button>\n          </ButtonContainer>\n        </Bottom>\n      </Modal>\n    );\n  }\n\n  return (\n    <LoginModal\n      header={\n        <Logo margin=\"12px auto 0\">\n          <Link to=\"/\">\n            <img src={haloLogo} />\n          </Link>\n        </Logo>\n      }\n      title={<SignInTitle>{t(\"pages.keyword_sign_up.sign_in_title\")}</SignInTitle>}\n      bottom={\n        <>\n          Don&rsquo;t have an account?&nbsp;\n          <SignUp to=\"/get-started\">Sign up</SignUp>\n        </>\n      }\n    />\n  );\n};\n\nconst { TABLET_MEDIA_QUERY, MOBILE_MEDIA_QUERY } = WINDOW_DIMENSIONS;\n\nconst Modal = styled.div`\n  border-radius: 16px;\n\n  background-color: ${COLORS.WHITE};\n  box-shadow: ${STYLES.SHADOW_D};\n\n  ${TABLET_MEDIA_QUERY} {\n    max-width: 95%;\n    width: unset;\n  }\n\n  ${MOBILE_MEDIA_QUERY} {\n    max-width: 100%;\n    height: 100%;\n    border-radius: 0;\n  }\n`;\n\nconst Logo = styled.div`\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  gap: 16px;\n\n  width: 100%;\n\n  text-align: center;\n`;\n\nconst Header = styled.div`\n  margin: 40px auto;\n\n  ${FONTS.HEADING_5_REGULAR}\n\n  text-align: center;\n\n  max-width: 400px;\n\n  ${MOBILE_MEDIA_QUERY} {\n    ${FONTS.HEADING_4_SEMIBOLD}\n  }\n`;\n\nconst SignInTitle = styled.div`\n  ${FONTS.HEADING_5_REGULAR}\n\n  width: 400px;\n\n  text-align: center;\n\n  ${MOBILE_MEDIA_QUERY} {\n    max-width: 100%;\n  }\n`;\n\nconst Form = styled.form`\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: 48px;\n`;\n\nconst Top = styled.div`\n  display: flex;\n  justify-content: center;\n  flex-direction: column;\n\n  padding: 48px;\n\n  ${TABLET_MEDIA_QUERY} {\n    padding: 40px 24px;\n  }\n`;\n\nconst Bottom = styled.div`\n  display: inline-block;\n  justify-content: center;\n  flex-direction: column;\n\n  width: 100%;\n  padding: 16px;\n\n  border-top: 1px solid ${COLORS.NEUTRAL_300};\n\n  ${FONTS.SEMIBOLD_2}\n  text-align: center;\n\n  ${MOBILE_MEDIA_QUERY} {\n    width: 100%;\n    margin-top: 15px;\n\n    color: ${COLORS.NEUTRAL_500};\n\n    ${FONTS.SEMIBOLD_1}\n    text-align: left;\n  }\n`;\n\nconst SignUp = styled(Link)`\n  color: ${COLORS.BLACK};\n\n  text-decoration: underline;\n  ${FONTS.REGULAR_2}\n\n  cursor: pointer;\n\n  ${MOBILE_MEDIA_QUERY} {\n    display: flex;\n    justify-content: center;\n    align-items: center;\n\n    height: 48px;\n    margin-top: 12px;\n\n    border-radius: 3px;\n    border-style: solid;\n    border-width: 2px;\n\n    color: ${COLORS.HALO_BLUE};\n    ${FONTS.SEMIBOLD_1}\n\n    text-decoration: none;\n  }\n`;\n\nconst SingleInputContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n\n  width: 100%;\n`;\n\nconst Title = styled.label`\n  display: flex;\n  flex-direction: column;\n\n  width: 100%;\n\n  ${FONTS.SEMIBOLD_2};\n\n  margin-bottom: 0px;\n`;\n\nconst ButtonContainer = styled.div`\n  display: flex;\n  justify-content: flex-end;\n  gap: 4px;\n\n  width: 100%;\n`;\n\nexport default KeywordSignUpModal;\n","import { Button } from \"@components/library\";\nimport { AttachmentForDisplay } from \"@components/library/Attachments/MessageAttachment\";\nimport { COLORS, FONTS } from \"@constants\";\nimport { RequestAttachmentPartial } from \"@tsTypes/request_attachments/_request_attachment\";\nimport { stopPropagation } from \"@utils/appUtils\";\nimport { useMemo, useState } from \"react\";\nimport { Document, Page } from \"react-pdf/dist/esm/entry.webpack5\";\nimport { Loader } from \"semantic-ui-react\";\nimport styled from \"styled-components\";\n\ninterface Props {\n  attachments: (AttachmentForDisplay | RequestAttachmentPartial)[];\n  focusedAttachmentId: number | undefined;\n}\n\ninterface LoadState {\n  [attachmentId: number]: {\n    isLoading: boolean;\n    hasError: boolean;\n    numPdfPages?: number;\n  };\n}\n\nconst INITIAL_LOAD_STATE = {\n  isLoading: true,\n  hasError: false,\n  numPdfPages: 0,\n};\n\n/**\n * Handles display of attachments within the message attachment gallery.\n * Loads all previews concurrently in the background but only displays the focused one.\n *\n * TODO:\n * - Add support for zoom\n */\nconst MessageAttachmentGalleryPreview = ({ attachments, focusedAttachmentId }: Props) => {\n  // Prioritize the first focused attachment to load first\n  const prioritizedAttachments = useMemo<AttachmentForDisplay[]>(() => {\n    const focusedIndex = attachments.findIndex(\n      (attachment) => attachment.id === focusedAttachmentId\n    );\n    return [...attachments.slice(focusedIndex), ...attachments.slice(0, focusedIndex)];\n  }, [attachments]);\n\n  const [loadStates, setLoadStates] = useState<LoadState>(() => {\n    const newLoadStates = {};\n    attachments.forEach((attachment) => {\n      newLoadStates[attachment.id!] = INITIAL_LOAD_STATE;\n    });\n    return newLoadStates;\n  });\n\n  // Set given image attachment as loaded\n  const handleImageLoad = (attachmentId: number) => {\n    setLoadStates((oldLoadStates) => ({\n      ...oldLoadStates,\n      [attachmentId]: {\n        isLoading: false,\n        hasError: false,\n      },\n    }));\n  };\n\n  // Set given image attachment number of pages\n  const handlePdfLoad = ({ numPages }: { numPages: number }, attachmentId: number) => {\n    setLoadStates((oldLoadStates) => ({\n      ...oldLoadStates,\n      [attachmentId]: {\n        isLoading: false,\n        hasError: false,\n        numPdfPages: numPages,\n      },\n    }));\n  };\n\n  const handleError = (attachmentId: number) => {\n    setLoadStates((oldLoadStates) => ({\n      ...oldLoadStates,\n      [attachmentId]: {\n        isLoading: false,\n        hasError: true,\n        numPdfPages: 0,\n      },\n    }));\n  };\n\n  console.log(prioritizedAttachments);\n\n  // Render all attachments but only show the focused attachment\n  return (\n    <>\n      {prioritizedAttachments.map((attachment) => {\n        const { id, mime_content_type, download_url } = attachment;\n        const url = \"url\" in attachment ? attachment.url : attachment.file_url;\n        const isImage = mime_content_type?.startsWith(\"image/\");\n        const { isLoading, hasError, numPdfPages } = loadStates[id!];\n\n        return (\n          <Container key={`attachment-preview-${id}`} active={id === focusedAttachmentId}>\n            {(() => {\n              if (hasError) {\n                return (\n                  <Error>\n                    We can&rsquo;t preview this file at the moment.\n                    <br />\n                    <a href={download_url} download>\n                      <Button iconName=\"Download\" margin=\"20px 0\">\n                        Download file\n                      </Button>\n                    </a>\n                  </Error>\n                );\n              }\n              if (isImage) {\n                return (\n                  <Image.Container>\n                    <Loader active={isLoading} size=\"big\" inverted />\n                    <Image.Content\n                      src={url}\n                      active={!isLoading}\n                      onError={() => handleError(id!)}\n                      onLoad={() => handleImageLoad(id!)}\n                      onClick={stopPropagation}\n                    />\n                  </Image.Container>\n                );\n              }\n              // is PDF\n              return (\n                <Pdf.Container>\n                  <div onClick={stopPropagation}>\n                    <Document\n                      file={url}\n                      loading={\n                        <Loader\n                          style={{ marginTop: \"35vh\" }}\n                          active\n                          size=\"big\"\n                          inverted\n                          inline=\"centered\"\n                        />\n                      }\n                      onLoadError={() => handleError(id!)}\n                      onLoadSuccess={(pdf) => handlePdfLoad(pdf, id!)}\n                    >\n                      {!isLoading &&\n                        Array.from(new Array(numPdfPages), (_, i) => (\n                          <Page\n                            loading=\"\"\n                            pageNumber={i + 1}\n                            key={`attachment-pdf-${id}-page-${i + 1}`}\n                            renderAnnotationLayer={false}\n                            renderTextLayer={false}\n                            onLoadError={() => handleError(id!)}\n                          />\n                        ))}\n                    </Document>\n                  </div>\n                </Pdf.Container>\n              );\n            })()}\n          </Container>\n        );\n      })}\n    </>\n  );\n};\n\nexport default MessageAttachmentGalleryPreview;\n\nconst Container = styled.div`\n  margin: 13px 0;\n  height: 0;\n\n  display: flex;\n  flex: 0 0 85%;\n  justify-content: space-around;\n  align-items: center;\n  gap: 30px;\n\n  ${({ active }) => !active && \"display: none;\"}\n`;\n\nconst Error = styled.div`\n  display: block;\n\n  ${FONTS.REGULAR_1}\n  color: ${COLORS.WHITE};\n  text-align: center;\n`;\n\nconst Image = {\n  Container: styled.div`\n    height: 100%;\n\n    flex-grow: 1;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n  `,\n  Content: styled.img`\n    max-width: 95%;\n    max-height: 100%;\n\n    object-fit: contain;\n\n    ${({ active }) => !active && \"display: none;\"}\n  `,\n};\n\nconst Pdf = {\n  Container: styled.div`\n    max-width: 95%;\n    max-height: 100%;\n\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n  `,\n};\n","import { Dispatch, MouseEvent, SetStateAction, useEffect } from \"react\";\nimport ReactDOM from \"react-dom\";\nimport styled from \"styled-components\";\n\nimport { Icon, IconButton, Tooltip } from \"@components/library\";\nimport { AttachmentForDisplay } from \"@components/library/Attachments/MessageAttachment\";\nimport { COLORS, FONTS, STYLES } from \"@constants\";\nimport { RequestAttachmentPartial } from \"@tsTypes/request_attachments/_request_attachment\";\nimport { stopPropagation } from \"@utils/appUtils\";\nimport { formatBytes, formatMIMEContentType } from \"@utils/textUtils\";\nimport MessageAttachmentGalleryPreview from \"./MessageAttachmentGalleryPreview\";\n\ninterface Props {\n  attachments: (AttachmentForDisplay | RequestAttachmentPartial)[];\n  focusedAttachmentIndex: number | undefined;\n  setFocusedAttachmentIndex: Dispatch<SetStateAction<number | undefined>>;\n  closeGallery: () => void;\n}\n\nconst MessageAttachmentGalleryModal = ({\n  attachments,\n  focusedAttachmentIndex,\n  setFocusedAttachmentIndex,\n  closeGallery,\n}: Props) => {\n  const isOpen = attachments.length > 0 && typeof focusedAttachmentIndex !== \"undefined\";\n\n  const onKeyDown = (event: KeyboardEvent) => {\n    switch (event.code) {\n      case \"Escape\":\n        closeGallery();\n        break;\n      case \"ArrowLeft\":\n        setFocusedAttachmentIndex((oldIndex) => Math.max(0, oldIndex! - 1));\n        break;\n      case \"ArrowRight\":\n        setFocusedAttachmentIndex((oldIndex) => Math.min(attachments.length - 1, oldIndex! + 1));\n        break;\n    }\n  };\n\n  useEffect(() => {\n    if (isOpen) {\n      // Close on Escape\n      document.addEventListener(\"keydown\", onKeyDown, false);\n      // Disable background scroll\n      document.querySelector(\"html\")!.style.overflow = \"hidden\";\n    }\n\n    return () => {\n      document.removeEventListener(\"keydown\", onKeyDown, false);\n      document.querySelector(\"html\")!.style.overflow = \"unset\";\n    };\n  }, [isOpen]);\n\n  if (!isOpen) return null;\n\n  const focusedAttachment = attachments[focusedAttachmentIndex];\n\n  const handleArrowClick = (event: MouseEvent, increment: -1 | 1) => {\n    event.stopPropagation();\n    setFocusedAttachmentIndex(focusedAttachmentIndex + increment);\n  };\n\n  const handleThumbnailClick = (event: MouseEvent, newFocusedIndex: number) => {\n    event.stopPropagation();\n    setFocusedAttachmentIndex(newFocusedIndex);\n  };\n\n  const { mime_content_type, size_in_bytes, download_url } = focusedAttachment;\n  const name = \"title\" in focusedAttachment ? focusedAttachment.title : focusedAttachment.filename;\n  const isImage = mime_content_type?.startsWith(\"image/\");\n\n  const modal = (\n    <>\n      <Background\n        aria-modal\n        aria-labelledby=\"Message Attachment Gallery\"\n        tabIndex={-1}\n        role=\"dialog\"\n      />\n      <Wrapper>\n        <Content onClick={closeGallery} data-testid=\"message-attachment-gallery\">\n          <Header.Background onClick={stopPropagation}>\n            <Header.Container>\n              <Header.Metadata.Container>\n                <Header.Metadata.Name>{name}</Header.Metadata.Name>\n                <Header.Metadata.Info>\n                  {formatMIMEContentType(mime_content_type)} &bull; {formatBytes(size_in_bytes)}\n                </Header.Metadata.Info>\n              </Header.Metadata.Container>\n              <Header.Buttons>\n                <a href={download_url} download>\n                  <IconButton\n                    iconName=\"Download\"\n                    variant=\"ghost-white\"\n                    size=\"md\"\n                    tooltipPosition=\"bottom\"\n                  />\n                </a>\n                <IconButton\n                  iconName=\"Close\"\n                  variant=\"ghost-white\"\n                  size=\"md\"\n                  tooltipPosition=\"bottom\"\n                  onClick={closeGallery}\n                  data-testid=\"close-button\"\n                />\n              </Header.Buttons>\n            </Header.Container>\n          </Header.Background>\n          <Arrow\n            position=\"left\"\n            disabled={focusedAttachmentIndex === 0}\n            onClick={(event: MouseEvent) => handleArrowClick(event, -1)}\n          >\n            <Icon name=\"Chevron Left\" size=\"lg\" />\n          </Arrow>\n          <Arrow\n            position=\"right\"\n            disabled={focusedAttachmentIndex === attachments.length - 1}\n            onClick={(event: MouseEvent) => handleArrowClick(event, 1)}\n          >\n            <Icon name=\"Chevron Right\" size=\"lg\" />\n          </Arrow>\n          <MessageAttachmentGalleryPreview\n            attachments={attachments}\n            focusedAttachmentId={focusedAttachment.id}\n          />\n          {attachments.length > 1 && (\n            <Thumbnail.Island isImage={isImage} onClick={stopPropagation}>\n              {attachments.map((attachment, index) => (\n                <Tooltip\n                  key={`gallery-attachment-${attachment.id}-thumbnail`}\n                  content={\"title\" in attachment ? attachment.title : attachment.filename}\n                  position=\"top\"\n                  remainOnHover={false}\n                  shouldWrap={false}\n                >\n                  <Thumbnail.Img\n                    src={attachment.thumbnail_url}\n                    focused={index === focusedAttachmentIndex}\n                    onClick={(event: MouseEvent) => handleThumbnailClick(event, index)}\n                  />\n                </Tooltip>\n              ))}\n            </Thumbnail.Island>\n          )}\n        </Content>\n      </Wrapper>\n    </>\n  );\n\n  return isOpen ? ReactDOM.createPortal(modal, document.body) : null;\n};\n\nexport default MessageAttachmentGalleryModal;\n\nconst Background = styled.div`\n  z-index: 501;\n\n  position: fixed;\n  width: 100%;\n  height: 100%;\n  top: 0;\n  left: 0;\n\n  background: linear-gradient(180deg, ${COLORS.NEUTRAL_900} 0%, ${COLORS.BLACK} 34.91%);\n  opacity: 0.9;\n`;\n\nconst Wrapper = styled.div`\n  z-index: 502;\n\n  position: fixed;\n  width: 100%;\n  height: 100%;\n  top: 0;\n  left: 0;\n\n  display: flex;\n  overflow: auto;\n`;\n\nconst Content = styled.div`\n  width: 100%;\n  padding-top: 42px;\n\n  display: flex;\n  flex-direction: column;\n  justify-content: space-between;\n  flex-grow: 1;\n`;\n\nconst Header = {\n  Background: styled.div`\n    z-index: 503;\n\n    position: fixed;\n    left: 0px;\n    right: 0px;\n    top: 0px;\n    height: 62px;\n    padding: 10px 34px;\n\n    // Set \"opacity\" to 0.9 without affecting child\n    background: linear-gradient(180deg, ${COLORS.NEUTRAL_900}E6 0%, transparent 100%);\n  `,\n  Container: styled.div`\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n    color: white;\n  `,\n  Metadata: {\n    Container: styled.div`\n      max-width: 75%;\n\n      display: flex;\n      align-items: center;\n      gap: 23px;\n      color: ${COLORS.WHITE};\n    `,\n    Name: styled.div`\n      ${FONTS.REGULAR_2}\n      ${STYLES.ONE_LINE}\n    `,\n    Info: styled.div`\n      flex: none;\n      ${FONTS.REGULAR_3}\n    `,\n  },\n  Buttons: styled.div`\n    display: flex;\n    gap: 1px;\n  `,\n};\n\nconst Arrow = styled.button`\n  position: fixed;\n  top: 44%;\n  ${({ position }) => `${position}: 0; margin-${position}: 34px;`}\n  width: 48px;\n  height: 48px;\n\n  display: flex;\n  flex-shrink: 0;\n  justify-content: center;\n  align-items: center;\n  background: ${COLORS.WHITE};\n  border-radius: 10px;\n  border: none;\n  box-shadow: ${STYLES.SHADOW_D};\n  opacity: 0.3;\n  transition: opacity 0.1s;\n\n  &:hover {\n    opacity: 1;\n    box-shadow: 0px 6px 24px -4px ${COLORS.BLACK};\n  }\n\n  ${({ disabled }) => disabled && \"opacity: 0; pointer-events: none;\"}\n`;\n\nconst Thumbnail = {\n  Island: styled.div`\n    position: fixed;\n    bottom: 20px;\n    left: 50%;\n    transform: translateX(-50%);\n    padding: 12px 16px;\n\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    gap: 16px;\n    border-radius: 8px;\n\n    ${({ isImage }) =>\n      !isImage &&\n      `\n    background: ${COLORS.BLACK};\n    opacity: 0.4;\n    transition: opacity 0.1s;\n\n    &:hover {\n      opacity: 1;\n    }\n  `}\n  `,\n  Img: styled.img`\n    width: 40px;\n    height: 40px;\n\n    background: ${COLORS.WHITE};\n    border-radius: 4px;\n    object-fit: cover;\n    opacity: 0.5;\n\n    ${({ focused }) =>\n      focused &&\n      `\n        opacity: 1;\n        box-shadow: 0 0 0 2px ${COLORS.HALO_BLUE};\n      `}\n\n    &:hover {\n      opacity: 1;\n      cursor: pointer;\n    }\n  `,\n};\n","import { useState } from \"react\";\n\n// This is a custom hook that is used to force refresh a component.\n// Put refreshKey in the deps array\n// TODO: (justinpchang) Remove once redux dependencies are removed and replace with setState\nexport function useEffectRefresh(): { refreshKey: unknown; refresh: () => void } {\n  const [refreshKey, setRefreshKey] = useState({});\n  const refresh = () => setRefreshKey({});\n  return { refreshKey, refresh };\n}\n","import { useEffectRefresh } from \"@hooks/useEffectRefresh\";\nimport api from \"@requests/request\";\nimport { getUser } from \"@requests/users\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport { FundingPartial } from \"@tsTypes/fundings/_funding\";\nimport { ScientistAttachmentProposal, ScientistShowUser } from \"@tsTypes/index\";\nimport { PatentPartial } from \"@tsTypes/patents/_patent\";\nimport { PublicationPartial } from \"@tsTypes/publications/_publication\";\nimport appsignal from \"@utils/appsignal\";\nimport { useEffect, useState } from \"react\";\nimport { NetworkScientist } from \"src/views/ScientistNetwork/ScientistNetwork\";\n\nexport type PositionInfo = {\n  id: number;\n  location: string | undefined;\n  title: string | undefined;\n  duration: string | undefined;\n};\n\nexport function ScientistQueryKey(id: number | undefined) {\n  return [\"useScientist\", id];\n}\n\nexport function useScientist(id: number | undefined): {\n  scientist: NetworkScientist | undefined;\n  about: string;\n  positions: PositionInfo[];\n  isScientistLoading: boolean;\n} {\n  const [scientist, setScientist] = useState<NetworkScientist>();\n  const [about, setAbout] = useState(\"\");\n  const [positions, setPositions] = useState<PositionInfo[]>([]);\n\n  const { isLoading } = useQuery({\n    queryKey: ScientistQueryKey(id),\n    queryFn: async () => {\n      if (!id) {\n        return null;\n      }\n      const response = await getUser(id);\n      return response;\n    },\n    onError: () => {\n      setAbout(\"\");\n      setPositions([]);\n    },\n    onSuccess: (response) => {\n      if (!response) {\n        setAbout(\"\");\n        setPositions([]);\n        return;\n      }\n      const user = response.user;\n      const scientistProfile = (user as ScientistShowUser).profile_info;\n      setScientist({\n        id: user.id,\n        name: user.name,\n        image: user.image,\n        profile_id: user.profile_id,\n        keywords: user.keywords,\n        is_in_network: scientistProfile.is_in_network,\n        profile_info: {\n          id: scientistProfile.id,\n          title: scientistProfile.title ?? \"\",\n          location: scientistProfile.location ?? \"\",\n        },\n      });\n      // Add about text\n      setAbout(scientistProfile.about ?? \"\");\n      const pos: PositionInfo[] = [];\n      // Add university position\n      if (scientistProfile.university_id) {\n        pos.push({\n          id: -1,\n          location: scientistProfile.university ?? \"\",\n          title: scientistProfile.title ?? \"\",\n          duration:\n            scientistProfile.university_start_year || scientistProfile.university_end_year\n              ? `${scientistProfile.university_start_year ?? \"?\"} - ${\n                  scientistProfile.university_end_year ?? \"?\"\n                }`\n              : undefined,\n        });\n      }\n      // Add startup position\n      if (scientistProfile.startup?.id) {\n        pos.push({\n          id: -2,\n          location: scientistProfile.startup.startup_name ?? \"\",\n          title: scientistProfile.is_startup_scientist ? scientistProfile.title ?? \"\" : undefined,\n          duration:\n            scientistProfile.startup.start_year || scientistProfile.startup.end_year\n              ? `${scientistProfile.startup.start_year ?? \"?\"} - ${\n                  scientistProfile.startup.end_year ?? \"?\"\n                }`\n              : undefined,\n        });\n      }\n      // Add educations\n      pos.push(\n        ...scientistProfile.educations.map((education) => ({\n          id: education.id,\n          location: education.location ?? \"\",\n          title: education.degree ?? education.field_of_study ?? \"\",\n          duration:\n            education.start_year || education.end_year\n              ? `${education.start_year ?? \"?\"} - ${education.end_year ?? \"?\"}`\n              : undefined,\n        }))\n      );\n      setPositions(pos);\n    },\n  });\n\n  return { scientist, about, positions, isScientistLoading: isLoading };\n}\n\nexport function usePublications(scientistProfileId: number | undefined): {\n  publications: PublicationPartial[];\n  refresh: () => void;\n} {\n  const [publications, setPublications] = useState<PublicationPartial[]>([]);\n  const { refreshKey, refresh } = useEffectRefresh();\n\n  useEffect(() => {\n    if (scientistProfileId) {\n      (async () => {\n        try {\n          const responseJson = await api.get(`/publications?profile_info_id=${scientistProfileId}`);\n          const pubs = responseJson.data.publications;\n          setPublications(pubs);\n        } catch (_) {\n          setPublications([]);\n        }\n      })();\n    }\n  }, [scientistProfileId, refreshKey]);\n\n  return { publications, refresh };\n}\n\nexport function useFundings(scientistProfileId: number | undefined): {\n  fundings: FundingPartial[];\n  refresh: () => void;\n} {\n  const [fundings, setFundings] = useState<FundingPartial[]>([]);\n  const { refreshKey, refresh } = useEffectRefresh();\n\n  useEffect(() => {\n    if (scientistProfileId) {\n      (async () => {\n        try {\n          const responseJson = await api.get(`/fundings?profile_info_id=${scientistProfileId}`);\n          const funds = responseJson.data.fundings;\n          setFundings(funds);\n        } catch (_) {\n          setFundings([]);\n        }\n      })();\n    }\n  }, [scientistProfileId, refreshKey]);\n\n  return { fundings, refresh };\n}\n\nexport function usePatents(scientistProfileId: number | undefined): {\n  patents: PatentPartial[];\n  refresh: () => void;\n} {\n  const [patents, setPatents] = useState<PatentPartial[]>([]);\n  const { refreshKey, refresh } = useEffectRefresh();\n\n  useEffect(() => {\n    if (scientistProfileId) {\n      (async () => {\n        try {\n          const responseJson = await api.get(`/patents?profile_info_id=${scientistProfileId}`);\n          const pats = responseJson.data.patents;\n          setPatents(pats);\n        } catch (_) {\n          setPatents([]);\n        }\n      })();\n    }\n  }, [scientistProfileId, refreshKey]);\n\n  return { patents, refresh };\n}\n\nexport function useProposals(\n  scientistProfileId: number | undefined,\n  asUniversityAdmin = false\n): ScientistAttachmentProposal[] {\n  const [proposals, setProposals] = useState<ScientistAttachmentProposal[]>([]);\n\n  useEffect(() => {\n    if (scientistProfileId) {\n      (async () => {\n        try {\n          const responseJson = await api.get(`/scientist_profile/proposals/${scientistProfileId}`);\n          const rawProposals = asUniversityAdmin\n            ? responseJson.data.proposals\n            : responseJson.data.proposals.filter((p) => p.completed);\n          setProposals(rawProposals);\n        } catch (e) {\n          appsignal.sendError(e, (span) => {\n            span.setAction(\"ScientistQuickViewModal#useProposals\");\n          });\n          setProposals([]);\n        }\n      })();\n    }\n  }, [scientistProfileId]);\n\n  return proposals;\n}\n","import { useState } from \"react\";\nimport styled from \"styled-components\";\n\nimport toast from \"@components/Toast\";\nimport { Button, EmailDropdown } from \"@components/library\";\nimport BlankModal, { BlankModalProps } from \"@components/library/ModalBases/BlankModal\";\nimport { COLORS, FONTS } from \"@constants\";\nimport { inviteScientistsToCompanyNetwork } from \"@requests/companyNetworkScientists\";\nimport { SegmentEventName } from \"@tsTypes/__generated__/enums\";\nimport { track } from \"@utils/appUtils\";\nimport { getOptionFromValue } from \"@utils/dropdownUtils\";\n\nconst InviteNetworkScientistModal = ({ isOpen, onClose }: BlankModalProps) => {\n  const [emails, setEmails] = useState<string[]>([]);\n  const [emailError, setEmailError] = useState(\"\");\n  const [message, setMessage] = useState(\"\");\n  const [isSubmitting, setIsSubmitting] = useState(false);\n  const [submissionError, setSubmissionError] = useState(\"\");\n\n  const onSubmit = async () => {\n    setIsSubmitting(true);\n    setSubmissionError(\"\");\n    try {\n      track(SegmentEventName.Invite, {\n        emails,\n        ui_component: \"InviteNetworkScientistModal\",\n        message,\n        invitees: \"scientists\",\n      });\n\n      const { immediately_added, sent_invitation, already_in_network } =\n        await inviteScientistsToCompanyNetwork(emails, message);\n\n      const toastCustomizedMessage: string[] = [];\n      if (immediately_added) toastCustomizedMessage.push(`${immediately_added} added`);\n      if (sent_invitation) toastCustomizedMessage.push(`${sent_invitation} invited`);\n      if (already_in_network)\n        toastCustomizedMessage.push(`${already_in_network} already in your network`);\n\n      const toastMessage = `You've expanded your network! ${toastCustomizedMessage.join(\", \")}`;\n      toast.success(toastMessage);\n\n      onClose();\n    } catch (err) {\n      if (err.response) {\n        setSubmissionError(err.response.data);\n      } else {\n        setSubmissionError(\"Something went wrong. Please try again.\");\n      }\n    } finally {\n      setIsSubmitting(false);\n    }\n  };\n\n  return (\n    <BlankModal\n      isOpen={isOpen}\n      onClose={onClose}\n      closeOnDimmerClick={false}\n      width=\"540px\"\n      headerText=\"Invite to your network\"\n    >\n      <Content data-testid=\"scientist-network-invite-modal\">\n        <div>\n          <EmailDropdown\n            options={[]}\n            value={emails.map(getOptionFromValue) as any}\n            onChange={setEmails}\n            setError={setEmailError}\n            placeholder=\"Invite by email\"\n            formatCreateLabel={(input: string) => `Invite '${input}' to your network`}\n          />\n          {emailError.length !== 0 && <Error>{emailError}</Error>}\n        </div>\n        <TextArea\n          placeholder=\"Add a message to your invite\"\n          rows=\"4\"\n          value={message}\n          onChange={(e) => setMessage(e.target.value)}\n        />\n        <Footer>\n          <Error>{submissionError}</Error>\n          <Button\n            type=\"button\"\n            size=\"md\"\n            disabled={isSubmitting || emailError.length !== 0 || emails.length === 0}\n            onClick={onSubmit}\n          >\n            Send Invite\n          </Button>\n        </Footer>\n      </Content>\n    </BlankModal>\n  );\n};\n\nexport default InviteNetworkScientistModal;\n\nconst Content = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 20px;\n  padding: 24px 20px;\n`;\n\nconst Error = styled.div`\n  ${FONTS.REGULAR_2}\n  color: ${COLORS.RED};\n  margin-top: 5px;\n`;\n\nconst TextArea = styled.textarea`\n  ${FONTS.REGULAR_2}\n  width: 100%;\n  margin: auto;\n  padding: 10px;\n  border: 1px solid ${COLORS.NEUTRAL_300};\n  border-radius: 6px;\n  resize: vertical;\n  &::placeholder {\n    ${FONTS.REGULAR_2}\n    color: ${COLORS.NEUTRAL_500};\n    opacity: 1;\n  }\n`;\n\nconst Footer = styled.div`\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  margin-top: 4px;\n`;\n","import { Button } from \"@components/library\";\nimport { COLORS, FONTS } from \"@constants\";\nimport { SegmentEventName } from \"@tsTypes/__generated__/enums\";\nimport { RfpRequestForCard } from \"@tsTypes/index\";\nimport { track } from \"@utils/appUtils\";\nimport styled from \"styled-components\";\n\ninterface Props {\n  request: RfpRequestForCard;\n  toggleUnsubscribeFromRfp: (\n    e: MouseEvent,\n    request: RfpRequestForCard,\n    isInterested: boolean\n  ) => void;\n}\n\nconst UnsubscribedRfpCard = ({ request, toggleUnsubscribeFromRfp }: Props) => {\n  return (\n    <Container>\n      <Heading>We won&apos;t contact you with further updates about this opportunity.</Heading>\n      <div>\n        <Button\n          size=\"sm\"\n          type=\"button\"\n          onClick={(e) => {\n            track(SegmentEventName.Click, {\n              react_component: \"UnsubscribedRfpCard\",\n              ui_component: \"Undo Button\",\n              request_slug: request.slug,\n            });\n            toggleUnsubscribeFromRfp(e, request, true);\n          }}\n        >\n          Undo\n        </Button>\n      </div>\n    </Container>\n  );\n};\n\nexport default UnsubscribedRfpCard;\n\nconst Container = styled.div`\n  display: flex;\n  flex-direction: column;\n  min-height: 240px;\n  background-color: ${COLORS.NEUTRAL_50};\n  padding: 24px 24px 16px;\n  border-radius: 4px;\n`;\nconst Heading = styled.div`\n  ${FONTS.MEDIUM_1}\n  margin: 0 0 20px;\n`;\n","import RfpCard from \"@components/RfpCard/RfpCard\";\nimport UnsubscribedRfpCard from \"@components/RfpCard/UnsubscribedRfpCard\";\nimport { BlankModal, Switch } from \"@components/library\";\nimport { BlankModalProps } from \"@components/library/ModalBases/BlankModal\";\nimport { COLORS, FONTS, WINDOW_DIMENSIONS } from \"@constants\";\nimport { useSearchParams } from \"@hooks/router\";\nimport haloLogo from \"@images/logos/halo_logo.svg\";\nimport {\n  fetchRequestForProposalsFromNotification,\n  updateNotificationSetting,\n} from \"@requests/notifications\";\nimport { updateUserRequestPreference } from \"@requests/user_request_preferences\";\nimport { account_settings_path } from \"@routes/routes\";\nimport { SegmentEventName } from \"@tsTypes/__generated__/enums\";\nimport { UserRequestPreferenceSource } from \"@tsTypes/__generated__/enums/user_request_preference_source\";\nimport { NotificationSettingsPartial, RfpRequestForCard } from \"@tsTypes/index\";\nimport { track } from \"@utils/appUtils\";\nimport appsignal from \"@utils/appsignal\";\nimport { useEffect, useState } from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport styled from \"styled-components\";\n\nconst RfpUnsubscribeModal = ({ onClose, isOpen }: BlankModalProps) => {\n  const [searchParams] = useSearchParams();\n  const history = useHistory();\n  const unsubscribeParam = searchParams.get(\"unsubscribe\") ?? \"\";\n  // NOTE: (overload119) nid is signed, whereas _nid is not.\n  // In the past we used the signed_id until we discovered bugs related to it in some small % of cases\n  // so we added the _nid fallback.\n  const notifIdentifierParam = searchParams.get(\"nid\") ?? searchParams.get(\"_nid\") ?? \"\";\n\n  const [step, setStep] = useState<\"opportunities\" | \"communication\">(\n    unsubscribeParam === \"1\" ? \"opportunities\" : \"communication\"\n  );\n  const [requestForProposals, setRequestForProposals] = useState([] as RfpRequestForCard[]);\n  const [unsubscribedRequestIds, setUnsubscribedRequestIds] = useState<number[]>([]);\n  const [userId, setUserId] = useState<number>();\n  const [isShadowProfile, setIsShadowProfile] = useState<boolean>(false);\n  const [settings, setSettings] = useState<NotificationSettingsPartial>([]);\n\n  const handleToggle = async (key, enabled) => {\n    try {\n      if (!userId) {\n        return;\n      }\n\n      await updateNotificationSetting(userId, key, enabled);\n\n      setSettings((prevSettings) => {\n        const newSettings = [...prevSettings];\n\n        const settingIndex = newSettings.findIndex((setting) => setting.key === key);\n\n        newSettings[settingIndex] = {\n          ...newSettings[settingIndex],\n          enabled,\n        };\n\n        return newSettings;\n      });\n    } catch (err) {\n      appsignal.sendError(err, (span) => {\n        span.setAction(\"RfpUnsubscribeModal#handleToggle\");\n        span.setTags({\n          notifIdentifierParam,\n          enabled,\n          key,\n        });\n      });\n    }\n  };\n\n  const toggleUnsubscribeFromRfp = async (\n    e: MouseEvent,\n    request: RfpRequestForCard,\n    isInterested: boolean\n  ) => {\n    e.preventDefault();\n\n    if (notifIdentifierParam) {\n      await updateUserRequestPreference({\n        requestId: request.id,\n        isInterested,\n        source: UserRequestPreferenceSource.PreferenceModal,\n        signedNotificationId: notifIdentifierParam,\n      });\n    }\n\n    if (isInterested) {\n      setUnsubscribedRequestIds([...unsubscribedRequestIds.filter((id) => id !== request.id)]);\n    } else {\n      setUnsubscribedRequestIds([...unsubscribedRequestIds, request.id]);\n    }\n  };\n\n  useEffect(() => {\n    (async () => {\n      if (notifIdentifierParam) {\n        const response = await fetchRequestForProposalsFromNotification(notifIdentifierParam);\n\n        setIsShadowProfile(response.is_shadow_profile);\n        setUserId(response.user_id);\n        setSettings(\n          response.notification_settings?.filter((setting) => setting.category === \"marketing\")\n        );\n\n        if (response.request_for_proposals.length) {\n          setRequestForProposals(response.request_for_proposals);\n          setUnsubscribedRequestIds(\n            response.request_for_proposals\n              .filter((request) => !request.is_interested)\n              .map((request) => request.id)\n          );\n        } else {\n          setStep(\"communication\");\n        }\n      }\n    })();\n  }, [notifIdentifierParam]);\n\n  if (step === \"communication\") {\n    return (\n      <BlankModal\n        onClose={onClose}\n        isOpen={isOpen}\n        width={requestForProposals.length === 3 ? \"1316px\" : \"960px\"}\n        height=\"100%\"\n      >\n        <Container>\n          <Top>\n            <Logo src={haloLogo} alt=\"Halo home\" />\n            <HeadingContainer>\n              <Subheader>Communication preferences</Subheader>\n              <Header>Choose which Halo emails you&apos;d like to receive.</Header>\n            </HeadingContainer>\n            <OptionContainer>\n              {settings.map((setting) => (\n                <OptionRow key={setting.key} margin=\"4px 0 0\">\n                  <Switch\n                    checked={setting.enabled}\n                    onChange={() => {\n                      track(SegmentEventName.Click, {\n                        react_component: \"RfpUnsubscribeModal\",\n                        ui_component: \"Communication Preferences Toggle\",\n                        key: setting.key,\n                        enabled: !setting.enabled,\n                      });\n                      handleToggle(setting.key, !setting.enabled);\n                    }}\n                    margin=\"4px 0 0\"\n                  />\n                  <div>\n                    <OptionHeading>{setting.title}</OptionHeading>\n                    <OptionDescription>{setting.description}</OptionDescription>\n                  </div>\n                </OptionRow>\n              ))}\n            </OptionContainer>\n          </Top>\n          <Bottom>\n            <StyledButton\n              onClick={() => {\n                track(SegmentEventName.Click, {\n                  react_component: \"RfpUnsubscribeModal\",\n                  ui_component: \"Unsubscribe From All Button\",\n                });\n                settings.forEach((setting) => handleToggle(setting.key, false));\n              }}\n            >\n              Unsubscribe from all Halo communications\n            </StyledButton>\n          </Bottom>\n        </Container>\n      </BlankModal>\n    );\n  }\n\n  return (\n    <BlankModal\n      onClose={onClose}\n      isOpen={isOpen}\n      width={requestForProposals.length === 3 ? \"1316px\" : \"960px\"}\n      height=\"100%\"\n    >\n      <Container>\n        <Top>\n          <Logo src={haloLogo} alt=\"Halo home\" />\n          <HeadingContainer>\n            <Subheader>Opportunity recommendations</Subheader>\n            <Header>Let us know which opportunities you&apos;d prefer not to hear about.</Header>\n          </HeadingContainer>\n          <CardsContainer columns={requestForProposals.length === 3 ? 3 : 2}>\n            {requestForProposals.map((request) =>\n              unsubscribedRequestIds.includes(request.id) ? (\n                <UnsubscribedRfpCard\n                  key={request.id}\n                  request={request}\n                  toggleUnsubscribeFromRfp={toggleUnsubscribeFromRfp}\n                />\n              ) : (\n                <RfpCard\n                  key={request.id}\n                  request={request}\n                  onClick={(e) => toggleUnsubscribeFromRfp(e, request, false)}\n                  shouldShowUnsubscribeButton\n                />\n              )\n            )}\n          </CardsContainer>\n        </Top>\n        <Bottom>\n          Not interested in hearing about future opportunities? Let us know your\n          <StyledButton\n            onClick={() => {\n              if (isShadowProfile) {\n                setStep(\"communication\");\n              } else {\n                // Logged in users have account settings, so we take them there to control them.\n                history.push(account_settings_path({ q: \"notifications\" }));\n              }\n              track(SegmentEventName.Click, {\n                react_component: \"RfpUnsubscribeModal\",\n                ui_component: \"Communication Preferences Button\",\n              });\n            }}\n          >\n            communication preferences.\n          </StyledButton>\n        </Bottom>\n      </Container>\n    </BlankModal>\n  );\n};\n\nconst Container = styled.div`\n  display: grid;\n  grid-template-rows: 1fr auto;\n`;\n\nconst Top = styled.div`\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n\n  gap: 40px;\n\n  padding: 48px;\n\n  box-sizing: border-box;\n`;\n\nconst Logo = styled.img`\n  width: 65px;\n  height: 32px;\n`;\n\nconst HeadingContainer = styled.div`\n  width: 100%;\n`;\n\nconst Header = styled.div`\n  color: ${COLORS.BLACK};\n  ${FONTS.HEADING_3_REGULAR}\n`;\n\nconst Subheader = styled.div`\n  color: ${COLORS.NEUTRAL_500};\n  ${FONTS.SEMIBOLD_1}\n`;\n\nconst CardsContainer = styled.div`\n  display: grid;\n  grid-template-columns: repeat(${({ columns }) => columns}, minmax(0, 1fr));\n  grid-gap: 20px;\n\n  ${WINDOW_DIMENSIONS.TABLET_LANDSCAPE_MEDIA_QUERY} {\n    grid-template-columns: minmax(0, 1fr);\n  }\n`;\n\nconst Bottom = styled.div`\n  display: flex;\n  align-items: center;\n  justify-content: center;\n\n  padding: 24px 72px;\n\n  border-top: 1px solid ${COLORS.NEUTRAL_300};\n\n  ${FONTS.REGULAR_2}\n  line-height: 14px;\n  gap: 3px;\n`;\n\nconst StyledButton = styled.button`\n  background: none;\n  border: none;\n  padding: 0;\n  cursor: pointer;\n  outline: inherit;\n\n  ${FONTS.SEMIBOLD_2}\n\n  color: ${COLORS.HALO_BLUE};\n\n  text-decoration: underline !important;\n  text-decoration-color: ${COLORS.BLUE_600} !important;\n  -webkit-text-decoration-color: ${COLORS.BLUE_600} !important;\n  text-underline-offset: 4px !important;\n\n  &:hover {\n    color: ${COLORS.BLACK};\n    text-decoration-color: ${COLORS.BLACK} !important;\n    -webkit-text-decoration-color: ${COLORS.BLACK} !important;\n  }\n\n  &:focus {\n    color: ${COLORS.BLACK};\n    text-decoration: none;\n  }\n`;\n\nconst OptionContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  align-items: flex-start;\n  gap: 34px;\n  width: 100%;\n`;\n\nconst OptionRow = styled.div`\n  display: flex;\n  gap: 11px;\n  align-items: flex-start;\n  width: 100%;\n`;\n\nconst OptionHeading = styled.div`\n  ${FONTS.MEDIUM_1}\n`;\n\nconst OptionDescription = styled.div`\n  color: ${COLORS.NEUTRAL_500};\n  ${FONTS.REGULAR_2}\n`;\n\nexport default RfpUnsubscribeModal;\n","import { AxiosResponse } from \"axios\";\n\nimport { BlankModalProps } from \"@components/library/ModalBases/BlankModal\";\nimport ShareWithinCompanyModal from \"@components/library/ModalBases/ShareWithinCompanyModal\";\nimport { sponsorShareScientist } from \"@requests/sponsors\";\n\nexport interface SponsorShareScientistModalProps extends BlankModalProps {\n  scientist: any;\n}\n\nconst SponsorShareScientistModal = ({\n  isOpen,\n  onClose,\n  scientist,\n}: SponsorShareScientistModalProps) => {\n  const handleShare = (email: string, message: string): Promise<AxiosResponse> => {\n    const data = {\n      scientist_id: scientist.id,\n      email,\n      message,\n    };\n\n    return sponsorShareScientist(data);\n  };\n\n  return (\n    <ShareWithinCompanyModal\n      isOpen={isOpen}\n      onClose={onClose}\n      headerText=\"Share Scientist Profile\"\n      toastText=\"Scientist profile shared successfully\"\n      handleShare={handleShare}\n    />\n  );\n};\n\nexport default SponsorShareScientistModal;\n","import { useEffect, useMemo, useState } from \"react\";\nimport { Loader } from \"semantic-ui-react\";\nimport styled from \"styled-components\";\n\nimport { Button, Tabs, Tag, UserPreview } from \"@components/library\";\nimport SlideModalBase, { SlideModalBaseProps } from \"@components/library/ModalBases/SlideModalBase\";\nimport { COLORS, FONTS } from \"@constants\";\nimport SponsorShareScientistModal from \"../SponsorShareScientistModal\";\nimport {\n  PositionInfo,\n  useFundings,\n  usePatents,\n  useProposals,\n  usePublications,\n  useScientist,\n} from \"./hooks\";\n\nimport ScientistContribution from \"@components/ScientistContribution\";\nimport { RootState } from \"@redux/store\";\nimport { t } from \"@utils/i18n\";\nimport { useSelector } from \"react-redux\";\nimport { NetworkScientist } from \"src/views/ScientistNetwork/ScientistNetwork\";\n\ninterface Props extends SlideModalBaseProps {\n  scientistUserId: number | undefined;\n  sendMessage?: (scientist: NetworkScientist) => void;\n  addToNetwork?: (scientist: NetworkScientist) => void;\n  forUniversityProposalLibrary?: boolean;\n}\n\nconst ScientistQuickViewModal = ({\n  isOpen,\n  onClose,\n  scientistUserId,\n  sendMessage,\n  addToNetwork,\n  forUniversityProposalLibrary = false,\n}: Props) => {\n  if (!isOpen || !scientistUserId) return null;\n\n  const [activeTab, setActiveTab] = useState(\"\");\n  const [isShareModalOpen, setIsShareModalOpen] = useState(false);\n\n  const { scientist, about, positions, isScientistLoading } = useScientist(scientistUserId);\n  const publications = usePublications(scientist?.profile_info.id).publications;\n  const fundings = useFundings(scientist?.profile_info.id).fundings;\n  const patents = usePatents(scientist?.profile_info.id).patents;\n  const proposals = useProposals(scientist?.profile_info.id, forUniversityProposalLibrary);\n\n  const windowHeight = useSelector((state: RootState) => state.window.height);\n  const currentUser = useSelector((state: RootState) => state.profiles.currentUser);\n\n  const visibleTabs = useMemo(\n    () =>\n      [\n        {\n          label: \"Publications\",\n          data: publications,\n        },\n        {\n          label: \"Funding\",\n          data: fundings,\n        },\n        {\n          label: \"Patents\",\n          data: patents,\n        },\n        {\n          label: \"Proposals\",\n          data: proposals,\n        },\n      ].filter((tab) => tab.data.length > 0),\n    [publications, fundings, patents, proposals]\n  );\n\n  useEffect(() => {\n    setActiveTab(visibleTabs[0]?.label);\n  }, [visibleTabs]);\n\n  const tabs = visibleTabs.map((tab) => ({\n    key: tab.label,\n    label: tab.label,\n    count: tab.data.length,\n  }));\n\n  if (!scientist) return null;\n\n  return (\n    <>\n      <SponsorShareScientistModal\n        scientist={scientist}\n        isOpen={isShareModalOpen}\n        onClose={() => setIsShareModalOpen(false)}\n      />\n      <SlideModalBase isOpen={isOpen} onClose={onClose}>\n        <Container data-testid=\"scientist-quick-view-modal\">\n          {isScientistLoading ? (\n            <Loader active style={{ top: \"30%\" }} />\n          ) : (\n            <>\n              <TopContent>\n                {scientist && (\n                  <UserPreviewContainer>\n                    <UserPreview size=\"xl\" user={scientist} />\n                  </UserPreviewContainer>\n                )}\n                {!forUniversityProposalLibrary && (\n                  <Buttons>\n                    {!scientist.is_in_network && (\n                      <Button\n                        type=\"button\"\n                        size=\"sm\"\n                        iconName=\"Invite\"\n                        disabled={isScientistLoading}\n                        margin=\"0 10px 0 0\"\n                        onClick={() => addToNetwork?.(scientist)}\n                      >\n                        {t(\"components.buttons.add_to_network\")}\n                      </Button>\n                    )}\n                    {!currentUser.profile_info.commenter && (\n                      <Button\n                        type=\"button\"\n                        size=\"sm\"\n                        iconName=\"Message\"\n                        margin=\"0 10px 0 0\"\n                        onClick={() => sendMessage?.(scientist)}\n                        data-testid=\"sci-net-slideout-message-button\"\n                      >\n                        Message\n                      </Button>\n                    )}\n                    <Button\n                      type=\"button\"\n                      size=\"sm\"\n                      variant=\"secondary\"\n                      iconName=\"Share\"\n                      margin=\"0 10px 0 0\"\n                      onClick={() => setIsShareModalOpen(true)}\n                      data-testid=\"sci-net-slideout-share-button\"\n                    >\n                      Share Profile\n                    </Button>\n                  </Buttons>\n                )}\n              </TopContent>\n              <ScrollContainer>\n                <About data-testid=\"about\">{about}</About>\n                <Keywords>\n                  {scientist.keywords.map((keyword) => (\n                    <Tag\n                      key={`keyword-${keyword}`}\n                      content={keyword}\n                      size=\"sm\"\n                      theme=\"neutral\"\n                      data-testid=\"keyword-tag\"\n                    />\n                  ))}\n                </Keywords>\n                {positions.length > 0 && (\n                  <Position.Container>\n                    Positions:\n                    {positions.map(\n                      (position: PositionInfo) =>\n                        position.location && (\n                          <Position.IndividualContainer key={`position-${position.id}`}>\n                            <Position.Title>{position.location}</Position.Title>\n                            <div>\n                              {position.title ?? <Position.Note>(No title provided)</Position.Note>}\n                            </div>\n                            {position.duration ?? <Position.Note>(No date provided)</Position.Note>}\n                          </Position.IndividualContainer>\n                        )\n                    )}\n                  </Position.Container>\n                )}\n                <Tabs\n                  activeTab={activeTab}\n                  setActiveTab={setActiveTab}\n                  tabs={tabs}\n                  margin=\"0 0 24px\"\n                />\n                {visibleTabs.map((tab) => (\n                  <TabPanel\n                    isActive={activeTab === tab.label}\n                    key={`tabpanel-${tab.label}`}\n                    windowHeight={windowHeight}\n                  >\n                    {tab.data.map(\n                      (attachment) =>\n                        activeTab === tab.label && (\n                          <ScientistContribution key={attachment.id} contribution={attachment} />\n                        )\n                    )}\n                  </TabPanel>\n                ))}\n              </ScrollContainer>\n            </>\n          )}\n        </Container>\n      </SlideModalBase>\n    </>\n  );\n};\n\nexport default ScientistQuickViewModal;\n\nconst Container = styled.div`\n  ${FONTS.REGULAR_2};\n  display: flex;\n  flex-direction: column;\n  height: 100%;\n  width: 622px;\n`;\n\nconst TopContent = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 24px;\n  padding: 50px 24px 24px 24px;\n`;\n\nconst UserPreviewContainer = styled.div`\n  margin-right: 48px;\n`;\n\nconst Buttons = styled.div`\n  display: flex;\n  margin: 6px 0;\n`;\n\nconst ScrollContainer = styled.div`\n  height: 100%;\n  padding-left: 24px;\n  padding-right: 24px;\n  overflow-x: hidden;\n  overflow-y: auto;\n`;\n\nconst About = styled.div`\n  margin-bottom: 20px;\n`;\n\nconst Keywords = styled.div`\n  margin-bottom: 40px;\n  line-height: 30px;\n`;\n\nconst Position = {\n  Container: styled.div`\n    margin-bottom: 40px;\n  `,\n  IndividualContainer: styled.div`\n    margin-top: 14px;\n  `,\n  Title: styled.div`\n    ${FONTS.SEMIBOLD_2};\n  `,\n  Note: styled.span`\n    color: ${COLORS.NEUTRAL_400};\n  `,\n};\n\nconst TabPanel = styled.div`\n  display: ${({ isActive }) => (isActive ? \"flex\" : \" none\")};\n  flex-direction: column;\n  gap: 8px;\n  // 242px is the height of the top non-scrolling section and 53px is the height of the tabs\n  min-height: ${({ windowHeight }) => windowHeight - 242 - 53}px;\n  ${FONTS.REGULAR_2};\n  & > div {\n    margin-top: 0 !important;\n    & > div {\n      padding-top: 0 !important;\n    }\n  }\n`;\n","export const MAX_KEYWORD_DISPLAY_COUNT = 10;\n","export const USER_ROLES = {\n  scientist: 0,\n  sponsor: 1,\n  university_admin: 2,\n};\n","import { useCallback, useMemo } from \"react\";\nimport { useHistory, useLocation } from \"react-router-dom\";\n\n/**\n * Creates a URLSearchParams object using the given initializer.\n *\n * This is identical to `new URLSearchParams(init)` except it also\n * supports arrays as values in the object form of the initializer\n * instead of just strings. This is convenient when you need multiple\n * values for a given key, but don't want to use an array initializer.\n *\n * For example, instead of:\n *\n *   let searchParams = new URLSearchParams([\n *     ['sort', 'name'],\n *     ['sort', 'price']\n *   ]);\n *\n * you can do:\n *\n *   let searchParams = createSearchParams({\n *     sort: ['name', 'price']\n *   });\n *\n * Adapted from react-router-dom v6\n */\nconst createSearchParams = (init) => {\n  return new URLSearchParams(\n    typeof init === \"string\" || Array.isArray(init) || init instanceof URLSearchParams\n      ? init\n      : Object.keys(init).reduce((memo: any, key) => {\n          const value = init[key];\n          return memo.concat(Array.isArray(value) ? value.map((v) => [key, v]) : [[key, value]]);\n        }, [])\n  );\n};\n\n// Wrapper for reading and writing search parameters\n// Setter can either take an key-value object or a URLSearchParams instance\n// Will be replaced by react-router v6 eventually\n// Adapted from react-router-dom v6\nexport const useSearchParams = (): [URLSearchParams, (nextInit: object) => void] => {\n  const { search } = useLocation();\n  const history = useHistory();\n  const searchParams = useMemo(() => new URLSearchParams(search), [search]);\n  const setSearchParams = useCallback(\n    (nextInit) => {\n      const newSearchParams = createSearchParams(nextInit);\n      history.push({ search: newSearchParams.toString() });\n    },\n    [history]\n  );\n\n  return [searchParams, setSearchParams];\n};\n\n// Custom hook to parse query string of current page\n// Usage: const queryParams = useQueryParams(); query.get(\"param_name\");\n/**\n * @deprecated Use `useSearchParams` instead\n */\nexport const useQueryParams = () => {\n  const { search } = useLocation();\n  return useMemo(() => new URLSearchParams(search), [search]);\n};\n","import toast from \"@components/Toast/Toast\";\nimport { useSearchParams } from \"@hooks/router\";\nimport { setCurrentUser, toggleLoginModal } from \"@redux/actions/profileActions\";\nimport { RootState } from \"@redux/store\";\nimport { followRequest } from \"@requests/userFollowedRequests\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport { UserRole } from \"@tsTypes/users\";\nimport { setPrevUrlCookie } from \"@utils/authUtils\";\nimport { toastErrorHandler } from \"@utils/requests\";\nimport { useEffect } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { Link } from \"react-router-dom\";\n\nconst NOTIFY_SEARCH_PARAM = \"notify\";\n\nconst useFollowRequest = (requestId: number, shouldSkipFollowOnRedirect = false) => {\n  const currentUser = useSelector((state: RootState) => state.profiles.currentUser);\n\n  const dispatch = useDispatch();\n  const [searchParams, setSearchParams] = useSearchParams();\n\n  const isUserFollowing = (currentUser.profile_info.followed_request_ids ?? []).includes(requestId);\n\n  const { mutate, isLoading } = useMutation({\n    mutationFn: () => followRequest(requestId),\n    onSuccess: (followedRequest) => {\n      dispatch(\n        setCurrentUser({\n          ...currentUser,\n          profile_info: {\n            ...currentUser.profile_info,\n            followed_request_ids: [\n              ...currentUser.profile_info.followed_request_ids,\n              followedRequest.id,\n            ],\n          },\n        })\n      );\n\n      toast.success(\n        <p>\n          You&apos;ll be notified when applications open for {followedRequest.title}.{\" \"}\n          <Link to=\"/account/?q=following\" style={{ textDecoration: \"underline\", color: \"white\" }}>\n            View your followed opportunities.\n          </Link>\n        </p>\n      );\n    },\n    onError: toastErrorHandler,\n  });\n\n  useEffect(() => {\n    if (\n      searchParams.get(NOTIFY_SEARCH_PARAM) === String(requestId) &&\n      currentUser.id &&\n      !isUserFollowing &&\n      !shouldSkipFollowOnRedirect\n    ) {\n      mutate({});\n      searchParams.delete(NOTIFY_SEARCH_PARAM);\n      setSearchParams(searchParams);\n    }\n  }, []);\n\n  const handleFollowRequest = () => {\n    if (currentUser.role === UserRole.SPONSOR || isUserFollowing || isLoading) {\n      return;\n    }\n\n    if (currentUser.id) {\n      mutate({});\n    } else {\n      searchParams.set(\"notify\", String(requestId));\n      setPrevUrlCookie(window.location.pathname + \"?\" + searchParams.toString());\n      dispatch(toggleLoginModal({ open: true }));\n    }\n  };\n\n  return { handleFollowRequest, isUserFollowing };\n};\n\nexport default useFollowRequest;\n","import { useEffect, DependencyList } from \"react\";\n\ndeclare global {\n  interface Window {\n    __hsWebInteractiveInstance: any;\n  }\n}\n\n/**\n * This is a hook meant to workaround the limitation in the Hubspot tracking code on SPAs.\n * Hubspot expects pages to be static HTML so this reattaches the event listeners\n * whenever a component re-renders.\n *\n * As of Jan 17 2024, this seems to have the most details around this issue.\n * https://community.hubspot.com/t5/APIs-Integrations/Force-CTA-Scripts-to-Run-on-History-Change-for-single-page/m-p/879567#M69070\n */\nexport function useHubspotCTAs(dependencies: DependencyList): void {\n  return useEffect(() => {\n    window.__hsWebInteractiveInstance?.init();\n  }, dependencies);\n}\n","import { useEffect, useRef } from \"react\";\n\n// Utility hook to indicate whether the current render is the first render\n// Used for skipping first render for certain useEffect hooks\nexport const useIsMount = (): boolean => {\n  const isMountRef = useRef(true);\n\n  useEffect(() => {\n    isMountRef.current = false;\n  }, []);\n\n  return isMountRef.current;\n};\n","import appsignal from \"@utils/appsignal\";\nimport isEqual from \"lodash/isEqual\";\nimport { useEffect, useState } from \"react\";\n\n/**\n * Custom hook for managing data in localStorage\n * @param key The localStorage key to store the data under\n * @param initialValue The initial value to use if no value is found in localStorage\n * @returns A tuple containing the current value and a function to update it\n *\n * @example\n * // Store a simple string\n * const [name, setName] = useLocalStorage('userName', '');\n *\n * @example\n * // Store an object\n * const [settings, setSettings] = useLocalStorage('userSettings', {\n *   theme: 'light',\n *   notifications: true\n * });\n *\n * @example\n * // Update with callback function\n * const [counter, setCounter] = useLocalStorage('counter', 0);\n * setCounter(prev => prev + 1);\n */\nexport function useLocalStorage<T>(\n  key: string,\n  initialValue: T\n): [T, (value: T | ((val: T) => T)) => void] {\n  // State to store our value\n  const [storedValue, setStoredValue] = useState<T>(() => {\n    try {\n      // Get from local storage by key\n      const item = window.localStorage.getItem(key);\n      // Parse stored json or if none return initialValue\n      return item ? JSON.parse(item) : initialValue;\n    } catch (error) {\n      // If error also return initialValue\n      appsignal.sendError(error, (span) => {\n        span.setAction(\"useLocalStorage#initialize\");\n        span.setTags({\n          key,\n        });\n      });\n      return initialValue;\n    }\n  });\n\n  // Return a wrapped version of useState's setter function that\n  // persists the new value to localStorage.\n  const setValue = (value: T | ((val: T) => T)) => {\n    try {\n      // Allow value to be a function so we have same API as useState\n      const valueToStore = value instanceof Function ? value(storedValue) : value;\n      setStoredValue(valueToStore);\n      window.localStorage.setItem(key, JSON.stringify(valueToStore));\n    } catch (error) {\n      appsignal.sendError(error, (span) => {\n        span.setAction(\"useLocalStorage#setValue\");\n        span.setTags({\n          key,\n        });\n      });\n    }\n  };\n\n  // Update local storage if the key changes\n  useEffect(() => {\n    try {\n      const item = window.localStorage.getItem(key);\n      if (item) {\n        const parsedItem = JSON.parse(item);\n        if (!isEqual(parsedItem, storedValue)) {\n          setStoredValue(parsedItem);\n        }\n      } else if (storedValue !== initialValue) {\n        // If no item in storage, reset to initial value\n        setStoredValue(initialValue);\n      }\n    } catch (error) {\n      appsignal.sendError(error, (span) => {\n        span.setAction(\"useLocalStorage#useEffect\");\n        span.setTags({\n          key,\n        });\n      });\n    }\n  }, [key, initialValue]);\n\n  // Add cross-tab synchronization\n  useEffect(() => {\n    const handleStorageChange = (event: StorageEvent) => {\n      if (event.key === key) {\n        setStoredValue(event.newValue ? JSON.parse(event.newValue) : initialValue);\n      }\n    };\n\n    window.addEventListener(\"storage\", handleStorageChange);\n    return () => window.removeEventListener(\"storage\", handleStorageChange);\n  }, [key, initialValue]);\n\n  return [storedValue, setValue];\n}\n\nexport default useLocalStorage;\n","import { getSSOEmailDomains } from \"@requests/sso\";\nimport { UserRole } from \"@tsTypes/users\";\nimport { getPrevUrlCookie } from \"@utils/authUtils\";\nimport { Dispatch, SetStateAction, useEffect, useState } from \"react\";\n\nconst useSSOSensitiveEmail = (\n  initialValue = \"\"\n): {\n  email: string;\n  setEmail: Dispatch<SetStateAction<string>>;\n  isEmailSSOEnabled: boolean;\n  redirectToSSO: () => void;\n} => {\n  const [email, setEmail] = useState(initialValue);\n  const [domains, setDomains] = useState<string[]>([]);\n  const [excludedEmails, setExcludedEmails] = useState<string[]>([]);\n  const [isEmailSSOEnabled, setIsEmailSSOEnabled] = useState(false);\n\n  useEffect(() => {\n    let isAborted = false;\n    const abortController = new AbortController();\n\n    (async () => {\n      const data = await getSSOEmailDomains(abortController.signal);\n      if (!isAborted) {\n        setDomains(data.email_domains);\n        setExcludedEmails(data.excluded_emails);\n      }\n    })();\n\n    return () => {\n      isAborted = true;\n      abortController.abort();\n    };\n  }, []);\n\n  useEffect(() => {\n    const emailParts = email.split(\"@\");\n    setIsEmailSSOEnabled(\n      emailParts.length > 1 &&\n        domains.includes(emailParts[emailParts.length - 1]) &&\n        !excludedEmails.includes(email.toLowerCase())\n    );\n  }, [email, domains]);\n\n  const redirectToSSO = () => {\n    const prevUrl = getPrevUrlCookie(\"/\", true, UserRole.SPONSOR, false);\n    window.location.href =\n      `/sso/redirect?email=${email}` + (prevUrl ? `&prev_url=${encodeURIComponent(prevUrl)}` : \"\");\n  };\n\n  return {\n    email,\n    setEmail,\n    isEmailSSOEnabled,\n    redirectToSSO,\n  };\n};\n\nexport { useSSOSensitiveEmail };\n","import appsignal from \"@utils/appsignal\";\nimport request from \"./request\";\n\nexport const getSSOEmailDomains = async (\n  abortSignal?: AbortSignal\n): Promise<{\n  email_domains: string[];\n  excluded_emails: string[];\n}> => {\n  try {\n    const response = await request.get(\"/sso/email_domains\", { signal: abortSignal });\n    if (!response) {\n      return {\n        email_domains: [],\n        excluded_emails: [],\n      };\n    }\n    return response.data;\n  } catch (err) {\n    if (err?.code !== \"ECONNABORTED\" && err?.message !== \"canceled\") {\n      appsignal.sendError(err, (span) => {\n        span.setAction(\"sso#getSSOEmailDomains\");\n      });\n    }\n    return {\n      email_domains: [],\n      excluded_emails: [],\n    };\n  }\n};\n","import { payloadActionGenerator } from \"@utils/redux\";\n\nexport const SET_SHOULD_SHOW_PRODUCT_TOURS = \"SET_SHOULD_SHOW_PRODUCT_TOURS\";\nexport const SET_IS_ABSOLUTE = \"SET_IS_ABSOLUTE\";\n\nexport const setShouldShowProductTours = payloadActionGenerator(SET_SHOULD_SHOW_PRODUCT_TOURS);\nexport const setIsAbsolute = payloadActionGenerator(SET_IS_ABSOLUTE);\n","import { getMostRecentSubscription } from \"@requests/subscriptions\";\nimport { payloadActionGenerator } from \"@utils/redux\";\nimport { getCompanyMembers } from \"src/requests/sponsors\";\n\nexport const LOAD_SUBSCRIPTION = \"LOAD_SUBSCRIPTION\";\nexport const SET_SUBSCRIPTION = \"SET_SUBSCRIPTION\";\nexport const LOAD_PROPOSALS = \"LOAD_PROPOSALS\";\nexport const SET_REVIEWER_DASHBOARD_RFP = \"SET_REVIEWER_DASHBOARD_RFP\";\nexport const SET_PROPOSAL_DASHBOARD_RFP = \"SET_PROPOSAL_DASHBOARD_RFP\";\nexport const LOAD_USER_FOLLOW = \"LOAD_USER_FOLLOW\";\nexport const SET_USER_FOLLOW = \"SET_USER_FOLLOW\";\nexport const LOAD_COMPANY_MEMBERS = \"LOAD_COMPANY_MEMBERS\";\nexport const SET_COMPANY_MEMBERS = \"SET_COMPANY_MEMBERS\";\nexport const LOADING_MESSAGES = \"LOADING_MESSAGES\";\nexport const SET_MESSAGES = \"SET_MESSAGES\";\nexport const SET_VIEW_AS_COMPANY_SUPER_ADMIN = \"SET_VIEW_AS_COMPANY_SUPER_ADMIN\";\nexport const SET_PROPOSAL_AS_SEEN = \"SET_PROPOSAL_AS_SEEN\";\n\nexport const loadSubscription = payloadActionGenerator(LOAD_SUBSCRIPTION);\nexport const setSubscription = payloadActionGenerator(SET_SUBSCRIPTION);\nexport const loadProposals = payloadActionGenerator(LOAD_PROPOSALS);\nexport const setProposalDashboardRequest = payloadActionGenerator(SET_PROPOSAL_DASHBOARD_RFP);\nexport const loadUserFollow = payloadActionGenerator(LOAD_USER_FOLLOW);\nexport const setUserFollow = payloadActionGenerator(SET_USER_FOLLOW);\nexport const loadCompanyMembers = payloadActionGenerator(LOAD_COMPANY_MEMBERS);\nexport const setCompanyMembers = payloadActionGenerator(SET_COMPANY_MEMBERS);\nexport const loadingMessages = payloadActionGenerator(LOADING_MESSAGES);\nexport const setMessages = payloadActionGenerator(SET_MESSAGES);\nexport const setViewAsCompanySuperAdmin = payloadActionGenerator(SET_VIEW_AS_COMPANY_SUPER_ADMIN);\nexport const setProposalAsSeen = payloadActionGenerator(SET_PROPOSAL_AS_SEEN);\n\nexport const fetchSubscription = (companyIdentifier) => {\n  return async (dispatch) => {\n    const subscription = await getMostRecentSubscription(companyIdentifier);\n\n    dispatch(setSubscription(subscription));\n\n    return subscription;\n  };\n};\n\nexport const fetchAllCompanyMembers = (companyId) => {\n  return async (dispatch) => {\n    dispatch(loadCompanyMembers());\n\n    const { sponsor_users } = await getCompanyMembers(companyId);\n    dispatch(setCompanyMembers(sponsor_users));\n\n    return sponsor_users;\n  };\n};\n","import toast from \"@components/Toast/Toast\";\nimport { ShowSubscription } from \"@tsTypes/subscriptions/show\";\nimport appsignal from \"@utils/appsignal\";\nimport api from \"./request\";\n\nexport const getMostRecentSubscription = async (\n  companyIdentifier: string\n): Promise<ShowSubscription | null> => {\n  try {\n    const response = await api.get(`/subscriptions/${companyIdentifier}`);\n    return response.data.subscription;\n  } catch (error) {\n    switch (error.response.status) {\n      case 404:\n        return null;\n      default:\n        toast.error(\"Could not fetch company subscription data.\");\n        appsignal.sendError(error, (span) => {\n          span.setAction(\"getCurrentSubscription\");\n          span.setTags({\n            companyIdentifier,\n          });\n        });\n        return null;\n    }\n  }\n};\n","import { marketplacePath } from \"@routes/utils\";\nimport { payloadActionGenerator } from \"@utils/redux\";\nimport axios from \"axios\";\nimport api from \"src/requests/request\";\n\nexport const SHOW_ERROR_BOUNDARY = \"SHOW_ERROR_BOUNDARY\";\nexport const ADD_FILTER = \"ADD_FILTER\";\nexport const REMOVE_FILTER = \"REMOVE_FILTER\";\nexport const SEARCH_TERM = \"SEARCH_TERM\";\nexport const SET_FOLLOWED_REQUESTS_INFO = \"SET_FOLLOWED_REQUESTS_INFO\";\nexport const UPDATE_RESULT_LIST = \"UPDATE_RESULT_LIST\";\nexport const LOAD_CURRENT_RFP = \"LOAD_CURRENT_RFP\";\nexport const UPDATE_CURRENT_RFP = \"UPDATE_CURRENT_RFP\";\nexport const SET_CURRENT_COMPANY = \"SET_CURRENT_COMPANY\";\nexport const LOADING_CURRENT_COMPANY = \"LOADING_CURRENT_COMPANY\";\nexport const SET_COMPANIES = \"SET_COMPANIES\";\nexport const SET_FOUNDATIONS = \"SET_FOUNDATIONS\";\nexport const SET_GOVERNMENT_ORGANIZATIONS = \"SET_GOVERNMENT_ORGANIZATIONS\";\nexport const SET_LOAD_COMPANY_PARTNER = \"SET_LOAD_COMPANY_PARTNER\";\nexport const SET_LOAD_COMPANY_INTEREST = \"SET_LOAD_COMPANY_INTEREST\";\nexport const SET_COMPANY_INTEREST = \"SET_COMPANY_INTEREST\";\nexport const SET_COMPANY_INFO = \"SET_COMPANY_INFO\";\nexport const SET_LOAD_COMPANY_INFO = \"SET_LOAD_COMPANY_INFO\";\nexport const LOAD_DELETE_COMPANY_INTEREST_PARTNER = \"LOAD_DELETE_COMPANY_INTEREST_PARTNER\";\nexport const SET_INVITED_USERS = \"SET_INVITED_USERS\";\nexport const SET_LOAD_INVITED_USERS = \"SET_LOAD_INVITED_USERS\";\nexport const SET_UNIVERSITY_TEAM_MEMBERS = \"SET_UNIVERSITY_TEAM_MEMBERS\";\nexport const SET_COMPANY_LOGO = \"SET_COMPANY_LOGO\";\nexport const SET_COMPANY_VIDEO = \"SET_COMPANY_VIDEO\";\nexport const SET_LAST_VIEWED_RFP_IDENTIFIER = \"SET_LAST_VIEWED_RFP_IDENTIFIER\";\n\nexport const setShowErrorBoundary = payloadActionGenerator(SHOW_ERROR_BOUNDARY);\nexport const addFilter = payloadActionGenerator(ADD_FILTER);\nexport const removeFilter = payloadActionGenerator(REMOVE_FILTER);\nexport const searchTerm = payloadActionGenerator(SEARCH_TERM);\nexport const setFollowedRequestsInfo = payloadActionGenerator(SET_FOLLOWED_REQUESTS_INFO);\nexport const updateResultList = payloadActionGenerator(UPDATE_RESULT_LIST);\nexport const loadCurrentRFP = payloadActionGenerator(LOAD_CURRENT_RFP);\nexport const updateCurrentRFP = payloadActionGenerator(UPDATE_CURRENT_RFP);\nexport const setCurrentCompany = payloadActionGenerator(SET_CURRENT_COMPANY);\nexport const setCompanies = payloadActionGenerator(SET_COMPANIES);\nexport const setFoundations = payloadActionGenerator(SET_FOUNDATIONS);\nexport const setGovernmentOrganizations = payloadActionGenerator(SET_GOVERNMENT_ORGANIZATIONS);\nexport const setLoadingCurrentCompany = payloadActionGenerator(LOADING_CURRENT_COMPANY);\nexport const setLoadCompanyPartner = payloadActionGenerator(SET_LOAD_COMPANY_PARTNER);\nexport const setLoadCompanyInterest = payloadActionGenerator(SET_LOAD_COMPANY_INTEREST);\nexport const setCompanyInterest = payloadActionGenerator(SET_COMPANY_INTEREST);\nexport const setCompanyInfo = payloadActionGenerator(SET_COMPANY_INFO);\nexport const setLoadCompanyInfo = payloadActionGenerator(SET_LOAD_COMPANY_INFO);\nexport const loadDeleteCompanyInterestPartner = payloadActionGenerator(\n  LOAD_DELETE_COMPANY_INTEREST_PARTNER\n);\nexport const setInvitedUsers = payloadActionGenerator(SET_INVITED_USERS);\nexport const setLoadInvitedUsers = payloadActionGenerator(SET_LOAD_INVITED_USERS);\nexport const setUniversityTeamMembers = payloadActionGenerator(SET_UNIVERSITY_TEAM_MEMBERS);\nexport const setCompanyLogo = payloadActionGenerator(SET_COMPANY_LOGO);\nexport const setCompanyVideo = payloadActionGenerator(SET_COMPANY_VIDEO);\nexport const setLastViewedRFPIdentifier = payloadActionGenerator(SET_LAST_VIEWED_RFP_IDENTIFIER);\n\nexport const loadCompany = (identifier) => {\n  return async (dispatch) => {\n    dispatch(setLoadingCurrentCompany(true));\n\n    try {\n      const responseJson = await api.get(`/company_info/${identifier}`);\n\n      if (responseJson.data) {\n        dispatch(setCurrentCompany(responseJson.data.company));\n        dispatch(setLoadingCurrentCompany(false));\n        return responseJson.data;\n      }\n\n      window.location.href = marketplacePath();\n    } catch (error) {\n      if (error.response.status === 401) {\n        const accessCode = prompt(\"Please enter the access code for this page\");\n\n        if (accessCode) {\n          const responseJson = await api\n            .get(`/company_info/${identifier}`, {\n              params: {\n                access_code: accessCode,\n              },\n            })\n            .catch((secondError) => {\n              if (secondError.response.status === 401) {\n                alert(\"Incorrect password\");\n                window.location.href = marketplacePath();\n              } else {\n                throw secondError;\n              }\n            });\n\n          if (responseJson?.data.company) {\n            dispatch(setCurrentCompany(responseJson.data.company));\n            dispatch(setLoadingCurrentCompany(false));\n            return responseJson.data.company;\n          }\n        } else {\n          window.location.href = marketplacePath();\n        }\n      } else {\n        throw error;\n      }\n    }\n  };\n};\n\nexport const fetchFollowedRequestsInfo = () => {\n  return async (dispatch) => {\n    try {\n      const responseJson = await axios.get(\"/followed_requests_info\", {\n        headers: {\n          Accept: \"application/json\",\n        },\n      });\n\n      dispatch(setFollowedRequestsInfo(responseJson.data.followed_requests_info));\n    } catch (err) {\n      console.log(err);\n    }\n  };\n};\n\nexport const fetchInvitedUsers = (organizationId, role) => {\n  return async (dispatch) => {\n    dispatch(setLoadInvitedUsers(true));\n    try {\n      const responseJson = await api.get(\"/invited_users\", {\n        params: {\n          organization_id: organizationId,\n          role,\n        },\n      });\n      dispatch(setInvitedUsers(responseJson.data));\n    } catch (err) {\n      dispatch(setLoadInvitedUsers(false));\n    }\n    dispatch(setLoadInvitedUsers(false));\n  };\n};\nexport const fetchUniversityMembers = (university_id) => {\n  return async (dispatch) => {\n    const responseJson = await axios.get(\n      \"/university_team\",\n      {\n        params: { organization: university_id },\n      },\n      {\n        headers: {\n          Accept: \"application/json\",\n        },\n      }\n    );\n    dispatch(setUniversityTeamMembers(responseJson.data));\n  };\n};\n","import { RootState } from \"@redux/store\";\nimport { getUser } from \"@requests/users\";\nimport { emptyActionGenerator, payloadActionGenerator } from \"@utils/redux\";\nimport { authenticityToken } from \"@utils/requests\";\nimport axios from \"axios\";\nimport { AnyAction } from \"redux\";\nimport { ThunkDispatch } from \"redux-thunk\";\n\nexport const SET_CURRENT_USER = \"SET_CURRENT_USER\";\nexport const LOAD_CURRENT_USER = \"LOAD_CURRENT_USER\";\nexport const SET_PATENTS = \"SET_PATENTS\";\nexport const LOAD_PATENTS = \"LOAD_PATENTS\";\nexport const SET_PUBLICATIONS = \"SET_PUBLICATIONS\";\nexport const LOAD_PUBLICATIONS = \"LOAD_PUBLICATIONS\";\nexport const SET_FUNDINGS = \"SET_FUNDINGS\";\nexport const LOAD_FUNDINGS = \"LOAD_FUNDINGS\";\nexport const TOGGLE_LOGIN_MODAL = \"TOGGLE_LOGIN_MODAL\";\nexport const START_DELETE_PROPOSAL = \"START_DELETE_PROPOSAL\";\nexport const FINISH_DELETE_PROPOSAL = \"FINISH_DELETE_PROPOSAL\";\nexport const LOADING_RESEARCH_INTEREST_FOLLOWS = \"LOADING_RESEARCH_INTEREST_FOLLOWS\";\nexport const UPDATE_RESEARCH_INTEREST_FOLLOWS = \"UPDATE_RESEARCH_INTEREST_FOLLOWS\";\nexport const SET_UNREAD_COUNT = \"SET_UNREAD_COUNT\";\nexport const SET_PROPOSAL_EVAL = \"SET_PROPOSAL_EVAL\";\nexport const UPDATE_PROFILE_IMAGE = \"UPDATE_PROFILE_IMAGE\";\nexport const FINISH_FOLLOW_UNFOLLOW_COMPANY = \"FINISH_FOLLOW_UNFOLLOW_COMPANY\";\n\nexport const setCurrentUser = payloadActionGenerator(SET_CURRENT_USER);\nexport const loadCurrentUser = emptyActionGenerator(LOAD_CURRENT_USER);\nexport const setPatents = payloadActionGenerator(SET_PATENTS);\nexport const loadPatents = emptyActionGenerator(LOAD_PATENTS);\nexport const setPublications = payloadActionGenerator(SET_PUBLICATIONS);\nexport const loadPublications = emptyActionGenerator(LOAD_PUBLICATIONS);\nexport const setFundings = payloadActionGenerator(SET_FUNDINGS);\nexport const loadFundings = emptyActionGenerator(LOAD_FUNDINGS);\nexport const toggleLoginModal = payloadActionGenerator(TOGGLE_LOGIN_MODAL);\nexport const startDeleteProposal = payloadActionGenerator(START_DELETE_PROPOSAL);\nexport const finishDeleteProposal = payloadActionGenerator(FINISH_DELETE_PROPOSAL);\nexport const loadingResearchInterestFollows = payloadActionGenerator(\n  LOADING_RESEARCH_INTEREST_FOLLOWS\n);\nexport const updateResearchInterestFollows = payloadActionGenerator(\n  UPDATE_RESEARCH_INTEREST_FOLLOWS\n);\nexport const setUnreadCount = payloadActionGenerator(SET_UNREAD_COUNT);\nexport const setProposalEval = payloadActionGenerator(SET_PROPOSAL_EVAL);\nexport const updateProfileImage = payloadActionGenerator(UPDATE_PROFILE_IMAGE);\nexport const finishFollowUnfollowCompany = payloadActionGenerator(FINISH_FOLLOW_UNFOLLOW_COMPANY);\n\nexport const fetchCurrentUser = (fetchFromSession = false) => {\n  return async (dispatch: ThunkDispatch<RootState, any, AnyAction>) => {\n    dispatch(loadCurrentUser());\n\n    if (!gon.current_user_id) {\n      dispatch(setCurrentUser({ profile_info: {} }));\n      return { profile_info: {} };\n    }\n\n    const data = await getUser(gon.current_user_id, fetchFromSession);\n    const user = data?.user;\n\n    if (!user) {\n      dispatch(setCurrentUser({ profile_info: {} }));\n      return { profile_info: {} };\n    }\n\n    dispatch(setCurrentUser(user));\n    return user;\n  };\n};\n\nexport const fetchPatents = (profileInfoId: number) => {\n  return async (dispatch) => {\n    dispatch(loadPatents());\n\n    const responseJson = await axios.get(`/patents?profile_info_id=${profileInfoId}`, {\n      headers: {\n        Accept: \"application/json\",\n      },\n    });\n\n    dispatch(setPatents(responseJson.data.patents));\n\n    return responseJson.data.patents;\n  };\n};\n\nexport const fetchPublications = (profileInfoId: number) => {\n  return async (dispatch) => {\n    dispatch(loadPublications());\n\n    const responseJson = await axios.get(`/publications?profile_info_id=${profileInfoId}`, {\n      headers: {\n        Accept: \"application/json\",\n      },\n    });\n\n    dispatch(setPublications(responseJson.data.publications));\n\n    return responseJson.data.publications;\n  };\n};\n\nexport const fetchFundings = (profileInfoId: number) => {\n  return async (dispatch) => {\n    dispatch(loadFundings());\n\n    const responseJson = await axios.get(`/fundings?profile_info_id=${profileInfoId}`, {\n      headers: {\n        Accept: \"application/json\",\n      },\n    });\n\n    dispatch(setFundings(responseJson.data.fundings));\n\n    return responseJson.data.fundings;\n  };\n};\n\nexport const deleteProposal = (proposalId) => {\n  return async (dispatch) => {\n    dispatch(startDeleteProposal());\n    const url = `/proposals/${proposalId}`;\n\n    try {\n      await axios.delete(url, {\n        headers: {\n          \"X-CSRF-Token\": authenticityToken() as any,\n          Accept: \"application/json\",\n        },\n      });\n\n      dispatch(finishDeleteProposal({ proposalId }));\n    } catch (err) {\n      dispatch(finishDeleteProposal());\n    }\n  };\n};\n\nexport const checkUnread = () => {\n  return async (dispatch) => {\n    const responseJson = await axios.get(`/check_unread`);\n    dispatch(setUnreadCount(responseJson.data.unread_count));\n  };\n};\n","import { WINDOW_DIMENSIONS } from \"@constants\";\n\nconst { DESKTOP, MOBILE, TABLET, TABLET_LANDSCAPE } = WINDOW_DIMENSIONS;\n\nexport const UPDATE_WINDOW_DIMENSION = \"UPDATE_WINDOW_DIMENSION\";\n\nexport const updateWindowDimension = () => (dispatch) =>\n  dispatch({\n    type: UPDATE_WINDOW_DIMENSION,\n    payload: {\n      width: window.innerWidth,\n      height: window.innerHeight,\n      isMobile: window.innerWidth <= MOBILE,\n      isTablet: window.innerWidth <= TABLET,\n      isDesktop: window.innerWidth >= DESKTOP,\n      isTabletLandscape: window.innerWidth <= TABLET_LANDSCAPE,\n    },\n  });\n","import { getCookie } from \"@utils/requests\";\nimport request from \"./request\";\n\nconst PORTAL_ID = \"6895929\";\n\n// https://legacydocs.hubspot.com/docs/methods/forms/submit_form\nexport const submitForm = async (formId, fields) =>\n  request.post(`https://api.hsforms.com/submissions/v3/integration/submit/${PORTAL_ID}/${formId}`, {\n    fields,\n    context: {\n      hutk: getCookie(\"hubspotutk\"),\n    },\n  });\n\n// track registration\nexport const trackRegistration = async (userInfo) => {\n  const { email, first_name, last_name, role } = userInfo;\n\n  // Scientist Registration\n  let formId = \"5fb3e11f-bf56-4b75-9a0b-632e5888e33f\";\n\n  if (role === 1) {\n    // Sponsor Registration\n    formId = \"de8f6135-4e40-4d48-9b48-b5dcd36fd945\";\n  } else if (role === 2) {\n    // University Admin Registration\n    formId = \"9091aea2-ed31-496e-97ee-eed2ff1f6b95\";\n  }\n\n  if (\n    window.location.host.includes(\"halocures.com\") ||\n    window.location.host.includes(\"halo.science\")\n  ) {\n    try {\n      const fields = [\n        { name: \"email\", value: email },\n        { name: \"firstname\", value: first_name },\n        { name: \"lastname\", value: last_name },\n      ];\n\n      await submitForm(formId, fields);\n    } catch (err) {\n      console.error(err);\n    }\n  }\n};\n\nexport const sponsorOnboarded = async (userInfo) => {\n  const { email } = userInfo;\n\n  // Sponsor Registration\n  const formId = \"de8f6135-4e40-4d48-9b48-b5dcd36fd945\";\n\n  if (\n    window.location.host.includes(\"halocures.com\") ||\n    window.location.host.includes(\"halo.science\")\n  ) {\n    try {\n      const fields = [{ name: \"email\", value: email }];\n\n      await submitForm(formId, fields);\n    } catch (err) {\n      console.error(err);\n    }\n  }\n};\n","import { request_for_proposals_notification_path } from \"@routes/routes\";\nimport {\n  NotificationRfpsResponse,\n  NotificationSettingsShowResponse,\n  NotificationUserInfoResponse,\n} from \"@tsTypes/index\";\nimport api from \"./request\";\n\nexport const fetchNotificationSettings = async (\n  userId: number\n): Promise<NotificationSettingsShowResponse> => {\n  const responseJson = await api.get(`/notification_settings/${userId}`);\n  return responseJson.data;\n};\n\nexport const updateNotificationSetting = async (userId: number, key: string, enabled: boolean) => {\n  await api.patch(`/notification_settings/${userId}`, {\n    key: key,\n    enabled: enabled,\n  });\n};\n\nexport const fetchUserInfoFromNotification = async (\n  notificationId: string\n): Promise<NotificationUserInfoResponse> => {\n  const responseJson = await api.get(`/notifications/${notificationId}/user_info`);\n  return responseJson.data;\n};\n\nexport const fetchRequestForProposalsFromNotification = async (\n  notificationId: string\n): Promise<NotificationRfpsResponse> => {\n  const responseJson = await api.get(request_for_proposals_notification_path(notificationId));\n  return responseJson.data;\n};\n","import { ReviewerDashboardRequest, RfpPageResponse, RfpsShowResponse } from \"@tsTypes/index\";\nimport { RfpPartnershipModel } from \"@tsTypes/rfps\";\nimport { stringArrayToBulletText } from \"@utils/textUtils\";\nimport { RfpSubmitData } from \"src/views/RfpRequestForm/RfpRequestForm\";\nimport request from \"./request\";\n\nexport const getRfpForRfpPage = async (\n  slug: string,\n  accessCode?: string | null\n): Promise<RfpPageResponse> => {\n  const response = await request.get(`/rfps/${slug}`, {\n    params: {\n      for_rfp_page: true,\n      access_code: accessCode,\n    },\n  });\n\n  return response.data;\n};\n\nexport const getRequestForProposalByRequestId = async (\n  requestId: number\n): Promise<RfpsShowResponse | null> => {\n  try {\n    const response = await request.get(`/rfps/${requestId}`, {\n      params: { by_id: true },\n    });\n\n    return response.data;\n  } catch {\n    return null;\n  }\n};\n\nexport const getRfpByRequestSlug = async (requestSlug: string): Promise<RfpsShowResponse> => {\n  const response = await request.get(`/rfps/${requestSlug}`);\n  return response.data;\n};\n\nexport const createOrUpdateRfp = async (\n  rfpData: RfpSubmitData\n): Promise<ReviewerDashboardRequest | null> => {\n  let response: { data: ReviewerDashboardRequest };\n\n  const formattedData = {\n    is_private: rfpData.isPrivate,\n    company_research_interest_id: rfpData.areaOfInterestId,\n    title: rfpData.title,\n    background: rfpData.background,\n    looking_for: rfpData.lookingFor,\n    request_solutions: rfpData.requestSolutions,\n    request_requirements: rfpData.requestRequirements.map((req) => ({\n      description: req.description,\n      allow_attachments: req.allowAttachments,\n    })),\n    preferred_requirements: stringArrayToBulletText(rfpData.niceToHaveRequirements),\n    out_of_scope: stringArrayToBulletText(rfpData.outOfScope),\n    disciplines: rfpData.disciplines,\n    areas_of_expertise: rfpData.areasOfExpertise,\n    partnership_models: rfpData.partnershipModels,\n    trl_range: rfpData.trlRange,\n    sponsored_research: rfpData.partnershipModels?.includes(RfpPartnershipModel.SPONSORED_RESEARCH)\n      ? rfpData.sponsoredResearch\n      : \"\",\n    gift: rfpData.partnershipModels?.includes(RfpPartnershipModel.GIFT) ? rfpData.gift : \"\",\n    expertise: rfpData.expertise,\n    tools_and_technology: rfpData.toolsAndTechnology,\n    compounds_and_reagents: rfpData.compoundsAndReagents,\n    facilities_and_services: rfpData.facilitiesAndServices,\n    data: rfpData.data,\n    market_access: rfpData.marketAccess,\n    networking: rfpData.networking,\n    submitted: rfpData.isSubmitted,\n    visible_on_marketplace: !rfpData.forInternalEmployees && rfpData.visibleOnMarketplace,\n    visible_on_company_page: !rfpData.forInternalEmployees && rfpData.visibleOnCompanyPage,\n    visible_on_notification_campaign:\n      !rfpData.forInternalEmployees && rfpData.visibleOnNotificationCampaign,\n    has_access_code: rfpData.forInternalEmployees || rfpData.hasAccessCode,\n    for_internal_employees: rfpData.forInternalEmployees,\n    partner_types: rfpData.partnerTypes,\n  };\n\n  Object.keys(formattedData).forEach((key) => {\n    if (typeof formattedData[key] === \"string\") {\n      formattedData[key] = formattedData[key].trim();\n    }\n  });\n\n  try {\n    if (rfpData.id) {\n      response = await request.put(`/rfps/${rfpData.id}`, {\n        rfp: formattedData,\n      });\n    } else {\n      response = await request.post(`/rfps`, {\n        rfp: formattedData,\n      });\n    }\n\n    return response.data;\n  } catch (_) {\n    return null;\n  }\n};\n\nexport const exportRequestForProposal = (rfpId, rfpIdentifier) => {\n  request\n    .get(`/rfps/export/${rfpId}.docx`, {\n      headers: {\n        Accept: \"application/octet-stream\",\n      },\n      responseType: \"blob\",\n    })\n    .then((response) => {\n      if (response.status !== 200) {\n        return;\n      }\n\n      const url = window.URL.createObjectURL(\n        new Blob([response.data], {\n          type: \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\n        })\n      );\n\n      const link = document.createElement(\"a\");\n      link.href = url;\n      link.setAttribute(\"download\", `${rfpIdentifier}.docx`);\n      document.body.appendChild(link);\n      link.click();\n      link.parentNode?.removeChild(link);\n    });\n};\n\nexport const joinRfpWaitlist = async (\n  requestId: number,\n  {\n    email,\n    firstName,\n    lastName,\n  }: {\n    email?: string;\n    firstName?: string;\n    lastName?: string;\n  }\n): Promise<void> => {\n  const response = await request.post(`/rfps/${requestId}/waitlist`, {\n    email,\n    first_name: firstName,\n    last_name: lastName,\n  });\n\n  return response.data;\n};\n","import toast from \"@components/Toast\";\nimport {\n  company_network_scientists_path,\n  search_suggest_company_network_scientists_path,\n} from \"@routes/routes\";\nimport { ConnectionType } from \"@tsTypes/__generated__/enums/connection_type\";\nimport { CompanyNetworkScientistsIndexResponse } from \"@tsTypes/company_network_scientists\";\nimport {\n  CompanyMember,\n  SponsorProfilesIndexResponse,\n  SponsorTeamMembersResponse,\n  UpdatePendingReviewTeamMembershipStatusResponse,\n  UpgradeToSuperAdminResponse,\n} from \"@tsTypes/index\";\nimport appsignal from \"@utils/appsignal\";\nimport { AxiosResponse } from \"axios\";\nimport request from \"./request\";\n\nexport const getCompanyMembers = async (\n  companyId: number\n): Promise<SponsorProfilesIndexResponse> => {\n  const response = await request.get(\"/sponsor_profiles\", {\n    params: {\n      company_id: companyId,\n    },\n  });\n\n  return response.data;\n};\n\nexport const getFilteredCompanyMembers = async (\n  options: {\n    keywordFilter: string[];\n    companyRoleFilter: string[];\n    requestRoleFilter: string[];\n  },\n  abortSignal: AbortSignal\n): Promise<SponsorTeamMembersResponse> => {\n  try {\n    const response = await request.get(\"/sponsor_profiles/sponsor_team_members\", {\n      signal: abortSignal,\n      params: {\n        options: {\n          keyword_filter: options.keywordFilter,\n          company_role_filter: options.companyRoleFilter,\n          request_role_filter: options.requestRoleFilter,\n        },\n      },\n    });\n\n    return response.data;\n  } catch (error) {\n    appsignal.sendError(error, (span) => {\n      span.setAction(\"sponsors#getFilteredCompanyMembers\");\n      span.setTags({\n        options: JSON.stringify(options),\n      });\n    });\n    return {\n      members: [],\n      count: 0,\n    };\n  }\n};\n\nexport const getSponsorTeamKeywordOptions = async (): Promise<{\n  areas_of_expertise: string[];\n}> => {\n  try {\n    const response = await request.get(\"/sponsor_profiles/sponsor_team_keyword_options\");\n    return response.data.keyword_options;\n  } catch (error) {\n    appsignal.sendError(error, (span) => {\n      span.setAction(\"sponsors#getSponsorTeamKeywordOptions\");\n    });\n    return {\n      areas_of_expertise: [],\n    };\n  }\n};\n\nexport const upgradeToPremium = async (userId: number): Promise<CompanyMember | null> => {\n  try {\n    const response = await request.post(\"/company_roles/upgrade_to_premium\", {\n      user_id: userId,\n    });\n    return response.data;\n  } catch (error) {\n    toast.error(error.response.data.error);\n    appsignal.sendError(error, (span) => {\n      span.setAction(\"sponsors#upgradeToPremium\");\n      span.setTags({\n        userId: userId.toString(),\n      });\n    });\n    return null;\n  }\n};\n\nexport const upgradeToStandardLicense = async (userId: number): Promise<CompanyMember | null> => {\n  try {\n    const response = await request.post(\"/company_roles/upgrade_to_standard_license\", {\n      user_id: userId,\n    });\n    return response.data;\n  } catch (error) {\n    toast.error(error.response.data.error);\n    appsignal.sendError(error, (span) => {\n      span.setAction(\"sponsors#upgradeToStandardLicense\");\n      span.setTags({\n        userId: userId.toString(),\n      });\n    });\n    return null;\n  }\n};\n\nexport const upgradeToAdmin = async (userId: number): Promise<CompanyMember | null> => {\n  try {\n    const response = await request.post(\"/company_roles/upgrade_to_admin\", {\n      user_id: userId,\n    });\n    return response.data;\n  } catch (error) {\n    toast.error(error.response.data.error);\n    appsignal.sendError(error, (span) => {\n      span.setAction(\"sponsors#upgradeToAdmin\");\n      span.setTags({\n        userId: userId.toString(),\n      });\n    });\n    return null;\n  }\n};\n\nexport const downgradeFromAdmin = async (userId: number): Promise<CompanyMember | null> => {\n  try {\n    const response = await request.post(\"/company_roles/downgrade_from_admin\", {\n      user_id: userId,\n    });\n    return response.data;\n  } catch (error) {\n    toast.error(error.response.data.error);\n    appsignal.sendError(error, (span) => {\n      span.setAction(\"sponsors#downgradeFromAdmin\");\n      span.setTags({\n        userId: userId.toString(),\n      });\n    });\n    return null;\n  }\n};\n\nexport const upgradeToSuperAdmin = async (\n  userId: number\n): Promise<UpgradeToSuperAdminResponse[\"users\"] | null> => {\n  try {\n    const response = await request.post(\"/company_roles/upgrade_to_super_admin\", {\n      user_id: userId,\n    });\n    return response.data.users;\n  } catch (error) {\n    toast.error(error.response.data.error);\n    appsignal.sendError(error, (span) => {\n      span.setAction(\"sponsors#upgradeToSuperAdmin\");\n      span.setTags({\n        userId: userId.toString(),\n      });\n    });\n    return null;\n  }\n};\n\nexport const updatePendingReviewTeamMembership = async (\n  sid: string,\n  isApprovedForLicense: string | null\n): Promise<UpdatePendingReviewTeamMembershipStatusResponse | null> => {\n  try {\n    const response = await request.post(\"/pending_review_team_memberships/update_status\", {\n      sid,\n      is_approved_for_license: isApprovedForLicense,\n    });\n    return response.data;\n  } catch (e) {\n    toast.error(e.response.data.error);\n    if (e.response.status !== 401) {\n      appsignal.sendError(e, (span) => {\n        span.setAction(\"sponsors#updatePendingReviewTeamMembership\");\n        span.setTags({\n          sid,\n        });\n      });\n    }\n    return null;\n  }\n};\n\nexport const getNetworkScientists = async (options: {\n  pageNumber: number;\n  sortBy?: \"RECENT\" | \"ALPHABETICAL\" | \"DEFAULT\";\n  searchFilter?: string[];\n  countryFilter?: string[];\n  institutionTypeFilter?: string[];\n  institutionNameFilter?: string[];\n  requestIdFilter?: string[];\n  statusFilter?: string | null;\n  keywordFilter?: string[];\n  submittersOnlyFilter?: boolean;\n  connectionFilter?: ConnectionType;\n  accessToken?: string | null;\n}): Promise<CompanyNetworkScientistsIndexResponse> => {\n  const params: Record<string, any> = {\n    for_scientist_network: true,\n    options: {\n      order_by: options.sortBy ?? \"DEFAULT\",\n      page_number: options.pageNumber,\n      search_filter: options.searchFilter,\n      country_filter: options.countryFilter,\n      institution_type_filter: options.institutionTypeFilter,\n      institution_name_filter: options.institutionNameFilter,\n      request_id_filter: options.requestIdFilter,\n      status_filter: options.statusFilter,\n      keyword_filter: options.keywordFilter,\n      submitters_only_filter: options.submittersOnlyFilter,\n      connection_filter: options.connectionFilter,\n    },\n  };\n  if (options.accessToken) {\n    params.access_token = options.accessToken;\n  }\n  const response = await request.get<CompanyNetworkScientistsIndexResponse>(\n    company_network_scientists_path(),\n    {\n      params,\n    }\n  );\n  return response.data;\n};\n\nexport const getScientistNetworkOptions = async (): Promise<{\n  keywords: {\n    disciplines: string[];\n    areas_of_expertise: string[];\n  };\n  institution_names: {\n    all: string[];\n    universities: string[];\n    startups: string[];\n  };\n}> => {\n  try {\n    const response = await request.get(search_suggest_company_network_scientists_path());\n    return response.data;\n  } catch (e) {\n    appsignal.sendError(e, (span) => {\n      span.setAction(\"sponsors#getNetworkScientistOptions\");\n    });\n    return {\n      keywords: {\n        disciplines: [],\n        areas_of_expertise: [],\n      },\n      institution_names: {\n        all: [],\n        universities: [],\n        startups: [],\n      },\n    };\n  }\n};\n\nexport const sponsorShareScientist = async (data: {\n  scientist_id: number;\n  email: string;\n  message: string;\n}): Promise<AxiosResponse> => request.post(\"/notifications/sponsor_share_scientist\", data);\n","import { UniversityMembersOptionsResponse, UniversityMembersResponse } from \"@tsTypes/index\";\nimport appsignal from \"@utils/appsignal\";\nimport { SORT_BY_OPTIONS } from \"src/views/UniversityTeam/searchOptions\";\nimport request from \"./request\";\n\nexport const getUniversityMembers = async (\n  options: {\n    facultyFilter: boolean;\n    nameFilter: string[];\n    titleFilter: string[];\n    keywordFilter: string[];\n    sortBy: typeof SORT_BY_OPTIONS[number][\"value\"];\n  },\n  abortSignal: AbortSignal\n): Promise<UniversityMembersResponse> => {\n  try {\n    const response = await request.get(\"/universities/members\", {\n      signal: abortSignal,\n      params: {\n        options: {\n          faculty_filter: options.facultyFilter,\n          name_filter: options.nameFilter,\n          title_filter: options.titleFilter,\n          keyword_filter: options.keywordFilter,\n          sort_by: options.sortBy ?? \"NAME\",\n        },\n      },\n    });\n\n    return response.data;\n  } catch (e) {\n    appsignal.sendError(e, (span) => {\n      span.setAction(\"universities#getUniversityMembers\");\n    });\n    return { members: [], count: 0 };\n  }\n};\n\nexport const getUniversityMembersTabCounts = async (): Promise<{\n  faculty_count: number;\n  admin_count: number;\n}> => {\n  try {\n    const response = await request.get(\"/universities/members/tab_counts\");\n\n    return response.data;\n  } catch (e) {\n    appsignal.sendError(e, (span) => {\n      span.setAction(\"universities#getUniversityMembersTabCounts\");\n    });\n    return { faculty_count: 0, admin_count: 0 };\n  }\n};\n\nexport const getUniversityMembersOptions = async (): Promise<UniversityMembersOptionsResponse> => {\n  try {\n    const response = await request.get(\"/universities/members/options\");\n\n    return response.data;\n  } catch (e) {\n    appsignal.sendError(e, (span) => {\n      span.setAction(\"universities#getUniversityMembersOptions\");\n    });\n    return {\n      name_options: [],\n      title_options: [],\n      keyword_options: {\n        disciplines: [],\n        areas_of_expertise: [],\n      },\n    };\n  }\n};\n\nexport const sendInviteFromUniversityAdmin = async ({\n  email,\n  message,\n}: {\n  email: string;\n  message: string;\n}): Promise<boolean> => {\n  try {\n    const response = await request.post(\"/notifications/invite_from_university_admin\", {\n      to_emails: email,\n      message,\n    });\n\n    if (!response.data.success) {\n      throw new Error(\"Failed to send invite\");\n    }\n\n    return true;\n  } catch (e) {\n    appsignal.sendError(e, (span) => {\n      span.setAction(\"universities#sendInviteFromUniversityAdmin\");\n    });\n    return false;\n  }\n};\n\nexport const sendUniversityAdminInviteToSubmit = async ({\n  toUserIds,\n  requestIds,\n}: {\n  toUserIds: number[];\n  requestIds: number[];\n}): Promise<boolean> => {\n  try {\n    await request.post(\"/notifications/university_admin_invite_to_submit\", {\n      to_user_ids: toUserIds,\n      request_ids: requestIds,\n    });\n    return true;\n  } catch (e) {\n    appsignal.sendError(e, (span) => {\n      span.setAction(\"universities#sendUniversityAdminInviteToSubmit\");\n    });\n    return false;\n  }\n};\n","import { Request } from \"@tsTypes/schema\";\nimport request from \"./request\";\n\nexport const followRequest = async (requestId: number): Promise<Request> => {\n  const response = await request.post(\"/follow_request\", {\n    request_id: requestId,\n  });\n\n  return response.data.followed_request;\n};\n\nexport const unfollowRequest = async (requestId: number): Promise<void> => {\n  await request.post(\"/unfollow_request\", {\n    request_id: requestId,\n  });\n};\n","import { Request, UserRequestPreference } from \"@tsTypes/schema.js\";\nimport * as Routes from \"../routes/routes.js\";\nimport { UserRequestPreferenceSource } from \"../tsTypes/__generated__/enums/user_request_preference_source\";\nimport api from \"./request\";\n\ntype UserRequestPreferenceResponse = Pick<UserRequestPreference, \"id\" | \"is_interested\"> & {\n  request?: Pick<Request, \"id\" | \"title\">;\n};\n\nexport const getUserRequestPreference = async (\n  requestId: number\n): Promise<UserRequestPreferenceResponse | null> => {\n  try {\n    const response = await api.get(`/requests/${requestId}/user_request_preference`);\n    return response.data;\n  } catch (error) {\n    // Return null if the preference doesn't exist or there's an error\n    return null;\n  }\n};\n\nexport const deleteUserRequestPreference = async (requestId: number) => {\n  await api.delete(`/requests/${requestId}/user_request_preference`);\n};\n\nexport const updateUserRequestPreference = async ({\n  requestId,\n  signedNotificationId,\n  isInterested = true,\n  source = UserRequestPreferenceSource.Unknown,\n  reason,\n}: {\n  requestId: number;\n  isInterested?: boolean;\n  source?: UserRequestPreferenceSource;\n  reason?: string;\n  signedNotificationId?: string;\n}) => {\n  const payload: Record<string, any> = {\n    is_interested: isInterested,\n    source: source,\n  };\n\n  // Only include if provided\n  if (signedNotificationId) payload.signed_notification_id = signedNotificationId;\n  if (reason) payload.reason = reason;\n\n  const responseJson = await api.post(\n    Routes.update_request_interests_path({\n      id: requestId,\n    }),\n    payload\n  );\n\n  return responseJson.data;\n};\n","import { marketplacePath } from \"@routes/utils\";\nimport { SegmentEventName } from \"@tsTypes/__generated__/enums\";\nimport { ScientistCurrentUser, UsersShowResponse } from \"@tsTypes/index\";\nimport { UserRole } from \"@tsTypes/users\";\nimport { track } from \"@utils/appUtils\";\nimport axios, { AxiosError } from \"axios\";\nimport { UserDetailedType } from \"src/views/Onboarding/OnboardingContainer\";\nimport { HOW_DID_YOU_HEAR_ABOUT_US_OTHER_OPTION } from \"src/views/Onboarding/Step3/Step3\";\nimport request from \"./request\";\n\nexport class UserNotVerifiedError extends Error {}\n\nexport const getUser = async (\n  userId: number,\n  fetchFromSession = false\n): Promise<UsersShowResponse | null> => {\n  try {\n    const response = fetchFromSession\n      ? await request.get(\"/me\", {\n          // The timestamp param is added to force a new request as opposed to using a cached response\n          params: { timestamp: Number(new Date()) },\n        })\n      : await request.get(`/users/${userId}`);\n\n    return response.data;\n  } catch (error) {\n    switch (error.response?.status) {\n      case 401:\n      case 404:\n        break;\n      default:\n        if (window.location.pathname !== \"/\") {\n          console.error(\"Redirecting to / since after failure.\");\n          window.location.href = \"/\";\n        }\n    }\n    return null;\n  }\n};\n\nexport const signOut = async () => {\n  await request.delete(\"/sign_out\");\n  // This needs to use window.location.href instead of history.push to prevent\n  // accessing the previous session via the browser cache\n  window.location.href = marketplacePath();\n};\n\nexport const signIn = async ({ email, password }) =>\n  request.post(\"/users/sign_in\", {\n    user: {\n      email,\n      password,\n    },\n  });\n\nexport const register = async ({\n  email,\n  password,\n  firstName,\n  lastName,\n  role,\n  invitedUserId = undefined,\n}: {\n  email: string;\n  password: string;\n  firstName: string;\n  lastName: string;\n  role?: UserRole;\n  invitedUserId?: string;\n}) =>\n  request.post(\"/users\", {\n    user: {\n      email,\n      password,\n      first_name: firstName,\n      last_name: lastName,\n      role,\n      invited_user_id: invitedUserId,\n    },\n  });\n\nexport const cancelSignUp = async (source) => {\n  track(SegmentEventName.Abandon, {\n    react_component: \"OnboardingContainer\",\n    source,\n  });\n  return request.delete(\"/onboarding\");\n};\n\nexport const onboard = ({\n  userType,\n  profileInfo,\n  googleScholarAuthorUserId = null,\n  detailedType = null,\n  commenterInviteRequest = null,\n}: {\n  userType;\n  profileInfo;\n  googleScholarAuthorUserId?: number | null;\n  detailedType?: UserDetailedType | null;\n  commenterInviteRequest?: string | null;\n}) => {\n  let data;\n\n  switch (userType) {\n    case \"scientist\":\n      data = {\n        account_type: 0,\n        how_did_you_hear_about_us:\n          profileInfo.howDidYouHearAboutUs === HOW_DID_YOU_HEAR_ABOUT_US_OTHER_OPTION\n            ? profileInfo.howDidYouHearAboutUsOther\n            : profileInfo.howDidYouHearAboutUs,\n        detailed_type: detailedType,\n        profile_info: {\n          title: profileInfo.role,\n          disciplines: profileInfo.disciplines,\n          areas_of_expertise: profileInfo.areasOfExpertise,\n          ...(profileInfo?.university && {\n            university: profileInfo?.university,\n          }),\n        },\n        ...(!profileInfo?.university && {\n          startup: {\n            startup_name: profileInfo.companyName,\n            url: encodeURI(profileInfo.companyURL),\n            primary_affiliation: true,\n          },\n        }),\n        ...(profileInfo?.country_code && {\n          country_code: profileInfo?.country_code,\n        }),\n        google_scholar_author_user_id: googleScholarAuthorUserId,\n      };\n      break;\n    case \"sponsor\":\n      data = {\n        account_type: 1,\n        how_did_you_hear_about_us:\n          profileInfo.howDidYouHearAboutUs === HOW_DID_YOU_HEAR_ABOUT_US_OTHER_OPTION\n            ? profileInfo.howDidYouHearAboutUsOther\n            : profileInfo.howDidYouHearAboutUs,\n        detailed_type: detailedType,\n        profile_info: {\n          role: profileInfo.role,\n          title: profileInfo.title,\n          areas_of_expertise: profileInfo.areasOfExpertise,\n        },\n        company: profileInfo.company,\n        ...(commenterInviteRequest && { commenter_invite_request: commenterInviteRequest }),\n      };\n      break;\n    case \"admin\":\n      data = {\n        account_type: 2,\n        how_did_you_hear_about_us:\n          profileInfo.howDidYouHearAboutUs === HOW_DID_YOU_HEAR_ABOUT_US_OTHER_OPTION\n            ? profileInfo.howDidYouHearAboutUsOther\n            : profileInfo.howDidYouHearAboutUs,\n        detailed_type: detailedType,\n        profile_info: {\n          role: profileInfo.role,\n          university: profileInfo.university,\n          university_expertise: profileInfo.universityExpertise?.join(\",\"),\n          disciplines: profileInfo.disciplines,\n        },\n        ...(profileInfo?.country_code && {\n          country_code: profileInfo?.country_code,\n        }),\n      };\n      break;\n  }\n  return request\n    .post(`/onboarding`, data)\n    .catch((error: Error | AxiosError) => {\n      if (axios.isAxiosError(error) && error?.response?.status === 403) {\n        throw new UserNotVerifiedError(error?.response?.data?.message);\n      } else {\n        throw error;\n      }\n    })\n    .then((response) => ({ ...response.data.user, viewed_tours: [] }));\n};\n\nexport const updateUserKeywords = (\n  userId: string,\n  keywords: { disciplines: string[]; areasOfExpertise: string[] }\n) => {\n  return request.put(`/users/${userId}`, {\n    disciplines: keywords.disciplines,\n    areas_of_expertise: keywords.areasOfExpertise,\n  });\n};\n\nexport const updateUserProfile = async (\n  userId: number | undefined,\n  role: UserRole,\n  profileInfo: any\n): Promise<ScientistCurrentUser> => {\n  let url = \"\";\n\n  switch (role) {\n    case UserRole.SCIENTIST:\n      url = `/scientist_profile/${userId}`;\n      break;\n    case UserRole.SPONSOR:\n      url = `/sponsor_profiles/${profileInfo.id}`;\n      break;\n    case UserRole.UNIVERSITY_ADMIN:\n      url = `/university_profiles/${profileInfo.id}`;\n      break;\n  }\n\n  const response = await request.put(url, {\n    ...profileInfo,\n    user_id: userId,\n  });\n\n  return response.data.user;\n};\n\nexport const skipUpdateUserKeywords = (userId: string) => {\n  return request.put(`/users/${userId}`, {\n    has_updated_taxonomy: true,\n  });\n};\n\nexport const resendEmailInvite = async (email: string): Promise<void> => {\n  await request.post(\"/register/resend_email_verification\", { email });\n};\n\nexport const verifyUser = async (verificationCode: string): Promise<boolean> => {\n  return (await request.post(\"/onboarding/verify\", { verification_code: verificationCode })).data\n    .success;\n};\n","/* eslint no-unused-vars: 0 */\n\n/**\n * This file was automatically generated by ruby_to_typescript.rake.\n * Do not modify it by hand.\n */\nexport enum ProposalReviewStatus {\n  PENDING = \"pending\",\n  SCREEN = \"screen\",\n  ASSESS = \"assess\",\n  MEET = \"meet\",\n  DECLINED = \"declined\",\n}\n","/* eslint no-unused-vars: 0 */\n\n/**\n * This file was automatically generated by ruby_to_typescript.rake.\n * Do not modify it by hand.\n */\nexport enum UserRequestPreferenceSource {\n  Unknown = \"Unknown\",\n  Email = \"Email\",\n  PreferenceModal = \"PreferenceModal\",\n  MarketplaceCard = \"MarketplaceCard\",\n  FollowedNotification = \"FollowedNotification\",\n  RequestPage = \"RequestPage\",\n  Internal = \"Internal\",\n}\n","import { ProposalReviewStatus } from \"./__generated__/enums/proposal_review_status\";\n\nexport enum ProposalStatus {\n  OPEN = 0,\n  QUALIFIED = 3,\n  SHORTLISTED = 4,\n  FINALIST = 5,\n  FUNDED = 6,\n  DECLINED = 2,\n}\n\n/**\n * TODO: (overload119) HALO-2148:\n * Helper to denote that the statuses can either be a ProposalStatus (V1) or a ProposalReviewStatus (V2).\n * After a full migration, this can be removed.\n */\nexport type ProposalStatusOrProposalReviewStatus = ProposalStatus | ProposalReviewStatus;\n\nexport const PROPOSAL_STATUS_VALUES = Object.values(ProposalStatus).concat(\n  Object.values(ProposalReviewStatus)\n);\n\nexport type ProposalStatusToBoolean = { [key in ProposalStatusOrProposalReviewStatus]: boolean };\n\n// Stage is based on status but has more info such as furthest status reached, etc.\n// Used exclusively for the front-end, such as in ProposalStageTag\nexport enum ProposalStageNotStatus {\n  DRAFT = 0,\n  SUBMITTED = 1,\n  QUALIFIED = 2,\n  SHORTLISTED = 3,\n  FINALIST = 4,\n  DECLINED = 5,\n  DECLINED_QUALIFIED = 6,\n  DECLINED_SHORTLISTED = 7,\n  DECLINED_FINALIST = 8,\n}\n\nexport const TECHNOLOGY_READINESS_LEVELS = {\n  1: \"Basic principles observed\",\n  2: \"Concept development\",\n  3: \"Experimental proof of concept\",\n  4: \"Validated in lab conditions\",\n  5: \"Validated in relevant environment\",\n  6: \"Demonstrated in relevant environment\",\n  7: \"Regulatory approval\",\n  8: \"Product in production\",\n  9: \"Product in market\",\n};\n\nexport interface CompanyProposalLibraryFilterOptions {\n  rfpIdFilter?: string[];\n  requestIdFilter?: string[];\n  statusFilter?: string[];\n  countryFilter?: string[];\n  keywordFilter?: string[];\n  institutionTypeFilter?: string[];\n  institutionNameFilter?: string[];\n  technologyReadinessLevelFilter?: string[];\n  searchFilter?: string[];\n  searchDirection?: \"ASC\" | \"DESC\";\n  pageNumber?: number;\n}\n","import { Proposal, RequestForExpertProposal, RequestForStartupProposal } from \"./schema\";\n\nexport type Proposaly = Proposal | RequestForStartupProposal | RequestForExpertProposal;\n\nexport enum ProposalyType {\n  PROPOSAL = \"Proposal\",\n  REQUEST_FOR_STARTUP_PROPOSAL = \"RequestForStartupProposal\",\n  REQUEST_FOR_EXPERT_PROPOSAL = \"RequestForExpertProposal\",\n}\n","// Also update in app/models/role.rb\n\nexport enum RoleName {\n  // resource: Company\n  COMPANY_MEMBER = \"company_member\",\n  COMPANY_ADMIN = \"company_admin\",\n  COMPANY_SUPER_ADMIN = \"company_super_admin\",\n\n  // resource: Request\n  REQUEST_DRAFT_EDITOR = \"request_draft_editor\",\n  REQUEST_COMMENTER = \"request_commenter\",\n  REQUEST_LEAD = \"request_lead\",\n  REQUEST_EXTERNAL_COMMENTER = \"request_expert\",\n  REQUEST_EXTERNAL_LEAD = \"request_lead_expert\",\n}\n\nexport const PRETTY_ROLE_NAMES: { [key in RoleName]: string } = {\n  [RoleName.COMPANY_MEMBER]: \"Member\",\n  [RoleName.COMPANY_ADMIN]: \"Admin\",\n  [RoleName.COMPANY_SUPER_ADMIN]: \"Super Admin\",\n  [RoleName.REQUEST_DRAFT_EDITOR]: \"Draft Editor\",\n  [RoleName.REQUEST_COMMENTER]: \"Commenter\",\n  [RoleName.REQUEST_LEAD]: \"Lead\",\n  [RoleName.REQUEST_EXTERNAL_COMMENTER]: \"External Commenter\",\n  [RoleName.REQUEST_EXTERNAL_LEAD]: \"External Lead\",\n};\n\nexport type RoleResourceType = \"Company\" | \"Request\";\n","export enum UniversityAdminRoles {\n  CORPORATE_RELATIONS = \"Corporate Relations\",\n  TECH_TRANSFER = \"Tech Transfer\",\n  RESEARCH_DEVELOPMENT = \"Research Development\",\n}\n\nexport enum UniversityExpertise {\n  HEALTHCARE_AND_LIFE_SCIENCES = \"Healthcare and Life Sciences\",\n  ENGINEERING_AND_PHYSICAL_SCIENCES = \"Engineering and Physical Sciences\",\n  NEW_VENTURE_CREATION = \"New Venture Creation\",\n  DATA_SCIENCE = \"Data Science\",\n  AGRICULTURE = \"Agriculture\",\n}\n","import { toggleLoginModal } from \"@redux/actions/profileActions\";\n\ntype UserRole = 0 | 1 | 2 | \"\";\n\n// Allow saving type-specific prev urls\n// Usage: Set different prev urls for different user types\nexport const setPrevUrlCookie = (url = window.location.href, role: UserRole = \"\") => {\n  if (window.location.pathname !== \"/\") {\n    docCookies.setItem(`prevUrl${role}`, url, 1800, \"/\");\n  }\n};\n\nexport const getPrevUrlCookie = (\n  targetLink,\n  deletePrev = true,\n  role: UserRole = \"\",\n  shouldRedirect = true\n) => {\n  // Try type-specific url before general url\n  const prevUrl = docCookies.getItem(`prevUrl${role}`) ?? docCookies.getItem(`prevUrl`);\n  if (prevUrl) {\n    if (deletePrev) {\n      // Make sure to clean up all general and type-specific urls\n      docCookies.removeItem(\"prevUrl\", \"/\");\n      docCookies.removeItem(\"prevUrl0\", \"/\");\n      docCookies.removeItem(\"prevUrl1\", \"/\");\n      docCookies.removeItem(\"prevUrl2\", \"/\");\n    }\n\n    if (!shouldRedirect) {\n      return prevUrl;\n    }\n\n    if (window.location.href === prevUrl) {\n      location.reload();\n    } else {\n      window.location.href = prevUrl;\n    }\n  } else if (shouldRedirect) {\n    window.location.href = targetLink;\n  }\n};\n\nexport const openLoginModalWithRedirect = (redirectUrl = window.location.pathname) => {\n  setPrevUrlCookie(redirectUrl);\n  return toggleLoginModal({ open: true });\n};\n","import { DropdownOption } from \"@components/library/Dropdowns/DropdownOption\";\nimport dayjs from \"dayjs\";\nimport dayjsBusinessDays from \"dayjs-business-days2\";\nimport localeData from \"dayjs/plugin/localeData\";\nimport relativeTime from \"dayjs/plugin/relativeTime\";\nimport timezone from \"dayjs/plugin/timezone\";\nimport utc from \"dayjs/plugin/utc\";\n\ndayjs.locale(\"en\");\ndayjs.extend(localeData);\ndayjs.extend(relativeTime);\ndayjs.extend(utc);\ndayjs.extend(timezone);\ndayjs.extend(dayjsBusinessDays);\n\nexport const daysUntilDate = (date) => {\n  return dayjs(date).diff(Date.now(), \"days\");\n};\n\nexport const dayDropdownOptions = (month?: string, year?: string): DropdownOption[] => {\n  let daysInMonth = 31;\n  if (month && year) {\n    daysInMonth = dayjs(`${year}-${month}`, \"YYYY-MM\").daysInMonth();\n  } else if (month) {\n    daysInMonth = dayjs(`2020-${month}`, \"YYYY-MM\").daysInMonth(); // 2020 is a leap year\n  }\n\n  const daysInMonthArray: number[] = [];\n  for (let i = 1; i <= daysInMonth; i += 1) {\n    daysInMonthArray.push(i);\n  }\n\n  return daysInMonthArray.map((day) => {\n    return {\n      label: String(day),\n      value: String(day),\n    };\n  });\n};\n\nexport const MONTH_DROPDOWN_OPTIONS: DropdownOption[] = dayjs.monthsShort().map((month, index) => {\n  return {\n    label: month,\n    value: String(index + 1),\n  };\n});\n\nconst yearOptions: number[] = [];\nfor (let i = new Date().getFullYear(); i > 1950; i -= 1) {\n  yearOptions.push(i);\n}\nexport const YEAR_DROPDOWN_OPTIONS: DropdownOption[] = yearOptions.map((year) => {\n  return {\n    label: String(year),\n    value: String(year),\n  };\n});\n\nexport const formatDateToEastern = (date: string, format: string) => {\n  return dayjs(date).tz(\"America/New_York\").format(format);\n};\n","import {\n  proposal_path,\n  request_for_expert_proposal_path,\n  request_for_startup_proposal_path,\n} from \"@routes/routes\";\nimport { Proposaly, ProposalyType } from \"@tsTypes/proposaly\";\nimport { RequestableType } from \"@tsTypes/requests\";\nimport { assertAbsurd } from \"./tsUtils\";\n\nexport const proposalyPagePath = (\n  proposal: Pick<Proposaly, \"slug\"> & { proposaly_type: ProposalyType }\n) => {\n  const { slug, proposaly_type } = proposal;\n\n  if (!slug) {\n    throw new Error(\"Proposal slug is required\");\n  }\n\n  switch (proposaly_type) {\n    case ProposalyType.PROPOSAL:\n      return proposal_path(slug);\n    case ProposalyType.REQUEST_FOR_STARTUP_PROPOSAL:\n      return request_for_startup_proposal_path(slug);\n    case ProposalyType.REQUEST_FOR_EXPERT_PROPOSAL:\n      return request_for_expert_proposal_path(slug);\n    default:\n      assertAbsurd(proposaly_type);\n  }\n};\n\nexport const REQUESTABLE_TYPE_TO_PROPOSALY_TYPE = {\n  [RequestableType.RFP]: ProposalyType.PROPOSAL,\n  [RequestableType.REQUEST_FOR_EXPERT]: ProposalyType.REQUEST_FOR_EXPERT_PROPOSAL,\n  [RequestableType.REQUEST_FOR_STARTUP]: ProposalyType.REQUEST_FOR_STARTUP_PROPOSAL,\n};\n\nexport const PROPOSAL_SLUG_PARAM = \"proposal\";\n","import { IconName } from \"@components/library/Icon/Icon\";\nimport { request_for_expert_path, submit_proposal_path } from \"@routes/routes\";\nimport {\n  RequestForCard,\n  ReviewTeamMember,\n  ReviewerDashboardRequest,\n  RolePartial,\n  ScientistCurrentUser,\n  SponsorDropdownRequest,\n  SponsorProfilePartial,\n} from \"@tsTypes/index\";\nimport {\n  LaunchableRequestStatus,\n  RequestFeedbackDeadlineStatus,\n  RequestableType,\n} from \"@tsTypes/requests\";\nimport { RoleName } from \"@tsTypes/roles\";\nimport { Company, OpenCall, Request, User } from \"@tsTypes/schema\";\nimport { SponsorLicenseType } from \"@tsTypes/sponsorProfiles\";\nimport { AnyUser, UserRole } from \"@tsTypes/users\";\nimport dayjs from \"dayjs\";\nimport { uniqBy } from \"lodash\";\nimport { REQUESTABLE_TO_REQUEST_TYPE } from \"src/App\";\nimport { SortBy } from \"src/views/Marketplace/RespondToRequests\";\nimport { RfpOpenCallProposalFormRequest } from \"src/views/RfpOpenCallProposalForm/RfpOpenCallProposalForm\";\nimport { ACCESS_CODE_PARAM } from \"src/views/RFPPage/RfpPage\";\nimport { daysUntilDate } from \"./dateUtils\";\nimport { assertAbsurd } from \"./tsUtils\";\nimport { sortByHasProfilePicture } from \"./userUtils\";\n\nexport const isUsingResponseDeadlinesV2 = (request: SponsorDropdownRequest | null): boolean => {\n  if (request === null) return false;\n  return \"review_stage_status\" in request;\n};\n\nexport const REQUESTABLE_TO_ICON_NAME: { [key in RequestableType]: IconName } = {\n  [RequestableType.OPEN_CALL]: \"Open Call\",\n  [RequestableType.RFP]: \"Opportunity\",\n  [RequestableType.REQUEST_FOR_STARTUP]: \"Accelerator\",\n  [RequestableType.REQUEST_FOR_EXPERT]: \"Request for experts\",\n};\n\nexport const findRequestRoleNameOnUser = (\n  user: ReviewTeamMember,\n  request: Pick<Request, \"id\" | \"requestable_type\"> & { complete?: boolean }\n): RoleName | null => {\n  const isDraft = request.complete !== undefined && !request.complete;\n\n  if (user.role === UserRole.SPONSOR) {\n    const { license, is_admin, is_super_admin } = user.profile_info;\n    const isPremium = license === SponsorLicenseType.PREMIUM;\n    const isOpenCall = request.requestable_type === RequestableType.OPEN_CALL;\n\n    if (is_admin && (isPremium || isDraft || isOpenCall)) {\n      if (is_super_admin) {\n        return RoleName.COMPANY_SUPER_ADMIN;\n      }\n      return RoleName.COMPANY_ADMIN;\n    }\n  }\n\n  return (\n    user.roles.find(\n      (role) =>\n        role.resource_type === \"Request\" &&\n        role.resource_id === request.id &&\n        isDraft === (role.name === RoleName.REQUEST_DRAFT_EDITOR)\n    )?.name ?? null\n  );\n};\n\nexport const canAccessRequest = (\n  user: Pick<User, \"role\"> & {\n    roles: RolePartial[];\n    profile_info: Partial<Pick<SponsorProfilePartial, \"license\" | \"is_admin\" | \"company_id\">>;\n  },\n  request: Pick<Request, \"id\" | \"requestable_type\"> & {\n    complete?: boolean;\n    company: Partial<Pick<Company, \"id\">>;\n  }\n): boolean => {\n  if (!user || !request) return false;\n\n  const { license, is_admin, company_id } = user.profile_info as SponsorProfilePartial;\n  const isSponsorAtCompany = user.role === UserRole.SPONSOR && request.company.id === company_id;\n  const isPremium = license === SponsorLicenseType.PREMIUM;\n  const isDraft = request.complete !== undefined && !request.complete;\n  const isOpenCall = request.requestable_type === RequestableType.OPEN_CALL;\n\n  if (isSponsorAtCompany && is_admin && (isPremium || isDraft || isOpenCall)) {\n    return true;\n  }\n\n  return Boolean(\n    user.roles.some(\n      (role) =>\n        role.resource_type === \"Request\" &&\n        role.resource_id === request.id &&\n        (isDraft\n          ? role.name === RoleName.REQUEST_DRAFT_EDITOR\n          : role.name === RoleName.REQUEST_LEAD ||\n            role.name === RoleName.REQUEST_COMMENTER ||\n            role.name === RoleName.REQUEST_EXTERNAL_COMMENTER ||\n            role.name === RoleName.REQUEST_EXTERNAL_LEAD)\n    )\n  );\n};\n\nexport const canAccessRequestAsLead = (\n  user: Pick<User, \"role\"> & {\n    roles: RolePartial[];\n    profile_info:\n      | Pick<SponsorProfilePartial, \"license\" | \"is_admin\" | \"company_id\">\n      | Record<string, unknown>;\n  },\n  request: Pick<Request, \"id\" | \"requestable_type\"> & {\n    complete?: boolean;\n    company: Partial<Pick<Company, \"id\">>;\n  }\n): boolean => {\n  const { license, is_admin, company_id } = user.profile_info as SponsorProfilePartial;\n\n  if (\n    !user ||\n    !(\"id\" in user) ||\n    !request ||\n    user.role !== UserRole.SPONSOR ||\n    request.company.id !== company_id\n  ) {\n    return false;\n  }\n\n  const isPremium = license === SponsorLicenseType.PREMIUM;\n  const isDraft = request.complete !== undefined && !request.complete;\n  const isOpenCall = request.requestable_type === RequestableType.OPEN_CALL;\n\n  if (is_admin && (isPremium || isDraft || isOpenCall)) {\n    return true;\n  }\n\n  return Boolean(\n    user.roles.some(\n      (role) =>\n        role.resource_type === \"Request\" &&\n        role.resource_id === request.id &&\n        (isDraft\n          ? role.name === RoleName.REQUEST_DRAFT_EDITOR\n          : role.name === RoleName.REQUEST_LEAD)\n    )\n  );\n};\n\nexport const isExternalLeadOnRequest = (\n  currentUser: AnyUser,\n  request: Pick<Request, \"id\" | \"requestable_type\"> & {\n    complete?: boolean;\n    company: Partial<Pick<Company, \"id\">>;\n  }\n): boolean => {\n  if (\"is_expert\" in currentUser.profile_info) {\n    return (\n      findRequestRoleNameOnUser(currentUser as ScientistCurrentUser, request) ===\n      RoleName.REQUEST_EXTERNAL_LEAD\n    );\n  }\n\n  return false;\n};\n\nexport const filterReviewTeamByRole = ({\n  requestId,\n  team,\n  roleName,\n}: {\n  requestId: number;\n  team: ReviewTeamMember[];\n  roleName: RoleName;\n}): ReviewTeamMember[] =>\n  team.filter((member) =>\n    member.roles.find(\n      (role) =>\n        role.resource_type === \"Request\" && role.resource_id === requestId && role.name === roleName\n    )\n  );\n\nexport const reviewTeamMembersForReviewerDashboardThumbnails = (\n  request: ReviewerDashboardRequest\n) => {\n  const reviewTeamMembers = request.review_team_members;\n  const superAdminReviewers = reviewTeamMembers.filter(\n    (reviewer) => reviewer.role === UserRole.SPONSOR && reviewer.profile_info.is_super_admin\n  );\n  const onlyAdminReviewers = reviewTeamMembers.filter(\n    (reviewer) =>\n      reviewer.role === UserRole.SPONSOR &&\n      reviewer.profile_info.is_admin &&\n      !reviewer.profile_info.is_super_admin\n  );\n  const leads = sortByHasProfilePicture(\n    filterReviewTeamByRole({\n      requestId: request.id,\n      team: reviewTeamMembers,\n      roleName: RoleName.REQUEST_LEAD,\n    })\n  );\n  const commenters = sortByHasProfilePicture(\n    filterReviewTeamByRole({\n      requestId: request.id,\n      team: reviewTeamMembers,\n      roleName: RoleName.REQUEST_COMMENTER,\n    })\n  );\n  const externalLeads = sortByHasProfilePicture(\n    filterReviewTeamByRole({\n      requestId: request.id,\n      team: reviewTeamMembers,\n      roleName: RoleName.REQUEST_EXTERNAL_LEAD,\n    })\n  );\n  const externalCommenters = sortByHasProfilePicture(\n    filterReviewTeamByRole({\n      requestId: request.id,\n      team: reviewTeamMembers,\n      roleName: RoleName.REQUEST_EXTERNAL_COMMENTER,\n    })\n  );\n  const draftEditors = sortByHasProfilePicture(\n    filterReviewTeamByRole({\n      requestId: request.id,\n      team: reviewTeamMembers,\n      roleName: RoleName.REQUEST_DRAFT_EDITOR,\n    })\n  );\n\n  return uniqBy(\n    [\n      ...(request.complete\n        ? [...leads, ...commenters, ...externalLeads, ...externalCommenters]\n        : draftEditors),\n      ...onlyAdminReviewers,\n      ...superAdminReviewers,\n    ],\n    (reviewer) => reviewer.id\n  ).slice(0, 3);\n};\n\nexport const requestPageUrlPath = (\n  request?: Record<string, any>,\n  hideAccessCode = false\n): string => {\n  switch (request?.requestable_type) {\n    case RequestableType.OPEN_CALL: {\n      return `/company/${request.company.identifier}`;\n    }\n    case RequestableType.RFP: {\n      return (\n        `/research/${request.requestable?.rfp_program_identifier || \"program\"}/${request.slug}` +\n        (request.access_code && !hideAccessCode\n          ? `?${ACCESS_CODE_PARAM}=${request.access_code}`\n          : \"\")\n      );\n    }\n    case RequestableType.REQUEST_FOR_STARTUP: {\n      return `/startup_program/${request.slug}`;\n    }\n    case RequestableType.REQUEST_FOR_EXPERT: {\n      return request_for_expert_path(request.slug);\n    }\n    default: {\n      throw new Error(`Invalid requestable type: ${request?.requestable_type}`);\n    }\n  }\n};\n\nexport const requestProposalUrlPath = (\n  request: {\n    requestable_type: RequestableType | string;\n    slug: string;\n    access_code?: string | null;\n  },\n  options?: any\n): string => {\n  return submit_proposal_path(\n    REQUESTABLE_TO_REQUEST_TYPE[request.requestable_type],\n    request.slug,\n    request.access_code\n      ? {\n          [ACCESS_CODE_PARAM]: request.access_code,\n          ...options,\n        }\n      : options\n  );\n};\n\nexport type LaunchableRequest = Pick<Request, \"enabled\" | \"feedback_deadline\"> & {\n  requestable: {\n    launch_date: string | null;\n    deadline: string | null;\n  };\n};\n\nexport const getLaunchableRequestStatus = <Request extends LaunchableRequest>(\n  request: Request\n): LaunchableRequestStatus => {\n  if (!request.requestable.launch_date && !request.requestable.deadline) {\n    if (request.enabled) return LaunchableRequestStatus.ACTIVE;\n    return LaunchableRequestStatus.CLOSED;\n  }\n\n  const isBeforeLaunchDate =\n    Boolean(request.requestable.launch_date) &&\n    dayjs().isBefore(request.requestable.launch_date ?? 0);\n  const isPastDeadline =\n    Boolean(request.requestable.deadline) && dayjs().isAfter(request.requestable.deadline ?? 0);\n\n  if (isBeforeLaunchDate) return LaunchableRequestStatus.COMING_SOON;\n  if (request.enabled)\n    if (isPastDeadline) return LaunchableRequestStatus.IN_EXTENSION;\n    else return LaunchableRequestStatus.ACTIVE;\n  return LaunchableRequestStatus.CLOSED;\n};\n\nexport const canUseFeedbackDeadline = (request: {\n  created_at?: string;\n  requestable?: {\n    launch_date: string | null;\n    deadline: string | null;\n  } | null;\n}): boolean => {\n  const FEEDBACK_DEADLINE_CUTOFF_DATE = new Date(\"8-17-2023\");\n\n  return (\n    new Date(request.created_at ?? 0) >= FEEDBACK_DEADLINE_CUTOFF_DATE ||\n    new Date(request.requestable?.launch_date ?? 0) >= FEEDBACK_DEADLINE_CUTOFF_DATE ||\n    new Date(request.requestable?.deadline ?? 0) >= FEEDBACK_DEADLINE_CUTOFF_DATE\n  );\n};\n\nexport const getRequestFeedbackDeadlineStatus = (request: {\n  feedback_deadline: string | null;\n  created_at?: string;\n  requestable?: {\n    launch_date: string | null;\n    deadline: string | null;\n  } | null;\n}): RequestFeedbackDeadlineStatus => {\n  if (\n    !canUseFeedbackDeadline(request) ||\n    !request.requestable?.deadline ||\n    new Date() < new Date(request.requestable?.deadline)\n  ) {\n    return RequestFeedbackDeadlineStatus.NOT_APPLICABLE;\n  }\n\n  if (!request.feedback_deadline) return RequestFeedbackDeadlineStatus.NEEDS_DEADLINE;\n\n  const daysUntilDeadline = daysUntilDate(request.feedback_deadline);\n\n  if (daysUntilDeadline < 0) return RequestFeedbackDeadlineStatus.PAST_DEADLINE;\n  if (daysUntilDeadline < 5) return RequestFeedbackDeadlineStatus.DEADLINE_APPROACHING;\n  return RequestFeedbackDeadlineStatus.BEFORE_DEADLINE;\n};\n\nexport const isNonOpenCallAfterJan1st2024 = (\n  request?: SponsorDropdownRequest | RfpOpenCallProposalFormRequest\n): boolean => {\n  if (!request) return false;\n\n  if (!request.requestable) return false;\n\n  if (request.requestable_type === RequestableType.OPEN_CALL) return false;\n\n  const requestable = request.requestable as Exclude<\n    typeof request.requestable,\n    Pick<OpenCall, \"company_research_interest_id\">\n  >;\n\n  const { launch_date } = requestable;\n\n  if (!launch_date) return false;\n\n  return new Date(launch_date) > new Date(Date.UTC(2024, 0, 1));\n};\n\nexport const sortMarketplaceRequests = ({\n  requests,\n  scores,\n  sort,\n}: {\n  requests: RequestForCard[];\n  scores: Record<number, number>;\n  sort: SortBy;\n}): void => {\n  // @ts-ignore\n  requests.sort((a, b) => {\n    const aStatus = getLaunchableRequestStatus(a as any);\n    const bStatus = getLaunchableRequestStatus(b as any);\n\n    // Sort elements with status higher than elements without status\n    const compareStatus = (status: LaunchableRequestStatus) =>\n      Number(bStatus === status) - Number(aStatus === status);\n\n    const compareScores = scores[b.id] - scores[a.id];\n\n    const compareLaunchDate =\n      new Date(a.requestable.launch_date!).getTime() -\n      new Date(b.requestable.launch_date!).getTime();\n\n    const compareDeadline =\n      new Date(b.requestable.deadline!).getTime() - new Date(a.requestable.deadline!).getTime();\n\n    switch (sort) {\n      case SortBy.RELEVANCE:\n        return (\n          (compareStatus(LaunchableRequestStatus.ACTIVE) ||\n            compareStatus(LaunchableRequestStatus.COMING_SOON) ||\n            compareStatus(LaunchableRequestStatus.IN_EXTENSION) ||\n            compareStatus(LaunchableRequestStatus.CLOSED) ||\n            compareScores ||\n            (aStatus === LaunchableRequestStatus.COMING_SOON\n              ? compareLaunchDate\n              : compareDeadline)) ??\n          0\n        );\n      case SortBy.LAUNCH_DATE:\n        return -compareLaunchDate || compareScores;\n      case SortBy.DEADLINE:\n        return (\n          (compareStatus(LaunchableRequestStatus.ACTIVE) ||\n            compareStatus(LaunchableRequestStatus.COMING_SOON) ||\n            compareStatus(LaunchableRequestStatus.IN_EXTENSION) ||\n            compareStatus(LaunchableRequestStatus.CLOSED) ||\n            (aStatus === LaunchableRequestStatus.COMING_SOON\n              ? compareLaunchDate\n              : compareDeadline) ||\n            compareScores) ??\n          0\n        );\n      default:\n        assertAbsurd(sort);\n    }\n  });\n};\n","export function assertAbsurd(argument: never) {\n  throw new Error(`Unexpected argument: ${argument}`);\n}\n","import { User } from \"@tsTypes/schema\";\nimport { UniversityExpertise } from \"@tsTypes/universityProfiles\";\n\nexport const sortByHasProfilePicture = <T extends Pick<User, \"image\"> & Record<string, unknown>>(\n  users: T[],\n  imageSize: \"small\" | \"medium\" | \"large\" = \"medium\"\n): T[] => {\n  return users.sort((a, b) => {\n    return Number(Boolean(b.image?.[imageSize].url)) - Number(Boolean(a.image?.[imageSize].url));\n  });\n};\n\nexport const hasInvalidUniversityExpertise = (expertise: string): boolean => {\n  return expertise.split(\",\").some((e) => {\n    return !(Object.values(UniversityExpertise) as string[]).includes(e);\n  });\n};\n","import { Button, Checkbox, ChipsInput, IconButton, SlideModalBase } from \"@components/library\";\nimport { SearchBarInput } from \"@components/library/Inputs/SearchBarInput\";\nimport { COLORS, FEATURE_FLAGS } from \"@constants\";\nimport { useSearchParams } from \"@hooks/router\";\nimport { useIsMount } from \"@hooks/useIsMount\";\nimport { RootState } from \"@redux/store\";\nimport { RequestPartnerTypes, RequestableType } from \"@tsTypes/requests\";\nimport { ChangeEvent, Dispatch, SetStateAction, useEffect, useState } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { useHistory } from \"react-router-dom\";\nimport styled from \"styled-components\";\nimport { SORT_BY_OPTIONS } from \"./RespondToRequests\";\nimport {\n  CheckboxContainer,\n  FilterContainer,\n  FilterSection,\n  ResetFiltersButton,\n} from \"./sharedFilterStyles\";\n\ninterface Props {\n  searchFilter: string[];\n  setSearchFilter: Dispatch<SetStateAction<string[]>>;\n  requestTypesFilter: RequestableType[];\n  setRequestTypesFilter: Dispatch<SetStateAction<RequestableType[]>>;\n  partnerTypesFilter: RequestPartnerTypes[];\n  setPartnerTypesFilter: Dispatch<SetStateAction<RequestPartnerTypes[]>>;\n  sortBy: typeof SORT_BY_OPTIONS[number];\n  setSortBy: Dispatch<SetStateAction<typeof SORT_BY_OPTIONS[number]>>;\n  totalCount: number;\n}\n\nconst SEARCH_FILTER_PARAM = \"search\";\nconst REQUEST_TYPES_FILTER_PARAM = \"request_types\";\nconst PARTNER_TYPES_FILTER_PARAM = \"partner_types\";\n\nexport default function RespondToRequestsFilters({\n  searchFilter,\n  setSearchFilter,\n  requestTypesFilter,\n  setRequestTypesFilter,\n  partnerTypesFilter,\n  setPartnerTypesFilter,\n  sortBy,\n  setSortBy,\n  totalCount,\n}: Props) {\n  const [isPanelOpen, setIsPanelOpen] = useState(false);\n  const [searchInput, setSearchInput] = useState(\"\");\n\n  const isTablet = useSelector((state: RootState) => state.window.isTablet);\n\n  const [searchParams] = useSearchParams();\n  const history = useHistory();\n  const isMount = useIsMount();\n\n  useEffect(() => {\n    if (isMount) {\n      if (searchParams.has(SEARCH_FILTER_PARAM)) {\n        setSearchFilter(searchParams.get(SEARCH_FILTER_PARAM)!.split(\";\"));\n      }\n      if (searchParams.has(REQUEST_TYPES_FILTER_PARAM)) {\n        const requestTypes = searchParams.get(REQUEST_TYPES_FILTER_PARAM)!.split(\";\");\n        setRequestTypesFilter(requestTypes as RequestableType[]);\n      }\n      if (searchParams.has(PARTNER_TYPES_FILTER_PARAM)) {\n        const partnerTypes = searchParams.get(PARTNER_TYPES_FILTER_PARAM)!.split(\";\");\n        setPartnerTypesFilter(partnerTypes as RequestPartnerTypes[]);\n      }\n      return;\n    }\n\n    if (searchFilter.length) searchParams.set(SEARCH_FILTER_PARAM, searchFilter.join(\";\"));\n    else searchParams.delete(SEARCH_FILTER_PARAM);\n    if (requestTypesFilter.length)\n      searchParams.set(REQUEST_TYPES_FILTER_PARAM, requestTypesFilter.join(\";\"));\n    else searchParams.delete(REQUEST_TYPES_FILTER_PARAM);\n    if (partnerTypesFilter.length)\n      searchParams.set(PARTNER_TYPES_FILTER_PARAM, partnerTypesFilter.join(\";\"));\n    else searchParams.delete(PARTNER_TYPES_FILTER_PARAM);\n\n    history.replace({ search: searchParams.toString() });\n  }, [searchFilter, setSearchFilter, requestTypesFilter, setRequestTypesFilter]);\n\n  const handleClearFilters = () => {\n    setSearchInput(\"\");\n    setSearchFilter([]);\n    setRequestTypesFilter([]);\n    setPartnerTypesFilter([]);\n  };\n\n  const searchFilterAsChips = searchFilter.map((value) => ({ value, label: value }));\n\n  const searchBarEl = (\n    <SearchBarInput\n      value={searchInput}\n      onChange={setSearchInput}\n      onSubmit={(value) => {\n        if (!value) return;\n        setSearchFilter([...searchFilter, value]);\n        setSearchInput(\"\");\n      }}\n      placeholder=\"Expertise, request, etc.\"\n      buttonText={null}\n    />\n  );\n\n  const searchFilterEl =\n    searchFilter.length > 0 ? (\n      <div style={{ marginTop: 16 }}>\n        <ChipsInput\n          options={searchFilterAsChips}\n          selectedValues={searchFilter}\n          onChange={(values) => setSearchFilter(values ?? [])}\n          gap=\"8px 8px\"\n          hideAll\n        />\n      </div>\n    ) : null;\n\n  const handleRequestTypeChange =\n    (requestType: RequestableType) => (e: ChangeEvent<HTMLInputElement>) => {\n      if (e.target.checked) {\n        setRequestTypesFilter((prev) => [...prev, requestType]);\n      } else {\n        setRequestTypesFilter((prev) => prev.filter((type) => type !== requestType));\n      }\n    };\n\n  const handlePartnerTypeChange =\n    (partnerType: RequestPartnerTypes) => (e: ChangeEvent<HTMLInputElement>) => {\n      if (e.target.checked) {\n        setPartnerTypesFilter((prev) => [...prev, partnerType]);\n      } else {\n        setPartnerTypesFilter((prev) => prev.filter((type) => type !== partnerType));\n      }\n    };\n\n  const commonFiltersEl = (\n    <>\n      {/*\n      <FilterSection label=\"Companies seeking\">\n        <CheckboxContainer data-testid=\"request-type-checkboxes\">\n          <Checkbox\n            isReversed={isTablet}\n            label={\n              <CheckboxLabel withMargin={isTablet}>\n                <Icon name=\"RFP\" size=\"sm\" color={COLORS.BLACK} margin=\"0 -4px 0 0\" />\n                Solutions\n              </CheckboxLabel>\n            }\n            isChecked={requestTypesFilter.includes(RequestableType.RFP)}\n            onChange={handleRequestTypeChange(RequestableType.RFP)}\n            size=\"sm\"\n          />\n          <Checkbox\n            isReversed={isTablet}\n            label={\n              <CheckboxLabel withMargin={isTablet}>\n                <Icon\n                  name=\"Request for experts\"\n                  size=\"xs\"\n                  color={COLORS.BLACK}\n                  margin=\"0 -1px 0 2px\"\n                />\n                Experts\n                <InfoTag accent marginLeft=\"2px\">\n                  NEW\n                </InfoTag>\n              </CheckboxLabel>\n            }\n            isChecked={requestTypesFilter.includes(RequestableType.REQUEST_FOR_EXPERT)}\n            onChange={handleRequestTypeChange(RequestableType.REQUEST_FOR_EXPERT)}\n            size=\"sm\"\n          />\n        </CheckboxContainer>\n      </FilterSection>\n          */}\n      {FEATURE_FLAGS.MARKETPLACE_PARTNER_TYPE_FILTER && (\n        <FilterSection label=\"Preferred partner\">\n          <CheckboxContainer data-testid=\"partner-type-checkboxes\">\n            <Checkbox\n              isReversed={isTablet}\n              label={<CheckboxLabel withMargin={isTablet}>Startups</CheckboxLabel>}\n              isChecked={partnerTypesFilter.includes(RequestPartnerTypes.STARTUPS)}\n              onChange={handlePartnerTypeChange(RequestPartnerTypes.STARTUPS)}\n              size=\"sm\"\n            />\n            <Checkbox\n              isReversed={isTablet}\n              label={<CheckboxLabel withMargin={isTablet}>Academic researchers</CheckboxLabel>}\n              isChecked={partnerTypesFilter.includes(RequestPartnerTypes.ACADEMIC_RESEARCHERS)}\n              onChange={handlePartnerTypeChange(RequestPartnerTypes.ACADEMIC_RESEARCHERS)}\n              size=\"sm\"\n            />\n            <Checkbox\n              isReversed={isTablet}\n              label={<CheckboxLabel withMargin={isTablet}>Suppliers</CheckboxLabel>}\n              isChecked={partnerTypesFilter.includes(RequestPartnerTypes.SUPPLIERS)}\n              onChange={handlePartnerTypeChange(RequestPartnerTypes.SUPPLIERS)}\n              size=\"sm\"\n            />\n          </CheckboxContainer>\n        </FilterSection>\n      )}\n    </>\n  );\n\n  if (isTablet)\n    return (\n      <>\n        <SlideModalBase\n          isOpen={isPanelOpen}\n          onClose={() => setIsPanelOpen(false)}\n          closeOnDimmerClick\n          direction=\"bottom\"\n          customCloseButton={\n            <IconButton\n              iconName=\"Close\"\n              size=\"sm\"\n              variant=\"fourth\"\n              onClick={() => setIsPanelOpen(false)}\n              tooltipPosition=\"bottom\"\n              data-testid=\"close-button\"\n              margin=\"0 -6px 0 0\"\n            />\n          }\n        >\n          <Panel>\n            <FilterContainer>\n              {commonFiltersEl}\n              <FilterSection label=\"Sort by\">\n                <CheckboxContainer data-testid=\"sort-radio\">\n                  {SORT_BY_OPTIONS.map((option) => (\n                    <Checkbox\n                      key={`sort-${option.value}`}\n                      isReversed={isTablet}\n                      label={<CheckboxLabel withMargin={isTablet}>{option.label}</CheckboxLabel>}\n                      isChecked={sortBy.value === option.value}\n                      onChange={(e) => e.target.checked && setSortBy(option)}\n                      size=\"sm\"\n                      type=\"radio\"\n                    />\n                  ))}\n                </CheckboxContainer>\n              </FilterSection>\n              <ResetFiltersButton onClick={handleClearFilters} />\n            </FilterContainer>\n            <PanelFooter>\n              <Button variant=\"ghost\" onClick={() => setIsPanelOpen(false)}>\n                Cancel\n              </Button>\n              <Button variant=\"primary\" onClick={() => setIsPanelOpen(false)}>\n                View {totalCount} opportunities\n              </Button>\n            </PanelFooter>\n          </Panel>\n        </SlideModalBase>\n        <div style={{ marginBottom: 22 }}>\n          <SearchAndFilter>\n            <div style={{ width: \"100%\" }}>{searchBarEl}</div>\n            <IconButton\n              iconName=\"Filter & sort\"\n              variant=\"fourth\"\n              tooltipWidth=\"90px\"\n              onClick={() => setIsPanelOpen(true)}\n            />\n          </SearchAndFilter>\n          {searchFilterEl}\n        </div>\n      </>\n    );\n\n  return (\n    <FilterContainer>\n      <FilterSection label=\"Search\" labelMargin=\"0 0 23px\">\n        {searchBarEl}\n        {searchFilterEl}\n      </FilterSection>\n      {commonFiltersEl}\n      <ResetFiltersButton onClick={handleClearFilters} />\n    </FilterContainer>\n  );\n}\n\nconst SearchAndFilter = styled.div`\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: 10px;\n  margin-bottom: 16px;\n`;\n\nconst Panel = styled.div`\n  height: calc(100vh - 80px);\n  width: 100%;\n\n  ${FilterContainer} {\n    padding: 45px 24px;\n    overflow-y: auto;\n    max-height: calc(100vh - 84px);\n  }\n`;\n\nconst PanelFooter = styled.div`\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  padding: 24px;\n  border-top: 1px solid ${COLORS.NEUTRAL_250};\n`;\n\nconst CheckboxLabel = styled.div`\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  width: 100%;\n  ${({ withMargin }) =>\n    withMargin &&\n    `\n    margin: 4px;\n  `}\n`;\n","import RfpCard from \"@components/RfpCard/RfpCard\";\nimport { BlankModal, Icon, Pagination, SelectableDropdown } from \"@components/library\";\nimport { RfpUnsubscribeModal } from \"@components/modals\";\nimport { COLORS, FONTS, WINDOW_DIMENSIONS } from \"@constants\";\nimport { useSearchParams } from \"@hooks/router\";\nimport { toggleLoginModal } from \"@redux/actions/profileActions\";\nimport { RootState } from \"@redux/store\";\nimport { getMarketplaceRequests } from \"@requests/requests\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport { RequestPartnerTypes, RequestableType } from \"@tsTypes/requests\";\nimport { sortMarketplaceRequests } from \"@utils/requestUtils\";\nimport { toastErrorHandler } from \"@utils/requests\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { Loader } from \"semantic-ui-react\";\nimport styled from \"styled-components\";\nimport KeywordSignUpModal from \"../../components/modals/KeywordSignUpModal\";\nimport RespondToRequestsFilters from \"./RespondToRequestsFilters\";\nimport { Columns, ContentColumn, FilterColumn } from \"./sharedFilterStyles\";\n\ninterface Props {\n  currentPageNum: number;\n  setCurrentPageNum: (newPageNum: number) => void;\n}\n\nexport enum SortBy {\n  RELEVANCE = \"relevance\",\n  LAUNCH_DATE = \"launch_date\",\n  DEADLINE = \"deadline\",\n}\nexport const SORT_BY_OPTIONS = [\n  { value: SortBy.RELEVANCE, label: \"Recommended\" },\n  { value: SortBy.LAUNCH_DATE, label: \"Recently added\" },\n  { value: SortBy.DEADLINE, label: \"Deadline\" },\n] as const;\n\nexport const MAX_REQUEST_CARD_WIDTH = 586;\nconst NON_FEATURED_CARDS_PER_PAGE = 15;\nconst VIEW_ALL_PARAM = \"view_all\";\n\nconst RespondToRequests = ({ currentPageNum, setCurrentPageNum }: Props) => {\n  const [isRfpUnsubscribeModalOpen, setIsRfpUnsubscribeModalOpen] = useState(false);\n  const [isKeywordsModalOpen, setIsKeywordsModalOpen] = useState(false);\n\n  const [sortBy, setSortBy] = useState<(typeof SORT_BY_OPTIONS)[number]>(SORT_BY_OPTIONS[0]);\n  const [searchFilter, setSearchFilter] = useState<string[]>([]);\n  const [requestTypesFilter, setRequestTypesFilter] = useState<RequestableType[]>([]);\n  const [partnerTypesFilter, setPartnerTypesFilter] = useState<RequestPartnerTypes[]>([]);\n  const allFilters = [searchFilter, requestTypesFilter, partnerTypesFilter];\n\n  const isTablet = useSelector((state: RootState) => state.window.isTablet);\n  const currentUser = useSelector((state: RootState) => state.profiles.currentUser);\n\n  const scrollToRef = useRef<HTMLDivElement | null>(null);\n\n  const dispatch = useDispatch();\n\n  const [searchParams] = useSearchParams();\n  const canViewAllParam = searchParams.get(VIEW_ALL_PARAM) === \"true\";\n  const canViewAll =\n    canViewAllParam || localStorage?.getItem(VIEW_ALL_PARAM) === \"true\" || currentUser.id;\n\n  useEffect(() => {\n    if (!canViewAllParam) return;\n\n    // Save the view_all param to local storage so this session can always view all RFPs even without the param\n    if (localStorage && !localStorage.getItem(VIEW_ALL_PARAM))\n      localStorage.setItem(VIEW_ALL_PARAM, \"true\");\n  }, [canViewAllParam]);\n\n  const { data, isLoading } = useQuery(\n    [\"getMarketplaceRequests\", ...allFilters],\n    () =>\n      getMarketplaceRequests({\n        searchFilter,\n        requestTypesFilter,\n        partnerTypesFilter,\n      }),\n    {\n      onError: toastErrorHandler,\n      onSuccess: () => setCurrentPageNum(1),\n    }\n  );\n  const requests = data?.requests ?? [];\n  const requestScores = data?.scores ?? {};\n  const totalCount = requests.length;\n\n  useEffect(() => {\n    if (location.search.includes(\"unsubscribe=\") && location.search.includes(\"nid=\")) {\n      setIsRfpUnsubscribeModalOpen(true);\n    }\n    if (location.search.includes(\"modal=keywords\")) {\n      setIsKeywordsModalOpen(true);\n    }\n  }, []);\n\n  useEffect(() => {\n    if (Number(totalCount) > 0) {\n      scrollToRef.current?.scrollIntoView({ behavior: \"smooth\" });\n    }\n  }, [currentPageNum]);\n\n  const beginningOfPage = (currentPageNum - 1) * NON_FEATURED_CARDS_PER_PAGE;\n  const endOfPage = beginningOfPage + NON_FEATURED_CARDS_PER_PAGE;\n\n  sortMarketplaceRequests({ requests, scores: requestScores, sort: sortBy.value });\n\n  const filters = (\n    <RespondToRequestsFilters\n      searchFilter={searchFilter}\n      setSearchFilter={setSearchFilter}\n      requestTypesFilter={requestTypesFilter}\n      setRequestTypesFilter={setRequestTypesFilter}\n      partnerTypesFilter={partnerTypesFilter}\n      setPartnerTypesFilter={setPartnerTypesFilter}\n      sortBy={sortBy}\n      setSortBy={setSortBy}\n      totalCount={totalCount}\n    />\n  );\n\n  return (\n    <>\n      <BlankModal\n        onClose={() => {\n          setIsKeywordsModalOpen(false);\n        }}\n        isOpen={isKeywordsModalOpen}\n        width=\"540px\"\n      >\n        <KeywordSignUpModal\n          onSubmit={() => {\n            setIsKeywordsModalOpen(false);\n          }}\n        />\n      </BlankModal>\n      <RfpUnsubscribeModal\n        isOpen={isRfpUnsubscribeModalOpen}\n        onClose={() => setIsRfpUnsubscribeModalOpen(false)}\n      />\n      <Container>\n        {!isTablet && (\n          <Description>\n            Find requests from corporate R&D teams.\n            <br />\n            Submit a non-confidential response in about 30 minutes.\n          </Description>\n        )}\n        <Columns>\n          <FilterColumn>{filters}</FilterColumn>\n          <ContentColumn>\n            <>\n              {!isTablet && (\n                <CountAndSort>\n                  <div>\n                    Sort by:\n                    <SelectableDropdown\n                      options={SORT_BY_OPTIONS}\n                      value={sortBy}\n                      onChange={setSortBy}\n                      menuHorizontalPosition=\"right\"\n                    />\n                  </div>\n                </CountAndSort>\n              )}\n              {isTablet && filters}\n            </>\n            {isLoading ? (\n              <Loader active inline=\"centered\" style={{ marginTop: 100 }} />\n            ) : (\n              <>\n                <div ref={scrollToRef}>\n                  {requests.length > 0 ? (\n                    <CardsContainer data-testid=\"request-cards\">\n                      {requests.slice(beginningOfPage, endOfPage).map((request) => (\n                        <RfpCard\n                          key={request.id}\n                          request={request}\n                          fromHref={window.location.pathname + window.location.search}\n                        />\n                      ))}\n                    </CardsContainer>\n                  ) : (\n                    <NoResultsContainer>\n                      <NoResultsHeader>\n                        <Icon name=\"Search\" color={COLORS.NEUTRAL_500} />\n                        Sorry, no results.\n                      </NoResultsHeader>\n                      <NoResultsText>\n                        Try changing your search terms or adjusting your filters.\n                      </NoResultsText>\n                    </NoResultsContainer>\n                  )}\n                </div>\n                <Pagination\n                  currentPage={currentPageNum}\n                  setCurrentPage={(pageNumber: number) =>\n                    canViewAll\n                      ? setCurrentPageNum(pageNumber)\n                      : dispatch(toggleLoginModal({ open: true }))\n                  }\n                  totalPages={Math.ceil(Number(totalCount) / NON_FEATURED_CARDS_PER_PAGE)}\n                  marginTop=\"56px\"\n                />\n              </>\n            )}\n          </ContentColumn>\n        </Columns>\n      </Container>\n    </>\n  );\n};\n\nexport default RespondToRequests;\n\n// These are also used in FindPartners.tsx\n\nexport const Container = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 56px;\n  margin-top: 48px;\n  ${WINDOW_DIMENSIONS.MOBILE_MEDIA_QUERY} {\n    margin-top: 32px;\n  }\n`;\nexport const Description = styled.h2`\n  ${FONTS.HEADING_3_REGULAR};\n  margin-bottom: 8px;\n  ${WINDOW_DIMENSIONS.MOBILE_MEDIA_QUERY} {\n    display: none;\n  }\n`;\nconst CardsContainer = styled.div`\n  display: grid;\n  grid-template-columns: repeat(3, minmax(0, 1fr));\n  grid-gap: 20px;\n  max-width: 2350px;\n  ${WINDOW_DIMENSIONS.EXTRA_WIDE_MEDIA_QUERY} {\n    grid-template-columns: repeat(4, minmax(0, 1fr));\n  }\n  ${WINDOW_DIMENSIONS.DESKTOP_MEDIA_QUERY} {\n    grid-template-columns: repeat(2, minmax(0, 1fr));\n  }\n  ${WINDOW_DIMENSIONS.TABLET_LANDSCAPE_MEDIA_QUERY} {\n    grid-template-columns: minmax(0, 1fr);\n  }\n`;\nconst CountAndSort = styled.div`\n  display: flex;\n  align-items: center;\n  justify-content: flex-end;\n  gap: 24px;\n  margin-bottom: 24px;\n\n  & > div {\n    display: flex;\n    align-items: center;\n    gap: 6px;\n    ${FONTS.REGULAR_2}\n  }\n`;\nconst NoResultsContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: 8px;\n  padding: 128px 0px;\n`;\nconst NoResultsHeader = styled.div`\n  display: flex;\n  align-items: center;\n  gap: 4px;\n`;\nconst NoResultsText = styled.div`\n  ${FONTS.REGULAR_2}\n  color: ${COLORS.NEUTRAL_500};\n  text-align: center;\n  ${WINDOW_DIMENSIONS.MOBILE_MEDIA_QUERY} {\n    max-width: 240px;\n  }\n`;\n","import { Icon } from \"@components/library\";\nimport { COLORS, FONTS, WINDOW_DIMENSIONS } from \"@constants\";\nimport { ReactNode, useState } from \"react\";\nimport styled from \"styled-components\";\nimport { ClearFilterButton } from \"../UniversityTeam/UniversityTeamSearch\";\n\n/**\n * Page layout\n */\n\nexport const Columns = styled.div`\n  display: flex;\n  gap: 36px;\n\n  ${WINDOW_DIMENSIONS.TABLET_MEDIA_QUERY} {\n    flex-direction: column;\n    gap: 10px;\n  }\n`;\n\nexport const FilterColumn = styled.div`\n  flex: 0 0 280px;\n  max-width: 280px;\n\n  ${WINDOW_DIMENSIONS.TABLET_MEDIA_QUERY} {\n    display: none;\n  }\n`;\n\nexport const ContentColumn = styled.div`\n  flex: 1;\n`;\n\n/**\n * Filters\n */\n\nexport const FilterContainer = styled.div`\n  position: sticky;\n  top: 50px;\n\n  display: flex;\n  flex-direction: column;\n  gap: 16px;\n\n  padding: 0 0 32px 0;\n\n  ${WINDOW_DIMENSIONS.TABLET_MEDIA_QUERY} {\n    position: relative;\n    top: 0;\n  }\n`;\n\nexport const FilterSection = ({\n  label,\n  labelMargin = \"0 0 16px\",\n  collapsible,\n  children,\n}: {\n  label: string;\n  labelMargin?: string;\n  collapsible?: boolean;\n  children: ReactNode;\n}) => {\n  const [isExpanded, setIsExpanded] = useState(true);\n  return (\n    <FilterSectionContainer isExpanded={isExpanded}>\n      <Label\n        margin={labelMargin}\n        collapsible={collapsible}\n        onClick={() => collapsible && setIsExpanded(!isExpanded)}\n      >\n        {label}\n        {collapsible && <Icon name={isExpanded ? \"Chevron Up\" : \"Chevron Down\"} />}\n      </Label>\n      <FilterContentsContainer isExpanded={isExpanded}>{children}</FilterContentsContainer>\n    </FilterSectionContainer>\n  );\n};\n\nconst FilterSectionContainer = styled.div`\n  padding-bottom: ${({ isExpanded }) => (isExpanded ? \"24px\" : \"0\")};\n  border-bottom: 1px solid ${COLORS.NEUTRAL_200};\n`;\n\nconst Label = styled.div`\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  margin: ${({ margin }) => margin ?? \"0 0 16px\"};\n  ${FONTS.SEMIBOLD_1}\n\n  &:hover {\n    ${({ collapsible }) => collapsible && `cursor: pointer;`}\n  }\n`;\n\nconst FilterContentsContainer = styled.div`\n  height: ${({ isExpanded }) => (isExpanded ? \"auto\" : \"0\")};\n  overflow: hidden;\n`;\n\n/**\n * Inputs\n */\n\nexport const CheckboxContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 8px;\n`;\n\nexport const ResetFiltersButton = ({ onClick }: { onClick: () => void }) => (\n  <ClearFilterButton type=\"button\" onClick={onClick}>\n    <Icon name=\"Refresh\" margin=\"0 4px 2px -4px\" color={COLORS.HALO_BLUE} />\n    Reset filters\n  </ClearFilterButton>\n);\n","import { InfoBanner, SingleSelectDropdown, TextInput } from \"@components/library\";\nimport KeywordsDropdown from \"@components/library/Dropdowns/KeywordsDropdown/KeywordsDropdown\";\nimport { COUNTRY_OPTIONS } from \"@constants\";\nimport { getOptionFromValue, getValueFromOption } from \"@utils/dropdownUtils\";\nimport { isValidURL } from \"@utils/textUtils\";\nimport { useEffect } from \"react\";\nimport * as S from \"../StepStyles\";\n\nexport const STARTUP_TITLES = [\"Business Development\", \"CEO\", \"CSO\", \"Researcher\"];\nexport const STARTUP_TITLE_OPTIONS = STARTUP_TITLES.map(getOptionFromValue);\nexport const companyRoleOptions = STARTUP_TITLES.map((text) => ({\n  label: text,\n  value: text,\n}));\n\nfunction CompanyScientist({ profileInfo, setProfileInfo, selectedGoogleScholarAuthor }) {\n  const { countryOption, role, disciplines, areasOfExpertise } = profileInfo;\n\n  const handleCompany = (e) => {\n    setProfileInfo((oldProfileInfo) => ({\n      ...oldProfileInfo,\n      companyName: e.target.value,\n    }));\n  };\n\n  const handleCompanyWebsite = (e) => {\n    setProfileInfo((oldProfileInfo) => ({\n      ...oldProfileInfo,\n      companyURL: e.target.value,\n    }));\n  };\n\n  // Prefill data if author is selected\n  useEffect(() => {\n    if (!selectedGoogleScholarAuthor) return;\n    setProfileInfo((oldProfileInfo) => ({\n      ...oldProfileInfo,\n      disciplines: selectedGoogleScholarAuthor.disciplines,\n      areasOfExpertise: selectedGoogleScholarAuthor.areas_of_expertise,\n    }));\n    // step2: startup, step3: startup (match!)\n    if (!selectedGoogleScholarAuthor.is_university_scientist) {\n      // prefill company name, role\n      handleCompany({ target: { value: selectedGoogleScholarAuthor.location } });\n      setProfileInfo((oldProfileInfo) => ({\n        ...oldProfileInfo,\n        role: selectedGoogleScholarAuthor.title,\n      }));\n    }\n  }, []);\n\n  return (\n    <>\n      <InfoBanner\n        shouldDisplay={Boolean(selectedGoogleScholarAuthor?.is_university_scientist)}\n        text={\n          <>\n            Google Scholar shows a research institution as your current organization, but\n            you&apos;ve indicated you&apos;re currently at a company. Please add your details below.\n          </>\n        }\n        type=\"ghost\"\n        margin=\"0 0 32px\"\n        padding=\"0\"\n      />\n      <S.DropdownRow>\n        <S.DropdownTitle>Company name</S.DropdownTitle>\n        <TextInput\n          placeholder=\"Enter company name\"\n          onChange={handleCompany}\n          value={profileInfo?.companyName || \"\"}\n          data-testid=\"company-scientist-company-name-input\"\n        />\n      </S.DropdownRow>\n      <S.DropdownRow>\n        <S.DropdownTitle>Company location</S.DropdownTitle>\n        <SingleSelectDropdown\n          withSearchIcon\n          placeholder=\"Search countries\"\n          value={countryOption}\n          options={COUNTRY_OPTIONS}\n          onChange={(option) =>\n            setProfileInfo((oldProfileInfo) => ({\n              ...oldProfileInfo,\n              countryOption: option,\n              country_code: getValueFromOption(option),\n            }))\n          }\n          data-testid=\"company-scientist-country-dropdown\"\n        />\n      </S.DropdownRow>\n      <S.DropdownRow>\n        <S.DropdownTitle>Company website</S.DropdownTitle>\n        <TextInput\n          placeholder=\"Enter company website URL\"\n          onChange={handleCompanyWebsite}\n          value={profileInfo?.companyURL || \"\"}\n          data-testid=\"company-scientist-company-website-input\"\n          errors={[\n            {\n              hasError:\n                Boolean(profileInfo?.companyURL?.length) && !isValidURL(profileInfo?.companyURL),\n              errorMessage: \"Please enter a valid URL\",\n            },\n          ]}\n        />\n      </S.DropdownRow>\n      <S.DropdownRow>\n        <S.DropdownTitle>What is your job title?</S.DropdownTitle>\n        <TextInput\n          placeholder=\"Enter your job title\"\n          onChange={(e) =>\n            setProfileInfo((oldProfileInfo) => ({\n              ...oldProfileInfo,\n              role: e.target.value,\n            }))\n          }\n          value={role}\n          data-testid=\"company-scientist-role-input\"\n        />\n      </S.DropdownRow>\n      <S.DropdownRow>\n        <S.DropdownTitle>Which disciplines are most relevant to your work?</S.DropdownTitle>\n        <KeywordsDropdown\n          keywordType=\"discipline\"\n          targetType=\"scientist\"\n          value={disciplines ?? []}\n          onChange={(selection) => setProfileInfo({ ...profileInfo, disciplines: selection })}\n        />\n      </S.DropdownRow>\n      <S.DropdownRow>\n        <S.DropdownTitle>What is your expertise?</S.DropdownTitle>\n        <KeywordsDropdown\n          keywordType=\"area_of_expertise\"\n          targetType=\"scientist\"\n          value={areasOfExpertise ?? []}\n          onChange={(selection) => setProfileInfo({ ...profileInfo, areasOfExpertise: selection })}\n        />\n      </S.DropdownRow>\n    </>\n  );\n}\n\nexport default CompanyScientist;\n","import { useEffect } from \"react\";\n\nimport { SingleSelectDropdown, TextInput } from \"@components/library\";\nimport KeywordsDropdown from \"@components/library/Dropdowns/KeywordsDropdown/KeywordsDropdown\";\nimport { SponsorRole } from \"@tsTypes/sponsorProfiles\";\nimport { getOptionFromValue, getValueFromOption } from \"@utils/dropdownUtils\";\nimport { isValidURL } from \"@utils/textUtils\";\nimport api from \"src/requests/request\";\nimport { useCompanyOptions } from \"../Hooks\";\nimport * as S from \"../StepStyles\";\nimport { COMPANY_SPONSOR_TITLE_LIMIT } from \"./Step3\";\n\nconst fetchCompanySuggestions = async (email) => {\n  const responseJson = await api.get(\"/onboarding/company_suggestions\", { params: { email } });\n  return responseJson.data?.company_suggestions || [];\n};\n\nconst roleDropdownOptions = Object.values(SponsorRole).map((text) => ({\n  label: text,\n  value: text,\n}));\n\nfunction CompanySponsor({ profileInfo, setProfileInfo, email, prefillCompanyName = \"\" }) {\n  const { role, areasOfExpertise } = profileInfo;\n\n  const [companyOptions] = useCompanyOptions();\n\n  useEffect(() => {\n    // Returns array of suggestions. Current UI only calls on initial load.\n    // set company based on first suggestion\n    (async () => {\n      const fetchedSuggestions = await fetchCompanySuggestions(email);\n      if (fetchedSuggestions.length) {\n        const suggestedCompany = fetchedSuggestions[0];\n        setProfileInfo({\n          ...profileInfo,\n          company: suggestedCompany,\n        });\n      }\n    })();\n  }, []);\n\n  const handleCompany = (e, selection) => {\n    if (selection?.action === \"select-option\" || selection?.action === \"create-option\") {\n      setProfileInfo({\n        ...profileInfo,\n        company: e.value,\n      });\n    }\n  };\n\n  const handleCompanyWebsite = (e) => {\n    setProfileInfo((oldProfileInfo) => ({\n      ...oldProfileInfo,\n      companyURL: e.target.value,\n    }));\n  };\n\n  return (\n    <>\n      <S.DropdownRow>\n        <S.DropdownTitle>Organization name</S.DropdownTitle>\n        {prefillCompanyName.length > 0 ? (\n          <S.Input type=\"text\" value={prefillCompanyName} tabIndex={-1} fixed readOnly />\n        ) : (\n          <SingleSelectDropdown\n            withSearchIcon\n            placeholder=\"Search organization names or add new\"\n            isCreatable\n            options={companyOptions}\n            onChange={handleCompany}\n            value={getOptionFromValue(profileInfo.company)}\n            data-testid=\"company-sponsor-step-4-company-dropdown\"\n          />\n        )}\n      </S.DropdownRow>\n      {profileInfo.company &&\n        !companyOptions.map(({ value }) => value).includes(profileInfo.company) && (\n          <S.DropdownRow>\n            <S.DropdownTitle>Organization website</S.DropdownTitle>\n            <TextInput\n              placeholder=\"Enter organization website URL\"\n              onChange={handleCompanyWebsite}\n              value={profileInfo?.companyURL || \"\"}\n              data-testid=\"company-sponsor-company-website-input\"\n              errors={[\n                {\n                  hasError:\n                    Boolean(profileInfo?.companyURL?.length) &&\n                    !isValidURL(profileInfo?.companyURL),\n                  errorMessage: \"Please enter a valid URL\",\n                },\n              ]}\n            />\n          </S.DropdownRow>\n        )}\n      <S.DropdownRow>\n        <S.DropdownTitle>Which of the following best describes your role?</S.DropdownTitle>\n        <SingleSelectDropdown\n          placeholder=\"Select your role\"\n          options={roleDropdownOptions}\n          onChange={(e) =>\n            setProfileInfo((oldProfileInfo) => ({\n              ...oldProfileInfo,\n              role: getValueFromOption(e),\n            }))\n          }\n          value={getOptionFromValue(role)}\n          data-testid=\"ri-scientist-role-input\"\n        />\n      </S.DropdownRow>\n      <S.DropdownRow>\n        <S.DropdownTitle>What is your job title?</S.DropdownTitle>\n        <TextInput\n          value={profileInfo.title || \"\"}\n          placeholder=\"Enter your job title\"\n          onChange={(e) => {\n            setProfileInfo({\n              ...profileInfo,\n              title: e.target.value,\n            });\n          }}\n          errors={[\n            {\n              hasError: profileInfo.title?.length > COMPANY_SPONSOR_TITLE_LIMIT,\n              errorMessage: `Job title must be less than ${COMPANY_SPONSOR_TITLE_LIMIT} characters`,\n            },\n          ]}\n          hideClearButton\n          data-testid=\"company-sponsor-step-4-title-field\"\n        />\n      </S.DropdownRow>\n      <S.DropdownRow>\n        <S.DropdownTitle>What is your expertise?</S.DropdownTitle>\n        <KeywordsDropdown\n          keywordType=\"area_of_expertise\"\n          targetType=\"sponsor\"\n          value={areasOfExpertise ?? []}\n          onChange={(selection) => setProfileInfo({ ...profileInfo, areasOfExpertise: selection })}\n        />\n      </S.DropdownRow>\n    </>\n  );\n}\n\nexport default CompanySponsor;\n","import { Checkbox, SingleSelectDropdown, UniversityDropdown } from \"@components/library\";\nimport { COUNTRY_OPTIONS } from \"@constants\";\nimport { getDisciplines } from \"@requests/keywords\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport { getOptionFromValue, getValueFromOption } from \"@utils/dropdownUtils\";\nimport { useEffect } from \"react\";\nimport api from \"src/requests/request\";\nimport * as S from \"../StepStyles\";\n\nfunction ResearchInstitutionAdmin({ profileInfo, setProfileInfo, prefillInstitutionName = \"\" }) {\n  const { data: disciplineOptions } = useQuery({\n    queryKey: [\"getDisciplines\"],\n    queryFn: () => getDisciplines(),\n    select: (data) => data.map(getOptionFromValue),\n  });\n\n  useEffect(() => {\n    if (!disciplineOptions) return;\n    if (\"disciplines\" in profileInfo) return;\n    setProfileInfo({\n      ...profileInfo,\n      disciplines: disciplineOptions?.map(getValueFromOption),\n    });\n  }, [disciplineOptions]);\n\n  const { university, universityHasCountry, countryOption, disciplines } = profileInfo;\n\n  const handleDisciplines = (value) => {\n    setProfileInfo({\n      ...profileInfo,\n      disciplines: disciplines.includes(value)\n        ? disciplines.filter((v) => v !== value)\n        : [...disciplines, value],\n    });\n  };\n\n  const handleSelectUniversityOption = async (option) => {\n    if (!option) return;\n\n    const responseJson = await api.get(\"/universities/has_country\", {\n      params: { name: getValueFromOption(option) },\n    });\n\n    const { has_country } = responseJson.data;\n\n    setProfileInfo({\n      ...profileInfo,\n      university: getValueFromOption(option),\n      universityHasCountry: has_country,\n    });\n  };\n\n  const handleAllDisciplines = (event) => {\n    if (event.target.checked) {\n      setProfileInfo({\n        ...profileInfo,\n        disciplines: disciplineOptions?.map((option) => option?.value),\n      });\n    } else {\n      setProfileInfo({\n        ...profileInfo,\n        disciplines: [],\n      });\n    }\n  };\n\n  return (\n    <>\n      <S.DropdownRow>\n        <S.DropdownTitle>Research institution</S.DropdownTitle>\n        {prefillInstitutionName.length > 0 ? (\n          <S.Input type=\"text\" value={prefillInstitutionName} tabIndex={-1} fixed readOnly />\n        ) : (\n          <>\n            <UniversityDropdown\n              value={getOptionFromValue(university)}\n              onChange={handleSelectUniversityOption}\n              data-testid=\"ri-admin-institution-name-input\"\n            />\n            <S.ContactLink>\n              You can{\" \"}\n              <a\n                href=\"/contact?message=Hello, I can't find my institution as an option. My institution is: \"\n                target=\"_blank\"\n              >\n                request that we add your institution\n              </a>{\" \"}\n              if you don&rsquo;t see it above.\n            </S.ContactLink>\n          </>\n        )}\n      </S.DropdownRow>\n      {!universityHasCountry && prefillInstitutionName.length === 0 && (\n        <S.DropdownRow>\n          <S.DropdownTitle>Institution location</S.DropdownTitle>\n          <SingleSelectDropdown\n            placeholder=\"Search countries\"\n            value={countryOption}\n            options={COUNTRY_OPTIONS}\n            onChange={(option) =>\n              setProfileInfo((oldProfileInfo) => ({\n                ...oldProfileInfo,\n                countryOption: option,\n                country_code: getValueFromOption(option),\n              }))\n            }\n            data-testid=\"ri-admin-institution-location-input\"\n          />\n        </S.DropdownRow>\n      )}\n      <S.DropdownRow>\n        <S.DropdownTitle>Which topics would you like to hear about on Halo?</S.DropdownTitle>\n        <S.CheckboxContainer>\n          <S.CheckboxItem>\n            <Checkbox\n              label=\"All disciplines\"\n              isChecked={disciplines?.length === disciplineOptions?.length}\n              onChange={handleAllDisciplines}\n              size=\"sm\"\n            />\n          </S.CheckboxItem>\n          {disciplineOptions?.map((option) => (\n            <S.CheckboxItem key={option?.value}>\n              <Checkbox\n                label={option?.label}\n                isChecked={disciplines?.includes(option?.value)}\n                onChange={() => handleDisciplines(option?.value)}\n                size=\"sm\"\n              />\n            </S.CheckboxItem>\n          ))}\n        </S.CheckboxContainer>\n      </S.DropdownRow>\n    </>\n  );\n}\n\nexport default ResearchInstitutionAdmin;\n","import { InfoBanner, SingleSelectDropdown, UniversityDropdown } from \"@components/library\";\nimport KeywordsDropdown from \"@components/library/Dropdowns/KeywordsDropdown/KeywordsDropdown\";\nimport { COUNTRY_OPTIONS } from \"@constants\";\nimport { getOptionFromValue, getValueFromOption } from \"@utils/dropdownUtils\";\nimport { useEffect } from \"react\";\nimport { SCIENTIST_ROLES } from \"src/constants\";\nimport api from \"src/requests/request\";\nimport * as S from \"../StepStyles\";\n\nexport const SCIENTIST_ROLE_OPTIONS = SCIENTIST_ROLES.map(getOptionFromValue);\n\nfunction ResearchInstitutionScientist({\n  profileInfo,\n  setProfileInfo,\n  prefillInstitutionName = \"\",\n  selectedGoogleScholarAuthor,\n}: {\n  profileInfo: any;\n  setProfileInfo: any;\n  prefillInstitutionName?: string;\n  selectedGoogleScholarAuthor?: any;\n}) {\n  const { university, universityHasCountry, role, disciplines, areasOfExpertise, countryOption } =\n    profileInfo;\n\n  const handleSelectUniversityOption = async (option) => {\n    if (!option) return;\n\n    const responseJson = await api.get(\"/universities/has_country\", {\n      params: { name: getValueFromOption(option) },\n    });\n    const { has_country } = responseJson.data;\n\n    setProfileInfo((oldProfileInfo) => ({\n      ...oldProfileInfo,\n      university: getValueFromOption(option),\n      universityHasCountry: has_country,\n    }));\n  };\n\n  // Prefill data if author is selected\n  useEffect(() => {\n    if (!selectedGoogleScholarAuthor) return;\n    setProfileInfo((oldProfileInfo) => ({\n      ...oldProfileInfo,\n      disciplines: selectedGoogleScholarAuthor.disciplines,\n      areasOfExpertise: selectedGoogleScholarAuthor.areas_of_expertise,\n    }));\n    // step2: university, step3a: university (match!)\n    if (selectedGoogleScholarAuthor.is_university_scientist) {\n      // pre-fill university, has_country, title\n      handleSelectUniversityOption(getOptionFromValue(selectedGoogleScholarAuthor.location));\n      setProfileInfo((oldProfileInfo) => ({\n        ...oldProfileInfo,\n        role: selectedGoogleScholarAuthor.title,\n      }));\n    }\n  }, []);\n\n  const googleScholarInstitutionNotFound = Boolean(\n    selectedGoogleScholarAuthor && !selectedGoogleScholarAuthor.is_university_scientist\n  );\n\n  return (\n    <>\n      <InfoBanner\n        shouldDisplay={googleScholarInstitutionNotFound}\n        text={\n          <div>\n            The institution listed in your Google Scholar profile is not currently in our database.\n            You can{\" \"}\n            <a\n              href=\"/contact?message=Hello, I can't find my institution as an option. My institution is: \"\n              target=\"_blank\"\n            >\n              request that we add your institution\n            </a>{\" \"}\n            or choose a different institution below.\n          </div>\n        }\n        type=\"ghost\"\n        margin=\"0 0 32px\"\n        padding=\"0\"\n      />\n      <S.DropdownRow>\n        <S.DropdownTitle>Research institution</S.DropdownTitle>\n        {prefillInstitutionName.length > 0 ? (\n          <S.Input type=\"text\" value={prefillInstitutionName} tabIndex={-1} fixed readOnly />\n        ) : (\n          <>\n            <UniversityDropdown\n              value={getOptionFromValue(university)}\n              onChange={handleSelectUniversityOption}\n              data-testid=\"ri-scientist-institution-name-input\"\n            />\n            {!googleScholarInstitutionNotFound && (\n              <S.ContactLink>\n                You can{\" \"}\n                <a\n                  href=\"/contact?message=Hello, I can't find my institution as an option. My institution is: \"\n                  target=\"_blank\"\n                >\n                  request that we add your institution\n                </a>{\" \"}\n                if you don&rsquo;t see it above.\n              </S.ContactLink>\n            )}\n          </>\n        )}\n      </S.DropdownRow>\n      {!universityHasCountry && prefillInstitutionName.length === 0 && (\n        <S.DropdownRow>\n          <S.DropdownTitle>Institution location</S.DropdownTitle>\n          <SingleSelectDropdown\n            withSearchIcon\n            placeholder=\"Search countries\"\n            value={countryOption}\n            options={COUNTRY_OPTIONS}\n            onChange={(option) =>\n              setProfileInfo((oldProfileInfo) => ({\n                ...oldProfileInfo,\n                countryOption: option,\n                country_code: getValueFromOption(option),\n              }))\n            }\n            data-testid=\"ri-scientist-institution-location-input\"\n          />\n        </S.DropdownRow>\n      )}\n      <S.DropdownRow>\n        <S.DropdownTitle>Which of the following best describes your role?</S.DropdownTitle>\n        <SingleSelectDropdown\n          placeholder=\"Select your role\"\n          options={SCIENTIST_ROLE_OPTIONS}\n          onChange={(e) =>\n            setProfileInfo((oldProfileInfo) => ({\n              ...oldProfileInfo,\n              role: getValueFromOption(e),\n            }))\n          }\n          value={getOptionFromValue(role)}\n          data-testid=\"ri-scientist-role-input\"\n        />\n      </S.DropdownRow>\n      <S.DropdownRow>\n        <S.DropdownTitle>Which disciplines are most relevant to your work?</S.DropdownTitle>\n        <KeywordsDropdown\n          keywordType=\"discipline\"\n          targetType=\"scientist\"\n          value={disciplines ?? []}\n          onChange={(selection) => setProfileInfo({ ...profileInfo, disciplines: selection })}\n        />\n      </S.DropdownRow>\n      <S.DropdownRow>\n        <S.DropdownTitle>What is your expertise?</S.DropdownTitle>\n        <S.DropdownSubtitle>Choose between 3 and 10 terms.</S.DropdownSubtitle>\n        <KeywordsDropdown\n          keywordType=\"area_of_expertise\"\n          targetType=\"scientist\"\n          value={areasOfExpertise ?? []}\n          onChange={(selection) => setProfileInfo({ ...profileInfo, areasOfExpertise: selection })}\n        />\n      </S.DropdownRow>\n    </>\n  );\n}\n\nexport default ResearchInstitutionScientist;\n","import Step3CompanyScientist from \"./CompanyScientist\";\nimport Step3CompanySponsor from \"./CompanySponsor\";\nimport Step3ResearchInstitutionAdmin from \"./ResearchInstitutionAdmin\";\nimport Step3ResearchInstitutionScientist from \"./ResearchInstitutionScientist\";\n\nimport { Button, SingleSelectDropdown, TextInput } from \"@components/library\";\nimport { COLORS, WINDOW_DIMENSIONS } from \"@constants\";\nimport { getOptionFromValue, getValueFromOption } from \"@utils/dropdownUtils\";\nimport { t } from \"@utils/i18n\";\nimport { isValidURL } from \"@utils/textUtils\";\nimport styled from \"styled-components\";\nimport * as S from \"../StepStyles\";\n\nexport const COMPANY_SPONSOR_TITLE_LIMIT = 50;\n\nexport const HOW_DID_YOU_HEAR_ABOUT_US_OTHER_OPTION = \"Other (describe below)\";\nconst HOW_DID_YOU_HEAR_ABOUT_US_OPTIONS = [\n  \"I received an email from Halo\",\n  \"I received an email from a university administrator\",\n  \"I received an email from a company/organization\",\n  \"I received an email from a fellow researcher/startup\",\n  \"I was actively searching for partnering opportunities\",\n  \"I read an article or listened to a podcast\",\n  HOW_DID_YOU_HEAR_ABOUT_US_OTHER_OPTION,\n].map(getOptionFromValue);\n\nconst Step3 = ({\n  userType,\n  handleOnboard,\n  onBack,\n  profileInfo,\n  setProfileInfo,\n  user,\n  isSubmitting,\n  selectedGoogleScholarAuthor,\n}) => {\n  const {\n    company,\n    role,\n    title,\n    companyName,\n    companyURL,\n    country_code,\n    disciplines,\n    areasOfExpertise,\n    university,\n    universityExpertise,\n    universityHasCountry,\n    howDidYouHearAboutUs,\n  } = profileInfo;\n\n  let disabled = isSubmitting;\n  if (userType === \"company-sponsor\")\n    disabled ||= !(company && title && title.length <= COMPANY_SPONSOR_TITLE_LIMIT);\n  if (userType === \"company-scientist\")\n    disabled ||= !(\n      companyName &&\n      isValidURL(companyURL) &&\n      country_code &&\n      role &&\n      disciplines?.length &&\n      areasOfExpertise?.length\n    );\n  if (userType === \"research-administrator\")\n    disabled ||= !(university && disciplines?.length && (universityHasCountry || country_code));\n  if (userType === \"research-scientist\")\n    disabled ||= !(\n      university &&\n      role &&\n      disciplines?.length &&\n      areasOfExpertise?.length &&\n      (universityHasCountry || country_code)\n    );\n\n  const onContinue = () => {\n    if (userType === \"company-sponsor\") return handleOnboard(\"sponsor\");\n    if (userType === \"research-administrator\") return handleOnboard(\"admin\");\n    return handleOnboard(\"scientist\");\n  };\n\n  let stepSubheading = \"\";\n  let stepHeading = \"\";\n  if (selectedGoogleScholarAuthor) {\n    stepSubheading = \"Confirm imported information\";\n    stepHeading = \"Here's what we gathered from Google Scholar.\\nWe'll import more after signup.\";\n  } else {\n    stepSubheading = \"Enter profile information\";\n    switch (userType) {\n      case \"research-scientist\":\n      case \"company-scientist\":\n        stepHeading =\n          \"Create a profile to start offering your expertise.\\nYou can add more information later.\";\n        break;\n      case \"company-sponsor\":\n        stepHeading = \"Create a profile to start finding solutions and experts.\";\n        break;\n      case \"research-administrator\":\n        stepHeading = \"Create a profile to start connecting faculty with relevant opportunities.\";\n        break;\n    }\n  }\n\n  return (\n    <Container center={!selectedGoogleScholarAuthor}>\n      <S.StepContainer width=\"592px\">\n        <S.StepHeader subheading={stepSubheading} heading={stepHeading} />\n        {userType === \"company-sponsor\" && (\n          <Step3CompanySponsor\n            profileInfo={profileInfo}\n            setProfileInfo={setProfileInfo}\n            email={user.email}\n          />\n        )}\n        {userType === \"company-scientist\" && (\n          <Step3CompanyScientist\n            profileInfo={profileInfo}\n            setProfileInfo={setProfileInfo}\n            selectedGoogleScholarAuthor={selectedGoogleScholarAuthor}\n          />\n        )}\n        {userType === \"research-administrator\" && (\n          <Step3ResearchInstitutionAdmin\n            profileInfo={profileInfo}\n            setProfileInfo={setProfileInfo}\n          />\n        )}\n        {userType === \"research-scientist\" && (\n          <Step3ResearchInstitutionScientist\n            profileInfo={profileInfo}\n            setProfileInfo={setProfileInfo}\n            selectedGoogleScholarAuthor={selectedGoogleScholarAuthor}\n          />\n        )}\n        <S.DropdownRow>\n          <S.DropdownTitle>\n            {t(\"pages.onboarding_container.how_did_you_hear_about_us.label\")}\n          </S.DropdownTitle>\n          <S.DropdownSubtitle>Optional</S.DropdownSubtitle>\n          <SingleSelectDropdown\n            placeholder={t(\"pages.onboarding_container.how_did_you_hear_about_us.placeholder\")}\n            placeholderColor={COLORS.NEUTRAL_400}\n            options={HOW_DID_YOU_HEAR_ABOUT_US_OPTIONS}\n            onChange={(option) =>\n              setProfileInfo({ ...profileInfo, howDidYouHearAboutUs: getValueFromOption(option) })\n            }\n            value={getOptionFromValue(howDidYouHearAboutUs)}\n          />\n          {howDidYouHearAboutUs === HOW_DID_YOU_HEAR_ABOUT_US_OTHER_OPTION && (\n            <>\n              <br />\n              <TextInput\n                placeholder=\"Please describe\"\n                placeholderColor={COLORS.NEUTRAL_400}\n                value={profileInfo.howDidYouHearAboutUsOther}\n                onChange={(e) => {\n                  setProfileInfo({ ...profileInfo, howDidYouHearAboutUsOther: e.target.value });\n                }}\n                hideClearButton\n              />\n            </>\n          )}\n        </S.DropdownRow>\n        <S.Hairline />\n        <S.ButtonContainer>\n          <Button type=\"button\" variant=\"ghost\" width=\"120px\" onClick={() => onBack(\"step2\")}>\n            Back\n          </Button>\n          <Button\n            type=\"button\"\n            disabled={disabled}\n            onClick={onContinue}\n            data-testid=\"company-sponsor-step-4-submit-button\"\n            width=\"120px\"\n          >\n            Complete signup\n          </Button>\n        </S.ButtonContainer>\n      </S.StepContainer>\n    </Container>\n  );\n};\n\nexport default Step3;\nconst Container = styled.div`\n  text-align: left;\n  padding: 0;\n  margin-bottom: 200px;\n  ${({ center }) => !center && `width: 800px;`}\n\n  ${WINDOW_DIMENSIONS.TABLET_MEDIA_QUERY} {\n    padding: 0 30px;\n    width: 100%;\n  }\n`;\n","import { COLORS, FONTS, JS_FONTS, WINDOW_DIMENSIONS } from \"@constants\";\nimport { StyleSheet } from \"aphrodite\";\nimport { ReactNode } from \"react\";\nimport ReactCodeInput from \"react-verification-code-input\";\nimport { Dropdown as DropdownOld, Icon, Loader as Loader_ } from \"semantic-ui-react\";\nimport styled from \"styled-components\";\nimport Dropdown from \"../../components/libraryOld/SelectionMenus/Dropdown\";\n\nconst { TABLET_MEDIA_QUERY } = WINDOW_DIMENSIONS;\n\nexport const StepContainer = styled.div`\n  padding: 0;\n  width: ${({ width }) => width || \"500px\"};\n  ${FONTS.REGULAR_2};\n\n  ${({ step, center }) =>\n    step === 1 || center\n      ? `\n        display: flex;\n        flex-direction: column;\n        align-items: center;\n      `\n      : \"\"}\n\n  ${TABLET_MEDIA_QUERY} {\n    padding: 0 30px;\n    width: 100%;\n  }\n`;\n\ninterface StepHeaderProps {\n  heading: string | ReactNode;\n  subheading: string | ReactNode;\n}\nexport function StepHeader({ heading, subheading }: StepHeaderProps) {\n  return (\n    <StepHeaderContainer>\n      <StepSubheading>{subheading}</StepSubheading>\n      <StepHeading>{heading}</StepHeading>\n    </StepHeaderContainer>\n  );\n}\nconst StepHeaderContainer = styled.div`\n  width: 100%;\n  margin-bottom: 56px;\n`;\nconst StepSubheading = styled.h2`\n  margin: 0;\n  color: ${COLORS.NEUTRAL_500};\n  ${FONTS.SEMIBOLD_1};\n`;\nconst StepHeading = styled.h1`\n  margin: 0 0 56px;\n  color: ${COLORS.BLACK};\n  ${FONTS.HEADING_3_REGULAR};\n`;\n\nexport const StepTitle = styled.div`\n  width: 100%;\n  display: flex;\n  align-items: center;\n  ${({ center }) => center && `justify-content: center;`}\n  color: ${COLORS.BLACK};\n  ${({ large }) => (large ? FONTS.HEADING_3_SEMIBOLD : FONTS.HEADING_4_SEMIBOLD)};\n  margin-bottom: 30px;\n`;\n\nexport const HelpAction = styled.div`\n  position: relative;\n  color: ${COLORS.HALO_BLUE};\n  ${FONTS.MEDIUM_2};\n  cursor: pointer;\n  :hover {\n    text-decoration: underline;\n  }\n\n  margin-bottom: 60px;\n`;\n\nexport const IconContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  align-items: flex-start;\n  width: 324px;\n`;\n\nexport const HelpIcon = styled(Icon)`\n  position: relative;\n  color: ${COLORS.HALO_BLUE} !important;\n  font-size: 16px !important;\n  top: 1px;\n  margin-bottom: 1px;\n  text-decoration: none !important;\n`;\n\nexport const DropdownRow = styled.div`\n  position: relative;\n  margin-bottom: 40px;\n\n  &:last-of-type {\n    margin-bottom: 35px;\n  }\n`;\nexport const DropdownTitle = styled.div`\n  ${FONTS.SEMIBOLD_1};\n  width: 100%;\n  padding-bottom: 7px;\n  color: ${COLORS.BLACK};\n`;\nexport const DropdownSubtitle = styled(DropdownTitle)`\n  ${FONTS.REGULAR_3};\n  margin-top: -4px;\n  color: ${COLORS.NEUTRAL_500};\n`;\n\nexport const Hairline = styled.div`\n  width: 100%;\n  border-bottom: 1px solid ${COLORS.NEUTRAL_200};\n  margin-bottom: 40px;\n`;\n\nexport const CompanyDropdown = styled(DropdownOld)`\n  padding-top: 6px !important;\n  padding-bottom: 6px !important;\n  margin: 0;\n  ${FONTS.REGULAR_2};\n  width: 350px !important;\n  min-height: 38px !important;\n  display: flex !important;\n  align-items: center !important;\n  flex-wrap: wrap !important;\n  ${TABLET_MEDIA_QUERY} {\n    width: 100% !important;\n  }\n\n  border-color: ${COLORS.NEUTRAL_200};\n`;\n\nexport const Input = styled.input`\n  width: ${(p) => (p.half && \"49%\") || \"100%\"};\n  height: 38px;\n  margin: 0 auto;\n  padding: 11px 28px 11px 10px;\n  ${FONTS.REGULAR_2};\n  color: ${COLORS.BLACK};\n  border: 1px solid ${(props) => (props.error ? COLORS.RED : COLORS.NEUTRAL_400)};\n  border-radius: 3px;\n\n  ${({ fixed }) =>\n    fixed &&\n    `\n      color: ${COLORS.NEUTRAL_500};\n      border: none;\n      background-color: ${COLORS.NEUTRAL_200};\n      pointer-events: none;\n    `}\n\n  &::placeholder {\n    opacity: 1;\n    color: ${COLORS.NEUTRAL_500};\n  }\n`;\n\n// Styles below overwrite library's default styles to match our design system\nexport const StyledCodeInput = styled(ReactCodeInput)`\n  margin-bottom: 33px;\n  width: unset !important;\n  > div {\n    > input {\n      background: ${COLORS.NEUTRAL_100};\n      border: 0.5px solid ${COLORS.HALO_BLUE} !important;\n      border-radius: 4px;\n      color: ${COLORS.BLACK};\n      font-size: 32px;\n      caret-color: ${COLORS.BLACK} !important;\n    }\n    > input:focus {\n      border: 2px solid ${COLORS.HALO_BLUE} !important;\n    }\n    > input:not(:last-child) {\n      margin-right: 8px;\n    }\n    > input:focus + input {\n      border-left: 0.5px solid ${COLORS.HALO_BLUE};\n    }\n    > input:focus + input:not(:placeholder-shown) {\n      border-left: 0.5px solid ${COLORS.HALO_BLUE};\n    }\n    > input:last-child:focus,\n    input:not(:placeholder-shown) {\n      border-color: ${COLORS.HALO_BLUE};\n    }\n    > input {\n      border-color: ${(props) => props.error && COLORS.RED} !important;\n    }\n  }\n`;\n\nexport const ContactLink = styled.div`\n  ${FONTS.REGULAR_3};\n  text-align: left;\n  width: 90%;\n  margin-top: 10px;\n  color: ${COLORS.NEUTRAL_500};\n`;\n\nexport const ResendEmailLink = styled.span`\n  ${FONTS.REGULAR_2};\n  text-align: left;\n  white-space: no-wrap;\n  color: ${COLORS.HALO_BLUE};\n  cursor: pointer;\n  :hover {\n    text-decoration: underline;\n  }\n`;\n\nexport const Padding = styled.div`\n  height: ${(props) => (props.height ? `${props.height}px` : \"10px\")};\n  display: block;\n`;\n\nexport const Loader = styled(Loader_)`\n  margin-top: 50px !important;\n`;\n\nexport const styles = StyleSheet.create({\n  Dropdown_blueLabel: {\n    border: `1px solid ${COLORS.HALO_BLUE}`,\n    color: COLORS.HALO_BLUE,\n    boxShadow: \"none\",\n    padding: \"2px 6px\",\n    display: \"flex\",\n    justifyContent: \"center\",\n    textAlign: \"center\",\n    margin: \"2px 4px\",\n    backgroundColor: `${COLORS.WHITE} !important`,\n  },\n  toast_body: {\n    color: COLORS.WHITE,\n    marginRight: \"10px\",\n    ...JS_FONTS.MEDIUM_3,\n  },\n  toast_progress: {\n    background: COLORS.HALO_BLUE,\n  },\n  toast_inner: {\n    padding: \"15px\",\n    paddingBottom: \"20px\",\n    borderRadius: \"4px\",\n  },\n  toast_container: {\n    zIndex: 1000000,\n  },\n  toast_close: {\n    position: \"initial\",\n  },\n});\n\nexport const CompanyDropdownNew = styled(Dropdown)`\n  ${TABLET_MEDIA_QUERY} {\n    width: 100% !important;\n  }\n`;\n\nexport const EmailSection = styled.div`\n  margin-top: 25px;\n  margin-bottom: 30px;\n`;\n\nexport const OpenEmail = styled.a`\n  img {\n    margin-right: 6px;\n  }\n`;\n\nexport const ButtonContainer = styled.div`\n  display: flex;\n\n  & > button:first-of-type {\n    margin-right: 16px;\n  }\n`;\n\nexport const StepDescription = styled.div`\n  ${FONTS.REGULAR_1}\n  ${({ marginBottom }) => marginBottom && `margin-bottom: ${marginBottom}px`}\n`;\n\nexport const NextStepsContainer = styled.div`\n  display: flex;\n  margin-bottom: 30px;\n\n  &:last-of-type {\n    margin-bottom: 60px;\n  }\n\n  & > img {\n    align-self: flex-start;\n    margin-right: 10px;\n    margin-top: 3px;\n  }\n`;\n\nexport const NextStepHeader = styled.div`\n  ${FONTS.HEADING_5_SEMIBOLD}\n`;\n\nexport const NextStepDescription = styled.div`\n  color: ${COLORS.NEUTRAL_500};\n  ${FONTS.REGULAR_1}\n`;\n\nexport const CheckboxContainer = styled.div`\n  display: flex;\n  flex-direction: row;\n  flex-wrap: wrap;\n  row-gap: 16px;\n`;\n\nexport const CheckboxItem = styled.div`\n  flex: 1 0 50%;\n`;\n","import { Button, Icon, TextInput } from \"@components/library\";\nimport { COLORS, FONTS, STYLES } from \"@constants\";\nimport { useState } from \"react\";\nimport styled from \"styled-components\";\n\ninterface Props {\n  onSubmit: (code: string) => Promise<void>;\n  error: string;\n  requestData?: {\n    company_name: string;\n    request_title: string;\n  };\n}\n\nconst AccessCode = ({ onSubmit, error, requestData }: Props) => {\n  const [code, setCode] = useState(\"\");\n  const [isLoading, setIsLoading] = useState(false);\n\n  return (\n    <Container\n      onSubmit={async (e) => {\n        e.preventDefault();\n        setIsLoading(true);\n        await onSubmit(code);\n        setIsLoading(false);\n      }}\n    >\n      {requestData && (\n        <Heading>\n          {requestData.company_name} invited you to apply to {requestData.request_title}.\n        </Heading>\n      )}\n      <TextInput\n        value={code}\n        onChange={(e) => setCode(e.target.value)}\n        label={\n          <>\n            <Icon name=\"Lock\" size=\"sm\" color={COLORS.BLACK} margin=\"1px 4px 0 0\" />\n            This opportunity is password-protected.\n          </>\n        }\n        labelFont={FONTS.SEMIBOLD_2}\n        placeholder=\"Enter password\"\n        errors={[{ hasError: Boolean(error), errorMessage: error }]}\n      />\n      <Button type=\"submit\" disabled={isLoading}>\n        Submit\n      </Button>\n    </Container>\n  );\n};\n\nexport default AccessCode;\n\nconst Container = styled.form`\n  display: flex;\n  flex-direction: column;\n  gap: 30px;\n  max-width: 500px;\n  margin: 40px auto;\n  padding: 40px;\n  border: 1px solid ${COLORS.NEUTRAL_100};\n  border-radius: 12px;\n  box-shadow: ${STYLES.SHADOW_CARD};\n`;\n\nconst Heading = styled.h1`\n  margin: 0;\n  ${FONTS.REGULAR_1}\n`;\n","import Icon, { IconName } from \"@components/library/Icon/Icon\";\nimport { COLORS, FONTS } from \"@constants\";\nimport { RfpBenefitType } from \"@tsTypes/rfps\";\nimport { FundingBenefit, NonMonetaryBenefit } from \"@tsTypes/schema\";\nimport styled from \"styled-components\";\n\ninterface Props {\n  benefit: FundingBenefit | NonMonetaryBenefit;\n}\n\nconst BenefitCard = ({ benefit: { benefit_type, details } }: Props) => {\n  let label = \"\";\n  let iconName: IconName;\n\n  switch (benefit_type) {\n    case RfpBenefitType.MARKET_ACCESS:\n      label = \"Market Access\";\n      iconName = \"Public\";\n      break;\n    case RfpBenefitType.EARLY_ACCESS:\n      label = \"Early Access\";\n      iconName = \"History\";\n      break;\n    case RfpBenefitType.EXPOSURE:\n      label = \"Exposure\";\n      iconName = \"View\";\n      break;\n    case RfpBenefitType.SPONSORED_RESEARCH:\n      label = \"Sponsored Research\";\n      iconName = \"Funding\";\n      break;\n    case RfpBenefitType.GIFT:\n      label = \"Gift (Unrestricted grant)\";\n      iconName = \"Funding\";\n      break;\n    case RfpBenefitType.INVESTMENT:\n      label = \"Investment\";\n      iconName = \"Funding\";\n      break;\n    case RfpBenefitType.PAYMENT:\n      label = \"Compensation\";\n      iconName = \"Funding\";\n      break;\n    case RfpBenefitType.EXPERTISE:\n      label = \"Expertise\";\n      iconName = \"Expertise\";\n      break;\n    case RfpBenefitType.NETWORKING:\n      label = \"Networking\";\n      iconName = \"Networking\";\n      break;\n    case RfpBenefitType.TOOLS_AND_TECHNOLOGY:\n      label = \"Tools and Technologies\";\n      iconName = \"Technology\";\n      break;\n    case RfpBenefitType.COMPOUNDS_AND_REAGENTS:\n      label = \"Compounds and Reagents\";\n      iconName = \"Compounds\";\n      break;\n    case RfpBenefitType.DATA:\n      label = \"Data\";\n      iconName = \"Data\";\n      break;\n    case RfpBenefitType.FACILITIES_AND_SERVICES:\n      label = \"Facilities and Services\";\n      iconName = \"Organization\";\n      break;\n    case RfpBenefitType.SERVICES_AGREEMENT:\n      label = \"Services Agreement\";\n      iconName = \"Funding\";\n      break;\n  }\n\n  return (\n    <Container>\n      <Title>\n        <Icon name={iconName} margin=\"0 6px 0 0\" />\n        {label}\n      </Title>\n      {details}\n    </Container>\n  );\n};\n\nexport default BenefitCard;\n\nconst Container = styled.div`\n  border: 1px solid ${COLORS.NEUTRAL_300};\n  background-color: ${COLORS.WHITE};\n  color: ${COLORS.BLACK};\n  border-radius: 4px;\n  padding: 16px;\n  ${FONTS.REGULAR_2};\n  word-break: break-word;\n  white-space: pre-wrap;\n`;\nconst Title = styled.div`\n  display: flex;\n  align-items: center;\n  ${FONTS.SEMIBOLD_1};\n  margin-bottom: 16px;\n  color: ${COLORS.BLACK};\n`;\n","import { Tag } from \"@components/library\";\nimport { FONTS, WINDOW_DIMENSIONS } from \"@constants\";\nimport { PARTNERSHIP_MODEL_LABELS, RfpPartnershipModel } from \"@tsTypes/rfps\";\nimport { FundingBenefit, NonMonetaryBenefit } from \"@tsTypes/schema\";\nimport styled from \"styled-components\";\nimport BenefitCard from \"./BenefitCard\";\n\ninterface Props {\n  partnershipModels: RfpPartnershipModel[];\n  fundingBenefits: FundingBenefit[];\n  nonMonetaryBenefits: NonMonetaryBenefit[];\n  isResponsive?: boolean;\n  withMarginTop?: boolean;\n}\n\nexport default function Benefits({\n  partnershipModels,\n  fundingBenefits,\n  nonMonetaryBenefits,\n  isResponsive = true,\n  withMarginTop = true,\n}: Props) {\n  if (partnershipModels.length + fundingBenefits.length + nonMonetaryBenefits.length === 0)\n    return null;\n\n  // Accounts for the fact that partnership model options can change over time\n  const validPartnershipModels = partnershipModels.filter((partnershipModel) =>\n    Object.values(RfpPartnershipModel).includes(partnershipModel)\n  );\n\n  return (\n    <WhatWeCanOfferYou withMarginTop={withMarginTop}>\n      <Heading id=\"offer\">What we can offer you</Heading>\n      {Number(validPartnershipModels.length) > 0 && (\n        <BenefitSection>\n          <Subheading>Eligible partnership models:</Subheading>\n          <PartnershipModels data-testid=\"rfp-partnership-models\">\n            {validPartnershipModels.map((partnershipModel) => (\n              <Tag\n                key={partnershipModel}\n                content={PARTNERSHIP_MODEL_LABELS[partnershipModel]}\n                size=\"md\"\n              />\n            ))}\n          </PartnershipModels>\n        </BenefitSection>\n      )}\n      {(fundingBenefits?.length > 0 || nonMonetaryBenefits?.length > 0) && (\n        <BenefitSection>\n          <Subheading>Benefits:</Subheading>\n          <BenefitsContainer isResponsive={isResponsive} data-testid=\"rfp-benefits\">\n            {fundingBenefits.map((benefit) => (\n              <BenefitCard key={`${benefit.benefit_type}-${benefit.details}`} benefit={benefit} />\n            ))}\n            {nonMonetaryBenefits.map((benefit) => (\n              <BenefitCard key={`${benefit.benefit_type}-${benefit.details}`} benefit={benefit} />\n            ))}\n          </BenefitsContainer>\n        </BenefitSection>\n      )}\n    </WhatWeCanOfferYou>\n  );\n}\n\nconst WhatWeCanOfferYou = styled.div`\n  width: calc(100% + 108px);\n  ${({ withMarginTop }) => withMarginTop && `margin-top: 64px;`}\n\n  ${WINDOW_DIMENSIONS.DESKTOP_MEDIA_QUERY} {\n    width: 100%;\n  }\n`;\nconst BenefitSection = styled.div`\n  display: flex;\n  flex-direction: column;\n`;\nconst PartnershipModels = styled.div`\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n  margin: 16px 0 24px;\n`;\nexport const BenefitsContainer = styled.div`\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 20px;\n  margin-top: 16px;\n  ${({ isResponsive }) =>\n    isResponsive &&\n    `\n      ${WINDOW_DIMENSIONS.DESKTOP_MEDIA_QUERY} {\n        grid-template-columns: 1fr;\n      }\n  `}\n`;\nconst Heading = styled.div`\n  ${FONTS.HEADING_4_SEMIBOLD};\n  margin-bottom: 24px;\n  &:not(:first-of-type) {\n    margin-top: 64px;\n  }\n`;\nconst Subheading = styled.div`\n  display: flex;\n  align-items: center;\n  ${FONTS.SEMIBOLD_1};\n  margin: 24px 0 8px;\n`;\n","import { COLORS, FONTS, STYLES } from \"@constants\";\nimport { RequestAttachmentPartial } from \"@tsTypes/request_attachments/_request_attachment\";\nimport { formatBytes, formatMIMEContentType } from \"@utils/textUtils\";\nimport styled from \"styled-components\";\nimport Icon from \"../Icon\";\n\ninterface Props {\n  attachment: RequestAttachmentPartial;\n  onClick: () => void;\n}\n\nexport default function RequestAttachment({ attachment, onClick }: Props) {\n  const { title, size_in_bytes, mime_content_type } = attachment;\n\n  const fileSize = formatBytes(size_in_bytes);\n  const type = formatMIMEContentType(mime_content_type);\n\n  return (\n    <Container onClick={onClick}>\n      <div>\n        <Icon name=\"Attachment\" size=\"md\" color={COLORS.NEUTRAL_500} margin=\"0\" />\n      </div>\n      <Info>\n        <Name>{title}</Name>\n        <Meta>\n          {type} &bull; {fileSize}\n        </Meta>\n      </Info>\n    </Container>\n  );\n}\n\nconst Name = styled.div`\n  ${FONTS.MEDIUM_3}\n  ${STYLES.TWO_LINES}\n`;\n\nconst Container = styled.div`\n  display: flex;\n  width: 100%;\n  padding: 8px 12px 8px 8px;\n  gap: 12px;\n  max-width: 280px;\n  min-height: 64px;\n  border-radius: 8px;\n  background: ${COLORS.NEUTRAL_50};\n\n  &:hover {\n    cursor: pointer;\n    background: ${COLORS.NEUTRAL_100};\n    ${Name} {\n      text-decoration: underline;\n    }\n  }\n`;\n\nconst Info = styled.div`\n  display: flex;\n  flex-direction: column;\n  justify-content: space-between;\n`;\n\nconst Meta = styled.div`\n  ${FONTS.REGULAR_3}\n  ${STYLES.ONE_LINE}\n  color: ${COLORS.NEUTRAL_600};\n`;\n","import MessageAttachmentGalleryModal from \"@components/modals/MessageAttachmentGalleryModal/MessageAttachmentGalleryModal\";\nimport { RequestAttachmentPartial } from \"@tsTypes/request_attachments/_request_attachment\";\nimport { ReactNode, useState } from \"react\";\nimport styled from \"styled-components\";\nimport RequestAttachment from \"./RequestAttachment\";\n\ninterface Props {\n  heading: ReactNode;\n  attachments: RequestAttachmentPartial[];\n}\n\nexport default function RequestAttachmentsContainer({ heading, attachments = [] }: Props) {\n  const [focusedGalleryAttachmentIndex, setFocusedGalleryAttachmentIndex] = useState<number>();\n\n  const openGallery = (attachmentId: number) => {\n    const index = attachments.findIndex((attachment) => attachment.id === attachmentId);\n    setFocusedGalleryAttachmentIndex(index);\n  };\n\n  const closeGallery = () => {\n    setFocusedGalleryAttachmentIndex(undefined);\n  };\n\n  if (attachments.length === 0) return null;\n\n  return (\n    <>\n      <MessageAttachmentGalleryModal\n        attachments={focusedGalleryAttachmentIndex !== null ? attachments : []}\n        focusedAttachmentIndex={focusedGalleryAttachmentIndex}\n        setFocusedAttachmentIndex={setFocusedGalleryAttachmentIndex}\n        closeGallery={closeGallery}\n      />\n      {heading}\n      <AttachmentsContainer>\n        {attachments.map((attachment) => (\n          <RequestAttachment\n            key={attachment.id}\n            attachment={attachment}\n            onClick={() => openGallery(attachment.id)}\n          />\n        ))}\n      </AttachmentsContainer>\n    </>\n  );\n}\n\nconst AttachmentsContainer = styled.div`\n  display: grid;\n  grid-template-columns: 280px 280px;\n  gap: 16px;\n`;\n","import { Button } from \"@components/library\";\nimport { COLORS, FONTS } from \"@constants\";\nimport { useState } from \"react\";\nimport styled from \"styled-components\";\n\nconst PreviewRfpPageBanner = () => {\n  const [buttonText, setButtonText] = useState(\"Copy Link\");\n\n  const handleCopyLink = async () => {\n    const url = window.location.href;\n    await navigator.clipboard.writeText(url);\n\n    setButtonText(\"Copied!\");\n    setTimeout(() => setButtonText(\"Copy Link\"), 2000);\n  };\n\n  return (\n    <Container>\n      This is a preview and not live on Halo\n      <Button type=\"button\" onClick={handleCopyLink} width=\"125px\">\n        {buttonText}\n      </Button>\n    </Container>\n  );\n};\n\nexport default PreviewRfpPageBanner;\n\nconst Container = styled.div`\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  width: 100%;\n  height: 73px;\n  background-color: ${COLORS.BLACK};\n  ${FONTS.MEDIUM_1};\n  font-weight: 450; // Normally we don't need font-weight with the FONTS constants, but this is a special case\n  color: ${COLORS.WHITE};\n  padding: 0 24px 0 32px;\n`;\n","import { FormEvent, useState } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport styled from \"styled-components\";\nimport Validator from \"validator\";\n\nimport { BlankModal, Icon, TextInput } from \"@components/library\";\nimport Button from \"@components/library/Buttons/Button\";\nimport { IconName } from \"@components/library/Icon/Icon\";\nimport { COLORS, FONTS } from \"@constants\";\nimport { toggleLoginModal } from \"@redux/actions/profileActions\";\nimport { RootState } from \"@redux/store\";\nimport { joinRfpWaitlist } from \"@requests/rfps\";\nimport { UserRole } from \"@tsTypes/users\";\nimport { usedPersonalEmail } from \"@utils/appUtils\";\n\nconst LINE_ITEMS = [\n  \"Submit a proposal in less than an hour.\",\n  \"Receive feedback directly from the industry contact.\",\n  \"Get discovered by industry partners looking for your expertise.\",\n];\n\nconst JoinWaitlistModal = ({ request, onClose, isOpen, handleShare }) => {\n  const dispatch = useDispatch();\n  const currentUser = useSelector((state: RootState) => state.profiles.currentUser);\n\n  const [firstName, setFirstName] = useState(\"\");\n  const [lastName, setLastName] = useState(\"\");\n  const [email, setEmail] = useState(\"\");\n\n  const [error, setError] = useState(\"\");\n  const [isSubmitting, setIsSubmitting] = useState(false);\n  const [hasSuccessfullySubmitted, setHasSuccessfullySubmitted] = useState(false);\n\n  const isUniversityAdmin = currentUser?.role === UserRole.UNIVERSITY_ADMIN;\n  let iconName: IconName = \"History\";\n  let header = \"Join Waitlist\";\n  let subheader = \"Indicate your interest and get notified if the opportunity reopens.\";\n  let ctaText = \"Join waitlist\";\n  if (isUniversityAdmin) {\n    iconName = \"Share\";\n    header = \"Share Opportunity\";\n    subheader =\n      \"Scientists can join the waitlist to show their interest and get notified if this opportunity reopens.\";\n    ctaText = \"Share\";\n  }\n\n  const handleSubmit = async (e?: FormEvent<HTMLFormElement>) => {\n    try {\n      e?.preventDefault();\n\n      if (isUniversityAdmin) {\n        handleShare();\n        onClose();\n        return;\n      }\n\n      setIsSubmitting(true);\n\n      if (!currentUser.id && (!Validator.isEmail(email) || usedPersonalEmail(email))) {\n        setError(\"Please use a valid company or university email.\");\n        return;\n      }\n\n      const payload = currentUser.id ? {} : { firstName, lastName, email };\n      await joinRfpWaitlist(request.id, payload);\n\n      setHasSuccessfullySubmitted(true);\n    } catch (err) {\n      setError(err.message);\n    } finally {\n      setIsSubmitting(false);\n    }\n  };\n\n  if (hasSuccessfullySubmitted) {\n    return (\n      <BlankModal isOpen={isOpen} onClose={onClose} width=\"540px\">\n        <ModalContent>\n          <div>\n            <Icon color={COLORS.GREEN} margin=\"0 auto\" name=\"Success\" size=\"lg\" />\n            <Header>Thank you!</Header>\n          </div>\n          <SubHeader>\n            You&rsquo;ve been added to the waitlist for this opportunity.{\" \"}\n            {!currentUser.id && \"Don't have a Halo account? Create one now.\"}\n          </SubHeader>\n          {!currentUser.id && (\n            <>\n              <BulletList>\n                {LINE_ITEMS.map((lineItem, i) => {\n                  return (\n                    <BulletPoint key={`lineItem-${i}`}>\n                      <Icon name=\"Verified\" color={COLORS.HALO_BLUE} />\n                      <BulletText>{lineItem}</BulletText>\n                    </BulletPoint>\n                  );\n                })}\n              </BulletList>\n              <div>\n                <Button\n                  margin=\"24px 0 0\"\n                  onClick={() => {\n                    dispatch(toggleLoginModal({ open: true }));\n                  }}\n                >\n                  Create Account\n                </Button>\n              </div>\n            </>\n          )}\n        </ModalContent>\n      </BlankModal>\n    );\n  }\n\n  return (\n    <BlankModal isOpen={isOpen} onClose={onClose} width=\"540px\">\n      <ModalContent>\n        <IconContainer>\n          {!isUniversityAdmin && <Icon margin=\"10px auto 0\" name={iconName} size=\"lg\" />}\n        </IconContainer>\n        <Header>{header}</Header>\n        <SubHeader>{subheader}</SubHeader>\n        <Form onSubmit={handleSubmit}>\n          {!currentUser.id && (\n            <>\n              <DoubleInputContainer>\n                <TextInput\n                  hideClearButton\n                  onChange={(e) => setFirstName(e.target.value)}\n                  placeholder=\"First Name\"\n                  value={firstName}\n                />\n                <TextInput\n                  hideClearButton\n                  onChange={(e) => setLastName(e.target.value)}\n                  placeholder=\"Last Name\"\n                  value={lastName}\n                />\n              </DoubleInputContainer>\n              <TextInput\n                errors={[\n                  {\n                    hasError: error.length > 0,\n                    errorMessage: error,\n                  },\n                ]}\n                hideClearButton\n                onChange={(e) => setEmail(e.target.value)}\n                placeholder=\"Email Address\"\n                value={email}\n              />\n            </>\n          )}\n          <Button\n            disabled={\n              (!currentUser.id &&\n                (firstName.length === 0 || lastName.length === 0 || email.length === 0)) ||\n              isSubmitting\n            }\n            iconName={iconName}\n            type=\"submit\"\n            width=\"100%\"\n          >\n            {ctaText}\n          </Button>\n        </Form>\n      </ModalContent>\n    </BlankModal>\n  );\n};\n\nexport default JoinWaitlistModal;\n\nexport const ModalContent = styled.div`\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: 16px;\n\n  padding: 63px 92px 101px;\n\n  width: 100%;\n  height: 100%;\n\n  text-align: center;\n`;\n\nconst IconContainer = styled.div`\n  min-height: 10px;\n`;\n\nconst Header = styled.h3`\n  margin: 0px;\n\n  ${FONTS.HEADING_3_SEMIBOLD};\n`;\n\nconst SubHeader = styled.h6`\n  margin: 0 0 20px 0;\n\n  max-width: 400px;\n\n  color: ${COLORS.NEUTRAL_500};\n\n  ${FONTS.MEDIUM_2};\n`;\n\nconst Form = styled.form`\n  display: flex;\n  flex-direction: column;\n  gap: 16px;\n\n  width: 100%;\n`;\n\nconst DoubleInputContainer = styled.div`\n  display: flex;\n  justify-content: space-between;\n  gap: 16px;\n`;\n\nconst BulletList = styled.div`\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: 16px;\n\n  margin: 8px 0 0;\n`;\n\nconst BulletPoint = styled.div`\n  display: inline-flex;\n  align-items: flex-start;\n  gap: 8px;\n\n  color: ${COLORS.BLACK};\n\n  ${FONTS.REGULAR_2};\n`;\n\nconst BulletText = styled.p`\n  margin: 0px;\n\n  width: 250px;\n\n  text-align: left;\n`;\n","import { Button } from \"@components/library\";\nimport { COLORS, WINDOW_DIMENSIONS } from \"@constants\";\nimport googleCalendar from \"@images/icons/google_calendar.svg\";\nimport ical from \"@images/icons/ical.svg\";\nimport outlook from \"@images/icons/outlook.svg\";\nimport dayjs from \"dayjs\";\nimport { cloneElement, useRef } from \"react\";\nimport AddToCalendarHOC, { SHARE_SITES } from \"react-add-to-calendar-hoc\";\nimport styled from \"styled-components\";\n\nconst AddToCalendarButton = ({ date, title, description }) => {\n  if (!date) return null;\n\n  const containerRef = useRef<HTMLDivElement | null>(null);\n\n  const handleBlur = () => {\n    if (containerRef.current) {\n      setTimeout(() => {\n        (containerRef.current?.children[0].children[0] as HTMLButtonElement).click();\n      }, 200);\n    }\n  };\n\n  const startDate = dayjs(date).startOf(\"day\");\n  const endDate = dayjs(startDate).add(1, \"day\").startOf(\"day\");\n\n  return (\n    <Container ref={containerRef} onBlur={handleBlur}>\n      <AddToCalendar\n        event={{\n          title,\n          description,\n          duration: 24,\n          endDatetime: dayjs(endDate).format(\"YYYYMMDD\"),\n          startDatetime: dayjs(startDate).format(\"YYYYMMDD\"),\n        }}\n        items={[SHARE_SITES.GOOGLE, SHARE_SITES.OUTLOOK, SHARE_SITES.ICAL]}\n      />\n    </Container>\n  );\n};\n\n// AddToCalendarHOC passes entire <a /> components with logic that is abstracted\n// away from the consumers (like us), so we use React.cloneElement to be able to\n// take the read-only react component passed by AddToCalendarHOC and pass in the\n// output of getDropdownComponent (gives us more control over the icons/text in\n// each dropdown item and doesn't lose the calendar logic that is not exposed).\nconst getDropdownComponent = (key) => {\n  switch (key.toLowerCase()) {\n    case \"google\":\n      return (\n        <>\n          <DropdownItemIcon src={googleCalendar} /> Google Calendar\n        </>\n      );\n    case \"ical\":\n      return (\n        <>\n          <DropdownItemIcon src={ical} /> {key}\n        </>\n      );\n    case \"outlook\":\n      return (\n        <>\n          <DropdownItemIcon src={outlook} /> {key}\n        </>\n      );\n  }\n};\n\nconst ButtonWrapper = ({ onClick }) => (\n  <Button type=\"button\" width=\"100%\" variant=\"secondary\" onClick={onClick} iconName=\"Calendar\">\n    Add to Calendar\n  </Button>\n);\n\nconst DropdownWrapper = ({ children }) => (\n  <CalendarDropdown>\n    {children.map((link) => (\n      <CalendarDropdownItem key={link.key}>\n        {cloneElement(link, [], getDropdownComponent(link.key))}\n      </CalendarDropdownItem>\n    ))}\n  </CalendarDropdown>\n);\n\nconst AddToCalendar = AddToCalendarHOC(ButtonWrapper, DropdownWrapper);\n\nexport default AddToCalendarButton;\n\nconst Container = styled.div`\n  position: relative;\n`;\nconst CalendarDropdown = styled.ul`\n  list-style-type: none;\n  background-color: ${COLORS.WHITE};\n  margin: auto;\n  padding: 10px;\n  font-size: 14px;\n  text-align: left;\n  border-radius: 8px;\n  box-shadow: 0px 10px 22px rgba(29, 71, 123, 0.08), 0px 2px 12px rgba(29, 71, 123, 0.08);\n  width: 222px;\n  position: absolute;\n  top: 44px;\n  left: calc(50%);\n  transform: translateX(-50%);\n  ${WINDOW_DIMENSIONS.MOBILE_MEDIA_QUERY} {\n    align-items: center;\n    justify-content: center;\n    line-height: 1.2em;\n  }\n`;\nconst CalendarDropdownItem = styled.li`\n  padding: 0px 10px;\n  align-self: stretch;\n  height: 38px;\n  margin: auto;\n  cursor: pointer;\n  &:hover {\n    background: ${COLORS.NEUTRAL_100};\n    border-radius: 4px;\n  }\n  a {\n    color: ${COLORS.BLACK};\n    vertical-align: text-top;\n    padding: 3px 0px 3px 5px;\n    display: inline-block;\n    width: 100%;\n    height: 100%;\n    &:hover,\n    &:active,\n    &:visited,\n    &:focus {\n      text-decoration: none;\n    }\n  }\n`;\nconst DropdownItemIcon = styled.img`\n  padding-right: 8px;\n`;\n","import RefineRecommendations from \"@components/RequestPageComponents/RefineRecommendations\";\nimport StatusCircle from \"@components/StatusCircle\";\nimport { Button, Icon } from \"@components/library\";\nimport FuelModal from \"@components/modals/FuelModal\";\nimport JoinWaitlistModal from \"@components/modals/JoinWaitlistModal\";\nimport { COLORS, FEATURE_FLAGS, FONTS, STYLES } from \"@constants\";\nimport { useSearchParams } from \"@hooks/router\";\nimport useFollowRequest from \"@hooks/useFollowRequest\";\nimport { toggleLoginModal } from \"@redux/actions/profileActions\";\nimport { RootState } from \"@redux/store\";\nimport { getCanSubmitProposal } from \"@requests/requests\";\nimport { SegmentEventName } from \"@tsTypes/__generated__/enums\";\nimport { RfpPageRequest } from \"@tsTypes/index\";\nimport { RfpStatus } from \"@tsTypes/rfps\";\nimport { UserRole } from \"@tsTypes/users\";\nimport { track } from \"@utils/appUtils\";\nimport { setPrevUrlCookie } from \"@utils/authUtils\";\nimport { formatDateToEastern } from \"@utils/dateUtils\";\nimport { requestProposalUrlPath } from \"@utils/requestUtils\";\nimport { getRfpStatus } from \"@utils/rfpUtils\";\nimport { withoutTooltip } from \"@utils/textUtils\";\nimport dayjs from \"dayjs\";\nimport { ReactElement, ReactNode, useEffect, useState } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { useHistory } from \"react-router-dom\";\nimport styled from \"styled-components\";\nimport AddToCalendarButton from \"./AddToCalendarButton\";\n\nconst { ACTIVE, COMING_SOON, IN_EXTENSION, CLOSED } = RfpStatus;\n\ninterface Props {\n  request: RfpPageRequest;\n  asPreview: boolean;\n  setIsShareModalOpen: (isOpen: boolean) => void;\n}\n\nconst RfpCtaContainer = ({ request, asPreview, setIsShareModalOpen }: Props) => {\n  const [isFuelModalOpen, setIsFuelModalOpen] = useState(false);\n  const [isJoinWaitlistModalOpen, setIsJoinWaitlistModalOpen] = useState(false);\n\n  const rfp = request.requestable;\n\n  const currentUser = useSelector((state: RootState) => state.profiles.currentUser);\n\n  const dispatch = useDispatch();\n  const history = useHistory();\n  const [searchParams] = useSearchParams();\n\n  useEffect(() => {\n    if (searchParams.get(\"share\") === \"true\") handleShare();\n  }, []);\n\n  const handleSubmitClick = async () => {\n    track(SegmentEventName.Click, {\n      ui_component: \"Submit Proposal Button\",\n    });\n\n    const submitUrl = requestProposalUrlPath(request);\n\n    const isFuel =\n      \"company_name\" in request.company && request.company.company_name?.includes(\"FUEL\");\n\n    if (currentUser.id) {\n      if (isFuel) {\n        const canSubmit = await getCanSubmitProposal(request.id);\n\n        if (canSubmit) {\n          history.push(submitUrl);\n        } else {\n          setIsFuelModalOpen(true);\n        }\n      } else {\n        history.push(submitUrl);\n      }\n    } else {\n      if (isFuel) {\n        setPrevUrlCookie();\n      } else {\n        setPrevUrlCookie(submitUrl);\n      }\n\n      dispatch(\n        toggleLoginModal({\n          open: true,\n          previousAction: \"easy apply\",\n        })\n      );\n    }\n  };\n\n  const { handleFollowRequest, isUserFollowing } = useFollowRequest(request.id);\n\n  const handleNotify = () => {\n    track(\"Clicked follow RFP button\", {\n      isUniversityMember: currentUser.role === UserRole.UNIVERSITY_ADMIN,\n    });\n\n    handleFollowRequest();\n  };\n\n  const handleShare = () => {\n    track(\"Clicked share RFP button\");\n\n    if (currentUser.id) {\n      setIsShareModalOpen(true);\n    } else {\n      dispatch(toggleLoginModal({ open: true, previousAction: \"share rfp\" }));\n    }\n  };\n\n  const handleJoinWaitlist = () => {\n    track(\"Clicked join waitlist button\");\n    setIsJoinWaitlistModalOpen(true);\n  };\n\n  const rfpStatus = getRfpStatus(request);\n\n  let status: ReactNode = rfp.deadline && (\n    <>\n      <StatusCircle margin=\"0 8px 0 0\" /> Deadline: {formatDateToEastern(rfp.deadline, \"MMMM D\")}\n    </>\n  );\n  if (rfpStatus === IN_EXTENSION || rfpStatus === CLOSED) {\n    status = (\n      <>\n        <Icon margin=\"0 4px 0 0\" name=\"Success\" size=\"sm\" /> Complete\n      </>\n    );\n  } else if (rfpStatus === COMING_SOON) {\n    status = `Coming Soon: ${dayjs(rfp.launch_date ?? 0).format(\"MMMM D\")}`;\n  }\n\n  const viewAsScientist = currentUser.role !== 2;\n\n  const isJamesStanton = currentUser.id === 24;\n\n  const canApply =\n    rfpStatus === ACTIVE || (rfpStatus === IN_EXTENSION && request.enabled) || isJamesStanton;\n\n  const hasIncompleteProposal = Boolean(\n    currentUser.profile_info.proposals?.find(\n      (proposal) => proposal.request_id === request.id && !proposal.completed\n    )\n  );\n\n  let heading = \"Share Opportunity\";\n  if (viewAsScientist) {\n    if (canApply) {\n      heading = \"Submit Proposal\";\n    } else if (rfpStatus === COMING_SOON) {\n      heading = \"Follow Opportunity\";\n    }\n  }\n\n  let scientistPrimaryButton: ReactElement | null = null;\n  let universityPrimaryButton = (\n    <Button iconName=\"Share\" margin=\"0 0 10px\" onClick={handleShare} type=\"button\">\n      Share\n    </Button>\n  );\n  if (!request.company.is_partner) {\n    scientistPrimaryButton = (\n      <Button\n        iconName=\"Open in a new tab\"\n        onClick={() =>\n          \"url\" in request.company &&\n          request.company.url &&\n          window.open(request.company.url, \"_blank\")\n        }\n        type=\"button\"\n      >\n        View Site\n      </Button>\n    );\n  } else if (canApply) {\n    scientistPrimaryButton = (\n      <Button\n        data-testid=\"rfp-page-submit-proposal-button\"\n        iconName={hasIncompleteProposal && !isJamesStanton ? \"Attention\" : \"Easy Apply\"}\n        onClick={handleSubmitClick}\n        type=\"button\"\n      >\n        {hasIncompleteProposal && !isJamesStanton ? \"Complete Proposal\" : \"Easy Apply\"}\n      </Button>\n    );\n  } else if (rfpStatus === COMING_SOON) {\n    scientistPrimaryButton = isUserFollowing ? (\n      <FollowingConfirmation>\n        <Icon color={COLORS.GREEN} margin=\"0 4px 0 0\" name=\"Success\" />\n        You&apos;ll be notified\n      </FollowingConfirmation>\n    ) : (\n      <Button iconName=\"Bell\" margin=\"10px 0 0\" onClick={handleNotify} type=\"button\">\n        Notify Me\n      </Button>\n    );\n  } else if (rfpStatus === IN_EXTENSION || rfpStatus === CLOSED) {\n    scientistPrimaryButton = (\n      <Button iconName=\"Share\" onClick={handleShare} type=\"button\">\n        Share\n      </Button>\n    );\n  }\n\n  if (rfp.is_trial) {\n    if (rfpStatus === ACTIVE) {\n      status = (\n        <>\n          <StatusCircle margin=\"0 8px 0 0\">\n            <Icon color={COLORS.WHITE} name=\"History\" size=\"sm\" />\n          </StatusCircle>\n          Accepting first 5 proposals\n        </>\n      );\n    } else if (rfpStatus === IN_EXTENSION && request.enabled) {\n      heading = \"Join Waitlist\";\n      status = \"Get notified if this opportunity reopens.\";\n      scientistPrimaryButton = (\n        <Button iconName=\"History\" onClick={handleJoinWaitlist} type=\"button\">\n          Join waitlist\n        </Button>\n      );\n      universityPrimaryButton = scientistPrimaryButton;\n    }\n  }\n\n  useEffect(() => {\n    if (rfp.is_trial && rfpStatus === IN_EXTENSION && request.enabled) {\n      setIsJoinWaitlistModalOpen(true);\n    }\n  }, [rfp.is_trial, rfpStatus]);\n\n  return (\n    <>\n      <FuelModal isOpen={isFuelModalOpen} onClose={() => setIsFuelModalOpen(false)} />\n      <JoinWaitlistModal\n        isOpen={isJoinWaitlistModalOpen}\n        onClose={() => setIsJoinWaitlistModalOpen(false)}\n        handleShare={handleShare}\n        request={request}\n      />\n      <Container isSponsor={currentUser.role === 1}>\n        <TopContainer $showBorder={FEATURE_FLAGS.RELEVANT_NOT_RELEVANT_BUTTONS}>\n          <Heading>{heading}</Heading>\n          {!asPreview && <Status>{status}</Status>}\n          {viewAsScientist ? scientistPrimaryButton : universityPrimaryButton}\n          {viewAsScientist && (\n            <>\n              {(rfpStatus === COMING_SOON || canApply) && (\n                <Button\n                  iconName=\"Share\"\n                  margin={`10px 0 ${\n                    rfpStatus === COMING_SOON || rfpStatus === ACTIVE ? \"10px\" : 0\n                  }`}\n                  onClick={handleShare}\n                  variant=\"secondary\"\n                  type=\"button\"\n                >\n                  Share\n                </Button>\n              )}\n              {(rfpStatus === COMING_SOON || rfpStatus === ACTIVE) && (\n                <AddToCalendarButton\n                  date={rfpStatus === COMING_SOON ? rfp.launch_date : rfp.deadline}\n                  description={`https://halo.science/research/${\n                    rfp.rfp_program?.identifier ?? \"program\"\n                  }/${request.slug}\\n\\n${withoutTooltip(rfp.background)}`}\n                  title={`Halo RFP ${rfpStatus === COMING_SOON ? \"Launch Date\" : \"Deadline\"}: ${\n                    request.title\n                  }`}\n                />\n              )}\n            </>\n          )}\n        </TopContainer>\n        {FEATURE_FLAGS.RELEVANT_NOT_RELEVANT_BUTTONS && (\n          <RefineRecommendations\n            request={request}\n            isComplete={rfpStatus === IN_EXTENSION || rfpStatus === CLOSED}\n          />\n        )}\n      </Container>\n    </>\n  );\n};\n\nexport default RfpCtaContainer;\n\nconst Container = styled.div`\n  display: flex;\n  flex-direction: column;\n  text-align: center;\n  pointer-events: ${({ isSponsor }) => (isSponsor ? \"none\" : \"auto\")};\n\n  border-radius: 8px;\n  border: 1px solid ${COLORS.NEUTRAL_250};\n  box-shadow: ${STYLES.SHADOW_B};\n`;\nconst TopContainer = styled.div<{ $showBorder?: boolean }>`\n  display: flex;\n  flex-direction: column;\n  text-align: center;\n\n  width: 100%;\n  padding: 40px 32px 24px;\n\n  ${({ $showBorder }) => $showBorder && `border-bottom: 1px solid ${COLORS.NEUTRAL_250};`}\n`;\nconst Heading = styled.div`\n  ${FONTS.HEADING_4_SEMIBOLD};\n  margin-bottom: 24px;\n`;\nconst Status = styled.div`\n  display: flex;\n  align-items: center;\n  margin: 0 auto 24px;\n  height: 24px;\n  ${FONTS.MEDIUM_2};\n`;\nconst FollowingConfirmation = styled.div`\n  display: flex;\n  align-items: center;\n  height: 42px;\n  color: ${COLORS.GREEN};\n  ${FONTS.MEDIUM_2};\n  margin: 0 auto 10px;\n`;\n","import { Tag, TagTooltip } from \"@components/library\";\nimport { COLORS, FONTS } from \"@constants\";\nimport { RfpPageRequest } from \"@tsTypes/index\";\nimport { MAX_KEYWORD_DISPLAY_COUNT } from \"src/constants/requests\";\nimport styled from \"styled-components\";\n\ninterface Props {\n  request: RfpPageRequest;\n}\n\nconst RfpKeywordsContainer = ({ request }: Props) => {\n  const keywords = [...request.areas_of_expertise, ...request.disciplines];\n\n  return (\n    <Container>\n      {keywords.length > 0 && (\n        <div>\n          <Heading>Seeking partners focused on</Heading>\n          <Tags>\n            {keywords.slice(0, MAX_KEYWORD_DISPLAY_COUNT).map((keyword) => (\n              <Tag key={keyword} content={keyword} size=\"sm\" theme=\"neutral\" />\n            ))}\n            {keywords.length > MAX_KEYWORD_DISPLAY_COUNT && (\n              <TagTooltip\n                tags={keywords.slice(MAX_KEYWORD_DISPLAY_COUNT).map((keyword) => (\n                  <Tag key={keyword} content={keyword} size=\"sm\" theme=\"neutral\" />\n                ))}\n              >\n                <Tag\n                  content={`${keywords.length - MAX_KEYWORD_DISPLAY_COUNT} more`}\n                  size=\"sm\"\n                  theme=\"neutral\"\n                />\n              </TagTooltip>\n            )}\n          </Tags>\n        </div>\n      )}\n    </Container>\n  );\n};\n\nexport default RfpKeywordsContainer;\n\nconst Container = styled.div`\n  padding: 24px;\n  border: 1px solid ${COLORS.NEUTRAL_250};\n  border-radius: 8px;\n`;\nconst Heading = styled.div`\n  margin-bottom: 20px;\n  ${FONTS.SEMIBOLD_1};\n`;\nconst Tags = styled.div`\n  display: flex;\n  flex-wrap: wrap;\n  line-height: 1;\n  & > div {\n    margin-top: 8px;\n  }\n`;\n","import toast from \"@components/Toast/Toast\";\nimport { Icon, InfoBanner, TextButton } from \"@components/library\";\nimport { COLORS } from \"@constants\";\nimport styled from \"styled-components\";\n\ninterface Props {\n  accessCode: string;\n}\n\nconst AccessCodeBanner = ({ accessCode }: Props) => {\n  const handleCopyCode = async () => {\n    await navigator.clipboard.writeText(accessCode);\n    toast.success(\"Password copied to clipboard\");\n  };\n\n  return (\n    <div>\n      <InfoBanner\n        shouldDisplay\n        hideIcon\n        width=\"calc(100% - 96px)\"\n        type=\"attention-orange\"\n        padding=\"18px 24px\"\n        margin=\"28px auto\"\n        text={\n          <Container>\n            <Icon name=\"Lock\" color={COLORS.ORANGE_900} margin=\"0 8px 0 0\" />\n            External partners need a password to access this opportunity.\n            <TextButton\n              text=\"Copy password\"\n              iconName=\"Copy\"\n              iconPosition=\"left\"\n              onClick={handleCopyCode}\n              color={COLORS.ORANGE_900}\n              margin=\"0 24px 0 auto\"\n            />\n          </Container>\n        }\n      />\n    </div>\n  );\n};\n\nexport default AccessCodeBanner;\n\nconst Container = styled.div`\n  display: flex;\n  align-items: center;\n  width: 100%;\n`;\n","import InviteModal from \"@components/InviteModal\";\nimport { RequestPageBanner } from \"@components/RequestPageComponents\";\nimport TRLs from \"@components/TRLs\";\nimport toast from \"@components/Toast\";\nimport { Button, Icon, PageContainer, Tag, TextLink, Tooltip } from \"@components/library\";\nimport RequestAttachmentsContainer from \"@components/library/Attachments/RequestAttachmentsContainer\";\nimport { COLORS, FONTS, WINDOW_DIMENSIONS } from \"@constants\";\nimport { useSearchParams } from \"@hooks/router\";\nimport { fetchCurrentUser } from \"@redux/actions/profileActions\";\nimport { RootState } from \"@redux/store\";\nimport { getRfpForRfpPage } from \"@requests/rfps\";\nimport { marketplacePath } from \"@routes/utils\";\nimport { SegmentEventName } from \"@tsTypes/__generated__/enums\";\nimport { RfpStatus } from \"@tsTypes/rfps\";\nimport { getArrayFromRubyRange, track } from \"@utils/appUtils\";\nimport { getRfpStatus } from \"@utils/rfpUtils\";\nimport { fixMarkdownNewlines, renderMarkdownText } from \"@utils/textUtils\";\nimport { useEffect, useLayoutEffect, useRef, useState } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { Link, useHistory, useParams } from \"react-router-dom\";\nimport { Loader } from \"semantic-ui-react\";\nimport styled from \"styled-components\";\nimport RequestDiscussion from \"../../components/RequestDiscussion/RequestDiscussion\";\nimport PreviewRfpPageBanner from \"./PreviewRfpPageBanner\";\nimport RfpCta from \"./RfpCta\";\nimport RfpKeywordsContainer from \"./RfpKeywordsContainer\";\n// @ts-ignore\nimport { RfpPageRequest } from \"@tsTypes/index\";\nimport { UserRole } from \"@tsTypes/users\";\nimport { t } from \"@utils/i18n\";\nimport RequestFAQs from \"../../components/RequestFAQs\";\nimport AboutCompany from \"../../components/RequestPageComponents/AboutCompany\";\nimport AccessCode from \"./AccessCode\";\nimport AccessCodeBanner from \"./AccessCodeBanner\";\nimport Benefits from \"./Benefits\";\n\ninterface Props {\n  asPreview?: boolean;\n  rfpPreviewData?: RfpPageRequest;\n  isResponsive?: boolean;\n}\n\nexport const ACCESS_CODE_PARAM = \"access_code\";\n\nconst RfpPage = ({ asPreview = false, rfpPreviewData, isResponsive = true }: Props) => {\n  const [isLoading, setIsLoading] = useState(true);\n  const [request, setRequest] = useState<RfpPageRequest>(rfpPreviewData ?? ({} as RfpPageRequest));\n  const [isShareModalOpen, setIsShareModalOpen] = useState(false);\n  const [isCommenting, setIsCommenting] = useState(false);\n\n  const [needsAccessCode, setNeedsAccessCode] = useState(false);\n  const [accessCodeError, setAccessCodeError] = useState(\"\");\n  const [accessCodeRequestData, setAccessCodeRequestData] = useState<{\n    company_name: string;\n    request_title: string;\n  }>();\n\n  const rfp = (rfpPreviewData ?? request).requestable;\n  const company = request.company;\n\n  const rfpDiscussionRef = useRef<HTMLDivElement>(null);\n  const currentUser = useSelector((state: RootState) => state.profiles.currentUser);\n\n  const dispatch = useDispatch();\n  const { identifier, previewHash } = useParams();\n  const history = useHistory();\n  const { fromHref } = history.location;\n  const [searchParams] = useSearchParams();\n  const accessCodeParam = searchParams.get(ACCESS_CODE_PARAM);\n\n  const fetchRequest = async (code?: string) => {\n    try {\n      // RFP Page\n      if (!asPreview && !rfpPreviewData) {\n        const { request: rfpRequest } = await getRfpForRfpPage(identifier, code ?? accessCodeParam);\n\n        if (!rfpRequest.id) {\n          history.push(\"/\");\n        }\n\n        document.title = `${rfpRequest.title} | ${rfpRequest.requestable.rfp_program?.name} | Halo`;\n\n        dispatch(fetchCurrentUser());\n\n        track(SegmentEventName.View, {\n          request_id: rfpRequest.id,\n          requestable: {\n            requestable_id: rfpRequest.id,\n            requestable_type: rfpRequest.requestable_type,\n          },\n          react_component: \"RfpPage\",\n        });\n\n        if (searchParams.get(\"saved\")) {\n          toast.success(\n            <p>\n              Saved! You can find your draft in&nbsp;\n              <Link to=\"/my_proposals\" style={{ textDecoration: \"underline\", color: \"white\" }}>\n                My proposals\n              </Link>\n              .\n            </p>\n          );\n        }\n\n        if (code) {\n          searchParams.set(ACCESS_CODE_PARAM, code);\n          history.replace({ search: searchParams.toString() });\n        }\n        setNeedsAccessCode(false);\n\n        setRequest(rfpRequest);\n        setIsLoading(false);\n        return;\n      }\n\n      // RFP Preview Page\n      if (asPreview && !rfpPreviewData) {\n        const decodedRfpIdentifier = atob(previewHash);\n\n        const { request: rfpRequest } = await getRfpForRfpPage(decodedRfpIdentifier, previewHash);\n\n        if (!rfpRequest.id) {\n          history.push(\"/\");\n        }\n\n        setRequest(rfpRequest);\n        setIsLoading(false);\n        return;\n      }\n\n      // RFP Form Preview\n      if (asPreview && rfpPreviewData) {\n        setIsLoading(false);\n      }\n    } catch (e) {\n      if (e.response.status === 401) {\n        if (needsAccessCode) {\n          setAccessCodeError(\"Access code incorrect.\");\n        } else {\n          setNeedsAccessCode(true);\n          setAccessCodeRequestData(e.response.data);\n        }\n      }\n    }\n  };\n\n  useEffect(() => {\n    fetchRequest();\n  }, []);\n\n  useLayoutEffect(() => {\n    let animationFrameId: number;\n\n    const checkAndScroll = () => {\n      if (window.location.hash === \"#qa\" && rfpDiscussionRef.current) {\n        rfpDiscussionRef.current.scrollIntoView({ behavior: \"smooth\" });\n      } else {\n        animationFrameId = requestAnimationFrame(checkAndScroll);\n      }\n    };\n\n    checkAndScroll();\n\n    return () => {\n      if (animationFrameId) {\n        cancelAnimationFrame(animationFrameId);\n      }\n    };\n  }, [rfpDiscussionRef]);\n\n  if (needsAccessCode) {\n    return (\n      <AccessCode\n        onSubmit={fetchRequest}\n        error={accessCodeError}\n        requestData={accessCodeRequestData}\n      />\n    );\n  }\n\n  if (isLoading) {\n    return <Loader inline=\"centered\" />;\n  }\n\n  const showRfpDiscussionBanner =\n    getRfpStatus(request) !== RfpStatus.IN_EXTENSION && rfp.is_discussion_enabled;\n  const trlRange = rfp.trl_range ? getArrayFromRubyRange(rfp.trl_range) : null;\n\n  const shouldShowAccessCodeBanner =\n    !asPreview &&\n    request.visibility.none &&\n    request.access_code &&\n    (currentUser.role === UserRole.SPONSOR || currentUser.is_admin);\n\n  const isConfidential = request?.confidential || rfpPreviewData?.confidential;\n\n  return (\n    <>\n      <InviteModal\n        open={isShareModalOpen}\n        requestId={request.id}\n        closeModal={() => setIsShareModalOpen(false)}\n        trackAndToastHandler={() => toast.success(\"RFP shared!\")}\n        inviteMessage=\"\"\n        inviteUrl=\"/notifications/share_rfp\"\n        modalHeader={`Share this opportunity with ${\n          currentUser.role === 2 ? \"faculty\" : \"colleagues\"\n        }`}\n        modalSubheader={`Your ${\n          currentUser.role === 2 ? \"faculty\" : \"colleague(s)\"\n        } will receive an email with a link to this opportunity`}\n        inviteSubject={`${currentUser.first_name} ${currentUser.last_name} shared a funding opportunity with you.`}\n        typeOfInvite=\"shareRFP\"\n      />\n      {asPreview && !rfpPreviewData && <PreviewRfpPageBanner />}\n      {shouldShowAccessCodeBanner && <AccessCodeBanner accessCode={request.access_code!} />}\n      <Container asPreview={asPreview} isResponsive={isResponsive} data-testid=\"rfp-page-main\">\n        <PageContainer hasPaddingTop={asPreview} hasTopDivider>\n          {!asPreview && (\n            <TextLink\n              to={fromHref ?? marketplacePath(\"requests\")}\n              font={FONTS.MEDIUM_2}\n              margin=\"24px 0\"\n            >\n              <Icon name=\"Chevron Left\" margin=\"0 0 0 -8px\" />\n              Back to Opportunities\n            </TextLink>\n          )}\n          <RequestPageBanner request={request} asPreview={asPreview} />\n          <MainContent isResponsive={isResponsive}>\n            <div>\n              {showRfpDiscussionBanner && (\n                <QuestionCTA isResponsive={isResponsive}>\n                  <div>\n                    <Heading>What questions do you have about this RFP?</Heading>\n                    <div>\n                      Get them answered by the team at{\" \"}\n                      {!isConfidential && \"company_name\" in company\n                        ? company.company_name\n                        : \"the company\"}\n                      .\n                    </div>\n                  </div>\n                  <Button\n                    width=\"max-content\"\n                    onClick={() => {\n                      rfpDiscussionRef.current?.scrollIntoView({ behavior: \"smooth\" });\n                      if (rfp.is_discussion_enabled && currentUser.role === 0) {\n                        setIsCommenting(true);\n                      }\n                    }}\n                  >\n                    Ask your question\n                  </Button>\n                </QuestionCTA>\n              )}\n              <Heading>{t(\"pages.rfp_page.headings.background\")}</Heading>\n              <div data-testid=\"rfp-background\">\n                {renderMarkdownText(fixMarkdownNewlines(rfp.background))}\n              </div>\n              <Heading>{t(\"pages.rfp_page.headings.looking_for\")}</Heading>\n              <BulletedSection data-testid=\"rfp-looking-for\">\n                {renderMarkdownText(rfp.looking_for)}\n              </BulletedSection>\n              <RequestAttachmentsContainer\n                heading={<Subheading>{t(\"pages.rfp_page.headings.attachments\")}</Subheading>}\n                attachments={request.request_attachments}\n              />\n              {/* These fields are stored as strings, and the first 3 characters just render a bullet point */}\n              {Boolean(request.request_solutions?.length) && (\n                <>\n                  <Subheading>{t(\"pages.rfp_page.headings.solutions_of_interest\")}</Subheading>\n                  <BulletedSection data-testid=\"rfp-solutions-of-interest\">\n                    {renderMarkdownText(\n                      request.request_solutions.map((solution) => `* ${solution.name}`).join(\"\\n\")\n                    )}\n                  </BulletedSection>\n                </>\n              )}\n              {Boolean(request.request_requirements?.length) && (\n                <>\n                  <Subheading>{t(\"pages.rfp_page.headings.must_have_requirements\")}</Subheading>\n                  <BulletedSection data-testid=\"rfp-must-have-requirements\">\n                    {renderMarkdownText(\n                      request.request_requirements\n                        .map((requirement) => `* ${requirement.description}`)\n                        .join(\"\\n\")\n                    )}\n                  </BulletedSection>\n                </>\n              )}\n\n              {(rfp.preferred_requirements?.length ?? 0) > 2 && (\n                <>\n                  <Subheading>{t(\"pages.rfp_page.headings.preferred_requirements\")}</Subheading>\n                  <BulletedSection data-testid=\"rfp-nice-to-have-requirements\">\n                    {renderMarkdownText(rfp.preferred_requirements)}\n                  </BulletedSection>\n                </>\n              )}\n              {(rfp.out_of_scope?.length ?? 0) > 2 && (\n                <>\n                  <Subheading>{t(\"pages.rfp_page.headings.out_of_scope\")}</Subheading>\n                  <BulletedSection data-testid=\"rfp-out-of-scope\">\n                    {renderMarkdownText(rfp.out_of_scope)}\n                  </BulletedSection>\n                </>\n              )}\n              {trlRange ? (\n                <TRLsContainer>\n                  <Subheading>\n                    {t(\"pages.rfp_page.headings.trl\")}\n                    <Tag\n                      content={\n                        <TrlTagContent>\n                          {trlRange[0] === trlRange[1]\n                            ? `Level ${trlRange[0]}`\n                            : `Levels ${trlRange[0]}-${trlRange[1]}`}\n                          <Tooltip\n                            content=\"Technology readiness levels help describe the maturity of solutions. An organization may seek solutions that fall only within a specified range of TRLs.\"\n                            tooltipWidth=\"410px\"\n                          >\n                            <Icon name=\"Info\" size=\"xs\" color={COLORS.NEUTRAL_400} />\n                          </Tooltip>\n                        </TrlTagContent>\n                      }\n                      size=\"md\"\n                      margin=\"0 0 0 16px\"\n                    />\n                  </Subheading>\n                  <TRLs trlRange={trlRange} />\n                </TRLsContainer>\n              ) : null}\n              <Benefits\n                partnershipModels={rfp.partnership_models ?? []}\n                fundingBenefits={request.funding_benefits}\n                nonMonetaryBenefits={request.non_monetary_benefits}\n                isResponsive={isResponsive}\n              />\n              {!isConfidential && <AboutCompany request={request} isResponsive={isResponsive} />}\n              {rfp.is_discussion_enabled && (\n                <RequestDiscussion\n                  request={request}\n                  ref={rfpDiscussionRef}\n                  isCommenting={isCommenting}\n                  setIsCommenting={setIsCommenting}\n                  setIsShareModalOpen={setIsShareModalOpen}\n                />\n              )}\n            </div>\n            <RightColumn>\n              <RfpCta\n                request={request}\n                asPreview={asPreview}\n                setIsShareModalOpen={setIsShareModalOpen}\n              />\n              <RfpKeywordsContainer request={request} />\n              {request.visibility.any && <RequestFAQs request={request} />}\n            </RightColumn>\n          </MainContent>\n        </PageContainer>\n      </Container>\n    </>\n  );\n};\n\nexport default RfpPage;\n\nconst Container = styled.div`\n  pointer-events: ${({ asPreview }) => (asPreview ? \"none\" : \"auto\")};\n  ${({ isResponsive }) => !isResponsive && `width: ${WINDOW_DIMENSIONS.BASE_WINDOW_WIDTH}px;`}\n`;\nconst QuestionCTA = styled.div`\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: 64px;\n  background: ${COLORS.BLUE_LIGHT_250};\n  padding: 32px 64px 32px 48px;\n  border-radius: 12px;\n  ${FONTS.REGULAR_1}\n  ${({ isResponsive }) =>\n    isResponsive &&\n    `\n      ${WINDOW_DIMENSIONS.DESKTOP_MEDIA_QUERY} {\n        flex-direction: column;\n        align-items: flex-start;\n        gap: 16px;\n      }\n      ${WINDOW_DIMENSIONS.EXTRA_WIDE_MEDIA_QUERY} {\n        width: max-content;\n      }\n  `}\n`;\nconst MainContent = styled.div`\n  display: grid;\n  grid-template-columns: 1fr 350px;\n  gap: 190px;\n  padding: 84px 0 100px;\n  & p {\n    ${FONTS.REGULAR_1};\n    margin: 0;\n  }\n  ${({ isResponsive }) =>\n    isResponsive &&\n    `\n      ${WINDOW_DIMENSIONS.DESKTOP_MEDIA_QUERY} {\n        gap: 80px;\n      }\n      ${WINDOW_DIMENSIONS.TABLET_LANDSCAPE_MEDIA_QUERY} {\n        display: flex;\n        flex-direction: column-reverse;\n        gap: 64px;\n      }\n      ${WINDOW_DIMENSIONS.MOBILE_MEDIA_QUERY} {\n        padding: 84px 32px 100px;\n      }\n  `}\n`;\nconst RightColumn = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 40px;\n`;\nconst Heading = styled.div`\n  ${FONTS.HEADING_4_SEMIBOLD};\n  margin-bottom: 24px;\n  &:not(:first-of-type) {\n    margin-top: 64px;\n  }\n`;\nconst Subheading = styled.div`\n  display: flex;\n  align-items: center;\n  ${FONTS.SEMIBOLD_1};\n  margin: 24px 0 8px;\n`;\nconst BulletedSection = styled.div`\n  & ul {\n    padding-left: 4px;\n  }\n`;\n// Used in RequestForStartupPage\nexport const TRLsContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 16px;\n  margin-top: 12px;\n`;\nexport const TrlTagContent = styled.div`\n  display: flex;\n  align-items: center;\n  gap: 8px;\n`;\n","import { t, t_html } from \"@utils/i18n\";\nimport StatusPage from \"./StatusPage\";\n\nconst NotFound404 = () => {\n  return (\n    <StatusPage\n      quote={t(\"pages.error_pages.404.quote\")}\n      author={t(\"pages.error_pages.404.author\")}\n      errorMessage={t_html(\"pages.error_pages.404.error_message_html\")}\n    />\n  );\n};\n\nexport default NotFound404;\n","import { Button } from \"@components/library\";\nimport { COLORS, FONTS } from \"@constants\";\nimport backgroundImage from \"@images/backgrounds/error_page_background.png\";\nimport { t, t_html } from \"@utils/i18n\";\nimport { ReactElement, useEffect, useState } from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport styled from \"styled-components\";\n\ninterface Props {\n  quote: string | ReactElement;\n  author: string;\n  errorMessage: ReactElement;\n  isErrorBoundary?: boolean;\n}\n\nconst StatusPage = ({ quote, author, errorMessage, isErrorBoundary = false }: Props) => {\n  const [didCatch, setDidCatch] = useState(false);\n\n  const history = useHistory();\n\n  // This is a workaround to simulate going back. React Router methods won't work if the app\n  // caught, so we need to manually refresh after navigating back\n  useEffect(() => {\n    if (didCatch) window.location.reload();\n  }, [history.location.pathname]);\n\n  const handleCtaClick = () => {\n    if (isErrorBoundary) setDidCatch(true);\n    history.goBack();\n  };\n\n  return (\n    <Container isErrorBoundary={isErrorBoundary}>\n      <Quote>\n        {quote}\n        <Author>- {author}</Author>\n      </Quote>\n      <ErrorMessage>\n        {errorMessage}\n        <br />\n        {t_html(\"pages.error_pages.shared.contact_html\", {\n          link: <a href=\"/contact\">contact us</a>,\n        })}\n      </ErrorMessage>\n      <Button type=\"button\" onClick={handleCtaClick}>\n        {t(\"pages.error_pages.shared.cta\")}\n      </Button>\n    </Container>\n  );\n};\n\nexport default StatusPage;\n\nconst Container = styled.div`\n  width: 100%;\n  ${({ isErrorBoundary }) => {\n    const navbarHeight = 84;\n    const appContainerMarginBottom = 40;\n\n    return isErrorBoundary\n      ? `\n        height: calc(100% - (${navbarHeight}px ));\n        min-height: fit-content;\n        padding-bottom: calc(100px + ${appContainerMarginBottom}px); \n      `\n      : `\n        height: calc(100% - (${navbarHeight}px - ${appContainerMarginBottom}px));\n        padding-bottom: 100px; \n    `;\n  }};\n  background-image: url(${backgroundImage});\n  background-size: max(100%, 1280px);\n  background-position: bottom;\n  background-repeat: no-repeat;\n  border-top: 1px solid ${COLORS.NEUTRAL_200};\n  text-align: center;\n`;\nconst Quote = styled.div`\n  max-width: 592px;\n  margin: 80px auto 0;\n  padding: 40px 0;\n  border-bottom: 1px solid ${COLORS.NEUTRAL_250};\n  font-size: 42px;\n  line-height: 1.24;\n  font-weight: 400;\n`;\nconst Author = styled.div`\n  margin-top: 8px;\n  color: ${COLORS.NEUTRAL_500};\n  ${FONTS.HEADING_3_REGULAR};\n`;\nconst ErrorMessage = styled.div`\n  width: 382px;\n  margin: 40px auto 16px;\n  ${FONTS.REGULAR_2};\n  a {\n    color: ${COLORS.BLACK};\n    text-decoration: underline;\n    &:hover {\n      color: ${COLORS.HALO_BLUE};\n    }\n  }\n`;\n","import { Icon, MultiSelectDropdown } from \"@components/library\";\nimport type { DropdownOption } from \"@components/library/Dropdowns/DropdownOption\";\nimport { COLORS, FONTS, WINDOW_DIMENSIONS } from \"@constants\";\nimport { Dispatch, SetStateAction } from \"react\";\nimport styled from \"styled-components\";\nimport { useDynamicOptions } from \"./searchOptions\";\n\ninterface Props {\n  isOpen: boolean;\n  nameFilter: DropdownOption[];\n  setNameFilter: Dispatch<SetStateAction<DropdownOption[]>>;\n  titleFilter: DropdownOption[];\n  setTitleFilter: Dispatch<SetStateAction<DropdownOption[]>>;\n  keywordFilter: DropdownOption[];\n  setKeywordFilter: Dispatch<SetStateAction<DropdownOption[]>>;\n}\n\nconst UniversityTeamSearch = ({\n  isOpen,\n  nameFilter,\n  setNameFilter,\n  titleFilter,\n  setTitleFilter,\n  keywordFilter,\n  setKeywordFilter,\n}: Props) => {\n  const {\n    isLoading: isOptionsLoading,\n    nameOptions,\n    titleOptions,\n    keywordOptions,\n  } = useDynamicOptions();\n\n  const handleClearFilter = () => {\n    setNameFilter([]);\n    setTitleFilter([]);\n    setKeywordFilter([]);\n  };\n\n  const filtersCount = nameFilter.length + titleFilter.length + keywordFilter.length;\n\n  if (!isOpen) return null;\n\n  return (\n    <Container>\n      <TopRow>\n        <MultiSelectDropdown\n          label=\"Faculty member\"\n          onChange={(e) => setNameFilter(e)}\n          value={nameFilter}\n          options={nameOptions}\n        />\n        <MultiSelectDropdown\n          label=\"Title\"\n          onChange={(e) => setTitleFilter(e)}\n          value={titleFilter}\n          options={titleOptions}\n        />\n        <MultiSelectDropdown\n          label=\"Keywords\"\n          onChange={(e) => setKeywordFilter(e)}\n          value={keywordFilter}\n          options={keywordOptions}\n        />\n      </TopRow>\n      <FooterButtons>\n        <ClearFilterButton type=\"button\" onClick={handleClearFilter}>\n          {filtersCount > 0 && (\n            <>\n              <Icon name=\"Refresh\" margin=\"0 4px 2px 0\" color={COLORS.HALO_BLUE} />\n              Clear all filters\n            </>\n          )}\n        </ClearFilterButton>\n        <MissingAFilter>\n          Missing a filter?&nbsp;\n          <ContactLink type=\"button\" onClick={() => window.open(\"/contact\", \"_blank\")}>\n            Let us know\n          </ContactLink>\n        </MissingAFilter>\n      </FooterButtons>\n    </Container>\n  );\n};\n\nexport default UniversityTeamSearch;\n\nconst Container = styled.div`\n  display: flex;\n  flex-direction: column;\n  margin: 24px 0;\n  padding: 24px;\n  background-color: ${COLORS.NEUTRAL_50};\n  border-radius: 8px;\n`;\n\nexport const TopRow = styled.div`\n  display: grid;\n  grid-template-columns: repeat(3, minmax(0, 1fr));\n  grid-gap: 0 16px;\n  margin: 0 0 24px;\n  ${WINDOW_DIMENSIONS.TABLET_MEDIA_QUERY} {\n    grid-template-columns: 1fr;\n    grid-gap: 24px 0;\n  }\n`;\nconst FooterButtons = styled.div`\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n`;\n// Used in other filtering components\nexport const ClearFilterButton = styled.button`\n  display: flex;\n  align-items: center;\n  color: ${COLORS.HALO_BLUE};\n  border: none;\n  background-color: transparent;\n  ${FONTS.MEDIUM_2};\n`;\nexport const MissingAFilter = styled.div`\n  margin-left: auto;\n  color: ${COLORS.NEUTRAL_500};\n  ${FONTS.REGULAR_2}\n`;\nexport const ContactLink = styled.button`\n  color: ${COLORS.NEUTRAL_500};\n  text-decoration: underline;\n  border: none;\n  background-color: transparent;\n  padding: 0;\n`;\n","import { DropdownOption, DropdownOptionGroup } from \"@components/library/Dropdowns/DropdownOption\";\nimport { getUniversityMembersOptions } from \"@requests/universities\";\nimport { getOptionFromValue } from \"@utils/dropdownUtils\";\nimport { useEffect, useState } from \"react\";\n\nexport const SORT_BY_OPTIONS = [\n  {\n    value: \"NAME\",\n    label: \"Name\",\n  },\n  {\n    value: \"PROPOSAL_COUNT\",\n    label: \"Active proposals\",\n  },\n] as const;\n\nexport const useDynamicOptions = (): {\n  isLoading: boolean;\n  nameOptions: DropdownOption[];\n  titleOptions: DropdownOption[];\n  keywordOptions: DropdownOptionGroup[];\n} => {\n  const [isLoading, setIsLoading] = useState(true);\n  const [nameOptions, setNameOptions] = useState<DropdownOption[]>([]);\n  const [titleOptions, setTitleOptions] = useState<DropdownOption[]>([]);\n  const [keywordOptions, setKeywordOptions] = useState<DropdownOptionGroup[]>([]);\n\n  useEffect(() => {\n    (async () => {\n      const data = await getUniversityMembersOptions();\n      setKeywordOptions([\n        {\n          label: \"Disciplines\",\n          options: data.keyword_options.disciplines.map(getOptionFromValue) as DropdownOption[],\n        },\n        {\n          label: \"Expertise\",\n          options: data.keyword_options.areas_of_expertise.map(\n            getOptionFromValue\n          ) as DropdownOption[],\n        },\n      ]);\n\n      const { name_options, title_options } = data;\n      setNameOptions(name_options.map(getOptionFromValue) as DropdownOption[]);\n      setTitleOptions(title_options.map(getOptionFromValue) as DropdownOption[]);\n\n      setIsLoading(false);\n    })();\n  }, []);\n\n  return {\n    isLoading,\n    nameOptions,\n    titleOptions,\n    keywordOptions,\n  };\n};\n","export enum CompanySize {\n  UNDER_10 = \"Under 10\",\n  TEN_TO_FIFTY = \"10 - 50\",\n  FIFTY_TO_TWO_HUNDRED = \"50 - 200\",\n  TWO_HUNDRED_TO_FIVE_HUNDRED = \"200 - 500\",\n  FIVE_HUNDRED_TO_ONE_THOUSAND = \"500 - 1,000\",\n  ONE_THOUSAND_TO_FIVE_THOUSAND = \"1,000 - 5,000\",\n  FIVE_THOUSAND_TO_TEN_THOUSAND = \"5,000 - 10,000\",\n  TEN_THOUSAND_PLUS = \"10,000+\",\n}\n\nexport enum CompanySpend {\n  UNDER_500K = \"Under $500k\",\n  FIVE_HUNDRED_K_TO_ONE_MILLION = \"$500k - $1M\",\n  ONE_MILLION_TO_TWO_AND_A_HALF_MILLION = \"$1M - $2.5M\",\n  TWO_AND_A_HALF_MILLION_TO_FIVE_MILLION = \"$2.5M - $5M\",\n  FIVE_MILLION_TO_TEN_MILLION = \"$5M - $10M\",\n  TEN_MILLION_TO_ONE_HUNDRED_MILLION = \"$10M - $100M\",\n  ONE_HUNDRED_MILLION_TO_FIVE_HUNDRED_MILLION = \"$100M - $500M\",\n  FIVE_HUNDRED_MILLION_TO_ONE_BILLION = \"$500M - $1B\",\n  ONE_BILLION_PLUS = \"$1B+\",\n}\n\nexport enum CompanyType {\n  RESEARCH_INSTITUTION = \"Research Institution\",\n  GOVERNMENT_AGENCY = \"Government Agency\",\n  NONPROFIT_FOUNDATION = \"Nonprofit/Foundation\",\n  PRIVATELY_HELD = \"Privately Held\",\n  PUBLIC_COMPANY = \"Public Company\",\n}\n\nexport enum CompanyVerificationStatus {\n  UNCLAIMED = \"unclaimed\",\n  CLAIMED = \"claimed\",\n  VERIFIED = \"verified\",\n}\n"],"names":["initialState","shouldShowProductTours","isAbsolute","adminReducer","state","action","type","SET_SHOULD_SHOW_PRODUCT_TOURS","_objectSpread","payload","SET_IS_ABSOLUTE","isLoadingSubscription","subscription","loadingProposals","proposals","proposalDashboardRequest","userFollow","loadingUserFollow","researchAreaHeadline","researchAreaImageUrl","loadingCompanyMembers","companyMembers","loadingMessages","messages","viewAsCompanySuperAdmin","companyReducer","LOAD_SUBSCRIPTION","SET_SUBSCRIPTION","LOAD_USER_FOLLOW","SET_USER_FOLLOW","LOAD_PROPOSALS","SET_PROPOSAL_DASHBOARD_RFP","LOAD_COMPANY_MEMBERS","SET_COMPANY_MEMBERS","LOADING_MESSAGES","SET_MESSAGES","SET_VIEW_AS_COMPANY_SUPER_ADMIN","SET_PROPOSAL_AS_SEEN","map","p","id","proposalId","seen","seen_by","fullName","currentUser","first_name","last_name","filter","name","join","length","push","showErrorBoundary","filters","searchTerm","isUpdatingToggleRFP","isUpdatingFollowedCompanies","isUpdatingResearchFollows","followedRequestsInfo","followedCompanies","resultList","companies","foundations","government_organizations","currentCompany","currentRFP","loadingCurrentCompany","loadingCurrentRFP","loadingInvitedUsers","invitedUsers","universityTeamMembers","lastViewedRfpIdentifier","defaultReducer","SHOW_ERROR_BOUNDARY","ADD_FILTER","newFilters","filterType","filterValue","Array","from","Set","REMOVE_FILTER","v","LOADING_CURRENT_COMPANY","SEARCH_TERM","SET_FOLLOWED_REQUESTS_INFO","UPDATE_RESULT_LIST","UPDATE_CURRENT_RFP","LOAD_CURRENT_RFP","SET_CURRENT_COMPANY","SET_COMPANIES","SET_FOUNDATIONS","SET_GOVERNMENT_ORGANIZATIONS","SET_LOAD_COMPANY_PARTNER","loadingCompanyPartner","SET_LOAD_COMPANY_INTEREST","loadingCompanyInterest","SET_COMPANY_INTEREST","company_research_interests","SET_LOAD_COMPANY_INFO","loadingCompanyInfo","SET_COMPANY_INFO","location","employee_count","rd_spend_amount","company_type","description","LOAD_DELETE_COMPANY_INTEREST_PARTNER","loadingDeleteCompanyInterestPartner","SET_INVITED_USERS","invited_users","SET_LOAD_INVITED_USERS","SET_UNIVERSITY_TEAM_MEMBERS","SET_COMPANY_LOGO","logo","url","SET_COMPANY_VIDEO","video","SET_LAST_VIEWED_RFP_IDENTIFIER","profile_info","loadingCurrentUser","loadingPatents","loadingPublications","loadingFundings","loginModalOpen","loginModalLanding","previousAction","currentPatentId","currentPublicationId","currentFundingId","patents","publications","fundings","loadingResearchInterestFollows","unreadCount","proposalEval","profileReducer","newObj","SET_CURRENT_USER","LOAD_CURRENT_USER","SET_PUBLICATIONS","LOAD_PUBLICATIONS","SET_PATENTS","LOAD_PATENTS","SET_FUNDINGS","LOAD_FUNDINGS","TOGGLE_LOGIN_MODAL","open","prePopulatedSignupEmail","landing","START_DELETE_PROPOSAL","deletingProposal","FINISH_DELETE_PROPOSAL","_","FINISH_FOLLOW_UNFOLLOW_COMPANY","followed_companies_info","isFollowing","company","LOADING_RESEARCH_INTEREST_FOLLOWS","UPDATE_RESEARCH_INTEREST_FOLLOWS","followed_research_interests","SET_UNREAD_COUNT","SET_PROPOSAL_EVAL","UPDATE_PROFILE_IMAGE","image","width","window","innerWidth","height","innerHeight","scrollPercent","windowDimensionReducer","UPDATE_WINDOW_DIMENSION","messengerReducer","windowDimensionsReducer","reducers","defaultConfig","key","storage","blacklist","profilesConfig","whitelist","messengerConfig","rootReducer","combineReducers","persistReducer","profiles","messenger","admin","persistConfig","enhancer","__REDUX_DEVTOOLS_EXTENSION_COMPOSE__","compose","applyMiddleware","thunkMiddleware","store","createStore","persistor","persistStore","LoaderContainer","_jsx","Container","textAlign","children","Loader","Root","Provider","PersistGate","loading","Router","onUpdate","scrollTo","Route","path","component","withRouter","App","document","addEventListener","ReactDOM","getElementById","MasqueradeBar","_useState2","_slicedToArray","useState","isOptionsOpen","setIsOptionsOpen","_useState4","requiresRefresh","setRequiresRefresh","dispatch","useDispatch","useSelector","_jsxs","_Fragment","BlankModal","isOpen","onClose","headerText","subHeaderText","ModalContent","Checkbox","label","size","isChecked","onChange","e","setIsAbsolute","target","checked","setShouldShowProductTours","TextButton","text","iconName","color","COLORS","HALO_BLUE","onClick","reload","position","background","gon","global","env","RED","href","back_masquerade_path","WHITE","styled","div","FONTS","SEMIBOLD_3","MessengerHeader","recipient","proposalTitle","isMessengerMinimized","messengerThread","isMessengerExpanded","hasUnreadMessage","setIsParticipantsModalOpen","history","useHistory","toggleMinimizeMessenger","setHasUnreadMessage","setIsMessengerExpanded","setIsMessengerMinimized","noThreadMoreActionsOptions","value","onSelect","profile_id","moreActionsOptions","participants","scientist_user","company_members","recipients","IS_SINGLE_PARTICIPANT","userPreview","UserPreview","user","MultiUserPreview","users","HeaderContainer","undefined","FlexContainer","Thumbnail","single","Name","UnreadDot","ProposalTitleContainer","isMulti","Icon","margin","NEUTRAL_500","ProposalTitle","IconContainer","MoreActionsDropdown","options","menuHorizontalPosition","IconButton","variant","tooltipWidth","stopPropagation","batch","setIsMessengerOpen","clearMessengerState","NEUTRAL_200","css","NEUTRAL_50","BLACK","TAG_SEMIBOLD_1","MEDIUM_3","STYLES","ONE_LINE","ParticipantsInfoModal","closeModal","disableBackgroundScroll","Participants","currentThread","isModal","Messenger","isParticipantsModalOpen","messengerData","isMessengerOpen","isMessengerThreadLoading","messengerOffsetRight","useEffect","userId","proposalyId","proposalyType","fetchCurrentThreadByProposal","fetchCurrentThreadByParticipants","MessengerContainer","active","inline","style","ConversationContainer","Conversation","SHADOW_C","MobileRestricted","breakpoint","Controller","Children","Restriction","Image","src","macbook","alt","Text","Link","to","Button","iconPosition","img","REGULAR_1","_ref","props","_extends","_objectDestructuringEmpty","setPrevUrlCookie","role","USER_ROLES","sponsor","console","warn","Redirect","PrivateRoute","BLOCKED_PATHS","EXTENDED_ACCESS_PATHS","SubscriptionEndedModal","setIsSubscriptionEndedModalOpen","bannerMessage","pathname","useLocation","isBlockedPage","includes","has_extension","some","startsWith","hideCloseButton","closeOnDimmerClick","backgroundMode","Title","t","UserRole","SPONSOR","Buttons","is_admin","HEADING_4_SEMIBOLD","TABLET_MEDIA_QUERY","WINDOW_DIMENSIONS","SubscriptionEndBanner","PAGE_SIDE_PADDING","REGULAR_2","SubscriptionWarning","isSubscriptionEndedModalOpen","daysUntilSubscriptionEnds","daysUntilDate","end_at","has_upcoming_subscription","isAdmin","subscriptionEndDate","dayjs","format","backgroundColor","TaxonomyUpdateModal","disciplines","setDisciplines","areas_of_expertise","areasOfExpertise","setAreasOfExpertise","_useState6","isSubmitting","setIsSubmitting","header","title","company_name","onSubmit","async","preventDefault","updateUserKeywords","data","success","setCurrentUser","has_updated_taxonomy","err","error","Content","SCIENTIST","Label","KeywordsDropdown","keywordType","targetType","isPortal","Footer","SkipLink","onSkip","skipUpdateUserKeywords","toast","textDecoration","disabled","NEUTRAL_300","SEMIBOLD_1","MEDIUM_2","a","SPONSOR_ROLES_DROPDOWN_OPTIONS","Object","values","SponsorRole","getOptionFromValue","form","BOLD_2","Top","Bottom","Logo","CompanyLogo","NEUTRAL_250","Header","HEADING_5_MEDIUM","SEMIBOLD_2","Input","input","ButtonContainer","SSOSponsorOnboardingModal","isCommenter","commenter","step","setStep","setCompany","_useState8","setTitle","_useState10","setRole","_useState12","handleSkip","company_identifier","response","getCompany","appsignal","sendError","updateUserProfile","sponsorOnboarded","fetchCurrentUser","haloLogo","SingleSelectDropdown","newOption","placeholder","autoComplete","SubmitProposalRedirect","requestSlug","useParams","rfp_identifier","api","get","requestProposalUrlPath","request","span","setAction","ScrollToTop","NavbarDropdownMenu","isMenuOpen","setIsMenuOpen","navigate","setShowErrorBoundary","navigateToProfile","currentPFPic","medium","Popup","trigger","className","styles","Navbar_menuWrap","Navbar_menuProfilePic","backgroundImage","small","toUpperCase","Navbar_icon","Navbar_iconMobile","on","basic","Navbar_accountPopup","hideOnScroll","hoverable","onOpen","content","Navbar_accountPopupContainer","onMouseEnter","onMouseLeave","Navbar_popupContainer","Navbar_profilePicContainer","Navbar_popupProfilePic","Navbar_regularProfilePic","Navbar_popupRightPanel","Navbar_popupName","is_super_admin","SuperAdminTagContainer","SuperAdminTag","Navbar_popupPosition","Navbar_profileButton","ProfileTags","Boolean","license","LicenseTag","AdminTag","navigateToAccount","Navbar_button","navigateToDashboard","is_expert","Navbar_buttonEditProfile","UNIVERSITY_ADMIN","verified","navigateToInbox","Navbar_inbox","navigateToCompanyProfile","navigateToUniversityProposalLibrary","track","SegmentEventName","Click","ui_component","signOut","marketplacePath","Navbar_signOutButton","StyleSheet","create","display","alignItems","marginLeft","border","outline","NEUTRAL_100","marginRight","justifyContent","JS_FONTS","MEDIUM_1","cursor","borderRadius","backgroundRepeat","backgroundPosition","backgroundSize","fontSize","marginTop","marginBottom","paddingBottom","paddingLeft","paddingRight","minWidth","boxShadow","maxWidth","left","padding","zIndex","paddingTop","HEADING_2_SEMIBOLD","gap","textTransform","borderBottom","MOBILE_MEDIA_QUERY","LoginModal_modal","LoginModal_innerContainer","LoginModal_logoContainer","LoginModal_closeicon","top","right","LoginModal_hero","LoginModal_headline","LoginModal_subheadline","LoginModal_subheadline_rfp","LoginModal_innerLeftPane","verticalAlign","LoginModal_modalText","LoginModal_lineItem","LoginModal_innerRightPane","LoginModal_innerRightPane_rfp","LoginModal_formField","LoginModal_inputField","REGULAR_3","LoginModal_nameField","LoginModal_placeholderText","visibility","LoginModal_errorMessage","LoginModal_errorField","LoginModal_alreadyHaveAccount","LoginModal_signInLink","LoginModal_forgotPasswordContainer","LoginModal_footerText","LoginModal_forgotPassword","LoginModal_horizontalRule","SignUpModal","setModalType","errors","setErrors","errorMessage","setErrorMessage","hasSubmitted","setHasSubmitted","firstName","setFirstName","lastName","setLastName","_useState14","password","setPassword","_useSSOSensitiveEmail","useSSOSensitiveEmail","email","setEmail","isEmailSSOEnabled","redirectToSSO","_useState16","shouldShowSSO","setShouldShowSSO","easyApply","isRfpPage","isProposalPage","signupHeadline","signupSubtitle","lineItemsHeader","lineItems","isScientist","isCompany","userType","event","invalidSubmit","Validator","usedPersonalEmail","min","max","hasErrors","keys","tooltipPosition","Grid","centered","columns","Row","Column","lineItem","Form","originalReferrerId","localStorage","getItem","removeItem","responseJson","post","slug","identify","log","indexOf","Field","SSOHintContainer","SSOEnabledHint","SSOToggleContainer","SSOToggle","handleLogin","BLUE_900","modalType","setCurrentRFP","split","identifier","at","getRfpForRfpPage","status","closeLoginModal","toggleLoginModal","View","Modal","LoginModal","compat","asAnchor","withNewTag","dataTestId","activeStylesMatchType","isActive","String","as","NavLink","handleClick","$isActive","InfoTag","accent","ScientistNavbarLinks","UserLinks","NavbarLink","RED_700","LoggedOutNavbarLinks","marketplace_path","MobileMenu","links","isCurrentPage","SlideModalBase","direction","NavLinks","CloseButton","link","button","SponsorNavbarLinks","showBackToProposalReviewDashboard","ButtonLink","features","proposal_library","company_scientist_network","scientistNetworkName","UniversityAdminNavbarLinks","NAVBAR_HIDDEN_PATHS","NAVBAR_BORDER_PATHS","Navbar","shouldIgnoreHiddenPaths","isSticky","setIsSticky","isMobileMenuOpen","setIsMobileMenuOpen","isTablet","isUserLoggedOut","isLandingPage","isInMarketplaceRelatedPage","handleScroll","scrollY","removeEventListener","hasBorder","showMobileMenuButton","LoginSignUpModal","Links","OpenMobileMenuButton","SignInButtons","GradientButton","UnsubscribePage","lazyWithRetry","ResumeOutreachPage","exact","formatPathForRouter","notification_campaigns_unsubscribe_path","resume_outreach_notification_campaigns_path","RfpRequestForm","renderForm","request_type","URLSearchParams","search","RequestType","REQUEST_FOR_PROPOSAL","PrivateSponsorRoute","new_opportunity_path","edit_opportunity_path","RfePage","ProposalPage","request_for_expert_path","requestableType","RequestableType","REQUEST_FOR_EXPERT","RfpPage","seo_request_for_proposal_path","render","match","params","asPreview","Unauthorized401","StatusPage","quote","author","t_html","Forbidden403","ErrorBoundaryFallback","hash","endsWith","replace","innerComponent","isAxiosError","NotFound404","isErrorBoundary","NavBar","ErrorBoundary","AppsignalErrorBoundary","instance","fallback","tags","userEmail","getGoogleScholarAuthors","google_scholar_authors_path","authors","getGoogleScholarAuthor","author_id","authorId","timeout","i18nPrefix","Progress","completionState","step1","step2","step3b","Tabs","Tab","ProgressStep","stepNumber","isCurrent","isComplete","needsUpdate","formVariant","TabUnderline","TABLET_LANDSCAPE_MEDIA_QUERY","BLUE_LIGHT_500","GREEN","setWork","setDetailedType","onContinue","work","detailedType","UserDetailedType","COMPANY_SPONSOR","VENTURE_CAPITAL_SPONSOR","GOVERNMENT_SPONSOR","UNIVERSITY_SCIENTIST","STARTUP_SCIENTIST","SUPPLIER","CONSULTANT","UNIVERSITY_ADMINISTRATOR","assertAbsurd","react_component","detailed_type","S","subheading","heading","OptionsHeading","OptionsContainer","Option","selected","FEATURE_FLAGS","SIGN_OUT_ON_ONBOARDING","h2","BLUE_LIGHT_300","BLUE_650","VISIBLE_PUBLICATION_COUNT","AuthorCard","isSelected","Card","ProfilePicture","Info","Publications","slice","publication","Publication","ONE_LINE_ALT","BLUE_LIGHT_50","DISPLAY_INCREMENT","getAuthorIdFromUrl","urlObj","URL","host","searchParams","Step3aGoogleScholar","userInfo","onBack","selectedAuthorId","setSelectedAuthorId","numDisplayed","setNumDisplayed","filteredAuthorIds","setFilteredAuthorIds","isFetching","searchText","setSearchText","isLoading","setIsLoading","queryClient","useQueryClient","getAuthor","useMutation","mutationFn","onSuccess","user_id","setTimeout","invalidateQueries","queryKey","onError","mutate","fuse","useMemo","Fuse","isResearcher","hasResults","StepHeader","FilterContainer","SearchBarInput","Search","search_query","has_author_id","result","r","item","NEUTRAL_400","AuthorsContainer","find","num_displayed","total","ButtonsContainer","canLoadMore","h1","HEADING_3_REGULAR","Step4NextStep","Description","h3","Step4","hasPreviousAction","getPrevUrlCookie","NextStepsContainer","reviewer_dashboard_path","global_network_search","company_scientist_network_path","routeToPrevUrl","follow","profileInfo","setProfileInfo","step3a","setCompletionState","setUserInfo","selectedGoogleScholarAuthorId","setSelectedGoogleScholarAuthorId","googleScholarAuthorsDisplayCount","setGoogleScholarAuthorsDisplayCount","filteredGoogleScholarAuthorIds","setFilteredGoogleScholarAuthorIds","commenterInviteRequest","useSearchParams","scrollToRef","useRef","current","scrollIntoView","behavior","_useQuery","useQuery","queryFn","refetchInterval","googleScholarAuthors","refetchGoogleScholarAuthors","refetch","isGoogleScholarAuthorsFetching","onboardMutation","onboard","googleScholarAuthorUserId","variables","context","UserNotVerifiedError","toastErrorHandler","updatedUser","trackRegistration","fetchSubscription","proposal_review_system_path","cancelSignUpMutation","cancelSignUp","toString","handleOnboard","onVerify","updateValue","newValue","university","prevUserInfo","updatedUserInfo","previousStep","currentStep","allStepsComplete","every","OnboardingPage","Banner","StepContainer","ref","Step3","Number","selectedGoogleScholarAuthor","Step2","UserVerificationCode","RequestForStartupPage","JobPage","CompanyPage","ProfilePage","ReviewerDashboard","ProposalReviewSystem","Account","RfpOpenCallProposalForm","RequestForStartupProposalForm","RequestForExpertProposalForm","CommercialApplicationPage","Marketplace","TermsPage","PrivacyPage","ContactPage","SponsorTeam","ForgotPassword","ChangePassword","ScientistProposalLibrary","Careers","Inbox","ProposalLibrary","ScientistNetwork","AboutUs","LoginPage","SignUp","ScientistNetworkSignUp","RecommendedRfpSignUp","UniversityProposalLibrary","UniversityTeam","FeatureRequestSplashPage","REQUESTABLE_TO_REQUEST_TYPE","RFP","OPEN_CALL","REQUEST_FOR_STARTUP","QueryClient","mutationCache","MutationCache","_variables","_context","mutation","meta","useGlobalErrorHandler","axios","isArray","login_path","defaultOptions","queries","refetchOnWindowFocus","sessionTimer","PureComponent","constructor","super","listener","this","isTaxonomyUpdateModalOpen","isSSOSponsorOnboardingModalOpen","isCurrentUserLoading","headers","common","Accept","componentDidMount","_this$props","updateWindowDimension","checkUnread","listen","page","outerWidth","outerHeight","wasUserCreatedMoreThan1DayAgo","diff","created_at","isSponsorUserMissingTitleAndRole","setState","webflowContent","webflowContainer","appendChild","componentDidUpdate","prevProps","windowWidth","SESSION_TIMEOUT","clearTimeout","componentWillUnmount","_this$props2","setPageTitle","isWebflow","noFooter","noChat","referrer_id","setItem","current_user_id","homepage","university_admin","QueryClientProvider","client","user_masquerade","Marketplace_app","Marketplace_mainContainer","Marketplace_noFooter","Suspense","Switch","profile_page_path","keywords","OnboardingContainer","_location","RfpRoutes","RequestForExpertRoutes","NotificationCampaignRoutes","OpportunityRoutes","Toaster","process","CYPRESS","ReactQueryDevtools","initialIsOpen","mapDispatchToProps","updateWindowDimensionAction","fetchCurrentUserAction","setCurrentUserAction","checkUnreadAction","clearMessengerStateAction","fetchSubscriptionAction","connect","gridTemplateColumns","minHeight","Marketplace_mobileContainer","toast_body","toast_progress","toast_inner","toast_container","toast_close","FeatureRequestButton","_useSelector","roles","isSponsor","isUniversityAdmin","Canny","appID","avatarURL","created","Date","toISOString","company_id","customFields","user_type","is_startup_scientist","scientist_affiliation","scientist_number_of_proposals","proposal","completed","deleted_at","is_company_admin","is_company_super_admin","sponsor_license_type","sponsor_number_of_review_teams","_role","resource_type","university_admin_affiliation","university_admin_number_of_invites","invited_users_count","university_admin_number_of_accepted_invites","accepted_users_count","authenticatedLink","LinkContainer","StyledLink","useHubspotCTAs","OuterContainer","InnerContainer","TopContainer","EmailDigestCTAContainer","SubHeader","maxHeight","MobileSocialIcons","rel","NEUTRAL_900","Line","mobileOnly","LinksContainer","LinkColumn","LinkHeader","SocialIcons","BottomContainer","BottomLinks","CopyRight","FOOTER_MEDIA_QUERY","DEFAULT_MAX_WIDTH","BLUE_LIGHT_600","BLUE_600","InviteModal_modal","overflow","InviteModal_content","InviteModal_modalTextArea","resize","borderColor","InviteModal_modalInput","InviteModal_modalInputZero","InviteModal_modalButtonHolder","InviteModal_header","InviteModal_closeModalButton","InviteModal_subheader","ConfirmationInviteModal_subheader","ConfirmationInviteModal_footer","InviteModal_deleteIcon","InviteModal_errorMessage","InviteModal_errorField","InviteModal_emailChip","InviteModal_invalidEmailChip","ConfirmationInviteModal_emailChip","InviteModal_modalInputDiv","flexWrap","InviteModal_smallerInputDiv","InviteModal_modalInputDivFocus","InviteModal_inputLabel","InviteModal_inputLabelDropdown","InviteModal_emailDropdown","boxSizing","opacity","InviteModal_modalInputDivFilled","InviteModalDropdown","dropdownActive","DropdownMenu","DropdownItem","red","DropdownSubHeader","ROLES","InviteModal","contactModalLoading","message","inviteMessage","toEmails","isExpanded","emailList","focused","handleSubmitMessage","typeOfInvite","inviteUrl","organization","trackAndToastHandler","requestId","fetchUniversityMembers","_this$state","emails","to_emails","invited_by","request_id","Share","object","SegmentEventObject","Request","university_id","handleChange","attr","handleAddOrRemoveEmail","trim","toLowerCase","isValid","pop","temp","handlePaste","clipboardData","getData","toBeAdded","validEmailList","handleNextStep","_this$state2","deleteEmailFromList","emailIndex","splice","focusInput","focus","handleBlur","handleCloseConfirmationModal","_this$props3","activeTabIndex","modalHeader","modalSubheader","_this$state3","inviteSubject","i","InviteModal_oneEmailChip","autoFocus","onFocus","onKeyDown","onPaste","onBlur","Dropdown","fluid","selection","icon","Menu","Item","rows","currentTarget","setSelectionRange","fetchUniversityMembersAction","bottom","submitting","setSubmitting","setError","urlParams","append","Subheader","signIn","redirectUrl","Error","LoginLink","SHADOW_E","HEADING_3_SEMIBOLD","isCompanyHidden","SectionTitle","UserPreviewContainer","CompanySectionTitle","UnstyledLink","private_alias","CompanyMembers","member","isScientistUser","ExternalLead","CompanyAvatar","isPrivate","imageUrl","avatar","ExternalLeadName","userRole","isUserHidden","isExternalLead","Warning","ORANGE","dmParticipants","Map","forEach","participant","has","set","DMParticipants","DMSectionTitle","TWO_LINES","ORANGE_100","Ably","CREDENTIALS","ABLY_FRONTEND_API_KEY","autoConnect","AttachmentsInfoModal","openFileBrowser","Heading","List","InfoBanner","shouldDisplay","ul","MessageCompose","setMessages","isInbox","openGallery","messageInput","setMessageInput","isFetchingDraft","setIsFetchingDraft","attachments","setAttachments","isAttachmentsInfoModalOpen","setIsAttachmentsInfoModalOpen","isAttachmentUploading","setIsAttachmentUploading","uploadPercentage","setUploadPercentage","hasOpenedAttachmentsInfoModal","setHasOpenedAttachmentsInfoModal","_useState18","attachmentError","setAttachmentError","_useState20","shouldShowJumpToBottom","setShouldShowJumpToBottom","proposaly_id","proposaly_type","messageRef","fetchingProposalIdRef","fileInputRef","uploadAttachmentAbortControllerRef","attachmentsRef","messageInputRef","inputContainerRef","inputBottomRef","abort","ably","channel","channels","subscribe","ABLY_CHANNELS","NEW_MESSAGE","messageData","JSON","parse","unsubscribe","debouncedSetDraftMessage","debounce","setDraftMessage","draftMessage","getDraftMessage","message_attachments","attachmentIds","attachment","click","handleInputResizeAndChange","element","scrollHeight","isProposalThread","isToExternalLead","placeholderRecipientName","confidential","FileInput","accept","files","file","filename","size_in_bytes","mime_content_type","oldAttachments","flushSync","inputContainer","clientHeight","lastElementChild","block","AbortController","uploadAttachment","signal","newAttachments","_attachment","ErrorModal","font","InputContainer","AttachmentsContainer","MessageAttachment","onRemove","attachmentId","handleAttachmentRemove","TextInput","JumpToBottomContainer","JumpToBottom","isVisible","jumpToBottom","textarea","WarningMessageContainer","WarningMessage","BottomButtonContainer","tooltipText","handleAttachmentInitiation","Tooltip","addMessageToThread","messageThreadId","message_thread","createMessageThread","setMessengerThread","SHADOW_D","TAG_MEDIUM_2","messageError","endOfMessagesRef","Messages","index","isFromExternalLead","Message","MessageTime","fromNow","MessageContainer","ProfilePictureContainer","MessageContent","MessageAttachmentContainer","renderNewlines","ZeroMessagesState","setMessageError","isLoadingMessages","setIsLoadingMessages","galleryAttachments","setGalleryAttachments","focusedGalleryAttachmentIndex","setFocusedGalleryAttachmentIndex","getMessages","findIndex","ZeroState","ZeroStateImage","emptyState","isThreadScientistUser","isDmThread","_recipient","hasProposalBanner","MessageAttachmentGalleryModal","focusedAttachmentIndex","setFocusedAttachmentIndex","closeGallery","MessageListContainer","hasBanner","ProposalBanner","ProposalLabel","ViewProposal","proposalyPagePath","MessageList","RfpQuestionSubmittedModal","handleOpenShareModal","isCopied","setIsCopied","Or","navigator","clipboard","writeText","getRequestComments","sortBy","sort_by","createRequestComment","replyToId","request_comments_path","reply_to_id","editRequestComment","put","request_comment_path","upvoteRequestComment","upvote_request_comment_path","downvoteRequestComment","downvote_request_comment_path","deleteRequestComment","delete","SCIENTIST_UPVOTE","SCIENTIST_NEW_QUESTION","SPONSOR_NEW_ANSWER","RequestDiscussionSubmitForm","companyName","replyTo","commentTreeLevel","setIsCommenting","setText","setIsOpen","startedWritingRef","createCommentMutation","Abandon","request_slug","answering","line","Context","InputTooltip","TOOLTIP_CONTENT","arrowOffsetTop","tooltipOffsetTop","labelFont","HEADING_5_SEMIBOLD","startingHeight","characterLimit","CheckboxContainer","scientist","TextLink","Submit","handleSubmitComment","Cancel","isEditing","RequestDiscussionEditForm","comment","setIsEditing","EditContainer","RequestComment","refreshComments","canAnswer","canShowQA","reply_to","replies","cached_votes_up","cached_votes_down","upvoted_by_current_user","downvoted_by_current_user","isCommenting","commentBelongsToCurrentUser","isQuestion","showEditActions","canUpvote","showAnswerButton","showReplyButton","replyToCompanyId","currentUserCompanyId","commenterName","commenterTitle","commenterLocation","onUpvote","is_undo","setTags","commentId","showAwaitingResponse","highlight","AwaitingReponse","Comment","MainContent","TextContainer","QuestionAnswer","TextContent","MessageActions","Delete","User","PictureContainer","UserInfo","DatePosted","QuestionVoteContainer","canVote","didVote","QuestionVoteScore","Helpful","HelpfulThumb","ToastContent","UndoButton","requestCommentId","onUndo","HorizontalLine","Answers","indentAnswers","reply","ORANGE_50","strong","BLUE_LIGHT_700","ORANGE_900","SORT_BY_OPTIONS","RequestDiscussion","setIsShareModalOpen","successModalOpen","setSuccessModalOpen","isFuelModalOpen","setIsFuelModalOpen","isForRfs","requestable_type","checkRfpCompanyHidden","isFuel","_canAccessRequestAsLead","canAccessRequestAsLead","showRfpDiscussion","getLaunchableRequestStatus","LaunchableRequestStatus","ACTIVE","setSortBy","comments","setComments","canAskQuestion","request_comments","onCommentSuccess","FuelModal","QuestionCTA","getCanSubmitProposal","Closed","SortBy","SelectableDropdown","option","Questions","forwardRef","BLUE_LIGHT_250","FAQS","TESTING4AG_FAQS","BASF_RFM_FAQS","BAYER_COLAB_CAMBRIDGE_RFS_FAQS","FUEL_FAQS","FUEL_ID","COMPANIES","RequestFAQs","defaultFaqs","requestable","hubspot_faq_tag","isTesting4Ag","isBasfRfm","isBayerColabCambridgeRfs","isFuelRequest","faqs","faq","newTab","AboutCompany","isResponsive","withMarginTop","customText","lineHeight","reviewTeamMembers","review_team_members","reviewTeamMembersForDisplay","reviewer","sortByHasProfilePicture","sort","b","findRequestRoleNameOnUser","RoleName","REQUEST_LEAD","renderMarkdownText","underline","Reviewers","EXTRA_WIDE_MEDIA_QUERY","RelevanceFeedbackModal","isRelevant","trackingProps","selectedOption","setSelectedOption","otherText","setOtherText","handleCloseModal","isOtherSelected","isSubmitDisabled","ModalIcon","NEUTRAL_700","OptionButton","TextInputContainer","ModalActions","handleSubmit","feedbackText","selected_option","HEADING_5_REGULAR","NEUTRAL_800","BLUE_500","BLUE_450","RELEVANT","NOT_SIGNED_IN","SIGNED_IN","NOT_RELEVANT","RefineRecommendations","setIsRelevant","showModal","setShowModal","isLoggedIn","_useRequestPreference","_useLocalStorage2","useLocalStorage","localPreference","setLocalPreference","isInterested","preference","getUserRequestPreference","is_interested","updateInterest","reason","updateUserRequestPreference","source","UserRequestPreferenceSource","RequestPage","useRequestPreferences","SectionHeading","HeadingText","QuestionText","contentWidth","RelevantButton","handleRelevantClick","is_logged_in","$selected","NotRelevantButton","handleNotRelevantClick","handleModalClose","openLoginModalWithRedirect","BaseButton","SHADOW_CARD","BUTTON_3","HALO_COMPANY_ID","isCompanyPrivate","isRfs","typedRfs","isHaloCompanyRequest","backgroundImageUrl","banner_image","commercial_application","isImageLoadable","isLoadable","setIsLoadable","onload","onerror","useIsImageLoadable","TopRow","CompanyContainer","company_linked","verification_status","CompanyVerificationStatus","VERIFIED","BLUE_LIGHT_650","shouldFlex","asPortal","IconWrapper","ParentProgram","parent_program","CommercialApplication","HEADING_5_BOLD","HEADING_JUMBO","HEADING_BANNER","BLUE_750","handleFade","handleReveal","initialData","user_request_preference","staleTime","Infinity","MarketplaceCard","deleteInterest","deleteUserRequestPreference","RfpCardFooter","isUserFollowing","isCardHovered","shouldShowUnsubscribeButton","statusElementOptions","comingSoon","Status","GREEN_800","deadline","inExtension","NEUTRAL_600","pastDeadline","is_trial","waitListStatus","RequestStatusIcon","statusTagContent","statusTagIconName","shouldShowNotifyButton","getRfpStatus","RfpStatus","COMING_SOON","Tag","getRfpStatusText","OptedIn","NotifyMe","NotifyMeText","RfpCard","fromHref","setIsCardHovered","shouldFade","setShouldFade","_useFollowRequest","useFollowRequest","handleFollowRequest","isComingSoon","CardLink","DisabledCardLink","ActiveCardLink","FadeWrapper","requestPageUrlPath","showHoverBorder","handleNotify","logged_in","Company","TruncatedText","textWidth","lines","KeywordContainer","XMoreWrapper","maxLines","keyword","RELEVANT_NOT_RELEVANT_BUTTONS","Hint","formatDate","date","ScientistContribution","contribution","isExpandable","setIsExpanded","additionalInfo","PublicationName","hasUrl","publication_name","abstract","other_sponsor","foundation_name","org_name","amount","Detail","Intl","NumberFormat","Math","floor","end_date","filing_date","first_completed_at","requestLabel","REQUESTABLE_TO_ICON_NAME","preview","Preview","Details","THREE_LINES","_as","TOOLTIP_EXAMPLES","DEFAULT_TRL_RANGE","SliderHandle","handle","sliderHandleIcon","TRLs","trlRange","asInput","SliderContainer","SliderTrackBackground","Slider","range","vertical","reverse","TECHNOLOGY_READINESS_LEVELS","dots","allowCross","handleRender","newRange","DotContainer","level","Dot","SelectedBar","Levels","Level","halfwayPoint","handleLabelClick","SHADOW_A","viewBox","fill","xmlns","d","stroke","strokeWidth","ConfirmationModal","ResendConfirmationModal","confirmationModalOpen","setConfirmationModalOpen","currentUserEmail","isEmailInputVisible","setIsEmailInputVisible","code","setCode","emailInputError","setEmailInputError","verificationMutation","verifyUser","resendVerificationMutation","resendEmailInvite","t_link","StyledCodeInput","required","fields","fieldHeight","fieldWidth","verificationCode","DropdownRow","DropdownTitle","ResendEmailLink","EmailSection","sentToEmail","hasError","Padding","ReactCodeInput","buttonText","shouldSubmitOnClear","ClearContainer","NEUTRAL_350","TAG_MEDIUM_1","BLUE_LIGHT_400","ShareWithinCompanyModal","toastText","handleShare","dropdownOptions","generateEmailDropdownOptions","setEmails","emailError","setEmailError","setMessage","fetchAllCompanyMembers","Promise","all","then","catch","finally","EmailDropdown","extraMarginTop","TextArea","SubmitButtonContainer","DropdownContainer","containerStyles","DropdownStyles","creatable","CreatableSelect","AsyncSelect","Select","DROPDOWN_STYLES","TagContainer","CreatedTagContainer","CreateLabel","customStyles","isFocused","control","base","menu","multiValue","singleValue","TagOption","_objectWithoutProperties","_excluded","research_type","components","substring","MenuList","_ref2","_excluded2","_props","menuHeaderText","CustomDropdownIndicator","DropdownIndicator","CustomNoOptionsMessage","customNoOptionMessage","NoOptionsMessage","fuzzy","maxOptions","selectStyles","menuIsOpen","closeMenuOnSelect","selectedValue","setSelectedValue","selectedValueRef","tagLimitReached","val","placeholderText","classNamePrefix","formatCreateLabel","inputValue","IndicatorSeparator","selectProps","elem","sel","x","defaultProps","menuPlacement","disableIconColor","errorColor","InfoText","openInNewTab","isExternalLink","SignInTitle","SingleInputContainer","modalState","setModalState","currentUserId","INITIAL_LOAD_STATE","numPdfPages","MessageAttachmentGalleryPreview","focusedAttachmentId","prioritizedAttachments","focusedIndex","newLoadStates","loadStates","setLoadStates","handleError","oldLoadStates","download_url","file_url","isImage","_loadStates","download","inverted","onLoad","handleImageLoad","Pdf","Document","onLoadError","onLoadSuccess","pdf","handlePdfLoad","numPages","Page","pageNumber","renderAnnotationLayer","renderTextLayer","oldIndex","querySelector","focusedAttachment","handleArrowClick","increment","modal","Background","tabIndex","Wrapper","Metadata","formatMIMEContentType","formatBytes","Arrow","Island","remainOnHover","shouldWrap","Img","thumbnail_url","handleThumbnailClick","newFocusedIndex","body","useEffectRefresh","refreshKey","setRefreshKey","refresh","ScientistQueryKey","useScientist","setScientist","about","setAbout","positions","setPositions","isScientistLoading","getUser","scientistProfile","is_in_network","pos","duration","university_start_year","university_end_year","startup","startup_name","start_year","end_year","educations","education","degree","field_of_study","usePublications","scientistProfileId","setPublications","_useEffectRefresh","pubs","useFundings","setFundings","_useEffectRefresh2","funds","usePatents","setPatents","_useEffectRefresh3","pats","useProposals","asUniversityAdmin","setProposals","rawProposals","InviteNetworkScientistModal","submissionError","setSubmissionError","Invite","invitees","_await$inviteScientis","inviteScientistsToCompanyNetwork","immediately_added","sent_invitation","already_in_network","toastCustomizedMessage","toastMessage","UnsubscribedRfpCard","toggleUnsubscribeFromRfp","HeadingContainer","CardsContainer","StyledButton","OptionContainer","OptionRow","OptionHeading","OptionDescription","RfpUnsubscribeModal","unsubscribeParam","notifIdentifierParam","requestForProposals","setRequestForProposals","unsubscribedRequestIds","setUnsubscribedRequestIds","setUserId","isShadowProfile","setIsShadowProfile","settings","setSettings","handleToggle","enabled","updateNotificationSetting","prevSettings","newSettings","settingIndex","setting","PreferenceModal","signedNotificationId","fetchRequestForProposalsFromNotification","is_shadow_profile","notification_settings","category","request_for_proposals","account_settings_path","q","SponsorShareScientistModal","scientist_id","sponsorShareScientist","ScientistQuickViewModal","scientistUserId","sendMessage","addToNetwork","forUniversityProposalLibrary","activeTab","setActiveTab","isShareModalOpen","_useScientist","windowHeight","visibleTabs","tab","tabs","count","TopContent","ScrollContainer","About","Keywords","theme","Position","IndividualContainer","Note","TabPanel","MAX_KEYWORD_DISPLAY_COUNT","useCallback","nextInit","newSearchParams","init","reduce","memo","concat","useQueryParams","NOTIFY_SEARCH_PARAM","shouldSkipFollowOnRedirect","_useSearchParams2","setSearchParams","followed_request_ids","_useMutation","followRequest","followedRequest","dependencies","__hsWebInteractiveInstance","useIsMount","isMountRef","initialValue","storedValue","setStoredValue","parsedItem","isEqual","handleStorageChange","valueToStore","Function","stringify","domains","setDomains","excludedEmails","setExcludedEmails","setIsEmailSSOEnabled","isAborted","abortController","abortSignal","email_domains","excluded_emails","getSSOEmailDomains","emailParts","prevUrl","encodeURIComponent","payloadActionGenerator","setSubscription","loadCompanyMembers","setCompanyMembers","companyIdentifier","getMostRecentSubscription","companyId","sponsor_users","getCompanyMembers","setFollowedRequestsInfo","setCurrentCompany","setLoadingCurrentCompany","setInvitedUsers","setLoadInvitedUsers","setUniversityTeamMembers","loadCompany","accessCode","prompt","access_code","secondError","alert","fetchFollowedRequestsInfo","followed_requests_info","fetchInvitedUsers","organizationId","organization_id","loadCurrentUser","emptyActionGenerator","loadPatents","loadPublications","loadFundings","setUnreadCount","updateProfileImage","finishFollowUnfollowCompany","fetchFromSession","fetchPatents","profileInfoId","fetchPublications","fetchFundings","unread_count","DESKTOP","MOBILE","TABLET","TABLET_LANDSCAPE","isMobile","isDesktop","isTabletLandscape","submitForm","formId","hutk","getCookie","fetchNotificationSettings","patch","fetchUserInfoFromNotification","notificationId","request_for_proposals_notification_path","for_rfp_page","getRfpByRequestSlug","createOrUpdateRfp","formattedData","is_private","rfpData","company_research_interest_id","areaOfInterestId","looking_for","lookingFor","request_solutions","requestSolutions","request_requirements","requestRequirements","req","allow_attachments","allowAttachments","preferred_requirements","stringArrayToBulletText","niceToHaveRequirements","out_of_scope","outOfScope","partnership_models","partnershipModels","trl_range","sponsored_research","RfpPartnershipModel","SPONSORED_RESEARCH","sponsoredResearch","gift","GIFT","expertise","tools_and_technology","toolsAndTechnology","compounds_and_reagents","compoundsAndReagents","facilities_and_services","facilitiesAndServices","market_access","marketAccess","networking","submitted","isSubmitted","visible_on_marketplace","forInternalEmployees","visibleOnMarketplace","visible_on_company_page","visibleOnCompanyPage","visible_on_notification_campaign","visibleOnNotificationCampaign","has_access_code","hasAccessCode","for_internal_employees","partner_types","partnerTypes","rfp","exportRequestForProposal","rfpId","rfpIdentifier","responseType","createObjectURL","Blob","createElement","setAttribute","parentNode","removeChild","joinRfpWaitlist","getFilteredCompanyMembers","keyword_filter","keywordFilter","company_role_filter","companyRoleFilter","request_role_filter","requestRoleFilter","members","getSponsorTeamKeywordOptions","keyword_options","upgradeToPremium","upgradeToStandardLicense","upgradeToAdmin","downgradeFromAdmin","upgradeToSuperAdmin","updatePendingReviewTeamMembership","sid","isApprovedForLicense","is_approved_for_license","getNetworkScientists","for_scientist_network","order_by","page_number","search_filter","searchFilter","country_filter","countryFilter","institution_type_filter","institutionTypeFilter","institution_name_filter","institutionNameFilter","request_id_filter","requestIdFilter","status_filter","statusFilter","submitters_only_filter","submittersOnlyFilter","connection_filter","connectionFilter","accessToken","access_token","company_network_scientists_path","getUniversityMembers","faculty_filter","facultyFilter","name_filter","nameFilter","title_filter","titleFilter","getUniversityMembersTabCounts","faculty_count","admin_count","getUniversityMembersOptions","name_options","title_options","sendInviteFromUniversityAdmin","sendUniversityAdminInviteToSubmit","toUserIds","requestIds","to_user_ids","request_ids","followed_request","unfollowRequest","Unknown","signed_notification_id","Routes","timestamp","register","invitedUserId","invited_user_id","account_type","how_did_you_hear_about_us","howDidYouHearAboutUs","HOW_DID_YOU_HEAR_ABOUT_US_OTHER_OPTION","howDidYouHearAboutUsOther","encodeURI","companyURL","primary_affiliation","country_code","google_scholar_author_user_id","commenter_invite_request","university_expertise","universityExpertise","viewed_tours","verification_code","ProposalReviewStatus","ProposalStatus","ProposalStageNotStatus","ProposalyType","PRETTY_ROLE_NAMES","COMPANY_MEMBER","COMPANY_ADMIN","COMPANY_SUPER_ADMIN","REQUEST_DRAFT_EDITOR","REQUEST_COMMENTER","REQUEST_EXTERNAL_COMMENTER","REQUEST_EXTERNAL_LEAD","UniversityAdminRoles","UniversityExpertise","docCookies","targetLink","deletePrev","shouldRedirect","localeData","relativeTime","utc","timezone","dayjsBusinessDays","now","dayDropdownOptions","month","year","daysInMonth","daysInMonthArray","day","MONTH_DROPDOWN_OPTIONS","yearOptions","getFullYear","YEAR_DROPDOWN_OPTIONS","formatDateToEastern","tz","PROPOSAL","proposal_path","REQUEST_FOR_STARTUP_PROPOSAL","request_for_startup_proposal_path","REQUEST_FOR_EXPERT_PROPOSAL","request_for_expert_proposal_path","REQUESTABLE_TYPE_TO_PROPOSALY_TYPE","PROPOSAL_SLUG_PARAM","isUsingResponseDeadlinesV2","isDraft","complete","_user$profile_info","isPremium","SponsorLicenseType","PREMIUM","isOpenCall","resource_id","canAccessRequest","isSponsorAtCompany","isExternalLeadOnRequest","filterReviewTeamByRole","team","roleName","reviewTeamMembersForReviewerDashboardThumbnails","superAdminReviewers","onlyAdminReviewers","leads","commenters","externalLeads","externalCommenters","draftEditors","uniqBy","hideAccessCode","rfp_program_identifier","ACCESS_CODE_PARAM","submit_proposal_path","launch_date","CLOSED","isBeforeLaunchDate","isBefore","isPastDeadline","isAfter","IN_EXTENSION","getRequestFeedbackDeadlineStatus","FEEDBACK_DEADLINE_CUTOFF_DATE","canUseFeedbackDeadline","RequestFeedbackDeadlineStatus","NOT_APPLICABLE","feedback_deadline","NEEDS_DEADLINE","daysUntilDeadline","PAST_DEADLINE","DEADLINE_APPROACHING","BEFORE_DEADLINE","isNonOpenCallAfterJan1st2024","UTC","sortMarketplaceRequests","requests","scores","aStatus","bStatus","compareStatus","compareScores","compareLaunchDate","getTime","compareDeadline","RELEVANCE","LAUNCH_DATE","DEADLINE","argument","imageSize","SEARCH_FILTER_PARAM","REQUEST_TYPES_FILTER_PARAM","PARTNER_TYPES_FILTER_PARAM","RespondToRequestsFilters","setSearchFilter","requestTypesFilter","setRequestTypesFilter","partnerTypesFilter","setPartnerTypesFilter","totalCount","isPanelOpen","setIsPanelOpen","searchInput","setSearchInput","isMount","requestTypes","handleClearFilters","searchFilterAsChips","searchBarEl","searchFilterEl","ChipsInput","selectedValues","hideAll","handlePartnerTypeChange","partnerType","prev","commonFiltersEl","MARKETPLACE_PARTNER_TYPE_FILTER","FilterSection","isReversed","CheckboxLabel","withMargin","RequestPartnerTypes","STARTUPS","ACADEMIC_RESEARCHERS","SUPPLIERS","customCloseButton","Panel","ResetFiltersButton","PanelFooter","SearchAndFilter","labelMargin","VIEW_ALL_PARAM","RespondToRequests","currentPageNum","setCurrentPageNum","isRfpUnsubscribeModalOpen","setIsRfpUnsubscribeModalOpen","isKeywordsModalOpen","setIsKeywordsModalOpen","allFilters","canViewAllParam","canViewAll","getMarketplaceRequests","requestScores","beginningOfPage","endOfPage","KeywordSignUpModal","Columns","FilterColumn","ContentColumn","CountAndSort","NoResultsContainer","NoResultsHeader","NoResultsText","Pagination","currentPage","setCurrentPage","totalPages","ceil","DESKTOP_MEDIA_QUERY","collapsible","FilterSectionContainer","FilterContentsContainer","ClearFilterButton","STARTUP_TITLES","STARTUP_TITLE_OPTIONS","companyRoleOptions","countryOption","handleCompany","oldProfileInfo","is_university_scientist","withSearchIcon","COUNTRY_OPTIONS","getValueFromOption","isValidURL","roleDropdownOptions","prefillCompanyName","companyOptions","useCompanyOptions","fetchedSuggestions","company_suggestions","fetchCompanySuggestions","suggestedCompany","fixed","readOnly","isCreatable","COMPANY_SPONSOR_TITLE_LIMIT","hideClearButton","prefillInstitutionName","disciplineOptions","getDisciplines","select","universityHasCountry","UniversityDropdown","has_country","handleDisciplines","SCIENTIST_ROLE_OPTIONS","SCIENTIST_ROLES","handleSelectUniversityOption","googleScholarInstitutionNotFound","HOW_DID_YOU_HEAR_ABOUT_US_OPTIONS","stepSubheading","stepHeading","center","Step3CompanySponsor","Step3CompanyScientist","Step3ResearchInstitutionAdmin","Step3ResearchInstitutionScientist","placeholderColor","StepHeaderContainer","StepSubheading","StepHeading","large","DropdownSubtitle","Hairline","DropdownOld","half","ContactLink","Loader_","Dropdown_blueLabel","CheckboxItem","AccessCode","requestData","request_title","BenefitCard","benefit","benefit_type","details","RfpBenefitType","MARKET_ACCESS","EARLY_ACCESS","EXPOSURE","INVESTMENT","PAYMENT","EXPERTISE","NETWORKING","TOOLS_AND_TECHNOLOGY","COMPOUNDS_AND_REAGENTS","DATA","FACILITIES_AND_SERVICES","SERVICES_AGREEMENT","Benefits","fundingBenefits","nonMonetaryBenefits","validPartnershipModels","partnershipModel","WhatWeCanOfferYou","BenefitSection","Subheading","PartnershipModels","PARTNERSHIP_MODEL_LABELS","BenefitsContainer","RequestAttachment","fileSize","Meta","RequestAttachmentsContainer","PreviewRfpPageBanner","setButtonText","LINE_ITEMS","JoinWaitlistModal","hasSuccessfullySubmitted","setHasSuccessfullySubmitted","subheader","ctaText","BulletList","BulletPoint","BulletText","DoubleInputContainer","h6","getDropdownComponent","DropdownItemIcon","googleCalendar","ical","outlook","AddToCalendar","AddToCalendarHOC","ButtonWrapper","DropdownWrapper","CalendarDropdown","CalendarDropdownItem","cloneElement","AddToCalendarButton","containerRef","startDate","startOf","endDate","add","endDatetime","startDatetime","items","SHARE_SITES","GOOGLE","OUTLOOK","ICAL","li","RfpCtaContainer","isJoinWaitlistModalOpen","setIsJoinWaitlistModalOpen","handleSubmitClick","submitUrl","isUniversityMember","handleJoinWaitlist","rfpStatus","StatusCircle","viewAsScientist","isJamesStanton","canApply","hasIncompleteProposal","scientistPrimaryButton","universityPrimaryButton","is_partner","FollowingConfirmation","$showBorder","rfp_program","withoutTooltip","SHADOW_B","RfpKeywordsContainer","Tags","TagTooltip","AccessCodeBanner","hideIcon","rfpPreviewData","setRequest","needsAccessCode","setNeedsAccessCode","accessCodeError","setAccessCodeError","accessCodeRequestData","setAccessCodeRequestData","rfpDiscussionRef","_useParams","previewHash","accessCodeParam","fetchRequest","rfpRequest","requestable_id","decodedRfpIdentifier","atob","useLayoutEffect","animationFrameId","checkAndScroll","requestAnimationFrame","cancelAnimationFrame","showRfpDiscussionBanner","is_discussion_enabled","getArrayFromRubyRange","shouldShowAccessCodeBanner","none","isConfidential","PageContainer","hasPaddingTop","hasTopDivider","RequestPageBanner","fixMarkdownNewlines","BulletedSection","request_attachments","solution","requirement","TRLsContainer","TrlTagContent","funding_benefits","non_monetary_benefits","RightColumn","RfpCta","any","BASE_WINDOW_WIDTH","didCatch","setDidCatch","Quote","Author","ErrorMessage","handleCtaClick","goBack","UniversityTeamSearch","setNameFilter","setTitleFilter","setKeywordFilter","_useDynamicOptions","useDynamicOptions","nameOptions","titleOptions","keywordOptions","filtersCount","MultiSelectDropdown","FooterButtons","handleClearFilter","MissingAFilter","setNameOptions","setTitleOptions","setKeywordOptions","CompanySize","CompanySpend","CompanyType"],"sourceRoot":""}