{"version":3,"file":"js/4018-50440becc5ad047d836b.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/CompanyNetworkCta/RequestToJoinNetworkModal.tsx","webpack://halo/./app/client/src/tsTypes/companyNetworkScientists.ts","webpack://halo/./app/client/src/components/CompanyNetworkCta/CompanyNetworkCta.tsx","webpack://halo/./app/client/src/utils/sponsorUtils.ts","webpack://halo/./app/client/src/views/CompanyPage/CompanyDescriptionModal.tsx","webpack://halo/./app/client/src/requests/countries.ts","webpack://halo/./app/client/src/utils/imageUtils.ts","webpack://halo/./app/client/src/views/CompanyPage/CompanyLogoModal.tsx","webpack://halo/./app/client/src/views/CompanyPage/CompanyLogo.tsx","webpack://halo/./app/client/src/views/CompanyPage/CompanyModals.styles.jsx","webpack://halo/./app/client/src/views/CompanyPage/CompanyVideoModal.jsx","webpack://halo/./app/client/src/views/CompanyPage/CompanyVideo.tsx","webpack://halo/./app/client/src/views/CompanyPage/styledComponents.ts","webpack://halo/./app/client/src/views/CompanyPage/CompanyPageJumbotron.tsx","webpack://halo/./app/client/src/views/CompanyPage/CompanyCTABanner.tsx","webpack://halo/./app/client/src/views/CompanyPage/CompanyEditForm.tsx","webpack://halo/./app/client/src/views/CompanyPage/tooltipContent.tsx","webpack://halo/./app/client/src/views/CompanyPage/ResearchInterestInput.tsx","webpack://halo/./app/client/src/views/CompanyPage/CompanyResearchInterest.tsx","webpack://halo/./app/client/src/views/CompanyPage/CompanyPageMoreOpportunities.tsx","webpack://halo/./app/client/src/views/CompanyPage/CompanyPageUsers.tsx","webpack://halo/./app/client/src/views/CompanyPage/CompanyPageViewLiveBanner.tsx","webpack://halo/./app/client/src/views/CompanyPage/CompanyTextInput.tsx","webpack://halo/./app/client/src/views/CompanyPage/CompanyPage.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 { BlankModal, Button, Icon } from \"@components/library\";\nimport { COLORS, FONTS } from \"@constants\";\nimport { t, t_html } from \"@utils/i18n\";\nimport { Link } from \"react-router-dom\";\nimport styled from \"styled-components\";\n\nconst TIPS = [\n \"Include a short summary about your research\",\n \"Add at least five publications, patents or grants\",\n \"Upload a profile photo so they know it's you\",\n];\n\ninterface Props {\n isOpen: boolean;\n onClose: () => void;\n companyName: string;\n isCompanyVerified: boolean;\n profileId: string;\n}\n\nconst RequestToJoinNetworkModal = ({\n isOpen,\n onClose,\n companyName,\n isCompanyVerified,\n profileId,\n}: Props) => {\n return (\n <BlankModal isOpen={isOpen} onClose={onClose} width=\"620px\">\n <Container data-testid=\"join-network-modal\">\n <Content>\n <Header>\n <Icon name=\"Success\" color={COLORS.GREEN} size=\"xl\" />\n {t([\n \"components.scientist_network_cta.confirmation_modal.header\",\n isCompanyVerified ? \"verified\" : \"unverified\",\n ])}\n </Header>\n <Subheader>\n {t_html(\n [\n \"components.scientist_network_cta.confirmation_modal.subheader\",\n isCompanyVerified ? \"verified_html\" : \"unverified_html\",\n ],\n {\n company_name: companyName,\n }\n )}\n </Subheader>\n <List>\n Here are some tips to be more successful:\n {TIPS.map((tip: string) => (\n <Item key={tip}>\n <Icon name=\"Success\" color={COLORS.HALO_BLUE} size=\"md\" />\n {tip}\n </Item>\n ))}\n </List>\n <ButtonContainer>\n <Link to={`/profile/${profileId}`}>\n <Button size=\"md\" iconName=\"Arrow Right\" iconPosition=\"right\">\n Go to my profile\n </Button>\n </Link>\n </ButtonContainer>\n </Content>\n </Container>\n </BlankModal>\n );\n};\n\nexport default RequestToJoinNetworkModal;\n\nconst Container = styled.div`\n margin: 50px 50px 40px 50px;\n`;\n\nconst Content = styled.div`\n display: flex;\n flex-direction: column;\n gap: 30px;\n`;\n\nconst Header = styled.div`\n ${FONTS.HEADING_4_SEMIBOLD}\n\n display: flex;\n align-items: center;\n gap: 12px;\n`;\n\nconst Subheader = styled.div`\n ${FONTS.SEMIBOLD_2}\n`;\n\nconst List = styled.div`\n ${FONTS.REGULAR_2}\n`;\n\nconst Item = styled.div`\n display: grid;\n grid-template-columns: 30px auto;\n margin-top: 8px;\n`;\n\nconst ButtonContainer = styled.div`\n display: flex;\n justify-content: center;\n`;\n","export enum CompanyNetworkScientistStatus {\n PENDING = \"pending\",\n ACCEPTED = \"accepted\",\n REJECTED = \"rejected\",\n}\n\nexport enum CompanyNetworkScientistSource {\n SCIENTIST_REQUEST = \"scientist_request\",\n PROPOSAL_SUBMISSION = \"proposal_submission\",\n SPONSOR_INVITE = \"sponsor_invite\",\n SPONSOR_ADD_FROM_DIGEST = \"sponsor_add_from_digest\",\n SCIENTIST_REQUEST_FROM_DIGEST = \"scientist_request_from_digest\",\n}\n","import RequestToJoinNetworkModal from \"@components/CompanyNetworkCta/RequestToJoinNetworkModal\";\nimport toast from \"@components/Toast\";\nimport { Button, Icon, Tooltip } from \"@components/library\";\nimport { ButtonProps } from \"@components/library/Buttons/Button\";\nimport { COLORS, FONTS } from \"@constants\";\nimport { finishFollowUnfollowCompany, toggleLoginModal } from \"@redux/actions/profileActions\";\nimport { RootState } from \"@redux/store\";\nimport { followUnfollowCompany } from \"@requests/companies\";\nimport {\n getCompanyNetworkScientist,\n requestToJoinCompanyNetwork,\n} from \"@requests/companyNetworkScientists\";\nimport { SegmentEventName, SegmentEventObject } from \"@tsTypes/__generated__/enums\";\n// @ts-ignore\nimport { CompanyVerificationStatus } from \"@tsTypes/companies.js.erb\";\nimport { CompanyForCard } from \"@tsTypes/companies/_for_card\";\nimport { CompanyNetworkScientistStatus } from \"@tsTypes/companyNetworkScientists\";\nimport { CompanyForCompanyPage } from \"@tsTypes/index\";\nimport { CompanyNetworkScientist } from \"@tsTypes/schema\";\nimport { UserRole } from \"@tsTypes/users\";\nimport { track } from \"@utils/appUtils\";\nimport appsignal from \"@utils/appsignal\";\nimport { setPrevUrlCookie } from \"@utils/authUtils\";\nimport { t, t_link } from \"@utils/i18n\";\nimport { MouseEvent, useEffect, useState } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { Link } from \"react-router-dom\";\nimport styled from \"styled-components\";\n\ninterface Props {\n company: CompanyForCompanyPage | CompanyForCard;\n buttonProps?: Pick<ButtonProps, \"size\" | \"width\" | \"iconName\">;\n}\n\nfunction CompanyPageNetworkCTA({ company, buttonProps }: Props) {\n const [requestToJoinNetworkModalOpen, setRequestToJoinNetworkModalOpen] = useState(false);\n const [isSubmitting, setIsSubmitting] = useState(false);\n const [companyNetworkScientist, setCompanyNetworkScientist] = useState<CompanyNetworkScientist>();\n\n const currentUser = useSelector((state: RootState) => state.profiles.currentUser);\n const dispatch = useDispatch();\n\n const { id, identifier, company_name, verification_status } = company;\n\n useEffect(() => {\n (async () => {\n if (currentUser.role === UserRole.SCIENTIST) {\n const response = await getCompanyNetworkScientist({\n scientistProfileId: currentUser.profile_info.id,\n companyId: company.id,\n });\n setCompanyNetworkScientist((response as any) ?? undefined);\n }\n })();\n }, []);\n\n const joinNetwork = async () => {\n setIsSubmitting(true);\n track(SegmentEventName.Click, {\n ...company,\n ui_component: \"Join Network Button\",\n react_component: \"CompanyPageNetworkCTA\",\n });\n\n try {\n const { company_network_scientist } = await requestToJoinCompanyNetwork(company.id);\n setRequestToJoinNetworkModalOpen(true);\n setCompanyNetworkScientist(company_network_scientist as any);\n } catch (e) {\n console.error(e.message);\n } finally {\n setIsSubmitting(false);\n }\n };\n\n const toggleFollow = async () => {\n setIsSubmitting(true);\n\n try {\n const response = await followUnfollowCompany(identifier);\n\n if (response.is_following) {\n toast.success(\n t_link(\n \"components.scientist_network_cta.toast_success\",\n <Link to=\"/account/?q=following\">Account Settings</Link>\n )\n );\n track(SegmentEventName.Follow, {\n ...company,\n object: SegmentEventObject.Company,\n });\n } else {\n track(SegmentEventName.Unfollow, {\n ...company,\n object: SegmentEventObject.Company,\n });\n }\n\n dispatch(\n finishFollowUnfollowCompany({\n company: response.company,\n isFollowing: response.is_following,\n })\n );\n } catch (e) {\n appsignal.sendError(e, (span) => {\n span.setAction(\"CompanyNetworkCta#toggleFollow\");\n span.setTags({\n companyIdentifier: String(identifier),\n currentUserId: currentUser.id,\n });\n });\n } finally {\n setIsSubmitting(false);\n }\n };\n\n const handleClick = (e: MouseEvent<HTMLButtonElement>) => {\n e.preventDefault();\n e.stopPropagation();\n\n switch (currentUser.role) {\n case UserRole.SCIENTIST: {\n joinNetwork();\n break;\n }\n case UserRole.SPONSOR: {\n return;\n }\n case UserRole.UNIVERSITY_ADMIN: {\n toggleFollow();\n break;\n }\n default: {\n setPrevUrlCookie(window.location.href, 0);\n\n dispatch(toggleLoginModal({ open: true }));\n }\n }\n };\n\n const followedCompaniesInfo = currentUser.profile_info.followed_companies_info as {\n id: number;\n company_name: string;\n identifier: string;\n is_partner: boolean;\n }[];\n\n const isFollowing = followedCompaniesInfo\n ? followedCompaniesInfo.some((followedCompany) => followedCompany.id === id)\n : false;\n\n return (\n <>\n <RequestToJoinNetworkModal\n isOpen={requestToJoinNetworkModalOpen}\n onClose={() => setRequestToJoinNetworkModalOpen(false)}\n companyName={company_name ?? \"\"}\n isCompanyVerified={verification_status === CompanyVerificationStatus.VERIFIED}\n profileId={currentUser.profile_id}\n />\n <Container>\n {(() => {\n if (currentUser.role === UserRole.SPONSOR) return null;\n if (\n verification_status !== CompanyVerificationStatus.VERIFIED &&\n (companyNetworkScientist || isFollowing)\n ) {\n return (\n <BannerCtaSuccess>\n <Icon name=\"History\" color={COLORS.BLUE_LIGHT_600} size=\"xs\" />\n {t(\"components.scientist_network_cta.status.unverified\", {\n company_name: company_name,\n })}\n </BannerCtaSuccess>\n );\n }\n if (companyNetworkScientist) {\n return (\n <BannerCtaSuccess>\n <Icon name=\"Success\" color={COLORS.BLUE_LIGHT_600} size=\"xs\" />\n {t([\n \"components.scientist_network_cta.status\",\n companyNetworkScientist.status === CompanyNetworkScientistStatus.ACCEPTED\n ? \"accepted\"\n : \"pending\",\n ])}\n </BannerCtaSuccess>\n );\n }\n return (\n <Tooltip\n position=\"bottom\"\n contentWidth=\"100%\"\n shouldWrap={false}\n isActive={!(currentUser.role === UserRole.UNIVERSITY_ADMIN && isFollowing)}\n content={\n <TooltipText>\n {(() => {\n if (verification_status !== CompanyVerificationStatus.VERIFIED) {\n return t(\"components.scientist_network_cta.tooltip.unverified\", {\n company_name,\n });\n }\n if (currentUser.role === UserRole.UNIVERSITY_ADMIN) {\n return t(\"components.scientist_network_cta.tooltip.university_admin\");\n }\n return t(\"components.scientist_network_cta.tooltip.scientist\", {\n company_name,\n });\n })()}\n </TooltipText>\n }\n >\n <Button\n type=\"button\"\n size={buttonProps?.size ?? \"sm\"}\n iconName={buttonProps?.iconName}\n iconPosition=\"right\"\n width={buttonProps?.width ?? \"100%\"}\n onClick={handleClick}\n disabled={isSubmitting || currentUser.role === UserRole.SPONSOR}\n >\n {(() => {\n if (verification_status !== CompanyVerificationStatus.VERIFIED) {\n return t(\"components.scientist_network_cta.join_network_button.unverified\");\n }\n if (currentUser.role === UserRole.UNIVERSITY_ADMIN) {\n return t([\n \"components.scientist_network_cta.join_network_button.university_admin\",\n isFollowing ? \"unfollow\" : \"follow\",\n ]);\n }\n return t(\"components.scientist_network_cta.join_network_button.scientist\");\n })()}\n </Button>\n </Tooltip>\n );\n })()}\n </Container>\n </>\n );\n}\n\nconst Container = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 8px;\n max-width: fit-content;\n padding: 0px;\n ${FONTS.REGULAR_2}\n text-align: center;\n`;\n\nconst BannerCtaSuccess = styled.div`\n ${FONTS.MEDIUM_3}\n color: ${COLORS.BLUE_900};\n display: flex;\n align-items: center;\n gap: 4px;\n margin-top: 8px;\n`;\n\nconst TooltipText = styled.div`\n text-align: center;\n`;\n\nexport default CompanyPageNetworkCTA;\n","import { SortDirection } from \"@components/library/Buttons/SortButton\";\nimport {\n CompanyMember,\n ReviewTeamMember,\n ReviewerDashboardRequest,\n RolePartial,\n SponsorProfilePartial,\n} from \"@tsTypes/index\";\nimport { RoleName } from \"@tsTypes/roles\";\nimport { AnyUser, UserRole } from \"@tsTypes/users\";\nimport { findRequestRoleNameOnUser } from \"./requestUtils\";\n\nfunction isSponsorProfile(profile: any): profile is SponsorProfilePartial {\n return (\n (profile as SponsorProfilePartial).is_admin !== undefined &&\n (profile as SponsorProfilePartial).company_id !== undefined\n );\n}\n\nexport const canEditCompanyPage = (\n currentUser: AnyUser,\n company: {\n id: number;\n },\n viewLive: boolean\n) => {\n if (viewLive) {\n return false;\n } else if (\n \"role\" in currentUser &&\n currentUser.role === UserRole.SPONSOR &&\n isSponsorProfile(currentUser.profile_info) &&\n currentUser.profile_info.is_admin &&\n currentUser.profile_info.company_id === company.id\n ) {\n return true;\n }\n return false;\n};\n\nexport const sortCompanyMembers = (\n members: CompanyMember[],\n currentUserId: number,\n nameSortDirection: SortDirection,\n assignmentSortDirection: SortDirection\n): CompanyMember[] => {\n const _members = [...members];\n // Privileges assignment sort over name sort. Consumer resets one sort every time the other is set.\n if (nameSortDirection === \"ASC\") {\n _members.sort((a, b) => (a.first_name > b.first_name ? 1 : -1));\n }\n if (nameSortDirection === \"DESC\") {\n _members.sort((a, b) => (a.first_name > b.first_name ? -1 : 1));\n }\n if (assignmentSortDirection === \"ASC\") {\n _members.sort((a, b) => a.roles.length - b.roles.length);\n }\n if (assignmentSortDirection === \"DESC\") {\n _members.sort((a, b) => b.roles.length - a.roles.length);\n }\n if (nameSortDirection === \"NONE\" && assignmentSortDirection === \"NONE\") {\n _members.sort((a, b) => {\n if (a.id === currentUserId) return -1;\n else if (b.id === currentUserId) return 1;\n if (a.profile_info.is_super_admin && !b.profile_info.is_super_admin) {\n return -1;\n } else if (!a.profile_info.is_super_admin && b.profile_info.is_super_admin) {\n return 1;\n }\n if (a.profile_info.is_admin && !b.profile_info.is_admin) {\n return -1;\n } else if (!a.profile_info.is_admin && b.profile_info.is_admin) {\n return 1;\n }\n return a.first_name > b.first_name ? 1 : -1;\n });\n }\n return _members;\n};\n\nexport const sortReviewTeamMembers = ({\n request,\n members: _members,\n currentUserId,\n}: {\n request: ReviewerDashboardRequest;\n members: ReviewTeamMember[];\n currentUserId: number;\n}) => {\n const roleAsNum = {\n [RoleName.REQUEST_DRAFT_EDITOR]: 0,\n [RoleName.REQUEST_LEAD]: 0,\n [RoleName.REQUEST_COMMENTER]: 1,\n [RoleName.REQUEST_EXTERNAL_LEAD]: 2,\n [RoleName.REQUEST_EXTERNAL_COMMENTER]: 3,\n [RoleName.COMPANY_SUPER_ADMIN]: 4,\n [RoleName.COMPANY_ADMIN]: 5,\n };\n\n // Eliminate draft editors from the list if the request is complete or leads/commenters from the list of the request is a draft\n const members = _members.filter((member) => {\n if (request.complete) {\n return findRequestRoleNameOnUser(member as any, request) !== RoleName.REQUEST_DRAFT_EDITOR;\n }\n return (\n findRequestRoleNameOnUser(member as any, request) !== RoleName.REQUEST_LEAD &&\n findRequestRoleNameOnUser(member as any, request) !== RoleName.REQUEST_COMMENTER\n );\n });\n\n // Sort by current user, then lead, commenter, external lead, external commenter, super admin, admin\n members.sort((a, b) => {\n if (a.id === currentUserId) return -1;\n else if (b.id === currentUserId) return 1;\n\n if (\n roleAsNum[findRequestRoleNameOnUser(a as any, request)!] <\n roleAsNum[findRequestRoleNameOnUser(b as any, request)!]\n ) {\n return -1;\n } else if (\n roleAsNum[findRequestRoleNameOnUser(a as any, request)!] >\n roleAsNum[findRequestRoleNameOnUser(b as any, request)!]\n ) {\n return 1;\n }\n return a.first_name > b.first_name ? 1 : -1;\n });\n\n return members;\n};\n\nexport const countReviewTeamRoles = (roles: RolePartial[]) =>\n roles.filter((role) => role.resource_type === \"Request\").length;\n","import toast from \"@components/Toast\";\nimport { BlankModal, Button, SingleSelectDropdown, TextInput } from \"@components/library\";\nimport { DropdownOption } from \"@components/library/Dropdowns/DropdownOption\";\nimport { updateCompanyInfo } from \"@requests/companies\";\nimport { getCountryNames } from \"@requests/countries\";\n// @ts-ignore\nimport { CompanySize, CompanySpend, CompanyType } from \"@tsTypes/companies.js.erb\";\nimport { getOptionFromValue } from \"@utils/dropdownUtils\";\nimport { Dispatch, FormEvent, SetStateAction, useEffect, useState } from \"react\";\nimport styled from \"styled-components\";\n\nimport { FONTS } from \"@constants\";\nimport { CompanyForCompanyPage } from \"@tsTypes/index\";\n\ninterface Props {\n isOpen: boolean;\n onClose: () => void;\n company: CompanyForCompanyPage;\n mode: \"all\" | \"stats\" | \"description\";\n setCompany: Dispatch<SetStateAction<CompanyForCompanyPage>>;\n}\n\nfunction CompanyDescriptionModal({ isOpen, onClose, company, setCompany, mode }: Props) {\n const [location, setLocation] = useState(company?.location);\n const [employeeCount, setEmployeeCount] = useState(company?.employee_count);\n const [researcherCount, setResearcherCount] = useState(company?.researcher_count);\n const [rdSpendAmount, setRdSpendAmount] = useState(company?.rd_spend_amount);\n const [rdCentersCount, setRdCentersCount] = useState(company?.rd_centers_count);\n const [companyType, setCompanyType] = useState(company?.company_type);\n const [description, setDescription] = useState(company.description ?? \"\");\n\n const [countryOptions, setCountryOptions] = useState<DropdownOption[]>([]);\n\n useEffect(() => {\n (async () => {\n setCountryOptions((await getCountryNames()).map(getOptionFromValue) as DropdownOption[]);\n })();\n }, []);\n\n const handleSubmit = async (e: FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n\n try {\n const { company: _company } = (await updateCompanyInfo(company.id, {\n researcher_count: researcherCount ?? undefined,\n rd_centers_count: rdCentersCount ?? undefined,\n rd_spend_amount: rdSpendAmount ?? undefined,\n employee_count: employeeCount ?? undefined,\n company_type: companyType ?? undefined,\n location: location ?? undefined,\n description,\n })) as any;\n\n setCompany(_company);\n\n toast.success(\"Successfully updated company details\");\n\n onClose();\n } catch (err) {\n toast.error(\"Failed to update company details\");\n console.error(err);\n }\n };\n\n const handleCancel = () => {\n setLocation(company?.location);\n setEmployeeCount(company?.employee_count);\n setResearcherCount(company?.researcher_count);\n setRdSpendAmount(company?.rd_spend_amount);\n setRdCentersCount(company?.rd_centers_count);\n setCompanyType(company?.company_type);\n setDescription(company?.description ?? \"\");\n\n onClose();\n };\n\n return (\n <BlankModal\n isOpen={isOpen}\n onClose={onClose}\n headerText={`Company ${mode === \"description\" ? \"Overview\" : \"Details\"}`}\n width=\"500px\"\n >\n <Form onSubmit={handleSubmit}>\n {(mode === \"all\" || mode === \"stats\") && (\n <>\n <Label>Country</Label>\n <SingleSelectDropdown\n isClearable\n maxMenuHeight=\"200px\"\n data-testid=\"company-description-modal-country\"\n value={getOptionFromValue(location)}\n options={countryOptions}\n onChange={(newOption) => {\n if (newOption) setLocation(newOption.value);\n else if (newOption === null) setLocation(\"\");\n }}\n />\n <Label>Number of Employees</Label>\n <SingleSelectDropdown\n isClearable\n maxMenuHeight=\"200px\"\n data-testid=\"company-description-modal-employees\"\n value={getOptionFromValue(employeeCount)}\n options={\n Object.values(CompanySize).map(getOptionFromValue as any) as DropdownOption[]\n }\n onChange={(newOption) => {\n if (newOption) setEmployeeCount(newOption.value);\n else if (newOption === null) setEmployeeCount(\"\");\n }}\n />\n <Label>Number of Researchers</Label>\n <SingleSelectDropdown\n isClearable\n maxMenuHeight=\"200px\"\n data-testid=\"company-description-modal-researchers\"\n value={getOptionFromValue(researcherCount)}\n options={\n Object.values(CompanySize).map(getOptionFromValue as any) as DropdownOption[]\n }\n onChange={(newOption) => {\n if (newOption) setResearcherCount(newOption.value);\n else if (newOption === null) setResearcherCount(\"\");\n }}\n />\n <Label>Annual R&D Spend</Label>\n <SingleSelectDropdown\n isClearable\n maxMenuHeight=\"200px\"\n data-testid=\"company-description-modal-spend\"\n value={getOptionFromValue(rdSpendAmount)}\n options={\n Object.values(CompanySpend).map(getOptionFromValue as any) as DropdownOption[]\n }\n onChange={(newOption) => {\n if (newOption) setRdSpendAmount(newOption.value);\n else if (newOption === null) setRdSpendAmount(\"\");\n }}\n />\n <Label>Number of R&D Centers</Label>\n <TextInput\n min={1}\n type=\"number\"\n value={String(rdCentersCount)}\n data-testid=\"company-description-modal-rd-centers\"\n onChange={(e) => setRdCentersCount(Number(e.target.value))}\n />\n <Label>Company Type</Label>\n <SingleSelectDropdown\n isClearable\n maxMenuHeight=\"150px\"\n data-testid=\"company-description-modal-company-type\"\n value={getOptionFromValue(companyType)}\n options={\n Object.values(CompanyType).map(getOptionFromValue as any) as DropdownOption[]\n }\n onChange={(newOption) => {\n if (newOption) setCompanyType(newOption.value);\n else if (newOption === null) setCompanyType(\"\");\n }}\n />\n </>\n )}\n {(mode === \"all\" || mode === \"description\") && (\n <>\n <Label>Company Description</Label>\n <TextInput\n textarea\n value={description}\n characterLimit={750}\n startingHeight={mode === \"all\" ? \"50px\" : \"180px\"}\n onChange={(e) => setDescription(e.target.value)}\n data-testid=\"company-description-modal-description-input\"\n />\n </>\n )}\n <ButtonContainer>\n <Button type=\"button\" variant=\"ghost\" onClick={handleCancel}>\n Cancel\n </Button>\n <Button type=\"submit\" data-testid=\"company-description-modal-submit\">\n Submit\n </Button>\n </ButtonContainer>\n </Form>\n </BlankModal>\n );\n}\n\nexport default CompanyDescriptionModal;\n\nconst ButtonContainer = styled.div`\n display: flex;\n justify-content: flex-end;\n gap: 16px;\n`;\n\nconst Form = styled.form`\n display: flex;\n flex-direction: column;\n gap: 16px;\n height: 100%;\n margin: 16px 24px;\n`;\n\nconst Label = styled.label`\n display: flex;\n gap: 4px;\n\n width: 100%;\n margin: 0px 0 0;\n\n ${FONTS.SEMIBOLD_2};\n`;\n","import api from \"./request\";\n\n// Gets list of names from countries table\n// Currently, only companies use this data -- use constants/countryOptions.ts for all other models\nexport const getCountryNames = async (): Promise<string[]> => {\n const response = await api.get(\"/countries\");\n return response.data;\n};\n","/* eslint-disable no-mixed-operators */\nexport const createImage = (blob) =>\n new Promise<HTMLImageElement>((resolve, reject) => {\n const image = new Image();\n image.addEventListener(\"load\", () => resolve(image));\n image.addEventListener(\"error\", (error) => reject(error));\n image.setAttribute(\"crossOrigin\", \"anonymous\");\n image.src = URL.createObjectURL(blob);\n });\n\nexport default async function getZoomedImg(\n imageSrc: Blob,\n zoomLevel: number\n): Promise<Blob | null> {\n const image = await createImage(imageSrc);\n\n const canvas = document.createElement(\"canvas\");\n const ctx = canvas.getContext(\"2d\");\n\n if (!ctx) {\n return null;\n }\n\n /* Company image is displayed as 200x335 pixels\n * but we want to scale the canvas up so the image\n * is high resolution\n */\n canvas.width = 335 * 4;\n canvas.height = 200 * 4;\n\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n const scale = Math.min(\n canvas.width / (image.width / zoomLevel),\n canvas.height / (image.height / zoomLevel)\n );\n\n const w = image.width * scale;\n const h = image.height * scale;\n\n const left = (canvas.width - w) / 2;\n const top = (canvas.height - h) / 2;\n\n ctx.drawImage(image, left, top, w, h);\n\n return new Promise((resolve) => {\n canvas.toBlob((file) => {\n resolve(file);\n }, \"image/png\");\n });\n}\n","import { useState } from \"react\";\nimport styled from \"styled-components\";\n\nimport { BlankModal, Button, Icon } from \"@components/library\";\nimport { COLORS } from \"@constants\";\nimport getZoomedImg from \"@utils/imageUtils\";\n\nconst CompanyLogoModal = ({ open, blob, closeModal, onUpload }) => {\n const [zoom, setZoom] = useState(1);\n\n const onChangeZoom = (event) => {\n if (event.target?.value) {\n setZoom(Number(event.target.value));\n }\n };\n\n const showZoomedImage = async () => {\n const zoomBlob = await getZoomedImg(blob, zoom);\n\n if (zoomBlob) {\n onUpload(zoomBlob);\n }\n };\n\n const src = URL.createObjectURL(blob);\n\n return (\n <BlankModal\n data-testid=\"company-logo-modal-main\"\n isOpen={open}\n onClose={closeModal}\n closeOnDimmerClick={false}\n headerText=\"Adjust logo size\"\n width=\"540px\"\n >\n <ImageContainer>\n <CropContainer>\n <ImagePreview src={src} style={{ transform: `scale(${zoom})` }} alt=\"logo\" />\n {/* TODO: Update preview section to use blue/grey boxes from original design */}\n {/* <BlueBox /> */}\n {/* <GreyBox /> */}\n </CropContainer>\n </ImageContainer>\n <ZoomImageContainer>\n <Icon name=\"Minimize\" />\n <SliderContainer>\n <SliderInput\n type=\"range\"\n min=\"0.1\"\n max=\"2\"\n step=\"any\"\n value={zoom}\n onChange={onChangeZoom}\n />\n </SliderContainer>\n <Icon name=\"Add\" />\n </ZoomImageContainer>\n <ButtonContainer>\n <Button type=\"button\" variant=\"ghost\" onClick={closeModal}>\n Cancel\n </Button>\n <Button\n data-testid=\"company-logo-modal-upload\"\n type=\"button\"\n onClick={() => showZoomedImage()}\n >\n Upload\n </Button>\n </ButtonContainer>\n </BlankModal>\n );\n};\n\nexport default CompanyLogoModal;\n\nconst ButtonContainer = styled.div`\n display: flex;\n flex-direction: row;\n justify-content: flex-end;\n align-items: center;\n padding: 24px 20px;\n gap: 20px;\n`;\n\nconst ImageContainer = styled.div`\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n padding: 24px 20px;\n gap: 10px;\n height: 340px;\n`;\n\nconst ZoomImageContainer = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n padding: 0 24px;\n`;\n\nconst CropContainer = styled.div`\n width: 491px;\n height: 293px;\n border-radius: 8px;\n border: 2px solid ${COLORS.HALO_BLUE};\n\n display: flex;\n align-items: center;\n justify-content: center;\n position: relative;\n overflow: hidden;\n`;\n\nconst ImagePreview = styled.img`\n max-width: 491px;\n max-height: 293px;\n margin: 0 auto;\n`;\n\nconst BlueBox = styled.div`\n border: 2px solid ${COLORS.HALO_BLUE};\n\n position: absolute;\n\n width: 372px;\n height: 218px;\n\n z-index: 1;\n`;\n\nconst GreyBox = styled.div`\n border-right: 64px solid ${COLORS.BLACK};\n border-left: 64px solid ${COLORS.BLACK};\n border-top: 37px solid ${COLORS.BLACK};\n border-bottom: 37px solid ${COLORS.BLACK};\n opacity: 0.8;\n\n position: absolute;\n\n width: 100%;\n height: 100%;\n\n z-index: 1;\n`;\n\nconst SliderContainer = styled.div`\n width: 100%;\n margin-right: 12px;\n margin-left: 12px;\n`;\n\nconst SliderInput = styled.input`\n appearance: none;\n outline: none;\n\n background: ${COLORS.NEUTRAL_300};\n border-radius: 2px;\n height: 3px;\n cursor: pointer;\n\n &::-webkit-slider-thumb {\n appearance: none;\n width: 24px;\n height: 24px;\n border-radius: 50%;\n background: ${COLORS.HALO_BLUE};\n }\n\n &::-moz-range-thumb {\n width: 24px;\n height: 24px;\n border-radius: 50%;\n background: ${COLORS.HALO_BLUE};\n }\n`;\n","import CompanyNetworkCta from \"@components/CompanyNetworkCta\";\nimport toast from \"@components/Toast\";\nimport { Icon, IconButton } from \"@components/library\";\nimport { COLORS, FEATURE_FLAGS, FONTS, STYLES, WINDOW_DIMENSIONS } from \"@constants\";\nimport { RootState } from \"@redux/store\";\nimport { uploadCompanyImage } from \"@requests/companies\";\n// @ts-ignore\nimport { CompanyVerificationStatus } from \"@tsTypes/companies.js.erb\";\nimport { CompanyForCompanyPage } from \"@tsTypes/index\";\nimport { UserRole } from \"@tsTypes/users\";\nimport { ChangeEvent, useRef, useState } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport styled from \"styled-components\";\nimport CompanyLogoModal from \"./CompanyLogoModal\";\n\nconst { TABLET_LANDSCAPE_MEDIA_QUERY, TABLET_MEDIA_QUERY } = WINDOW_DIMENSIONS;\n\ninterface Props {\n company: CompanyForCompanyPage;\n showEditView: boolean;\n}\n\nfunction CompanyLogo({ company, showEditView }: Props) {\n const { id, company_name, identifier, video, hero_image_url, verification_status } = company;\n\n const fileInputRef = useRef<HTMLInputElement>(null);\n const currentUser = useSelector((state: RootState) => state.profiles.currentUser);\n\n const [logo, setLogo] = useState(company.logo);\n const [logoBlob, setLogoBlob] = useState<Blob | null>(null);\n const [logoFailedToLoad, setLogoFailedToLoad] = useState(false);\n const [companyLogoModalOpen, setCompanyLogoModalOpen] = useState(false);\n\n const handleFileSelect = (event: ChangeEvent<HTMLInputElement>) => {\n if (event.target?.files?.length) {\n setLogoBlob(event.target.files[0]);\n setCompanyLogoModalOpen(true);\n } else {\n setLogoBlob(null);\n setCompanyLogoModalOpen(false);\n toast.error(\"Failed to open file\");\n }\n\n // Clear the value so that the same file can be selected again\n // Otherwise, the onChange event won't fire if the same file is selected\n if (fileInputRef.current) fileInputRef.current.value = \"\";\n };\n\n const handleLogoUpload = async (blob: Blob) => {\n try {\n if (!blob) throw new Error(\"No logo blob\");\n\n const logoUrl = await uploadCompanyImage(id, identifier as any, blob);\n setLogo({ url: logoUrl });\n\n toast.success(\"Logo uploaded successfully\");\n } catch (error) {\n console.error(error);\n toast.error(\"Failed to upload logo\");\n } finally {\n setLogoBlob(null);\n setCompanyLogoModalOpen(false);\n }\n };\n\n const noVideoContent = !video.url && !hero_image_url;\n\n const isUnverified =\n FEATURE_FLAGS.UNCLAIMED_COMPANY_PAGE &&\n verification_status !== CompanyVerificationStatus.VERIFIED;\n\n return (\n <>\n {companyLogoModalOpen && Boolean(logoBlob) && (\n <CompanyLogoModal\n open={companyLogoModalOpen}\n blob={logoBlob}\n closeModal={() => {\n setLogoBlob(null);\n setCompanyLogoModalOpen(false);\n }}\n onUpload={handleLogoUpload}\n />\n )}\n <Container noVideoContent={noVideoContent} isUnverified={isUnverified}>\n {showEditView && (\n <EditContainer>\n <input\n type=\"file\"\n accept=\"image/jpeg, image/png\"\n ref={fileInputRef}\n style={{ display: \"none\" }}\n onChange={handleFileSelect}\n />\n <IconButton\n variant=\"secondary\"\n iconName=\"Edit\"\n tooltipWidth=\"75px\"\n tooltipText=\"Edit logo\"\n onClick={() => fileInputRef.current?.click()}\n />\n </EditContainer>\n )}\n <Content isUnverified={isUnverified}>\n {logo.url && !logoFailedToLoad ? (\n <Logo\n alt={company_name}\n onError={() => setLogoFailedToLoad(true)}\n src={`${logo.url}?${new Date().getTime()}`}\n />\n ) : (\n <CompanyName isUnverified={isUnverified}>\n {isUnverified && (\n <NoLogoIconContainer>\n <Icon name=\"Organization\" size=\"md\" color={COLORS.NEUTRAL_400} />\n </NoLogoIconContainer>\n )}\n {company_name}\n </CompanyName>\n )}\n {currentUser.role !== UserRole.SPONSOR && (\n <CompanyNetworkCta company={company} buttonProps={{ iconName: \"Followers\" }} />\n )}\n </Content>\n </Container>\n </>\n );\n}\n\nconst Container = styled.div`\n display: flex;\n flex-direction: column;\n ${({ isUnverified }) => !isUnverified && \"align-items: center\"};\n justify-content: center;\n flex-grow: 1;\n position: relative;\n padding: 64px;\n ${({ noVideoContent, isUnverified }) =>\n noVideoContent &&\n `\n height: 311px;\n width: 100%;\n ${!isUnverified && \"max-width: 346px;\"}\n `}\n\n ${TABLET_LANDSCAPE_MEDIA_QUERY} {\n max-width: unset;\n }\n\n ${TABLET_MEDIA_QUERY} {\n padding: 32px;\n }\n`;\n\nconst Content = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 24px;\n max-width: ${({ isUnverified }) => (isUnverified ? \"100%\" : \"208px\")};\n`;\n\nconst Logo = styled.img`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n text-align: center;\n width: 100%;\n\n ${TABLET_LANDSCAPE_MEDIA_QUERY} {\n margin-bottom: initial;\n max-width: 400px;\n }\n`;\n\nconst NoLogoIconContainer = styled.div`\n display: flex;\n justify-content: center;\n align-items: center;\n min-width: 38px;\n height: 38px;\n background-color: ${COLORS.NEUTRAL_250};\n border-radius: 100%;\n`;\n\nconst CompanyName = styled.h1`\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 24px 0px;\n text-align: center;\n ${FONTS.HEADING_1_SEMIBOLD}\n ${STYLES.ONE_LINE_ALT}\n`;\n\nexport const EditContainer = styled.div`\n position: absolute;\n top: 20px;\n left: 20px;\n\n z-index: 1;\n\n border-radius: 4px;\n\n background-color: ${COLORS.BLUE_LIGHT_250};\n\n ${TABLET_LANDSCAPE_MEDIA_QUERY} {\n display: none;\n }\n`;\n\nexport default CompanyLogo;\n","import { COLORS, JS_FONTS } from \"@constants\";\nimport { StyleSheet } from \"aphrodite\";\n\nconst styles = StyleSheet.create({\n CompanyModal_modal: {\n overflow: \"visible\",\n color: \"black\",\n ...JS_FONTS.REGULAR_2,\n },\n CompanyModal_header: {\n ...JS_FONTS.HEADING_4_SEMIBOLD,\n fontFamily: \"Inter, sans-serif\",\n color: COLORS.BLACK,\n border: \"none\",\n paddingBottom: 0,\n },\n CompanyModal_formLabel: {\n margin: \"0px 0 6px\",\n },\n CompanyModal_fieldLabel: {\n ...JS_FONTS.REGULAR_3,\n margin: \"3px 0 -3px\",\n },\n CompanyModal_firstformLabel: {\n margin: \"1rem 0 5px\",\n },\n CompanyModal_textarea: {\n resize: \"none\",\n width: \"100%\",\n height: \"150px\",\n border: `1px solid ${COLORS.NEUTRAL_400}`,\n padding: \"1rem\",\n },\n CompanyModal_buttonContainer: {\n display: \"flex\",\n justifyContent: \"flex-end\",\n marginTop: \"20px\",\n },\n CompanyPartnerModal_radioGroup: {\n display: \"flex\",\n alignItems: \"center\",\n padding: \"20px 0 0 0\",\n marginBottom: \"5px\",\n },\n CompanyPartnerModal_radio: {\n margin: \"0 0 0 6px\",\n },\n CompanyPartnerModal_radioLabel: {\n marginLeft: \"20px\",\n },\n CompanyModal_dropdown: {\n width: \"100%\",\n display: \"flex\",\n height: \"48px\",\n alignItems: \"center\",\n borderStyle: \"solid\",\n borderWidth: \"1px\",\n borderColor: COLORS.NEUTRAL_400,\n margin: \"auto\",\n marginBottom: \"4px\",\n ...JS_FONTS.REGULAR_2,\n color: \"black\",\n padding: \".67857143em 2.1em .67857143em 1em\",\n },\n CompanyPartnerModal_dropdown: {\n width: \"100%\",\n display: \"flex\",\n height: \"35.8px\",\n alignItems: \"center\",\n borderStyle: \"solid\",\n borderWidth: \"1px\",\n borderColor: COLORS.NEUTRAL_400,\n margin: \"auto\",\n ...JS_FONTS.REGULAR_2,\n color: \"black\",\n padding: \"2px 8px\",\n marginBottom: \"15px\",\n },\n CompanyModal_smallText: {\n display: \"block\",\n margin: \"10px 0 18px\",\n },\n CompanyModal_strongText: {\n ...JS_FONTS.SEMIBOLD_2,\n },\n CompanyModal_errorContainer: {\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n color: COLORS.RED,\n },\n CompanyModal_captionLabel: {\n ...JS_FONTS.REGULAR_1,\n transform: \"translateY(-0.5em)\",\n },\n CompanyModal_errorLabel: {\n color: \"#FF6136\",\n },\n CompanyLogoModal_imageContainer: {\n width: \"400px\",\n height: \"400px\",\n overflow: \"hidden\",\n border: `2px solid ${COLORS.NEUTRAL_200}`,\n borderRadius: \"4px\",\n margin: \"24px auto\",\n display: \"grid\",\n placeItems: \"center\",\n },\n CompanyLogoModal_imagePreview: {\n width: \"100%\",\n height: \"auto\",\n margin: \"0 auto\",\n zIndex: 1,\n },\n CompanyLogoModal_imageZoomContainer: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n width: \"100%\",\n padding: \"0 24px\",\n },\n CompanyLogoModal_imageZoomButton: {\n height: \"14px\",\n width: \"14px\",\n },\n CompanyLogoModal_imageZoomInput: {\n margin: \"0 5%\",\n \":focus\": {\n outline: \"none\",\n boxShadow: \"none\",\n },\n },\n CompanyVideoModal_videoPreviewContainer: {\n position: \"relative\",\n width: \"900px\",\n height: \"max-content\",\n margin: \"24px auto 35px\",\n overflow: \"hidden\",\n },\n CompanyVideoModal_videoPreview: {\n width: \"900px\",\n maxHeight: \"506.25px\", // 16:9\n margin: \"0 auto\",\n background: COLORS.NEUTRAL_200,\n },\n CompanyVideoModal_uploadingOverlay: {\n width: \"100%\",\n height: \"100%\",\n position: \"absolute\",\n display: \"grid\",\n placeItems: \"center\",\n zIndex: 100000,\n backgroundColor: \"rgba(109, 109, 109, 0.9)\",\n transform: \"scale(1.5)\",\n ...JS_FONTS.REGULAR_2,\n },\n});\n\nexport const CompanyPartnerModal_dropdown = {\n width: \"100%\",\n margin: \"auto\",\n ...JS_FONTS.REGULAR_2,\n color: \"black\",\n padding: \".5em 0\",\n marginBottom: \"15px\",\n};\n\nexport default styles;\n","import { Button } from \"@components/library\";\nimport { css } from \"aphrodite\";\nimport { useState } from \"react\";\nimport { Loader, Modal } from \"semantic-ui-react\";\nimport styled from \"styled-components\";\nimport styles from \"./CompanyModals.styles\";\n\nconst MAX_VIDEO_SIZE = 50000000; // 50mb\n\nconst CompanyVideoModal = ({ open, blob, closeModal, onUpload }) => {\n const [uploading, setUploading] = useState(false);\n const isOverLimit = blob.size > MAX_VIDEO_SIZE;\n const src = URL.createObjectURL(blob);\n\n const handleUpload = async () => {\n setUploading(true);\n await onUpload();\n setUploading(false);\n closeModal();\n };\n\n return (\n <Modal\n data-testid=\"company-video-modal-main\"\n open={open}\n onClose={closeModal}\n size=\"large\"\n closeOnDimmerClick={false}\n >\n <Modal.Header className={css(styles.CompanyModal_header)}>Preview Company Video</Modal.Header>\n <Modal.Content>\n <div className={css(styles.CompanyModal_captionLabel)}>\n {isOverLimit ? (\n <span className={css(styles.CompanyModal_errorLabel)}>\n This file is too large. Please upload a file less than 50mb.\n </span>\n ) : (\n \"File format must be mp4 and less than 50mb\"\n )}\n </div>\n <div className={css(styles.CompanyVideoModal_videoPreviewContainer)}>\n {uploading && (\n <div className={css(styles.CompanyVideoModal_uploadingOverlay)}>\n <Loader active inverted size=\"big\">\n Uploading Video\n </Loader>\n </div>\n )}\n <video\n className={css(styles.CompanyVideoModal_videoPreview)}\n autoPlay={!isOverLimit}\n loop\n muted\n controls={!uploading}\n >\n <source src={src} type=\"video/mp4\" />\n </video>\n </div>\n <div className={css(styles.CompanyModal_buttonContainer)}>\n <ButtonContainer>\n <Button onClick={closeModal} type=\"button\" variant=\"ghost\">\n Cancel\n </Button>\n </ButtonContainer>\n <Button\n data-testid=\"company-video-modal-upload\"\n type=\"button\"\n onClick={handleUpload}\n disabled={isOverLimit || uploading}\n >\n Upload\n </Button>\n </div>\n </Modal.Content>\n </Modal>\n );\n};\n\nexport default CompanyVideoModal;\n\nconst ButtonContainer = styled.div`\n margin-right: 16px;\n`;\n","import toast from \"@components/Toast\";\nimport { IconButton } from \"@components/library\";\nimport { COLORS, WINDOW_DIMENSIONS } from \"@constants\";\nimport { uploadCompanyVideo } from \"@requests/companies\";\nimport { CompanyForCompanyPage } from \"@tsTypes/index\";\nimport { ChangeEvent, useRef, useState } from \"react\";\nimport styled from \"styled-components\";\nimport CompanyVideoModal from \"../CompanyPage/CompanyVideoModal\";\nimport { EditContainer } from \"./CompanyLogo\";\n\nconst { TABLET_LANDSCAPE_MEDIA_QUERY, MOBILE_MEDIA_QUERY } = WINDOW_DIMENSIONS;\n\ninterface Props {\n company: CompanyForCompanyPage;\n showEditView: boolean;\n}\n\nfunction CompanyVideo({ company, showEditView }: Props) {\n const { id, company_name, hero_image_url } = company;\n\n const videoRef = useRef<HTMLVideoElement>(null);\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n const [video, setVideo] = useState(company.video);\n const [videoMuted, setVideoMuted] = useState(true);\n const [videoBlob, setVideoBlob] = useState<Blob | null>(null);\n const [videoFailedToLoad, setVideoFailedToLoad] = useState(false);\n const [companyVideoModalOpen, setCompanyVideoModalOpen] = useState(false);\n\n const handleFileSelect = (event: ChangeEvent<HTMLInputElement>) => {\n if (event.target?.files?.length) {\n setVideoBlob(event.target.files[0]);\n setCompanyVideoModalOpen(true);\n } else {\n setVideoBlob(null);\n setCompanyVideoModalOpen(false);\n toast.error(\"Failed to open file\");\n }\n\n // Clear the value so that the same file can be selected again\n // Otherwise, the onChange event won't fire if the same file is selected\n if (fileInputRef.current) fileInputRef.current.value = \"\";\n };\n\n const handleVideoUpload = async () => {\n try {\n if (!videoBlob) throw new Error(\"No video blob\");\n\n const videoUrl = await uploadCompanyVideo(id, videoBlob);\n setVideo({ url: videoUrl });\n\n toast.success(\"Video uploaded successfully\");\n } catch (error) {\n console.error(error);\n\n toast.error(\"Failed to upload video\");\n } finally {\n setVideoBlob(null);\n setCompanyVideoModalOpen(false);\n }\n };\n\n const noVideoContent = !video.url && !hero_image_url;\n\n return (\n <>\n {companyVideoModalOpen && Boolean(videoBlob) && (\n <CompanyVideoModal\n open={companyVideoModalOpen}\n blob={videoBlob}\n closeModal={() => {\n setVideoBlob(null);\n setCompanyVideoModalOpen(false);\n }}\n onUpload={handleVideoUpload}\n />\n )}\n <Container noVideoContent={noVideoContent}>\n {showEditView && (\n <EditContainer>\n <input\n type=\"file\"\n accept=\"video/mp4\"\n ref={fileInputRef}\n style={{ display: \"none\" }}\n onChange={handleFileSelect}\n />\n <IconButton\n variant=\"secondary\"\n iconName=\"Edit\"\n tooltipWidth=\"90px\"\n tooltipText=\"Edit video\"\n onClick={() => fileInputRef.current?.click()}\n />\n </EditContainer>\n )}\n {(() => {\n if (video.url && !videoFailedToLoad) {\n return (\n <>\n <MuteToggle>\n <IconButton\n variant=\"secondary\"\n size=\"md\"\n tooltipWidth=\"120px\"\n tooltipPosition=\"bottom\"\n iconName={videoMuted ? \"Audio Unmute\" : \"Audio Mute\"}\n tooltipText={videoMuted ? \"Unmute audio\" : \"Mute audio\"}\n onClick={() => {\n if (videoRef.current) {\n videoRef.current.muted = !videoMuted;\n setVideoMuted(!videoMuted);\n }\n }}\n />\n </MuteToggle>\n <Video\n playsInline\n autoPlay\n muted\n loop\n ref={videoRef}\n src={video.url}\n onError={() => setVideoFailedToLoad(true)}\n onCanPlay={({ currentTarget }) => currentTarget.play()}\n />\n </>\n );\n } else if (hero_image_url) {\n return (\n <CompanyVideoImageFallback src={hero_image_url} alt={`${company_name} hero image`} />\n );\n }\n return null;\n })()}\n </Container>\n </>\n );\n}\n\nconst Container = styled.div`\n display: flex;\n\n position: relative;\n\n max-width: 736px;\n\n background: ${COLORS.BLUE_LIGHT_300};\n\n ${({ noVideoContent }) =>\n noVideoContent &&\n `\n height: 100%;\n width: 100%;\n max-width: unset;\n `}\n\n border-radius: 0px 8px 8px 0px;\n\n ${TABLET_LANDSCAPE_MEDIA_QUERY} {\n ${({ noVideoContent }) => noVideoContent && `display: none;`}\n border-radius: 0px 0px 8px 8px;\n }\n`;\n\nconst Video = styled.video`\n object-fit: cover;\n\n width: 100%;\n height: 100%;\n\n aspect-ratio: 16 / 9;\n\n border-radius: 0px 8px 8px 0px;\n ${TABLET_LANDSCAPE_MEDIA_QUERY} {\n border-radius: 0px 0px 8px 8px;\n }\n`;\n\nconst CompanyVideoImageFallback = styled.img`\n object-fit: cover;\n\n width: 100%;\n height: 100%;\n\n aspect-ratio: 16 / 9;\n\n border-radius: 0px 8px 8px 0px;\n ${TABLET_LANDSCAPE_MEDIA_QUERY} {\n border-radius: 0px 0px 8px 8px;\n }\n`;\n\nconst MuteToggle = styled.div`\n position: absolute;\n bottom: 20px;\n right: 20px;\n\n z-index: 1;\n\n ${MOBILE_MEDIA_QUERY} {\n display: none;\n }\n`;\n\nexport default CompanyVideo;\n","import { STYLES, WINDOW_DIMENSIONS } from \"@constants\";\nimport styled, { css } from \"styled-components\";\n\nexport const COMPANY_PAGE_CONTENT_WIDTH = 1216;\n\nexport const layoutStyles = css`\n width: ${COMPANY_PAGE_CONTENT_WIDTH}px;\n max-width: calc(100% - ${2 * WINDOW_DIMENSIONS.PAGE_SIDE_PADDING}px);\n\n ${STYLES.HERO_MEDIA_QUERY} {\n max-width: unset;\n width: calc(100% - ${WINDOW_DIMENSIONS.PAGE_SIDE_PADDING}px);\n }\n\n ${WINDOW_DIMENSIONS.TABLET_MEDIA_QUERY} {\n width: 100%;\n padding: 0 ${WINDOW_DIMENSIONS.TABLET_SIDE_PADDING}px;\n }\n`;\n\nexport const Container = styled.div`\n display: flex;\n justify-content: center;\n\n width: 100%;\n\n ${({ background }) => background && `background: ${background};`}\n`;\n\nexport const Content = styled.div`\n display: flex;\n flex-direction: column;\n ${layoutStyles};\n\n ${({ gap }) => gap && `gap: ${gap};`}\n\n padding: ${({ padding }) => padding ?? \"40px 0\"};\n\n ${WINDOW_DIMENSIONS.TABLET_MEDIA_QUERY} {\n padding-top: 36px;\n }\n`;\n","import { Icon, IconButton, TextLink } from \"@components/library\";\nimport { COLORS, FONTS, STYLES, WINDOW_DIMENSIONS } from \"@constants\";\nimport { marketplacePath } from \"@routes/utils\";\n// @ts-ignore\nimport { CompanyVerificationStatus } from \"@tsTypes/companies.js.erb\";\nimport { CompanyForCompanyPage } from \"@tsTypes/index\";\nimport { Dispatch, SetStateAction, useState } from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport styled from \"styled-components\";\nimport CompanyDescriptionModal from \"./CompanyDescriptionModal\";\nimport CompanyLogo from \"./CompanyLogo\";\nimport CompanyVideo from \"./CompanyVideo\";\nimport { Container, Content } from \"./styledComponents\";\n\nconst { DESKTOP_MEDIA_QUERY, TABLET_LANDSCAPE_MEDIA_QUERY, TABLET_MEDIA_QUERY } = WINDOW_DIMENSIONS;\n\ninterface Props {\n company: CompanyForCompanyPage;\n setCompany: Dispatch<SetStateAction<CompanyForCompanyPage>>;\n showEditView: boolean;\n}\n\nfunction CompanyPageJumbotron({ company, setCompany, showEditView }: Props) {\n const {\n location,\n employee_count,\n researcher_count,\n rd_spend_amount,\n rd_centers_count,\n verification_status,\n } = company;\n const [companyDescriptionModalOpen, setCompanyDescriptionModalOpen] = useState(false);\n\n const history = useHistory();\n const { fromHref } = history.location;\n\n const numItems = [\n location,\n rd_centers_count,\n employee_count,\n researcher_count,\n rd_spend_amount,\n ].filter((item) => item).length;\n\n const isVerified = verification_status === CompanyVerificationStatus.VERIFIED;\n\n return (\n <>\n <CompanyDescriptionModal\n mode=\"stats\"\n company={company}\n setCompany={setCompany}\n isOpen={companyDescriptionModalOpen}\n onClose={() => setCompanyDescriptionModalOpen(false)}\n />\n <Container background={COLORS.BLUE_LIGHT_100}>\n <Content gap=\"40px\">\n {!showEditView && (\n <TextLink to={fromHref ?? marketplacePath(\"partners\")} font={FONTS.MEDIUM_2}>\n <Icon name=\"Arrow Left\" margin=\"0 4px 0 0\" data-testid=\"all-partners\" />\n All partners\n </TextLink>\n )}\n <Jumbotron>\n <CompanyLogo company={company} showEditView={showEditView} />\n {isVerified && <CompanyVideo company={company} showEditView={showEditView} />}\n </Jumbotron>\n <CompanyStats>\n {showEditView && (\n <IconButtonContainer>\n <IconButton\n variant=\"secondary\"\n iconName=\"Edit\"\n onClick={() => {\n setCompanyDescriptionModalOpen(true);\n }}\n />\n </IconButtonContainer>\n )}\n <CompanyStatItems numItems={numItems}>\n {location && (\n <CompanyStatItem>\n <Icon name=\"Location\" color={COLORS.BLUE_LIGHT_600} />\n {location}\n </CompanyStatItem>\n )}\n {employee_count && (\n <CompanyStatItem>\n <Icon name=\"Employees\" color={COLORS.BLUE_LIGHT_600} />\n {employee_count} employees\n </CompanyStatItem>\n )}\n {researcher_count && (\n <CompanyStatItem>\n <Icon name=\"Employees\" color={COLORS.BLUE_LIGHT_600} />\n {researcher_count} researchers\n </CompanyStatItem>\n )}\n {rd_centers_count && (\n <CompanyStatItem>\n <Icon name=\"Organization\" color={COLORS.BLUE_LIGHT_600} />\n {rd_centers_count} R&D center{rd_centers_count > 1 ? \"s\" : \"\"}\n </CompanyStatItem>\n )}\n {rd_spend_amount && (\n <CompanyStatItem>\n <Icon name=\"Funding\" color={COLORS.BLUE_LIGHT_600} />\n {rd_spend_amount} in R&D spend\n </CompanyStatItem>\n )}\n </CompanyStatItems>\n </CompanyStats>\n </Content>\n </Container>\n </>\n );\n}\n\nconst Jumbotron = styled.div`\n display: flex;\n background: ${COLORS.BLUE_LIGHT_300};\n border-radius: 8px;\n\n width: 100%;\n\n ${TABLET_MEDIA_QUERY} {\n flex-direction: column;\n }\n`;\n\nconst CompanyStats = styled.div`\n display: inline-flex;\n width: 100%;\n gap: 24px;\n\n ${DESKTOP_MEDIA_QUERY} {\n gap: 8px;\n }\n`;\n\nconst CompanyStatItem = styled.div`\n display: inline-flex;\n align-items: center;\n gap: 6px;\n\n max-width: 100%;\n\n ${STYLES.ONE_LINE_ALT}\n\n color: ${COLORS.BLUE_900};\n\n ${TABLET_MEDIA_QUERY} {\n text-overflow: ellipsis;\n }\n`;\n\nconst IconButtonContainer = styled.div`\n ${TABLET_MEDIA_QUERY} {\n display: none;\n }\n`;\n\nconst CompanyStatItems = styled.div`\n display: inline-flex;\n align-items: center;\n\n width: 100%;\n max-width: 1600px;\n\n ${FONTS.MEDIUM_1}\n\n margin: 0 6px 0 0;\n\n ${({ numItems }) =>\n numItems > 4\n ? `\n justify-content: space-between;\n ${FONTS.MEDIUM_2}\n `\n : `gap: 96px`};\n\n ${DESKTOP_MEDIA_QUERY} {\n gap: 32px;\n & ${CompanyStatItem}:nth-of-type(1n+5) {\n display: none;\n }\n }\n\n ${TABLET_LANDSCAPE_MEDIA_QUERY} {\n gap: 24px;\n & ${CompanyStatItem}:nth-of-type(1n+4) {\n display: none;\n }\n }\n\n ${TABLET_MEDIA_QUERY} {\n display: none;\n }\n`;\n\nexport default CompanyPageJumbotron;\n","import { ReactNode } from \"react\";\nimport styled from \"styled-components\";\n\nimport { Button } from \"@components/library\";\nimport { COLORS, FONTS, WINDOW_DIMENSIONS } from \"@constants\";\n\nconst { MOBILE_MEDIA_QUERY, TABLET_LANDSCAPE_MEDIA_QUERY } = WINDOW_DIMENSIONS;\n\ninterface Props {\n iconSrc: any;\n title: string;\n subtitle: ReactNode;\n buttonText: string;\n maxWidth?: string;\n onClick: () => void;\n}\n\nfunction CompanyCTABanner({ iconSrc, title, subtitle, buttonText, maxWidth, onClick }: Props) {\n return (\n <Container maxWidth={maxWidth}>\n <Left>\n <img src={iconSrc} alt=\"paper\" />\n <div>\n <Title>{title}</Title>\n <Subtitle>{subtitle}</Subtitle>\n </div>\n </Left>\n <Button variant=\"secondary\" iconName=\"Add\" onClick={onClick} width=\"245px\">\n {buttonText}\n </Button>\n </Container>\n );\n}\n\nconst Container = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 24px;\n\n width: 100%;\n ${({ maxWidth }) => maxWidth && `max-width: ${maxWidth};`}\n\n padding: 24px 40px;\n\n border: solid 1px ${COLORS.NEUTRAL_200};\n border-radius: 12px;\n\n ${TABLET_LANDSCAPE_MEDIA_QUERY} {\n flex-direction: column;\n gap: 16px;\n }\n\n ${MOBILE_MEDIA_QUERY} {\n display: none;\n }\n`;\n\nconst Title = styled.div`\n ${FONTS.HEADING_4_REGULAR}\n`;\n\nconst Subtitle = styled.div`\n ${FONTS.REGULAR_1}\n`;\n\nconst Left = styled.div`\n display: flex;\n gap: 24px;\n align-items: center;\n`;\n\nexport default CompanyCTABanner;\n","import { Button, InputTooltip } from \"@components/library\";\nimport { COLORS } from \"@constants\";\nimport { FormEvent, ReactNode } from \"react\";\nimport styled from \"styled-components\";\n\ninterface Props {\n onSubmit: (e: FormEvent<HTMLFormElement>) => void;\n onCancel: () => void;\n children: ReactNode;\n tooltipContent?: ReactNode;\n disabled?: boolean;\n withPlainStyles?: boolean;\n}\n\nfunction CompanyEditForm({\n onSubmit,\n onCancel,\n children,\n tooltipContent,\n disabled,\n withPlainStyles = false,\n}: Props) {\n const input = (\n <Form onSubmit={onSubmit} withPlainStyles={withPlainStyles}>\n <Top>{children}</Top>\n <Bottom>\n <Button type=\"submit\" disabled={disabled}>\n Save\n </Button>\n <Button variant=\"secondary\" onClick={onCancel}>\n Cancel\n </Button>\n </Bottom>\n </Form>\n );\n\n return tooltipContent ? (\n <Container>\n <InputTooltip content={tooltipContent} width=\"310px\" arrowOffsetTop=\"85px\">\n {input}\n </InputTooltip>\n </Container>\n ) : (\n input\n );\n}\n\nconst Container = styled.div`\n width: 100%;\n max-width: 844px; ;\n`;\nconst Form = styled.form`\n display: flex;\n flex-direction: column;\n gap: 36px;\n width: 100%;\n max-width: 844px;\n padding: 36px;\n ${({ withPlainStyles }) =>\n !withPlainStyles &&\n `\n border-radius: 12px;\n border: 1px solid ${COLORS.NEUTRAL_200};\n background: ${COLORS.NEUTRAL_50};\n `}\n`;\n\nconst Top = styled.div`\n display: flex;\n flex-direction: column;\n gap: 36px;\n width: 100%;\n`;\n\nconst Bottom = styled.div`\n display: flex;\n justify-content: flex-start;\n flex-direction: row-reverse;\n gap: 20px;\n`;\n\nexport default CompanyEditForm;\n","import styled from \"styled-components\";\n\nconst List = styled.ul`\n margin: 0;\n padding-left: 20px;\n`;\n\nconst TOOLTIP_CONTENT = {\n introduction: (\n <>\n <b>Pro Tips</b>\n <List>\n <li>\n If possible, focus on a succinct description of your organization’s R&D mission\n </li>\n <li>You can also use your organization's overall mission or profile</li>\n </List>\n </>\n ),\n description: (\n <>\n <b>Pro Tips</b>\n <List>\n <li>Highlight your organization’s approach to innovation or research</li>\n <li>Describe your team's expertise and accomplishments</li>\n </List>\n </>\n ),\n research_interests: (\n <>\n <b>Pro Tips</b>\n <List>\n <li>Showcase your organization’s capabilities or expertise in this area</li>\n <li>\n Include high level accomplishments that could help researchers understand this area of\n interest better\n </li>\n </List>\n <br />\n </>\n ),\n};\n\nexport default TOOLTIP_CONTENT;\n","import toast from \"@components/Toast\";\nimport {\n Icon,\n KeywordsDropdown,\n MultiSelectDropdown,\n Switch,\n TextInput,\n Tooltip,\n} from \"@components/library\";\nimport { DropdownOption } from \"@components/library/Dropdowns/DropdownOption\";\nimport { FONTS } from \"@constants\";\nimport { RootState } from \"@redux/store\";\nimport { createCompanyResearchInterest, updateCompanyResearchInterest } from \"@requests/companies\";\nimport {\n CompanyForCompanyPage,\n CompanyPageResearchInterest,\n RfpRequestForCard,\n} from \"@tsTypes/index\";\nimport { getOptionFromValue } from \"@utils/dropdownUtils\";\nimport { sortRfps } from \"@utils/rfpUtils\";\nimport { Dispatch, FormEvent, SetStateAction, useEffect, useState } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { Link } from \"react-router-dom\";\nimport styled from \"styled-components\";\nimport CompanyEditForm from \"./CompanyEditForm\";\nimport TOOLTIP_CONTENT from \"./tooltipContent\";\n\ninterface Props {\n interest?: CompanyPageResearchInterest;\n onClose: (interestId: number) => void;\n company: CompanyForCompanyPage;\n setCompany: Dispatch<SetStateAction<CompanyForCompanyPage>>;\n isInRfpForm?: boolean;\n}\n\ntype RfpDropdownOption = DropdownOption & { id: number };\n\nconst getRfpOptionFromValue = (request: RfpRequestForCard): RfpDropdownOption => ({\n value: request.title ?? \"\",\n label: request.title ?? \"\",\n id: request.requestable.id,\n});\n\nconst SUMMARY_CHAR_LIMIT = 400;\n\nfunction ResearchInterestInput({\n interest,\n onClose,\n company,\n setCompany,\n isInRfpForm = false,\n}: Props) {\n const [title, setTitle] = useState(interest?.title ?? \"\");\n const [summary, setSummary] = useState(interest?.summary ?? \"\");\n const [keywordsOptions, setKeywordOptions] = useState<DropdownOption[]>(\n (interest?.keywords.map(getOptionFromValue) as DropdownOption[]) ?? []\n );\n const [rfps, setRfps] = useState<RfpDropdownOption[]>(\n interest?.rfp_requests.map(getRfpOptionFromValue) ?? []\n );\n const [isOpenCallActive, setIsOpenCallActive] = useState(\n interest?.open_call_request?.enabled ?? true\n );\n const [isSubmitting, setIsSubmitting] = useState(false);\n\n const subscription = useSelector((state: RootState) => state.company.subscription);\n\n const rfpOptions = sortRfps(company.rfp_requests).map(getRfpOptionFromValue);\n\n const handleSubmit = async (e: FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n\n setIsSubmitting(true);\n\n try {\n let updatedInterest: CompanyPageResearchInterest;\n const isNewInterest = !interest;\n\n if (isNewInterest) {\n const { company_research_interest, rfp_requests } = await createCompanyResearchInterest({\n companyId: company.id,\n title,\n summary,\n keywords: keywordsOptions.map((keyword) => keyword.value),\n requestForProposalIds: rfps.map((rfp) => rfp.id),\n isOpenCallActive,\n });\n\n setCompany({\n ...company,\n company_research_interests: [\n ...company.company_research_interests,\n company_research_interest,\n ],\n rfp_requests,\n });\n\n updatedInterest = company_research_interest;\n } else {\n const { company_research_interest, rfp_requests } = await updateCompanyResearchInterest({\n id: interest.id,\n title,\n summary,\n keywords: keywordsOptions.map((keyword) => keyword.value),\n requestForProposalIds: rfps.map((rfp) => rfp.id),\n isOpenCallActive,\n });\n\n const updatedInterestIndex = company.company_research_interests.findIndex(\n (researchInterest) => researchInterest.id === company_research_interest.id\n );\n const interestsCopy = [...company.company_research_interests];\n interestsCopy.splice(updatedInterestIndex, 1, company_research_interest);\n\n setCompany({\n ...company,\n company_research_interests: interestsCopy,\n rfp_requests,\n });\n\n updatedInterest = company_research_interest;\n }\n\n toast.success(\n <span>\n Successfully {isNewInterest ? \"added\" : \"updated\"} area of interest.\n {subscription?.features.open_calls && !subscription.is_expired && (\n <>\n If you’ve activated open calls\n <br />\n for this area of interest, you’ll find proposal submissions in your \n <br />\n <Link to=\"/reviewer_dashboard\">Opportunity dashboard</Link> under "{title}".\n </>\n )}\n </span>\n );\n\n onClose(updatedInterest.id);\n } catch (err) {\n toast.error(\"Failed to update area of interest\");\n\n console.error(err);\n } finally {\n setIsSubmitting(false);\n }\n };\n\n // If an RFP is added to a different interest, it should be removed from the dropdown options\n useEffect(() => {\n if (interest) {\n setRfps(interest.rfp_requests.map(getRfpOptionFromValue));\n }\n }, [interest]);\n\n return (\n <Container>\n <CompanyEditForm\n onSubmit={handleSubmit}\n onCancel={() => onClose(interest?.id ?? -1)}\n tooltipContent={!isInRfpForm && TOOLTIP_CONTENT.research_interests}\n disabled={!title || !summary || summary.length > SUMMARY_CHAR_LIMIT || isSubmitting}\n withPlainStyles={isInRfpForm}\n >\n <InputContainer>\n <TextInput\n value={title}\n label=\"Title\"\n onChange={(event) => setTitle(event.target.value)}\n placeholder=\"What is your area of interest?\"\n />\n </InputContainer>\n <InputContainer>\n <TextInput\n textarea\n value={summary}\n onChange={(event) => setSummary(event.target.value)}\n characterLimit={SUMMARY_CHAR_LIMIT}\n placeholder=\"Write a short description of your area of interest.\"\n label=\"Description\"\n />\n </InputContainer>\n <InputContainer>\n <KeywordsDropdown\n keywordType=\"area_of_expertise\"\n targetType=\"company_research_interest\"\n value={keywordsOptions.map((keyword) => keyword.value)}\n onChange={(selection) =>\n setKeywordOptions(selection.map(getOptionFromValue) as DropdownOption[])\n }\n label=\"Related Expertise Areas\"\n maxMenuHeight=\"200px\"\n />\n </InputContainer>\n {!isInRfpForm && (\n <InputContainer>\n <MultiSelectDropdown\n label=\"Opportunities\"\n onChange={(e) => setRfps(e)}\n value={rfps}\n options={rfpOptions}\n placeholder=\"Select public opportunities\"\n noOptionsMessage=\"No options. (Note: If you have private RFPs, they can't be displayed on your public company page.)\"\n />\n <DropdownNote>\n Associate past and present opportunities to this area of interest\n </DropdownNote>\n </InputContainer>\n )}\n {subscription?.features.open_calls && !subscription.is_expired && (\n <OpenCall>\n <OpenCallLabel>\n Open call for proposals\n <Tooltip\n content={\n <OpenCallTooltipContent>\n Setting the open call to <b>active</b> will add a button to this area of\n interest, and activate an open call opportunity in your Opportunities dashboard.\n You can use open calls to solicit proposals without a specific RFP.\n </OpenCallTooltipContent>\n }\n position=\"bottom\"\n tooltipWidth=\"330px\"\n arrowOffsetTop=\"-20px\"\n >\n <Icon name=\"Info\" size=\"xs\" />\n </Tooltip>\n </OpenCallLabel>\n <Switch\n checked={isOpenCallActive}\n onChange={() => setIsOpenCallActive(!isOpenCallActive)}\n labelLeft=\"Paused\"\n labelRight=\"Active\"\n />\n </OpenCall>\n )}\n </CompanyEditForm>\n </Container>\n );\n}\n\nconst Container = styled.div`\n position: relative;\n`;\nconst InputContainer = styled.div`\n display: flex;\n flex-direction: column;\n gap: 8px;\n width: 100%;\n`;\nconst DropdownNote = styled.div`\n ${FONTS.REGULAR_3};\n margin-bottom: 18px;\n`;\nconst OpenCall = styled.div`\n display: flex;\n align-items: center;\n position: absolute;\n bottom: 48px;\n`;\nconst OpenCallLabel = styled.div`\n display: flex;\n align-items: center;\n gap: 6px;\n margin-right: 24px;\n ${FONTS.SEMIBOLD_2};\n`;\nconst OpenCallTooltipContent = styled.div`\n ${FONTS.REGULAR_2};\n`;\n\nexport default ResearchInterestInput;\n","import RfpCard from \"@components/RfpCard/RfpCard\";\nimport toast from \"@components/Toast\";\nimport { Button, IconButton, SimpleConfirmationModal, Tag, TextButton } from \"@components/library\";\nimport { FONTS, WINDOW_DIMENSIONS } from \"@constants\";\nimport area_of_interest from \"@images/designSystemGraphics/area_of_interest.svg\";\nimport { toggleLoginModal } from \"@redux/actions/profileActions\";\nimport { RootState } from \"@redux/store\";\nimport { deleteCompanyResearchInterest } from \"@requests/companies\";\nimport {\n CompanyForCompanyPage,\n CompanyPageResearchInterest as CompanyPageResearchInterestType,\n} from \"@tsTypes/index\";\nimport { UserRole } from \"@tsTypes/users\";\nimport appsignal from \"@utils/appsignal\";\nimport { t } from \"@utils/i18n\";\nimport { sortRfps } from \"@utils/rfpUtils\";\nimport { renderMarkdownText } from \"@utils/textUtils\";\nimport { Dispatch, SetStateAction, useState } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { useHistory } from \"react-router-dom\";\nimport styled from \"styled-components\";\nimport CompanyCTABanner from \"./CompanyCTABanner\";\nimport ResearchInterestInput from \"./ResearchInterestInput\";\n\nconst { MOBILE_MEDIA_QUERY } = WINDOW_DIMENSIONS;\n\ninterface Props {\n interest?: CompanyPageResearchInterestType;\n company: CompanyForCompanyPage;\n setCompany: Dispatch<SetStateAction<CompanyForCompanyPage>>;\n showEditView: boolean;\n}\n\nfunction CompanyPageResearchInterest({ interest, company, setCompany, showEditView }: Props) {\n const [isEditing, setIsEditing] = useState(false);\n const [seeMoreRfps, setSeeMoreRfps] = useState(false);\n const [isDeleteConfirmationModalOpen, setIsDeleteConfirmationModalOpen] = useState(false);\n\n const currentUser = useSelector((state: RootState) => state.profiles.currentUser);\n\n const dispatch = useDispatch();\n const history = useHistory();\n\n const handleDelete = async () => {\n if (!interest) return;\n\n try {\n const { company_research_interests, rfp_requests } = await deleteCompanyResearchInterest(\n interest.id\n );\n\n if (company_research_interests) {\n setCompany({\n ...company,\n company_research_interests,\n rfp_requests,\n });\n }\n\n toast.success(\"Deleted area of interest\");\n } catch (err) {\n toast.error(\"Failed to delete area of interest\");\n appsignal.sendError(err, (span) => {\n span.setAction(\"CompanyResearchInterest#handleDelete\");\n span.setTags({\n companyResearchInterestId: String(interest.id),\n });\n });\n }\n };\n\n const handleSubmitProposalClick = () => {\n if (!currentUser.id) {\n dispatch(\n toggleLoginModal({\n open: true,\n })\n );\n return;\n }\n\n const hasExistingDraft = currentUser.profile_info.proposals.some(\n (proposal) => !proposal.completed && proposal.request_id === interest?.open_call_request.id\n );\n\n history.push(\n hasExistingDraft\n ? `/submit/open_call/${company.identifier}?select=true&interest=${interest?.open_call_request.slug}`\n : `/submit/open_call/${interest?.open_call_request.slug}`\n );\n };\n\n if (showEditView) {\n if (isEditing) {\n return (\n <ResearchInterestInput\n interest={interest}\n company={company}\n setCompany={setCompany}\n onClose={() => setIsEditing(false)}\n />\n );\n } else if (!interest) {\n const isFirstResearchInterest = company.company_research_interests.length === 0;\n return (\n <CompanyCTABanner\n maxWidth=\"1060px\"\n iconSrc={area_of_interest}\n title={\n isFirstResearchInterest\n ? \"Add your first area of interest.\"\n : \"Add more areas of interest.\"\n }\n subtitle={\n isFirstResearchInterest ? (\n <>\n Define at least 1 area of interest for your <b>public sponsor page.</b>\n </>\n ) : (\n <>\n These areas help organize your RFPs and convey your org’s research interests.\n </>\n )\n }\n buttonText=\"Add area of interest\"\n onClick={() => setIsEditing(true)}\n />\n );\n }\n }\n\n if (!interest) {\n return null;\n }\n\n const { title, summary, keywords, rfp_requests } = interest;\n\n const requestForProposals = sortRfps(rfp_requests);\n\n return (\n <>\n <SimpleConfirmationModal\n headerText={t(\n \"pages.company_page.company_research_interest.simple_confirmation_modal.header\"\n )}\n subHeaderText={t(\n \"pages.company_page.company_research_interest.simple_confirmation_modal.subheader\"\n )}\n isOpen={isDeleteConfirmationModalOpen}\n onClose={() => setIsDeleteConfirmationModalOpen(false)}\n onConfirm={handleDelete}\n confirmButtonText=\"Delete\"\n confirmIconName=\"Delete\"\n />\n <Container>\n <MainContent>\n <ResearchInterestHeader>\n {showEditView && (\n <IconContainer>\n <IconButton\n iconName=\"Edit\"\n variant=\"secondary\"\n onClick={() => setIsEditing(true)}\n />\n <IconButton\n iconName=\"Delete\"\n variant=\"destructive-secondary\"\n onClick={() => {\n setIsDeleteConfirmationModalOpen(true);\n }}\n />\n </IconContainer>\n )}\n {title}\n </ResearchInterestHeader>\n {keywords.length > 0 && (\n <Tags>\n {keywords.map((keyword) => (\n <Tag key={keyword} content={keyword} size=\"sm\" theme=\"neutral\" />\n ))}\n </Tags>\n )}\n <ResearchInterestSummary>{renderMarkdownText(summary)}</ResearchInterestSummary>\n </MainContent>\n {requestForProposals.length > 0 && (\n <RfpCardsContainer>\n <RfpCards>\n {requestForProposals.slice(0, seeMoreRfps ? undefined : 3).map((rfp) => (\n <RfpCard key={rfp.id} request={rfp} />\n ))}\n </RfpCards>\n {requestForProposals.length > 3 && (\n <div>\n <TextButton\n onClick={() => setSeeMoreRfps(!seeMoreRfps)}\n text={seeMoreRfps ? \"See less\" : `See ${requestForProposals.length - 3} more`}\n iconName={seeMoreRfps ? \"Chevron Up\" : \"Chevron Down\"}\n />\n </div>\n )}\n </RfpCardsContainer>\n )}\n {interest?.open_call_request?.enabled &&\n company.is_open_calls_accessible &&\n !showEditView &&\n currentUser.role !== UserRole.UNIVERSITY_ADMIN && (\n <OpenCallCta\n hasRfps={requestForProposals.length > 0}\n isSponsor={currentUser.role === UserRole.SPONSOR}\n >\n {t(\"pages.company_page.company_research_interest.submit_proposal_label\", {\n interest_title: interest.title ?? \"\",\n company_name: company.company_name ?? \"\",\n })}\n <div>\n <Button\n type=\"button\"\n variant=\"secondary\"\n onClick={handleSubmitProposalClick}\n margin=\"16px 0 0\"\n >\n {t(\"components.buttons.open_call_submit\")}\n </Button>\n </div>\n </OpenCallCta>\n )}\n </Container>\n </>\n );\n}\n\n// The following exported styled components are re-used in CompanyPageMoreOpporunities.tsx\n\nexport const Container = styled.div`\n display: flex;\n flex-direction: column;\n gap: 32px;\n`;\n\nexport const MainContent = styled.div`\n flex-shrink: 0;\n display: inherit;\n flex-direction: inherit;\n\n max-width: 800px;\n`;\n\nexport const RfpCardsContainer = styled.div`\n display: flex;\n flex-direction: column;\n gap: 20px;\n`;\n\nexport const RfpCards = styled.div`\n display: grid;\n grid-template-columns: 1fr 1fr 1fr;\n grid-gap: 20px;\n\n line-height: 1;\n\n ${WINDOW_DIMENSIONS.DESKTOP_MEDIA_QUERY} {\n grid-template-columns: 1fr 1fr;\n }\n ${WINDOW_DIMENSIONS.TABLET_LANDSCAPE_MEDIA_QUERY} {\n grid-template-columns: 1fr;\n }\n`;\n\nconst ResearchInterestHeader = styled.div`\n display: flex;\n align-items: center;\n gap: 16px;\n\n margin: 0 0 24px;\n\n ${FONTS.HEADING_4_SEMIBOLD}\n`;\n\nconst Tags = styled.div`\n margin: 0 0 24px;\n`;\n\nconst IconContainer = styled.div`\n display: flex;\n gap: 10px;\n\n ${MOBILE_MEDIA_QUERY} {\n display: none;\n }\n`;\n\nconst ResearchInterestSummary = styled.div`\n ${FONTS.REGULAR_1}\n`;\nconst OpenCallCta = styled.div`\n max-width: 800px;\n ${({ hasRfps }) => hasRfps && \"margin-top: 8px\"};\n ${({ isSponsor }) => isSponsor && \"pointer-events: none\"};\n ${FONTS.REGULAR_1};\n`;\n\nexport default CompanyPageResearchInterest;\n","import RfpCard from \"@components/RfpCard/RfpCard\";\nimport { InfoBanner, TextButton } from \"@components/library\";\nimport { FONTS } from \"@constants\";\nimport { CompanyForCompanyPage, RfpRequestForCard } from \"@tsTypes/index\";\nimport { t } from \"@utils/i18n\";\nimport { sortRfps } from \"@utils/rfpUtils\";\nimport { useEffect, useState } from \"react\";\nimport styled from \"styled-components\";\nimport { Container, MainContent, RfpCards, RfpCardsContainer } from \"./CompanyResearchInterest\";\n\ninterface Props {\n company: CompanyForCompanyPage;\n showEditView: boolean;\n}\n\nfunction CompanyPageMoreOpportunities({ company, showEditView }: Props) {\n const [rfps, setRfps] = useState<RfpRequestForCard[]>([]);\n const [seeMoreRfps, setSeeMoreRfps] = useState(false);\n\n useEffect(() => {\n if (company.rfp_requests) {\n setRfps(\n sortRfps(\n company.rfp_requests.filter(\n (request) => !request.requestable.company_research_interest_id\n )\n )\n );\n }\n }, [company]);\n\n if (rfps.length > 0) {\n return (\n <Container>\n <MainContent>\n <Header>\n {t(\"pages.company_page.more_opportunities.header\", { name: company.company_name })}\n </Header>\n </MainContent>\n {showEditView && (\n <Banner>\n <InfoBanner text={t(\"pages.company_page.more_opportunities.description\")} />\n </Banner>\n )}\n <RfpCardsContainer>\n <RfpCards>\n {rfps.slice(0, seeMoreRfps ? undefined : 3).map((rfp) => (\n <RfpCard key={rfp.id} request={rfp} />\n ))}\n </RfpCards>\n {rfps.length > 3 && (\n <div>\n <TextButton\n onClick={() => setSeeMoreRfps(!seeMoreRfps)}\n text={seeMoreRfps ? \"See less\" : `See ${rfps.length - 3} more`}\n iconName={seeMoreRfps ? \"Chevron Up\" : \"Chevron Down\"}\n />\n </div>\n )}\n </RfpCardsContainer>\n </Container>\n );\n }\n\n return null;\n}\n\nconst Banner = styled.div`\n width: 844px;\n`;\n\nexport const Header = styled.div`\n display: flex;\n align-items: center;\n gap: 16px;\n\n ${FONTS.HEADING_4_SEMIBOLD}\n`;\n\nexport default CompanyPageMoreOpportunities;\n","import toast from \"@components/Toast\";\nimport { IconButton, SimpleConfirmationModal, TextButton, UserPreview } from \"@components/library\";\nimport UserDropdown, { UserOption } from \"@components/library/Dropdowns/UserDropdown\";\nimport { FONTS, WINDOW_DIMENSIONS } from \"@constants\";\nimport team from \"@images/designSystemGraphics/team.svg\";\nimport { updateCompanyInfo } from \"@requests/companies\";\nimport { getCompanyMembers } from \"@requests/sponsors\";\nimport { CompanyForCompanyPage } from \"@tsTypes/index\";\nimport { UserRole } from \"@tsTypes/users\";\nimport { generateEmailDropdownOptions } from \"@utils/dropdownUtils\";\nimport { t } from \"@utils/i18n\";\nimport { Dispatch, FormEvent, SetStateAction, useEffect, useState } from \"react\";\nimport styled from \"styled-components\";\nimport CompanyCTABanner from \"./CompanyCTABanner\";\nimport CompanyEditForm from \"./CompanyEditForm\";\n\nconst { TABLET_LANDSCAPE_MEDIA_QUERY, TABLET_MEDIA_QUERY } = WINDOW_DIMENSIONS;\n\ninterface Props {\n company: CompanyForCompanyPage;\n setCompany: Dispatch<SetStateAction<CompanyForCompanyPage>>;\n showEditView: boolean;\n}\n\nfunction CompanyPageUsers({ company, setCompany, showEditView }: Props) {\n const { company_page_users } = company;\n\n const [isDeleteConfirmationModalOpen, setIsDeleteConfirmationModalOpen] = useState(false);\n const [newUserOptions, setNewUserOptions] = useState<UserOption[]>([]);\n const [dropdownOptions, setDropdownOptions] = useState<UserOption[]>([]);\n const [isEditing, setIsEditing] = useState(false);\n const [seeMore, setSeeMore] = useState(false);\n const [userIdToDelete, setUserIdToDelete] = useState<number | null>(null);\n\n const handleUpdate = async (newCompanyPageUsers: { id: number }[]) => {\n const { company: _company } = (await updateCompanyInfo(company.id, {\n company_page_user_ids: newCompanyPageUsers.map((user) => user.id),\n })) as any;\n setCompany(_company);\n };\n\n const handleAddUsers = async (e: FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n\n if (newUserOptions.length === 0) return;\n\n try {\n const newCompanyPageUsers = [\n ...company_page_users,\n ...(newUserOptions.map((option) => option.user) as { id: number }[]),\n ];\n\n await handleUpdate(newCompanyPageUsers);\n\n setIsEditing(false);\n setNewUserOptions([]);\n if (company_page_users.length > 6) setSeeMore(true);\n\n toast.success(\n t(\"pages.company_page.our_team.toast_success_add\", { count: newUserOptions.length })\n );\n } catch (err) {\n console.error(err);\n\n toast.error(t(\"pages.company_page.our_team.toast_error_add\"));\n }\n };\n\n const handleDeleteUser = async () => {\n try {\n const newCompanyPageUsers = company_page_users.filter((user) => user.id !== userIdToDelete);\n await handleUpdate(newCompanyPageUsers);\n\n setUserIdToDelete(null);\n setIsDeleteConfirmationModalOpen(false);\n\n toast.success(t(\"pages.company_page.our_team.toast_success_remove\"));\n } catch (err) {\n console.error(err);\n\n toast.error(t(\"pages.company_page.our_team.toast_error_remove\"));\n }\n };\n\n useEffect(() => {\n (async () => {\n if (isEditing) {\n const { sponsor_users } = await getCompanyMembers(company.id);\n setDropdownOptions(\n generateEmailDropdownOptions(\n sponsor_users,\n company_page_users.map((user) => user.email)\n )\n );\n }\n })();\n }, [isEditing, company_page_users]);\n\n return (\n <>\n {(() => {\n if (isEditing) {\n return (\n <EditContainer>\n <CompanyEditForm\n onSubmit={handleAddUsers}\n onCancel={() => {\n setIsEditing(false);\n setNewUserOptions([]);\n }}\n >\n <div>\n <Title>{t(\"pages.company_page.our_team.add_team_members\")}</Title>\n <UserDropdown\n maxMenuHeight=\"300px\"\n value={newUserOptions}\n options={dropdownOptions}\n onChange={setNewUserOptions}\n />\n </div>\n </CompanyEditForm>\n </EditContainer>\n );\n }\n if (showEditView) {\n return (\n <EditContainer>\n <CompanyCTABanner\n iconSrc={team}\n title={t(\"pages.company_page.our_team.display_team_members\")}\n subtitle={t(\"pages.company_page.our_team.display_team_members_subtitle\")}\n buttonText={t(\"pages.company_page.our_team.select_team_members_button\")}\n onClick={() => setIsEditing(true)}\n maxWidth=\"1060px\"\n />\n </EditContainer>\n );\n }\n })()}\n {company_page_users.length > 0 && (\n <>\n <SimpleConfirmationModal\n headerText={t(\"pages.company_page.our_team.remove_team_member_modal.header\")}\n subHeaderText={t(\"pages.company_page.our_team.remove_team_member_modal.subheader\")}\n confirmButtonText={t(\n \"pages.company_page.our_team.remove_team_member_modal.confirm_button\"\n )}\n isOpen={isDeleteConfirmationModalOpen}\n onClose={() => {\n setUserIdToDelete(null);\n setIsDeleteConfirmationModalOpen(false);\n }}\n onConfirm={handleDeleteUser}\n confirmIconName=\"Delete\"\n />\n <Container>\n {company_page_users.slice(0, seeMore ? company_page_users.length : 6).map((user) => (\n <DeleteUserPreviewWrapper key={user.id}>\n {showEditView && (\n <IconButtonWrapper>\n <IconButton\n variant=\"destructive-secondary\"\n iconName=\"Delete\"\n tooltipText=\"Remove\"\n tooltipPosition=\"bottom\"\n onClick={() => {\n setUserIdToDelete(user.id);\n setIsDeleteConfirmationModalOpen(true);\n }}\n />\n </IconButtonWrapper>\n )}\n <UserPreview size=\"xl\" user={user} userRole={UserRole.SPONSOR} />\n </DeleteUserPreviewWrapper>\n ))}\n </Container>\n {company_page_users.length > 6 && (\n <div>\n <TextButton\n onClick={() => setSeeMore(!seeMore)}\n text={seeMore ? \"See less\" : `See ${company_page_users.length - 6} more`}\n iconName={seeMore ? \"Chevron Up\" : \"Chevron Down\"}\n />\n </div>\n )}\n </>\n )}\n </>\n );\n}\n\nconst EditContainer = styled.div`\n display: flex;\n flex-direction: column;\n`;\n\nconst Container = styled.div`\n display: grid;\n gap: 24px;\n max-width: 1300px;\n grid-template-columns: 1fr 1fr 1fr;\n ${TABLET_LANDSCAPE_MEDIA_QUERY} {\n grid-template-columns: 1fr 1fr;\n }\n ${TABLET_MEDIA_QUERY} {\n grid-template-columns: 1fr;\n }\n`;\n\nconst DeleteUserPreviewWrapper = styled.div`\n position: relative;\n width: 100%;\n`;\nconst IconButtonWrapper = styled.div`\n position: absolute;\n bottom: 0px;\n left: 0px;\n\n ${WINDOW_DIMENSIONS.MOBILE_MEDIA_QUERY} {\n display: none;\n }\n`;\n\nconst Title = styled.div`\n ${FONTS.SEMIBOLD_2}\n margin-bottom: 8px;\n`;\n\nexport default CompanyPageUsers;\n","import { Button } from \"@components/library\";\nimport { COLORS } from \"@constants\";\nimport { RootState } from \"@redux/store\";\nimport { CompanyForCompanyPage } from \"@tsTypes/index\";\nimport { SponsorLicenseType } from \"@tsTypes/sponsorProfiles\";\nimport { useSelector } from \"react-redux\";\nimport styled from \"styled-components\";\nimport { Container, Content } from \"./styledComponents\";\n\ninterface Props {\n company: CompanyForCompanyPage;\n viewLive: boolean;\n}\n\nfunction CompanyPageViewLiveBanner({ company, viewLive }: Props) {\n const currentUser = useSelector((state: RootState) => state.profiles.currentUser);\n\n const showViewLiveButton =\n currentUser.profile_info?.license === SponsorLicenseType.PREMIUM &&\n currentUser.profile_info?.is_admin &&\n currentUser.profile_info?.company_id === company.id;\n\n if (showViewLiveButton && !viewLive) {\n return (\n <>\n <Divider />\n <Container>\n <Content>\n <div>\n <Button\n variant=\"secondary\"\n width=\"min-content\"\n iconName=\"View\"\n onClick={() => {\n window.open(`/company/${company.identifier}?live=true`, \"_blank\");\n }}\n >\n View live company page\n </Button>\n </div>\n </Content>\n </Container>\n </>\n );\n }\n\n return null;\n}\n\nconst Divider = styled.div`\n border-top: 1px solid ${COLORS.NEUTRAL_200};\n`;\n\nexport default CompanyPageViewLiveBanner;\n","import { Dispatch, FormEvent, SetStateAction, useEffect, useState } from \"react\";\nimport styled from \"styled-components\";\n\nimport toast from \"@components/Toast\";\nimport { IconButton, TextInput } from \"@components/library\";\nimport { FONTS, WINDOW_DIMENSIONS } from \"@constants\";\nimport paper from \"@images/icons/paper.svg\";\nimport { updateCompanyInfo } from \"@requests/companies\";\nimport { CompanyForCompanyPage } from \"@tsTypes/index\";\nimport CompanyCTABanner from \"./CompanyCTABanner\";\nimport CompanyEditForm from \"./CompanyEditForm\";\nimport TOOLTIP_CONTENT from \"./tooltipContent\";\n\nconst { MOBILE_MEDIA_QUERY } = WINDOW_DIMENSIONS;\n\ninterface Props {\n field: \"introduction\" | \"description\";\n company: CompanyForCompanyPage;\n setCompany: Dispatch<SetStateAction<CompanyForCompanyPage>>;\n showEditView: boolean;\n}\n\nfunction CompanyTextInput({ company, setCompany, field, showEditView }: Props) {\n const [value, setValue] = useState(company[field] ?? \"\");\n const [isEditing, setIsEditing] = useState(false);\n\n const title = field === \"introduction\" ? \"Intro statement\" : \"Overview\";\n const charLimit = field === \"introduction\" ? 200 : 800;\n\n const handleSubmit = async (e: FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n\n try {\n const { company: _company } = (await updateCompanyInfo(company.id, {\n [field]: value,\n })) as any;\n\n toast.success(`Updated ${title.toLowerCase()}`);\n setCompany(_company);\n setIsEditing(false);\n } catch (err) {\n toast.error(`Failed to update ${title.toLowerCase()}`);\n\n console.error(err);\n }\n };\n\n useEffect(() => {\n if (isEditing) {\n setValue(company[field] ?? \"\");\n }\n }, [isEditing]);\n\n if (isEditing) {\n return (\n <CompanyEditForm\n onSubmit={handleSubmit}\n onCancel={() => setIsEditing(false)}\n tooltipContent={TOOLTIP_CONTENT[field]}\n disabled={value.length > charLimit}\n >\n <TextInput\n textarea\n value={value}\n onChange={(event) => setValue(event.target.value)}\n characterLimit={charLimit}\n startingHeight={field === \"introduction\" ? \"100px\" : \"150px\"}\n placeholder={`You can use this content space to provide more detail about your ${\n field === \"introduction\" ? \"organization\" : \"team\"\n }.`}\n label={title}\n />\n </CompanyEditForm>\n );\n }\n\n if (showEditView && !company[field]) {\n if (field === \"introduction\") {\n return (\n <CompanyCTABanner\n maxWidth=\"1060px\"\n iconSrc={paper}\n title=\"Add an introductory statement.\"\n subtitle=\"You can use this content space to provide more detail about your organization.\"\n buttonText=\"Add intro statement\"\n onClick={() => setIsEditing(true)}\n />\n );\n }\n return (\n <CompanyCTABanner\n maxWidth=\"1060px\"\n iconSrc={paper}\n title=\"Add a team overview.\"\n subtitle=\"You can use this content space to provide more detail about your team.\"\n buttonText=\"Add team overview\"\n onClick={() => setIsEditing(true)}\n />\n );\n }\n\n if (!company[field]) {\n return null;\n }\n\n return (\n <Container>\n {showEditView && (\n <IconButtonContainer>\n <IconButton iconName=\"Edit\" variant=\"secondary\" onClick={() => setIsEditing(true)} />\n </IconButtonContainer>\n )}\n <Text field={field}>{company[field]}</Text>\n </Container>\n );\n}\n\nconst Container = styled.div`\n display: flex;\n gap: 20px;\n`;\n\nconst IconButtonContainer = styled.div`\n height: min-content;\n\n margin: 6px 0px 0;\n\n ${MOBILE_MEDIA_QUERY} {\n display: none;\n }\n`;\nconst Text = styled.div`\n display: flex;\n align-items: center;\n max-width: 844px;\n ${({ field }) => {\n switch (field) {\n case \"introduction\":\n return `\n ${FONTS.HEADING_4_REGULAR};\n line-height: 42px;\n `;\n case \"description\":\n return `\n ${FONTS.REGULAR_1};\n `;\n }\n }}\n\n white-space: pre-wrap;\n`;\n\nexport default CompanyTextInput;\n","import RequestForStartupCardWide from \"@components/Cards/RequestForStartupCardWide\";\nimport { Button, Icon } from \"@components/library\";\nimport { COLORS, FEATURE_FLAGS, FONTS, WINDOW_DIMENSIONS } from \"@constants\";\nimport { useSearchParams } from \"@hooks/router\";\nimport { useHubspotCTAs } from \"@hooks/useHubspotCTAs\";\nimport { toggleLoginModal } from \"@redux/actions/profileActions\";\nimport { RootState } from \"@redux/store\";\nimport { getCompanyForCompanyPage } from \"@requests/companies\";\nimport { requestToJoinCompanyNetworkFromDigest } from \"@requests/companyNetworkScientists\";\nimport { marketplacePath } from \"@routes/utils\";\n// @ts-ignore\nimport { CompanyVerificationStatus } from \"@tsTypes/companies.js.erb\";\nimport { CompanyForCompanyPage } from \"@tsTypes/index\";\nimport { UserRole } from \"@tsTypes/users\";\nimport { setPrevUrlCookie } from \"@utils/authUtils\";\nimport { t } from \"@utils/i18n\";\nimport { canEditCompanyPage } from \"@utils/sponsorUtils\";\nimport { useEffect, useState } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { useHistory, useParams } from \"react-router-dom\";\nimport styled from \"styled-components\";\nimport CompanyPageJumbotron from \"./CompanyPageJumbotron\";\nimport CompanyPageMoreOpportunities from \"./CompanyPageMoreOpportunities\";\nimport CompanyPageUsers from \"./CompanyPageUsers\";\nimport CompanyPageViewLiveBanner from \"./CompanyPageViewLiveBanner\";\nimport CompanyResearchInterest from \"./CompanyResearchInterest\";\nimport CompanyTextInput from \"./CompanyTextInput\";\nimport { Container, layoutStyles } from \"./styledComponents\";\n\nfunction CompanyPage() {\n const { identifier } = useParams();\n const history = useHistory();\n const dispatch = useDispatch();\n\n const [searchParams, setSearchParams] = useSearchParams();\n const asLiveView = searchParams.get(\"live\") === \"true\";\n\n const [company, setCompany] = useState<CompanyForCompanyPage>({} as CompanyForCompanyPage);\n\n const currentUser = useSelector((state: RootState) => state.profiles.currentUser);\n\n // Scientist join company network from digest email\n useEffect(() => {\n const isJoiningFromDigest = searchParams.get(\"join\") === \"true\";\n if (!isJoiningFromDigest) return;\n if (!currentUser.id) {\n setPrevUrlCookie(window.location.href);\n dispatch(toggleLoginModal({ open: true, landing: \"login\" }));\n return;\n }\n if (currentUser.role !== UserRole.SCIENTIST) return;\n requestToJoinCompanyNetworkFromDigest(identifier);\n searchParams.delete(\"join\");\n setSearchParams(searchParams);\n }, []);\n\n useHubspotCTAs([company.id]);\n\n useEffect(() => {\n (async () => {\n try {\n const response = await getCompanyForCompanyPage(identifier);\n setCompany(response.company);\n } catch (error) {\n console.error(error);\n history.push(marketplacePath());\n }\n })();\n }, [identifier]);\n\n // Until the company is loaded, return nothing\n if (!company.id) return null;\n\n const {\n company_name,\n company_research_interests,\n company_page_users,\n description,\n verification_status,\n request_for_startup_requests,\n } = company;\n\n const hasResearchInterests = company_research_interests.length > 0;\n const isUnverified =\n FEATURE_FLAGS.UNCLAIMED_COMPANY_PAGE &&\n verification_status !== CompanyVerificationStatus.VERIFIED;\n const showTeamSection =\n (Number(company_page_users?.length) > 0 || Number(description?.length) > 0) && !isUnverified;\n const showEditView = canEditCompanyPage(currentUser, company, asLiveView);\n\n const reasonsToClaim = [\n \"Access a network of researchers specifically interested in your organization\",\n \"Post to the Halo marketplace to accelerate your research & development teams\",\n \"Showcase your innovation brand to over 4500 scientific innovators actively looking to partner\",\n ];\n\n return (\n <>\n <CompanyPageViewLiveBanner company={company} viewLive={asLiveView} />\n <CompanyPageJumbotron company={company} setCompany={setCompany} showEditView={showEditView} />\n <ContentContainer>\n <MainContent isUnverified={isUnverified}>\n <TopContainer>\n <CompanyInfo>\n <CompanyTextInput\n field=\"introduction\"\n company={company}\n setCompany={setCompany}\n showEditView={showEditView}\n />\n <PartneringInterests>\n {(hasResearchInterests || showEditView) && (\n <>\n {!isUnverified && (\n <Header>{t(\"pages.company_page.partnering_interests.header\")}</Header>\n )}\n <CompanyResearchInterest\n company={company}\n setCompany={setCompany}\n showEditView={showEditView}\n />\n {company_research_interests.map((cri) => (\n <CompanyResearchInterest\n key={cri.id}\n interest={cri}\n company={company}\n setCompany={setCompany}\n showEditView={showEditView}\n />\n ))}\n </>\n )}\n <CompanyPageMoreOpportunities company={company} showEditView={showEditView} />\n </PartneringInterests>\n </CompanyInfo>\n {isUnverified && (\n <UnclaimedBox>\n <UnclaimedBoxHeader>This is an unclaimed page</UnclaimedBoxHeader>\n <div>Is this your organization?</div>\n <div className=\"hs-cta-trigger-button hs-cta-trigger-button-120195094169\">\n <Button variant=\"orange\" onClick={() => {}} size=\"sm\" margin=\"16px 0 24px\">\n Claim this page\n </Button>\n </div>\n <ReasonsToClaim>\n <ReasonToClaimHeader>Reasons to claim</ReasonToClaimHeader>\n {reasonsToClaim.map((reason) => (\n <ReasonToClaim key={reason}>\n <Icon name=\"Tick\" color={COLORS.BLACK} size=\"md\" margin=\"0 12px 0 0\" />\n {reason}\n </ReasonToClaim>\n ))}\n </ReasonsToClaim>\n </UnclaimedBox>\n )}\n </TopContainer>\n {request_for_startup_requests.length > 0 && (\n <StartupPrograms>\n <Header>{t(\"pages.company_page.startup_programs.header\")}</Header>\n {request_for_startup_requests.map((request) => (\n <RequestForStartupCardWide key={\"rfs-\" + request.id} request={request} />\n ))}\n </StartupPrograms>\n )}\n {isUnverified ? (\n <UnclaimedDisclaimer>\n <Icon name=\"Info\" color={COLORS.NEUTRAL_500} size=\"xs\" margin=\"4px 12px 0 0\" />\n {`This listing was automatically created by Halo and is not currently maintained by, endorsed by, or affiliated with ${company_name}.`}\n </UnclaimedDisclaimer>\n ) : (\n <OurTeam>\n {(showTeamSection || showEditView) && (\n <Header>{t(\"pages.company_page.our_team.header\")}</Header>\n )}\n <CompanyTextInput\n field=\"description\"\n company={company}\n setCompany={setCompany}\n showEditView={showEditView}\n />\n <CompanyPageUsers\n company={company}\n setCompany={setCompany}\n showEditView={showEditView}\n />\n </OurTeam>\n )}\n </MainContent>\n </ContentContainer>\n </>\n );\n}\n\nconst ContentContainer = styled(Container)`\n padding: 64px 0;\n`;\n\nconst MainContent = styled.div`\n display: flex;\n flex-direction: column;\n gap: ${({ isUnverified }) => (isUnverified ? 88 : 96)}px;\n margin: 0 auto;\n ${layoutStyles};\n`;\nconst CompanyInfo = styled.div`\n display: flex;\n flex-direction: column;\n gap: 96px;\n margin: 0 auto;\n min-width: 0;\n max-width: 100%;\n`;\nconst TopContainer = styled.div`\n display: flex;\n justify-content: space-between;\n gap: 108px;\n ${WINDOW_DIMENSIONS.TABLET_LANDSCAPE_MEDIA_QUERY} {\n flex-direction: column-reverse;\n gap: 88px;\n }\n`;\nconst PartneringInterests = styled.div`\n display: flex;\n flex-direction: column;\n gap: 88px;\n`;\nconst Header = styled.div`\n ${FONTS.HEADING_2_SEMIBOLD}\n`;\nconst StartupPrograms = styled.div`\n display: flex;\n flex-direction: column;\n gap: 64px;\n max-width: 952px;\n`;\nconst UnclaimedDisclaimer = styled.div`\n display: flex;\n padding: 24px 24px 0 0;\n max-width: 655px;\n ${FONTS.REGULAR_2};\n color: ${COLORS.NEUTRAL_500};\n border-top: 1px solid ${COLORS.NEUTRAL_300};\n`;\nconst OurTeam = styled.div`\n display: flex;\n flex-direction: column;\n gap: 64px;\n`;\nconst UnclaimedBox = styled.div`\n display: flex;\n flex-direction: column;\n width: 324px;\n min-width: 324px;\n height: fit-content;\n padding: 24px;\n background-color: ${COLORS.ORANGE_50};\n border-radius: 12px;\n ${FONTS.MEDIUM_2};\n ${WINDOW_DIMENSIONS.TABLET_LANDSCAPE_MEDIA_QUERY} {\n width: 100%;\n }\n`;\nconst UnclaimedBoxHeader = styled.div`\n ${FONTS.HEADING_4_SEMIBOLD}\n margin: 0 0 16px;\n`;\nconst ReasonsToClaim = styled.div`\n display: flex;\n flex-direction: column;\n gap: 16px;\n padding-top: 24px;\n border-top: 1px solid ${COLORS.NEUTRAL_300};\n`;\nconst ReasonToClaimHeader = styled.div`\n ${FONTS.SEMIBOLD_1}\n`;\nconst ReasonToClaim = styled.div`\n display: flex;\n ${FONTS.REGULAR_2};\n`;\n\nexport default CompanyPage;\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","TIPS","RequestToJoinNetworkModal","isOpen","onClose","companyName","isCompanyVerified","profileId","BlankModal","Header","t","Subheader","t_html","List","tip","Item","ButtonContainer","HEADING_4_SEMIBOLD","SEMIBOLD_2","CompanyNetworkScientistStatus","BannerCtaSuccess","MEDIUM_3","BLUE_900","TooltipText","buttonProps","requestToJoinNetworkModalOpen","setRequestToJoinNetworkModalOpen","_useState4","isSubmitting","setIsSubmitting","_useState6","companyNetworkScientist","setCompanyNetworkScientist","dispatch","useDispatch","identifier","useEffect","role","UserRole","SCIENTIST","response","getCompanyNetworkScientist","scientistProfileId","profile_info","companyId","handleClick","stopPropagation","async","_objectSpread","company_network_scientist","requestToJoinCompanyNetwork","console","error","message","joinNetwork","SPONSOR","UNIVERSITY_ADMIN","followUnfollowCompany","is_following","toast","success","t_link","Follow","object","SegmentEventObject","Company","Unfollow","finishFollowUnfollowCompany","isFollowing","appsignal","sendError","setAction","setTags","companyIdentifier","String","currentUserId","toggleFollow","setPrevUrlCookie","location","toggleLoginModal","open","followedCompaniesInfo","followed_companies_info","some","followedCompany","_Fragment","profile_id","BLUE_LIGHT_600","ACCEPTED","Tooltip","position","contentWidth","isActive","disabled","canEditCompanyPage","viewLive","profile","is_admin","company_id","sortCompanyMembers","members","nameSortDirection","assignmentSortDirection","_members","sort","a","b","first_name","roles","length","is_super_admin","sortReviewTeamMembers","roleAsNum","RoleName","REQUEST_DRAFT_EDITOR","REQUEST_LEAD","REQUEST_COMMENTER","REQUEST_EXTERNAL_LEAD","REQUEST_EXTERNAL_COMMENTER","COMPANY_SUPER_ADMIN","COMPANY_ADMIN","filter","member","complete","findRequestRoleNameOnUser","countReviewTeamRoles","resource_type","setCompany","mode","setLocation","employee_count","employeeCount","setEmployeeCount","researcher_count","researcherCount","setResearcherCount","_useState8","rd_spend_amount","rdSpendAmount","setRdSpendAmount","_useState10","rd_centers_count","rdCentersCount","setRdCentersCount","_useState12","company_type","companyType","setCompanyType","_useState14","description","setDescription","_useState16","countryOptions","setCountryOptions","api","get","data","getCountryNames","getOptionFromValue","headerText","Form","onSubmit","_company","updateCompanyInfo","err","Label","SingleSelectDropdown","isClearable","maxMenuHeight","value","options","onChange","newOption","Object","values","CompanySize","CompanySpend","TextInput","min","Number","CompanyType","textarea","characterLimit","startingHeight","handleCancel","form","label","getZoomedImg","imageSrc","zoomLevel","image","blob","Promise","resolve","reject","Image","addEventListener","setAttribute","src","URL","createObjectURL","canvas","document","createElement","ctx","getContext","height","clearRect","scale","Math","w","h","left","top","drawImage","toBlob","file","CompanyLogoModal","closeModal","onUpload","zoom","setZoom","closeOnDimmerClick","ImageContainer","CropContainer","ImagePreview","style","transform","alt","ZoomImageContainer","SliderContainer","SliderInput","max","step","event","zoomBlob","showZoomedImage","img","input","NEUTRAL_300","TABLET_LANDSCAPE_MEDIA_QUERY","TABLET_MEDIA_QUERY","isUnverified","noVideoContent","Logo","NoLogoIconContainer","CompanyName","h1","HEADING_1_SEMIBOLD","ONE_LINE_ALT","EditContainer","BLUE_LIGHT_250","showEditView","video","hero_image_url","fileInputRef","useRef","logo","setLogo","logoBlob","setLogoBlob","logoFailedToLoad","setLogoFailedToLoad","companyLogoModalOpen","setCompanyLogoModalOpen","FEATURE_FLAGS","UNCLAIMED_COMPANY_PAGE","Error","logoUrl","uploadCompanyImage","accept","ref","display","files","current","IconButton","tooltipWidth","tooltipText","click","onError","Date","getTime","NEUTRAL_400","CompanyNetworkCta","styles","StyleSheet","create","CompanyModal_modal","overflow","JS_FONTS","CompanyModal_header","fontFamily","border","paddingBottom","CompanyModal_formLabel","margin","CompanyModal_fieldLabel","REGULAR_3","CompanyModal_firstformLabel","CompanyModal_textarea","resize","padding","CompanyModal_buttonContainer","justifyContent","marginTop","CompanyPartnerModal_radioGroup","alignItems","marginBottom","CompanyPartnerModal_radio","CompanyPartnerModal_radioLabel","marginLeft","CompanyModal_dropdown","borderStyle","borderWidth","borderColor","CompanyPartnerModal_dropdown","CompanyModal_smallText","CompanyModal_strongText","CompanyModal_errorContainer","flexDirection","RED","CompanyModal_captionLabel","REGULAR_1","CompanyModal_errorLabel","CompanyLogoModal_imageContainer","borderRadius","placeItems","CompanyLogoModal_imagePreview","zIndex","CompanyLogoModal_imageZoomContainer","CompanyLogoModal_imageZoomButton","CompanyLogoModal_imageZoomInput","outline","boxShadow","CompanyVideoModal_videoPreviewContainer","CompanyVideoModal_videoPreview","maxHeight","background","CompanyVideoModal_uploadingOverlay","backgroundColor","CompanyVideoModal","uploading","setUploading","isOverLimit","Modal","className","css","Loader","active","inverted","autoPlay","loop","muted","controls","MOBILE_MEDIA_QUERY","BLUE_LIGHT_300","Video","CompanyVideoImageFallback","MuteToggle","videoRef","setVideo","videoMuted","setVideoMuted","videoBlob","setVideoBlob","videoFailedToLoad","setVideoFailedToLoad","companyVideoModalOpen","setCompanyVideoModalOpen","videoUrl","uploadCompanyVideo","tooltipPosition","playsInline","onCanPlay","currentTarget","play","layoutStyles","PAGE_SIDE_PADDING","HERO_MEDIA_QUERY","TABLET_SIDE_PADDING","gap","DESKTOP_MEDIA_QUERY","Jumbotron","CompanyStats","CompanyStatItem","IconButtonContainer","CompanyStatItems","MEDIUM_1","numItems","MEDIUM_2","companyDescriptionModalOpen","setCompanyDescriptionModalOpen","fromHref","useHistory","item","isVerified","CompanyDescriptionModal","BLUE_LIGHT_100","TextLink","marketplacePath","font","CompanyLogo","CompanyVideo","maxWidth","HEADING_4_REGULAR","Left","iconSrc","buttonText","withPlainStyles","NEUTRAL_50","onCancel","tooltipContent","InputTooltip","arrowOffsetTop","ul","introduction","research_interests","getRfpOptionFromValue","InputContainer","DropdownNote","OpenCall","OpenCallLabel","OpenCallTooltipContent","interest","isInRfpForm","setTitle","summary","setSummary","keywords","keywordsOptions","setKeywordOptions","rfp_requests","rfps","setRfps","open_call_request","enabled","isOpenCallActive","setIsOpenCallActive","subscription","rfpOptions","sortRfps","CompanyEditForm","updatedInterest","isNewInterest","_await$createCompanyR","createCompanyResearchInterest","keyword","requestForProposalIds","rfp","company_research_interest","company_research_interests","_await$updateCompanyR","updateCompanyResearchInterest","updatedInterestIndex","findIndex","researchInterest","interestsCopy","splice","features","open_calls","is_expired","TOOLTIP_CONTENT","placeholder","KeywordsDropdown","keywordType","targetType","selection","MultiSelectDropdown","noOptionsMessage","Switch","checked","labelLeft","labelRight","MainContent","RfpCardsContainer","RfpCards","ResearchInterestHeader","IconContainer","ResearchInterestSummary","OpenCallCta","hasRfps","isSponsor","isEditing","setIsEditing","seeMoreRfps","setSeeMoreRfps","isDeleteConfirmationModalOpen","setIsDeleteConfirmationModalOpen","history","ResearchInterestInput","isFirstResearchInterest","CompanyCTABanner","area_of_interest","requestForProposals","SimpleConfirmationModal","subHeaderText","onConfirm","_await$deleteCompanyR","deleteCompanyResearchInterest","companyResearchInterestId","confirmButtonText","confirmIconName","theme","renderMarkdownText","slice","RfpCard","TextButton","text","is_open_calls_accessible","interest_title","handleSubmitProposalClick","hasExistingDraft","proposals","proposal","completed","request_id","push","Banner","company_research_interest_id","InfoBanner","DeleteUserPreviewWrapper","IconButtonWrapper","company_page_users","newUserOptions","setNewUserOptions","dropdownOptions","setDropdownOptions","seeMore","setSeeMore","userIdToDelete","setUserIdToDelete","handleUpdate","company_page_user_ids","newCompanyPageUsers","user","handleAddUsers","option","count","sponsor_users","getCompanyMembers","generateEmailDropdownOptions","email","UserDropdown","team","UserPreview","userRole","Divider","license","SponsorLicenseType","PREMIUM","field","setValue","charLimit","handleSubmit","toLowerCase","paper","ContentContainer","CompanyInfo","TopContainer","PartneringInterests","HEADING_2_SEMIBOLD","StartupPrograms","UnclaimedDisclaimer","OurTeam","UnclaimedBox","ORANGE_50","UnclaimedBoxHeader","ReasonsToClaim","ReasonToClaimHeader","ReasonToClaim","useParams","_useSearchParams2","useSearchParams","searchParams","setSearchParams","asLiveView","requestToJoinCompanyNetworkFromDigest","delete","landing","useHubspotCTAs","getCompanyForCompanyPage","request_for_startup_requests","hasResearchInterests","showTeamSection","CompanyPageViewLiveBanner","CompanyPageJumbotron","CompanyTextInput","CompanyResearchInterest","cri","CompanyPageMoreOpportunities","reason","CompanyPageUsers","ACTIVE","date","formatDateToEastern","getFullYear","GREEN_800","GREEN_200","launch_date","ORANGE","ORANGE_300","statusText","includes"],"sourceRoot":""}