{"version":3,"file":"js/1862-392c0c2006923c48c71c.chunk.js","mappings":"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","sources":["webpack://halo/./app/client/src/hooks/useIsVisible.ts","webpack://halo/./app/client/src/requests/requestForStartupProposals.ts","webpack://halo/./app/client/src/requests/requestForStartups.ts","webpack://halo/./app/client/src/components/modals/NotifyModal.tsx","webpack://halo/./app/client/src/views/RequestForStartupPage/DataPoints.tsx","webpack://halo/./app/client/src/utils/requestForStartupUtils.ts","webpack://halo/./app/client/src/views/RequestForStartupPage/RfsCta.tsx","webpack://halo/./app/client/src/views/RequestForStartupPage/RequestForStartupPage.tsx","webpack://halo/./app/client/src/views/RequestForStartupPage/Sidebar.tsx","webpack://halo/./app/client/src/views/RequestForStartupPage/Status.tsx"],"sourcesContent":["import { RefObject, useEffect, useMemo, useState } from \"react\";\n\nexport default function useIsVisible(ref: RefObject<HTMLElement>) {\n const [isIntersecting, setIsIntersecting] = useState(false);\n\n const observer = useMemo(\n () => new IntersectionObserver(([entry]) => setIsIntersecting(entry.isIntersecting)),\n [ref]\n );\n\n useEffect(() => {\n if (!ref.current) return;\n observer.observe(ref.current);\n return () => observer.disconnect();\n }, [ref]);\n\n return isIntersecting;\n}\n","import { RequestForStartupProposalDraft } from \"@tsTypes/request_for_startup_proposals/draft\";\nimport { RequestForStartupProposalShowResponse } from \"@tsTypes/request_for_startup_proposals/show\";\nimport api from \"./request\";\n\nexport const getRfsProposal = async (\n proposalSlug: string\n): Promise<RequestForStartupProposalShowResponse> => {\n const response = await api.get(`/request_for_startup_proposals/${proposalSlug}`);\n return response.data;\n};\n\nexport const getRfsProposalForProposalForm = async (\n proposalSlug: string\n): Promise<RequestForStartupProposalDraft> => {\n const response = await api.get(\n `/request_for_startup_proposals/${proposalSlug}?for_proposal_form=true`\n );\n return response.data.proposal;\n};\n\nexport const updateRfsProposal = async (\n proposalId: number,\n proposal: RequestForStartupProposalDraft\n): Promise<RequestForStartupProposalDraft> => {\n const response = await api.put(`/request_for_startup_proposals/${proposalId}`, {\n proposal,\n });\n return response.data.proposal;\n};\n\nexport const getDraftRfsProposal = async (\n requestSlug: string\n): Promise<RequestForStartupProposalDraft | null> => {\n const response = await api.get(`/request_for_startup_proposals/draft/${requestSlug}`);\n return response.data.proposal ?? null;\n};\n\nexport const saveDraftRfsProposal = async (\n requestSlug: string,\n proposal: RequestForStartupProposalDraft\n): Promise<RequestForStartupProposalDraft> => {\n const response = await api.post(`/request_for_startup_proposals/draft/${requestSlug}`, {\n proposal,\n });\n return response.data.proposal;\n};\n","import { request_for_startups_path } from \"@routes/routes\";\nimport { CommercialApplicationPageRequestForStartupsResponse } from \"@tsTypes/index\";\nimport { RequestForStartupIndexResponse } from \"@tsTypes/request_for_startups\";\nimport { RequestForStartupMarketplaceFilterOptionsResponse } from \"@tsTypes/request_for_startups/marketplace_filter_options\";\nimport { RequestForStartupsShowResponse } from \"@tsTypes/request_for_startups/show\";\nimport api from \"./request\";\n\nexport const getMarketplaceRequestForStartups = async ({\n searchFilter,\n commercialApplicationsFilter,\n}: {\n searchFilter: string;\n commercialApplicationsFilter: string[];\n}): Promise<RequestForStartupIndexResponse> => {\n const response = await api.get(\"/request_for_startups\", {\n params: {\n options: {\n search_filter: searchFilter,\n commercial_applications_filter: commercialApplicationsFilter,\n },\n },\n });\n return response.data.requests;\n};\n\nexport const getMarketplaceRequestForStartupsFilterOptions =\n async (): Promise<RequestForStartupMarketplaceFilterOptionsResponse> => {\n const response = await api.get(\"/request_for_startup_marketplace_filter_options\");\n return response.data;\n };\n\nexport const getCommercialApplicationPageRequestForStartups = async (\n commercialApplicationId: number,\n pageNum: number\n): Promise<CommercialApplicationPageRequestForStartupsResponse> => {\n const response = await api.get(request_for_startups_path(), {\n params: {\n commercial_application_id: commercialApplicationId,\n page_num: pageNum,\n },\n });\n\n return response.data;\n};\n\nexport const getRequestForStartup = async (\n slug: string\n): Promise<RequestForStartupsShowResponse> => {\n const response = await api.get(`/request_for_startups/${slug}`);\n if (response.data.redirect) {\n window.location.href = response.data.redirect;\n }\n return response.data.request;\n};\n","import { BlankModal, Icon } from \"@components/library\";\nimport Button from \"@components/library/Buttons/Button\";\nimport { BlankModalProps } from \"@components/library/ModalBases/BlankModal\";\nimport { COLORS, FONTS } from \"@constants\";\nimport useFollowRequest from \"@hooks/useFollowRequest\";\nimport { RequestForStartupsShowResponse } from \"@tsTypes/request_for_startups/show\";\nimport dayjs from \"dayjs\";\nimport styled from \"styled-components\";\n\ninterface Props extends BlankModalProps {\n request: RequestForStartupsShowResponse;\n}\n\nconst NotifyModal = ({ request, isOpen, onClose }: Props) => {\n const { handleFollowRequest, isUserFollowing } = useFollowRequest(\n request.id,\n true /* shouldSkipFollowOnRedirect */\n );\n\n return (\n <BlankModal onClose={onClose} isOpen={isOpen} width=\"540px\" backgroundMode=\"blur\">\n <ModalContent data-testid=\"notify-modal\">\n <Icon name=\"Notification Filled\" margin=\"10px auto 0\" />\n <Header>Stay in the loop</Header>\n <SubHeader>\n {request.requestable.launch_date && !request.requestable.unknown_launch_date\n ? `Thanks for your interest in ${\n request.title\n }. Get notified when applications open on ${dayjs(\n request.requestable.launch_date\n ).format(\"MMM D, YYYY\")}.`\n : `Thanks for your interest in ${request.title}. Get notified when applications open.`}\n </SubHeader>\n {isUserFollowing ? (\n <SuccessText data-testid=\"notify-success-text\">\n <Icon name=\"Success\" color={COLORS.GREEN} size=\"sm\" />\n You'll be notified.\n </SuccessText>\n ) : (\n <Button\n width=\"100%\"\n iconName=\"Bell\"\n onClick={handleFollowRequest}\n data-testid=\"notify-me-button\"\n >\n Notify me\n </Button>\n )}\n </ModalContent>\n </BlankModal>\n );\n};\n\nexport default NotifyModal;\n\nconst ModalContent = styled.div`\n text-align: center;\n justify-content: center;\n margin: auto;\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 60px 93px;\n width: 100%;\n height: 100%;\n`;\nconst Header = styled.h3`\n color: ${COLORS.BLACK};\n ${FONTS.HEADING_3_SEMIBOLD};\n margin: 4px 0px 0px 0px;\n`;\nconst SubHeader = styled.h6`\n width: 355px;\n color: ${COLORS.NEUTRAL_500};\n ${FONTS.REGULAR_2}\n`;\nconst SuccessText = styled.div`\n display: flex;\n align-items: center;\n gap: 4px;\n height: 42px;\n color: ${COLORS.GREEN};\n ${FONTS.REGULAR_2}\n`;\n","import Icon, { IconName } from \"@components/library/Icon/Icon\";\nimport { COLORS, FONTS, WINDOW_DIMENSIONS } from \"@constants\";\nimport i18n from \"@locales\";\nimport { RootState } from \"@redux/store\";\nimport { RequestForStartupsShowResponse } from \"@tsTypes/request_for_startups/show\";\nimport { t } from \"@utils/i18n\";\nimport { ReactElement } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport styled from \"styled-components\";\n\ninterface Props {\n request: RequestForStartupsShowResponse;\n}\n\ntype DataPoint = {\n key: string;\n iconName: IconName;\n content: string | ReactElement | null;\n};\n\nconst i18nPrefix = \"pages.request_for_startups_page.data_points\";\n\nexport default function DataPoints({ request }: Props) {\n const isMobile = useSelector((state: RootState) => state.window.isMobile);\n\n const dataPoints: DataPoint[] = [];\n\n if (request.requestable.participation_type) {\n dataPoints.push({\n key: \"participation_type\",\n iconName: \"Location\",\n content: t([i18nPrefix, \"participation_type\", request.requestable.participation_type]),\n });\n }\n\n if (request.requestable.max_accepted) {\n dataPoints.push({\n key: \"max_accepted\",\n iconName: \"Organization\",\n content: t([i18nPrefix, \"max_accepted\"], { count: request.requestable.max_accepted }),\n });\n }\n\n if (request.requestable.duration_in_weeks) {\n let i18nKey = \"duration.weeks\";\n let count = request.requestable.duration_in_weeks;\n\n if (request.requestable.duration_in_weeks % 4 === 0) {\n i18nKey = \"duration.months\";\n count = request.requestable.duration_in_weeks / 4;\n }\n\n dataPoints.push({\n key: \"duration\",\n iconName: \"History\",\n content: t([i18nPrefix, i18nKey], { count }),\n });\n }\n\n if (typeof request.requestable.funding_amount_usd === \"number\") {\n let content = \"\";\n\n if (request.requestable.funding_amount_usd === 0) {\n content = t([i18nPrefix, \"no_funding\"]);\n } else {\n content = t([i18nPrefix, \"funding\"], {\n count: i18n.numberToCurrency(request.requestable.funding_amount_usd, { precision: 0 }),\n });\n }\n\n dataPoints.push({ key: \"funding\", iconName: \"Funding\", content });\n }\n\n if (request.requestable.alumni_count) {\n dataPoints.push({\n key: \"alumni\",\n iconName: \"Organization\",\n content: t([i18nPrefix, \"alumni\"], { count: request.requestable.alumni_count }),\n });\n }\n\n if (request.requestable.equity_percentage) {\n dataPoints.push({\n key: \"equity\",\n iconName: \"Funding\",\n content: t([i18nPrefix, \"equity\"], { equity: request.requestable.equity_percentage }),\n });\n }\n\n const miscDataPoints: DataPoint[] = [\n { key: \"misc_time\", iconName: \"History\", content: request.requestable.misc_time },\n { key: \"misc_building\", iconName: \"Organization\", content: request.requestable.misc_building },\n { key: \"misc_person\", iconName: \"Employees\", content: request.requestable.misc_person },\n { key: \"misc_rocket\", iconName: \"Accelerator\", content: request.requestable.misc_rocket },\n { key: \"misc_dollar\", iconName: \"Funding\", content: request.requestable.misc_dollar },\n ];\n\n miscDataPoints.forEach(({ key, iconName, content }) => {\n if (content) {\n dataPoints.push({ key, iconName, content });\n }\n });\n\n return (\n <Container count={dataPoints.length}>\n {dataPoints.map(({ key, iconName, content }) => (\n <DataPoint key={\"dataPoint-\" + key}>\n <Icon\n name={iconName}\n size=\"md\"\n color={isMobile ? COLORS.NEUTRAL_400 : COLORS.BLUE_LIGHT_600}\n />\n {content}\n </DataPoint>\n ))}\n </Container>\n );\n}\n\nconst Container = styled.div`\n display: flex;\n align-items: center;\n margin: 40px 0;\n gap: 96px;\n\n ${WINDOW_DIMENSIONS.TABLET_MEDIA_QUERY} {\n display: grid;\n grid-template-columns: 1fr 1fr;\n grid-gap: 12px;\n }\n\n ${WINDOW_DIMENSIONS.MOBILE_MEDIA_QUERY} {\n grid-template-columns: 1fr;\n border: 1px solid ${COLORS.NEUTRAL_200};\n border-radius: 8px;\n padding: 16px;\n }\n`;\n\nconst DataPoint = styled.div`\n display: flex;\n align-items: center;\n gap: 6px;\n color: ${COLORS.BLUE_900};\n ${FONTS.MEDIUM_2}\n\n ${WINDOW_DIMENSIONS.MOBILE_MEDIA_QUERY} {\n color: ${COLORS.BLACK};\n }\n`;\n","export const rfsSubmitUrl = (slug: string) => `/submit/request_for_startup/${slug}`;\n","import { Button, Icon } from \"@components/library\";\nimport RefineRecommendations from \"@components/RequestPageComponents/RefineRecommendations\";\nimport { COLORS, FEATURE_FLAGS, FONTS, STYLES, WINDOW_DIMENSIONS } from \"@constants\";\nimport useFollowRequest from \"@hooks/useFollowRequest\";\nimport { toggleLoginModal } from \"@redux/actions/profileActions\";\nimport { RootState } from \"@redux/store\";\nimport { getDraftRfsProposal } from \"@requests/requestForStartupProposals\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport { SegmentEventName } from \"@tsTypes/__generated__/enums\";\nimport { RequestForStartupsShowResponse } from \"@tsTypes/request_for_startups/show\";\nimport { LaunchableRequestStatus } from \"@tsTypes/requests\";\nimport { UserRole } from \"@tsTypes/users\";\nimport { track } from \"@utils/appUtils\";\nimport { setPrevUrlCookie } from \"@utils/authUtils\";\nimport { t } from \"@utils/i18n\";\nimport { rfsSubmitUrl } from \"@utils/requestForStartupUtils\";\nimport { getLaunchableRequestStatus } from \"@utils/requestUtils\";\nimport { ReactNode } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { useHistory } from \"react-router-dom\";\nimport styled from \"styled-components\";\nimport Status from \"./Status\";\n\ninterface Props {\n request: RequestForStartupsShowResponse;\n onShare: () => void;\n}\n\nexport default function Cta({ request, onShare }: Props) {\n const currentUser = useSelector((state: RootState) => state.profiles.currentUser);\n const history = useHistory();\n const dispatch = useDispatch();\n\n const { data: draft } = useQuery({\n queryKey: [\"requestForStartupDraft\", request.slug],\n queryFn: () => getDraftRfsProposal(request.slug),\n enabled: Boolean(request.slug) && currentUser.role === UserRole.SCIENTIST,\n });\n const hasDraft = Boolean(draft);\n\n const status = getLaunchableRequestStatus(request as any);\n const canApply =\n currentUser.role !== UserRole.UNIVERSITY_ADMIN &&\n (status === LaunchableRequestStatus.ACTIVE || status === LaunchableRequestStatus.IN_EXTENSION);\n\n const handleSubmitClick = () => {\n track(SegmentEventName.Click, {\n ui_component: \"Request for Startup Page - Submit internal button\",\n request_slug: request.slug,\n is_logged_in: Boolean(currentUser.id),\n });\n const submitUrl = rfsSubmitUrl(request.slug);\n if (currentUser.id) {\n history.push(submitUrl);\n } else {\n setPrevUrlCookie(submitUrl);\n dispatch(toggleLoginModal({ open: true }));\n }\n };\n\n const handleShareClick = () => {\n track(SegmentEventName.Click, {\n ui_component: \"Request for Startup Page - Share button\",\n request_slug: request.slug,\n is_logged_in: Boolean(currentUser.id),\n });\n if (currentUser.id) {\n onShare();\n } else {\n setPrevUrlCookie(window.location.pathname);\n dispatch(toggleLoginModal({ open: true }));\n }\n };\n\n const { handleFollowRequest, isUserFollowing } = useFollowRequest(request.id);\n\n const handleNotify = () => {\n track(SegmentEventName.Click, {\n ui_component: \"Request for Startup Page - Notify button\",\n request_slug: request.slug,\n });\n\n handleFollowRequest();\n };\n\n let text = t(\"pages.request_for_startups_page.cta.text.share\");\n const buttons: ReactNode[] = [\n <Button\n key=\"cta-share-button\"\n iconName=\"Share\"\n width=\"100%\"\n onClick={handleShareClick}\n variant={\n canApply ||\n status === LaunchableRequestStatus.COMING_SOON ||\n status === LaunchableRequestStatus.CLOSED\n ? \"secondary\"\n : \"primary\"\n }\n >\n {t(\"pages.request_for_startups_page.cta.button.share\")}\n </Button>,\n ];\n\n if (status === LaunchableRequestStatus.COMING_SOON || status === LaunchableRequestStatus.CLOSED) {\n text = t(\"pages.request_for_startups_page.cta.text.coming_soon\");\n buttons.unshift(\n isUserFollowing ? (\n <FollowingConfirmation>\n <Icon color={COLORS.GREEN} margin=\"0 4px 0 0\" name=\"Success\" />\n You'll be notified\n </FollowingConfirmation>\n ) : (\n <Button\n key=\"cta-notify-button\"\n iconName=\"Bell\"\n iconPosition=\"left\"\n margin=\"0 0 10px\"\n width=\"100%\"\n onClick={handleNotify}\n >\n {t(\"pages.request_for_startups_page.cta.button.coming_soon\")}\n </Button>\n )\n );\n } else if (request.requestable.external_url) {\n text = t(\"pages.request_for_startups_page.cta.text.external\");\n buttons.unshift(\n <a href={request.requestable.external_url} target=\"_blank\" rel=\"noreferrer\">\n <Button\n key=\"cta-submit-button\"\n iconName=\"Open in a new tab\"\n iconPosition=\"right\"\n margin=\"0 0 10px\"\n width=\"100%\"\n onClick={() => {\n track(SegmentEventName.Click, {\n ui_component: \"Request for Startup Page - Submit external button\",\n request_slug: request.slug,\n });\n }}\n >\n {t(\"pages.request_for_startups_page.cta.button.external\")}\n </Button>\n </a>\n );\n } else if (canApply) {\n text = t(\"pages.request_for_startups_page.cta.text.submit\");\n buttons.unshift(\n <Button\n key=\"cta-submit-button\"\n iconName={hasDraft ? \"Attention\" : \"Easy Apply\"}\n margin=\"0 0 10px\"\n width=\"100%\"\n onClick={handleSubmitClick}\n disabled={currentUser.role === UserRole.SPONSOR}\n >\n {t([\"pages.request_for_startups_page.cta.button\", hasDraft ? \"continue\" : \"submit\"])}\n </Button>\n );\n }\n\n return (\n <Container>\n <TopContainer $showBorder={FEATURE_FLAGS.RELEVANT_NOT_RELEVANT_BUTTONS}>\n {text}\n <StatusContainer>\n <Status request={request as any} iconPosition=\"left\" />\n </StatusContainer>\n {buttons}\n </TopContainer>\n {FEATURE_FLAGS.RELEVANT_NOT_RELEVANT_BUTTONS && (\n <RefineRecommendations\n request={request}\n isComplete={status === LaunchableRequestStatus.CLOSED}\n />\n )}\n </Container>\n );\n}\n\nconst Container = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n\n min-width: 313px;\n width: 100%;\n\n border-radius: 8px;\n border: 1px solid ${COLORS.NEUTRAL_250};\n box-shadow: ${STYLES.SHADOW_B};\n\n ${FONTS.HEADING_4_SEMIBOLD}\n\n ${WINDOW_DIMENSIONS.TABLET_LANDSCAPE_MEDIA_QUERY} {\n margin-top: 40px;\n }\n`;\n\nconst TopContainer = styled.div<{ $showBorder: boolean }>`\n display: flex;\n flex-direction: column;\n align-items: center;\n\n width: 100%;\n padding: 40px 32px 24px;\n\n ${({ $showBorder }) => $showBorder && `border-bottom: 1px solid ${COLORS.NEUTRAL_250};`}\n`;\n\nconst StatusContainer = styled.div`\n margin: 18px 0;\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 InviteModal from \"@components/InviteModal\";\nimport RequestDiscussion from \"@components/RequestDiscussion/RequestDiscussion\";\nimport RequestFAQs from \"@components/RequestFAQs\";\nimport { RequestPageBanner } from \"@components/RequestPageComponents\";\nimport TRLs from \"@components/TRLs\";\nimport toast from \"@components/Toast\";\nimport { Icon, PageContainer, Tag, TagTooltip, TextLink, Tooltip } from \"@components/library\";\nimport NotifyModal from \"@components/modals/NotifyModal\";\nimport { COLORS, FONTS, WINDOW_DIMENSIONS } from \"@constants\";\nimport { RootState } from \"@redux/store\";\nimport { getRequestForStartup } from \"@requests/requestForStartups\";\nimport { marketplacePath } from \"@routes/utils\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport { SegmentEventName } from \"@tsTypes/__generated__/enums\";\nimport { LaunchableRequestStatus } from \"@tsTypes/requests\";\nimport { getArrayFromRubyRange, track } from \"@utils/appUtils\";\nimport { t } from \"@utils/i18n\";\nimport { getLaunchableRequestStatus } from \"@utils/requestUtils\";\nimport { toastErrorHandler } from \"@utils/requests\";\nimport { renderMarkdownText, renderMarkdownTextWithDangerousHTML } from \"@utils/textUtils\";\nimport { useEffect, useLayoutEffect, useRef, useState } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { useHistory, useParams } from \"react-router-dom\";\nimport { Loader } from \"semantic-ui-react\";\nimport { MAX_KEYWORD_DISPLAY_COUNT } from \"src/constants/requests\";\nimport styled from \"styled-components\";\nimport AboutCompany from \"../../components/RequestPageComponents/AboutCompany\";\nimport Benefits from \"../RFPPage/Benefits\";\nimport { TRLsContainer, TrlTagContent } from \"../RFPPage/RfpPage\";\nimport DataPoints from \"./DataPoints\";\nimport Cta from \"./RfsCta\";\nimport Sidebar from \"./Sidebar\";\n\nexport default function RequestForStartupPage() {\n const [isShareModalOpen, setIsShareModalOpen] = useState(false);\n const [isCommenting, setIsCommenting] = useState(false);\n\n const currentUser = useSelector((state: RootState) => state.profiles.currentUser);\n const isTabletLandscape = useSelector((state: RootState) => state.window.isTabletLandscape);\n const { slug } = useParams();\n const history = useHistory();\n\n const { data: request, isLoading } = useQuery(\n [\"getRequestForStartup\", slug],\n () => getRequestForStartup(slug),\n {\n enabled: Boolean(slug),\n onError: toastErrorHandler,\n }\n );\n\n useEffect(() => {\n if (!request) return;\n\n document.title = `${request.title} | Startup Program | Halo`;\n }, [request]);\n\n const backgroundRef = useRef<HTMLDivElement>(null);\n const lookingForRef = useRef<HTMLDivElement>(null);\n const benefitsRef = useRef<HTMLDivElement>(null);\n const whoWeAreRef = useRef<HTMLDivElement>(null);\n const qaRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!request?.id) {\n return;\n }\n\n track(SegmentEventName.View, {\n request_id: request.id,\n requestable: {\n requestable_id: request.id,\n requestable_type: request.requestable_type,\n },\n react_component: \"RequestForStartupPage\",\n });\n }, [request?.id]);\n\n useLayoutEffect(() => {\n let animationFrameId: number;\n\n const checkAndScroll = () => {\n if (window.location.hash === \"#qa\" && qaRef.current) {\n qaRef.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 }, [qaRef]);\n\n if (isLoading || !request) {\n return <Loader inline=\"centered\" />;\n }\n\n const trlRange = request.requestable.trl_range\n ? getArrayFromRubyRange(request.requestable.trl_range)\n : null;\n\n return (\n <>\n <InviteModal\n open={isShareModalOpen}\n requestId={request.id}\n closeModal={() => setIsShareModalOpen(false)}\n trackAndToastHandler={() => toast.success(\"Startup program 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 <NotifyModal\n isOpen={\n getLaunchableRequestStatus(request as any) === LaunchableRequestStatus.COMING_SOON &&\n !request.requestable.accessible_before_launch_date\n }\n onClose={() => history.push(marketplacePath(\"startup_programs\"))}\n request={request}\n />\n <PageContainer hasPaddingTop={false} maxWidth=\"1680px\">\n <Breadcrumb>\n <TextLink to={marketplacePath(\"startup_programs\")} font={FONTS.MEDIUM_2}>\n <Icon name=\"Chevron Left\" margin=\"0 0 0 -8px\" />\n {t(\"pages.request_for_startups_page.breadcrumb\")}\n </TextLink>\n </Breadcrumb>\n <BannerContainer>\n <RequestPageBanner request={request} />\n </BannerContainer>\n {isTabletLandscape && <Cta request={request} onShare={() => setIsShareModalOpen(true)} />}\n <DataPoints request={request} />\n <Columns>\n <Left>\n <Sidebar\n backgroundRef={backgroundRef}\n lookingForRef={lookingForRef}\n benefitsRef={benefitsRef}\n whoWeAreRef={whoWeAreRef}\n qaRef={qaRef}\n />\n </Left>\n <Center>\n <Summary>{request.requestable.summary}</Summary>\n <Section ref={backgroundRef} withNewlines>\n <Heading>{t(\"pages.request_for_startups_page.headings.background\")}</Heading>\n {renderMarkdownTextWithDangerousHTML(request.requestable.background)}\n </Section>\n <Section ref={lookingForRef}>\n <Heading>{t(\"pages.request_for_startups_page.headings.looking_for\")}</Heading>\n <div>\n <Subheading>\n {t(\"pages.request_for_startups_page.looking_for.subheading\")}\n </Subheading>\n <ListHeading>\n {t(\"pages.request_for_startups_page.looking_for.list_heading\")}\n </ListHeading>\n {renderMarkdownText(request.requestable.solutions_of_interest)}\n </div>\n <div>\n <Subheading first>\n {t(\"pages.request_for_startups_page.headings.eligible_country_codes.heading\")}\n </Subheading>\n {request.requestable.eligible_country_names &&\n request.requestable.eligible_country_names.length > 1 ? (\n <>\n <div style={{ marginBottom: \"5px\" }}>\n {t(\n \"pages.request_for_startups_page.headings.eligible_country_codes.list_heading\"\n )}\n </div>\n <PlainList>\n {request.requestable.eligible_country_names.map((country) => (\n <li key={country}>{country}</li>\n ))}\n </PlainList>\n </>\n ) : (\n <PlainList>\n <li>\n {t(\"pages.request_for_startups_page.headings.eligible_country_codes.body\", {\n locations: request.requestable.eligible_country_names?.length\n ? request.requestable.eligible_country_names.join(\", \")\n : t(\n \"pages.request_for_startups_page.headings.eligible_country_codes.all\"\n ),\n })}\n </li>\n </PlainList>\n )}\n </div>\n {Boolean(request.requestable.eligible_startup_stages?.length) && (\n <div>\n <Subheading>\n {t(\"pages.request_for_startups_page.headings.eligible_startup_stages.heading\")}\n </Subheading>\n <div style={{ marginBottom: \"5px\" }}>\n {t(\n \"pages.request_for_startups_page.headings.eligible_startup_stages.list_heading\"\n )}\n </div>\n <PlainList>\n {request.requestable.eligible_startup_stages!.map((stage) => (\n <li key={`stage-${stage}`}>{stage}</li>\n ))}\n </PlainList>\n </div>\n )}\n {trlRange ? (\n <TRLsContainer>\n <Subheading>{t(\"pages.request_for_startups_page.trl.heading\")}</Subheading>\n <ListHeading style={{ margin: \"-15px 0 10px\" }}>\n {t(\"pages.request_for_startups_page.trl.list_heading\")}\n </ListHeading>\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={t(\"pages.request_for_startups_page.trl.tooltip\")}\n tooltipWidth=\"410px\"\n >\n <Icon name=\"Info\" size=\"xs\" color={COLORS.NEUTRAL_400} />\n </Tooltip>\n </TrlTagContent>\n }\n size=\"md\"\n margin=\"-10px 0 10px 0\"\n />\n <TRLs trlRange={trlRange} />\n </TRLsContainer>\n ) : null}\n </Section>\n <span ref={benefitsRef}>\n <Benefits\n partnershipModels={[]}\n fundingBenefits={request.funding_benefits}\n nonMonetaryBenefits={request.non_monetary_benefits}\n withMarginTop={false}\n />\n </span>\n <span ref={whoWeAreRef}>\n <AboutCompany\n withMarginTop={false}\n request={request}\n customText={request.requestable.who_we_are ?? undefined}\n lineHeight=\"1.7\"\n />\n </span>\n <div ref={qaRef}>\n <RequestDiscussion\n request={request}\n isCommenting={isCommenting}\n setIsCommenting={setIsCommenting}\n setIsShareModalOpen={setIsShareModalOpen}\n />\n </div>\n </Center>\n <Right>\n {!isTabletLandscape && (\n <Cta request={request} onShare={() => setIsShareModalOpen(true)} />\n )}\n {request.requestable.display_location && (\n <div>\n <h3>{t(\"pages.request_for_startups_page.headings.locations\")}</h3>\n <p>{request.requestable.display_location}</p>\n </div>\n )}\n {request.areas_of_expertise.length > 0 && (\n <div>\n <h3>Relevant Keywords</h3>\n <AreasOfExpertise>\n {request.areas_of_expertise.slice(0, MAX_KEYWORD_DISPLAY_COUNT).map((area) => (\n <Tag key={area} content={area} size=\"sm\" theme=\"neutral\" />\n ))}\n {request.areas_of_expertise.length > MAX_KEYWORD_DISPLAY_COUNT && (\n <TagTooltip\n tags={request.areas_of_expertise\n .slice(MAX_KEYWORD_DISPLAY_COUNT)\n .map((area) => (\n <Tag key={area} content={area} size=\"sm\" theme=\"neutral\" />\n ))}\n >\n <Tag\n content={`${\n request.areas_of_expertise.length - MAX_KEYWORD_DISPLAY_COUNT\n } more`}\n size=\"sm\"\n theme=\"neutral\"\n />\n </TagTooltip>\n )}\n </AreasOfExpertise>\n </div>\n )}\n {/* Custom FAQs for Bayer Co-Lab Cambridge RFS */}\n {request.slug === \"co-lab-cambridge\" && <RequestFAQs request={request as any} />}\n </Right>\n </Columns>\n </PageContainer>\n </>\n );\n}\n\n// Exported styles are also used in RequestForExpertsPage\nexport const Breadcrumb = styled.div`\n margin-top: 24px;\n`;\n\nexport const Columns = styled.div`\n display: flex;\n flex-direction: row;\n gap: 20px;\n\n ${WINDOW_DIMENSIONS.TABLET_LANDSCAPE_MEDIA_QUERY} {\n flex-direction: column-reverse;\n }\n`;\n\nexport const Left = styled.div`\n flex: 0 0 196px;\n\n ${WINDOW_DIMENSIONS.TABLET_LANDSCAPE_MEDIA_QUERY} {\n display: none;\n }\n`;\n\nexport const Center = styled.div`\n flex: 1;\n\n display: flex;\n flex-direction: column;\n gap: 64px;\n\n padding-right: 46px;\n\n ${WINDOW_DIMENSIONS.TABLET_LANDSCAPE_MEDIA_QUERY} {\n padding-right: 0;\n }\n`;\n\nexport const Right = styled.div`\n flex: 0 0 303px;\n\n display: flex;\n flex-direction: column;\n gap: 56px;\n\n h3 {\n ${FONTS.HEADING_5_SEMIBOLD}\n }\n\n p {\n ${FONTS.MEDIUM_2}\n }\n\n ${WINDOW_DIMENSIONS.TABLET_LANDSCAPE_MEDIA_QUERY} {\n flex: none;\n flex-direction: column-reverse;\n gap: 40px;\n width: 100%;\n margin-bottom: 40px;\n }\n`;\n\nexport const Summary = styled.h2`\n margin: 0;\n ${FONTS.HEADING_3_REGULAR}\n`;\n\nexport const Section = styled.section`\n display: flex;\n flex-direction: column;\n gap: 24px;\n\n margin: 0;\n ${({ withNewlines }) => withNewlines && \"white-space: pre-line;\"}\n ${FONTS.REGULAR_1}\n\n ul {\n padding-left: 4px;\n white-space: normal; // negates the \"white-space: pre-line;\" effect above for lists\n }\n`;\n\nexport const Heading = styled.h1`\n margin: 0;\n ${FONTS.HEADING_4_SEMIBOLD}\n`;\n\nexport const Subheading = styled.div`\n display: flex;\n align-items: center;\n flex-wrap: nowrap;\n margin: ${({ first }) => (first ? \"4px\" : \"20px\")} 0 8px;\n ${FONTS.SEMIBOLD_1}\n`;\n\nexport const ListHeading = styled.span`\n margin-bottom: -16px;\n`;\n\nexport const PlainList = styled.ul`\n padding-left: 22px !important;\n margin: 0 !important;\n`;\n\nconst AreasOfExpertise = styled.div`\n display: flex;\n flex-wrap: wrap;\n line-height: 1;\n & > div {\n margin-top: 8px;\n }\n`;\nconst BannerContainer = styled.div`\n margin-top: 16px;\n`;\n","import { COLORS, FONTS } from \"@constants\";\nimport useIsVisible from \"@hooks/useIsVisible\";\nimport { SegmentEventName } from \"@tsTypes/__generated__/enums\";\nimport { track } from \"@utils/appUtils\";\nimport { t } from \"@utils/i18n\";\nimport { RefObject, useEffect, useState } from \"react\";\nimport styled from \"styled-components\";\n\ninterface Props {\n backgroundRef: RefObject<HTMLElement>;\n lookingForRef: RefObject<HTMLElement>;\n benefitsRef: RefObject<HTMLElement>;\n whoWeAreRef: RefObject<HTMLElement>;\n qaRef: RefObject<HTMLElement>;\n}\n\nenum Section {\n BACKGROUND = \"background\",\n LOOKING_FOR = \"looking-for\",\n BENEFITS = \"benefits\",\n WHO_WE_ARE = \"who-we-are\",\n QA = \"qa\",\n}\n\nexport default function Sidebar({\n backgroundRef,\n lookingForRef,\n benefitsRef,\n whoWeAreRef,\n qaRef,\n}: Props) {\n const [focusedKey, setFocusedKey] = useState<Section | null>(null);\n\n const isBackgroundVisible = useIsVisible(backgroundRef);\n const isLookingForVisible = useIsVisible(lookingForRef);\n const isBenefitsVisible = useIsVisible(benefitsRef);\n const isWhoWeAreVisible = useIsVisible(whoWeAreRef);\n const isQaVisible = useIsVisible(qaRef);\n\n useEffect(() => {\n if (isBackgroundVisible) return setFocusedKey(Section.BACKGROUND);\n if (isLookingForVisible) return setFocusedKey(Section.LOOKING_FOR);\n if (isBenefitsVisible) return setFocusedKey(Section.BENEFITS);\n if (isWhoWeAreVisible) return setFocusedKey(Section.WHO_WE_ARE);\n if (isQaVisible) return setFocusedKey(Section.QA);\n setFocusedKey(null);\n }, [isBackgroundVisible, isLookingForVisible, isBenefitsVisible, isWhoWeAreVisible, isQaVisible]);\n\n const links = [\n {\n key: Section.BACKGROUND,\n ref: backgroundRef,\n title: t(\"pages.request_for_startups_page.headings.background\"),\n },\n {\n key: Section.LOOKING_FOR,\n ref: lookingForRef,\n title: t(\"pages.request_for_startups_page.headings.looking_for\"),\n },\n {\n key: Section.BENEFITS,\n ref: benefitsRef,\n title: t(\"pages.request_for_startups_page.headings.offer\"),\n },\n {\n key: Section.WHO_WE_ARE,\n ref: whoWeAreRef,\n title: t(\"pages.request_for_startups_page.headings.who_we_are\"),\n },\n {\n key: Section.QA,\n ref: qaRef,\n title: t(\"pages.request_for_startups_page.headings.q_a\"),\n },\n ];\n return (\n <List>\n {links.map(({ key, ref, title }) => (\n <Item\n key={key}\n isFocused={key === focusedKey}\n onClick={() => {\n track(SegmentEventName.Click, {\n ui_component: \"Request for Startup Page - Sidebar\",\n key,\n });\n setFocusedKey(key);\n setTimeout(() => setFocusedKey(key), 300);\n ref.current?.scrollIntoView({ behavior: \"smooth\" });\n }}\n >\n {title}\n </Item>\n ))}\n </List>\n );\n}\n\nexport const List = styled.ul`\n position: sticky;\n top: 50px;\n\n width: 100%;\n padding: 0;\n\n list-style-type: none;\n ${FONTS.MEDIUM_2}\n\n li {\n padding: 8px;\n }\n\n li:not(:last-child) {\n border-bottom: 1px solid ${COLORS.NEUTRAL_200};\n }\n`;\n\nexport const Item = styled.li`\n color: ${({ isFocused }) => (isFocused ? COLORS.HALO_BLUE : COLORS.BLACK)};\n\n &:hover,\n &:active,\n &:focus {\n color: ${COLORS.BLACK};\n text-decoration: none;\n outline: none;\n }\n\n &:hover {\n cursor: pointer;\n color: ${COLORS.BLUE_900};\n }\n`;\n","import { Icon } from \"@components/library\";\nimport { IconName } from \"@components/library/Icon/Icon\";\nimport { COLORS, FONTS, WINDOW_DIMENSIONS } from \"@constants\";\nimport { LaunchableRequestStatus } from \"@tsTypes/requests\";\nimport { formatDateToEastern } from \"@utils/dateUtils\";\nimport { t } from \"@utils/i18n\";\nimport { LaunchableRequest, getLaunchableRequestStatus } from \"@utils/requestUtils\";\nimport styled from \"styled-components\";\n\ninterface Props {\n request: LaunchableRequest;\n iconPosition?: \"left\" | \"right\";\n hasUnknownLaunchDate?: boolean;\n useCompactText?: boolean;\n}\n\nexport default function Status({\n request,\n iconPosition = \"left\",\n hasUnknownLaunchDate = false,\n useCompactText = false,\n}: Props) {\n const status = getLaunchableRequestStatus(request);\n\n let text = \"\";\n let color = \"\";\n let background = \"\";\n let iconName: IconName;\n\n switch (status) {\n case LaunchableRequestStatus.ACTIVE:\n if (request.requestable.deadline) {\n text = t(\"pages.request_for_startups_page.status.active\", {\n date: formatDateToEastern(\n request.requestable.deadline,\n \"MMM D\" +\n (new Date(request.requestable.deadline).getFullYear() !== new Date().getFullYear()\n ? \", yyyy\"\n : \"\")\n ),\n });\n } else {\n text = t(\"pages.request_for_startups_page.status.open\");\n }\n color = COLORS.GREEN_800;\n background = COLORS.GREEN_200;\n iconName = \"Accelerator\";\n break;\n case LaunchableRequestStatus.COMING_SOON:\n text = hasUnknownLaunchDate\n ? \"Coming soon\"\n : t(\"pages.request_for_startups_page.status.coming_soon\", {\n date: formatDateToEastern(\n request.requestable.launch_date!,\n \"MMM D\" +\n (new Date(request.requestable.launch_date!).getFullYear() !==\n new Date().getFullYear()\n ? \", yyyy\"\n : \"\")\n ),\n });\n color = COLORS.ORANGE;\n background = COLORS.ORANGE_300;\n iconName = \"Accelerator Complete\";\n break;\n default:\n // Handle no date case\n if (!request.requestable.deadline && !request.requestable.launch_date) {\n if (request.enabled) {\n text = \"Applications open\";\n color = COLORS.GREEN_800;\n background = COLORS.GREEN_200;\n iconName = \"Accelerator\";\n } else {\n // Unknown status\n text = \"\";\n }\n } else {\n text = t(\"pages.request_for_startups_page.status.closed\");\n color = COLORS.NEUTRAL_500;\n background = COLORS.NEUTRAL_250;\n iconName = \"Accelerator Complete\";\n }\n }\n\n \n let statusText = text;\n if (useCompactText) {\n if (statusText.toLowerCase().includes(\"applications closed\")) {\n statusText = \"Closed\";\n } else if (statusText.toLowerCase().includes(\"applications open\")) {\n statusText = \"Open\";\n }\n }\n\n return (\n <Container iconPosition={iconPosition} color={color}>\n {Number(iconName?.length) > 0 && (\n <IconContainer background={background}>\n <Icon name={iconName} size=\"sm\" color={color} />\n </IconContainer>\n )}\n {statusText}\n </Container>\n );\n}\n\nconst Container = styled.div`\n display: flex;\n flex-direction: ${({ iconPosition }) => (iconPosition === \"left\" ? \"row\" : \"row-reverse\")};\n align-items: center;\n gap: 8px;\n color: ${({ color }) => color};\n ${FONTS.SEMIBOLD_3}\n white-space: nowrap;\n @media (max-width: ${WINDOW_DIMENSIONS.MOBILE_MEDIA_QUERY}px) {\n text-align: left;\n float: left;\n }\n\n`;\n\nconst IconContainer = styled.div`\n display: flex;\n justify-content: center;\n align-items: center;\n\n width: 26px;\n height: 26px;\n\n border-radius: 100%;\n background: ${({ background }) => background};\n`;\n"],"names":["useIsVisible","ref","_useState2","_slicedToArray","useState","isIntersecting","setIsIntersecting","observer","useMemo","IntersectionObserver","entry","useEffect","current","observe","disconnect","getRfsProposal","async","api","get","proposalSlug","data","getRfsProposalForProposalForm","proposal","updateRfsProposal","proposalId","put","getDraftRfsProposal","requestSlug","saveDraftRfsProposal","post","getMarketplaceRequestForStartups","searchFilter","commercialApplicationsFilter","params","options","search_filter","commercial_applications_filter","requests","getMarketplaceRequestForStartupsFilterOptions","getCommercialApplicationPageRequestForStartups","commercialApplicationId","pageNum","request_for_startups_path","commercial_application_id","page_num","getRequestForStartup","response","slug","redirect","window","location","href","request","NotifyModal","isOpen","onClose","_useFollowRequest","useFollowRequest","id","handleFollowRequest","isUserFollowing","_jsx","BlankModal","width","backgroundMode","children","_jsxs","ModalContent","Icon","name","margin","Header","SubHeader","requestable","launch_date","unknown_launch_date","title","dayjs","format","SuccessText","color","COLORS","GREEN","size","Button","iconName","onClick","styled","div","h3","BLACK","FONTS","HEADING_3_SEMIBOLD","h6","NEUTRAL_500","REGULAR_2","i18nPrefix","DataPoints","isMobile","useSelector","state","dataPoints","participation_type","push","key","content","t","max_accepted","count","duration_in_weeks","i18nKey","funding_amount_usd","i18n","numberToCurrency","precision","alumni_count","equity_percentage","equity","misc_time","misc_building","misc_person","misc_rocket","misc_dollar","forEach","Container","length","map","DataPoint","NEUTRAL_400","BLUE_LIGHT_600","WINDOW_DIMENSIONS","TABLET_MEDIA_QUERY","MOBILE_MEDIA_QUERY","NEUTRAL_200","BLUE_900","MEDIUM_2","rfsSubmitUrl","Cta","onShare","currentUser","profiles","history","useHistory","dispatch","useDispatch","draft","useQuery","queryKey","queryFn","enabled","Boolean","role","UserRole","SCIENTIST","hasDraft","status","getLaunchableRequestStatus","canApply","UNIVERSITY_ADMIN","LaunchableRequestStatus","ACTIVE","IN_EXTENSION","handleSubmitClick","track","SegmentEventName","Click","ui_component","request_slug","is_logged_in","submitUrl","setPrevUrlCookie","toggleLoginModal","open","handleNotify","text","buttons","handleShareClick","pathname","variant","COMING_SOON","CLOSED","unshift","FollowingConfirmation","iconPosition","external_url","target","rel","disabled","SPONSOR","TopContainer","$showBorder","FEATURE_FLAGS","RELEVANT_NOT_RELEVANT_BUTTONS","StatusContainer","Status","RefineRecommendations","isComplete","NEUTRAL_250","STYLES","SHADOW_B","HEADING_4_SEMIBOLD","TABLET_LANDSCAPE_MEDIA_QUERY","RequestForStartupPage","isShareModalOpen","setIsShareModalOpen","_useState4","isCommenting","setIsCommenting","isTabletLandscape","useParams","_useQuery","onError","toastErrorHandler","isLoading","document","backgroundRef","useRef","lookingForRef","benefitsRef","whoWeAreRef","qaRef","View","request_id","requestable_id","requestable_type","react_component","useLayoutEffect","animationFrameId","checkAndScroll","hash","scrollIntoView","behavior","requestAnimationFrame","cancelAnimationFrame","Loader","inline","trlRange","trl_range","getArrayFromRubyRange","_Fragment","InviteModal","requestId","closeModal","trackAndToastHandler","toast","success","inviteMessage","inviteUrl","modalHeader","modalSubheader","inviteSubject","first_name","last_name","typeOfInvite","accessible_before_launch_date","marketplacePath","PageContainer","hasPaddingTop","maxWidth","Breadcrumb","TextLink","to","font","BannerContainer","RequestPageBanner","Columns","Left","Sidebar","Center","Summary","summary","Section","withNewlines","Heading","renderMarkdownTextWithDangerousHTML","background","Subheading","ListHeading","renderMarkdownText","solutions_of_interest","first","eligible_country_names","style","marginBottom","PlainList","country","locations","join","eligible_startup_stages","stage","TRLsContainer","Tag","TrlTagContent","Tooltip","tooltipWidth","TRLs","Benefits","partnershipModels","fundingBenefits","funding_benefits","nonMonetaryBenefits","non_monetary_benefits","withMarginTop","AboutCompany","customText","who_we_are","undefined","lineHeight","RequestDiscussion","Right","display_location","areas_of_expertise","AreasOfExpertise","slice","MAX_KEYWORD_DISPLAY_COUNT","area","theme","TagTooltip","tags","RequestFAQs","HEADING_5_SEMIBOLD","h2","HEADING_3_REGULAR","section","REGULAR_1","h1","SEMIBOLD_1","span","ul","focusedKey","setFocusedKey","isBackgroundVisible","isLookingForVisible","isBenefitsVisible","isWhoWeAreVisible","isQaVisible","BACKGROUND","LOOKING_FOR","BENEFITS","WHO_WE_ARE","QA","links","List","Item","isFocused","setTimeout","li","HALO_BLUE","hasUnknownLaunchDate","useCompactText","deadline","date","formatDateToEastern","Date","getFullYear","GREEN_800","GREEN_200","ORANGE","ORANGE_300","statusText","toLowerCase","includes","Number","IconContainer","SEMIBOLD_3"],"sourceRoot":""}