{"version":3,"sources":["scenes/conference/conference.module.scss","components/Header/header.module.scss","scenes/video/video.module.scss","components/Block/block.module.scss","components/Footer/footer.module.scss","components/SideMenu/side-menu.module.scss","components/Card/card.module.scss","scenes/videos/videos.module.scss","scenes/conferences/conferences.module.scss","components/Search/search.module.scss","components/Button/button.module.scss","components/ConferencesPrevious/conferences-previous.module.scss","components/Welcome/welcome.module.scss","components/Chip/chip.module.scss","components/Section/section.module.scss","components/Vimeo/vimeo.module.scss","components/LoadingPage/loading-page.module.scss","components/WelcomeCarousel/welcomecarousel.module.scss","components/LoadingSection/loading-section.module.scss","assets/icons/linkedin-dark.svg","assets/images/loading-spinner.gif","assets/icons/youtube-dark.svg","assets/logos/symphony-light.svg","assets/logos/symphony-innovate-logo.svg","assets/icons/arrow-forward-dark.svg","assets/icons/envelope-dark.svg","assets/icons/twitter-dark.svg","assets/images/loading-spinner-transparent.gif","components/Section/Section.js","components/Section/SectionContainer.js","scenes/conference/ConferenceDescription/ConferenceDescription.js","components/Button/Button.js","utils/miscUtils.js","components/Button/ButtonContainer.js","scenes/conference/ConferenceHeader/ConferenceHeader.js","components/Vimeo/Vimeo.js","components/Vimeo/VimeoContainer.js","scenes/conference/ConferenceHighlightVideo/ConferenceHighlightVideo.js","scenes/conference/ConferenceSessions/ConferenceSessionsSession.js","scenes/conference/ConferenceSessions/ConferenceSessions.js","scenes/conference/ConferenceSpeakers/ConferenceSpeakers.js","scenes/conference/ConferenceSponsors/ConferenceSponsors.js","components/Card/Card.js","components/Card/CardContainer.js","scenes/conference/ConferenceVideos/ConferenceVideos.js","components/ConferencesPrevious/ConferencesPrevious.js","components/LoadingPage/LoadingPage.js","components/LoadingPage/LoadingPageContainer.js","utils/fetchUtils.js","platforms/api.js","utils/apiUtils.js","utils/tagUtils.js","context/tags.js","scenes/conference/Conference.js","context/conferences.js","utils/scrollUtils.js","scenes/conference/ConferenceContainer.js","components/Block/Block.js","components/Welcome/Welcome.js","components/Welcome/WelcomeContainer.js","components/WelcomeCarousel/WelcomeCarousel.js","components/WelcomeCarousel/WelcomeCarouselContainer.js","components/Block/BlockContainer.js","scenes/conferences/ConferencesVideos/ConferencesVideos.js","scenes/conferences/Conferences.js","context/videos.js","utils/videoUtils.js","scenes/conferences/ConferencesContainer.js","components/Footer/Footer.js","components/Footer/FooterContainer.js","components/Header/HeaderFilters/HeaderFilters.js","components/Chip/Chip.js","components/Chip/ChipContainer.js","components/Header/HeaderFilterTags/HeaderFilterTags.js","components/Header/HeaderRowOne/HeaderRowOne.js","components/Search/Search.js","components/Search/SearchContainer.js","components/Header/HeaderRowTwo/HeaderRowTwo.js","components/Header/Header.js","components/Header/HeaderContainer.js","hooks/scroll/useDocumentScrollThrottled.js","components/SideMenu/SideMenu.js","components/SideMenu/SideMenuContainer.js","scenes/video/VideoEmbed/VideoEmbed.js","scenes/video/VideoHeader/VideoHeader.js","scenes/video/VideoRelatedProduct/VideoRelatedProduct.js","scenes/video/VideoRelated/VideoRelated.js","scenes/video/Video.js","scenes/video/VideoContainer.js","components/LoadingSection/LoadingSection.js","scenes/videos/Videos.js","scenes/videos/VideosContainer.js","App.js","reportWebVitals.js","index.js"],"names":["module","exports","Section","props","children","classes","config","id","style","darkMode","className","cx","styles","section","SectionContainer","ConferenceDescription","conference","description","is_active","logo","useMemo","match","conferenceDescription","src","sizes","thumbnail","alt","parse","Button","onClick","size","text","theme","button","emptyFunction","formatCarouselArray","collection","arrayOfArrays","i","length","push","slice","ButtonContainer","defaultProps","ConferenceHeader","date_string","image","is_legacy","location","microsite_link","register_link","link_button_text","title","useRef","HTMLInputElement","header","backgroundImage","url","btn_region","href","rel","target","Vimeo","vimeo_id","video","wrapper","allow","allowFullScreen","iframe","frameBorder","VimeoContainer","ConferenceHighlightVideo","highlight_video_id","highlightVideo","ConferenceSessionsSession","session","left","title_link","start_time","end_time","right","calendar_link","items","map","item","is_break","demo","times","title_container","renderItems","ConferenceSessions","region","is_featured","sessions","subheader","footnote","renderSessions","ConferenceSpeakers","speakers","useState","speakerItems","setSpeakerItems","useEffect","isMobile","Carousel","controls","interval","group","Item","j","name","medium_large","body","ConferenceSponsors","sponsors","sponsorItems","setSponsorItems","window","open","Card","data","preview","card","top","bottom","category","CardContainer","ConferenceVideos","addTag","featuredVideos","history","videos","grid","pathname","state","handleSelect","tag","slug","ConferencesPrevious","conferences","previousConferences","setPreviousConferences","filteredConferences","filter","is_latest","indicators","arr","loadingSpinnerSrc","require","default","LoadingPage","document","querySelector","disableBodyScroll","enableBodyScroll","spinner","LoadingPageContainer","reformatAcfResponse","res","Array","isArray","acf","tags","get","headers","onSuccess","onError","fetch","then","response","json","ok","catch","error","baseUrl","Api","Headers","currentPage","operator","selectedTags","tagsQueryParams","tagsTermsQueryParamBase","tagsTermsQueryParams","reduce","acc","concat","generateTagsQueryParams","search","findTagIdByName","tagFound","find","TagsContext","createContext","TagsProvider","filters","setFilters","mappedFilters","setMappedFilters","setSelectedTags","selectedCategoryTags","setSelectedCategoryTags","selectedConferenceTags","setSelectedConferenceTags","setTags","hasSelectedCategoryTags","hasSelectedConferenceTags","hasSelectedTags","onFetchFiltersError","err","console","onFetchFiltersSuccess","onFetchTagsError","onFetchTagsSuccess","filterGroup","mapFiltersToTags","tagsContext","type","prev","clearTags","fetchFilters","getFilters","fetchTags","getTags","removeTag","selectedTag","Provider","value","Conference","useHistory","useContext","hasSessions","isLoading","Helmet","content","ConferencesContext","ConferencesProvider","setConferences","featuredConference","setFeaturedConference","isLoadingConferences","setIsLoadingConferences","onFetchConferencesSuccess","conferencesContext","fetchConferences","getConferences","scrollToTop","scrollTo","behavior","ConferenceContainer","useLocation","params","useParams","setConference","setFeaturedVideos","a","Promise","all","featured_videos","getVideo","ID","handleDetectConference","locationConference","getConferenceBySlug","onFetchConferenceSuccess","onFetchConferenceError","fetchConference","scrollToRegister","getElementById","scrollIntoView","scrollToSessions","scrollParam","URLSearchParams","setTimeout","generateFeaturedVideos","Block","cta_link","cta_text","agenda_link","agenda_button_text","orientation","subtitle","buttonTheme","block","backgroundColor","large","welcome_message","Welcome","welcome_background_left","welcome_background_right","WelcomeContainer","WelcomeCarousel","welcome_carousel","WelcomeCarouselContainer","BlockContainer","ConferencesVideos","Conferences","blocks","loading","key","VideosContext","VideosProvider","setCurrentPage","filteredVideos","setFilteredVideos","isFiltering","setIsFiltering","isSearchActive","setIsSearchActive","isSearching","setIsSearching","totalPages","setTotalPages","totalVideos","setTotalVideos","setVideos","videoSearchResults","setVideoSearchResults","fetchVideos","getVideos","onFetchVideosSuccess","onFetchVideosError","handleToggleSearchMode","bool","reformattedResponse","parseInt","some","selectedConferenceTag","videoTag","selectedCategoryTag","generateFilteredVideos","handleFiltering","onFetchVideoSearchResultsError","onFetchVideoSearchResultsSuccess","videosContext","fetchVideoSearchResults","getVideosBySearchTerm","handleSelectPage","selected","shouldShowFilteredVideos","ConferencesContainer","hasRedirectedToFeaturedConference","setHasRedirectedToFeaturedConference","setBlocks","setLoading","onFetchBlocksError","onFetchBlocksSuccess","formattedResponse","getBlocks","Footer","footerConferences","goToConferences","footer","primary","column","link","secondary","row","Date","getFullYear","gdpr","FooterContainer","HeaderFilters","handleSelectFilter","shouldShowFilterTags","locationsTabRef","tabWidth","setTabWidth","current","clientWidth","tabStyle","width","filterBy","tabs","tab","onMouseEnter","arrow","showAll","to","Chip","isSelected","chip","ChipContainer","HeaderFilterTags","handleSelectTag","shouldHideHeader","toggleFilterTagsDisplay","categoryFilters","conferenceFilters","filterTags","onMouseLeave","filterTagsLeft","isAlreadySelected","display_text","filterTagsRight","linkedinIconSrc","youtubeIconSrc","logoSrc","HeaderRowOne","goToConference","goToSocial","goToSymphony","hide_featured_conference_from_nav","register","featured","dateString","socials","icon","Search","isLight","onChange","onSubmit","input","SearchContainer","setSearch","e","preventDefault","HeaderRowTwo","setIsSideMenuActive","isVideoRoute","includes","more","options","Header","previousPathname","setPreviousPathname","setHeaderOffset","headerRef","clientHeight","isVideoUrl","ref","wrapperRelative","withRouter","selectedFilter","setSelectedFilter","setShouldHideHeader","setShouldShowFilterTags","shouldShowShadow","setShouldShowShadow","callback","setScrollPosition","previousScrollTop","handleDocumentScrollThrottled","throttle","currentScrollTop","documentElement","scrollTop","previousPosition","addEventListener","removeEventListener","useDocumentScrollThrottled","callbackData","isScrolledDown","isMinimumScrolled","registerQuery","goToHome","platform","linkedin","twitter","youtube","SideMenu","goToHomepage","goToVideos","isSideMenuActive","container","sideMenu","close","links","SideMenuContainer","path","element","log","VideoEmbed","embed","quality","disclaimer","arrowForwardIconSrc","envelopeIconSrc","twitterIconSrc","VideoHeader","copyLinkToClipboard","tooltipText","encodedShareDescription","encodeURIComponent","headerContainer","icons","OverlayTrigger","delay","show","hide","overlay","Tooltip","placement","VideosGlobal","related_product_title","related_product_description","related_product_url","related_product_image","related_product","related_product_container","related_product_text","related_product_link","related_product_button","VideoRelated","go","related","Video","VideoRelatedProduct","VideoContainer","setTooltipText","setVideo","onFetchVideoError","onFetchVideoSuccess","locationVideo","navigator","clipboard","writeText","LoadingSection","Videos","shouldShowConfirmationModal","toggleConfirmationModal","videosCollection","Modal","aria-labelledby","centered","onHide","closeButton","Body","list","empty","renderCards","breakLabel","pagination","activeClassName","active","disabledClassName","disabled","onPageChange","pageCount","pageRangeDisplayed","renderOnZeroPageCount","VideosContainer","showConfirmationModal","setVideosCollection","setShouldShowConfirmationModal","App","headerOffset","paddingTop","render","queryParams","conferenceParam","toParam","videoParam","scrollQuery","renderRouteByQueryParam","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","ReactDOM","StrictMode"],"mappings":"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","file":"static/js/main.79c16d4a.chunk.js","sourcesContent":["// extracted by mini-css-extract-plugin\nmodule.exports = {\"conference\":\"conference_conference__1usvB\",\"agenda\":\"conference_agenda__2tFup\",\"button\":\"conference_button__VWXur\",\"button2\":\"conference_button2__26kuL\",\"items\":\"conference_items__1CDi4\",\"item\":\"conference_item__3TUkJ\",\"body\":\"conference_body__DRKNk\",\"description\":\"conference_description__aJUCY\",\"agendaItemHeader\":\"conference_agendaItemHeader__19_YZ\",\"title\":\"conference_title__ynwVg\",\"conferenceDescription\":\"conference_conferenceDescription__4ceNh\",\"logo\":\"conference_logo__3icsc\",\"btn_region\":\"conference_btn_region__2KQ1s\",\"imageBlock\":\"conference_imageBlock__umxvI\",\"imageBlock--reverse\":\"conference_imageBlock--reverse__11rO2\",\"large\":\"conference_large__aTNu1\",\"small\":\"conference_small__20O0L\",\"header\":\"conference_header__btDQA\",\"header--active\":\"conference_header--active__1vYbV\",\"header--past\":\"conference_header--past__3TOMC\",\"highlightVideo\":\"conference_highlightVideo__3MEvH\",\"register\":\"conference_register__lIccN\",\"blurb\":\"conference_blurb__2Gt3W\",\"register__header\":\"conference_register__header__3iGWL\",\"form\":\"conference_form__2uoZz\",\"checkbox\":\"conference_checkbox__3rzck\",\"textInputs\":\"conference_textInputs__kd7FP\",\"subheader\":\"conference_subheader__2eO86\",\"sessions\":\"conference_sessions__13TYf\",\"session\":\"conference_session__2th7m\",\"item--is-break\":\"conference_item--is-break__3x9ot\",\"title_container\":\"conference_title_container__1xAoY\",\"demo\":\"conference_demo__3d_7B\",\"title_container--subsession\":\"conference_title_container--subsession__11VNg\",\"times\":\"conference_times__396vc\",\"times--hidden\":\"conference_times--hidden__1XXW2\",\"left\":\"conference_left__3cbFc\",\"footnote\":\"conference_footnote__2yzfa\",\"footnote--hidden\":\"conference_footnote--hidden__2BzIi\",\"speakers\":\"conference_speakers__15xFQ\",\"image\":\"conference_image__20bz3\",\"name\":\"conference_name__1i8MQ\",\"sponsors\":\"conference_sponsors__2yxw_\",\"videos\":\"conference_videos__30t3q\",\"grid\":\"conference_grid__1j5xz\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"header\":\"header_header__3fn4i\",\"header--hidden\":\"header_header--hidden__3UHPk\",\"wrapperRelative\":\"header_wrapperRelative__3HgaI\",\"row\":\"header_row__34sh0\",\"row--one\":\"header_row--one__2QwSx\",\"featured\":\"header_featured__1A6pd\",\"logo\":\"header_logo__14tHM\",\"register\":\"header_register__2xix2\",\"logo--hidden\":\"header_logo--hidden__2Fczs\",\"register--hidden\":\"header_register--hidden__13PX8\",\"conference\":\"header_conference__ZCBhB\",\"conference--hidden\":\"header_conference--hidden__Cxi9C\",\"dateString\":\"header_dateString__19rnd\",\"socials\":\"header_socials__1Mw1E\",\"icon\":\"header_icon__2StfZ\",\"register-link\":\"header_register-link__1MEEi\",\"register-link--hidden\":\"header_register-link--hidden__QDCmG\",\"row--two\":\"header_row--two__315wI\",\"link\":\"header_link__3Qf43\",\"link--active\":\"header_link--active__13uYD\",\"more\":\"header_more__2cqvn\",\"options\":\"header_options__2-5o6\",\"text\":\"header_text__ssHtL\",\"search\":\"header_search__Dw7LC\",\"filters\":\"header_filters__3yMU5\",\"filterBy\":\"header_filterBy__1opfS\",\"showAll\":\"header_showAll__1oLQw\",\"tabs\":\"header_tabs__3i5Xi\",\"tab\":\"header_tab__YzMgs\",\"tab--selected\":\"header_tab--selected__2MElt\",\"arrow\":\"header_arrow__1DAG-\",\"filterTags\":\"header_filterTags__3B1dO\",\"filterTags--active\":\"header_filterTags--active__zgsKJ\",\"filterTagsLeft\":\"header_filterTagsLeft__1bBSG\",\"filterTagsRight\":\"header_filterTagsRight__k0NJl\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"video\":\"video_video__1dHi3\",\"embed\":\"video_embed__hvtsm\",\"quality\":\"video_quality__3zcCp\",\"disclaimer\":\"video_disclaimer__cGRPU\",\"headerContainer\":\"video_headerContainer__1FnDd\",\"row\":\"video_row__1GfR_\",\"description\":\"video_description__VNImW\",\"icons\":\"video_icons__qreeQ\",\"icon\":\"video_icon__yfrdt\",\"subheader\":\"video_subheader__1OZzQ\",\"title\":\"video_title__jnNmG\",\"related_product\":\"video_related_product__QvmDh\",\"related_product_container\":\"video_related_product_container__2vGrb\",\"related_product_container--hidden\":\"video_related_product_container--hidden__3UKP4\",\"related_product_image\":\"video_related_product_image__3RTPE\",\"related_product_text\":\"video_related_product_text__3zw8V\",\"related_product_title\":\"video_related_product_title__n3w4F\",\"related_product_description\":\"video_related_product_description__PlzqU\",\"related_product_link\":\"video_related_product_link__ua-4R\",\"related\":\"video_related__1Ddno\",\"grid\":\"video_grid__1qYsy\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"block\":\"block_block__2vq28\",\"btn_region\":\"block_btn_region__1gq9p\",\"block--layout-center\":\"block_block--layout-center__27tP5\",\"image\":\"block_image__O6_hN\",\"text\":\"block_text__4lsuj\",\"button\":\"block_button__3qsuN\",\"button--hidden\":\"block_button--hidden__2Xrw3\",\"block--layout-left\":\"block_block--layout-left__1Kg90\",\"block--layout-right\":\"block_block--layout-right__1BFjv\",\"body\":\"block_body__1puUU\",\"subheader\":\"block_subheader__3gVtn\",\"header\":\"block_header__1lDz2\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"footer\":\"footer_footer__11BbJ\",\"primary\":\"footer_primary__2h-GQ\",\"column\":\"footer_column__1D43T\",\"header\":\"footer_header__3r2-P\",\"link\":\"footer_link__3nDrj\",\"secondary\":\"footer_secondary__1q_OJ\",\"row\":\"footer_row__1mMwO\",\"gdpr\":\"footer_gdpr__1mEPG\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"container\":\"side-menu_container__3j6-h\",\"sideMenu\":\"side-menu_sideMenu__46RCH\",\"close\":\"side-menu_close__1L1Bg\",\"icon\":\"side-menu_icon__11ZPn\",\"links\":\"side-menu_links__3av5-\",\"link\":\"side-menu_link__3pI66\",\"search\":\"side-menu_search__3Ac6h\",\"container--active\":\"side-menu_container--active__26SgN\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"card\":\"card_card__2l2sh\",\"body\":\"card_body__2rzIq\",\"top\":\"card_top__3alnZ\",\"preview\":\"card_preview__2uc1b\",\"title\":\"card_title__3SQtk\",\"bottom\":\"card_bottom__1Ihxi\",\"category\":\"card_category__2lJYF\",\"image\":\"card_image__2Uu3V\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"videos\":\"videos_videos__10p0E\",\"grid\":\"videos_grid__72FbS\",\"empty\":\"videos_empty__1kxHO\",\"loading\":\"videos_loading__2Bdea\",\"pagination\":\"videos_pagination__3lPjI\",\"active\":\"videos_active__T_oUN\",\"disabled\":\"videos_disabled__2kR5r\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"conferences\":\"conferences_conferences__3RuJa\",\"videos\":\"conferences_videos__2ZubW\",\"grid\":\"conferences_grid__1mdED\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"search\":\"search_search__cdieE\",\"icon\":\"search_icon__TOKGp\",\"input\":\"search_input__2sltG\",\"search--light\":\"search_search--light__J1jZY\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"button\":\"button_button__rhxVg\",\"button--green\":\"button_button--green__2QO5G\",\"button--thin\":\"button_button--thin__1bE-B\",\"button--white\":\"button_button--white__2X1SR\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"conferences-previous\":\"conferences-previous_conferences-previous__14wNr\",\"items\":\"conferences-previous_items__2WKVx\",\"item\":\"conferences-previous_item__1MTel\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"welcome\":\"welcome_welcome__GWtMF\",\"welcome_message\":\"welcome_welcome_message__318vw\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"chip\":\"chip_chip__kguDW\",\"chip--selected\":\"chip_chip--selected__1vWrV\",\"text\":\"chip_text__Kp3zK\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"section\":\"section_section__2220H\",\"section--dark\":\"section_section--dark__3tenD\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"wrapper\":\"vimeo_wrapper__2Ez5u\",\"iframe\":\"vimeo_iframe__205DA\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"loading-page\":\"loading-page_loading-page__3dphG\",\"spinner\":\"loading-page_spinner__1Qy6f\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"carousel\":\"welcomecarousel_carousel__6cH1l\",\"image\":\"welcomecarousel_image__1Pr4F\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"loading-section\":\"loading-section_loading-section__39o4V\"};","export default __webpack_public_path__ + \"static/media/linkedin-dark.24852c0f.svg\";","export default __webpack_public_path__ + \"static/media/loading-spinner.08eaf775.gif\";","export default __webpack_public_path__ + \"static/media/youtube-dark.b153ea70.svg\";","export default __webpack_public_path__ + \"static/media/symphony-light.f833da00.svg\";","export default __webpack_public_path__ + \"static/media/symphony-innovate-logo.1d504464.svg\";","export default __webpack_public_path__ + \"static/media/arrow-forward-dark.66f64915.svg\";","export default __webpack_public_path__ + \"static/media/envelope-dark.afbc1a0e.svg\";","export default __webpack_public_path__ + \"static/media/twitter-dark.1d3d522c.svg\";","export default __webpack_public_path__ + \"static/media/loading-spinner-transparent.739bf643.gif\";","import cx from \"classnames\";\n\n// CSS\nimport styles from \"./section.module.scss\";\n\nconst Section = (props) => {\n const { children, classes, config, id, style } = props;\n const { darkMode } = config || {};\n\n return (\n <div\n className={cx(styles.section, classes, {\n [styles[\"section--dark\"]]: darkMode,\n })}\n id={id}\n style={style}\n >\n {children}\n </div>\n );\n};\n\nexport default Section;\n","// Components\nimport Section from \"./Section\";\n\nconst SectionContainer = (props) => {\n return <Section {...props} />;\n};\n\nexport default SectionContainer;\n","import { useMemo } from \"react\";\nimport parse from \"html-react-parser\";\n\n// Components\nimport Section from \"../../../components/Section/SectionContainer\";\n\n// CSS\nimport styles from \"../conference.module.scss\";\n\nexport const ConferenceDescription = (props) => {\n const { conference } = props;\n const { description, is_active, logo } = conference || {};\n\n const descriptionArray = useMemo(\n () => description?.match(/[^\\r\\n]+/g),\n [description]\n );\n\n /*function renderDescription() {\n return descriptionArray?.map((line, i) => {\n return <p key={i}>{line}</p>;\n });\n }\n */\n\n return is_active ? (\n <Section classes={styles.conferenceDescription}>\n {logo && (\n <img\n src={logo?.sizes?.thumbnail}\n alt=\"Conference logo\"\n className={styles.logo}\n />\n )}\n\n <span className={styles.description}>\n {description && <span>{parse(conference.description)}</span>}\n </span>\n {/*{renderDescription()}*/}\n </Section>\n ) : null;\n};\n","import cx from \"classnames\";\n\n// CSS\nimport styles from \"./button.module.scss\";\n\nconst Button = (props) => {\n const { classes, onClick, size, style, text, theme } = props;\n\n return (\n <button\n className={cx(styles.button, classes, {\n [styles[`button--${size}`]]: size,\n [styles[`button--${theme}`]]: theme,\n })}\n onClick={onClick}\n style={style}\n >\n {text}\n </button>\n );\n};\n\nexport default Button;\n","export function copyToClipboard(text) {\n navigator.clipboard.writeText(text);\n}\n\nexport function emptyFunction() {}\n\nexport function formatCarouselArray(collection, { size = 3 } = {}) {\n const arrayOfArrays = [];\n for (let i = 0; i < collection.length; i += size) {\n arrayOfArrays.push(collection.slice(i, i + size));\n }\n return arrayOfArrays;\n}\n","import PropTypes from \"prop-types\";\n\n// Components\nimport Button from \"./Button\";\n\n// Utils\nimport { emptyFunction } from \"../../utils/miscUtils\";\n\nconst ButtonContainer = (props) => {\n return <Button {...props} />;\n};\n\nButtonContainer.defaultProps = { onClick: emptyFunction };\n\nButtonContainer.propTypes = { onClick: PropTypes.func, text: PropTypes.string };\n\nexport default ButtonContainer;\n","import cx from \"classnames\";\nimport parse from \"html-react-parser\";\n\n// Components\nimport Button from \"../../../components/Button/ButtonContainer\";\nimport Section from \"../../../components/Section/SectionContainer\";\n\n// CSS\nimport styles from \"../conference.module.scss\";\nimport { useRef } from \"react\";\n\nexport const ConferenceHeader = (props) => {\n const { conference } = props;\n const {\n date_string,\n description,\n image,\n is_active,\n is_legacy,\n location,\n microsite_link,\n register_link,\n link_button_text,\n title,\n } = conference || {};\n\n const divAgenda = useRef<HTMLInputElement | null>(null);\n\n const scrolLWithUseRef = () => {\n divAgenda.current?.scrollIntoView({ block: \"center\", behavior: \"smooth\" });\n };\n\n const scrollFun = () => {\n document\n .querySelector(`#agenda`)\n ?.scrollIntoView({ block: \"start\", behavior: \"smooth\" });\n\n };\n\n function renderActive() {\n return (\n <Section\n classes={cx(styles.header, styles[\"header--active\"])}\n style={{ backgroundImage: `url(${image.url})` }}\n >\n <h1 className={styles.title}>{title}</h1>\n <span className={styles.description}>\n {date_string} — {location}\n </span>\n <span className={styles.btn_region}>\n {is_active && (\n <a\n href={register_link}\n rel=\"noreferrer\"\n target=\"_blank\"\n >\n <Button className={styles.button} text={link_button_text} />\n\n </a>\n )}\n\n {/*is_active && (\n <a\n href={register_link}\n rel=\"noreferrer\"\n target=\"_blank\"\n >\n <Button className={styles.button} text=\"see agenda\" onClick={() => scrollFun()}/>\n\n </a>\n )*/}\n\n\n </span>\n </Section>\n );\n }\n\n function renderPast() {\n return (\n <Section\n classes={cx(styles.header, styles[\"header--past\"])}\n >\n <h1 className={styles.title}>{title}</h1>\n <span className={styles.description}>\n {description && <span>{parse(conference.description)}</span>}\n </span>\n <a\n href={register_link}\n rel=\"noreferrer\"\n target=\"_blank\"\n >\n <Button className={styles.button} text={link_button_text} />\n\n </a>\n {microsite_link && (\n <a href={microsite_link} rel=\"noreferrer\" target=\"_blank\">\n {is_legacy && (\n <Button text=\"visit microsite\" theme=\"green\" />\n )}\n </a>\n )}\n </Section>\n );\n }\n\n return is_active ? renderActive() : renderPast();\n};\n","// CSS\nimport styles from \"./vimeo.module.scss\";\n\nconst Vimeo = (props) => {\n const { video } = props;\n const { vimeo_id } = video || {};\n\n return (\n <>\n <div className={styles.wrapper}>\n <iframe\n allow=\"autoplay; fullscreen; picture-in-picture\"\n allowFullScreen\n className={styles.iframe}\n frameBorder=\"0\"\n src={`https://player.vimeo.com/video/${vimeo_id}`}\n title=\"Vimeo embed\"\n ></iframe>\n </div>\n </>\n );\n};\n\nexport default Vimeo;\n","// Components\nimport Vimeo from \"./Vimeo\";\n\nconst VimeoContainer = (props) => {\n return <Vimeo {...props} />;\n};\n\nexport default VimeoContainer;\n","// Components\nimport Section from \"../../../components/Section/SectionContainer\";\nimport Vimeo from \"../../../components/Vimeo/VimeoContainer\";\n\n// CSS\nimport styles from \"../conference.module.scss\";\n\nexport const ConferenceHighlightVideo = (props) => {\n const { conference } = props;\n const { highlight_video_id, is_active } = conference || {};\n\n return !is_active && highlight_video_id ? (\n <Section classes={styles.highlightVideo}>\n <Vimeo video={highlight_video_id} />\n </Section>\n ) : null;\n};\n","import cx from \"classnames\";\nimport parse from \"html-react-parser\";\n\n// Components\nimport Button from \"../../../components/Button/ButtonContainer\";\n\n// CSS\nimport styles from \"../conference.module.scss\";\n\nexport const ConferenceSessionsSession = (props) => {\n const { session } = props;\n\n function renderItems() {\n return session?.items?.map((item, i) => {\n const {\n start_time,\n end_time,\n is_break,\n title,\n title_link,\n demo,\n description,\n } = item;\n return (\n <div\n className={cx(styles.item, {\n [styles[\"item--is-break\"]]: is_break,\n })}\n key={i}\n >\n <span className={cx(styles.times, {\n [styles[\"times--hidden\"]]:\n !start_time,\n })}\n >\n {start_time} - {end_time}\n </span>\n\n {title_link && (\n <a\n className={cx(styles.title_container, {\n [styles[\"title_container--subsession\"]]:\n !start_time,\n })}\n href={title_link}\n >\n {title && <span className={styles.title}>{parse(item.title)}</span>}\n {demo && <span className={styles.demo}>{parse(item.demo)}</span>}\n </a>\n )}\n {!title_link && (\n <span\n className={cx(styles.title_container, {\n [styles[\"title_container--subsession\"]]:\n !start_time,\n })}\n >\n {title && <span className={styles.title}>{parse(item.title)}</span>}\n {demo && <span className={styles.demo}>{parse(item.demo)}</span>}\n </span>\n )}\n <div className={styles.description}>\n {description && <span>{parse(item.description)}</span>}\n </div>\n </div>\n );\n });\n }\n\n return (\n <div className={styles.session}>\n <div className={styles.header}>\n <div className={styles.left}>\n {!session.title_link && <h2>{session?.title}</h2>}\n {session.title_link && (\n <h2>\n <a href={session.title_link}>{session?.title}</a>\n </h2>\n )}\n <span>\n {session?.start_time} - {session?.end_time}\n </span>\n </div>\n <div className={styles.right}>\n {session?.calendar_link && (\n <a\n href={session.calendar_link}\n rel=\"noreferrer\"\n target=\"_blank\"\n >\n <Button\n text=\"add to calendar\"\n size=\"thin\"\n theme=\"white\"\n />\n </a>\n )}\n </div>\n </div>\n <div className={styles.items}>\n {renderItems()}\n {session?.calendar_link && (\n <a\n href={session.calendar_link}\n rel=\"noreferrer\"\n target=\"_blank\"\n >\n <Button\n classes={styles.button}\n size=\"thin\"\n text=\"add to calendar\"\n theme=\"green\"\n />\n </a>\n )}\n </div>\n </div>\n );\n};\n","// Components\nimport cx from \"classnames\";\n\nimport { ConferenceSessionsSession } from \"./ConferenceSessionsSession\";\nimport Section from \"../../../components/Section/SectionContainer\";\n\n// CSS\nimport styles from \"../conference.module.scss\";\n\nexport const ConferenceSessions = (props) => {\n const { conference } = props;\n const { region, is_featured } = conference || {};\n\n function renderSessions() {\n return conference?.sessions?.map((session, i) => {\n return <ConferenceSessionsSession key={i} session={session} />;\n });\n }\n\n return (\n <Section classes={styles.sessions} id=\"agenda\">\n <h1>agenda</h1>\n <div className={styles.subheader}>\n <span>All times are in {region}</span>\n </div>\n <div className={cx(styles.footnote, {\n [styles[\"footnote--hidden\"]]:\n !is_featured,\n })}\n >\n * Agenda subject to change\n </div>\n {renderSessions()}\n </Section>\n );\n};\n","import { useEffect, useState } from \"react\";\nimport { Carousel } from \"react-bootstrap\";\nimport { isMobile } from \"react-device-detect\";\n\n// Components\nimport Section from \"../../../components/Section/SectionContainer\";\n\n// CSS\nimport styles from \"../conference.module.scss\";\n\n// Utils\nimport { formatCarouselArray } from \"../../../utils/miscUtils\";\n\nexport const ConferenceSpeakers = (props) => {\n const { conference } = props;\n const { speakers } = conference || {};\n\n const [speakerItems, setSpeakerItems] = useState(null);\n\n /**\n * useEffect\n */\n\n useEffect(() => {\n const size = isMobile ? 1 : 8;\n speakers && setSpeakerItems(formatCarouselArray(speakers, { size }));\n }, [speakers]);\n\n /**\n * Constants\n */\n\n const hasSpeakers = speakers && speakers.length;\n\n /**\n * End Hooks\n */\n\n function renderSpeakers() {\n return speakerItems?.map((group, i) => {\n return (\n <Carousel.Item key={i}>\n <div className={styles.items}>\n {group.map((item, j) => {\n const { description, image, name } = item;\n return (\n <div className={styles.item} key={j}>\n <div\n className={styles.image}\n style={{\n backgroundImage: `url(${image?.sizes?.medium_large})`,\n }}\n />\n <div className={styles.body}>\n <span className={styles.name}>\n {name}\n </span>\n <p className={styles.description}>\n {description}\n </p>\n </div>\n </div>\n );\n })}\n </div>\n </Carousel.Item>\n );\n });\n }\n\n return hasSpeakers ? (\n <Section classes={styles.speakers}>\n <h1 className={styles.title}>our speakers</h1>\n <Carousel controls={!isMobile} interval={null}>\n {renderSpeakers()}\n </Carousel>\n </Section>\n ) : null;\n};\n","import { useEffect, useState } from \"react\";\nimport { Carousel } from \"react-bootstrap\";\nimport { isMobile } from \"react-device-detect\";\n\n// Components\nimport Button from \"../../../components/Button/ButtonContainer\";\nimport Section from \"../../../components/Section/SectionContainer\";\n\n// CSS\nimport styles from \"../conference.module.scss\";\n\n// Utils\nimport { formatCarouselArray } from \"../../../utils/miscUtils\";\n\nexport const ConferenceSponsors = (props) => {\n const { conference } = props;\n const { sponsors } = conference || {};\n\n /**\n * useState\n */\n\n const [sponsorItems, setSponsorItems] = useState(null);\n\n /**\n * useEffect\n */\n\n useEffect(() => {\n const size = isMobile ? 1 : 8;\n sponsors && setSponsorItems(formatCarouselArray(sponsors, { size }));\n }, [sponsors]);\n\n /**\n * Constants\n */\n\n const hasSponsors = sponsors && sponsors.length;\n\n /**\n * End Hooks\n */\n\n function renderSponsorItems() {\n return sponsorItems?.map((group, i) => {\n return (\n <Carousel.Item key={i}>\n <div className={styles.items}>\n {group.map((item, j) => {\n const { image, name, url } = item;\n return (\n <div className={styles.item} key={j}>\n <img\n alt={name}\n className={styles.image}\n onClick={() => {\n window.open(\n url,\n \"_blank\",\n \"noopener\",\n \"noreferrer\"\n );\n }}\n src={image.sizes.medium_large}\n />\n </div>\n );\n })}\n </div>\n </Carousel.Item>\n );\n });\n }\n\n return hasSponsors ? (\n <Section classes={styles.sponsors}>\n <h1 className={styles.title}>sponsors</h1>\n <Carousel controls={!isMobile} interval={null}>\n {renderSponsorItems()}\n </Carousel>\n <Button\n classes={styles.button}\n text=\"become a sponsor\"\n theme=\"green\"\n />\n </Section>\n ) : null;\n};\n","// CSS\nimport styles from \"./card.module.scss\";\nimport parse from \"html-react-parser\";\n\nexport const Card = (props) => {\n const { data, onClick } = props;\n const { conference, image, preview, title } = data;\n\n return (\n <div className={styles.card} onClick={onClick}>\n <div\n className={styles.image}\n style={{\n backgroundImage: `url(${image?.sizes?.medium_large})`,\n }}\n />\n <div className={styles.body}>\n <div className={styles.top}>\n <div className={styles.title}>\n {title && <span>{parse(data.title)}</span>}\n </div>\n <div className={styles.preview}>{preview}</div>\n </div>\n <div className={styles.bottom}>\n <div className={styles.category}>{conference}</div>\n </div>\n </div>\n </div>\n );\n};\n","import PropTypes from \"prop-types\";\n\n// Components\nimport { Card } from \"./Card\";\n\nexport const CardContainer = (props) => {\n return <Card {...props} />;\n};\n\nCardContainer.defaultProps = { data: {} };\n\nCardContainer.propTypes = { data: PropTypes.object, onClick: PropTypes.func };\n","// Components\nimport Button from \"../../../components/Button/ButtonContainer\";\nimport { CardContainer as Card } from \"../../../components/Card/CardContainer\";\nimport Section from \"../../../components/Section/SectionContainer\";\n\n// CSS\nimport styles from \"../conference.module.scss\";\n\nexport const ConferenceVideos = (props) => {\n const { addTag, conference, featuredVideos, history } = props;\n\n const hasVideos =\n featuredVideos && featuredVideos.length && featuredVideos[0] !== null;\n\n function handleSelect(video) {\n history.push({ pathname: `/videos/${video.id}`, state: { video } });\n }\n\n function onButtonClick() {\n addTag({ tag: conference.slug });\n history.push(\"/videos\");\n }\n\n function renderVideos() {\n return featuredVideos\n .slice(0, 6)\n .map((video) => (\n <Card\n data={video}\n key={video?.id}\n onClick={() => handleSelect(video)}\n />\n ));\n }\n\n return hasVideos ? (\n <Section classes={styles.videos}>\n <h1>videos</h1>\n <div className={styles.grid}>{renderVideos()}</div>\n <Button\n onClick={onButtonClick}\n text=\"more videos from this conference\"\n theme=\"green\"\n />\n </Section>\n ) : null;\n};\n","import { useEffect, useState } from \"react\";\nimport { Carousel } from \"react-bootstrap\";\nimport { isMobile } from \"react-device-detect\";\n\n// Components\nimport Section from \"../Section/SectionContainer\";\n\n// CSS\nimport styles from \"./conferences-previous.module.scss\";\n\n// Utils\nimport { formatCarouselArray } from \"../../utils/miscUtils\";\n\nexport const ConferencesPrevious = (props) => {\n const { conferences, conference, history } = props;\n\n /**\n * useState\n */\n\n const [previousConferences, setPreviousConferences] = useState(null);\n\n /**\n * useEffect\n */\n\n useEffect(() => {\n if (conferences || conference) {\n const filteredConferences = conferences.filter(\n //(conference) => !conference.is_active && !conference.is_latest\n (conference) => !conference.is_latest\n );\n const size = isMobile ? 1 : 4;\n setPreviousConferences(\n formatCarouselArray(filteredConferences, { size })\n );\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [conferences]);\n\n /**\n * End Hooks\n */\n\n function renderConferenceItems() {\n return previousConferences?.map((group, i) => {\n return (\n <Carousel.Item key={i}>\n <div className={styles.items}>\n {group\n .filter((item) => {\n //return !item.is_active;\n return !item.is_latest;\n })\n .map((item, i, arr) => {\n const { id, image, slug, title } = item;\n return (\n <div\n className={styles.item}\n key={id}\n onClick={() =>\n history.push({\n pathname: `/conferences/${slug}`,\n state: { conference: item },\n })\n }\n style={{\n backgroundImage: `url(${image?.sizes?.medium_large})`,\n }}\n >\n <span>{title}</span>\n </div>\n );\n })}\n </div>\n </Carousel.Item>\n );\n });\n }\n\n return (\n <Section id=\"recent_conferences\" classes={styles[\"conferences-previous\"]}>\n <h1>recent conferences</h1>\n <Carousel\n controls={!isMobile}\n indicators={isMobile}\n interval={null}\n >\n {renderConferenceItems()}\n </Carousel>\n </Section>\n );\n};\n","import { useEffect } from \"react\";\nimport { disableBodyScroll, enableBodyScroll } from \"body-scroll-lock\";\n\n// CSS\nimport styles from \"./loading-page.module.scss\";\n\n// Const\nconst loadingSpinnerSrc =\n require(\"../../assets/images/loading-spinner.gif\").default;\n\nexport const LoadingPage = (props) => {\n /**\n * useEffect\n */\n\n useEffect(() => {\n const target = document.querySelector(\"body\");\n disableBodyScroll(target);\n\n return () => {\n enableBodyScroll(target);\n };\n }, []);\n\n /**\n * End Hooks\n */\n\n return (\n <div className={styles[\"loading-page\"]}>\n <img\n alt=\"Loading spinner\"\n className={styles.spinner}\n src={loadingSpinnerSrc}\n />\n </div>\n );\n};\n","// Components\nimport { LoadingPage } from \"./LoadingPage\";\n\nexport const LoadingPageContainer = (props) => {\n return <LoadingPage {...props} />;\n};\n","// Utils\nimport { emptyFunction } from \"./miscUtils\";\n\nexport function reformatAcfResponse(res) {\n return Array.isArray(res)\n ? res.map((item) => ({ ...item.acf, id: item.id, tags: item.tags }))\n : { ...res.acf, id: res.id, tags: res.tags };\n}\n\nexport function get(\n url,\n headers,\n onSuccess = emptyFunction,\n onError = emptyFunction\n) {\n return fetch(url, { headers })\n .then(function (response) {\n return response.json().then((res) => {\n if (response.ok) {\n return onSuccess({ headers: response.headers, body: res });\n } else {\n return onError(res);\n }\n });\n })\n .catch(function (error) {\n return onError(error);\n });\n}\n","// Utils\nimport { get } from \"../utils/fetchUtils\";\n\n// Utils\nimport { generateTagsQueryParams } from \"../utils/apiUtils\";\n\n// Constants\nconst baseUrl = \"https://innovate.symphony.com/wp-json/wp/v2\";\n//const baseUrl = \"https://staging-symphony-innovate.pantheonsite.io/wp-json/wp/v2\";\n\nexport class Api {\n static setHeaders() {\n const headers = new Headers();\n return headers;\n }\n\n static getBlocks(onSuccess, onError) {\n const headers = new Headers();\n const url = `${baseUrl}/block_global/`;\n return get(url, headers, onSuccess, onError);\n }\n\n static getConference({ id }, onSuccess, onError) {\n const headers = new Headers();\n const url = `${baseUrl}/conference_global/${id}`;\n return get(url, headers, onSuccess, onError);\n }\n\n static getConferenceBySlug({ slug }, onSuccess, onError) {\n const headers = new Headers();\n const url = `${baseUrl}/conference_global?slug=${slug}`;\n return get(url, headers, onSuccess, onError);\n }\n\n static getConferences(onSuccess, onError) {\n const headers = new Headers();\n const url = `${baseUrl}/conference_global?per_page=100`;\n return get(url, headers, onSuccess, onError);\n }\n\n static getFilters(onSuccess, onError) {\n const headers = new Headers();\n const url = `${baseUrl}/filter_global?per_page=100`;\n return get(url, headers, onSuccess, onError);\n }\n\n static getTags(onSuccess, onError) {\n const headers = new Headers();\n const url = `${baseUrl}/tags?per_page=100`;\n return get(url, headers, onSuccess, onError);\n }\n\n static getVideo({ id }, onSuccess, onError) {\n const headers = new Headers();\n const url = `${baseUrl}/video_global/${id}`;\n return get(url, headers, onSuccess, onError);\n }\n\n static getVideos(\n { currentPage, operator, selectedTags },\n onSuccess,\n onError\n ) {\n const headers = new Headers();\n const tagsQueryParams = generateTagsQueryParams(selectedTags, operator);\n const url = `${baseUrl}/video_global?page=${currentPage}&per_page=99${tagsQueryParams}`;\n return get(url, headers, onSuccess, onError);\n }\n\n static getVideosBySearchTerm({ search }, onSuccess, onError) {\n const headers = new Headers();\n const url = `${baseUrl}/video_global?per_page=99&search=${search}`;\n return get(url, headers, onSuccess, onError);\n }\n}\n","export function generateTagsQueryParams(selectedTags = [], operator = \"OR\") {\n // If there are no tags, return empty string\n if (selectedTags.length === 0) return \"\";\n\n // If there are tags, generate query parameters containing tag data\n // Sample param: \"&tags[terms]=45,64&tags[operator]=AND\"\n const tagsTermsQueryParamBase = \"tags[terms]=\";\n const tagsTermsQueryParams = selectedTags.reduce((acc, tag, i, arr) => {\n const isLastItem = arr.length - 1 === i;\n if (isLastItem) return acc.concat(tag.id);\n return acc.concat(`${tag.id},`);\n }, tagsTermsQueryParamBase);\n return `&${tagsTermsQueryParams}&tags[operator]=${operator}`;\n}\n","export function findTagIdByName(name, tags) {\n const tagFound = tags.find((tag) => tag.slug === name);\n return tagFound?.id;\n}\n\nexport function mapFiltersToTags(filters, tags) {\n return filters.map((filterGroup) => {\n return {\n ...filterGroup,\n items: filterGroup.items.map((filter) => {\n return { ...filter, id: findTagIdByName(filter.tag, tags) };\n }),\n };\n });\n}\n","import { createContext, useEffect, useState } from \"react\";\n\n// Platforms\nimport { Api } from \"../platforms/api\";\n\n// Utils\nimport { reformatAcfResponse } from \"../utils/fetchUtils\";\nimport { mapFiltersToTags } from \"../utils/tagUtils\";\n\nexport const TagsContext = createContext({});\n\nexport const TagsProvider = (props) => {\n const { children } = props;\n\n /************************************************\n * useState\n ************************************************/\n\n const [filters, setFilters] = useState([]);\n const [mappedFilters, setMappedFilters] = useState([]);\n const [selectedTags, setSelectedTags] = useState([]);\n const [selectedCategoryTags, setSelectedCategoryTags] = useState([]);\n const [selectedConferenceTags, setSelectedConferenceTags] = useState([]);\n const [tags, setTags] = useState([]);\n\n const hasSelectedCategoryTags = selectedCategoryTags?.length > 0;\n const hasSelectedConferenceTags = selectedConferenceTags?.length > 0;\n const hasSelectedTags = selectedTags?.length > 0;\n\n /************************************************\n * useEffect\n ************************************************/\n\n useEffect(() => {\n if (filters?.length && tags?.length) {\n setMappedFilters(mapFiltersToTags(filters, tags));\n }\n }, [filters, tags]);\n\n /************************************************\n * End Hooks\n ************************************************/\n\n // Filters\n\n /**\n * Fetch the filters that will be displayed in the \"Filter By\" section\n * of the header when visiting the Videos page\n */\n function fetchFilters() {\n Api.getFilters(onFetchFiltersSuccess, onFetchFiltersError);\n }\n\n function onFetchFiltersError(err) {\n console.error(\"filters err\", reformatAcfResponse(err));\n }\n\n function onFetchFiltersSuccess({ headers, body: res }) {\n setFilters(reformatAcfResponse(res));\n }\n\n // Select Tags\n\n function addTag(tag, type) {\n setSelectedTags((prev) => [...prev, tag]);\n type === \"categories\" &&\n setSelectedCategoryTags((prev) => [...prev, tag]);\n type === \"conferences\" &&\n setSelectedConferenceTags((prev) => [...prev, tag]);\n }\n\n function clearTags() {\n setSelectedTags([]);\n setSelectedCategoryTags([]);\n setSelectedConferenceTags([]);\n }\n\n function removeTag(tag, type) {\n setSelectedTags((prev) =>\n prev.filter((selectedTag) => selectedTag.tag !== tag.tag)\n );\n type === \"categories\" &&\n setSelectedCategoryTags((prev) =>\n prev.filter((selectedTag) => selectedTag.tag !== tag.tag)\n );\n type === \"conferences\" &&\n setSelectedConferenceTags((prev) =>\n prev.filter((selectedTag) => selectedTag.tag !== tag.tag)\n );\n }\n\n // Tags\n\n function fetchTags() {\n Api.getTags(onFetchTagsSuccess, onFetchTagsError);\n }\n\n function onFetchTagsError(err) {\n console.error(\"fetch tags error\", err);\n }\n\n function onFetchTagsSuccess({ headers, body: res }) {\n setTags(res);\n }\n\n const tagsContext = {\n addTag,\n clearTags,\n fetchFilters,\n fetchTags,\n filters,\n hasSelectedCategoryTags,\n hasSelectedConferenceTags,\n hasSelectedTags,\n mappedFilters,\n removeTag,\n selectedTags,\n selectedCategoryTags,\n selectedConferenceTags,\n tags,\n };\n\n return (\n <TagsContext.Provider value={tagsContext}>\n {children}\n </TagsContext.Provider>\n );\n};\n","import { useContext } from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport { Helmet } from \"react-helmet\";\n\n// Components\nimport { ConferenceDescription } from \"./ConferenceDescription/ConferenceDescription\";\nimport { ConferenceHeader } from \"./ConferenceHeader/ConferenceHeader\";\nimport { ConferenceHighlightVideo } from \"./ConferenceHighlightVideo/ConferenceHighlightVideo\";\nimport { ConferenceSessions } from \"./ConferenceSessions/ConferenceSessions\";\nimport { ConferenceSpeakers } from \"./ConferenceSpeakers/ConferenceSpeakers\";\nimport { ConferenceSponsors } from \"./ConferenceSponsors/ConferenceSponsors\";\nimport { ConferenceVideos } from \"./ConferenceVideos/ConferenceVideos\";\nimport { ConferencesPrevious } from \"../../components/ConferencesPrevious/ConferencesPrevious\";\nimport { LoadingPageContainer as LoadingPage } from \"../../components/LoadingPage/LoadingPageContainer\";\n\n// Context\nimport { TagsContext } from \"../../context/tags\";\n\n// CSS\nimport styles from \"./conference.module.scss\";\n\nexport const Conference = (props) => {\n const { conference } = props;\n const { title, description, sessions } = conference || {};\n\n /**\n * Router Hooks\n */\n\n const history = useHistory();\n\n /**\n * Context\n */\n\n const { addTag } = useContext(TagsContext);\n\n /**\n * Constants\n */\n\n const hasSessions = sessions && sessions.length;\n const isLoading = !conference;\n\n /**\n * End Hooks & Constants\n */\n\n return (\n <div className={styles.conference}>\n <Helmet>\n <title>{conference?.title}</title>\n <meta name=\"title\" content={title} />\n <meta name=\"description\" content={description} />\n <meta name=\"robots\" content=\"index, follow\" />\n </Helmet>\n {isLoading && <LoadingPage {...props} />}\n <ConferenceHeader {...props} />\n <ConferenceDescription {...props} />\n <ConferenceHighlightVideo {...props} />\n {hasSessions && <ConferenceSessions {...props} />}\n <ConferenceVideos {...props} addTag={addTag} />\n\n <ConferenceSpeakers {...props} />\n <ConferenceSponsors {...props} />\n <ConferencesPrevious {...props} history={history} />\n </div>\n );\n};\n","import { createContext, useEffect, useState } from \"react\";\n\n// Platforms\nimport { Api } from \"../platforms/api\";\n\n// Utils\nimport { reformatAcfResponse } from \"../utils/fetchUtils\";\n\nexport const ConferencesContext = createContext({});\n\nexport const ConferencesProvider = (props) => {\n const { children } = props;\n\n /************************************************\n * useState\n ************************************************/\n\n const [conferences, setConferences] = useState([]);\n const [featuredConference, setFeaturedConference] = useState(null);\n const [isLoadingConferences, setIsLoadingConferences] = useState(true);\n\n /************************************************\n * useEffect\n ************************************************/\n\n useEffect(() => {\n if (conferences?.length) {\n handleSetFeaturedConference();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [conferences]);\n\n /************************************************\n * End Hooks\n ************************************************/\n\n function fetchConferences() {\n Api.getConferences(onFetchConferencesSuccess);\n }\n\n function handleSetFeaturedConference() {\n setFeaturedConference(\n conferences.find((conference) => conference.is_featured)\n );\n }\n\n function onFetchConferencesSuccess({ headers, body: res }) {\n setConferences(reformatAcfResponse(res));\n setIsLoadingConferences(false);\n }\n\n const conferencesContext = {\n conferences,\n featuredConference,\n fetchConferences,\n isLoadingConferences,\n };\n\n return (\n <ConferencesContext.Provider value={conferencesContext}>\n {children}\n </ConferencesContext.Provider>\n );\n};\n","export function scrollToTop() {\n window.scrollTo({ top: 0, left: 0, behavior: \"auto\" });\n}\n","import { useContext, useEffect, useState } from \"react\";\nimport { useHistory, useLocation, useParams } from \"react-router-dom\";\n\n// Components\nimport { Conference } from \"./Conference\";\n\n// Context\nimport { ConferencesContext } from \"../../context/conferences\";\n\n// Platforms\nimport { Api } from \"../../platforms/api\";\n\n// Utils\nimport { reformatAcfResponse } from \"../../utils/fetchUtils\";\nimport { scrollToTop } from \"../../utils/scrollUtils\";\n\nexport const ConferenceContainer = (props) => {\n /**\n * Router Hooks\n */\n\n const history = useHistory();\n const location = useLocation();\n const params = useParams();\n\n /**\n * useContext\n */\n\n const { conferences } = useContext(ConferencesContext);\n\n /**\n * useState\n */\n\n const [conference, setConference] = useState(null);\n const [featuredVideos, setFeaturedVideos] = useState([null, null, null]);\n\n /**\n * useEffect\n */\n\n useEffect(() => {\n const params = new URLSearchParams(window.location.search);\n const scrollParam = params.get(\"scroll\");\n\n if (scrollParam === \"register\") {\n setTimeout(() => {\n scrollToRegister();\n }, 500);\n } else if (scrollParam === \"agenda\") {\n setTimeout(() => {\n scrollToSessions();\n }, 500);\n } else {\n scrollToTop();\n }\n\n if (!conference) {\n handleDetectConference();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n if (conference?.featured_videos) {\n generateFeaturedVideos();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [conference]);\n\n useEffect(() => {\n handleDetectConference();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [params.id]);\n\n /**\n * End Hooks\n */\n\n async function generateFeaturedVideos() {\n const videos = await Promise.all(\n conference.featured_videos.map((video, i) => {\n return Api.getVideo(\n { id: video.ID },\n ({ headers, body: res }) => reformatAcfResponse(res)\n );\n })\n );\n setFeaturedVideos(videos);\n }\n\n function fetchConference() {\n const slug = props.match.params.id;\n Api.getConferenceBySlug(\n { slug },\n onFetchConferenceSuccess,\n onFetchConferenceError\n );\n }\n\n function handleDetectConference() {\n const { conference: locationConference } = location?.state || {};\n locationConference\n ? setConference(locationConference)\n : fetchConference();\n scrollToTop();\n }\n\n function onFetchConferenceError(err) {\n history.push(\"/conferences\");\n }\n\n function onFetchConferenceSuccess({ headers, body: res }) {\n setConference(reformatAcfResponse(res)[0]);\n }\n\n function scrollToRegister() {\n document.getElementById(\"register\")?.scrollIntoView();\n }\n\n function scrollToSessions() {\n document.getElementById(\"agenda\")?.scrollIntoView();\n }\n\n return (\n <Conference\n {...props}\n conference={conference}\n conferences={conferences}\n featuredVideos={featuredVideos}\n history={history}\n scrollToRegister={scrollToRegister}\n scrollToSessions={scrollToSessions}\n />\n );\n};\n","import cx from \"classnames\";\nimport parse from \"html-react-parser\";\n\n// Components\nimport Button from \"../Button/ButtonContainer\";\nimport Section from \"../Section/SectionContainer\";\n\n// CSS\nimport styles from \"./block.module.scss\";\n\nconst Block = (props) => {\n const {\n cta_link,\n cta_text,\n agenda_link,\n agenda_button_text,\n description,\n image,\n orientation,\n subtitle,\n title,\n style,\n } = props;\n\n /**\n * Constants\n */\n\n const buttonTheme = orientation === \"Center\" ? \"\" : \"green\";\n\n /**\n * End Hooks\n */\n\n return (\n <Section\n classes={cx(styles.block, {\n [styles[\"block--layout-center\"]]: orientation === \"Center\",\n [styles[\"block--layout-left\"]]: orientation === \"Left\",\n [styles[\"block--layout-right\"]]: orientation === \"Right\",\n })}\n style={{ backgroundColor: style?.backgroundColor }}\n >\n <div\n className={styles.image}\n style={{ backgroundImage: `url(${image?.sizes?.large})` }}\n />\n <div className={styles.text} id=\"current_event\">\n <h1 className={styles.header}>\n {title && <span>{parse(props.title)}</span>}\n </h1>\n\n <span className={styles.subheader}>{subtitle}</span>\n\n <p className={styles.welcome_message}>\n {description && <span>{parse(props.description)}</span>}\n </p>\n\n <span className={styles.btn_region}>\n <a\n href={cta_link}\n rel=\"noreferrer\"\n target=\"_blank\"\n className={cx(styles.button, {\n [styles[\"button--hidden\"]]: !cta_link,\n })}\n >\n <Button\n classes={styles.button}\n text={cta_text}\n theme={buttonTheme}\n />\n </a>\n\n <a\n href={agenda_link}\n rel=\"noreferrer\"\n className={cx(styles.button, {\n [styles[\"button--hidden\"]]: !agenda_link,\n })}\n >\n <Button\n classes={styles.button}\n text={agenda_button_text}\n theme={buttonTheme}\n />\n </a>\n </span>\n </div>\n </Section>\n );\n};\n\nexport default Block;\n","import parse from \"html-react-parser\";\n\n// Components\nimport Section from \"../Section/SectionContainer\";\nimport Button from \"../Button/ButtonContainer\";\n\n// CSS\nimport styles from \"./welcome.module.scss\";\n\n/**\n * Constants\n */\n\nconst Welcome = (data) => {\n const {\n welcome_background_left,\n welcome_background_right,\n welcome_message,\n cta_link,\n cta_text,\n } = data;\n\n /**\n * Hooks\n */\n\n return (\n <Section\n classes={styles[\"welcome\"]}\n style={{\n backgroundImage: `\n url(${welcome_background_left?.sizes?.medium_large}),\n url(${welcome_background_right?.sizes?.medium_large})\n `,\n }}\n >\n <div className={styles.welcome_message}>\n {welcome_message && <span>{parse(data.welcome_message)}</span>}\n\n <a\n href={cta_link}\n rel=\"noreferrer\"\n target=\"_blank\"\n >\n <Button className={styles.button} text={cta_text} />\n\n </a>\n </div>\n </Section>\n );\n};\n\nexport default Welcome;\n","import { useHistory } from \"react-router-dom\";\n\n// Components\nimport Welcome from \"./Welcome\";\n\nconst WelcomeContainer = (props) => {\n /**\n * Router Hooks\n */\n\n const history = useHistory();\n\n /**\n * End Hooks\n */\n\n return <Welcome {...props} history={history} />;\n\n};\n\nexport default WelcomeContainer;\n","// Components\nimport Section from \"../Section/SectionContainer\";\n\n// CSS\nimport styles from \"./welcomecarousel.module.scss\";\n\n/**\n * Constants\n */\n\nconst WelcomeCarousel = (data) => {\n const { welcome_carousel } = data;\n\n /**\n * Hooks\n */\n\n return (\n <Section classes={styles[\"carousel\"]}>\n {welcome_carousel.map(function (item, i) {\n return (\n <img\n className={styles.image}\n src={item.url}\n title={item.name}\n alt={item.name}\n ></img>\n );\n })}\n </Section>\n );\n};\n\nexport default WelcomeCarousel;\n","import { useHistory } from \"react-router-dom\";\n\n// Components\nimport WelcomeCarousel from \"./WelcomeCarousel\";\n\nconst WelcomeCarouselContainer = (props) => {\n /**\n * Router Hooks\n */\n\n const history = useHistory();\n\n /**\n * End Hooks\n */\n\n return <WelcomeCarousel {...props} history={history} />;\n};\n\nexport default WelcomeCarouselContainer;\n","import { useHistory } from \"react-router-dom\";\n\n// Components\nimport Block from \"./Block\";\nimport Welcome from \"../Welcome/WelcomeContainer\";\nimport WelcomeCarousel from \"../WelcomeCarousel/WelcomeCarouselContainer\";\n\nconst BlockContainer = (props) => {\n /**\n * Router Hooks\n */\n\n const history = useHistory();\n\n /**\n * End Hooks\n */\n\n return (\n <div>\n <Welcome {...props} history={history} />\n <WelcomeCarousel {...props} history={history} />\n <Block {...props} history={history} />\n </div>\n\n );\n\n};\n\nexport default BlockContainer;\n","// Components\nimport Button from \"../../../components/Button/ButtonContainer\";\nimport { CardContainer as Card } from \"../../../components/Card/CardContainer\";\nimport Section from \"../../../components/Section/SectionContainer\";\n\n// CSS\nimport styles from \"../conferences.module.scss\";\n\nconst ConferencesVideos = (props) => {\n const { history, videos } = props;\n\n function handleSelect(video) {\n history.push({ pathname: `/videos/${video.id}`, state: { video } });\n }\n\n function onButtonClick() {\n history.push(\"/videos\");\n }\n\n function renderVideos() {\n return videos\n .slice(0, 3)\n .map((video) => (\n <Card\n data={video}\n key={video?.id}\n onClick={() => handleSelect(video)}\n />\n ));\n }\n\n return (\n <Section classes={styles.videos}>\n <h1>featured videos</h1>\n <div className={styles.grid}>{renderVideos()}</div>\n <Button onClick={onButtonClick} text=\"more videos\" theme=\"green\" />\n </Section>\n );\n};\n\nexport default ConferencesVideos;\n","import { useHistory } from \"react-router-dom\";\n\n// Components\nimport Block from \"../../components/Block/BlockContainer\";\nimport { ConferencesPrevious } from \"../../components/ConferencesPrevious/ConferencesPrevious\";\nimport ConferencesVideos from \"./ConferencesVideos/ConferencesVideos\";\nimport { LoadingPageContainer as LoadingPage } from \"../../components/LoadingPage/LoadingPageContainer\";\n\n\n// CSS\nimport styles from \"./conferences.module.scss\";\n\nexport const Conferences = (props) => {\n const { blocks, loading, } = props;\n\n /**\n * Router Hooks\n */\n\n const history = useHistory();\n\n /**\n * Constants\n */\n\n const isLoading = loading.blocks || loading.conferences;\n\n /**\n * End Hooks\n */\n\n function renderBlocks() {\n return (\n blocks &&\n blocks.map((block, i) => {\n return <Block {...block} key={i} />;\n })\n );\n }\n\n return (\n <div className={styles.conferences}>\n {isLoading && <LoadingPage />}\n {renderBlocks()}\n <ConferencesPrevious {...props} history={history} />\n <ConferencesVideos {...props} history={history} />\n </div>\n );\n};\n","import { createContext, useContext, useEffect, useState } from \"react\";\n\n// Contexts\nimport { TagsContext } from \"./tags\";\n\n// Platforms\nimport { Api } from \"../platforms/api\";\n\n// Utils\nimport { reformatAcfResponse } from \"../utils/fetchUtils\";\nimport { scrollToTop } from \"../utils/scrollUtils\";\nimport { generateFilteredVideos } from \"../utils/videoUtils\";\n\nexport const VideosContext = createContext({});\n\nexport const VideosProvider = (props) => {\n const { children } = props;\n\n /************************************************\n * useContext\n ************************************************/\n\n const {\n hasSelectedCategoryTags,\n hasSelectedConferenceTags,\n hasSelectedTags,\n selectedCategoryTags,\n selectedConferenceTags,\n selectedTags,\n } = useContext(TagsContext);\n\n /************************************************\n * useState\n ************************************************/\n\n const [currentPage, setCurrentPage] = useState(1);\n const [filteredVideos, setFilteredVideos] = useState([]);\n const [isFiltering, setIsFiltering] = useState(false);\n const [isSearchActive, setIsSearchActive] = useState(false);\n const [isSearching, setIsSearching] = useState(false);\n const [totalPages, setTotalPages] = useState(null);\n const [totalVideos, setTotalVideos] = useState(null);\n const [videos, setVideos] = useState([]);\n const [videoSearchResults, setVideoSearchResults] = useState([]);\n\n /************************************************\n * useEffect\n ************************************************/\n\n useEffect(() => {\n fetchVideos();\n scrollToTop();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [currentPage, selectedTags]);\n\n useEffect(() => {\n // handleFiltering();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [selectedTags, selectedCategoryTags, selectedConferenceTags]);\n\n /************************************************\n * Constants\n ************************************************/\n\n const shouldShowFilteredVideos =\n hasSelectedTags && hasSelectedCategoryTags && hasSelectedConferenceTags;\n\n /************************************************\n * End Hooks\n ************************************************/\n\n function fetchVideos() {\n setCurrentPage(1);\n setIsSearching(true);\n setIsSearchActive(true);\n return Api.getVideos(\n { currentPage, operator: \"OR\", selectedTags },\n onFetchVideosSuccess,\n onFetchVideosError,\n onFetchVideosError\n );\n }\n\n function fetchVideoSearchResults(search) {\n setCurrentPage(1);\n setIsSearching(true);\n handleToggleSearchMode(true);\n return Api.getVideosBySearchTerm(\n { search },\n onFetchVideoSearchResultsSuccess,\n onFetchVideoSearchResultsError\n );\n }\n\n function handleFiltering(res) {\n if (\n hasSelectedTags &&\n hasSelectedCategoryTags &&\n hasSelectedConferenceTags\n ) {\n setIsFiltering(true);\n setFilteredVideos(\n generateFilteredVideos(\n res,\n selectedConferenceTags,\n selectedCategoryTags\n )\n );\n setIsFiltering(false);\n }\n }\n\n function handleSelectPage({ selected }) {\n const selectedPage = selected + 1;\n setCurrentPage(selectedPage);\n }\n\n function handleToggleSearchMode(bool) {\n setIsSearchActive(bool);\n }\n\n function onFetchVideosError() {\n setIsSearching(false);\n setIsSearchActive(false);\n }\n\n function onFetchVideosSuccess({ headers, body: res }) {\n const reformattedResponse = reformatAcfResponse(res);\n setIsSearching(false);\n setIsSearchActive(false);\n setTotalVideos(parseInt(headers.get(\"X-Wp-Total\")));\n setTotalPages(parseInt(headers.get(\"X-Wp-Totalpages\")));\n setVideos(reformattedResponse);\n handleFiltering(reformattedResponse);\n }\n\n function onFetchVideoSearchResultsError(err) {\n setIsSearching(false);\n }\n\n function onFetchVideoSearchResultsSuccess({ headers, body: res }) {\n setVideoSearchResults(reformatAcfResponse(res));\n setIsSearching(false);\n }\n\n const videosContext = {\n fetchVideos,\n fetchVideoSearchResults,\n filteredVideos,\n handleSelectPage,\n handleToggleSearchMode,\n isFiltering,\n isSearchActive,\n isSearching,\n shouldShowFilteredVideos,\n totalPages,\n totalVideos,\n videos,\n videoSearchResults,\n };\n\n return (\n <VideosContext.Provider value={videosContext}>\n {children}\n </VideosContext.Provider>\n );\n};\n","export function generateFilteredVideos(\n videos = [],\n selectedConferenceTags = [],\n selectedCategoryTags = []\n) {\n if (!selectedConferenceTags.length) {\n return videos;\n }\n\n const videosFilteredByConference = videos.filter((video) => {\n return selectedConferenceTags.some((selectedConferenceTag) => {\n return video.tags.some((videoTag) => {\n return videoTag === selectedConferenceTag.id;\n });\n });\n });\n const videosFilteredByCategory = videosFilteredByConference.filter(\n (video) => {\n return selectedCategoryTags.some((selectedCategoryTag) => {\n return video.tags.some((videoTag) => {\n return videoTag === selectedCategoryTag.id;\n });\n });\n }\n );\n return videosFilteredByCategory;\n}\n","import { useContext, useEffect, useState } from \"react\";\nimport { useHistory } from \"react-router-dom\";\n\n// Components\nimport { Conferences } from \"./Conferences\";\n\n// Context\nimport { ConferencesContext } from \"../../context/conferences\";\nimport { VideosContext } from \"../../context/videos\";\n\n// Platforms\nimport { Api } from \"../../platforms/api\";\n\n// Utils\nimport { reformatAcfResponse } from \"../../utils/fetchUtils\";\n\nexport const ConferencesContainer = (props) => {\n const {\n hasRedirectedToFeaturedConference,\n setHasRedirectedToFeaturedConference,\n } = props;\n\n /**\n * Router Hooks\n */\n\n const history = useHistory();\n\n /**\n * useContext\n */\n\n const { conferences, featuredConference, isLoadingConferences } =\n useContext(ConferencesContext);\n const { videos } = useContext(VideosContext);\n\n /**\n * useState\n */\n\n const [blocks, setBlocks] = useState(null);\n const [loading, setLoading] = useState({ blocks: true, conferences: true });\n\n /**\n * useEffect\n */\n\n useEffect(() => {\n fetchBlocks();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n if (featuredConference && !hasRedirectedToFeaturedConference) {\n //history.push(`/conferences/${featuredConference.slug}`);\n //setHasRedirectedToFeaturedConference(true);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [featuredConference]);\n\n useEffect(() => {\n setLoading((prev) => ({ ...prev, conferences: isLoadingConferences }));\n }, [isLoadingConferences]);\n\n /**\n * End Hooks\n */\n\n function fetchBlocks() {\n Api.getBlocks(onFetchBlocksSuccess, onFetchBlocksError);\n }\n\n function onFetchBlocksError(err) {\n setLoading((prev) => ({ ...prev, blocks: false }));\n }\n\n function onFetchBlocksSuccess({ body: res, headers }) {\n const formattedResponse = reformatAcfResponse(res);\n setBlocks(formattedResponse[0].block);\n setLoading((prev) => ({ ...prev, blocks: false }));\n }\n\n return (\n <Conferences\n {...props}\n blocks={blocks}\n conferences={conferences}\n loading={loading}\n videos={videos}\n />\n );\n};\n","import { Link } from \"react-router-dom\";\n\n// CSS\nimport styles from \"./footer.module.scss\";\n\nconst Footer = (props) => {\n const { footerConferences, goToConferences } = props;\n\n return (\n <div className={styles.footer}>\n <div className={styles.primary}>\n <div className={styles.column}>\n <span className={styles.header}>THE COMPANY</span>\n <a\n className={styles.link}\n href=\"https://symphony.com/company/about/\"\n rel=\"nofollow noreferrer\"\n target=\"_blank\"\n >\n About Symphony\n </a>\n <a\n className={styles.link}\n href=\"https://symphony.com/company/partners/\"\n rel=\"nofollow noreferrer\"\n target=\"_blank\"\n >\n Partnerships\n </a>\n <a\n className={styles.link}\n href=\"https://symphony.com/company/news-press-events/\"\n rel=\"nofollow noreferrer\"\n target=\"_blank\"\n >\n News\n </a>\n <a\n className={styles.link}\n href=\"https://symphony.com/insights/blog/\"\n rel=\"nofollow noreferrer\"\n target=\"_blank\"\n >\n Blog\n </a>\n </div>\n <div className={styles.column}>\n <span className={styles.header}>CONFERENCES</span>\n\n {/*\n <Link\n className={styles.link}\n to={{\n pathname: \"/conferences/nyc-2024\",\n state: {\n conference: footerConferences[\"nyc-2024\"],\n },\n }}\n >\n Symphony Innovate New York 2024\n </Link>\n */}\n\n <span className={styles.link} onClick={goToConferences}>\n View past events\n </span>\n </div>\n </div>\n <div className={styles.secondary}>\n <div className={styles.row}>\n <span>\n © {new Date().getFullYear()} Symphony Communication\n Services LLC. All rights reserved.\n </span>\n <a\n className={styles.link}\n href=\"https://symphony.com/privacy-policy/\"\n rel=\"nofollow noreferrer\"\n target=\"_blank\"\n >\n Terms & Conditions\n </a>\n </div>\n <div className={styles.row}>\n <p className={styles.gdpr}>\n By attending Symphony Innovate New York 2024, you consent to (i) be photographed, filmed and/or otherwise recorded; (ii) the recording of your questions and comments posted during the live sessions; (iii) be included in Symphony’s newsletter distribution list (which distribution will contain an unsubscribe option if you no longer desire to receive the newsletters); and (iv) the use and publication by Symphony Communication Services, LLC, its affiliates and any applicable media agency acting on Symphony’s behalf of (1) your name, likeness, statements & voice (if applicable), (2) a live stream of Symphony Innovate New York 2024 and portions thereof, and (3) images, descriptions (whether verbal or written) and videos of any developments you bring to, or display or created for purposes of participating in the event, in each case as such information or media is received or recorded by Symphony at Symphony Innovate New York 2024, for any purpose in which Symphony engages, including any promotion, advertisement or other conduct of trade.\n </p>\n </div>\n </div>\n </div>\n );\n};\n\nexport default Footer;\n","import { useContext, useMemo } from \"react\";\nimport { useHistory } from \"react-router-dom\";\n\n// Components\nimport Footer from \"./Footer\";\n\n// Context\nimport { ConferencesContext } from \"../../context/conferences\";\n\n// Utils\nimport { scrollToTop } from \"../../utils/scrollUtils\";\n\nconst FooterContainer = (props) => {\n /**\n * Router Hooks\n */\n\n const history = useHistory();\n\n /**\n * useContext\n */\n\n const { conferences } = useContext(ConferencesContext);\n\n /**\n * useMemo\n */\n\n const footerConferences = useMemo(() => {\n return {\n \"london-2022\": conferences.find(\n (conference) => conference.slug === \"london-2022\"\n ),\n \"nyc-2021\": conferences.find(\n (conference) => conference.slug === \"nyc-2021\"\n ),\n \"europe-2020\": conferences.find(\n (conference) => conference.slug === \"europe-2020\"\n ),\n \"nyc-2020\": conferences.find(\n (conference) => conference.slug === \"nyc-2020\"\n ),\n };\n }, [conferences]);\n\n /**\n * End Hooks\n */\n\n function goToConferences() {\n const path = window.location.pathname;\n if (path !== \"/conferences\") {\n history.push(\"/conferences\");\n }\n scrollToTop();\n }\n\n return (\n <Footer\n {...props}\n goToConferences={goToConferences}\n footerConferences={footerConferences}\n />\n );\n};\n\nexport default FooterContainer;\n","import { useState, useEffect, useRef } from \"react\";\nimport { isMobile } from \"react-device-detect\";\nimport { Link } from \"react-router-dom\";\nimport cx from \"classnames\";\n\n// CSS\nimport styles from \"../header.module.scss\";\n\nexport const HeaderFilters = (props) => {\n const {\n clearTags,\n handleSelectFilter,\n handleToggleSearchMode,\n shouldShowFilterTags,\n } = props;\n\n /**\n * useRef\n */\n\n const locationsTabRef = useRef();\n\n /**\n * useState\n */\n\n const [tabWidth, setTabWidth] = useState(null);\n\n /**\n * useEffect\n */\n\n useEffect(() => {\n if (locationsTabRef?.current) {\n setTabWidth(locationsTabRef.current.clientWidth);\n }\n }, [locationsTabRef]);\n\n /**\n * Constants\n */\n\n const tabStyle = { width: tabWidth ? `${tabWidth}px` : \"auto\" };\n\n /**\n * End Hooks\n */\n\n function handleShowAllClick() {\n clearTags();\n handleToggleSearchMode(false);\n }\n\n function onMouseEnter() {\n if (!isMobile) {\n handleSelectFilter(\"tags\", true);\n }\n }\n\n return (\n <div className={styles.filters}>\n <div className={styles.filterBy}>\n <span>FILTER BY</span>\n </div>\n <div className={styles.tabs}>\n <div\n className={cx(styles.tab, {\n [styles[\"tab--selected\"]]: shouldShowFilterTags,\n })}\n onClick={() => handleSelectFilter(\"tags\")}\n onMouseEnter={onMouseEnter}\n style={tabStyle}\n >\n FILTER BY\n <span className={cx(styles.arrow, \"material-icons\")}>\n arrow_drop_up\n </span>\n </div>\n </div>\n <div className={styles.showAll}>\n <Link\n className={styles.link}\n onClick={handleShowAllClick}\n to=\"/videos\"\n >\n SHOW ALL\n </Link>\n </div>\n </div>\n );\n};\n","import cx from \"classnames\";\n\n// CSS\nimport styles from \"./chip.module.scss\";\n\nconst Chip = (props) => {\n const { isSelected, onClick, text } = props;\n\n return (\n <div\n className={cx(styles.chip, {\n [styles[\"chip--selected\"]]: isSelected,\n })}\n onClick={onClick}\n >\n <span className={styles.text}>{text}</span>\n </div>\n );\n};\n\nexport default Chip;\n","// Components\nimport Chip from \"./Chip\";\n\nconst ChipContainer = (props) => {\n return <Chip {...props} />;\n};\n\nexport default ChipContainer;\n","import { isMobile } from \"react-device-detect\";\nimport cx from \"classnames\";\n\n// Components\nimport Chip from \"../../Chip/ChipContainer\";\n\n// CSS\nimport styles from \"../header.module.scss\";\n\nexport const HeaderFilterTags = (props) => {\n const {\n handleSelectTag,\n mappedFilters,\n selectedTags,\n shouldHideHeader,\n shouldShowFilterTags,\n toggleFilterTagsDisplay,\n } = props;\n\n /**\n * Constants\n */\n\n const categoryFilters = mappedFilters?.find(\n ({ type }) => type === \"categories\"\n )?.items;\n const conferenceFilters = mappedFilters?.find(\n ({ type }) => type === \"conferences\"\n )?.items;\n\n /**\n * End Hooks\n */\n\n function onMouseLeave() {\n if (!isMobile) {\n toggleFilterTagsDisplay(false);\n }\n }\n\n function renderCategoryFilters() {\n return categoryFilters?.map((tag, i) => {\n const isAlreadySelected = selectedTags.some(\n (selectedTag) => selectedTag.tag === tag.tag\n );\n return (\n <Chip\n isSelected={isAlreadySelected}\n key={i}\n onClick={() => handleSelectTag(tag, \"categories\")}\n text={tag.display_text}\n />\n );\n });\n }\n\n function renderConferenceFilters() {\n return conferenceFilters?.map((tag, i) => {\n const isAlreadySelected = selectedTags.some(\n (selectedTag) => selectedTag.tag === tag.tag\n );\n return (\n <Chip\n isSelected={isAlreadySelected}\n key={i}\n onClick={() => handleSelectTag(tag, \"conferences\")}\n text={tag.display_text}\n />\n );\n });\n }\n\n return (\n <div\n className={cx(styles.filterTags, {\n [styles[\"filterTags--active\"]]:\n shouldShowFilterTags && !shouldHideHeader,\n })}\n onMouseLeave={onMouseLeave}\n >\n <div className={styles.filterTagsLeft}>\n {renderCategoryFilters()}\n </div>\n <div className={styles.filterTagsRight}>\n {renderConferenceFilters()}\n </div>\n </div>\n );\n};\n","import cx from \"classnames\";\n\n// CSS\nimport styles from \"../header.module.scss\";\n\n// Constants\n{/*const twitterIconSrc =\n require(\"../../../assets/icons/X-dark.svg\").default;*/}\nconst linkedinIconSrc =\n require(\"../../../assets/icons/linkedin-dark.svg\").default;\nconst youtubeIconSrc =\n require(\"../../../assets/icons/youtube-dark.svg\").default;\nconst logoSrc = require(\"../../../assets/logos/symphony-light.svg\").default;\n\n\nexport const HeaderRowOne = (props) => {\n const { conference, goToConference, goToSocial, goToSymphony } = props;\n const { hide_featured_conference_from_nav, is_featured, } = conference || {};\n\n return (\n <div className={cx(styles.row, styles[\"row--one\"])}>\n <div\n className={cx(styles.register, {\n [styles[\"register--hidden\"]]:\n !is_featured,\n })}\n >\n <a\n className={cx(styles[\"register-link\"], {\n [styles[\"register-link--hidden\"]]:\n hide_featured_conference_from_nav,\n })}\n href={conference?.register_link}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n Register\n </a>\n </div>\n\n <div className={styles.featured}>\n <div\n className={cx(styles.conference, {\n [styles[\"conference--hidden\"]]:\n hide_featured_conference_from_nav,\n })}\n onClick={goToConference}\n >\n <span className={styles.dateString}>\n {conference?.date_string}\n </span>{\" \"}\n <span> {conference?.location}</span>\n </div>\n <div className={styles.socials}>\n {/*\n <img\n alt=\"Twitter icon\"\n className={styles.icon}\n onClick={() => goToSocial(\"twitter\")}\n src={twitterIconSrc} />\n */}\n <img\n alt=\"Linkedin icon\"\n className={styles.icon}\n onClick={() => goToSocial(\"linkedin\")}\n src={linkedinIconSrc}\n />\n\n <img\n alt=\"Youtube icon\"\n className={styles.icon}\n onClick={() => goToSocial(\"youtube\")}\n src={youtubeIconSrc}\n />\n\n </div>\n </div>\n <div className={styles.logo} onClick={goToSymphony}>\n <img alt=\"Symphony logo\" src={logoSrc} />\n </div>\n </div>\n );\n};\n","import cx from \"classnames\";\n\n// CSS\nimport styles from \"./search.module.scss\";\n\nconst Search = (props) => {\n const { classes, isLight, onChange, onSubmit } = props;\n\n return (\n <div\n className={cx(styles.search, classes, {\n [styles[\"search--light\"]]: isLight,\n })}\n >\n <form onSubmit={onSubmit}>\n <input\n className={styles.input}\n onChange={onChange}\n type=\"text\"\n />\n <span\n className={cx(\n styles.icon,\n `material-icons material-icons-outlined`\n )}\n onClick={onSubmit}\n >\n search\n </span>\n </form>\n </div>\n );\n};\n\nexport default Search;\n","import { useContext, useState } from \"react\";\nimport { useHistory } from \"react-router-dom\";\n\n// Components\nimport Search from \"./Search\";\n\n// Context\nimport { VideosContext } from \"../../context/videos\";\n\nconst SearchContainer = (props) => {\n /**\n * Router Hooks\n */\n\n const history = useHistory();\n\n /**\n * useContext\n */\n\n const { fetchVideoSearchResults } = useContext(VideosContext);\n\n /**\n * useState\n */\n\n const [search, setSearch] = useState(\"\");\n\n /**\n * End Hooks\n */\n\n function onChange(e) {\n const { value } = e.target;\n setSearch(value);\n }\n\n function onSubmit(e) {\n e.preventDefault();\n fetchVideoSearchResults(search);\n history.push(\"/videos\");\n }\n\n return (\n <Search\n {...props}\n onChange={onChange}\n onSubmit={onSubmit}\n search={search}\n />\n );\n};\n\nexport default SearchContainer;\n","import { Link } from \"react-router-dom\";\nimport cx from \"classnames\";\n\n// Components\nimport Search from \"../../Search/SearchContainer\";\n\n// CSS\nimport styles from \"../header.module.scss\";\n\n// Constants\nconst logoSrc =\n require(\"../../../assets/logos/symphony-innovate-logo.svg\").default;\n\nexport const HeaderRowTwo = (props) => {\n const { clearTags, history, location, setIsSideMenuActive } = props;\n\n const isVideoRoute = location.pathname.includes(\"videos\");\n\n return (\n <div className={cx(styles.row, styles[\"row--two\"])}>\n <div\n className={styles.more}\n onClick={() => setIsSideMenuActive((prev) => !prev)}\n >\n <span\n className={cx(\n styles.icon,\n \"material-icons material-icons-outlined\"\n )}\n >\n menu\n </span>\n <span className={styles.text}>MORE</span>\n </div>\n <div className={styles.options}>\n <Search classes={styles.search} history={history} />\n <Link\n className={cx(styles.link, {\n [styles[\"link--active\"]]: isVideoRoute,\n })}\n onClick={clearTags}\n to=\"/videos\"\n >\n VIDEOS\n </Link>\n </div>\n <div className={styles.logo}>\n <Link to=\"/\">\n <img alt=\"Symphony Innovate logo\" src={logoSrc} />\n </Link>\n </div>\n </div>\n );\n};\n","import { useContext, useEffect, useRef } from \"react\";\nimport cx from \"classnames\";\n\n// Components\nimport { HeaderFilters } from \"./HeaderFilters/HeaderFilters\";\nimport { HeaderFilterTags } from \"./HeaderFilterTags/HeaderFilterTags\";\nimport { HeaderRowOne } from \"./HeaderRowOne/HeaderRowOne\";\nimport { HeaderRowTwo } from \"./HeaderRowTwo/HeaderRowTwo\";\n\n// Context\nimport { TagsContext } from \"../../context/tags\";\nimport { VideosContext } from \"../../context/videos\";\n\n// CSS\nimport styles from \"./header.module.scss\";\n\nconst Header = (props) => {\n const {\n history,\n location,\n previousPathname,\n setPreviousPathname,\n setHeaderOffset,\n shouldHideHeader,\n } = props;\n\n /**\n * useRef\n */\n\n const headerRef = useRef();\n\n /**\n * useContext\n */\n\n const {\n addTag,\n clearTags,\n filters,\n mappedFilters,\n removeTag,\n selectedTags,\n } = useContext(TagsContext);\n const { handleSelectPage, handleToggleSearchMode } =\n useContext(VideosContext);\n\n /**\n * useEffect\n */\n\n /**\n * Set header height\n */\n useEffect(() => {\n if (headerRef?.current) {\n setHeaderOffset(headerRef.current.clientHeight);\n }\n }, [headerRef, setHeaderOffset]);\n\n /**\n * Functionality that should be triggered by a change in the URL\n */\n useEffect(() => {\n if (location.pathname !== previousPathname) {\n if (headerRef?.current) {\n setHeaderOffset(headerRef.current.clientHeight);\n }\n setPreviousPathname(location.pathname);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [location]);\n\n /**\n * Constants\n */\n\n const isVideoUrl =\n window.location.pathname.includes(\"video\") ||\n window.location.pathname.includes(\"register/confirmation\");\n\n /**\n * End Hooks\n */\n\n /**\n *\n * @param {Object} tag Example: {display_text: \"Keynote\", tag: \"keynote\"}\n *\n */\n function handleSelectTag(tag, type) {\n const isAlreadySelected = selectedTags.some(\n (selectedTag) => selectedTag.tag === tag.tag\n );\n isAlreadySelected ? removeTag(tag, type) : addTag(tag, type);\n handleToggleSearchMode(false);\n location.pathname !== \"/videos\" && history.push(\"/videos\");\n }\n\n return (\n <div\n className={cx(styles.header, {\n [styles[\"header--hidden\"]]: shouldHideHeader,\n })}\n ref={headerRef}\n >\n <div className={styles.wrapperRelative}>\n <HeaderRowOne {...props} />\n <HeaderRowTwo {...props} clearTags={clearTags} />\n {isVideoUrl && (\n <HeaderFilters\n {...props}\n clearTags={clearTags}\n handleToggleSearchMode={handleToggleSearchMode}\n />\n )}\n {isVideoUrl && (\n <HeaderFilterTags\n {...props}\n handleSelectPage={handleSelectPage}\n handleSelectTag={handleSelectTag}\n filters={filters}\n mappedFilters={mappedFilters}\n selectedTags={selectedTags}\n />\n )}\n </div>\n </div>\n );\n};\n\nexport default Header;\n","import { useContext, useState } from \"react\";\nimport { useHistory, withRouter } from \"react-router-dom\";\n\n// Components\nimport Header from \"./Header\";\n\n// Context\nimport { ConferencesContext } from \"../../context/conferences\";\n\n// Hooks\nimport { useDocumentScrollThrottled } from \"../../hooks/scroll/useDocumentScrollThrottled\";\n\nconst HeaderContainer = (props) => {\n const { location } = props;\n\n /**\n * Router Hooks\n */\n\n const history = useHistory();\n\n /**\n * useContext\n */\n\n const { featuredConference } = useContext(ConferencesContext);\n\n /**\n * useState\n */\n\n const [previousPathname, setPreviousPathname] = useState(location.pathname);\n const [selectedFilter, setSelectedFilter] = useState(null);\n const [shouldHideHeader, setShouldHideHeader] = useState(false);\n const [shouldShowFilterTags, setShouldShowFilterTags] = useState(false);\n const [shouldShowShadow, setShouldShowShadow] = useState(false);\n\n /**\n * Custom Hooks\n */\n\n const MINIMUM_SCROLL = 80;\n const TIMEOUT_DELAY = 200;\n\n useDocumentScrollThrottled((callbackData) => {\n const { previousScrollTop, currentScrollTop } = callbackData;\n const isScrolledDown = previousScrollTop < currentScrollTop;\n const isMinimumScrolled = currentScrollTop > MINIMUM_SCROLL;\n\n setShouldShowShadow(currentScrollTop > 2);\n\n setTimeout(() => {\n setShouldHideHeader(isScrolledDown && isMinimumScrolled);\n }, TIMEOUT_DELAY);\n });\n\n /**\n * End Hooks\n */\n\n function goToConference({ scrollToRegister }) {\n const registerQuery = scrollToRegister ? \"?scroll=register\" : \"\";\n history.push(`/conferences/${featuredConference.slug}${registerQuery}`);\n }\n\n function goToHome() {\n history.push(`/`);\n }\n\n function goToSymphony() {\n window.open(\n \"https://symphony.com/\",\n \"_blank\",\n \"noopener\",\n \"noreferrer\"\n );\n }\n\n function goToSocial(platform) {\n const urls = {\n linkedin: \"https://www.linkedin.com/company/symphonycomm/\",\n twitter: \"https://twitter.com/symphony\",\n youtube: \"https://www.youtube.com/c/SymphonyComm\"\n };\n window.open(urls[platform], \"_blank\", \"noopener\", \"noreferrer\");\n }\n\n function handleSelectFilter(key, bool) {\n toggleFilterTagsDisplay(bool);\n setSelectedFilter(key);\n }\n\n function toggleFilterTagsDisplay(bool) {\n setShouldShowFilterTags((prev) => bool || !prev);\n }\n\n return (\n <Header\n {...props}\n conference={featuredConference}\n goToConference={goToConference}\n goToHome={goToHome}\n goToSocial={goToSocial}\n goToSymphony={goToSymphony}\n handleSelectFilter={handleSelectFilter}\n history={history}\n previousPathname={previousPathname}\n selectedFilter={selectedFilter}\n setPreviousPathname={setPreviousPathname}\n shouldHideHeader={shouldHideHeader}\n shouldShowFilterTags={shouldShowFilterTags}\n shouldShowShadow={shouldShowShadow}\n toggleFilterTagsDisplay={toggleFilterTagsDisplay}\n />\n );\n};\n\nexport default withRouter(HeaderContainer);\n","import { useEffect, useState } from \"react\";\nimport { throttle } from \"lodash\";\n\nexport function useDocumentScrollThrottled(callback) {\n const [, setScrollPosition] = useState(0);\n let previousScrollTop = 0;\n\n function handleDocumentScroll() {\n const { scrollTop: currentScrollTop } =\n document.documentElement || document.body;\n\n setScrollPosition((previousPosition) => {\n previousScrollTop = previousPosition;\n return currentScrollTop;\n });\n\n callback({ previousScrollTop, currentScrollTop });\n }\n\n const handleDocumentScrollThrottled = throttle(handleDocumentScroll, 250);\n\n useEffect(() => {\n window.addEventListener(\"scroll\", handleDocumentScrollThrottled);\n\n return () =>\n window.removeEventListener(\"scroll\", handleDocumentScrollThrottled);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n}\n","import cx from \"classnames\";\n\n// Components\nimport Search from \"../Search/SearchContainer\";\n\n// CSS\nimport styles from \"./side-menu.module.scss\";\n\nconst SideMenu = (props) => {\n const {\n goToHomepage,\n goToConferences,\n goToVideos,\n isSideMenuActive,\n setIsSideMenuActive,\n } = props;\n\n return (\n <div\n className={cx(styles.container, {\n [styles[\"container--active\"]]: isSideMenuActive,\n })}\n >\n <div className={styles.sideMenu}>\n <div className={styles.close}>\n <span\n className={cx(styles.icon, \"material-icons\")}\n onClick={() => setIsSideMenuActive(false)}\n >\n close\n </span>\n </div>\n <div className={styles.links}>\n <span className={styles.link} onClick={goToHomepage}>\n SYMPHONY INNOVATE\n </span>\n\n <span className={styles.link} onClick={goToConferences}>\n CONFERENCES\n </span>\n\n <span className={styles.link} onClick={goToVideos}>\n VIDEOS\n </span>\n\n <a\n className={styles.link}\n href=\"https://symphony.com/company/about/\"\n rel=\"noreferrer noopener\"\n target=\"_blank\"\n >\n ABOUT SYMPHONY\n </a>\n </div>\n <Search classes={styles.search} isLight={true} />\n </div>\n </div>\n );\n};\n\nexport default SideMenu;\n","import { useContext, useEffect, useState } from \"react\";\nimport { useHistory, useLocation } from \"react-router-dom\";\n\n// Components\nimport SideMenu from \"./SideMenu\";\n\n// Context\nimport { ConferencesContext } from \"../../context/conferences\";\n\nconst SideMenuContainer = (props) => {\n const { setIsSideMenuActive } = props;\n\n /**\n * Router Hooks\n */\n\n const history = useHistory();\n const location = useLocation();\n\n /**\n * useContext\n */\n\n const { featuredConference } = useContext(ConferencesContext);\n\n /**\n * useState\n */\n\n const [previousPathname, setPreviousPathname] = useState(location.pathname);\n\n /**\n * useEffect\n */\n\n useEffect(() => {\n if (location.pathname !== previousPathname) {\n setPreviousPathname(location.pathname);\n setIsSideMenuActive(false);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [location]);\n\n /**\n * End Hooks\n */\n\n function goToHomepage() {\n history.push(\"/\");\n setIsSideMenuActive(false);\n }\n\n function goToConference({ scrollToRegister }) {\n const registerQuery = scrollToRegister ? \"?scroll=register\" : \"\";\n history.push(`/conferences/${featuredConference.slug}${registerQuery}`);\n }\n\n function goToConferences() {\n const path = window.location.pathname;\n\n if (path === \"/\") {\n const element = document.getElementById('recent_conferences');\n element.scrollIntoView({ behavior: 'smooth' });\n console.log(element);\n console.log(path);\n console.log(\"homepage\");\n }\n else {\n history.push(\"/\");\n setTimeout(() => {\n const element = document.getElementById('recent_conferences');\n console.log(element);\n element.scrollIntoView({ behavior: 'smooth' });\n }, 100);\n console.log(path);\n console.log(\"not homepage\");\n }\n setIsSideMenuActive(false);\n }\n\n function goToVideos() {\n const path = window.location.pathname;\n if (path !== \"/videos\") {\n history.push(\"/videos\");\n }\n setIsSideMenuActive(false);\n }\n\n return (\n <SideMenu\n {...props}\n goToHomepage={goToHomepage}\n goToConference={goToConference}\n goToConferences={goToConferences}\n goToVideos={goToVideos}\n />\n );\n};\n\nexport default SideMenuContainer;\n","// Components\nimport Section from \"../../../components/Section/SectionContainer\";\nimport Vimeo from \"../../../components/Vimeo/VimeoContainer\";\n\n// CSS\nimport styles from \"../video.module.scss\";\n\nconst VideoEmbed = (props) => {\n const { video } = props;\n\n return (\n <Section classes={styles.embed}>\n <div className={styles.quality}>\n <span>\n To have the best experience when viewing this video, please ensure your quality setting is 1080p.\n </span>\n </div>\n <Vimeo video={video} />\n <div className={styles.disclaimer}>\n <span>\n This content features products and functionality that are\n offered or being developed by Symphony at the time of\n recording. Future availability is subject to change.\n </span>\n </div>\n </Section>\n );\n};\n\nexport default VideoEmbed;\n","import { useMemo } from \"react\";\nimport { OverlayTrigger, Tooltip } from \"react-bootstrap\";\nimport parse from \"html-react-parser\";\n\n// Components\nimport Section from \"../../../components/Section/SectionContainer\";\n\n// CSS\nimport styles from \"../video.module.scss\";\n\n// Constants\nconst arrowForwardIconSrc =\n require(\"../../../assets/icons/arrow-forward-dark.svg\").default;\nconst envelopeIconSrc =\n require(\"../../../assets/icons/envelope-dark.svg\").default;\nconst linkedinIconSrc =\n require(\"../../../assets/icons/linkedin-dark.svg\").default;\nconst twitterIconSrc =\n require(\"../../../assets/icons/twitter-dark.svg\").default;\n\nconst VideoHeader = (props) => {\n const { copyLinkToClipboard, tooltipText, video } = props;\n const { conference, description, title } = video || {};\n\n /**\n * useMemo\n */\n\n const encodedShareDescription = useMemo(\n () => encodeURIComponent(`Watch ${video?.title} on Symphony Innovate`),\n [video]\n );\n\n /**\n * End Hooks\n */\n\n function renderTooltip() {\n return <Tooltip id=\"share-tooltip\">{tooltipText}</Tooltip>;\n }\n\n return (\n <div className={styles.video}>\n <Section classes={styles.headerContainer}>\n <div className={styles.title}>\n {title && <h1>{parse(video.title)}</h1>}\n </div>\n <div className={styles.subheader}>\n <span>{conference}</span>\n </div>\n <div className={styles.row}>\n <p className={styles.description}>\n {parse(description || \"\")}\n </p>\n <div className={styles.icons}>\n <div\n className={styles.icon}\n onClick={copyLinkToClipboard}\n >\n <OverlayTrigger\n delay={{ show: 250, hide: 400 }}\n overlay={renderTooltip()}\n placement=\"top\"\n >\n <img\n alt=\"Forward arrow icon\"\n src={arrowForwardIconSrc}\n />\n </OverlayTrigger>\n </div>\n <a\n className={styles.icon}\n href={`https://www.linkedin.com/sharing/share-offsite/?url=${window.location.href}`}\n rel=\"nofollow noreferrer\"\n target=\"_blank\"\n >\n <img alt=\"Linkedin icon\" src={linkedinIconSrc} />\n </a>\n <a\n className={styles.icon}\n href={`https://twitter.com/intent/tweet?url=${window.location.href}&text=${encodedShareDescription}`}\n rel=\"nofollow noreferrer\"\n target=\"_blank\"\n >\n <img alt=\"Twitter icon\" src={twitterIconSrc} />\n </a>\n <a\n className={styles.icon}\n href={`mailto:?body=${encodedShareDescription}&subject=${video?.title}`}\n rel=\"nofollow noreferrer\"\n target=\"_blank\"\n >\n <img alt=\"Envelope icon\" src={envelopeIconSrc} />\n </a>\n </div>\n </div>\n </Section>\n </div>\n );\n};\n\nexport default VideoHeader;\n","import cx from \"classnames\";\nimport parse from \"html-react-parser\";\n\n// Components\nimport Button from \"../../../components/Button/ButtonContainer\";\nimport Section from \"../../../components/Section/SectionContainer\";\n\n// CSS\nimport styles from \"../video.module.scss\";\n\n\nconst VideosGlobal = (props) => {\n const { video } = props;\n const {\n related_product_title,\n related_product_description,\n related_product_url,\n related_product_image,\n } = video || {};\n\n return (\n <Section classes={styles.related_product}>\n <div\n className={cx(styles.related_product_container, {\n [styles[\"related_product_container--hidden\"]]:\n !related_product_title,\n })}\n >\n <h1 className={styles.header}>Symphony Product</h1>\n <div\n className={styles.related_product_image}\n style={{ backgroundImage: `url(${related_product_image?.sizes?.large})` }}\n >\n </div>\n\n <div className={styles.related_product_text}>\n <h3 className={styles.related_product_title}>{related_product_title}</h3>\n <div className={styles.related_product_description}>{related_product_description && <span>{parse(video.related_product_description)}</span>}</div>\n <a\n href={related_product_url}\n rel=\"noreferrer\"\n target=\"_blank\"\n className={cx(styles.related_product_link, {\n [styles[\"button--hidden\"]]: !related_product_url,\n })}\n >\n <Button\n className={styles.related_product_button}\n text=\"Learn more\"\n />\n </a>\n </div>\n </div>\n </Section>\n );\n};\n\nexport default VideosGlobal;\n","// Components\nimport { CardContainer as Card } from \"../../../components/Card/CardContainer\";\nimport Section from \"../../../components/Section/SectionContainer\";\n\n// CSS\nimport styles from \"../video.module.scss\";\n\nconst VideoRelated = (props) => {\n const { history, videos } = props;\n\n function handleSelect(video) {\n history.push({ pathname: `/videos/${video.id}`, state: { video } });\n history.go(0);\n }\n\n return (\n <Section classes={styles.related}>\n <h1 className={styles.header}>Related Content</h1>\n <div className={styles.grid}>\n <Card\n data={videos[0]}\n onClick={() => handleSelect(videos[0])}\n />\n <Card\n data={videos[1]}\n onClick={() => handleSelect(videos[1])}\n />\n <Card\n data={videos[2]}\n onClick={() => handleSelect(videos[2])}\n />\n </div>\n </Section>\n );\n};\n\nexport default VideoRelated;\n","import { Helmet } from \"react-helmet\";\n\n// Components\nimport VideoEmbed from \"./VideoEmbed/VideoEmbed\";\nimport VideoHeader from \"./VideoHeader/VideoHeader\";\nimport VideoRelatedProduct from \"./VideoRelatedProduct/VideoRelatedProduct\";\nimport VideoRelated from \"./VideoRelated/VideoRelated\";\n\n// CSS\nimport styles from \"./video.module.scss\";\n\nconst Video = (props) => {\n const { video } = props;\n const { description, title } = video || {};\n\n return (\n <div className={styles.video}>\n <Helmet>\n <title>{video?.title}</title>\n <meta name=\"title\" content={title} />\n <meta name=\"description\" content={description} />\n <meta name=\"robots\" content=\"index, follow\" />\n </Helmet>\n <VideoHeader {...props} />\n <VideoEmbed {...props} />\n <VideoRelatedProduct {...props} />\n <VideoRelated {...props} />\n </div>\n );\n};\n\nexport default Video;\n","import { useContext, useEffect, useState } from \"react\";\nimport { useHistory, useLocation, useParams } from \"react-router-dom\";\n\n// Components\nimport Video from \"./Video\";\n\n// Context\nimport { VideosContext } from \"../../context/videos\";\n\n// Platforms\nimport { Api } from \"../../platforms/api\";\n\n// Utils\nimport { reformatAcfResponse } from \"../../utils/fetchUtils\";\nimport { copyToClipboard } from \"../../utils/miscUtils\";\nimport { scrollToTop } from \"../../utils/scrollUtils\";\n\nconst VideoContainer = (props) => {\n /**\n * Router Hooks\n */\n\n const history = useHistory();\n const location = useLocation();\n const { id } = useParams();\n\n /**\n * useContext\n */\n\n const { videos } = useContext(VideosContext);\n\n /**\n * useState\n */\n\n const [tooltipText, setTooltipText] = useState(\"Click to copy video link\");\n const [video, setVideo] = useState(null);\n\n /**\n * useEffect\n */\n\n useEffect(() => {\n scrollToTop();\n if (!video) {\n const { video: locationVideo } = location?.state || {};\n locationVideo ? setVideo(locationVideo) : fetchVideo();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n /**\n * End Hooks\n */\n\n function copyLinkToClipboard() {\n copyToClipboard(window.location.href);\n setTooltipText(\"Copied!\");\n setTimeout(() => {\n setTooltipText(\"Click to copy video link\");\n }, 3000);\n }\n\n function fetchVideo() {\n Api.getVideo({ id }, onFetchVideoSuccess, onFetchVideoError);\n }\n\n function onFetchVideoError(err) {\n history.push(\"/videos\");\n }\n\n function onFetchVideoSuccess({ headers, body: res }) {\n setVideo(reformatAcfResponse(res));\n }\n\n return (\n <Video\n {...props}\n copyLinkToClipboard={copyLinkToClipboard}\n history={history}\n tooltipText={tooltipText}\n video={video}\n videos={videos}\n />\n );\n};\n\nexport default VideoContainer;\n","// CSS\nimport styles from \"./loading-section.module.scss\";\n\n// Const\nconst loadingSpinnerSrc =\n require(\"../../assets/images/loading-spinner-transparent.gif\").default;\n\nexport const LoadingSection = (props) => {\n return (\n <div className={styles[\"loading-section\"]}>\n <img\n alt=\"Loading spinner\"\n className={styles.spinner}\n src={loadingSpinnerSrc}\n />\n </div>\n );\n};\n","import { useMemo } from \"react\";\nimport { Modal } from \"react-bootstrap\";\nimport ReactPaginate from \"react-paginate\";\n\n// Components\nimport Button from \"../../components/Button/ButtonContainer\";\nimport { CardContainer as Card } from \"../../components/Card/CardContainer\";\nimport { LoadingSection } from \"../../components/LoadingSection/LoadingSection\";\nimport Section from \"../../components/Section/SectionContainer\";\n\n// CSS\nimport styles from \"./videos.module.scss\";\n\nconst Videos = (props) => {\n const {\n handleSelect,\n handleSelectPage,\n hasSelectedTags,\n isSearchActive,\n isSearching,\n shouldShowConfirmationModal,\n toggleConfirmationModal,\n totalPages,\n videosCollection,\n } = props;\n\n /**\n * Constants\n */\n\n const header = useMemo(() => {\n if (isSearchActive) return (\n <h1>search results</h1>\n );\n if (hasSelectedTags) return (\n <h1> tagged videos</h1>\n );\n return (\n <div>\n <h1>all videos</h1>\n <h6>The videos on this site are powered by Vimeo</h6>\n </div>\n\n );\n\n }, [hasSelectedTags, isSearchActive]);\n\n /**\n * End Hooks\n */\n\n function renderCards() {\n const list = videosCollection.map((video) => {\n return (\n\n <Card\n data={video}\n key={video.id}\n onClick={() => handleSelect(video)}\n />\n );\n });\n if (list?.length && !isSearching) {\n return list;\n } else if (!list?.length && !isSearching) {\n return (\n <div className={styles.empty}>\n <span>\n We couldn't find any videos matching your search\n request. Please try using a different search term.\n <a href=\"/videos\" rel=\"noreferrer\" target=\"_self\">\n <Button className={styles.empty} text=\"reset filter\" />\n\n </a>\n\n </span>\n </div>\n );\n }\n }\n\n function renderConfirmationModal() {\n return (\n shouldShowConfirmationModal && (\n <Modal\n {...props}\n aria-labelledby=\"contained-modal-title-vcenter\"\n centered\n onHide={() => toggleConfirmationModal(false)}\n size=\"lg\"\n show={shouldShowConfirmationModal}\n >\n <Modal.Header closeButton />\n <Modal.Body>\n <h4>\n Thank you for registering for Symphony Innovate 2021\n [Digital]!\n </h4>\n <p>\n Keep your eyes out for emails in the coming days and\n weeks about the event, agenda, and more. If you have\n any questions, please email{\" \"}\n <a href=\"mailto:innovate@symphony.com\">\n innovate@symphony.com\n </a>\n </p>\n <Button\n onClick={() => toggleConfirmationModal(false)}\n text=\"continue\"\n theme=\"green\"\n />\n </Modal.Body>\n </Modal>\n )\n );\n }\n\n function renderLoading() {\n return (\n isSearching &&\n isSearchActive && (\n <div className={styles.loading}>\n <LoadingSection />\n </div>\n )\n );\n }\n\n return (\n <Section classes={styles.videos}>\n {renderConfirmationModal()}\n {header}\n {renderLoading()}\n <div className={styles.grid}>{renderCards()}</div>\n <ReactPaginate\n breakLabel=\"...\"\n className={styles.pagination}\n activeClassName={styles.active}\n disabledClassName={styles.disabled}\n onPageChange={handleSelectPage}\n pageCount={totalPages}\n pageRangeDisplayed={5}\n renderOnZeroPageCount={null}\n />\n </Section>\n );\n};\n\nexport default Videos;\n","import { useContext, useEffect, useState } from \"react\";\nimport { useHistory } from \"react-router-dom\";\n\n// Components\nimport Videos from \"./Videos\";\n\n// Context\nimport { TagsContext } from \"../../context/tags\";\nimport { VideosContext } from \"../../context/videos\";\n\nconst VideosContainer = (props) => {\n const { showConfirmationModal } = props;\n\n /**\n * Router Hooks\n */\n\n const history = useHistory();\n\n /**\n * useContext\n */\n\n const { clearTags, selectedTags, tags } = useContext(TagsContext);\n const {\n filteredVideos,\n handleSelectPage,\n isFiltering,\n isSearchActive,\n isSearching,\n shouldShowFilteredVideos,\n totalPages,\n totalVideos,\n videos,\n videoSearchResults,\n } = useContext(VideosContext);\n\n /**\n * useState\n */\n\n const [videosCollection, setVideosCollection] = useState([]);\n const [shouldShowConfirmationModal, setShouldShowConfirmationModal] =\n useState(showConfirmationModal);\n\n /**\n * useEffect\n */\n\n useEffect(() => {\n return () => clearTags();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n if (!isSearchActive && !shouldShowFilteredVideos) {\n setVideosCollection(videos);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isSearchActive]);\n\n useEffect(() => {\n if (shouldShowFilteredVideos) {\n setVideosCollection(filteredVideos);\n } else {\n setVideosCollection(videos);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [filteredVideos, shouldShowFilteredVideos]);\n\n useEffect(() => {\n if (videos && !isSearchActive && !shouldShowFilteredVideos) {\n setVideosCollection(videos);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [videos]);\n\n useEffect(() => {\n if (isSearchActive && !shouldShowFilteredVideos) {\n setVideosCollection(videoSearchResults);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [videoSearchResults]);\n\n /**\n * Constants\n */\n\n const hasSelectedTags = !!selectedTags?.length;\n\n /**\n * End Hooks\n */\n\n function handleSelect(video) {\n history.push({ pathname: `/videos/${video.id}`, state: { video } });\n }\n\n function toggleConfirmationModal(bool) {\n setShouldShowConfirmationModal((prev) => bool || !prev);\n }\n\n return (\n <Videos\n {...props}\n handleSelect={handleSelect}\n handleSelectPage={handleSelectPage}\n hasSelectedTags={hasSelectedTags}\n isFiltering={isFiltering}\n isSearchActive={isSearchActive}\n isSearching={isSearching}\n selectedTags={selectedTags}\n shouldShowConfirmationModal={shouldShowConfirmationModal}\n tags={tags}\n toggleConfirmationModal={toggleConfirmationModal}\n totalPages={totalPages}\n totalVideos={totalVideos}\n videosCollection={videosCollection}\n videoSearchResults={videoSearchResults}\n />\n );\n};\n\nexport default VideosContainer;\n","import { useContext, useEffect, useState } from \"react\";\nimport { BrowserRouter as Router, Switch, Route } from \"react-router-dom\";\n\n// Components\n//import { useAnalytics } from \"./hooks/analytics/useAnalytics\";\nimport { ConferenceContainer as Conference } from \"./scenes/conference/ConferenceContainer\";\nimport { ConferencesContainer as Conferences } from \"./scenes/conferences/ConferencesContainer\";\nimport Footer from \"./components/Footer/FooterContainer\";\nimport Header from \"./components/Header/HeaderContainer\";\nimport SideMenu from \"./components/SideMenu/SideMenuContainer\";\nimport Video from \"./scenes/video/VideoContainer\";\nimport Videos from \"./scenes/videos/VideosContainer\";\n\n// Context\nimport { ConferencesContext } from \"./context/conferences\";\nimport { TagsContext } from \"./context/tags\";\nimport { VideosContext } from \"./context/videos\";\n\n// CSS\nimport \"./app.scss\";\nimport \"./css/modal.scss\";\n\nfunction App() {\n /**\n * useState\n */\n\n const [\n hasRedirectedToFeaturedConference,\n setHasRedirectedToFeaturedConference,\n ] = useState(false);\n const [headerOffset, setHeaderOffset] = useState(0);\n const [isSideMenuActive, setIsSideMenuActive] = useState(false);\n\n /**\n * useContext\n */\n\n const { fetchConferences } = useContext(ConferencesContext);\n const { fetchFilters, fetchTags } = useContext(TagsContext);\n const { fetchVideos } = useContext(VideosContext);\n\n /**\n * useEffect\n */\n\n useEffect(() => {\n fetchConferences();\n fetchFilters();\n fetchTags();\n fetchVideos();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n /**\n * End Hooks\n */\n\n function renderRouteByQueryParam(props) {\n const { history } = props;\n const queryParams = new URLSearchParams(window.location.search);\n const conferenceParam = queryParams.get(\"conference\");\n const scrollParam = queryParams.get(\"scroll\");\n const toParam = queryParams.get(\"to\");\n const videoParam = queryParams.get(\"video\");\n if (conferenceParam) {\n const scrollQuery = scrollParam ? `?scroll=${scrollParam}` : \"\";\n history.push(`/conferences/${conferenceParam}${scrollQuery}`);\n } else if (videoParam) {\n history.push(`/videos/${videoParam}`);\n } else if (toParam && toParam === \"conferences\") {\n history.push(\"/conferences\");\n } else if (toParam && toParam === \"videos\") {\n history.push(\"/videos\");\n } else {\n return (\n <Conferences\n {...props}\n hasRedirectedToFeaturedConference={\n hasRedirectedToFeaturedConference\n }\n setHasRedirectedToFeaturedConference={\n setHasRedirectedToFeaturedConference\n }\n />\n );\n }\n }\n\n return (\n <div className=\"app\" style={{ paddingTop: `${headerOffset}px` }}>\n <Router>\n <SideMenu\n isSideMenuActive={isSideMenuActive}\n setIsSideMenuActive={setIsSideMenuActive}\n />\n <Header\n setHeaderOffset={setHeaderOffset}\n setIsSideMenuActive={setIsSideMenuActive}\n />\n <Switch>\n <Route\n path=\"/conferences/:id\"\n render={(props) => <Conference {...props} />}\n />\n <Route\n path=\"/conferences\"\n render={(props) => (\n <Conferences\n {...props}\n hasRedirectedToFeaturedConference={\n hasRedirectedToFeaturedConference\n }\n setHasRedirectedToFeaturedConference={\n setHasRedirectedToFeaturedConference\n }\n />\n )}\n />\n <Route\n path=\"/register/confirmation\"\n render={(props) => (\n <Videos {...props} showConfirmationModal />\n )}\n />\n <Route\n path=\"/videos/:id\"\n render={(props) => <Video {...props} />}\n />\n <Route\n path=\"/videos\"\n render={(props) => <Videos {...props} />}\n />\n <Route\n path=\"/\"\n render={(props) => renderRouteByQueryParam(props)}\n />\n </Switch>\n <Footer />\n </Router>\n </div>\n );\n}\n\nexport default App;\n","const reportWebVitals = onPerfEntry => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n getCLS(onPerfEntry);\n getFID(onPerfEntry);\n getFCP(onPerfEntry);\n getLCP(onPerfEntry);\n getTTFB(onPerfEntry);\n });\n }\n};\n\nexport default reportWebVitals;\n","import React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport \"./index.css\";\nimport \"./normalize.css\";\nimport App from \"./App\";\nimport reportWebVitals from \"./reportWebVitals\";\n\n// Context\nimport { ConferencesProvider } from \"./context/conferences\";\nimport { TagsProvider } from \"./context/tags\";\nimport { VideosProvider } from \"./context/videos\";\n\nReactDOM.render(\n <React.StrictMode>\n <ConferencesProvider>\n <TagsProvider>\n <VideosProvider>\n <App />\n </VideosProvider>\n </TagsProvider>\n </ConferencesProvider>\n </React.StrictMode>,\n document.getElementById(\"root\")\n);\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\nreportWebVitals();\n"],"sourceRoot":""}