{"version":3,"file":"js/5008-b9afaf0470a8c356f29f.chunk.js","mappings":"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","sources":["webpack://halo/./app/client/src/components/CharLimitInput/CharLimitInput.styles.js","webpack://halo/./app/client/src/components/CharLimitInput/CharLimitInput.jsx","webpack://halo/./app/client/src/components/CharLimitInput/index.js","webpack://halo/./app/client/src/requests/scientists.ts","webpack://halo/./app/client/src/views/ProfilePage/mockAttachments.ts","webpack://halo/./app/client/src/views/ProfilePage/ProfileAttachments.tsx","webpack://halo/./app/client/src/views/ProfilePage/Sidebar/Sidebar.styles.tsx","webpack://halo/./app/client/src/views/ProfilePage/Sidebar/modals/styles.ts","webpack://halo/./app/client/src/views/ProfilePage/Sidebar/modals/AffiliationEditModal.tsx","webpack://halo/./app/client/src/views/ProfilePage/Sidebar/modals/StartupEditModal.tsx","webpack://halo/./app/client/src/views/ProfilePage/Sidebar/modals/KeywordEditModal.tsx","webpack://halo/./app/client/src/views/ProfilePage/Sidebar/Sidebar.tsx","webpack://halo/./app/client/src/views/ProfilePage/Sidebar/index.ts","webpack://halo/./app/client/src/views/ProfilePage/ProfilePage.tsx","webpack://halo/./app/client/src/views/ProfilePage/index.ts"],"sourcesContent":["import { COLORS, FONTS } from \"@constants\";\nimport resizeGrabber from \"@images/icons/resize_grabber.svg\";\nimport styled from \"styled-components\";\n\nexport const InputBox = styled.textarea`\n width: ${({ width }) => width || `100%`};\n padding: 10px;\n display: grid;\n border-radius: 3px;\n color: ${COLORS.BLACK};\n ${FONTS.REGULAR_2};\n resize: none;\n\n &::placeholder {\n ${FONTS.REGULAR_2};\n color: ${COLORS.NEUTRAL_500};\n }\n\n ${({ resizeable }) =>\n resizeable &&\n `\n min-height: 100px;\n resize: vertical;\n &::-webkit-resizer {\n background-image: url(${resizeGrabber});\n }\n `}\n\n ${({ error }) =>\n error &&\n `\n border-color: ${COLORS.RED};\n &:focus {\n border-color: ${COLORS.RED};\n }\n `}\n`;\n\nexport const InputDescription = styled.div`\n margin: 0px 0 24px;\n color: ${COLORS.BLACK};\n ${FONTS.SEMIBOLD_1};\n text-align: left;\n ${({ labelStyles }) => labelStyles};\n`;\n\nexport const InputLabel = styled.div`\n text-align: left;\n ${FONTS.REGULAR_3};\n color: ${COLORS.BLACK};\n margin-bottom: 5px;\n width: 100%;\n ${({ error }) => error && `color: ${COLORS.RED};`}\n`;\n\nexport const OptionalDescription = styled.span`\n margin: 0px 0 24px;\n color: ${COLORS.BLACK};\n ${FONTS.REGULAR_2};\n text-align: left;\n`;\n","import PropTypes from \"prop-types\";\nimport { useState } from \"react\";\nimport * as S from \"./CharLimitInput.styles\";\n\nconst CharLimitInput = (props) => {\n const [textValue, setTextValue] = useState(props.default || \"\");\n const inputHandler = (e) => {\n // update the characters in text area as user types\n setTextValue(e.target.value);\n // must call handler passed by parent to handle state\n props.handler(e, e.target.value.length > props.charLimit);\n };\n const overLimit = (props.value?.length ?? textValue.length) > props.charLimit;\n\n return (\n <div style={props.style}>\n <S.InputDescription labelStyles={props.labelStyles}>\n {props.label}{\" \"}\n {props.optional ? <S.OptionalDescription>(Optional)</S.OptionalDescription> : null}\n </S.InputDescription>\n <S.InputLabel error={overLimit}>\n {\" \"}\n {props.value?.length ?? textValue.length} of {props.charLimit} characters including spaces\n </S.InputLabel>\n <S.InputBox\n value={props.value ?? textValue}\n onChange={props.onChange ?? inputHandler}\n error={overLimit}\n {...props}\n />\n </div>\n );\n};\n\nCharLimitInput.propTypes = {\n default: PropTypes.string,\n label: PropTypes.string,\n placeholder: PropTypes.string,\n charLimit: PropTypes.number,\n rows: PropTypes.number,\n handler: PropTypes.func,\n optional: PropTypes.bool,\n labelStyles: PropTypes.string,\n resizeable: PropTypes.bool,\n};\n\nexport default CharLimitInput;\n","import CharLimitInput from \"./CharLimitInput\";\n\nexport default CharLimitInput;\n","import { Education, Startup } from \"@tsTypes/schema\";\nimport type { AffiliationType } from \"src/views/ProfilePage/Sidebar/modals/AffiliationEditModal\";\nimport request from \"./request\";\n\nexport const updateAffiliation = (\n userId: number,\n {\n location,\n startYear,\n endYear,\n title,\n }: {\n location: string;\n startYear: string;\n endYear: string;\n title?: string;\n }\n) =>\n request.put(`/scientist_profile/${userId}`, {\n university: location,\n university_start_year: startYear,\n university_end_year: endYear,\n ...(title ? { title: title } : {}),\n });\n\nexport const createOrUpdateEducation = async ({\n degree,\n location,\n fieldOfStudy,\n startYear,\n endYear,\n id,\n}: {\n degree: Omit<AffiliationType, \"primary\">;\n location: string;\n fieldOfStudy?: string;\n startYear: string;\n endYear: string;\n id?: number;\n}): Promise<Education> => {\n const data = {\n location,\n degree,\n ...(fieldOfStudy && { field_of_study: fieldOfStudy }),\n start_year: startYear,\n end_year: endYear,\n };\n\n if (id) {\n return (await request.put(`/educations/${id}`, data)).data;\n }\n return (await request.post(\"/educations\", data)).data;\n};\n\nexport const deleteEducation = (id: number) => request.delete(`/educations/${id}`);\n\nexport const createOrUpdateStartup = async ({\n name,\n url,\n startYear,\n endYear,\n id,\n title,\n}: {\n name: string;\n url?: string;\n startYear?: string;\n endYear?: string;\n id?: number;\n title?: string;\n}): Promise<Startup> => {\n const data = {\n startup_name: name,\n url: url && encodeURI(url),\n start_year: startYear,\n end_year: endYear,\n primary_affiliation_title: title,\n };\n\n if (id) {\n return (await request.put(`/startups/${id}`, data)).data;\n }\n return (await request.post(\"/startups\", data)).data;\n};\n\nexport const deleteStartup = (id: number): Promise<void> => request.delete(`/startups/${id}`);\n","import { PublicationPartial } from \"@tsTypes/publications/_publication\";\n\nexport const MOCK_PUBLICATIONS: PublicationPartial[] = [\n {\n id: 1,\n title: \"Attention is All you Need\",\n abstract:\n \"The dominant sequence transduction models are based on complex recurrent or convolutional neural networks in an encoder-decoder configuration. The best performing models also connect the encoder and decoder through an attention mechanism. We propose a new simple network architecture, the Transformer, based solely on attention mechanisms, dispensing with recurrence and convolutions entirely.\",\n url: \"www.halo.science\",\n date: \"June 2017\",\n publication_name: \"NIPS\",\n },\n {\n id: 2,\n title: \"Cleavage of structural proteins during the assembly of the head of bacteriophage T4\",\n abstract:\n \"Using an improved method of gel electrophoresis, many hitherto unknown proteins have been found in bacteriophage T4 and some of these have been identified with specific gene products. Four major components of the head are cleaved during the process of assembly, apparently after the precursor proteins have assembled into some large intermediate structure.\",\n url: \"www.halo.science\",\n publication_name: \"Nature\",\n date: \"August 1970\",\n },\n {\n id: 3,\n title: \"Density-functional thermochemistry. III. The role of exact exchange.\",\n abstract:\n \"Despite the remarkable thermochemical accuracy of Kohn–Sham densityâ€functional theories with gradient corrections for exchangeâ€correlation [see, for example, A. D. Becke, J. Chem. Phys. 96, 2155 (1992)], we believe that further improvements are unlikely unless exactâ€exchange information is considered.\",\n url: \"www.halo.science\",\n publication_name: \"J. Chem. Phys.\",\n date: \"April 1993\",\n },\n];\n","import ScientistContribution from \"@components/ScientistContribution\";\nimport { Button, GradientButton, IconButton, Tabs } from \"@components/library\";\nimport { COLORS, FONTS, STYLES } from \"@constants\";\nimport { toggleLoginModal } from \"@redux/actions/profileActions\";\nimport { FundingPartial } from \"@tsTypes/fundings/_funding\";\nimport { ScientistProfileProposal } from \"@tsTypes/index\";\nimport { PatentPartial } from \"@tsTypes/patents/_patent\";\nimport { PublicationPartial } from \"@tsTypes/publications/_publication\";\nimport { setPrevUrlCookie } from \"@utils/authUtils\";\nimport { t, t_html } from \"@utils/i18n\";\nimport pluralize from \"pluralize\";\nimport { Dispatch, SetStateAction, useMemo, useState } from \"react\";\nimport { useDispatch } from \"react-redux\";\nimport styled from \"styled-components\";\nimport { MOCK_PUBLICATIONS } from \"./mockAttachments\";\n\ninterface Props {\n publications: PublicationPartial[];\n openPublicationModal: (editingPublication: PublicationPartial | null) => void;\n fundings: FundingPartial[];\n openFundingModal: (editingFunding: FundingPartial | null) => void;\n patents: PatentPartial[];\n openPatentModal: (editingPatent: PatentPartial | null) => void;\n proposals: ScientistProfileProposal[];\n name: string;\n isPublic: boolean;\n isOwner: boolean;\n shouldBlur: boolean;\n}\n\nconst TABS = [\"Publications\", \"Fundings\", \"Patents\", \"Proposals\"] as const;\ntype TabLabel = typeof TABS[number];\n\nconst TAB_FONT = FONTS.MEDIUM_2;\nconst TAB_DISTANCE = \"64px\";\nconst TAB_MARGIN = \"0 0 24px\";\n\nfunction ProfileAttachments({\n publications,\n openPublicationModal,\n fundings,\n openFundingModal,\n patents,\n openPatentModal,\n proposals,\n name,\n isPublic,\n isOwner,\n shouldBlur,\n}: Props) {\n const [activeTab, setActiveTab] = useState<TabLabel>(\"Publications\");\n const dispatch = useDispatch();\n\n const tabs: {\n label: TabLabel;\n key: string;\n data: PublicationPartial[] | FundingPartial[] | PatentPartial[] | ScientistProfileProposal[];\n count: number;\n add?: () => void;\n edit?: (id: number) => void;\n \"data-testid\": string;\n }[] = useMemo(\n () =>\n [\n {\n label: \"Publications\" as TabLabel,\n data: publications,\n visible: true,\n add: () => openPublicationModal(null),\n edit: (id: number) => openPublicationModal(publications.find((p) => p.id === id) ?? null),\n \"data-testid\": \"profile-page-publications-tab\",\n },\n {\n label: \"Funding\" as TabLabel,\n data: fundings,\n visible: true,\n add: () => openFundingModal(null),\n edit: (id: number) => openFundingModal(fundings.find((f) => f.id === id) ?? null),\n \"data-testid\": \"profile-page-fundings-tab\",\n },\n {\n label: \"Patents\" as TabLabel,\n data: patents,\n visible: true,\n add: () => openPatentModal(null),\n edit: (id: number) => openPatentModal(patents.find((p) => p.id === id) ?? null),\n \"data-testid\": \"profile-page-patent-tab\",\n },\n {\n label: \"Proposals\" as TabLabel,\n data: proposals,\n visible: !isPublic && (proposals.length > 0 || isOwner),\n \"data-testid\": \"profile-page-proposals-tab\",\n },\n ]\n .filter(({ visible }) => visible)\n .map((tab) => ({\n ...tab,\n key: tab.label,\n count: tab.data.length,\n })),\n [publications, fundings, patents, proposals, isPublic]\n );\n\n // Show blurry preview if logged out (and not digest)\n if (shouldBlur) {\n return (\n <TabsContainer shouldBlur>\n <Tabs\n activeTab={activeTab}\n setActiveTab={setActiveTab as Dispatch<SetStateAction<string>>}\n tabs={TABS.map((tab) => ({ key: tab, label: tab }))}\n font={TAB_FONT}\n tabDistance={TAB_DISTANCE}\n margin={TAB_MARGIN}\n />\n <TabPanel isActive shouldBlur>\n {MOCK_PUBLICATIONS.map((attachment) => (\n <ScientistContribution key={attachment.id} contribution={attachment} />\n ))}\n </TabPanel>\n <SignedOutOverlay>\n {t_html(\"pages.scientist_profile_page.signed_out_cta.text_html\", {\n name: name ?? \"the researcher\",\n })}\n <br />\n <GradientButton\n size=\"md\"\n margin=\"24px 0 0 0\"\n width=\"100px\"\n onClick={() => {\n setPrevUrlCookie(window.location.href);\n dispatch(toggleLoginModal({ open: true }));\n }}\n >\n {t(\"pages.scientist_profile_page.signed_out_cta.button\")}\n </GradientButton>\n </SignedOutOverlay>\n </TabsContainer>\n );\n }\n\n return (\n <TabsContainer>\n <Tabs\n activeTab={activeTab}\n setActiveTab={setActiveTab as Dispatch<SetStateAction<string>>}\n tabs={tabs}\n font={TAB_FONT}\n tabDistance={TAB_DISTANCE}\n margin={TAB_MARGIN}\n />\n {tabs.map((tab) => (\n <TabPanel isActive={activeTab === tab.label} key={`tabpanel-${tab.label}`}>\n {isOwner && !isPublic && tab.add && (\n <div>\n <Button\n size=\"sm\"\n iconName=\"Edit\"\n variant=\"secondary\"\n onClick={() => tab.add!()}\n data-testid={`profile-page-add-${pluralize(tab.label.toLowerCase(), 1)}-button`}\n margin=\"0 0 16px\"\n >\n Add {pluralize(tab.label, 1)}\n </Button>\n </div>\n )}\n {tab.data.map(\n (attachment) =>\n activeTab === tab.label && (\n <EditRow key={attachment.id}>\n <ScientistContribution contribution={attachment} />\n {isOwner && !isPublic && tab.edit && (\n <IconButton\n iconName=\"Edit\"\n variant=\"fourth\"\n data-testid=\"profile-page-edit-button\"\n onClick={() => tab.edit!(attachment.id)}\n margin=\"0 0 0 8px\"\n hideTooltip\n size=\"xs\"\n />\n )}\n </EditRow>\n )\n )}\n </TabPanel>\n ))}\n </TabsContainer>\n );\n}\n\nexport default ProfileAttachments;\n\nconst TabsContainer = styled.div`\n position: relative;\n width: 700px;\n margin-top: 15px;\n margin-bottom: 15rem;\n min-height: 500px;\n ${({ shouldBlur }) => shouldBlur && \"pointer-events: none;\"}\n`;\nconst TabPanel = styled.div`\n display: ${({ isActive }) => (isActive ? \"flex\" : \"none\")};\n flex-direction: column;\n gap: 8px;\n ${({ shouldBlur }) =>\n shouldBlur &&\n `\n filter: blur(3px);\n pointer-events: none;\n user-select: none;\n `}\n ${FONTS.REGULAR_2};\n`;\nconst SignedOutOverlay = styled.div`\n position: absolute;\n top: 160px;\n left: 50%;\n transform: translateX(-50%);\n\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 400px;\n padding: 36px 20px;\n\n border-radius: 8px;\n text-align: center;\n white-space: pre-wrap;\n background-color: ${COLORS.WHITE};\n box-shadow: ${STYLES.SHADOW_D};\n pointer-events: all;\n ${FONTS.MEDIUM_1};\n`;\nconst EditRow = styled.div`\n display: flex;\n & > :nth-child(2) {\n opacity: 0.4;\n }\n`;\n","import { COLORS, JS_FONTS } from \"@constants\";\nimport { StyleSheet } from \"aphrodite\";\n\nconst Styles = StyleSheet.create({\n Sidebar_container: {\n textAlign: \"center\",\n borderRight: `1px solid ${COLORS.NEUTRAL_200}`,\n background: COLORS.WHITE,\n position: \"relative\",\n height: \"calc(100% + 40px)\",\n padding: \"44px 0 60px\",\n },\n Sidebar_showMoreText: {\n ...JS_FONTS.REGULAR_4,\n color: COLORS.NEUTRAL_200,\n cursor: \"pointer\",\n },\n Sidebar_dropdownIcon: {\n marginLeft: \"10px\",\n display: \"inline-block\",\n },\n Sidebar_showMoreIcon: {\n marginRight: \"5px\",\n display: \"inline-block\",\n height: \"20px\",\n width: \"20px\",\n },\n Sidebar_accordion: {\n textAlign: \"left\",\n paddingLeft: \"80px\",\n },\n Sidebar_verifiedIcon: {\n marginLeft: \"5px\",\n marginRight: \"5px\",\n },\n Sidebar_popupProfilePic: {\n height: \"100px\",\n width: \"100px\",\n backgroundColor: COLORS.NEUTRAL_100,\n margin: \"auto\",\n borderRadius: \"50%\",\n backgroundRepeat: \"no-repeat\",\n backgroundPosition: \"center center\",\n backgroundSize: \"cover\",\n cursor: \"pointer\",\n },\n Sidebar_regularProfilePic: {\n height: \"100px\",\n width: \"100px\",\n backgroundColor: COLORS.NEUTRAL_100,\n margin: \"auto\",\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n ...JS_FONTS.HEADING_2_SEMIBOLD,\n borderRadius: \"50%\",\n backgroundRepeat: \"no-repeat\",\n backgroundPosition: \"center center\",\n backgroundSize: \"cover\",\n },\n Sidebar_regularProfilePicClickable: {\n cursor: \"pointer\",\n },\n Sidebar_profilePicContainer: {\n marginBottom: \"20px\",\n },\n Sidebar_profileName: {\n color: COLORS.BLACK,\n ...JS_FONTS.HEADING_4_SEMIBOLD,\n marginBottom: 10,\n },\n Sidebar_headline: {\n width: \"75%\",\n margin: \"-10px auto 20px\",\n color: COLORS.BLACK,\n ...JS_FONTS.REGULAR_1,\n textAlign: \"left\",\n },\n Sidebar_about: {\n width: \"75%\",\n margin: \"-10px auto 30px\",\n color: COLORS.BLACK,\n ...JS_FONTS.REGULAR_2,\n },\n Sidebar_profileTitle: {\n position: \"relative\",\n ...JS_FONTS.MEDIUM_2,\n color: COLORS.NEUTRAL_500,\n overflowX: \"hidden\",\n textOverflow: \"ellipsis\",\n width: \"75%\",\n margin: \"0 auto 30px\",\n },\n Sidebar_followButtonContainer: {\n display: \"flex\",\n justifyContent: \"center\",\n margin: \"-8px 0 24px\",\n },\n Sidebar_sidebarHeader: {\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n color: COLORS.NEUTRAL_500,\n ...JS_FONTS.MEDIUM_2,\n letterSpacing: \"1px\",\n width: \"75%\",\n margin: \"30px auto 10px\",\n textAlign: \"left\",\n },\n Sidebar_sidebar: {\n color: COLORS.HALO_BLUE,\n ...JS_FONTS.REGULAR_2,\n width: \"75%\",\n margin: \"auto\",\n textAlign: \"left\",\n },\n Sidebar_interestSidebar: {\n color: COLORS.HALO_BLUE,\n ...JS_FONTS.MEDIUM_3,\n width: \"75%\",\n margin: \"auto\",\n textAlign: \"left\",\n display: \"flex\",\n flexFlow: \"row wrap\",\n },\n Sidebar_keyword: {\n padding: \"5px 10px\",\n marginRight: \"10px\",\n marginBottom: \"10px\",\n width: \"fit-content\",\n borderRadius: \"4px\",\n border: `1px solid ${COLORS.NEUTRAL_200}`,\n color: COLORS.NEUTRAL_500,\n textAlign: \"left\",\n ...JS_FONTS.REGULAR_4,\n },\n Sidebar_expertise: {\n padding: \"5px 10px\",\n marginRight: \"10px\",\n marginBottom: \"10px\",\n width: \"fit-content\",\n borderRadius: \"4px\",\n border: `1px solid ${COLORS.HALO_BLUE}`,\n color: COLORS.HALO_BLUE,\n textAlign: \"left\",\n ...JS_FONTS.REGULAR_4,\n },\n Sidebar_application: {\n backgroundColor: COLORS.NEUTRAL_100,\n },\n Sidebar_opportunityList: {\n textAlign: \"left\",\n marginLeft: \"30px\",\n },\n Sidebar_opportunityHeader: {\n ...JS_FONTS.SEMIBOLD_2,\n color: COLORS.BLACK,\n marginBottom: \"16px\",\n },\n Sidebar_opportunityTitle: {\n ...JS_FONTS.REGULAR_2,\n color: COLORS.BLACK,\n display: \"inline-block\",\n textOverflow: \"ellipsis\",\n overflowX: \"hidden\",\n whiteSpace: \"nowrap\",\n width: \"75%\",\n cursor: \"pointer\",\n },\n Sidebar_opportunityTitleActive: {\n ...JS_FONTS.SEMIBOLD_2,\n color: COLORS.BLACK,\n display: \"inline-block\",\n textOverflow: \"ellipsis\",\n overflowX: \"hidden\",\n whiteSpace: \"nowrap\",\n width: \"75%\",\n cursor: \"pointer\",\n },\n Sidebar_opportunityCount: {\n ...JS_FONTS.REGULAR_2,\n color: COLORS.BLACK,\n display: \"inline-block\",\n width: \"25%\",\n verticalAlign: \"top\",\n textAlign: \"right\",\n paddingRight: \"15px\",\n },\n Sidebar_opportunityRow: {\n marginBottom: \"15px\",\n },\n Sidebar_uploadIcon: {\n height: \"100%\",\n alignItems: \"center\",\n justifyContent: \"center\",\n display: \"inline-flex\",\n margin: 0,\n padding: 0,\n position: \"absolute\",\n top: 0,\n left: 0,\n fontSize: \"32px\",\n width: \"100%\",\n color: COLORS.NEUTRAL_400,\n cursor: \"pointer\",\n },\n Sidebar_settingsGroup: {},\n Sidebar_settingsLabelActive: {\n color: COLORS.HALO_BLUE,\n ...JS_FONTS.REGULAR_2,\n marginBottom: \"12px\",\n cursor: \"pointer\",\n },\n Sidebar_settingsLabel: {\n color: COLORS.BLACK,\n ...JS_FONTS.REGULAR_2,\n marginBottom: \"12px\",\n cursor: \"pointer\",\n },\n Sidebar_regularText: {\n color: COLORS.BLACK,\n ...JS_FONTS.REGULAR_2,\n },\n Sidebar_emptyPFPic: {\n ...JS_FONTS.MEDIUM_3,\n position: \"absolute\",\n top: \"0\",\n color: COLORS.WHITE,\n width: \"100%\",\n height: \"100%\",\n padding: \"50px 10px 0\",\n \":hover\": {\n opacity: 0.8,\n },\n },\n Sidebar_affiliationRow: {\n display: \"grid\",\n gridTemplateColumns: \"1fr auto\",\n gap: 10,\n },\n Sidebar_iconButton: {\n cursor: \"pointer\",\n },\n Sidebar_sidebarSubtext: {\n color: COLORS.NEUTRAL_500,\n },\n Sidebar_link: {\n color: COLORS.HALO_BLUE,\n },\n});\n\nexport default Styles;\n","import styled from \"styled-components\";\n\nimport { COLORS, FONTS } from \"@constants\";\n\nexport const Form = styled.form`\n padding: 45px;\n`;\n\nexport const Heading = styled.div`\n margin-bottom: 32px;\n\n ${FONTS.HEADING_4_SEMIBOLD};\n color: ${COLORS.BLACK};\n`;\n\nexport const Label = styled.label`\n display: flex;\n flex-direction: column;\n gap: 5px;\n\n width: 100%;\n\n ${FONTS.MEDIUM_3};\n color: ${COLORS.BLACK};\n`;\n\nexport const Error = styled.div`\n margin: 20px 0 -20px;\n\n ${FONTS.REGULAR_2};\n color: ${COLORS.RED};\n`;\n\nexport const ButtonContainer = styled.div`\n display: flex;\n justify-content: space-between;\n\n width: 100%;\n margin-top: 36px;\n\n & > div {\n display: flex;\n }\n`;\n\nexport const Contact = styled.div`\n margin-top: 15px;\n\n ${FONTS.REGULAR_3}\n`;\n\nexport const Gap = styled.div`\n margin-top: 20px;\n`;\n\nexport const TwoColumns = styled.div`\n display: flex;\n flex-direction: row;\n gap: 20px;\n\n & > div {\n width: 50%;\n }\n`;\n","import { FormEvent, useEffect, useState } from \"react\";\nimport { Link } from \"react-router-dom\";\n\nimport {\n BlankModal,\n Button,\n SingleSelectDropdown,\n TextInput,\n UniversityDropdown,\n} from \"@components/library\";\nimport { createOrUpdateEducation, deleteEducation, updateAffiliation } from \"@requests/scientists\";\nimport { getOptionFromValue, getValueFromOption, getYearOptions } from \"@utils/dropdownUtils\";\n\nimport { DropdownOption } from \"@components/library/Dropdowns/DropdownOption\";\nimport { SCIENTIST_ROLE_OPTIONS } from \"src/views/Onboarding/Step3/ResearchInstitutionScientist\";\nimport { ButtonContainer, Contact, Error, Form, Gap, Heading, Label, TwoColumns } from \"./styles\";\n\nexport type AffiliationType = \"primary\" | \"PhD\" | \"MD\" | \"Postdoctoral Scientist\";\n\ninterface Props {\n isOpen: boolean;\n onClose: () => void;\n type: AffiliationType;\n profileUser: any;\n setProfileUser: (newProfileUser: any) => void;\n}\n\nconst HEADING = {\n primary: \"Current Institution\",\n PhD: \"Add PhD\",\n MD: \"Add MD\",\n \"Postdoctoral Scientist\": \"Add Postdoc\",\n};\n\nexport default function AffiliationEditModal({\n isOpen,\n onClose,\n type,\n profileUser,\n setProfileUser,\n}: Props) {\n const [location, setLocation] = useState<string | undefined>();\n const [title, setTitle] = useState<DropdownOption | null>(null);\n const [fieldOfStudy, setFieldOfStudy] = useState<string | undefined>();\n const [startYear, setStartYear] = useState<string | undefined>();\n const [endYear, setEndYear] = useState<string | undefined>();\n const [id, setId] = useState<number | undefined>();\n\n const [error, setError] = useState<string | null>(null);\n const [isSubmitting, setIsSubmitting] = useState(false);\n\n useEffect(() => {\n if (type === \"primary\") {\n setLocation(profileUser.profile_info.university);\n setTitle(\n SCIENTIST_ROLE_OPTIONS.find((option) => option?.value === profileUser.profile_info.title)!\n );\n setStartYear(profileUser.profile_info.university_start_year);\n setEndYear(profileUser.profile_info.university_end_year);\n return;\n }\n const education = profileUser.profile_info.educations.find(({ degree }) => degree === type);\n setLocation(education?.location);\n setFieldOfStudy(education?.field_of_study);\n setStartYear(education?.start_year);\n setEndYear(education?.end_year);\n setId(education?.id);\n }, [type]);\n\n useEffect(() => {\n // Ensure that end year is gte to start year\n if (!startYear || !endYear) return;\n if (endYear !== \"Present\" && startYear > endYear) {\n setError(\"Please enter an end year that is after the start year\");\n } else {\n setError(null);\n }\n }, [startYear, endYear]);\n\n if (!isOpen) return null;\n\n const handleSubmit = async (e: FormEvent) => {\n e.preventDefault();\n\n if (!location || !startYear || !endYear) return;\n\n setIsSubmitting(true);\n try {\n if (type === \"primary\") {\n // Update primary affiliation\n await updateAffiliation(profileUser.id, {\n location,\n startYear,\n endYear,\n title: title?.value,\n });\n setProfileUser({\n ...profileUser,\n profile_info: {\n ...profileUser.profile_info,\n title: title?.value,\n university: location,\n university_start_year: startYear,\n university_end_year: endYear,\n },\n });\n } else {\n // Update PhD, MD, or Postdoc\n const response = await createOrUpdateEducation({\n degree: type,\n location,\n fieldOfStudy,\n startYear,\n endYear,\n id,\n });\n const updatedUser = {\n ...profileUser,\n profile_info: {\n ...profileUser.profile_info,\n educations: [\n ...profileUser.profile_info.educations.filter(({ degree }) => degree !== type),\n {\n degree: type,\n location,\n field_of_study: fieldOfStudy,\n start_year: startYear,\n end_year: endYear,\n id: response.id,\n },\n ],\n },\n };\n setProfileUser(updatedUser);\n }\n\n onClose();\n } catch (err) {\n console.error(err);\n setError(\"Something went wrong, please try again.\");\n setIsSubmitting(false);\n }\n };\n\n const handleDelete = async () => {\n setIsSubmitting(true);\n\n if (!id) return;\n\n try {\n await deleteEducation(id);\n\n const updatedUser = {\n ...profileUser,\n profile_info: {\n ...profileUser.profile_info,\n educations: profileUser.profile_info.educations.filter(\n (education) => education.degree !== type\n ),\n },\n };\n setProfileUser(updatedUser);\n\n onClose();\n } catch (err) {\n console.error(err);\n setError(\"Something went wrong, please try again.\");\n setIsSubmitting(false);\n }\n };\n\n return (\n <BlankModal width=\"700px\" isOpen={isOpen} onClose={onClose} closeOnDimmerClick hideCloseButton>\n <Form onSubmit={handleSubmit}>\n <Heading>{HEADING[type]}</Heading>\n <Label>\n Research Institution\n <UniversityDropdown\n value={getOptionFromValue(location)}\n onChange={(option) => setLocation(getValueFromOption(option))}\n />\n </Label>\n <Contact>\n <Link\n to=\"/contact?message=Hello, I can't find my institution. My institution is: \"\n target=\"_blank\"\n >\n Contact us\n </Link>{\" \"}\n if you don’t see your institution\n </Contact>\n {type === \"primary\" && (\n <>\n <Gap />\n <Label>\n Title\n <SingleSelectDropdown\n value={title}\n onChange={setTitle}\n options={SCIENTIST_ROLE_OPTIONS as DropdownOption[]}\n />\n </Label>\n </>\n )}\n {type === \"PhD\" && (\n <>\n <Gap />\n <Label>\n Field of Study\n <TextInput\n value={fieldOfStudy ?? \"\"}\n characterLimit={80}\n onChange={(e) => setFieldOfStudy(e.target.value.slice(0, 80))}\n placeholder=\"Add your field of study\"\n hideClearButton\n />\n </Label>\n </>\n )}\n <Gap />\n <TwoColumns>\n <div>\n <Label>\n Start year\n <SingleSelectDropdown\n placeholder=\"Start year\"\n options={getYearOptions()}\n value={getOptionFromValue(startYear)}\n onChange={(option) => setStartYear(getValueFromOption(option))}\n maxMenuHeight=\"200px\"\n menuPlacement=\"bottom\"\n isPortal\n />\n </Label>\n </div>\n <div>\n <Label>\n End year\n <SingleSelectDropdown\n placeholder=\"End year\"\n options={[{ label: \"Present\", value: \"Present\" }, ...getYearOptions()]}\n value={getOptionFromValue(endYear)}\n onChange={(option) => setEndYear(getValueFromOption(option))}\n maxMenuHeight=\"200px\"\n menuPlacement=\"bottom\"\n isPortal\n />\n </Label>\n </div>\n </TwoColumns>\n {error && <Error>{error}</Error>}\n <ButtonContainer>\n <div>\n {type !== \"primary\" && id && (\n <Button\n type=\"button\"\n onClick={handleDelete}\n disabled={isSubmitting}\n variant=\"destructive-ghost\"\n >\n Remove {type === \"Postdoctoral Scientist\" ? \"Postdoc\" : type}\n </Button>\n )}\n </div>\n <div>\n <Button type=\"button\" onClick={onClose} variant=\"ghost\" margin=\"0 15px 0 0\">\n Cancel\n </Button>\n <Button\n type=\"submit\"\n disabled={\n !location ||\n (type === \"primary\" && !title) ||\n (type === \"PhD\" && !fieldOfStudy) ||\n !startYear ||\n !endYear ||\n Boolean(error) ||\n isSubmitting\n }\n >\n Save\n </Button>\n </div>\n </ButtonContainer>\n </Form>\n </BlankModal>\n );\n}\n","import { FormEvent, useEffect, useState } from \"react\";\n\nimport { BlankModal, Button, SingleSelectDropdown, TextInput } from \"@components/library\";\nimport { createOrUpdateStartup, deleteStartup } from \"@requests/scientists\";\nimport { getOptionFromValue, getValueFromOption, getYearOptions } from \"@utils/dropdownUtils\";\n\nimport { DropdownOption } from \"@components/library/Dropdowns/DropdownOption\";\nimport { STARTUP_TITLE_OPTIONS } from \"src/views/Onboarding/Step3/CompanyScientist\";\nimport { ButtonContainer, Error, Form, Gap, Heading, Label, TwoColumns } from \"./styles\";\n\ninterface Props {\n isOpen: boolean;\n onClose: () => void;\n profileUser: any;\n setProfileUser: (newProfileUser: any) => void;\n}\n\nexport default function StartupEditModal({ isOpen, onClose, profileUser, setProfileUser }: Props) {\n const id: number | undefined = profileUser.profile_info.startup?.id;\n const isPrimaryAffiliation: boolean | undefined =\n profileUser.profile_info.startup?.primary_affiliation;\n\n const [name, setName] = useState<string>(profileUser.profile_info.startup?.startup_name);\n const [url, setUrl] = useState<string>(profileUser.profile_info.startup?.url);\n const [title, setTitle] = useState<DropdownOption | null>(\n getOptionFromValue(profileUser.profile_info.title)\n );\n const [startYear, setStartYear] = useState<string>(profileUser.profile_info.startup?.start_year);\n const [endYear, setEndYear] = useState<string>(profileUser.profile_info.startup?.end_year);\n\n const [error, setError] = useState<string | null>(null);\n const [isSubmitting, setIsSubmitting] = useState(false);\n\n useEffect(() => {\n // Ensure that end year is gte to start year\n if (!startYear || !endYear) return;\n if (endYear !== \"Present\" && startYear > endYear) {\n setError(\"Please enter an end year that is after the start year\");\n } else {\n setError(null);\n }\n }, [startYear, endYear]);\n\n if (!isOpen) return null;\n\n const handleSubmit = async (e: FormEvent) => {\n e.preventDefault();\n\n if (!name || !startYear || !endYear) return;\n\n setIsSubmitting(true);\n try {\n const response = await createOrUpdateStartup({\n name,\n url,\n startYear,\n endYear,\n id,\n ...(isPrimaryAffiliation && { title: getValueFromOption(title) }),\n });\n const updatedUser = {\n ...profileUser,\n profile_info: {\n ...profileUser.profile_info,\n ...(isPrimaryAffiliation && { title: getValueFromOption(title) }),\n startup: {\n startup_name: name,\n url,\n start_year: startYear,\n end_year: endYear,\n id: response.id,\n primary_affiliation: isPrimaryAffiliation,\n },\n },\n };\n setProfileUser(updatedUser);\n onClose();\n } catch (err) {\n console.error(err);\n setError(\"Something went wrong, please try again.\");\n setIsSubmitting(false);\n }\n };\n\n const handleDelete = async () => {\n setIsSubmitting(true);\n\n if (!id) return;\n\n try {\n await deleteStartup(id);\n\n const updatedUser = {\n ...profileUser,\n profile_info: {\n ...profileUser.profile_info,\n startup: undefined,\n },\n };\n setProfileUser(updatedUser);\n\n onClose();\n } catch (err) {\n console.error(err);\n setError(\"Something went wrong, please try again.\");\n setIsSubmitting(false);\n }\n };\n\n return (\n <BlankModal width=\"700px\" isOpen={isOpen} onClose={onClose} closeOnDimmerClick hideCloseButton>\n <Form onSubmit={handleSubmit}>\n <Heading>Add Startup</Heading>\n <Label>\n Startup Name\n <TextInput\n value={name ?? \"\"}\n onChange={(e) => setName(e.target.value.slice(0, 80))}\n characterLimit={80}\n data-testid=\"startup-name-input\"\n placeholder=\"Startup Name\"\n hideClearButton\n />\n </Label>\n <Gap />\n <Label>\n URL\n <TextInput\n value={url ?? \"\"}\n onChange={(e) => setUrl(e.target.value)}\n data-testid=\"startup-url-input\"\n placeholder=\"Startup URL\"\n hideClearButton\n />\n </Label>\n {isPrimaryAffiliation && (\n <>\n <Gap />\n <Label>\n Title\n <SingleSelectDropdown\n value={title}\n onChange={setTitle}\n options={STARTUP_TITLE_OPTIONS as DropdownOption[]}\n data-testid=\"startup-title-dropdown\"\n />\n </Label>\n </>\n )}\n <Gap />\n <TwoColumns>\n <div>\n <Label>\n Start year\n <SingleSelectDropdown\n placeholder=\"Start year\"\n data-testid=\"startup-start-year-input\"\n options={getYearOptions()}\n value={getOptionFromValue(startYear)}\n onChange={(option) => setStartYear(getValueFromOption(option) ?? \"\")}\n maxMenuHeight=\"200px\"\n menuPlacement=\"bottom\"\n isPortal\n />\n </Label>\n </div>\n <div>\n <Label>\n End year\n <SingleSelectDropdown\n placeholder=\"End year\"\n data-testid=\"startup-end-year-input\"\n options={[{ label: \"Present\", value: \"Present\" }, ...getYearOptions()]}\n value={getOptionFromValue(endYear)}\n onChange={(option) => setEndYear(getValueFromOption(option) ?? \"\")}\n maxMenuHeight=\"200px\"\n menuPlacement=\"bottom\"\n isPortal\n />\n </Label>\n </div>\n </TwoColumns>\n {error && <Error>{error}</Error>}\n <ButtonContainer>\n <div>\n {id && !isPrimaryAffiliation && (\n <Button\n type=\"button\"\n onClick={handleDelete}\n disabled={isSubmitting}\n variant=\"destructive-ghost\"\n >\n Remove Startup\n </Button>\n )}\n </div>\n <div>\n <Button type=\"button\" onClick={onClose} variant=\"ghost\" margin=\"0 15px 0 0\">\n Cancel\n </Button>\n <Button\n type=\"submit\"\n data-testid=\"startup-save-button\"\n disabled={!name || !startYear || !endYear || Boolean(error) || isSubmitting}\n >\n Save\n </Button>\n </div>\n </ButtonContainer>\n </Form>\n </BlankModal>\n );\n}\n","import { useEffect, useState } from \"react\";\n\nimport { Button } from \"@components/library\";\nimport KeywordsDropdown from \"@components/library/Dropdowns/KeywordsDropdown/KeywordsDropdown\";\nimport BlankModal, { BlankModalProps } from \"@components/library/ModalBases/BlankModal\";\nimport api from \"@requests/request\";\nimport { KeywordType } from \"@tsTypes/keywords\";\nimport { ButtonContainer, Form, Heading, Label } from \"./styles\";\n\ninterface KeywordEditModalProps extends BlankModalProps {\n type: KeywordType;\n currentValue: string[];\n profileUser: any;\n setProfileUser: (newProfileUser: any) => void;\n}\n\nconst HEADING = {\n discipline: \"Which disciplines are most relevant to your work?\",\n area_of_expertise: \"What is your expertise?\",\n};\n\nconst KeywordEditModal = ({\n isOpen,\n onClose,\n type,\n currentValue,\n profileUser,\n setProfileUser,\n}: KeywordEditModalProps) => {\n const [value, setValue] = useState<string[]>([]);\n const [isSubmitting, setIsSubmitting] = useState(false);\n\n useEffect(() => {\n setValue(currentValue);\n }, [currentValue, isOpen]);\n\n if (!isOpen) return null;\n\n const handleSubmit = async () => {\n setIsSubmitting(true);\n\n try {\n await api.put(`/scientist_profile/${profileUser.id}`, {\n ...(type === \"discipline\" && { disciplines: value }),\n ...(type === \"area_of_expertise\" && { areas_of_expertise: value }),\n });\n const updatedUser = {\n ...profileUser,\n ...(type === \"discipline\" && { disciplines: value }),\n ...(type === \"area_of_expertise\" && { areas_of_expertise: value }),\n };\n setProfileUser(updatedUser);\n setIsSubmitting(false);\n } catch (e) {\n setIsSubmitting(false);\n }\n onClose();\n };\n\n return (\n <BlankModal width=\"700px\" isOpen={isOpen} onClose={onClose} closeOnDimmerClick hideCloseButton>\n <Form>\n <Heading>{HEADING[type]}</Heading>\n <Label>\n <KeywordsDropdown\n keywordType={type}\n targetType=\"scientist\"\n value={value ?? []}\n onChange={setValue}\n isPortal\n />\n </Label>\n <ButtonContainer>\n <div />\n <div>\n <Button type=\"button\" onClick={onClose} variant=\"ghost\" margin=\"0 15px 0 0\">\n Cancel\n </Button>\n <Button\n type=\"button\"\n disabled={\n isSubmitting ||\n value?.length < (type === \"discipline\" ? 1 : 3) ||\n value === currentValue\n }\n onClick={handleSubmit}\n >\n Save\n </Button>\n </div>\n </ButtonContainer>\n </Form>\n </BlankModal>\n );\n};\n\nexport default KeywordEditModal;\n","import { css } from \"aphrodite\";\nimport { ChangeEvent, Dispatch, SetStateAction, useEffect, useRef, useState } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { Loader } from \"semantic-ui-react\";\nimport styled from \"styled-components\";\n\nimport { Button, Icon, Tooltip } from \"@components/library\";\nimport { COLORS, FONTS } from \"@constants\";\nimport { setMessengerState } from \"@redux/actions/messengerActions\";\nimport { setCurrentUser, toggleLoginModal } from \"@redux/actions/profileActions\";\nimport type { RootState } from \"@redux/store\";\nimport api from \"@requests/request\";\nimport { SegmentEventName } from \"@tsTypes/__generated__/enums\";\nimport type { Education } from \"@tsTypes/schema\";\nimport { track } from \"@utils/appUtils\";\n\nimport toast from \"@components/Toast\";\nimport { useSearchParams } from \"@hooks/router\";\nimport {\n addScientistToCompanyNetwork,\n getCompanyNetworkScientist,\n} from \"@requests/companyNetworkScientists\";\nimport { ScientistCurrentUser } from \"@tsTypes/index\";\nimport { KeywordType } from \"@tsTypes/keywords\";\nimport appsignal from \"@utils/appsignal\";\nimport { setPrevUrlCookie } from \"@utils/authUtils\";\nimport { t } from \"@utils/i18n\";\nimport { ProfilePageUser } from \"../ProfilePage\";\nimport styles from \"./Sidebar.styles\";\nimport { AffiliationEditModal, KeywordEditModal, StartupEditModal } from \"./modals\";\nimport type { AffiliationType } from \"./modals/AffiliationEditModal\";\n\ninterface Props {\n profileUser: ProfilePageUser | null;\n setProfileUser: Dispatch<SetStateAction<ProfilePageUser | null>>;\n isLoading: boolean;\n isPublic: boolean;\n isDigest: boolean;\n}\n\nexport default function Sidebar({\n profileUser,\n setProfileUser,\n isLoading,\n isPublic,\n isDigest,\n}: Props) {\n const [isAffiliationEditModalOpen, setIsAffiliationEditModalOpen] = useState(false);\n const [affiliationEditModalType, setAffiliationEditModalType] = useState<AffiliationType>();\n const [isStartupEditModalOpen, setIsStartupEditModalOpen] = useState(false);\n const [isKeywordEditModalOpen, setIsKeywordEditModalOpen] = useState(false);\n const [keywordEditModalType, setKeywordEditModalType] = useState<KeywordType>();\n const [isInNetwork, setIsInNetwork] = useState(false);\n const [isAddingToNetwork, setIsAddingToNetwork] = useState(false);\n\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n const dispatch = useDispatch();\n\n const currentUser = useSelector((state: RootState) => state.profiles.currentUser);\n const subscription = useSelector((state: RootState) => state.company.subscription);\n const isMobile = useSelector((state: RootState) => state.window.isMobile);\n\n const [searchParams, setSearchParams] = useSearchParams();\n const autoAddParam = searchParams.get(\"auto_add\");\n const shouldAutoAdd = autoAddParam === \"true\";\n\n const isUser = currentUser.id === profileUser?.id;\n const canEdit = isUser && !isPublic;\n const isSponsor = currentUser?.role === 1;\n\n const scientistProfileId = profileUser?.profile_info?.id;\n const companyId = currentUser.profile_info?.company_id;\n\n useEffect(() => {\n if (!(scientistProfileId && companyId)) return;\n\n if (shouldAutoAdd) {\n addToNetwork();\n return;\n }\n\n // Check if scientist is in sponsor's network\n (async () => {\n const cns = await getCompanyNetworkScientist({\n scientistProfileId,\n companyId,\n });\n setIsInNetwork(cns?.status === \"accepted\");\n })();\n }, [scientistProfileId, companyId]);\n\n const currentEducations = profileUser?.profile_info?.educations\n ? profileUser.profile_info.educations.map((e: any) => e.degree)\n : [];\n\n const userStartup = profileUser?.profile_info?.startup;\n\n const handlePFPicClick = () => {\n track(SegmentEventName.Click, {\n ui_component: \"Profile Picture\",\n react_component: \"Sidebar\",\n profile: profileUser,\n });\n fileInputRef.current?.click();\n };\n\n const updateUser = (updatedUser: ScientistCurrentUser) => {\n setProfileUser(updatedUser);\n dispatch(setCurrentUser(updatedUser));\n };\n\n const onPFPicChange = async (e: ChangeEvent<HTMLInputElement>) => {\n const file = e.target.files?.[0];\n\n if (!file) return;\n\n const formData = new FormData();\n formData.append(\"file\", file);\n\n const response = await api.post(`/profile/image-upload`, formData);\n\n const updatedUser = {\n ...profileUser,\n image: response.data.image,\n };\n updateUser(updatedUser as any);\n };\n\n const renderAddStartup = () => {\n let companyUrl = userStartup?.url ?? \"\";\n\n if (companyUrl.startsWith(\"http\")) {\n companyUrl = companyUrl.split(\"://\")[1];\n }\n\n return (\n <div className={css(styles.Sidebar_sidebar)}>\n <div className={css(styles.Sidebar_affiliationRow)}>\n {companyUrl.length > 0 ? (\n <a\n href={`//${userStartup?.url}`}\n target=\"_blank\"\n className={css(styles.Sidebar_link)}\n rel=\"noreferrer\"\n >\n {userStartup?.startup_name}\n </a>\n ) : (\n <div>{userStartup?.startup_name}</div>\n )}\n {canEdit ? (\n <div\n className={css(styles.Sidebar_iconButton)}\n data-testid=\"edit-startup-button\"\n onClick={() => setIsStartupEditModalOpen(true)}\n >\n <Icon name=\"Edit\" size=\"sm\" color={COLORS.NEUTRAL_400} margin=\"1px 0 0\" />\n </div>\n ) : null}\n </div>\n {userStartup?.primary_affiliation && (\n <div className={css(styles.Sidebar_sidebarSubtext)}>\n {profileUser?.profile_info?.title}\n </div>\n )}\n {userStartup?.start_year ? (\n <div className={css(styles.Sidebar_sidebarSubtext)}>\n {userStartup?.start_year || \"?\"} - {userStartup?.end_year || \"Present\"}\n </div>\n ) : null}\n <br />\n </div>\n );\n };\n\n const renderLatestLocation = () => {\n if (!profileUser) return \"\";\n\n const { startup, university, university_end_year } = profileUser.profile_info;\n\n const startupIsRecent = startup?.id && (startup?.end_year === \"Present\" || !startup?.end_year);\n if (startupIsRecent) {\n return startup.startup_name;\n } else if (university && (university_end_year === \"Present\" || !university_end_year)) {\n return university;\n }\n\n return \"\";\n };\n\n const sendMessage = () => {\n dispatch(\n setMessengerState({\n recipient: {\n ...profileUser,\n name: `${profileUser?.first_name} ${profileUser?.last_name}`,\n },\n } as any)\n );\n };\n\n const addToNetwork = async () => {\n track(SegmentEventName.Click, {\n ui_component: \"Add To Network Button\",\n isDigest,\n profileUser,\n });\n if (!scientistProfileId) return;\n\n if (!currentUser.id) {\n setPrevUrlCookie(window.location.href + \"&auto_add=true\");\n dispatch(toggleLoginModal({ open: true, landing: \"login\" }));\n return;\n }\n\n setIsAddingToNetwork(true);\n\n try {\n await addScientistToCompanyNetwork(scientistProfileId.toString());\n toast.success(\n t(\"models.company_network_scientist.scientist_digest.add_success\", {\n scientist_name: profileUser.first_name,\n company_name: currentUser.profile_info.company_name,\n })\n );\n\n setIsInNetwork(true);\n\n searchParams.delete(\"digest\");\n searchParams.delete(\"auto_add\");\n setSearchParams(searchParams);\n } catch (error) {\n appsignal.sendError(error, (span) => {\n span.setAction(\"ProfileSidebar#addToNetwork\");\n span.setTags({ scientist_profile_id: scientistProfileId.toString() });\n });\n toast.error(t(\"error.default\"));\n }\n setIsAddingToNetwork(false);\n };\n\n const currentPFPic = profileUser?.image?.medium?.url;\n\n return (\n <div>\n {isMobile && isLoading ? (\n <Loader style={{ marginTop: \"180px\" }} active inline=\"centered\" />\n ) : (\n <div\n className={css(styles.Sidebar_container)}\n style={{\n zIndex: !isMobile ? 499 : undefined,\n paddingTop: isMobile && \"110px\",\n }}\n >\n {isAffiliationEditModalOpen && affiliationEditModalType && (\n <AffiliationEditModal\n isOpen={isAffiliationEditModalOpen}\n onClose={() => {\n setIsAffiliationEditModalOpen(false);\n setAffiliationEditModalType(undefined);\n }}\n type={affiliationEditModalType}\n profileUser={profileUser}\n setProfileUser={updateUser}\n />\n )}\n {isStartupEditModalOpen && (\n <StartupEditModal\n isOpen={isStartupEditModalOpen}\n onClose={() => setIsStartupEditModalOpen(false)}\n profileUser={profileUser}\n setProfileUser={updateUser}\n />\n )}\n {isKeywordEditModalOpen && keywordEditModalType && (\n <KeywordEditModal\n type={keywordEditModalType}\n isOpen={isKeywordEditModalOpen}\n onClose={() => setIsKeywordEditModalOpen(false)}\n currentValue={\n profileUser?.[\n keywordEditModalType === \"discipline\" ? \"disciplines\" : \"areas_of_expertise\"\n ] as string[]\n }\n profileUser={profileUser}\n setProfileUser={updateUser}\n />\n )}\n {Boolean(profileUser) && !isLoading && (\n <div data-testid=\"sidebar-content\">\n <div className={css(styles.Sidebar_profilePicContainer)}>\n {(() => {\n if (canEdit) {\n if (currentPFPic) {\n return (\n <div\n className={css(styles.Sidebar_popupProfilePic)}\n data-testid=\"profile-page-profile-picture\"\n onClick={handlePFPicClick}\n style={{\n backgroundImage: `url(${currentPFPic})`,\n position: \"relative\",\n }}\n >\n <input\n onChange={onPFPicChange}\n type=\"file\"\n id=\"file\"\n accept=\".png, .jpg, .jpeg, .bmp, .gif, .ico, .cur, .jfif, .pjped, .pjp, .svg\"\n ref={fileInputRef}\n style={{ display: \"none\" }}\n />\n </div>\n );\n }\n return (\n <div\n className={css(\n styles.Sidebar_regularProfilePic,\n styles.Sidebar_regularProfilePicClickable\n )}\n data-testid=\"profile-page-profile-picture\"\n onClick={handlePFPicClick}\n >\n <Icon name=\"Avatar Edit\" color={COLORS.NEUTRAL_500} />\n <input\n onChange={onPFPicChange}\n type=\"file\"\n id=\"file\"\n accept=\".png, .jpg, .jpeg, .bmp, .gif, .ico, .cur, .jfif, .pjped, .pjp, .svg\"\n ref={fileInputRef}\n style={{ display: \"none\" }}\n />\n </div>\n );\n } else if (!currentPFPic && profileUser?.first_name && profileUser?.last_name) {\n return (\n <div className={css(styles.Sidebar_regularProfilePic)}>\n {profileUser.first_name[0].toUpperCase()}\n {profileUser.last_name[0].toUpperCase()}\n </div>\n );\n }\n\n return (\n <div\n className={css(styles.Sidebar_regularProfilePic)}\n style={{\n backgroundImage: `url(${profileUser?.image?.medium?.url})`,\n }}\n />\n );\n })()}\n </div>\n <div className={css(styles.Sidebar_profileName)}>\n {profileUser?.first_name &&\n profileUser.first_name.charAt(0).toUpperCase() +\n profileUser.first_name.slice(1)}{\" \"}\n {profileUser?.last_name &&\n profileUser.last_name.charAt(0).toUpperCase() + profileUser.last_name.slice(1)}\n </div>\n <div className={css(styles.Sidebar_profileTitle)}>\n {profileUser?.profile_info && renderLatestLocation()?.toUpperCase()}\n </div>\n {isSponsor &&\n !currentUser.profile_info.commenter &&\n isInNetwork &&\n !isDigest &&\n subscription?.features?.company_scientist_network && (\n <div className={css(styles.Sidebar_followButtonContainer)}>\n <Button\n type=\"button\"\n iconName=\"Message\"\n size=\"sm\"\n margin=\"0\"\n onClick={sendMessage}\n >\n Message\n </Button>\n </div>\n )}\n {\n // Show digest button if non-commenter sponsor and sci is not in network\n // OR if is digest and is logged out or a sponsor\n ((isSponsor && !currentUser.profile_info.commenter && !isInNetwork) ||\n (isDigest && (!currentUser.id || isSponsor))) && (\n <div className={css(styles.Sidebar_followButtonContainer)}>\n <div>\n <Button\n type=\"button\"\n iconName=\"Add\"\n size=\"sm\"\n margin=\"0\"\n onClick={addToNetwork}\n disabled={isAddingToNetwork}\n >\n {t(\"components.buttons.add_to_network\")}\n </Button>\n <TooltipContainer>\n <Tooltip\n arrowOffsetTop=\"40%\"\n contentWidth=\"100px\"\n tooltipWidth=\"200px\"\n position=\"right\"\n content={t(\"pages.scientist_profile_page.add_to_network_tooltip.text\", {\n name: profileUser?.first_name ?? \"\",\n company_name:\n currentUser.profile_info.company_name ??\n t(\n \"pages.scientist_profile_page.add_to_network_tooltip.company_name_default\"\n ),\n })}\n >\n <TooltipText>\n <Icon name=\"Info Small\" size=\"xs\" color={COLORS.NEUTRAL_400} />\n What's this?\n </TooltipText>\n </Tooltip>\n </TooltipContainer>\n </div>\n </div>\n )\n }\n\n {isMobile && (\n <>\n <div className={css(styles.Sidebar_headline)}>\n {profileUser?.profile_info?.headline}\n </div>\n <div className={css(styles.Sidebar_about)}>\n {profileUser?.profile_info?.about}\n </div>\n </>\n )}\n\n {userStartup?.primary_affiliation && renderAddStartup()}\n\n <div>\n {profileUser?.profile_info?.university ? (\n <div className={css(styles.Sidebar_sidebar)}>\n <div className={css(styles.Sidebar_affiliationRow)}>\n {profileUser.profile_info.university}\n {canEdit && (\n <div\n className={css(styles.Sidebar_iconButton)}\n onClick={() => {\n setIsAffiliationEditModalOpen(true);\n setAffiliationEditModalType(\"primary\");\n }}\n >\n <Icon name=\"Edit\" size=\"sm\" color={COLORS.NEUTRAL_400} margin=\"1px 0 0\" />\n </div>\n )}\n </div>\n <div className={css(styles.Sidebar_sidebarSubtext)}>\n {userStartup?.primary_affiliation\n ? \"Principal Investigator\"\n : profileUser.profile_info.title}\n </div>\n {profileUser.profile_info.university_start_year ? (\n <div className={css(styles.Sidebar_sidebarSubtext)}>\n {profileUser.profile_info.university_start_year || \"?\"} -{\" \"}\n {profileUser.profile_info.university_end_year || \"Present\"}\n </div>\n ) : null}\n <br />\n </div>\n ) : (\n canEdit &&\n !userStartup && (\n <div className={css(styles.Sidebar_sidebar)}>\n <div\n style={{ cursor: \"pointer\" }}\n onClick={() => {\n setIsAffiliationEditModalOpen(true);\n setAffiliationEditModalType(\"primary\");\n }}\n >\n + Add PI\n </div>\n <br />\n </div>\n )\n )}\n </div>\n {userStartup && !userStartup.primary_affiliation && renderAddStartup()}\n {profileUser?.profile_info && (\n <>\n {profileUser.profile_info.educations &&\n profileUser.profile_info.educations.length > 0 && (\n <>\n {profileUser.profile_info.educations\n .sort((obj1: Education, obj2: Education) => {\n if (\n obj1.end_year === obj2.end_year &&\n obj1.start_year === obj2.start_year\n ) {\n return 0;\n }\n\n if (\n (obj1.end_year === \"Present\" && obj2.end_year !== \"Present\") ||\n Number(obj1.end_year) > Number(obj2.end_year)\n ) {\n return -1;\n } else if (\n (obj2.end_year === \"Present\" && obj1.end_year !== \"Present\") ||\n Number(obj1.end_year) < Number(obj2.end_year)\n ) {\n return 1;\n }\n\n // Else go to the 2nd item\n if (\n obj2.start_year === \"?\" ||\n Number(obj1.start_year) < Number(obj2.start_year)\n ) {\n return -1;\n } else if (\n obj1.start_year === \"?\" ||\n Number(obj1.start_year) > Number(obj2.start_year)\n ) {\n return 1;\n }\n // nothing to split them\n return 0;\n })\n .map((education: Education) => {\n return (\n <div\n key={`education-${education.id}`}\n className={css(styles.Sidebar_sidebar)}\n >\n <div className={css(styles.Sidebar_affiliationRow)}>\n {education.location}\n {canEdit && (\n <div\n className={css(styles.Sidebar_iconButton)}\n onClick={() => {\n setIsAffiliationEditModalOpen(true);\n setAffiliationEditModalType(\n education.degree as AffiliationType\n );\n }}\n >\n <Icon\n name=\"Edit\"\n size=\"sm\"\n color={COLORS.NEUTRAL_400}\n margin=\"1px 0 0\"\n />\n </div>\n )}\n </div>\n <div className={css(styles.Sidebar_sidebarSubtext)}>\n {education.degree}\n {education.degree === \"PhD\" && education.field_of_study\n ? `, ${education.field_of_study}`\n : \"\"}\n </div>\n {education.start_year ? (\n <div className={css(styles.Sidebar_sidebarSubtext)}>\n {education.start_year || \"?\"} -{\" \"}\n {education.end_year || \"Present\"}\n </div>\n ) : null}\n <br />\n </div>\n );\n })}\n </>\n )}\n {canEdit && (\n <div className={css(styles.Sidebar_sidebar)}>\n {canEdit &&\n profileUser.profile_info.title !== \"Postdoctoral Scientist\" &&\n !currentEducations.includes(\"Postdoctoral Scientist\") && (\n <div>\n <br />\n <div\n style={{ cursor: \"pointer\" }}\n onClick={() => {\n setIsAffiliationEditModalOpen(true);\n setAffiliationEditModalType(\"Postdoctoral Scientist\");\n }}\n >\n + Add Postdoc\n </div>\n </div>\n )}\n {canEdit &&\n currentUser.profile_info.title !== \"PhD Candidate\" &&\n !currentEducations.includes(\"PhD\") && (\n <div>\n <br />\n <div\n style={{ cursor: \"pointer\" }}\n onClick={() => {\n setIsAffiliationEditModalOpen(true);\n setAffiliationEditModalType(\"PhD\");\n }}\n >\n + Add PhD\n </div>\n </div>\n )}\n {canEdit &&\n currentUser.profile_info.title !== \"MD Candidate\" &&\n !currentEducations.includes(\"MD\") && (\n <div>\n <br />\n <div\n style={{ cursor: \"pointer\" }}\n onClick={() => {\n setIsAffiliationEditModalOpen(true);\n setAffiliationEditModalType(\"MD\");\n }}\n >\n + Add MD\n </div>\n </div>\n )}\n </div>\n )}\n {!userStartup && canEdit && (\n <div className={css(styles.Sidebar_sidebar)}>\n <br />\n <div\n style={{ cursor: \"pointer\" }}\n onClick={() => {\n setIsStartupEditModalOpen(true);\n }}\n >\n + Add Startup\n </div>\n </div>\n )}\n </>\n )}\n\n {isUser || profileUser?.disciplines?.length ? (\n <div className={css(styles.Sidebar_sidebarHeader)}>\n Disciplines\n {canEdit && (\n <div\n className={css(styles.Sidebar_iconButton)}\n onClick={() => {\n track(SegmentEventName.Click, {\n ui_component: \"Disciplines\",\n react_component: \"Sidebar\",\n profile: profileUser,\n });\n setIsKeywordEditModalOpen(true);\n setKeywordEditModalType(\"discipline\");\n }}\n >\n <Icon name=\"Edit\" size=\"sm\" color={COLORS.NEUTRAL_400} />\n </div>\n )}\n </div>\n ) : null}\n\n {profileUser?.disciplines?.length ? (\n <div className={css(styles.Sidebar_interestSidebar)}>\n {profileUser.disciplines.map((discipline) => (\n <div\n key={`discipline-${discipline}`}\n className={css(styles.Sidebar_expertise, styles.Sidebar_application)}\n >\n {discipline}\n </div>\n ))}\n </div>\n ) : (\n <div className={css(styles.Sidebar_sidebar)}>\n {canEdit && (\n <div\n style={{ cursor: \"pointer\" }}\n onClick={() => {\n setIsKeywordEditModalOpen(true);\n setKeywordEditModalType(\"discipline\");\n }}\n >\n + Add Discipline\n </div>\n )}\n </div>\n )}\n\n {isUser || profileUser?.areas_of_expertise?.length ? (\n <div className={css(styles.Sidebar_sidebarHeader)}>\n Expertise\n {canEdit && (\n <div\n className={css(styles.Sidebar_iconButton)}\n onClick={() => {\n track(\"Clicked areas of expertise\");\n setIsKeywordEditModalOpen(true);\n setKeywordEditModalType(\"area_of_expertise\");\n }}\n >\n <Icon name=\"Edit\" size=\"sm\" color={COLORS.NEUTRAL_400} />\n </div>\n )}\n </div>\n ) : null}\n\n {profileUser?.areas_of_expertise && profileUser.areas_of_expertise.length > 0 ? (\n <div className={css(styles.Sidebar_interestSidebar)}>\n {profileUser.areas_of_expertise.map((area) => (\n <div key={`area-${area}`} className={css(styles.Sidebar_expertise)}>\n {area}\n </div>\n ))}\n </div>\n ) : (\n <div className={css(styles.Sidebar_sidebar)}>\n {canEdit && (\n <div\n style={{ cursor: \"pointer\" }}\n onClick={() => {\n setIsKeywordEditModalOpen(true);\n setKeywordEditModalType(\"area_of_expertise\");\n }}\n >\n + Add Areas of Expertise\n </div>\n )}\n </div>\n )}\n </div>\n )}\n </div>\n )}\n </div>\n );\n}\n\nconst TooltipContainer = styled.div`\n display: flex;\n justify-content: center;\n margin: 4px 0;\n`;\n\nconst TooltipText = styled.div`\n display: flex;\n align-items: center;\n gap: 4px;\n color: ${COLORS.NEUTRAL_500};\n ${FONTS.REGULAR_3}\n`;\n","import Sidebar from \"./Sidebar\";\n\nexport default Sidebar;\n","import CharLimitInput from \"@components/CharLimitInput\";\nimport { BlankModal } from \"@components/library\";\nimport FundingEditModal from \"@components/modals/ScientistContributionEditModals/FundingEditModal\";\nimport PatentEditModal from \"@components/modals/ScientistContributionEditModals/PatentEditModal\";\nimport PublicationEditModal from \"@components/modals/ScientistContributionEditModals/PublicationEditModal\";\nimport {\n useFundings,\n usePatents,\n useProposals,\n usePublications,\n} from \"@components/modals/ScientistQuickViewModal/hooks\";\nimport { COLORS, FONTS, WINDOW_DIMENSIONS } from \"@constants\";\nimport { useSearchParams } from \"@hooks/router\";\nimport { fetchFundings, fetchPatents, fetchPublications } from \"@redux/actions/profileActions\";\nimport { RootState } from \"@redux/store\";\nimport { getUser, updateUserProfile } from \"@requests/users\";\nimport { FundingPartial } from \"@tsTypes/fundings/_funding\";\nimport { ScientistCurrentUser, ScientistProfileProposal, ScientistShowUser } from \"@tsTypes/index\";\nimport { PatentPartial } from \"@tsTypes/patents/_patent\";\nimport { PublicationPartial } from \"@tsTypes/publications/_publication\";\nimport { UserRole } from \"@tsTypes/users\";\nimport appsignal from \"@utils/appsignal\";\nimport { t } from \"@utils/i18n\";\nimport { debounce } from \"lodash\";\nimport { Dispatch, SetStateAction, useEffect, useMemo, useState } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { useParams } from \"react-router-dom\";\nimport { Loader } from \"semantic-ui-react\";\nimport styled from \"styled-components\";\nimport KeywordSignUpModal from \"../../components/modals/KeywordSignUpModal\";\nimport ProfileAttachments from \"./ProfileAttachments\";\nimport Sidebar from \"./Sidebar\";\n\nconst CHAR_LIMITS = {\n headline: 65,\n about: 300,\n} as const;\n\nexport type ProfilePageUser = ScientistShowUser | ScientistCurrentUser;\ntype TextFieldLabel = \"headline\" | \"about\";\ntype TextFieldSaveStatus = \"error\" | \"success\" | \"submitting\" | null;\n\nfunction ProfilePage() {\n const [editingHeadline, setEditingHeadline] = useState(\"\");\n const [headlineStatus, setHeadlineStatus] = useState<TextFieldSaveStatus>(null);\n const [editingAbout, setEditingAbout] = useState(\"\");\n const [aboutStatus, setAboutStatus] = useState<TextFieldSaveStatus>(null);\n const [profileUser, setProfileUser] = useState<ProfilePageUser | null>(null);\n const [isLoading, setIsLoading] = useState(false);\n const [refreshKey, setRefreshKey] = useState(0);\n\n const [isPublicationModalOpen, setIsPublicationModalOpen] = useState(false);\n const [editPublication, setEditPublication] = useState<PublicationPartial | null>(null);\n const [isFundingModalOpen, setIsFundingModalOpen] = useState(false);\n const [editFunding, setEditFunding] = useState<FundingPartial | null>(null);\n const [isPatentModalOpen, setIsPatentModalOpen] = useState(false);\n const [editPatent, setEditPatent] = useState<PatentPartial | null>(null);\n\n const dispatch = useDispatch();\n const currentUser = useSelector((state: RootState) => state.profiles.currentUser);\n\n const [searchParams] = useSearchParams();\n const isPublicParam = searchParams.get(\"public\");\n const isDigestParam = searchParams.get(\"digest\");\n\n // Permission flags\n const isOwner = currentUser.id === profileUser?.id;\n const isPublic = isPublicParam === \"true\" && isOwner;\n const isDigest = isDigestParam === \"true\";\n const currentUserRole = currentUser?.role;\n const isLoggedOut = typeof currentUserRole === \"undefined\";\n const shouldBlur = isLoggedOut && !isDigest;\n const [isKeywordModalOpen, setIsKeywordModalOpen] = useState<boolean>(\n searchParams.get(\"keywords\") === \"1\"\n );\n\n const profileInfoId = profileUser?.profile_info?.id;\n const { publications, refresh: refreshPublications } = usePublications(\n shouldBlur ? undefined : profileInfoId\n );\n const { fundings, refresh: refreshFundings } = useFundings(\n shouldBlur ? undefined : profileInfoId\n );\n const { patents, refresh: refreshPatents } = usePatents(shouldBlur ? undefined : profileInfoId);\n const proposals: ScientistProfileProposal[] = useProposals(\n shouldBlur ? undefined : profileInfoId\n ) as any;\n\n const { id: profileIdParam } = useParams<{ id: string }>();\n\n // Get profile user\n useEffect(() => {\n setIsLoading(true);\n\n const pathId = profileIdParam?.split(\"-\");\n if (!pathId?.indexOf(\"-\")) return;\n const profileUserId = pathId[pathId.length - 1];\n\n (async () => {\n const data = await getUser(profileUserId);\n if (!data?.user) return;\n setProfileUser(data.user as ProfilePageUser);\n })();\n }, [profileIdParam, refreshKey]);\n\n // Get extra info and attachments about the profile user\n useEffect(() => {\n if (!profileUser?.id) return;\n\n setEditingHeadline(profileUser.profile_info?.headline ?? \"\");\n setEditingAbout(profileUser.profile_info?.about ?? \"\");\n\n setIsLoading(false);\n\n if (shouldBlur) return;\n\n // NOTE: (justinpchang) Inefficient for now due to duplicate request with custom hooks\n // TODO: (justinpchang) Remove edit modal dependency on redux\n if (profileInfoId !== undefined) {\n dispatch(fetchPublications(profileInfoId));\n dispatch(fetchPatents(profileInfoId));\n dispatch(fetchFundings(profileInfoId));\n }\n }, [profileUser?.id, refreshKey]);\n\n const debouncedUpdateHeadlineOrAbout = useMemo(\n () =>\n debounce(\n async (label: TextFieldLabel, value: string) => {\n const status = label === \"headline\" ? headlineStatus : aboutStatus;\n const setStatus = label === \"headline\" ? setHeadlineStatus : setAboutStatus;\n\n if (status === \"submitting\") return;\n\n if (value.length > CHAR_LIMITS[label]) return;\n\n setStatus(\"submitting\");\n try {\n const user = await updateUserProfile(profileUser?.id, UserRole.SCIENTIST, {\n [label]: value,\n });\n setProfileUser(user);\n setStatus(\"success\");\n setTimeout(() => setStatus(null), 2500);\n } catch (error) {\n setStatus(\"error\");\n appsignal.sendError(error, (span) => {\n span.setAction(\"ProfilePage#debouncedUpdateProfile\");\n span.setTags({ profileId: profileIdParam, [value]: label });\n });\n }\n },\n 500,\n { leading: true, trailing: true }\n ),\n [profileUser?.id, headlineStatus, aboutStatus, refreshKey]\n );\n\n const renderTextInput = (label: TextFieldLabel) => {\n let value: string,\n setValue: Dispatch<SetStateAction<string>>,\n status: TextFieldSaveStatus,\n rows: number,\n charLimit: number;\n if (label === \"headline\") {\n value = editingHeadline;\n setValue = setEditingHeadline;\n status = headlineStatus;\n rows = 1;\n charLimit = 65;\n } else {\n value = editingAbout;\n setValue = setEditingAbout;\n status = aboutStatus;\n rows = 4;\n charLimit = 300;\n }\n return (\n <InputContainer>\n <Input\n value={value}\n onChange={(e) => {\n setValue(e.target.value);\n debouncedUpdateHeadlineOrAbout(label, e.target.value);\n }}\n rows={rows}\n charLimit={charLimit}\n placeholder={t([\"pages\", \"scientist_profile_page\", \"input\", \"placeholder\", label])}\n data-testid={`user-${label}-input`}\n />\n {status && (\n <InputStatus>\n {t([\"pages\", \"scientist_profile_page\", \"input\", \"status\", status])}\n </InputStatus>\n )}\n </InputContainer>\n );\n };\n\n const hasHeadline =\n profileUser?.profile_info?.headline && profileUser?.profile_info.headline.trim().length > 0;\n const hasAbout =\n profileUser?.profile_info?.about && profileUser?.profile_info.about.trim().length > 0;\n\n return (\n <>\n {isPublicationModalOpen && (\n <PublicationEditModal\n isOpen={isPublicationModalOpen}\n onClose={() => setIsPublicationModalOpen(false)}\n onSuccess={() => refreshPublications()}\n editPublication={editPublication}\n />\n )}\n {isFundingModalOpen && (\n <FundingEditModal\n isOpen={isFundingModalOpen}\n onClose={() => setIsFundingModalOpen(false)}\n onSuccess={() => refreshFundings()}\n editFunding={editFunding}\n />\n )}\n {isPatentModalOpen && (\n <PatentEditModal\n isOpen={isPatentModalOpen}\n onClose={() => setIsPatentModalOpen(false)}\n onSuccess={() => refreshPatents()}\n editPatent={editPatent}\n />\n )}\n\n <Container\n data-testid=\"profile-page-container-main\"\n data-test-profile-id={profileUser?.profile_id}\n >\n <Sidebar\n profileUser={profileUser}\n setProfileUser={setProfileUser}\n isLoading={isLoading}\n isPublic={isPublic}\n isDigest={isDigest}\n />\n {isLoading ? (\n <Loader style={{ marginTop: \"150px\" }} active inline=\"centered\" />\n ) : (\n <Content>\n <BlankModal\n onClose={() => {\n setIsKeywordModalOpen(false);\n }}\n isOpen={isKeywordModalOpen}\n width=\"540px\"\n >\n <KeywordSignUpModal\n onSubmit={() => {\n setIsKeywordModalOpen(false);\n // If keywords changed, we refetch so the page is updated with them.\n setRefreshKey(refreshKey + 1);\n }}\n />\n </BlankModal>\n\n {isOwner && !isPublic ? (\n <>\n {renderTextInput(\"headline\")}\n {renderTextInput(\"about\")}\n </>\n ) : (\n <>\n {hasHeadline && (\n <DisabledHeadline>{profileUser.profile_info.headline}</DisabledHeadline>\n )}\n {hasAbout && <DisabledAbout>{profileUser.profile_info.about}</DisabledAbout>}\n </>\n )}\n <ProfileAttachments\n publications={publications}\n openPublicationModal={(newEditPublication) => {\n setEditPublication(newEditPublication);\n setIsPublicationModalOpen(true);\n }}\n fundings={fundings}\n openFundingModal={(newEditFunding) => {\n setEditFunding(newEditFunding);\n setIsFundingModalOpen(true);\n }}\n patents={patents}\n openPatentModal={(newEditPatent) => {\n setEditPatent(newEditPatent);\n setIsPatentModalOpen(true);\n }}\n proposals={proposals}\n name={profileUser?.name ?? \"\"}\n isPublic={isPublic}\n isOwner={isOwner}\n shouldBlur={shouldBlur}\n />\n </Content>\n )}\n </Container>\n </>\n );\n}\n\nexport default ProfilePage;\n\nconst Container = styled.div`\n position: relative;\n height: fit-content;\n min-height: 1000px;\n\n display: grid;\n grid-template-columns: 330px 1fr;\n\n ${WINDOW_DIMENSIONS.MOBILE_MEDIA_QUERY} {\n grid-template-columns: 1fr;\n }\n`;\nconst Content = styled.div`\n display: flex;\n flex-direction: column;\n gap: 20px;\n\n width: 100%;\n padding: 32px 5vw 0;\n overflow-x: auto;\n\n ${WINDOW_DIMENSIONS.MOBILE_MEDIA_QUERY} {\n display: none;\n }\n`;\nconst InputContainer = styled.div`\n width: 55%;\n margin: -25px 0 15px 0;\n`;\nconst Input = styled(CharLimitInput)`\n padding: 8px 10px;\n margin: 0 0 10px 0;\n box-sizing: border-box;\n min-width: 500px;\n\n ${FONTS.REGULAR_2}\n\n ::placeholder {\n ${FONTS.REGULAR_2}\n }\n`;\nconst InputStatus = styled.span`\n position: relative;\n top: -10px;\n margin-left: 15px;\n\n ${FONTS.REGULAR_3};\n`;\nconst DisabledHeadline = styled.div`\n width: 75%;\n margin-bottom: 10px;\n color: ${COLORS.BLACK};\n ${FONTS.SEMIBOLD_1}\n`;\nconst DisabledAbout = styled.div`\n width: 75%;\n margin-bottom: 25px;\n color: ${COLORS.BLACK};\n ${FONTS.REGULAR_2}\n`;\n","import ProfilePage from \"./ProfilePage\";\nexport default ProfilePage;\n"],"names":["InputBox","styled","textarea","width","COLORS","BLACK","FONTS","REGULAR_2","NEUTRAL_500","resizeable","resizeGrabber","error","RED","InputDescription","div","SEMIBOLD_1","labelStyles","InputLabel","REGULAR_3","OptionalDescription","span","props","_useState2","_slicedToArray","useState","default","textValue","setTextValue","overLimit","value","length","charLimit","_jsxs","style","children","S","label","optional","_jsx","_objectSpread","onChange","e","target","handler","updateAffiliation","userId","location","startYear","endYear","title","request","put","university","university_start_year","university_end_year","createOrUpdateEducation","async","degree","fieldOfStudy","id","data","field_of_study","start_year","end_year","post","deleteEducation","delete","createOrUpdateStartup","name","url","startup_name","encodeURI","primary_affiliation_title","deleteStartup","MOCK_PUBLICATIONS","abstract","date","publication_name","TABS","TAB_FONT","MEDIUM_2","TAB_DISTANCE","TAB_MARGIN","publications","openPublicationModal","fundings","openFundingModal","patents","openPatentModal","proposals","isPublic","isOwner","shouldBlur","activeTab","setActiveTab","dispatch","useDispatch","tabs","useMemo","visible","add","edit","find","p","f","filter","map","tab","key","count","TabsContainer","Tabs","font","tabDistance","margin","TabPanel","isActive","attachment","ScientistContribution","contribution","SignedOutOverlay","t_html","GradientButton","size","onClick","setPrevUrlCookie","window","href","toggleLoginModal","open","t","Button","iconName","variant","pluralize","toLowerCase","EditRow","IconButton","hideTooltip","WHITE","STYLES","SHADOW_D","MEDIUM_1","StyleSheet","create","Sidebar_container","textAlign","borderRight","NEUTRAL_200","background","position","height","padding","Sidebar_showMoreText","JS_FONTS","REGULAR_4","color","cursor","Sidebar_dropdownIcon","marginLeft","display","Sidebar_showMoreIcon","marginRight","Sidebar_accordion","paddingLeft","Sidebar_verifiedIcon","Sidebar_popupProfilePic","backgroundColor","NEUTRAL_100","borderRadius","backgroundRepeat","backgroundPosition","backgroundSize","Sidebar_regularProfilePic","justifyContent","alignItems","HEADING_2_SEMIBOLD","Sidebar_regularProfilePicClickable","Sidebar_profilePicContainer","marginBottom","Sidebar_profileName","HEADING_4_SEMIBOLD","Sidebar_headline","REGULAR_1","Sidebar_about","Sidebar_profileTitle","overflowX","textOverflow","Sidebar_followButtonContainer","Sidebar_sidebarHeader","letterSpacing","Sidebar_sidebar","HALO_BLUE","Sidebar_interestSidebar","MEDIUM_3","flexFlow","Sidebar_keyword","border","Sidebar_expertise","Sidebar_application","Sidebar_opportunityList","Sidebar_opportunityHeader","SEMIBOLD_2","Sidebar_opportunityTitle","whiteSpace","Sidebar_opportunityTitleActive","Sidebar_opportunityCount","verticalAlign","paddingRight","Sidebar_opportunityRow","Sidebar_uploadIcon","top","left","fontSize","NEUTRAL_400","Sidebar_settingsGroup","Sidebar_settingsLabelActive","Sidebar_settingsLabel","Sidebar_regularText","Sidebar_emptyPFPic","opacity","Sidebar_affiliationRow","gridTemplateColumns","gap","Sidebar_iconButton","Sidebar_sidebarSubtext","Sidebar_link","Form","form","Heading","Label","Error","ButtonContainer","Contact","Gap","TwoColumns","HEADING","primary","PhD","MD","AffiliationEditModal","isOpen","onClose","type","profileUser","setProfileUser","setLocation","_useState4","setTitle","_useState6","setFieldOfStudy","_useState8","setStartYear","_useState10","setEndYear","_useState12","setId","_useState14","setError","_useState16","isSubmitting","setIsSubmitting","useEffect","profile_info","SCIENTIST_ROLE_OPTIONS","option","education","educations","BlankModal","closeOnDimmerClick","hideCloseButton","onSubmit","preventDefault","response","updatedUser","err","console","UniversityDropdown","getOptionFromValue","getValueFromOption","Link","to","_Fragment","SingleSelectDropdown","options","TextInput","characterLimit","slice","placeholder","hideClearButton","getYearOptions","maxMenuHeight","menuPlacement","isPortal","disabled","Boolean","StartupEditModal","startup","isPrimaryAffiliation","primary_affiliation","setName","setUrl","STARTUP_TITLE_OPTIONS","undefined","discipline","area_of_expertise","KeywordEditModal","currentValue","setValue","KeywordsDropdown","keywordType","targetType","api","disciplines","areas_of_expertise","TooltipContainer","TooltipText","isLoading","isDigest","isAffiliationEditModalOpen","setIsAffiliationEditModalOpen","affiliationEditModalType","setAffiliationEditModalType","isStartupEditModalOpen","setIsStartupEditModalOpen","isKeywordEditModalOpen","setIsKeywordEditModalOpen","keywordEditModalType","setKeywordEditModalType","isInNetwork","setIsInNetwork","isAddingToNetwork","setIsAddingToNetwork","fileInputRef","useRef","currentUser","useSelector","state","profiles","subscription","company","isMobile","_useSearchParams2","useSearchParams","searchParams","setSearchParams","shouldAutoAdd","get","isUser","canEdit","isSponsor","role","scientistProfileId","companyId","company_id","addToNetwork","cns","getCompanyNetworkScientist","status","currentEducations","userStartup","handlePFPicClick","track","SegmentEventName","Click","ui_component","react_component","profile","current","click","updateUser","setCurrentUser","onPFPicChange","file","files","formData","FormData","append","image","renderAddStartup","companyUrl","startsWith","split","className","css","styles","rel","Icon","landing","addScientistToCompanyNetwork","toString","toast","success","scientist_name","first_name","company_name","appsignal","sendError","setAction","setTags","scientist_profile_id","currentPFPic","medium","Loader","marginTop","active","inline","zIndex","paddingTop","backgroundImage","accept","ref","last_name","toUpperCase","charAt","renderLatestLocation","_profileUser$profile_","commenter","features","company_scientist_network","sendMessage","setMessengerState","recipient","Tooltip","arrowOffsetTop","contentWidth","tooltipWidth","content","headline","about","sort","obj1","obj2","Number","includes","area","CHAR_LIMITS","editingHeadline","setEditingHeadline","headlineStatus","setHeadlineStatus","editingAbout","setEditingAbout","aboutStatus","setAboutStatus","setIsLoading","refreshKey","setRefreshKey","isPublicationModalOpen","setIsPublicationModalOpen","_useState18","editPublication","setEditPublication","_useState20","isFundingModalOpen","setIsFundingModalOpen","_useState22","editFunding","setEditFunding","_useState24","isPatentModalOpen","setIsPatentModalOpen","_useState26","editPatent","setEditPatent","isPublicParam","isDigestParam","currentUserRole","_useState28","isKeywordModalOpen","setIsKeywordModalOpen","profileInfoId","_usePublications","usePublications","refreshPublications","refresh","_useFundings","useFundings","refreshFundings","_usePatents","usePatents","refreshPatents","useProposals","profileIdParam","useParams","pathId","indexOf","profileUserId","getUser","user","fetchPublications","fetchPatents","fetchFundings","debouncedUpdateHeadlineOrAbout","debounce","setStatus","updateUserProfile","UserRole","SCIENTIST","setTimeout","profileId","leading","trailing","renderTextInput","rows","InputContainer","Input","InputStatus","hasHeadline","trim","hasAbout","PublicationEditModal","onSuccess","FundingEditModal","PatentEditModal","Container","profile_id","Sidebar","Content","KeywordSignUpModal","DisabledHeadline","DisabledAbout","ProfileAttachments","newEditPublication","newEditFunding","newEditPatent","WINDOW_DIMENSIONS","MOBILE_MEDIA_QUERY","CharLimitInput"],"sourceRoot":""}