{"version":3,"file":"js/2556-995ec9bfc7e9d7427f68.chunk.js","mappings":"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","sources":["webpack://halo/./app/client/src/components/Cards/BaseCardWide.tsx","webpack://halo/./app/client/src/components/Cards/RequestForStartupCardWide.tsx","webpack://halo/./app/client/src/components/CopyLink/CopyLink.tsx","webpack://halo/./app/client/src/components/CopyLink/index.js","webpack://halo/./app/client/src/requests/requestForStartups.ts","webpack://halo/./app/client/src/components/FollowButton/FollowButton.tsx","webpack://halo/./app/client/src/components/FollowButton/index.js","webpack://halo/./app/client/src/views/CommercialApplicationPage/ShareResearchModal.jsx","webpack://halo/./app/client/src/views/CommercialApplicationPage/CommercialApplicationPageCtas.tsx","webpack://halo/./app/client/src/requests/commercialApplications.ts","webpack://halo/./app/client/src/views/CommercialApplicationPage/CommercialApplicationPage.tsx","webpack://halo/./app/client/src/views/RequestForStartupPage/Status.tsx"],"sourcesContent":["import { CompanyAvatar, Tag, XMoreWrapper } from \"@components/library\";\nimport { COLORS, FONTS, STYLES, WINDOW_DIMENSIONS } from \"@constants\";\nimport { RootState } from \"@redux/store\";\nimport { ReactNode, useState } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { Link } from \"react-router-dom\";\nimport styled from \"styled-components\";\n\ninterface Props {\n to: string | Record<string, unknown>;\n isExternalLink?: boolean;\n openInNewTab?: boolean;\n title: string | ReactNode;\n subtitle: string | ReactNode;\n imageUrl: string | null;\n cornerContent?: ReactNode;\n tags: string[];\n buttons?: ReactNode;\n \"data-testid\"?: string;\n}\n\nexport default function BaseCardWide({\n to,\n isExternalLink = false,\n openInNewTab = false,\n title,\n subtitle,\n imageUrl,\n cornerContent,\n tags,\n buttons,\n \"data-testid\": dataTestId,\n}: Props) {\n const [areButtonsHovered, setAreButtonsHovered] = useState(false);\n const isMobile = useSelector((state: RootState) => state.window.isMobile);\n const windowWidth = useSelector((state: RootState) => state.window.width);\n const isCompactLayout = windowWidth <= WINDOW_DIMENSIONS.TABLET_LANDSCAPE;\n\n return (\n <CardLink\n to={!isExternalLink && !areButtonsHovered && !isMobile && to}\n href={isExternalLink && to}\n as={isExternalLink ? \"a\" : undefined}\n target={isExternalLink && openInNewTab ? \"_blank\" : undefined}\n rel={isExternalLink && openInNewTab ? \"noopener noreferrer\" : undefined}\n >\n <Container data-testid={dataTestId}>\n <Top onMouseOver={() => setAreButtonsHovered(false)}>\n <Content>\n <AvatarWrapper>\n <CompanyAvatar imageUrl={imageUrl} size={isCompactLayout ? \"md\" : \"lg\"} />\n </AvatarWrapper>\n <Text>\n <TitleGroup>\n <Title>{title}</Title>\n <Subtitle>{subtitle}</Subtitle>\n </TitleGroup>\n <CornerContent shouldWrap={isCompactLayout}>{cornerContent}</CornerContent>\n </Text>\n </Content>\n </Top>\n <Bottom>\n <Tags onMouseOver={() => setAreButtonsHovered(false)} data-testid=\"keywords\">\n <XMoreWrapper maxLines={isCompactLayout ? 2 : 1} maxTags={5}>\n {tags.map((tag) => (\n <Tag key={`${title}-tag-${tag}`} content={tag} />\n ))}\n </XMoreWrapper>\n </Tags>\n <Buttons\n onMouseEnter={() => setAreButtonsHovered(true)}\n onMouseLeave={() => setAreButtonsHovered(false)}\n data-testid=\"buttons\"\n >\n {buttons}\n </Buttons>\n </Bottom>\n </Container>\n </CardLink>\n );\n}\n\nconst CardLink = styled(Link)`\n display: block;\n :visited,\n :link {\n color: ${COLORS.BLACK};\n text-decoration: none;\n }\n`;\n\nconst Container = styled.div`\n border: 1px solid ${COLORS.NEUTRAL_250};\n border-radius: 8px;\n box-shadow: ${STYLES.SHADOW_CARD};\n min-width: 0;\n transition: box-shadow 0.2s ease;\n &:hover {\n box-shadow: ${STYLES.SHADOW_A};\n }\n @media (max-width: ${WINDOW_DIMENSIONS.TABLET_LANDSCAPE}px) {\n &:hover {\n box-shadow: ${STYLES.SHADOW_CARD};\n }\n }\n`;\n\nconst Top = styled.div`\n display: flex;\n padding: 24px;\n gap: 16px;\n margin-bottom: 32px;\n @media (max-width: ${WINDOW_DIMENSIONS.TABLET_LANDSCAPE}px) {\n padding: 16px;\n }\n`;\n\nconst Content = styled.div`\n display: flex;\n gap: 32px;\n align-items: flex-start;\n flex: 1;\n padding: 8px 8px;\n min-width: 0;\n @media (max-width: ${WINDOW_DIMENSIONS.TABLET_LANDSCAPE}px) {\n gap: 16px;\n }\n`;\n\nconst AvatarWrapper = styled.div`\n flex-shrink: 0;\n width: 50px;\n height: 50px;\n display: flex;\n align-items: center;\n min-width: 50px;\n @media (max-width: ${WINDOW_DIMENSIONS.TABLET_LANDSCAPE}px) {\n width: 40px;\n height: 40px;\n min-width: 40px;\n }\n`;\n\nconst Text = styled.div`\n min-width: 0;\n flex: 1;\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n gap: 8px;\n @media (min-width: ${WINDOW_DIMENSIONS.TABLET_LANDSCAPE + 1}px) {\n min-width: 200px;\n }\n @media (max-width: ${WINDOW_DIMENSIONS.TABLET_LANDSCAPE}px) {\n flex-wrap: wrap;\n align-items: flex-start;\n }\n`;\n\nconst TitleGroup = styled.div`\n display: flex;\n flex-direction: column;\n min-width: 0;\n flex: 1;\n @media (max-width: ${WINDOW_DIMENSIONS.TABLET_LANDSCAPE}px) {\n min-width: 100px;\n flex: 1 1 100px;\n align-items: flex-start;\n\n }\n`;\n\nconst Title = styled.div`\n display: flex;\n align-items: center;\n gap: 6px;\n flex-wrap: nowrap;\n ${FONTS.HEADING_5_SEMIBOLD};\n overflow: hidden;\n margin-bottom: 8px;\n line-height: 1.4;\n white-space: normal;\n > span {\n overflow: hidden;\n text-overflow: ellipsis;\n min-width: 0;\n }\n > svg, > div {\n flex-shrink: 0;\n }\n @media (max-width: ${WINDOW_DIMENSIONS.TABLET_LANDSCAPE}px) {\n width: 100%;\n }\n @media (max-width: ${WINDOW_DIMENSIONS.TABLET}px) {\n ${FONTS.SEMIBOLD_1};\n line-height: 1.2;\n width: 100%;\n }\n`;\n\nconst Subtitle = styled.div`\n display: flex;\n align-items: center;\n text-overflow: ellipsis;\n ${FONTS.SEMIBOLD_3};\n color: ${COLORS.NEUTRAL_500};\n margin-bottom: 0;\n @media (max-width: ${WINDOW_DIMENSIONS.TABLET_LANDSCAPE}px) {\n width: 100%;\n justify-content: flex-start;\n }\n`;\n\nconst CornerContent = styled.div`\n height: fit-content;\n flex-shrink: 0;\n white-space: nowrap; \n font-size: 14px;\n color: ${COLORS.NEUTRAL_500};\n @media (max-width: ${WINDOW_DIMENSIONS.TABLET_LANDSCAPE}px) {\n flex: 0 0 max-content;\n margin-top: 8px;\n align-self: flex-start;\n text-align: left;\n width: 100%;\n }\n`;\n\nconst Bottom = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px 32px;\n border-top: 1px solid ${COLORS.NEUTRAL_200};\n gap: 24px;\n @media (max-width: ${WINDOW_DIMENSIONS.TABLET_LANDSCAPE}px) {\n flex-direction: column;\n align-items: flex-start;\n padding: 16px 24px;\n gap: 16px;\n }\n`;\n\nconst Tags = styled.div`\n flex: 1;\n min-width: 0;\n @media (max-width: ${WINDOW_DIMENSIONS.TABLET_LANDSCAPE}px) {\n order: 1;\n width: 100%;\n > div {\n justify-content: flex-start;\n > div {\n justify-content: flex-start;\n }\n }\n }\n`;\n\nconst Buttons = styled.div`\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n flex-shrink: 0;\n @media (min-width: 961px) {\n margin-left: auto;\n }\n @media (max-width: ${WINDOW_DIMENSIONS.TABLET_LANDSCAPE}px) {\n order: 3;\n display: flex;\n flex-direction: row;\n flex-wrap: nowrap;\n width: 100%;\n margin-top: 8px;\n justify-content: flex-start;\n > * {\n flex: 0 0 auto;\n white-space: nowrap;\n }\n }\n @media (max-width: ${WINDOW_DIMENSIONS.MOBILE}px) {\n flex-direction: column;\n align-items: flex-start;\n width: 100%;\n > * {\n width: auto;\n }\n }\n`;","import { Button, Icon } from \"@components/library\";\nimport { COLORS, FONTS } from \"@constants\";\nimport useFollowRequest from \"@hooks/useFollowRequest\";\nimport { RootState } from \"@redux/store\";\nimport { SegmentEventName } from \"@tsTypes/__generated__/enums\";\nimport BaseCardWide from \"./BaseCardWide\";\n// @ts-ignore\nimport { CompanyVerificationStatus } from \"@tsTypes/companies.js.erb\";\nimport { RequestForStartupForCard } from \"@tsTypes/request_for_startups\";\nimport { LaunchableRequestStatus } from \"@tsTypes/requests\";\nimport { track } from \"@utils/appUtils\";\nimport { getLaunchableRequestStatus, requestPageUrlPath } from \"@utils/requestUtils\";\nimport { useSelector } from \"react-redux\";\nimport Status from \"src/views/RequestForStartupPage/Status\";\nimport styled from \"styled-components\";\nimport { WINDOW_DIMENSIONS } from \"@constants\";\n\ninterface Props {\n request: RequestForStartupForCard;\n}\n\nexport default function RequestForStartupCardWide({ request }: Props) {\n const currentUser = useSelector((state: RootState) => state.profiles.currentUser);\n const windowWidth = useSelector((state: RootState) => state.window.width);\n const isCompactLayout = windowWidth <= WINDOW_DIMENSIONS.TABLET_LANDSCAPE;\n\n const { handleFollowRequest, isUserFollowing } = useFollowRequest(request.id);\n\n const handleNotify = (e) => {\n e.preventDefault();\n\n if (request.requestable.has_page) {\n track(SegmentEventName.Click, {\n ui_component: \"Notify Me Button\",\n react_component: \"RequestForStartupCardWide\",\n request_slug: request.slug,\n });\n } else {\n track(SegmentEventName.Click, {\n ui_component: \"Notify Me Button - Offsite\",\n react_component: \"RequestForStartupCardWide\",\n logged_in: Boolean(currentUser.id),\n });\n }\n\n handleFollowRequest();\n };\n\n const { has_page, external_url, parent_program } = request.requestable;\n\n const status = getLaunchableRequestStatus(request as any);\n\n let button = (\n <Button\n size=\"sm\"\n type=\"button\"\n variant=\"primary\"\n to={requestPageUrlPath(request)}\n iconName=\"Easy Apply\"\n iconPosition=\"left\"\n onClick={() =>\n track(SegmentEventName.Click, {\n ui_component: \"Easy Apply Button\",\n react_component: \"RequestForStartupCardWide\",\n request_slug: request.slug,\n is_external_link: !request.requestable.has_page,\n })\n }\n >\n Easy apply\n </Button>\n );\n if (external_url || !has_page) {\n button = (\n <Button\n size=\"sm\"\n type=\"button\"\n variant=\"primary\"\n to={has_page ? requestPageUrlPath(request) : external_url!}\n isExternalLink={!has_page}\n openInNewTab={!has_page}\n iconName={!has_page ? \"Open in a new tab\" : undefined}\n onClick={() =>\n track(SegmentEventName.Click, {\n ui_component: \"Learn More Button\",\n react_component: \"RequestForStartupCardWide\",\n request_slug: request.slug,\n is_external_link: !request.requestable.has_page,\n })\n }\n >\n Learn more\n </Button>\n );\n }\n if (\n status === LaunchableRequestStatus.COMING_SOON ||\n (status === LaunchableRequestStatus.CLOSED && request.requestable.deadline) ||\n status === LaunchableRequestStatus.IN_EXTENSION\n ) {\n if (isUserFollowing) {\n button = (\n <OptedIn>\n <Icon name=\"Success\" color={COLORS.GREEN} size=\"sm\" />\n You'll be notified\n </OptedIn>\n );\n } else {\n button = (\n <Button size=\"sm\" type=\"button\" variant=\"primary\" iconName=\"Bell\" onClick={handleNotify}>\n Notify me\n </Button>\n );\n }\n }\n\n return (\n <span\n onClick={() =>\n track(SegmentEventName.Click, {\n ui_component: \"Request for Startup Card\",\n request_slug: request.slug,\n })\n }\n >\n <BaseCardWide\n to={has_page ? requestPageUrlPath(request) : external_url!}\n isExternalLink={!has_page}\n openInNewTab={!has_page}\n title={`${parent_program ? `${parent_program}: ` : \"\"}${request.title}`}\n subtitle={\n <SubtitleWrapper>\n <SubtitleText>\n {\"private_alias\" in request.company\n ? request.company.private_alias\n : request.company.company_name}\n </SubtitleText>\n {request.company.verification_status === CompanyVerificationStatus.VERIFIED && (\n <StyledIcon name=\"Verified\" size=\"sm\" color={COLORS.HALO_BLUE} />\n )}\n </SubtitleWrapper>\n }\n imageUrl={\"avatar\" in request.company ? request.company.avatar.url : null}\n cornerContent={\n <Status\n request={request as any}\n iconPosition=\"right\"\n hasUnknownLaunchDate={request.requestable.unknown_launch_date}\n useCompactText={windowWidth <= WINDOW_DIMENSIONS.TABLET}\n />\n }\n tags={request.areas_of_expertise}\n buttons={button}\n />\n </span>\n );\n}\n\nconst OptedIn = styled.div`\n display: flex;\n align-items: center;\n gap: 4px;\n height: 36px;\n color: ${COLORS.GREEN};\n ${FONTS.REGULAR_2}\n`;\n\nconst SubtitleWrapper = styled.div`\n display: inline-flex;\n flex-wrap: nowrap;\n align-items: center;\n gap: 4px;\n`;\n\nconst SubtitleText = styled.span`\n width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n display: -webkit-box;\n white-space: normal;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 1;\n padding-right: .5rem;\n`;\n\nconst StyledIcon = styled(Icon)`\n flex-shrink: 0;\n`;\n","import toast from \"@components/Toast\";\nimport { Button } from \"@components/library\";\nimport { RootState } from \"@redux/store\";\nimport { copyLinkToClipboard } from \"@utils/textUtils\";\nimport React, { memo } from \"react\";\nimport { useSelector } from \"react-redux\";\n\ninterface CopyLinkProps {\n link?: string;\n}\n\nconst CopyLink: React.FC<CopyLinkProps> = ({ link }) => {\n const currentUser = useSelector((state: RootState) => state.profiles.currentUser);\n\n const handleCopy = async () => {\n try {\n await copyLinkToClipboard(currentUser?.id, link);\n toast.success(\"Copied!\");\n } catch (error) {\n toast.error(\"Failed to copy link\");\n }\n };\n\n return (\n <Button type=\"button\" iconName=\"Copy\" variant=\"secondary\" width=\"100%\" onClick={handleCopy}>\n Copy Link\n </Button>\n );\n};\n\nexport default memo(CopyLink);\n","import CopyLink from \"./CopyLink\";\n\nexport default CopyLink;\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 { Button } from \"@components/library\";\nimport { useEffect, useState } from \"react\";\n\ninterface Props {\n disabled?: boolean;\n onClick: () => void;\n isFollowing: boolean;\n variant?: \"primary\" | \"secondary\";\n margin?: string | 0;\n companyName?: string;\n size?: \"sm\" | \"md\";\n}\n\nconst FollowButton = ({\n disabled,\n onClick,\n isFollowing,\n variant = \"primary\",\n margin = 0,\n companyName,\n size = \"md\",\n}: Props) => {\n const [buttonText, setButtonText] = useState(\"Follow\");\n\n useEffect(() => {\n setButtonText(isFollowing ? \"Following\" : \"Follow\");\n }, [isFollowing]);\n\n return (\n <Button\n disabled={disabled}\n variant={variant}\n onClick={onClick}\n onMouseEnter={() => isFollowing && setButtonText(\"Unfollow\")}\n onMouseLeave={() => setButtonText(isFollowing ? \"Following\" : \"Follow\")}\n width=\"100%\"\n margin={margin}\n size={size}\n >\n {buttonText}\n {companyName && ` ${companyName}`}\n </Button>\n );\n};\n\nexport default FollowButton;\n","import FollowButton from \"./FollowButton\";\n\nexport default FollowButton;\n","import { Button } from \"@components/library\";\nimport toast from \"@components/Toast\";\nimport { COLORS, JS_FONTS } from \"@constants\";\nimport { authenticityToken } from \"@utils/requests\";\nimport { css, StyleSheet } from \"aphrodite\";\nimport axios from \"axios\";\nimport PropTypes from \"prop-types\";\nimport { PureComponent } from \"react\";\nimport { Modal } from \"semantic-ui-react\";\n\nconst styles = StyleSheet.create({\n ShareResearchModal_modal: {\n width: \"380px\",\n },\n ShareResearchModal_content: {\n padding: \"2em 1.5em\",\n },\n ShareResearchModal_modalTextArea: {\n width: \"100%\",\n margin: \"auto\",\n padding: \"10px\",\n ...JS_FONTS.REGULAR_2,\n },\n ShareResearchModal_modalInput: {\n width: \"100%\",\n margin: \"0px auto 5px\",\n padding: \"16px\",\n borderStyle: \"solid\",\n borderWidth: \"1px\",\n ...JS_FONTS.REGULAR_3,\n },\n ShareResearchModal_modalButtonHolder: {\n width: \"100%\",\n display: \"inline-block\",\n textAlign: \"right\",\n marginTop: \"24px\",\n },\n ShareResearchModal_header: {\n ...JS_FONTS.HEADING_4_SEMIBOLD,\n color: COLORS.BLACK,\n textAlign: \"center\",\n margin: \"0 auto 25px\",\n },\n ShareResearchModal_smallText: {\n ...JS_FONTS.REGULAR_3,\n margin: \"6px auto 12px\",\n },\n ShareResearchModal_messageToggle: {\n paddingLeft: \"9px\",\n textDecoration: \"underline\",\n cursor: \"pointer\",\n color: COLORS.HALO_BLUE,\n },\n});\n\nconst initialState = {\n sending: false,\n message: \"\",\n toEmails: \"\",\n isExpanded: false,\n};\n\nclass ShareResearchModal extends PureComponent {\n constructor(props) {\n super(props);\n this.state = initialState;\n }\n\n componentDidUpdate(prevProps) {\n if (prevProps.open !== this.props.open) {\n this.setState(initialState);\n }\n }\n\n handleSubmitMessage = async (e) => {\n const { closeShareResearchModal, slug } = this.props;\n\n e.preventDefault();\n\n const { message, isExpanded, toEmails } = this.state;\n\n this.setState({\n sending: true,\n });\n\n const data = {\n message: isExpanded && message.length ? message : null,\n commercial_application: slug,\n email: toEmails,\n };\n try {\n const responseJson = await axios.post(\"/notifications/share_commercial_application\", data, {\n headers: {\n Accept: \"application/json\",\n \"X-CSRF-Token\": authenticityToken(),\n },\n });\n if (!responseJson.data.success) {\n this.setState({\n sending: false,\n });\n } else {\n this.setState({\n message: \"\",\n sending: false,\n });\n closeShareResearchModal();\n toast.success(\"Your invite has been sent!\");\n }\n } catch (err) {\n this.setState({ sending: false });\n }\n };\n\n handleChange = (e, attr) => {\n this.setState({ [attr]: e.target.value });\n };\n\n render() {\n const { open, requestForProposal, closeShareResearchModal, showResearchName } = this.props;\n\n const { message, toEmails, isExpanded, sending } = this.state;\n\n return (\n <Modal\n open={open}\n onClose={closeShareResearchModal}\n size=\"tiny\"\n className={`${css(styles.ShareResearchModal_modal)} scrolling`}\n >\n <Modal.Content className={`${css(styles.ShareResearchModal_content)} scrolling`}>\n <div className={css(styles.ShareResearchModal_header)}>\n Share opportunities in {this.props.humanFriendlyResearchName.toLowerCase()}\n </div>\n <div>\n <input\n type=\"text\"\n className={css(styles.ShareResearchModal_modalInput)}\n placeholder=\"Enter emails separated by commas\"\n value={toEmails}\n onChange={(e) => this.handleChange(e, \"toEmails\")}\n />\n </div>\n <div className={css(styles.ShareResearchModal_smallText)}>\n {isExpanded ? (\n \"Remove custom message\"\n ) : (\n <>\n <span>(Optional)</span>\n <a\n className={css(styles.ShareResearchModal_messageToggle)}\n onClick={() => {\n this.setState({ isExpanded: !this.state.isExpanded });\n }}\n >\n Add message\n </a>\n </>\n )}\n </div>\n {isExpanded && (\n <div>\n <textarea\n className={css(styles.ShareResearchModal_modalTextArea)}\n placeholder=\"Enter message here\"\n value={message}\n rows={5}\n onChange={(e) => this.handleChange(e, \"message\")}\n />\n </div>\n )}\n <div className={css(styles.ShareResearchModal_modalButtonHolder)}>\n <Button\n type=\"button\"\n width=\"100%\"\n disabled={sending || !this.state.toEmails.length}\n onClick={this.handleSubmitMessage}\n >\n Send\n </Button>\n </div>\n </Modal.Content>\n </Modal>\n );\n }\n}\n\nShareResearchModal.propTypes = {\n humanFriendlyResearchName: PropTypes.string,\n open: PropTypes.bool,\n closeShareResearchModal: PropTypes.func,\n};\n\nexport default ShareResearchModal;\n","import CopyLink from \"@components/CopyLink\";\nimport FollowButton from \"@components/FollowButton\";\nimport { Button } from \"@components/library\";\nimport toast from \"@components/Toast\";\nimport { COLORS, STYLES } from \"@constants\";\nimport { setCurrentUser, toggleLoginModal } from \"@redux/actions/profileActions\";\nimport { RootState } from \"@redux/store\";\nimport { toggleFollowCommercialApplication } from \"@requests/commercialApplications\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport { ShowCommercialApplication } from \"@tsTypes/index\";\nimport { t } from \"@utils/i18n\";\nimport { useState } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport styled from \"styled-components\";\nimport ShareResearchModal from \"./ShareResearchModal\";\n\ninterface Props {\n commercialApplication: ShowCommercialApplication;\n}\n\nconst CommercialApplicationPageCtas = ({ commercialApplication: { id, name, slug } }: Props) => {\n const [isShareModalOpen, setIsShareModalOpen] = useState(false);\n\n const currentUser = useSelector((state: RootState) => state.profiles.currentUser);\n\n const dispatch = useDispatch();\n\n const followedIds = currentUser.followed_commercial_application_ids;\n const isFollowing = followedIds?.includes(id);\n\n const { mutate: toggleFollow, isLoading: isLoadingToggleFollow } = useMutation({\n mutationFn: () => toggleFollowCommercialApplication(id),\n onSuccess: () => {\n dispatch(\n setCurrentUser({\n ...currentUser,\n followed_commercial_application_ids: isFollowing\n ? followedIds.filter((followedId) => followedId !== id)\n : [...followedIds, id],\n })\n );\n\n toast.success(`You are ${isFollowing ? \"no longer\" : \"now\"} following ${name}`);\n },\n });\n\n const requireLoggedIn = (callback: Function) => {\n if (!currentUser.id) {\n dispatch(\n toggleLoginModal({\n open: true,\n })\n );\n return;\n }\n\n callback();\n };\n\n return (\n <>\n <ShareResearchModal\n humanFriendlyResearchName={name}\n slug={slug}\n open={isShareModalOpen}\n closeShareResearchModal={() => setIsShareModalOpen(false)}\n />\n <Container>\n <FollowButton\n onClick={() => requireLoggedIn(toggleFollow)}\n disabled={isLoadingToggleFollow}\n isFollowing={isFollowing}\n />\n <Button\n onClick={() => requireLoggedIn(() => setIsShareModalOpen(true))}\n variant=\"secondary\"\n iconName=\"Share\"\n >\n {t(\"pages.commercial_application_page.ctas.share\")}\n </Button>\n <CopyLink />\n </Container>\n </>\n );\n};\n\nexport default CommercialApplicationPageCtas;\n\nconst Container = styled.div`\n display: flex;\n flex-direction: column;\n gap: 10px;\n min-width: 280px;\n height: fit-content;\n margin-bottom: 16px;\n padding: 24px;\n border-radius: 8px;\n border: 1px solid ${COLORS.NEUTRAL_250};\n box-shadow: ${STYLES.SHADOW_B};\n`;\n","import {\n commercial_application_path,\n toggle_follow_commercial_applications_path,\n} from \"@routes/routes\";\nimport { CommercialApplicationsShowResponse } from \"@tsTypes/index\";\nimport { default as api } from \"./request\";\n\nexport const getCommercialApplication = async (\n slug: string\n): Promise<CommercialApplicationsShowResponse> => {\n const response = await api.get(commercial_application_path(slug));\n return response.data;\n};\n\nexport const toggleFollowCommercialApplication = async (\n commercialApplicationId: number\n): Promise<CommercialApplicationsShowResponse> => {\n const response = await api.post(\n toggle_follow_commercial_applications_path({\n commercial_application_id: commercialApplicationId,\n })\n );\n return response.data;\n};\n","import RequestForStartupCardWide from \"@components/Cards/RequestForStartupCardWide\";\nimport { Icon, PageContainer, Pagination, Tabs, TextLink } from \"@components/library\";\nimport RfpCard from \"@components/RfpCard/RfpCard\";\nimport toast from \"@components/Toast/Toast\";\nimport { COLORS, FONTS, WINDOW_DIMENSIONS } from \"@constants\";\nimport { RootState } from \"@redux/store\";\nimport { getCommercialApplication } from \"@requests/commercialApplications\";\nimport { getCommercialApplicationPageRequestForStartups } from \"@requests/requestForStartups\";\nimport { getCommercialApplicationPageRequests } from \"@requests/requests\";\nimport { marketplacePath } from \"@routes/utils\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport { t } from \"@utils/i18n\";\nimport { toastErrorHandler } from \"@utils/requests\";\nimport { sortMarketplaceRequests } from \"@utils/requestUtils\";\nimport { useEffect, useState } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { useHistory, useParams } from \"react-router-dom\";\nimport { Loader } from \"semantic-ui-react\";\nimport styled from \"styled-components\";\nimport { SortBy } from \"../Marketplace/RespondToRequests\";\nimport CommercialApplicationPageCtas from \"./CommercialApplicationPageCtas\";\n\ntype Tab = \"REQUESTS\" | \"STARTUP_PROGRAMS\";\n\nconst NUM_CARDS_PER_PAGE = 15;\n\nconst CommercialApplicationPage = () => {\n const [activeTab, setActiveTab] = useState<Tab>(\"REQUESTS\");\n const [pageNum, setPageNum] = useState(1);\n\n const isMobile = useSelector((state: RootState) => state.window.isMobile);\n\n const { commercial_application } = useParams();\n\n const history = useHistory();\n\n const { data: commercialApplicationData } = useQuery({\n queryKey: [\"getCommercialApplication\", commercial_application],\n queryFn: () => getCommercialApplication(commercial_application),\n onError: toastErrorHandler,\n });\n const commercialApplication = commercialApplicationData?.commercial_application;\n\n const { data: requestsData } = useQuery({\n queryKey: [\"getCommercialApplicationPageRequests\", commercial_application, pageNum],\n queryFn: () =>\n getCommercialApplicationPageRequests(\n commercialApplicationData!.commercial_application.id,\n pageNum\n ),\n enabled:\n Boolean(commercialApplicationData?.commercial_application.id) && activeTab === \"REQUESTS\",\n onError: toastErrorHandler,\n });\n\n const { data: startupProgramsData } = useQuery({\n queryKey: [\"getCommercialApplicationPageRequestForStartups\", commercial_application, pageNum],\n queryFn: () =>\n getCommercialApplicationPageRequestForStartups(\n commercialApplicationData!.commercial_application.id,\n pageNum\n ),\n enabled:\n Boolean(commercialApplicationData?.commercial_application.id) &&\n activeTab === \"STARTUP_PROGRAMS\",\n onError: toastErrorHandler,\n });\n\n useEffect(() => {\n setPageNum(1);\n }, [activeTab]);\n\n if (\n commercialApplicationData &&\n commercialApplication &&\n commercialApplicationData.respond_to_requests_count +\n commercialApplicationData.startup_programs_count ===\n 0\n ) {\n toast.error(`No requests found for ${commercialApplication.name.toLowerCase()}.`);\n history.push(marketplacePath(\"requests\"));\n }\n\n const tabs: { key: Tab; label: string }[] = [];\n if (Number(commercialApplicationData?.respond_to_requests_count) > 0) {\n tabs.push({\n key: \"REQUESTS\",\n label: t(\"pages.commercial_application_page.tabs.requests\"),\n });\n }\n if (Number(commercialApplicationData?.startup_programs_count) > 0) {\n tabs.push({\n key: \"STARTUP_PROGRAMS\",\n label: t(\"pages.commercial_application_page.tabs.startup_programs\"),\n });\n }\n\n if (requestsData) {\n sortMarketplaceRequests({\n requests: requestsData.requests,\n scores: {},\n sort: SortBy.RELEVANCE,\n });\n }\n\n return (\n <PageContainer hasPaddingTop={false}>\n <Breadcrumb>\n <TextLink to={marketplacePath(\"requests\")} font={FONTS.MEDIUM_2}>\n <Icon name=\"Chevron Left\" margin=\"0 4px 0 -8px\" />\n {t(\"pages.commercial_application_page.breadcrumb\")}\n </TextLink>\n </Breadcrumb>\n {commercialApplicationData ? (\n <>\n <Hero imageUrl={commercialApplication?.banner_image.url}>\n <HeroText>{commercialApplication?.name}</HeroText>\n </Hero>\n <Content>\n <Main>\n <Description>{commercialApplication?.description}</Description>\n <Tabs\n activeTab={activeTab}\n setActiveTab={(newTab) => {\n setActiveTab(newTab as Tab);\n }}\n tabs={tabs}\n activeColor={COLORS.HALO_BLUE}\n tabDistance={isMobile ? \"24px\" : \"56px\"}\n font={FONTS.SEMIBOLD_1}\n />\n {(() => {\n if (activeTab === \"REQUESTS\") {\n return requestsData ? (\n <RequestCards>\n {requestsData?.requests.map((request) => (\n <RfpCard\n key={request.id}\n request={request}\n // TODO: (TGAP4) based on Redux usage discussion\n // onClick={() => handleNotify(request)}\n // isUserFollowing={isUserFollowingRequest(request.id)}\n fromHref={window.location.pathname + window.location.search}\n />\n ))}\n </RequestCards>\n ) : (\n <Loader inline=\"centered\" active style={{ marginTop: 80 }} />\n );\n }\n return startupProgramsData ? (\n <StartupProgramCards>\n {startupProgramsData.requests.map((request) => (\n <RequestForStartupCardWide key={request.id} request={request} />\n ))}\n </StartupProgramCards>\n ) : (\n <Loader inline=\"centered\" active style={{ marginTop: 80 }} />\n );\n })()}\n <Pagination\n currentPage={pageNum}\n setCurrentPage={(newPageNum) => setPageNum(newPageNum)}\n totalPages={Math.ceil(\n Number(\n activeTab === \"REQUESTS\"\n ? commercialApplicationData.respond_to_requests_count\n : commercialApplicationData.startup_programs_count\n ) / NUM_CARDS_PER_PAGE\n )}\n marginTop=\"56px\"\n />\n </Main>\n <CommercialApplicationPageCtas commercialApplication={commercialApplication!} />\n </Content>\n </>\n ) : (\n <Loader inline=\"centered\" active style={{ marginTop: 120 }} />\n )}\n </PageContainer>\n );\n};\n\nexport default CommercialApplicationPage;\n\nconst Breadcrumb = styled.div`\n margin: 24px 0;\n`;\nconst Hero = styled.div`\n display: flex;\n align-items: flex-end;\n height: 264px;\n margin-bottom: 64px;\n padding: 32px;\n background-image: url(${({ imageUrl }) => imageUrl});\n background-position: center;\n background-size: cover;\n border-radius: 12px;\n ${WINDOW_DIMENSIONS.TABLET_LANDSCAPE_MEDIA_QUERY} {\n margin-bottom: 48px;\n }\n`;\nconst HeroText = styled.h1`\n ${FONTS.HEADING_BANNER};\n color: ${COLORS.WHITE};\n ${WINDOW_DIMENSIONS.MOBILE_MEDIA_QUERY} {\n ${FONTS.HEADING_JUMBO};\n }\n`;\nconst Content = styled.div`\n display: flex;\n justify-content: space-between;\n gap: 32px;\n ${WINDOW_DIMENSIONS.TABLET_LANDSCAPE_MEDIA_QUERY} {\n flex-direction: column-reverse;\n }\n`;\nconst Main = styled.div`\n display: flex;\n flex-direction: column;\n gap: 48px;\n`;\nconst Description = styled.div`\n ${FONTS.HEADING_3_REGULAR};\n`;\nconst RequestCards = styled.div`\n display: grid;\n grid-template-columns: repeat(3, minmax(0, 1fr));\n grid-gap: 32px;\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 StartupProgramCards = styled.div`\n display: flex;\n flex-direction: column;\n gap: 32px;\n position: relative;\n ${WINDOW_DIMENSIONS.MOBILE_MEDIA_QUERY} {\n gap: 24px;\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":["BaseCardWide","to","isExternalLink","openInNewTab","title","subtitle","imageUrl","cornerContent","tags","buttons","dataTestId","_useState2","_slicedToArray","useState","areButtonsHovered","setAreButtonsHovered","isMobile","useSelector","state","window","isCompactLayout","width","WINDOW_DIMENSIONS","TABLET_LANDSCAPE","_jsx","CardLink","href","as","undefined","target","rel","children","_jsxs","Container","Top","onMouseOver","Content","AvatarWrapper","CompanyAvatar","size","Text","TitleGroup","Title","Subtitle","CornerContent","shouldWrap","Bottom","Tags","XMoreWrapper","maxLines","maxTags","map","tag","Tag","content","Buttons","onMouseEnter","onMouseLeave","styled","Link","COLORS","BLACK","div","NEUTRAL_250","STYLES","SHADOW_CARD","SHADOW_A","FONTS","HEADING_5_SEMIBOLD","TABLET","SEMIBOLD_1","SEMIBOLD_3","NEUTRAL_500","NEUTRAL_200","MOBILE","RequestForStartupCardWide","request","currentUser","profiles","windowWidth","_useFollowRequest","useFollowRequest","id","handleFollowRequest","isUserFollowing","handleNotify","e","preventDefault","requestable","has_page","track","SegmentEventName","Click","ui_component","react_component","request_slug","slug","logged_in","Boolean","_request$requestable","external_url","parent_program","status","getLaunchableRequestStatus","button","Button","type","variant","requestPageUrlPath","iconName","iconPosition","onClick","is_external_link","LaunchableRequestStatus","COMING_SOON","CLOSED","deadline","IN_EXTENSION","OptedIn","Icon","name","color","GREEN","SubtitleWrapper","SubtitleText","company","private_alias","company_name","verification_status","CompanyVerificationStatus","VERIFIED","StyledIcon","HALO_BLUE","avatar","url","Status","hasUnknownLaunchDate","unknown_launch_date","useCompactText","areas_of_expertise","REGULAR_2","span","CopyLink","link","async","copyLinkToClipboard","toast","success","error","memo","getMarketplaceRequestForStartups","searchFilter","commercialApplicationsFilter","api","get","params","options","search_filter","commercial_applications_filter","data","requests","getMarketplaceRequestForStartupsFilterOptions","getCommercialApplicationPageRequestForStartups","commercialApplicationId","pageNum","request_for_startups_path","commercial_application_id","page_num","getRequestForStartup","response","redirect","location","FollowButton","disabled","isFollowing","margin","companyName","buttonText","setButtonText","useEffect","styles","StyleSheet","create","ShareResearchModal_modal","ShareResearchModal_content","padding","ShareResearchModal_modalTextArea","_objectSpread","JS_FONTS","ShareResearchModal_modalInput","borderStyle","borderWidth","REGULAR_3","ShareResearchModal_modalButtonHolder","display","textAlign","marginTop","ShareResearchModal_header","HEADING_4_SEMIBOLD","ShareResearchModal_smallText","ShareResearchModal_messageToggle","paddingLeft","textDecoration","cursor","initialState","sending","message","toEmails","isExpanded","ShareResearchModal","PureComponent","constructor","props","super","handleSubmitMessage","_this$props","this","closeShareResearchModal","_this$state","setState","length","commercial_application","email","axios","headers","Accept","authenticityToken","err","handleChange","attr","value","componentDidUpdate","prevProps","open","render","_this$props2","requestForProposal","_this$state2","showResearchName","Modal","onClose","className","css","humanFriendlyResearchName","toLowerCase","placeholder","onChange","_Fragment","rows","CommercialApplicationPageCtas","commercialApplication","isShareModalOpen","setIsShareModalOpen","dispatch","useDispatch","followedIds","followed_commercial_application_ids","includes","_useMutation","useMutation","mutationFn","post","toggle_follow_commercial_applications_path","toggleFollowCommercialApplication","onSuccess","setCurrentUser","filter","followedId","toggleFollow","mutate","isLoadingToggleFollow","isLoading","requireLoggedIn","callback","toggleLoginModal","t","SHADOW_B","CommercialApplicationPage","activeTab","setActiveTab","_useState4","setPageNum","useParams","history","useHistory","commercialApplicationData","useQuery","queryKey","queryFn","commercial_application_path","getCommercialApplication","onError","toastErrorHandler","requestsData","getCommercialApplicationPageRequests","enabled","startupProgramsData","respond_to_requests_count","startup_programs_count","push","marketplacePath","tabs","Number","key","label","sortMarketplaceRequests","scores","sort","SortBy","RELEVANCE","PageContainer","hasPaddingTop","Breadcrumb","TextLink","font","MEDIUM_2","Hero","banner_image","HeroText","Main","Description","description","Tabs","newTab","activeColor","tabDistance","RequestCards","RfpCard","fromHref","pathname","search","Loader","inline","active","style","StartupProgramCards","Pagination","currentPage","setCurrentPage","newPageNum","totalPages","Math","ceil","TABLET_LANDSCAPE_MEDIA_QUERY","h1","HEADING_BANNER","WHITE","MOBILE_MEDIA_QUERY","HEADING_JUMBO","HEADING_3_REGULAR","EXTRA_WIDE_MEDIA_QUERY","DESKTOP_MEDIA_QUERY","text","background","ACTIVE","date","formatDateToEastern","Date","getFullYear","GREEN_800","GREEN_200","launch_date","ORANGE","ORANGE_300","statusText","IconContainer"],"sourceRoot":""}