{"version":3,"file":"js/strava_with_framework_and_feed-9b5c132374c22e3bdec9.js","mappings":"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","sources":["webpack://strava-active/./app/javascript/components/EmailVerificationCTA/index.scss?534f","webpack://strava-active/./app/javascript/components/EmailVerificationCTA/index.js","webpack://strava-active/./app/javascript/components/EmailVerificationCTA/placements/NotificationEmailVerificationCTA/index.scss?ffba","webpack://strava-active/./app/javascript/components/EmailVerificationCTA/placements/NotificationEmailVerificationCTA/index.js","webpack://strava-active/./app/javascript/components/Feed/state/FeedContext.js","webpack://strava-active/./app/javascript/components/Feed/state/feed-actions.js","webpack://strava-active/./app/javascript/components/Feed/feed.scss?5d97","webpack://strava-active/./app/javascript/components/Feed/components/Activity/styles.scss?e094","webpack://strava-active/./app/javascript/components/Feed/components/shared/ActivityEntryBody/index.scss?3531","webpack://strava-active/./app/javascript/components/Feed/components/shared/ActivityEntryBody/PowerAndSegmentGoalAchievements/PowerAndSegmentGoalAchievements.js","webpack://strava-active/./app/javascript/components/Feed/components/shared/ActivityEntryBody/FeaturedSegmentEffortAndBestEffortAchievements/FeaturedSegmentEffortAndBestEffortAchievements.js","webpack://strava-active/./app/javascript/components/Feed/components/shared/ActivityEntryBody/ActivityStats/ActivityStats.js","webpack://strava-active/./app/javascript/components/Feed/components/shared/ActivityEntryBody/AchievementCount/AchievementCount.js","webpack://strava-active/./app/javascript/components/Feed/components/shared/ActivityEntryBody/ActivityTextBody/ActivityTextBody.js","webpack://strava-active/./app/javascript/components/Feed/components/shared/ActivityEntryBody/CumulativeGoalAchievement/CumulativeGoalAchievement.js","webpack://strava-active/./app/javascript/components/Feed/components/shared/media/Media/media.scss?6a38","webpack://strava-active/./app/javascript/components/Feed/components/shared/media/Media/Media.js","webpack://strava-active/./app/javascript/components/Feed/components/shared/media/MediaBody/media-body.scss?1807","webpack://strava-active/./app/javascript/components/Feed/components/shared/media/MediaBody/MediaBody.js","webpack://strava-active/./app/javascript/components/Feed/components/shared/ActivityEntryBody/ActivityEntryBody.js","webpack://strava-active/./app/javascript/components/Feed/components/shared/MapVisPrompt/index.scss?9357","webpack://strava-active/./app/javascript/components/Feed/hooks/useFeedAnalytics.js","webpack://strava-active/./app/javascript/components/Feed/hooks/useFeedRitmoCapping.js","webpack://strava-active/./app/javascript/components/Feed/hooks/useFeedIntersectionObserver.js","webpack://strava-active/./app/javascript/components/Feed/components/shared/MapVisPrompt/MapVisPrompt.js","webpack://strava-active/./app/javascript/components/Feed/components/shared/MaharajAchievementCelebration/index.scss?ce81","webpack://strava-active/./app/javascript/components/Feed/components/shared/MaharajAchievementCelebration/MaharajAchievementCelebration.js","webpack://strava-active/./app/javascript/components/Feed/components/shared/PhotosAndMapImage/styles.scss?8410","webpack://strava-active/./app/javascript/components/Feed/components/shared/PhotosAndMapImage/Map/Map.js","webpack://strava-active/./app/javascript/components/Feed/components/shared/PhotosAndMapImage/PhotoGrid/VideoItem/VideoItem.scss?a90e","webpack://strava-active/./app/javascript/components/Feed/components/shared/PhotosAndMapImage/PhotoGrid/VideoItem/VideoItem.js","webpack://strava-active/./app/javascript/components/Feed/components/shared/PhotosAndMapImage/PhotoGrid/PhotoGrid.js","webpack://strava-active/./app/javascript/components/Feed/components/shared/PhotosAndMapImage/PhotosAndMapImage.js","webpack://strava-active/./app/javascript/components/Feed/components/shared/KudosAndComments/styles.scss?bbd6","webpack://strava-active/./app/javascript/components/Feed/components/shared/KudosAndComments/CommentsThread/styles.scss?c7f7","webpack://strava-active/./app/javascript/components/Feed/components/shared/KudosAndComments/CommentsThread/CommentsThread.js","webpack://strava-active/./app/javascript/components/Feed/components/shared/media/MediaActions/media-actions.scss?0433","webpack://strava-active/./app/javascript/components/Feed/components/shared/media/MediaActions/MediaActions.js","webpack://strava-active/./app/javascript/components/Feed/components/shared/KudosAndComments/KudosAndComments.js","webpack://strava-active/./app/javascript/components/Feed/components/shared/HeaderWithOwnerMetadata/index.scss?64dc","webpack://strava-active/./app/javascript/components/Feed/components/shared/LocationAndTime/index.scss?7424","webpack://strava-active/./app/javascript/components/Feed/components/shared/LocationAndTime/LocationAndTime.js","webpack://strava-active/./app/javascript/components/Feed/components/shared/SocialShareDropdownActions/styles.scss?1fac","webpack://strava-active/./app/javascript/components/Feed/components/shared/SocialShareDropdownActions/SocialShareDropdownActions.js","webpack://strava-active/./app/javascript/components/Feed/components/shared/media/EntryHeader/entry-header.scss?d8d9","webpack://strava-active/./app/javascript/components/Feed/components/shared/media/EntryHeader/EntryHeader.js","webpack://strava-active/./app/javascript/components/Feed/components/shared/media/MediaLeft/media-left.scss?1044","webpack://strava-active/./app/javascript/components/Feed/components/shared/media/MediaLeft/MediaLeft.js","webpack://strava-active/./app/javascript/components/Feed/components/shared/HeaderWithOwnerMetadata/HeaderWithOwnerMetadata.js","webpack://strava-active/./app/javascript/components/Feed/components/shared/VisibilityMessage/index.scss?2201","webpack://strava-active/./app/javascript/components/Feed/components/shared/VisibilityMessage/VisibilityMessage.js","webpack://strava-active/./app/javascript/components/Feed/components/shared/HiddenStatIndicator/index.scss?f6aa","webpack://strava-active/./app/javascript/components/Feed/components/shared/HiddenStatIndicator/HiddenStatIndicator.js","webpack://strava-active/./app/javascript/components/Feed/components/shared/media/Card/card.scss?39d0","webpack://strava-active/./app/javascript/components/Feed/components/shared/media/Card/Card.js","webpack://strava-active/./app/javascript/components/Feed/components/shared/media/EntryBody/entry-body.scss?4042","webpack://strava-active/./app/javascript/components/Feed/components/shared/media/EntryBody/EntryBody.js","webpack://strava-active/./app/javascript/components/Feed/components/shared/media/EntryMedia/entry-media.scss?5130","webpack://strava-active/./app/javascript/components/Feed/components/shared/media/EntryMedia/EntryMedia.js","webpack://strava-active/./app/javascript/components/Feed/components/shared/media/EntryFooter/entry-footer.scss?89c8","webpack://strava-active/./app/javascript/components/Feed/components/shared/media/EntryFooter/EntryFooter.js","webpack://strava-active/./app/javascript/components/Feed/components/Activity/Activity.js","webpack://strava-active/./app/javascript/components/Feed/components/Post/styles.scss?ff7c","webpack://strava-active/./app/javascript/components/Feed/components/Post/Post.js","webpack://strava-active/./app/javascript/components/Feed/components/FancyPromo/styles.scss?8b0d","webpack://strava-active/./app/javascript/components/Feed/components/shared/PromoEntry/index.scss?71c9","webpack://strava-active/./app/javascript/components/Feed/components/shared/PromoEntry/PromoEntry.js","webpack://strava-active/./app/javascript/components/Feed/components/FancyPromo/FancyPromo.js","webpack://strava-active/./app/javascript/components/Feed/components/shared/PerformanceGoalSingleView/index.scss?31d4","webpack://strava-active/./app/javascript/components/Feed/components/shared/PerformanceGoalSingleView/PerformanceGoalSingleView.js","webpack://strava-active/./app/javascript/components/Feed/components/shared/PerformanceGoalMultiView/index.scss?12b1","webpack://strava-active/./app/javascript/components/Feed/components/shared/GoalEntry/index.scss?b240","webpack://strava-active/./app/javascript/components/Feed/components/shared/GoalEntry/GoalEntry.js","webpack://strava-active/./app/javascript/components/Feed/components/shared/PerformanceGoalMultiView/PerformanceGoalMultiView.js","webpack://strava-active/./app/javascript/components/Feed/components/PerformanceGoalCreated/PerformanceGoalCreated.js","webpack://strava-active/./app/javascript/components/Feed/components/ChallengeJoin/styles.scss?817e","webpack://strava-active/./app/javascript/components/Feed/components/shared/AthleteJoinEntry/index.scss?810e","webpack://strava-active/./app/javascript/components/Feed/components/shared/FeedEntryAgeGate/actions.js","webpack://strava-active/./app/javascript/components/Feed/components/shared/FeedEntryAgeGate/reducers.js","webpack://strava-active/./app/javascript/components/Feed/components/shared/FeedEntryAgeGate/index.js","webpack://strava-active/./app/javascript/components/Feed/components/shared/AthleteJoinEntry/AthleteJoinEntry.js","webpack://strava-active/./app/javascript/components/Feed/components/ChallengeJoin/ChallengeJoin.js","webpack://strava-active/./app/javascript/components/Feed/components/SimplePromo/styles.scss?a8b4","webpack://strava-active/./app/javascript/components/Feed/components/SimplePromo/SimplePromo.js","webpack://strava-active/./app/javascript/components/Feed/components/shared/media/EntryBlock/entry-block.scss?32d3","webpack://strava-active/./app/javascript/components/Feed/components/shared/media/EntryBlock/EntryBlock.js","webpack://strava-active/./app/javascript/components/Feed/components/GroupActivity/GroupActivityEntry/GroupActivityEntry.scss?508e","webpack://strava-active/./app/javascript/components/Feed/components/GroupActivity/GroupActivityEntry/GroupActivityEntry.js","webpack://strava-active/./app/javascript/components/Feed/components/GroupActivity/styles.scss?9dad","webpack://strava-active/./app/javascript/components/Feed/components/GroupActivity/GroupActivity.js","webpack://strava-active/./app/javascript/components/Feed/components/ClubJoin/styles.scss?e380","webpack://strava-active/./app/javascript/components/Feed/components/ClubJoin/ClubJoin.js","webpack://strava-active/./app/javascript/components/Feed/state/feed-reducer.js","webpack://strava-active/./app/javascript/components/Feed/hooks/useFetchFeedEntries.js","webpack://strava-active/./app/javascript/components/Feed/hooks/useFeedScrollRestoration.js","webpack://strava-active/./app/javascript/components/Feed/Feed.js","webpack://strava-active/./app/javascript/components/Feed/FeedRouter.js","webpack://strava-active/./app/javascript/components/Feed/components/shared/media/feed-media-showcase.scss?7449","webpack://strava-active/./app/javascript/components/Feed/components/shared/media/FeedMediaShowCase.js","webpack://strava-active/./app/javascript/packs/strava_with_framework_and_feed.js"],"sourcesContent":["// extracted by mini-css-extract-plugin\nexport default {\"cta\":\"EmailVerificationCTA--cta--oTXkG\",\"dialog\":\"EmailVerificationCTA--dialog--QyyTh\",\"modal\":\"EmailVerificationCTA--modal--Lg4o7\",\"close-button\":\"EmailVerificationCTA--close-button--50iQm\",\"closeButton\":\"EmailVerificationCTA--close-button--50iQm\",\"confirm-email-icon\":\"EmailVerificationCTA--confirm-email-icon--zCSY9\",\"confirmEmailIcon\":\"EmailVerificationCTA--confirm-email-icon--zCSY9\",\"email-text\":\"EmailVerificationCTA--email-text--1aDgC\",\"emailText\":\"EmailVerificationCTA--email-text--1aDgC\",\"wrong-email-text\":\"EmailVerificationCTA--wrong-email-text--iT4r+\",\"wrongEmailText\":\"EmailVerificationCTA--wrong-email-text--iT4r+\"};","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport I18n from 'utils/I18n';\nimport createNetworkingClient from 'utils/networking-client';\n\nimport Modal from 'components/shared/Modal';\n\nimport styles from './index.scss';\n\nconst I18nCloseModal = 'strava.settings.email_verification.close_modal';\nconst I18nHeadline = 'strava.settings.email_verification.headline';\nconst I18nPrompt = 'strava.settings.email_verification.prompt_html';\nconst I18nResendEmail = 'strava.settings.email_verification.resend_email_cta';\nconst I18nWrongEmail = 'strava.settings.email_verification.wrong_email_html';\n\nconst UrlResendVerificationEmail = '/athlete/resend_email';\nconst UrlChangeEmail = '/settings/email_change';\n\nclass EmailVerificationCTA extends React.Component {\n state = {\n modalIsOpen: false,\n resendEmailInProgress: false\n };\n\n componentDidMount() {\n if (this.props.resendOnMount) {\n this.resendEmail();\n }\n }\n\n /**\n * resendEmail will attempt to send another verification email to the athlete\n * and pop the success modal.\n *\n * - there is a lock around the operation.\n * - if the request fails the lock is removed but the modal is not popped\n */\n resendEmail = () => {\n const { resendEmailInProgress } = this.state;\n\n if (resendEmailInProgress) return;\n this.setState({ resendEmailInProgress: true });\n createNetworkingClient()\n .post(UrlResendVerificationEmail)\n .then(() =>\n this.setState({ modalIsOpen: true, resendEmailInProgress: false })\n )\n .catch(() => {\n this.setState({ resendEmailInProgress: false });\n }); // set here instead of finally due to FF polyfill issue\n };\n\n closeModal = () => {\n this.setState({ modalIsOpen: false });\n };\n\n render() {\n const { modalIsOpen } = this.state;\n const { children, className, email, optionalExplanation } = this.props;\n\n const cta = children ? (\n \n ) : (\n \n {I18n.t(I18nResendEmail)}\n \n );\n\n return (\n <>\n {cta}\n \n
\n \n
\n \n
\n
\n

{I18n.t(I18nHeadline)}

\n {optionalExplanation && (\n

\n {optionalExplanation}\n

\n )}\n

\n {I18n.t_html(I18nPrompt, {\n pending_email: email,\n class_name: styles.emailText\n })}\n

\n
\n

\n {I18n.t_html(I18nWrongEmail, {\n email_settings_path: UrlChangeEmail\n })}\n

\n
\n
\n \n \n );\n }\n}\n\nEmailVerificationCTA.propTypes = {\n children: PropTypes.node,\n className: PropTypes.string,\n email: PropTypes.string.isRequired,\n resendOnMount: PropTypes.bool,\n optionalExplanation: PropTypes.string\n};\n\nEmailVerificationCTA.defaultProps = {\n children: null,\n className: '',\n resendOnMount: false,\n optionalExplanation: ''\n};\n\nexport default EmailVerificationCTA;\n","// extracted by mini-css-extract-plugin\nexport default {\"wrapper\":\"NotificationEmailVerificationCTA--wrapper--oW7Ds\",\"text-caption\":\"NotificationEmailVerificationCTA--text-caption--maR6G\",\"textCaption\":\"NotificationEmailVerificationCTA--text-caption--maR6G\"};","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport EmailVerificationCTA from 'components/EmailVerificationCTA';\n\nimport styles from './index.scss';\n\nfunction NotificationEmailVerificationCTA({ className, email, iconURL, text }) {\n return (\n \n \n
{text}
\n \n );\n}\n\nNotificationEmailVerificationCTA.propTypes = {\n className: PropTypes.string,\n email: PropTypes.string.isRequired,\n iconURL: PropTypes.string.isRequired,\n text: PropTypes.string.isRequired\n};\n\nNotificationEmailVerificationCTA.defaultProps = {\n className: ''\n};\n\nexport default NotificationEmailVerificationCTA;\n","import React from 'react';\n\nconst FeedContext = React.createContext();\n// Context object accepts a displayName string property.\n// React DevTools uses this string to determine what to display for the context.\nFeedContext.displayName = 'FeedContext';\n\nexport function useFeedContext() {\n return React.useContext(FeedContext);\n}\n\nexport default FeedContext;\n","export const UPDATE_NUM_ENTRIES = 'UPDATE_LAST_ENTITY_TO_ENTER';\nexport const UPDATE_IS_RESTORING_SCROLL_POSITION =\n 'UPDATE_IS_RESTORING_SCROLL_POSITION';\nexport const TOGGLE_IS_ACTIVITY_VIDEO_MUTED = 'TOGGLE_IS_ACTIVITY_VIDEO_MUTED';\n\nexport default {\n UPDATE_NUM_ENTRIES,\n UPDATE_IS_RESTORING_SCROLL_POSITION,\n TOGGLE_IS_ACTIVITY_VIDEO_MUTED\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"card\":\"Feed--card--hCBTv\",\"card-image-top\":\"Feed--card-image-top--52BdF\",\"cardImageTop\":\"Feed--card-image-top--52BdF\",\"card-block\":\"Feed--card-block--YcAda\",\"cardBlock\":\"Feed--card-block--YcAda\",\"card-header\":\"Feed--card-header--UPL0t\",\"cardHeader\":\"Feed--card-header--UPL0t\",\"card-body\":\"Feed--card-body--shfRq\",\"cardBody\":\"Feed--card-body--shfRq\",\"card-footer\":\"Feed--card-footer--NgI8R\",\"cardFooter\":\"Feed--card-footer--NgI8R\",\"card-icon\":\"Feed--card-icon--RBqGF\",\"cardIcon\":\"Feed--card-icon--RBqGF\",\"app-icon-wrapper\":\"Feed--app-icon-wrapper--FAPpa\",\"appIconWrapper\":\"Feed--app-icon-wrapper--FAPpa\",\"media\":\"Feed--media--rK+x1\",\"media-content\":\"Feed--media-content--xjZrS\",\"mediaContent\":\"Feed--media-content--xjZrS\",\"media-body\":\"Feed--media-body--yZWDa\",\"mediaBody\":\"Feed--media-body--yZWDa\",\"media-object\":\"Feed--media-object--iSRe6\",\"mediaObject\":\"Feed--media-object--iSRe6\",\"media-left\":\"Feed--media-left--tXoX6\",\"mediaLeft\":\"Feed--media-left--tXoX6\",\"media-object-left\":\"Feed--media-object-left--Dyw+y\",\"mediaObjectLeft\":\"Feed--media-object-left--Dyw+y\",\"media-object-right\":\"Feed--media-object-right--c+59F\",\"mediaObjectRight\":\"Feed--media-object-right--c+59F\",\"media-right\":\"Feed--media-right--RaY-k\",\"mediaRight\":\"Feed--media-right--RaY-k\",\"media-actions\":\"Feed--media-actions--9uUeU\",\"mediaActions\":\"Feed--media-actions--9uUeU\",\"media-center\":\"Feed--media-center--qUp+l\",\"mediaCenter\":\"Feed--media-center--qUp+l\",\"media-middle\":\"Feed--media-middle--AdjBH\",\"mediaMiddle\":\"Feed--media-middle--AdjBH\",\"media-bottom\":\"Feed--media-bottom--CrL4F\",\"mediaBottom\":\"Feed--media-bottom--CrL4F\",\"list-media\":\"Feed--list-media--68ISv\",\"listMedia\":\"Feed--list-media--68ISv\",\"comments\":\"Feed--comments--FXW9W\",\"comment\":\"Feed--comment--Okqn4\",\"thread\":\"Feed--thread--9b1gk\",\"feed-pagination\":\"Feed--feed-pagination--yh121\",\"feedPagination\":\"Feed--feed-pagination--yh121\",\"spinner\":\"Feed--spinner--db1n0\",\"no-entries\":\"Feed--no-entries--ARKOk\",\"noEntries\":\"Feed--no-entries--ARKOk\",\"entry-container\":\"Feed--entry-container--ntrEd\",\"entryContainer\":\"Feed--entry-container--ntrEd\",\"feed-entry\":\"Feed--feed-entry--RxVw3\",\"feedEntry\":\"Feed--feed-entry--RxVw3\",\"entry-inset\":\"Feed--entry-inset--mTSiN\",\"entryInset\":\"Feed--entry-inset--mTSiN\",\"entry-header\":\"Feed--entry-header--L-jpF\",\"entryHeader\":\"Feed--entry-header--L-jpF\",\"entry-body\":\"Feed--entry-body--5b+dm\",\"entryBody\":\"Feed--entry-body--5b+dm\",\"entry-media\":\"Feed--entry-media--FIN-7\",\"entryMedia\":\"Feed--entry-media--FIN-7\",\"entry-footer\":\"Feed--entry-footer--xXEx0\",\"entryFooter\":\"Feed--entry-footer--xXEx0\",\"entry-block\":\"Feed--entry-block--ms6sN\",\"entryBlock\":\"Feed--entry-block--ms6sN\",\"avatar\":\"Feed--avatar--o4Way\",\"avatar-img\":\"Feed--avatar-img--s3Sfc\",\"avatarImg\":\"Feed--avatar-img--s3Sfc\",\"card-margin\":\"Feed--card-margin--NEIB1\",\"cardMargin\":\"Feed--card-margin--NEIB1\",\"btn\":\"Feed--btn--rHBmM\",\"btn-link\":\"Feed--btn-link--jLpej\",\"btnLink\":\"Feed--btn-link--jLpej\",\"fadeIn\":\"Feed--fadeIn--ydtkj\",\"newKudo\":\"Feed--newKudo--vafgE\",\"enterFadeOut\":\"Feed--enterFadeOut--TDuu8\"};","// extracted by mini-css-extract-plugin\nexport default {\"entry-icon\":\"Activity--entry-icon--RlkFx\",\"entryIcon\":\"Activity--entry-icon--RlkFx\",\"activity-icon\":\"Activity--activity-icon--Z4Pej\",\"activityIcon\":\"Activity--activity-icon--Z4Pej\",\"entry-footer\":\"Activity--entry-footer--ncAnm\",\"entryFooter\":\"Activity--entry-footer--ncAnm\"};","// extracted by mini-css-extract-plugin\nexport default {\"activity-entry-container\":\"ActivityEntryBody--activity-entry-container--iYy-k\",\"activityEntryContainer\":\"ActivityEntryBody--activity-entry-container--iYy-k\",\"activity-name\":\"ActivityEntryBody--activity-name--AGMA5\",\"activityName\":\"ActivityEntryBody--activity-name--AGMA5\",\"description-body\":\"ActivityEntryBody--description-body--hbylJ\",\"descriptionBody\":\"ActivityEntryBody--description-body--hbylJ\",\"wrapper\":\"ActivityEntryBody--wrapper--kkT4-\",\"description-read-more\":\"ActivityEntryBody--description-read-more--9QA5l\",\"descriptionReadMore\":\"ActivityEntryBody--description-read-more--9QA5l\",\"stats\":\"ActivityEntryBody--stats--G90hq\",\"stat-label\":\"ActivityEntryBody--stat-label--47Ktd\",\"statLabel\":\"ActivityEntryBody--stat-label--47Ktd\",\"stat-value\":\"ActivityEntryBody--stat-value--A-j2-\",\"statValue\":\"ActivityEntryBody--stat-value--A-j2-\",\"stat\":\"ActivityEntryBody--stat--a2Yp6\",\"stat-text\":\"ActivityEntryBody--stat-text--iB8+e\",\"statText\":\"ActivityEntryBody--stat-text--iB8+e\",\"stat-subtext\":\"ActivityEntryBody--stat-subtext--Vo0Ha\",\"statSubtext\":\"ActivityEntryBody--stat-subtext--Vo0Ha\",\"text-right\":\"ActivityEntryBody--text-right--89j0P\",\"textRight\":\"ActivityEntryBody--text-right--89j0P\",\"app-icon-wrapper\":\"ActivityEntryBody--app-icon-wrapper--oIZvr\",\"appIconWrapper\":\"ActivityEntryBody--app-icon-wrapper--oIZvr\",\"achievements-trophy\":\"ActivityEntryBody--achievements-trophy--8Xvo3\",\"achievementsTrophy\":\"ActivityEntryBody--achievements-trophy--8Xvo3\",\"count\":\"ActivityEntryBody--count--xCez9\",\"achievements-summary\":\"ActivityEntryBody--achievements-summary--bsU2g\",\"achievementsSummary\":\"ActivityEntryBody--achievements-summary--bsU2g\",\"achievements-link\":\"ActivityEntryBody--achievements-link--CZvjJ\",\"achievementsLink\":\"ActivityEntryBody--achievements-link--CZvjJ\",\"performance-goals-more\":\"ActivityEntryBody--performance-goals-more--K47xr\",\"performanceGoalsMore\":\"ActivityEntryBody--performance-goals-more--K47xr\",\"list-stats\":\"ActivityEntryBody--list-stats--jzcv5\",\"listStats\":\"ActivityEntryBody--list-stats--jzcv5\"};","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Markup } from 'interweave';\nimport I18n from 'utils/I18n';\n\nimport styles from '../index.scss';\nimport { powerAndSegmentGoalAchievementsProps } from '../../../../props/feed-prop-types';\n\nconst PowerAndSegmentGoalAchievements = ({\n powerAndSegmentGoalAchievements,\n activityId\n}) => (\n <>\n {powerAndSegmentGoalAchievements.length > 0 && (\n
  • \n \n {powerAndSegmentGoalAchievements[0].description}\n \n {powerAndSegmentGoalAchievements.length > 1 && (\n \n \n
  • \n )}\n \n )}\n \n);\n\nPowerAndSegmentGoalAchievements.propTypes = {\n powerAndSegmentGoalAchievements: powerAndSegmentGoalAchievementsProps,\n activityId: PropTypes.string.isRequired\n};\n\nPowerAndSegmentGoalAchievements.defaultProps = {\n powerAndSegmentGoalAchievements: []\n};\n\nexport default PowerAndSegmentGoalAchievements;\n","import React from 'react';\nimport { Markup } from 'interweave';\n\nimport styles from '../index.scss';\nimport { segAndBestEffortAchievementsProps } from '../../../../props/feed-prop-types';\n\nconst FeaturedBestEffortAchievements = ({ segAndBestEffortAchievements }) => {\n // Display the first two featured best effort achievements\n return segAndBestEffortAchievements\n .filter((elem) => elem && elem.featured && !elem.hidden)\n .slice(0, 2)\n .map((achievement) => {\n const entry = [];\n if (!achievement.distance_based_best_effort) {\n entry.push(\n \n {achievement.name}\n \n );\n }\n entry.push(\n
    \n \n {achievement.description}\n \n \n \n \n
    \n );\n\n return (\n \n {entry}\n \n );\n });\n};\n\nFeaturedBestEffortAchievements.propTypes = {\n segAndBestEffortAchievements: segAndBestEffortAchievementsProps\n};\n\nFeaturedBestEffortAchievements.defaultProps = {\n segAndBestEffortAchievements: []\n};\n\nexport default FeaturedBestEffortAchievements;\n","import React from 'react';\nimport { chunk } from 'lodash-es';\nimport { Markup } from 'interweave';\nimport Stats from '@strava/ui/Stats';\nimport Stat from '@strava/ui/Stat';\nimport styles from '../index.scss';\nimport { statsProps } from '../../../../props/feed-prop-types';\n\nconst ActivityStats = ({ stats }) => (\n \n {chunk(stats, 2).map((stat) => {\n return (\n }\n labelClassName={styles.statLabel}\n label={stat[1].value}\n key={stat[1].value}\n />\n );\n })}\n \n);\n\nActivityStats.propTypes = {\n stats: statsProps\n};\n\nActivityStats.defaultProps = {\n stats: []\n};\n\nexport default ActivityStats;\n","import React from 'react';\nimport I18n from 'utils/I18n';\nimport SvgAchievementsTrophyNormalSmall from '@strava/icons/AchievementsTrophyNormalSmall';\nimport Button from '@strava/ui/Button';\nimport PropTypes from 'prop-types';\nimport Cldr from 'utils/Cldr';\nimport { segAndBestEffortAchievementsProps } from '../../../../props/feed-prop-types';\n\nimport styles from '../index.scss';\nimport { useFeedEntityContext } from '../../../../state/FeedEntityContext';\nimport { OPEN_MODAL_ACHIEVEMENTS_TAB } from '../../../../state/feed-entity-actions';\n\n// Segment Effort And Best Effort Achievements Count\nconst AchievementCount = ({ segAndBestEffortAchievements, entityId }) => {\n const { dispatch } = useFeedEntityContext();\n\n return (\n \n
    \n {I18n.t('components.feed.social.achievements')}\n
    \n
    \n \n dispatch({\n type: OPEN_MODAL_ACHIEVEMENTS_TAB,\n payload: {\n element: 'achievements_trophy',\n selectedEntityId: entityId\n }\n })\n }\n >\n \n \n \n \n {Cldr.formatDecimal(segAndBestEffortAchievements.length)}\n \n \n
    \n
    \n );\n};\n\nAchievementCount.propTypes = {\n segAndBestEffortAchievements: segAndBestEffortAchievementsProps,\n entityId: PropTypes.string.isRequired\n};\n\nAchievementCount.defaultProps = {\n segAndBestEffortAchievements: []\n};\n\nexport default AchievementCount;\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport ActionsFlagHighlightedXsmall from '@strava/icons/ActionsFlagHighlightedXsmall';\nimport Button from '@strava/ui/Button';\nimport colors from '@strava/ui/colors';\nimport { Markup } from 'interweave';\nimport { useFeedEntityContext } from '../../../../state/FeedEntityContext';\n\nimport styles from '../index.scss';\n\nconst ELLIPSIS = '•••';\nconst MAX_LENGTH = 350;\n\nconst ActivityTextBody = ({\n activityId,\n activityName,\n ownedByCurrentAthlete,\n flagged,\n description\n}) => {\n const { entityState } = useFeedEntityContext();\n const [readMore, setReadMore] = useState(false);\n\n const isExpandable = description && description.length > MAX_LENGTH;\n\n const splitDescription = (() => {\n if (description) {\n const cleanDescription = description.trim();\n\n if (cleanDescription.length < MAX_LENGTH) {\n return [cleanDescription, ''];\n }\n // trim the string to the maximum length\n let firstSection = cleanDescription.substr(0, MAX_LENGTH);\n // re-trim if we are in the middle of a word\n firstSection = firstSection.substr(\n 0,\n Math.min(firstSection.length, firstSection.lastIndexOf(' '))\n );\n // retrim if in the middle of a link\n if (\n firstSection.lastIndexOf('= 0 &&\n (!(firstSection.lastIndexOf('') > 0) ||\n firstSection.lastIndexOf('') < firstSection.lastIndexOf(' {\n const athleteId = e.target.href.match(/\\/([^/]+)$/)[1];\n entityState.trackAnalytics({\n action: 'click',\n element: 'mention',\n properties: {\n clicked_athlete_id: athleteId\n }\n });\n };\n\n /** This is a transform function for an Interweave Markup element.\n * It adds click tracking to mentions. https://interweave.dev/docs/\n * @returns {JSX.Element|undefined}\n */\n const addMentionClickTracking = (elem) => {\n if (elem.nodeName === 'A' && elem.className === 'mention') {\n return (\n \n {elem.innerText}\n \n );\n }\n\n // Don't modify the element.\n return undefined;\n };\n\n const content = readMore ? splitDescription.join('') : splitDescription[0];\n\n return (\n <>\n {/* Title Text */}\n

    \n {\n entityState.trackAnalytics({\n action: 'click',\n properties: { element_source: 'title' }\n });\n }}\n >\n {activityName}\n \n {ownedByCurrentAthlete && flagged && (\n \n \n \n )}\n

    \n\n {/* Activity Description */}\n {description && (\n
    \n \n \n
    \n {isExpandable && (\n
    \n {\n setReadMore(!readMore);\n }}\n >\n {ELLIPSIS}\n \n
    \n )}\n \n )}\n \n );\n};\n\nActivityTextBody.propTypes = {\n activityId: PropTypes.string.isRequired,\n activityName: PropTypes.string.isRequired,\n ownedByCurrentAthlete: PropTypes.bool,\n flagged: PropTypes.bool,\n description: PropTypes.string\n};\n\nActivityTextBody.defaultProps = {\n ownedByCurrentAthlete: false,\n flagged: false,\n description: PropTypes.string\n};\n\nexport default ActivityTextBody;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport I18n from 'utils/I18n';\n\nconst ACTIVITY_LIST = [\n 'ebikeride',\n 'ride',\n 'run',\n 'swim',\n 'virtualrun',\n 'virtualride'\n];\n\n// 4/26 - On web, 3 types of cumulative goals can be set from the athletes profile\n// Swim, Run, Ride - time and distance\n// (eg of cumulative goal achievement- Strava Athlete accomplished their swimming goal)\nconst CumulativeGoalAchievement = ({\n cumulativeGoalAchievement,\n sportType,\n athleteFirstName\n}) => {\n // Generate translation key for achievement summary - cumulative goal\n const displayKey = (() => {\n const prefix =\n 'components.feed.activity_goal_accomplished.goal_accomplished.without_popup';\n const lowercaseType = sportType.toLowerCase();\n return `${prefix}.${lowercaseType}.neutral_html`;\n })();\n\n return (\n <>\n {cumulativeGoalAchievement &&\n ACTIVITY_LIST.includes(sportType.toLowerCase()) && (\n
  • \n {I18n.t(displayKey, {\n athlete: athleteFirstName\n })}\n
  • \n )}\n \n );\n};\n\nCumulativeGoalAchievement.propTypes = {\n cumulativeGoalAchievement: PropTypes.shape({\n activityType: PropTypes.string,\n amount: PropTypes.string\n }),\n sportType: PropTypes.string,\n athleteFirstName: PropTypes.string\n};\n\nCumulativeGoalAchievement.defaultProps = {\n cumulativeGoalAchievement: null,\n sportType: '',\n athleteFirstName: ''\n};\n\nexport default CumulativeGoalAchievement;\n","// extracted by mini-css-extract-plugin\nexport default {\"media\":\"Media--media--K1ODc\",\"media-center\":\"Media--media-center--ZqXuB\",\"mediaCenter\":\"Media--media-center--ZqXuB\"};","import React from 'react';\nimport PropTypes from 'prop-types';\nimport styles from './media.scss';\n\nconst Media = ({ children, centered, className, ...options }) => {\n const classNames = [styles.media];\n if (centered) {\n classNames.push(styles.mediaCenter);\n }\n if (className) {\n classNames.push(className);\n }\n\n return (\n
    \n {children}\n
    \n );\n};\n\nMedia.propTypes = {\n children: PropTypes.node.isRequired,\n centered: PropTypes.bool,\n className: PropTypes.string\n};\n\nMedia.defaultProps = {\n centered: false,\n className: null\n};\n\nexport default Media;\n","// extracted by mini-css-extract-plugin\nexport default {\"media-body\":\"MediaBody--media-body--uT-hq\",\"mediaBody\":\"MediaBody--media-body--uT-hq\"};","import React from 'react';\nimport PropTypes from 'prop-types';\nimport styles from './media-body.scss';\n\nconst MediaBody = ({ children, className, ...options }) => {\n const classNames = [styles.mediaBody];\n if (className) {\n classNames.push(className);\n }\n\n return (\n
    \n {children}\n
    \n );\n};\n\nMediaBody.propTypes = {\n children: PropTypes.node.isRequired,\n className: PropTypes.string\n};\n\nMediaBody.defaultProps = {\n className: null\n};\n\nexport default MediaBody;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { isEmpty } from 'lodash-es';\nimport PowerAndSegmentGoalAchievements from './PowerAndSegmentGoalAchievements';\nimport FeaturedSegmentEffortAndBestEffortAchievements from './FeaturedSegmentEffortAndBestEffortAchievements';\nimport ActivityStats from './ActivityStats';\nimport AchievementCount from './AchievementCount';\nimport ActivityTextBody from './ActivityTextBody';\nimport CumulativeGoalAchievement from './CumulativeGoalAchievement';\nimport {\n powerAndSegmentGoalAchievementsProps,\n segAndBestEffortAchievementsProps,\n statsProps,\n cumulativeGoalAchievementProps\n} from '../../../props/feed-prop-types';\n\nimport styles from './index.scss';\nimport Media from '../media/Media';\nimport MediaBody from '../media/MediaBody';\n\nconst ActivityEntryBody = ({\n activityName,\n activityId,\n ownedByCurrentAthlete,\n flagged,\n description,\n stats,\n segAndBestEffortAchievements,\n powerAndSegmentGoalAchievements,\n cumulativeGoalAchievement,\n sportType,\n athleteFirstName\n}) => {\n return (\n \n {/* Header and Description */}\n \n\n {/* Activity Stats */}\n \n \n \n \n\n {/* Segment Effort And Best Effort Achievements Count */}\n {segAndBestEffortAchievements.length > 0 && (\n \n )}\n \n\n {/* Achievements Summary */}\n \n {/* Power-Goal and Segment-Goal Achievements\n eg. \n - Accomplished a goal of 9:00 on South Pearl Street << Segment-Goal\n - Accomplished a goal of 1W for 5 seconds (309 W) << Power-Goal\n */}\n {!isEmpty(powerAndSegmentGoalAchievements) && (\n \n )}\n\n {/* Cumulative Goal Achievement - (eg. Strava Athlete accomplished his swimming goal) */}\n {!isEmpty(cumulativeGoalAchievement) && (\n \n )}\n\n {/* Featured Segment Effort and Best Effort Achievements \n eg. \n - Bridge to Bridge N on Platte to Lee Gulch PR (4:08)\n - anti-clockwise loop around the lake CR (10:43)\n */}\n {!isEmpty(segAndBestEffortAchievements) && (\n \n )}\n \n \n );\n};\n\nActivityEntryBody.propTypes = {\n activityId: PropTypes.string.isRequired,\n activityName: PropTypes.string.isRequired,\n ownedByCurrentAthlete: PropTypes.bool,\n flagged: PropTypes.bool,\n description: PropTypes.string,\n anchor_container_click_data: PropTypes.shape({\n self: PropTypes.string\n }),\n stats: statsProps,\n segAndBestEffortAchievements: segAndBestEffortAchievementsProps,\n powerAndSegmentGoalAchievements: powerAndSegmentGoalAchievementsProps,\n cumulativeGoalAchievement: cumulativeGoalAchievementProps,\n sportType: PropTypes.string.isRequired,\n athleteFirstName: PropTypes.string\n};\n\nActivityEntryBody.defaultProps = {\n ownedByCurrentAthlete: false,\n flagged: false,\n description: '',\n anchor_container_click_data: {},\n stats: [],\n segAndBestEffortAchievements: [],\n powerAndSegmentGoalAchievements: [],\n cumulativeGoalAchievement: {},\n athleteFirstName: ''\n};\n\nexport default ActivityEntryBody;\n","// extracted by mini-css-extract-plugin\nexport default {\"map-vis-prompt\":\"MapVisPrompt--map-vis-prompt--Tec+5\",\"mapVisPrompt\":\"MapVisPrompt--map-vis-prompt--Tec+5\",\"description\":\"MapVisPrompt--description--lTuzI\",\"button\":\"MapVisPrompt--button--5WSed\"};","import { useCallback, useEffect, useRef } from 'react';\nimport { isNil, snakeCase } from 'lodash-es';\n\nimport { trackV2 } from 'utils/analytics';\nimport { devLog } from 'utils/dev-utils';\nimport { FEED_ENTRY_TYPES } from '../constants';\nimport { useFeedContext } from '../state/FeedContext';\n\nconst useFeedAnalytics = ({\n page,\n entity,\n entityId,\n athleteProfileId,\n feedType,\n index,\n clubId,\n viewingAthleteId,\n activityIds,\n element = null,\n properties,\n inView\n}) => {\n if (isNil(inView)) {\n devLog(\n `useIntersectionObserver#inView is required for analytics tracking. entity - ${entity}`\n );\n }\n\n const { entityState } = useFeedContext() || {\n entityState: { isRestoringScrollPosition: false }\n };\n\n const { isRestoringScrollPosition } = entityState;\n /**\n * Top-level {properties} - These belong to the main feed card entries eg. Activity, Post,\n * ChallengeJoin, GroupActivity etc...\n *\n * These values are shared with all the children elements eg Map inside of Activity will automatically have\n * these values.\n */\n const parentLevelProperties = (() => {\n const entityName = snakeCase(entity);\n const inGroup = entityName === FEED_ENTRY_TYPES.groupActivity;\n const source =\n feedType === 'club' && page === 'club' ? 'club_detail' : feedType;\n const hash = {\n in_group: inGroup,\n source,\n viewing_athlete_id: viewingAthleteId,\n rank: index + 1,\n entity_id: entityId\n };\n if (feedType === 'club' || feedType === 'clubs_feed') {\n hash.club_id = clubId;\n }\n if (feedType === 'profile') {\n hash.profile_athlete = athleteProfileId;\n }\n if (entityName === FEED_ENTRY_TYPES.activity) {\n hash.activity_id = entityId;\n }\n if (entityName === FEED_ENTRY_TYPES.post) {\n hash.post_id = entityId;\n }\n if (entityName === FEED_ENTRY_TYPES.club) {\n hash.club_id = entityId;\n }\n if (entityName === FEED_ENTRY_TYPES.challenge) {\n hash.challenge_id = entityId;\n }\n if (entityName === FEED_ENTRY_TYPES.groupActivity) {\n hash.headline_activity_id = entityId;\n hash.group_activity_ids = activityIds;\n }\n if (\n entityName === FEED_ENTRY_TYPES.fancyPromo ||\n entityName === FEED_ENTRY_TYPES.simplePromo\n ) {\n // note: promos do not have entity id and instead are using trackable id as a unique identifier (also see Feed.js)\n hash.trackable_id = entityId;\n }\n if (entityName === FEED_ENTRY_TYPES.performanceGoalCreated) {\n hash.performance_goal_id = entityId;\n }\n return { ...hash, ...properties };\n })();\n\n /**\n * Function used by all feed components to track analytics.\n * When an element uses this function, all the props defined by its parent will\n * automatically be tracked on top of the element specific props.\n */\n const trackAnalytics = useCallback(\n (childElementFields) => {\n const feedAnalyticsCommonFields = {\n category: 'feed',\n page: snakeCase(entity)\n };\n trackV2({\n ...feedAnalyticsCommonFields,\n ...childElementFields,\n properties: {\n ...parentLevelProperties,\n ...childElementFields.properties\n }\n });\n },\n [entity, parentLevelProperties]\n );\n\n // only report inView status for any re-renders after the initial\n // component mount\n const isFirstRenderRef = useRef(true);\n\n // report screen enter/exit when the inView status of an entry changes\n useEffect(() => {\n if (!isFirstRenderRef.current) {\n if (!isRestoringScrollPosition) {\n // do not track analytics during scroll position restoration\n trackAnalytics({\n element,\n action: inView ? 'screen_enter' : 'screen_exit'\n });\n }\n } else {\n // component has now been mounted. Any changes to inViewStatus will now\n // log enter/exit analytics events\n isFirstRenderRef.current = false;\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [inView, entityId, element]);\n\n return {\n isFirstRenderRef,\n trackAnalytics\n };\n};\n\nexport default useFeedAnalytics;\n","import { isNil } from 'lodash-es';\nimport createNetworkingClient from 'utils/networking-client';\nimport { devLog } from 'utils/dev-utils';\nimport { useCallback } from 'react';\n\nimport { useFeedContext } from '../state/FeedContext';\n\nconst client = createNetworkingClient();\n\nconst cache = [];\n\nconst useFeedRitmoCapping = () => {\n const { entityState } = useFeedContext() || {\n entityState: {\n isRestoringScrollPosition: false\n }\n };\n const { isRestoringScrollPosition } = entityState;\n\n const errorState = (e) => {\n devLog(e);\n // TODO remove devLog and instead log error in sentry [monorepo]\n };\n\n const updateRitmo = useCallback(\n ({ elementId, path, promo, inView = true }) => {\n // do not track impressions for elements that are not in view and during feed scroll position restoration\n if (!inView || isRestoringScrollPosition) {\n return;\n }\n\n if (isNil(promo)) {\n errorState(new Error('promo name is required'));\n return;\n }\n if (isNil(elementId)) {\n errorState(new Error('element id is required'));\n return;\n }\n if (isNil(path)) {\n errorState(new Error('impression path is required'));\n return;\n }\n\n const key = `${promo}-${elementId}`;\n if (cache.includes(key)) {\n return;\n }\n\n client\n .post(path, {\n promo\n })\n .then((response) => {\n if (response.status === 200) {\n cache.push(key);\n } else {\n errorState(response.error);\n }\n })\n .catch((e) => {\n errorState(e);\n });\n },\n [isRestoringScrollPosition]\n );\n\n return { updateRitmo, cache };\n};\n\nexport default useFeedRitmoCapping;\n","import { useEffect } from 'react';\nimport { useInView } from 'react-intersection-observer';\n\nimport { useFeedContext } from '../state/FeedContext';\n\nimport { UPDATE_NUM_ENTRIES } from '../state/feed-actions';\nimport { roundUpNearest10 } from '../utils';\n\nconst useFeedIntersectionObserver = ({ index, isParentFeedEntry }) => {\n // intersectionObserverRef is a tag placed on any feed entry to keep track of\n // its inView status\n const [intersectionObserverRef, inView] = useInView({\n threshold: 0.5 // same as android (50%)\n });\n\n const { dispatch: dispatchFeed } = useFeedContext() || { dispatch: () => {} }; // TODO remove dummy dispatch for feed without container\n\n useEffect(() => {\n if (isParentFeedEntry && inView) {\n dispatchFeed({\n type: UPDATE_NUM_ENTRIES,\n payload: { numEntries: roundUpNearest10(index) } // fetches extra rows on page load for scroll restoration\n });\n }\n }, [dispatchFeed, inView, index, isParentFeedEntry]);\n\n return {\n inView,\n intersectionObserverRef\n };\n};\n\nexport default useFeedIntersectionObserver;\n","import React, { useEffect } from 'react';\nimport PropTypes from 'prop-types';\n\nimport I18n from 'utils/I18n';\n\nimport ActivityDistanceNormalXsmall from '@strava/icons/ActivityDistanceNormalXsmall';\nimport Button from '@strava/ui/Button';\nimport styles from './index.scss';\nimport useFeedAnalytics from '../../../hooks/useFeedAnalytics';\nimport useFeedRitmoCapping from '../../../hooks/useFeedRitmoCapping';\nimport { useFeedEntityContext } from '../../../state/FeedEntityContext';\nimport useFeedIntersectionObserver from '../../../hooks/useFeedIntersectionObserver';\n\nfunction MapVisPrompt({ hideAnywhereSetting, paths, experimentVar, entityId }) {\n const units = I18n.measurementUnits();\n const i18nPrefix = `components.feed.map_vis_prompt.${hideAnywhereSetting}.`;\n const { analyticProps } = useFeedEntityContext();\n\n const { inView, intersectionObserverRef } = useFeedIntersectionObserver({\n isParentFeedEntry: false\n });\n\n const { updateRitmo } = useFeedRitmoCapping();\n\n const analyticsProperties = {\n cta:\n experimentVar === 'variant-a'\n ? 'hide_start_end_opt_in'\n : 'hide_start_end_opt_out',\n hide_anywhere: hideAnywhereSetting\n };\n const { trackAnalytics } = useFeedAnalytics({\n ...analyticProps,\n inView,\n element: 'map_visibility_activity_row_prompt',\n properties: analyticsProperties\n });\n\n useEffect(() => {\n updateRitmo({\n elementId: entityId,\n path: paths.promptImpression,\n promo: 'map_visibility_row_reinforcement_impression',\n inView\n });\n }, [entityId, inView, paths.promptImpression, updateRitmo]);\n\n const onButtonClick = () => {\n trackAnalytics({\n action: 'click',\n element: 'map_visibility_activity_row_prompt'\n });\n\n updateRitmo({\n path: paths.promptImpression,\n promo: 'map_visibility_row_reinforcement_dismissed',\n elementId: entityId\n });\n window.location.href = paths.hideAnywhere;\n };\n\n return (\n
    \n
    \n \n
    \n \n {hideAnywhereSetting === 'meters_200'\n ? I18n.t(`${i18nPrefix}description_${units}`)\n : I18n.t(`${i18nPrefix}description`)}\n
    \n \n {I18n.t(`${i18nPrefix}button`)}\n \n \n );\n}\n\nMapVisPrompt.propTypes = {\n hideAnywhereSetting: PropTypes.string.isRequired,\n paths: PropTypes.shape({\n promptImpression: PropTypes.string,\n hideAnywhere: PropTypes.string\n }).isRequired,\n experimentVar: PropTypes.string.isRequired,\n entityId: PropTypes.string.isRequired\n};\n\nexport default MapVisPrompt;\n","// extracted by mini-css-extract-plugin\nexport default {\"achievement-celebration\":\"MaharajAchievementCelebration--achievement-celebration--ouMf5\",\"achievementCelebration\":\"MaharajAchievementCelebration--achievement-celebration--ouMf5\",\"celebration-badge\":\"MaharajAchievementCelebration--celebration-badge--Dztz6\",\"celebrationBadge\":\"MaharajAchievementCelebration--celebration-badge--Dztz6\",\"celebration-text\":\"MaharajAchievementCelebration--celebration-text--YUrk+\",\"celebrationText\":\"MaharajAchievementCelebration--celebration-text--YUrk+\",\"celebration-title\":\"MaharajAchievementCelebration--celebration-title--HsvSA\",\"celebrationTitle\":\"MaharajAchievementCelebration--celebration-title--HsvSA\",\"celebration-subtitle\":\"MaharajAchievementCelebration--celebration-subtitle--oMTlO\",\"celebrationSubtitle\":\"MaharajAchievementCelebration--celebration-subtitle--oMTlO\"};","import React from 'react';\nimport PropTypes from 'prop-types';\nimport ClampLines from 'react-clamp-lines';\nimport styles from './index.scss';\n\n// This is for Maharaj achievements only - https://github.com/strava/maharaj\nconst AchievementCelebration = ({\n url,\n text,\n subtitle,\n image,\n image_caption: imageCaption\n}) => (\n \n
    \n \n
    \n
    \n
    \n \n \n \n
    \n {subtitle && (\n \n \n
    \n )}\n \n \n);\n\nAchievementCelebration.propTypes = {\n url: PropTypes.string,\n text: PropTypes.string,\n subtitle: PropTypes.string,\n image: PropTypes.string,\n image_caption: PropTypes.string\n};\n\nAchievementCelebration.defaultProps = {\n url: '',\n text: '',\n subtitle: null,\n image: '',\n image_caption: ''\n};\n\nexport default AchievementCelebration;\n","// extracted by mini-css-extract-plugin\nexport default {\"card\":\"PhotosAndMapImage--card--cHfDm\",\"card-image-top\":\"PhotosAndMapImage--card-image-top--EpA+Q\",\"cardImageTop\":\"PhotosAndMapImage--card-image-top--EpA+Q\",\"card-block\":\"PhotosAndMapImage--card-block--XYMNg\",\"cardBlock\":\"PhotosAndMapImage--card-block--XYMNg\",\"card-header\":\"PhotosAndMapImage--card-header--R5uxw\",\"cardHeader\":\"PhotosAndMapImage--card-header--R5uxw\",\"card-body\":\"PhotosAndMapImage--card-body---Uak8\",\"cardBody\":\"PhotosAndMapImage--card-body---Uak8\",\"card-footer\":\"PhotosAndMapImage--card-footer--JFcoD\",\"cardFooter\":\"PhotosAndMapImage--card-footer--JFcoD\",\"card-icon\":\"PhotosAndMapImage--card-icon--UGfkb\",\"cardIcon\":\"PhotosAndMapImage--card-icon--UGfkb\",\"app-icon-wrapper\":\"PhotosAndMapImage--app-icon-wrapper--HtRQS\",\"appIconWrapper\":\"PhotosAndMapImage--app-icon-wrapper--HtRQS\",\"media\":\"PhotosAndMapImage--media--tPwp-\",\"media-content\":\"PhotosAndMapImage--media-content--BjUJT\",\"mediaContent\":\"PhotosAndMapImage--media-content--BjUJT\",\"media-body\":\"PhotosAndMapImage--media-body--6fUuR\",\"mediaBody\":\"PhotosAndMapImage--media-body--6fUuR\",\"media-object\":\"PhotosAndMapImage--media-object--fJNAs\",\"mediaObject\":\"PhotosAndMapImage--media-object--fJNAs\",\"media-left\":\"PhotosAndMapImage--media-left--AJ-KG\",\"mediaLeft\":\"PhotosAndMapImage--media-left--AJ-KG\",\"media-object-left\":\"PhotosAndMapImage--media-object-left--LJM+5\",\"mediaObjectLeft\":\"PhotosAndMapImage--media-object-left--LJM+5\",\"media-object-right\":\"PhotosAndMapImage--media-object-right--gZR1x\",\"mediaObjectRight\":\"PhotosAndMapImage--media-object-right--gZR1x\",\"media-right\":\"PhotosAndMapImage--media-right--HRjox\",\"mediaRight\":\"PhotosAndMapImage--media-right--HRjox\",\"media-actions\":\"PhotosAndMapImage--media-actions--eKiLv\",\"mediaActions\":\"PhotosAndMapImage--media-actions--eKiLv\",\"media-center\":\"PhotosAndMapImage--media-center--VGPYl\",\"mediaCenter\":\"PhotosAndMapImage--media-center--VGPYl\",\"media-middle\":\"PhotosAndMapImage--media-middle--mdhY0\",\"mediaMiddle\":\"PhotosAndMapImage--media-middle--mdhY0\",\"media-bottom\":\"PhotosAndMapImage--media-bottom--ivzKB\",\"mediaBottom\":\"PhotosAndMapImage--media-bottom--ivzKB\",\"list-media\":\"PhotosAndMapImage--list-media--cY45I\",\"listMedia\":\"PhotosAndMapImage--list-media--cY45I\",\"comments\":\"PhotosAndMapImage--comments--nXwGg\",\"comment\":\"PhotosAndMapImage--comment--gcXRX\",\"thread\":\"PhotosAndMapImage--thread--2XcJL\",\"feed-pagination\":\"PhotosAndMapImage--feed-pagination--XTAnb\",\"feedPagination\":\"PhotosAndMapImage--feed-pagination--XTAnb\",\"spinner\":\"PhotosAndMapImage--spinner--t0Cq8\",\"no-entries\":\"PhotosAndMapImage--no-entries--1Pz-6\",\"noEntries\":\"PhotosAndMapImage--no-entries--1Pz-6\",\"entry-container\":\"PhotosAndMapImage--entry-container--9NDt+\",\"entryContainer\":\"PhotosAndMapImage--entry-container--9NDt+\",\"feed-entry\":\"PhotosAndMapImage--feed-entry--fOTiX\",\"feedEntry\":\"PhotosAndMapImage--feed-entry--fOTiX\",\"entry-inset\":\"PhotosAndMapImage--entry-inset--yYhOt\",\"entryInset\":\"PhotosAndMapImage--entry-inset--yYhOt\",\"entry-header\":\"PhotosAndMapImage--entry-header--jNt-F\",\"entryHeader\":\"PhotosAndMapImage--entry-header--jNt-F\",\"entry-body\":\"PhotosAndMapImage--entry-body--2+HrC\",\"entryBody\":\"PhotosAndMapImage--entry-body--2+HrC\",\"entry-media\":\"PhotosAndMapImage--entry-media--GTSjY\",\"entryMedia\":\"PhotosAndMapImage--entry-media--GTSjY\",\"entry-footer\":\"PhotosAndMapImage--entry-footer--tQUd4\",\"entryFooter\":\"PhotosAndMapImage--entry-footer--tQUd4\",\"entry-block\":\"PhotosAndMapImage--entry-block--shs+B\",\"entryBlock\":\"PhotosAndMapImage--entry-block--shs+B\",\"avatar\":\"PhotosAndMapImage--avatar--fNEC+\",\"avatar-img\":\"PhotosAndMapImage--avatar-img--JnCpU\",\"avatarImg\":\"PhotosAndMapImage--avatar-img--JnCpU\",\"card-margin\":\"PhotosAndMapImage--card-margin--qnjfg\",\"cardMargin\":\"PhotosAndMapImage--card-margin--qnjfg\",\"btn\":\"PhotosAndMapImage--btn--NLW+N\",\"btn-link\":\"PhotosAndMapImage--btn-link--RFl18\",\"btnLink\":\"PhotosAndMapImage--btn-link--RFl18\",\"photos-and-map-image-wrapper\":\"PhotosAndMapImage--photos-and-map-image-wrapper--Mtbkh\",\"photosAndMapImageWrapper\":\"PhotosAndMapImage--photos-and-map-image-wrapper--Mtbkh\",\"btn-sm\":\"PhotosAndMapImage--btn-sm--nGGKG\",\"btnSm\":\"PhotosAndMapImage--btn-sm--nGGKG\",\"text-bold\":\"PhotosAndMapImage--text-bold--7T7i-\",\"textBold\":\"PhotosAndMapImage--text-bold--7T7i-\",\"activity-map\":\"PhotosAndMapImage--activity-map--6fHiT\",\"activityMap\":\"PhotosAndMapImage--activity-map--6fHiT\",\"group-activity-map\":\"PhotosAndMapImage--group-activity-map--mIXxe\",\"groupActivityMap\":\"PhotosAndMapImage--group-activity-map--mIXxe\",\"activity-map-create-route\":\"PhotosAndMapImage--activity-map-create-route--Q1puz\",\"activityMapCreateRoute\":\"PhotosAndMapImage--activity-map-create-route--Q1puz\",\"activity-map-tags\":\"PhotosAndMapImage--activity-map-tags--8e7XC\",\"activityMapTags\":\"PhotosAndMapImage--activity-map-tags--8e7XC\",\"activity-map-tag\":\"PhotosAndMapImage--activity-map-tag--Rx4Mw\",\"activityMapTag\":\"PhotosAndMapImage--activity-map-tag--Rx4Mw\",\"tag-race\":\"PhotosAndMapImage--tag-race--Trdut\",\"tagRace\":\"PhotosAndMapImage--tag-race--Trdut\",\"entry-images\":\"PhotosAndMapImage--entry-images--M264M\",\"entryImages\":\"PhotosAndMapImage--entry-images--M264M\",\"entry-image\":\"PhotosAndMapImage--entry-image--NXygv\",\"entryImage\":\"PhotosAndMapImage--entry-image--NXygv\",\"entry-image-wrapper\":\"PhotosAndMapImage--entry-image-wrapper--LaoWz\",\"entryImageWrapper\":\"PhotosAndMapImage--entry-image-wrapper--LaoWz\",\"more-text-wrapper\":\"PhotosAndMapImage--more-text-wrapper--rer-7\",\"moreTextWrapper\":\"PhotosAndMapImage--more-text-wrapper--rer-7\",\"more-text\":\"PhotosAndMapImage--more-text--cbrtw\",\"moreText\":\"PhotosAndMapImage--more-text--cbrtw\",\"entry-more-images\":\"PhotosAndMapImage--entry-more-images--8M2Y9\",\"entryMoreImages\":\"PhotosAndMapImage--entry-more-images--8M2Y9\",\"images-1-up\":\"PhotosAndMapImage--images-1-up--VOA5w\",\"images1Up\":\"PhotosAndMapImage--images-1-up--VOA5w\",\"post-image\":\"PhotosAndMapImage--post-image--uAMtv\",\"postImage\":\"PhotosAndMapImage--post-image--uAMtv\",\"athlete-profile\":\"PhotosAndMapImage--athlete-profile--3yNxo\",\"athleteProfile\":\"PhotosAndMapImage--athlete-profile--3yNxo\",\"club\":\"PhotosAndMapImage--club--nMvTQ\",\"images-2-up\":\"PhotosAndMapImage--images-2-up---j1TK\",\"images2Up\":\"PhotosAndMapImage--images-2-up---j1TK\",\"images-3-up\":\"PhotosAndMapImage--images-3-up--gx8a3\",\"images3Up\":\"PhotosAndMapImage--images-3-up--gx8a3\",\"images-4-up\":\"PhotosAndMapImage--images-4-up--vEuad\",\"images4Up\":\"PhotosAndMapImage--images-4-up--vEuad\",\"images-5-up\":\"PhotosAndMapImage--images-5-up--LPz8g\",\"images5Up\":\"PhotosAndMapImage--images-5-up--LPz8g\",\"images-6-up\":\"PhotosAndMapImage--images-6-up--mmNvG\",\"images6Up\":\"PhotosAndMapImage--images-6-up--mmNvG\",\"enhanced-tag\":\"PhotosAndMapImage--enhanced-tag--5Spv9\",\"enhancedTag\":\"PhotosAndMapImage--enhanced-tag--5Spv9\",\"left\":\"PhotosAndMapImage--left--Sz8Ha\",\"fadeIn\":\"PhotosAndMapImage--fadeIn--MavlW\",\"newKudo\":\"PhotosAndMapImage--newKudo--u5q3H\",\"enterFadeOut\":\"PhotosAndMapImage--enterFadeOut--5IOp6\"};","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Button from '@strava/ui/Button';\nimport I18n from 'utils/I18n';\nimport styles from '../styles.scss';\nimport useFeedAnalytics from '../../../../hooks/useFeedAnalytics';\n\nimport { mapProps } from '../../../../props/feed-prop-types';\nimport { useFeedEntityContext } from '../../../../state/FeedEntityContext';\nimport useFeedIntersectionObserver from '../../../../hooks/useFeedIntersectionObserver';\n\nconst tag = (label, className) => (\n \n {I18n.t(label)}\n \n);\n\nconst buildActivityMapTags = ({\n isVirtual,\n isCommute,\n workoutType,\n privacyTagKey\n}) => {\n const tags = [];\n if (privacyTagKey) {\n tags.push(tag(`templates.feed.activity.tag.${privacyTagKey}`));\n }\n if (isVirtual) {\n tags.push(tag('templates.feed.activity.tag.virtual'));\n }\n if (isCommute) {\n tags.push(tag('templates.feed.activity.tag.commute'));\n }\n if (workoutType) {\n const className = workoutType === 'race' ? styles.tagRace : '';\n tags.push(tag(`templates.feed.activity.tag.${workoutType}`, className));\n }\n return tags;\n};\n\nconst Map = ({\n activityMap,\n isRoutable,\n activityId,\n entryTypeClassName,\n isVirtual,\n isCommute,\n isGroupActivity,\n workoutType,\n privacyTagKey\n}) => {\n const { entityState, analyticProps } = useFeedEntityContext() || {};\n const elements = [];\n\n const { inView, intersectionObserverRef } = useFeedIntersectionObserver({\n isParentFeedEntry: false\n });\n\n useFeedAnalytics({\n ...analyticProps,\n element: 'map',\n inView\n });\n\n // \"Try this route\" button on maps\n const handleRouteButtonClick = () => {\n entityState.trackAnalytics({\n action: 'click',\n element: 'try_route'\n });\n window.location.href = `/activities/${activityId}/route`;\n };\n\n // \"Try this Route\" button\n if (isRoutable) {\n elements.push(\n \n handleRouteButtonClick(activityId)}\n >\n {I18n.t('templates.feed.activity.try_route')}\n \n \n );\n }\n\n const alt =\n activityMap.alt ||\n (isGroupActivity\n ? I18n.t('templates.feed.activity.group_map_alt')\n : I18n.t('templates.feed.activity.map_alt'));\n\n // Map image\n elements.push(\n {\n entityState.trackAnalytics({\n action: 'click',\n element: 'map'\n });\n }}\n key=\"map\"\n href={`/activities/${activityId}`}\n >\n
    \n {buildActivityMapTags({\n isVirtual,\n isCommute,\n workoutType,\n privacyTagKey\n })}\n
    \n \n \n );\n return (\n \n
    {elements}
    \n \n );\n};\n\nMap.propTypes = {\n activityId: PropTypes.string.isRequired,\n isRoutable: PropTypes.bool.isRequired,\n activityMap: mapProps.isRequired,\n entryTypeClassName: PropTypes.oneOf([\n styles.activityMap,\n styles.groupActivityMap\n ]).isRequired,\n isVirtual: PropTypes.bool,\n isCommute: PropTypes.bool,\n isGroupActivity: PropTypes.bool,\n workoutType: PropTypes.oneOf(['race', 'long_run', 'workout']),\n privacyTagKey: PropTypes.string\n};\n\nMap.defaultProps = {\n workoutType: null,\n isVirtual: false,\n isCommute: false,\n isGroupActivity: false,\n privacyTagKey: null\n};\n\nexport default Map;\n","// extracted by mini-css-extract-plugin\nexport default {\"base\":\"VideoItem--base--jP8iK\",\"video\":\"VideoItem--video--ie0b5\"};","import React, { useEffect, useState, useRef } from 'react';\nimport PropTypes from 'prop-types';\nimport videojs from 'video.js';\nimport { useInView } from 'react-intersection-observer';\n\nimport cx from '@strava/ui/clsx';\n\nimport { useFeedContext } from '../../../../../state/FeedContext';\nimport { useFeedEntityContext } from '../../../../../state/FeedEntityContext';\n\nimport styles from './VideoItem.scss';\n\nconst Poc = React.lazy(() => import('components/Poc'));\nconst Controls = React.lazy(() => import('./Controls'));\n\nfunction VideoItem({\n media,\n className,\n onClick,\n onReady,\n playOnHover,\n isAutoPlayItem\n}) {\n const {\n entityState: { isActivityVideoMuted }\n } = useFeedContext();\n\n const {\n entityState: { isAutoplayEnabled }\n } = useFeedEntityContext();\n const [video, setVideo] = useState();\n const hoverTimerRef = useRef();\n\n function play() {\n clearTimeout(hoverTimerRef.current);\n\n hoverTimerRef.current = setTimeout(() => {\n // Pause all video that are currently playing\n videojs\n .getAllPlayers()\n .filter((p) => !p.paused() && p.id() !== video.id())\n .forEach((p) => p.pause());\n\n if (video && video.paused()) {\n video.play();\n }\n }, 500);\n }\n\n function pause() {\n clearTimeout(hoverTimerRef.current);\n hoverTimerRef.current = null;\n\n if (video && !video.paused()) {\n video.pause();\n }\n }\n\n const preload = (() => {\n if (isAutoPlayItem) {\n return 'auto';\n }\n if (isAutoplayEnabled) {\n return 'metadata';\n }\n return 'none';\n })();\n\n //\n // Handle resitting video to initial state when element exist the screen\n //\n const [inViewRef, inView] = useInView({ threshold: 0 });\n\n useEffect(() => {\n if (video && video.currentTime() !== 0 && !inView) {\n // Reset any played videos that are exiting the screen\n video.pause();\n video.currentTime(0);\n // Show poster image\n video.hasStarted(false);\n video.posterImage.show();\n }\n }, [video, inView]);\n\n return (\n {\n pause();\n onClick();\n }}\n onKeyPress={() => {\n pause();\n onClick();\n }}\n onMouseEnter={() => {\n if (!isAutoplayEnabled) return;\n if (!playOnHover) return;\n play();\n }}\n onMouseLeave={() => {\n if (!isAutoplayEnabled) return;\n if (!playOnHover) return;\n if (isAutoPlayItem) return;\n pause();\n }}\n role=\"button\"\n tabIndex=\"0\"\n >\n }>\n \n {\n setVideo(vid);\n onReady(vid);\n }}\n options={{\n controls: false,\n loop: true,\n muted: isActivityVideoMuted,\n preload\n }}\n className={styles.video}\n />\n \n \n );\n}\n\nVideoItem.defaultProps = {\n playOnHover: true,\n className: null,\n isAutoPlayItem: false,\n onClick: () => {},\n onReady: () => {}\n};\n\nVideoItem.propTypes = {\n media: PropTypes.shape({\n duration: PropTypes.number,\n photo_id: PropTypes.string,\n caption_escaped: PropTypes.string,\n owner_id: PropTypes.string\n }).isRequired,\n className: PropTypes.string,\n onClick: PropTypes.func,\n onReady: PropTypes.func,\n playOnHover: PropTypes.bool,\n isAutoPlayItem: PropTypes.bool\n};\n\nexport default VideoItem;\n","import React, { useState, useMemo } from 'react';\nimport PropTypes from 'prop-types';\n\nimport StravaMediaLightbox from 'components/StravaMediaLightbox';\n\nimport { photoListProps } from '../../../../props/feed-prop-types';\nimport { ADD_AUTOPLAY_VIDEO } from '../../../../state/feed-entity-actions';\nimport { useFeedEntityContext } from '../../../../state/FeedEntityContext';\nimport useFeedAnalytics from '../../../../hooks/useFeedAnalytics';\nimport useFeedIntersectionObserver from '../../../../hooks/useFeedIntersectionObserver';\n\nimport VideoItem from './VideoItem';\n\nimport styles from '../styles.scss';\n\n// photo image entries and their associated tags\nconst PhotoGrid = ({\n activityId,\n photoList,\n maxNumPhotosToShow,\n singleImageHighlighted,\n entryTypeClassName\n}) => {\n const { entityState, analyticProps, dispatch } = useFeedEntityContext();\n const { entityId, page, feedType } = analyticProps;\n const [params, setParams] = useState({\n isOpen: false,\n photoIndex: 0\n });\n\n const { inView, intersectionObserverRef } = useFeedIntersectionObserver({\n isParentFeedEntry: false\n });\n\n photoList.forEach((media, index) => {\n const orderIndex = `${index + 1}/${photoList.length}`;\n if (media.media_type === 1) {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useFeedAnalytics({\n ...analyticProps,\n element: 'image',\n inView,\n properties: {\n image_id: media.photo_id,\n has_description: media.caption_escaped.length > 0,\n order: orderIndex,\n activity_athlete_id: media.owner_id\n }\n });\n } else {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useFeedAnalytics({\n ...analyticProps,\n element: 'video',\n inView,\n properties: {\n video_id: media.photo_id,\n has_description: media.caption_escaped.length > 0,\n order: orderIndex,\n activity_athlete_id: media.owner_id\n }\n });\n }\n });\n\n const photoCount = photoList.length;\n const showPhotoLightbox = params.isOpen && photoCount > 0;\n\n const firstVideoId = useMemo(() => {\n // Skip item that's under the \"+3\" element aka more_images element as\n // we do not want to autoplay it when there are more then max number of\n // elements\n const maxNumVideoCanAutoplay =\n maxNumPhotosToShow < photoList.length\n ? maxNumPhotosToShow - 1\n : maxNumPhotosToShow;\n\n const filtered = photoList\n .slice(0, maxNumVideoCanAutoplay)\n .filter((p) => p?.media_type === 2)\n .map((p) => p.photo_id);\n\n return filtered.length > 0 ? filtered[0] : null;\n }, [photoList, maxNumPhotosToShow]);\n\n const snowplowMediaClickEvent = (index) => {\n const media = photoList[index];\n const isImage = media.media_type === 1;\n const orderIndex = `${index + 1}/${photoList.length}`;\n const properties = {\n has_description: media.caption_escaped.length > 0,\n order: orderIndex,\n activity_athlete_id: media.owner_id\n };\n if (isImage) {\n properties.image_id = media.photo_id;\n } else {\n properties.video_id = media.photo_id;\n properties.has_description = media.caption_escaped.length > 0;\n }\n entityState.trackAnalytics({\n action: 'click',\n element: media.media_type === 1 ? 'image' : 'video',\n properties\n });\n };\n\n const openLightBox = (index) => {\n snowplowMediaClickEvent(index);\n setParams({ isOpen: true, photoIndex: index });\n };\n\n const onMediaClick = (media) => {\n const data = {\n category: feedType,\n page,\n action: 'click',\n properties: {\n source: feedType,\n entity_id: entityId,\n entity_type: page,\n element_entity_type: media.media_type,\n element_entity_id: media.photo_id\n }\n };\n\n const isImage = media.media_type === 1;\n entityState.trackAnalytics({\n ...data,\n action: 'click',\n element: isImage ? 'photo' : 'video'\n });\n };\n\n const photoGrid = () => {\n const photoGridElements = [];\n if (singleImageHighlighted) {\n // Single image grid\n // Only the first photo (highlighted image) is displayed on posts\n // Image on posts do not open the lightbox\n const highlightedImageForPosts = photoList[0];\n photoGridElements.push(\n \n
    \n \n
    \n \n );\n } else {\n // Multiple photos grid\n photoGridElements.push(\n photoList.slice(0, maxNumPhotosToShow).map((photo, index) => {\n const { photo_id: photoId, large, caption_escaped: caption } = photo;\n\n if (photo?.media_type === 2) {\n return (\n {\n openLightBox(index);\n }}\n >\n {\n openLightBox(index);\n }}\n onReady={(video) => {\n if (photoId === firstVideoId) {\n dispatch({\n type: ADD_AUTOPLAY_VIDEO,\n payload: {\n autoPlayVideo: {\n [activityId]: video\n }\n }\n });\n }\n }}\n />\n \n );\n }\n // Photos\n return (\n \n openLightBox(index)}\n onKeyPress={() => openLightBox(index)}\n role=\"button\"\n tabIndex=\"0\"\n >\n {/* Enhanced Partner Tag */}\n {photo.showEnhancedTag && photo.enhanced_photo && (\n
    \n {photo.enhanced_photo.name}\n
    \n )}\n {caption}\n \n \n );\n })\n );\n // show count for more images eg. +5 indicating that there\n // are 5 more images uploaded by the athlete that are not being currently shown on the\n // photo grid.\n if (photoCount > maxNumPhotosToShow) {\n const extraPhotos = photoCount - maxNumPhotosToShow;\n photoGridElements.push(\n snowplowMediaClickEvent(maxNumPhotosToShow)}\n onKeyPress={() => snowplowMediaClickEvent(maxNumPhotosToShow)}\n role=\"button\"\n tabIndex=\"0\"\n ref={intersectionObserverRef}\n >\n
    \n
    \n
    {`+ ${extraPhotos}`}
    \n
    \n
    \n \n );\n }\n }\n // Add photo lightbox\n if (showPhotoLightbox) {\n photoGridElements.push(\n {\n onMediaClick(photoList[params.photoIndex]);\n }}\n onCloseRequest={() => {\n setParams({ isOpen: false });\n }}\n analyticProps={analyticProps}\n />\n );\n }\n\n return photoGridElements;\n };\n\n return photoGrid();\n};\n\nPhotoGrid.propTypes = {\n activityId: PropTypes.string,\n photoList: photoListProps.isRequired,\n maxNumPhotosToShow: PropTypes.number,\n singleImageHighlighted: PropTypes.bool,\n entryTypeClassName: PropTypes.oneOf([\n styles.activityMap,\n styles.groupActivityMap,\n styles.postImage\n ]).isRequired\n};\n\nPhotoGrid.defaultProps = {\n activityId: null,\n maxNumPhotosToShow: 1,\n singleImageHighlighted: false\n};\n\nexport default PhotoGrid;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { isEmpty, reject, isNil } from 'lodash-es';\n\nimport styles from './styles.scss';\n\nimport Map from './Map';\nimport PhotoGrid from './PhotoGrid';\nimport {\n mapProps,\n photoListProps,\n pageProps\n} from '../../../props/feed-prop-types';\n\n// Image entry types\nconst ACTIVITY = 'activity';\nconst GROUP_ACTIVITY = 'group_activity';\nconst POST = 'post';\n\n// Maximum # of photos allowed for each kind of entry (this does not include the map image)\nconst ACTIVITY_MAX_PHOTO_COUNT = 5;\nconst GROUP_ACTIVITY_MAX_PHOTO_COUNT = 4;\nconst POST_MAX_PHOTO_COUNT = 1;\n\n// Styling class for the container that houses all the image entries\n// Note: size count includes the activity map if its available\nconst imageEntriesContainerClass = ({\n entryType,\n totalNumEntryImages, // includes map image\n showMap\n}) => {\n if (entryType === ACTIVITY) {\n switch (totalNumEntryImages) {\n case 1:\n return styles.images1Up;\n case 2:\n return styles.images2Up;\n case 3:\n return styles.images3Up;\n case 4:\n return styles.images4Up;\n case 5:\n return styles.images5Up;\n case 6:\n return styles.images6Up;\n default:\n return styles.images6Up;\n }\n } else if (entryType === GROUP_ACTIVITY) {\n return showMap ? styles.images1Up : '';\n } else if (entryType === POST) {\n return styles.images1Up;\n }\n return '';\n};\n\nconst PhotosAndMapImage = ({\n entryType,\n activityId,\n activityMap,\n photoList,\n isRoutable,\n isVirtual,\n isCommute,\n workoutType,\n privacyTagKey,\n feedName\n}) => {\n const isGroupActivity = entryType === GROUP_ACTIVITY;\n const isPost = entryType === POST;\n\n // maps are shown for all entries except for posts\n const showMap = !isEmpty(activityMap) && !isPost;\n const showPhotoGrid = (() => {\n if (isGroupActivity && showMap) {\n // for group activities, photos will be ignored if they are provided together with the map image\n // this scenario should technically not happen in real life.\n // multiple PhotosAndMapImage are used for group activities - eg. one for headline image and then one for every\n // matched activity that has photos in it.\n return false;\n }\n return !isEmpty(photoList) && !isPost;\n })();\n const showPost = isPost && !isEmpty(photoList);\n\n // map image is included as the total number of images being displayed (this is used for activity type entries)\n const totalNumEntryImages = showMap ? photoList.length + 1 : photoList.length;\n\n // maximum number of images that can be displayed\n const maxNumPhotosToShow = (() => {\n switch (entryType) {\n case ACTIVITY:\n // allow one extra photo if map image is not present\n return !showMap\n ? ACTIVITY_MAX_PHOTO_COUNT + 1\n : ACTIVITY_MAX_PHOTO_COUNT;\n case GROUP_ACTIVITY:\n return GROUP_ACTIVITY_MAX_PHOTO_COUNT;\n default:\n // POST\n return POST_MAX_PHOTO_COUNT;\n }\n })();\n\n const entryTypeClassName = (() => {\n switch (entryType) {\n case ACTIVITY:\n return styles.activityMap;\n case GROUP_ACTIVITY:\n return styles.groupActivityMap;\n default:\n // POST\n return styles.postImage;\n }\n })();\n\n const imagesContainerClass = imageEntriesContainerClass({\n entryType,\n totalNumEntryImages,\n showMap\n });\n\n const containerClassNames = (() => {\n let feedImageHeight = null;\n if (feedName === 'profile') {\n feedImageHeight = styles.athleteProfile;\n } else if (feedName === 'club') {\n feedImageHeight = styles.club;\n }\n return reject(\n [\n styles.photosAndMapImageWrapper,\n styles.entryImages,\n feedImageHeight,\n imagesContainerClass\n ],\n isNil\n ).join(' ');\n })();\n\n return (\n
    \n {/* Map Image - Activity and Group Activity */}\n {showMap && (\n \n )}\n {/* Photo Stream - Activity and Group Activity */}\n {showPhotoGrid && (\n \n )}\n {/* Highlighted Image - Posts */}\n {showPost && (\n \n )}\n
    \n );\n};\n\nPhotosAndMapImage.propTypes = {\n entryType: PropTypes.oneOf([ACTIVITY, GROUP_ACTIVITY, POST]).isRequired,\n activityId: PropTypes.string,\n isRoutable: PropTypes.bool,\n activityMap: mapProps,\n photoList: photoListProps,\n isVirtual: PropTypes.bool,\n isCommute: PropTypes.bool,\n workoutType: PropTypes.oneOf(['race', 'long_run', 'workout']),\n privacyTagKey: PropTypes.string,\n feedName: pageProps.isRequired\n};\n\nPhotosAndMapImage.defaultProps = {\n activityId: null,\n isRoutable: false,\n activityMap: {},\n photoList: [],\n isVirtual: false,\n isCommute: false,\n workoutType: null,\n privacyTagKey: null\n};\n\nexport default PhotosAndMapImage;\n","// extracted by mini-css-extract-plugin\nexport default {\"kudos-and-comments\":\"KudosAndComments--kudos-and-comments--RTN8b\",\"kudosAndComments\":\"KudosAndComments--kudos-and-comments--RTN8b\",\"hairline\":\"KudosAndComments--hairline--n9t8k\",\"count-wrapper\":\"KudosAndComments--count-wrapper--C+w1w\",\"countWrapper\":\"KudosAndComments--count-wrapper--C+w1w\",\"count-button\":\"KudosAndComments--count-button--L2QfK\",\"countButton\":\"KudosAndComments--count-button--L2QfK\",\"spacer\":\"KudosAndComments--spacer--sjNL9\",\"kudos-face-pile\":\"KudosAndComments--kudos-face-pile--H5OUj\",\"kudosFacePile\":\"KudosAndComments--kudos-face-pile--H5OUj\",\"social-button\":\"KudosAndComments--social-button--sbn-p\",\"socialButton\":\"KudosAndComments--social-button--sbn-p\",\"media-body\":\"KudosAndComments--media-body--VdgRA\",\"mediaBody\":\"KudosAndComments--media-body--VdgRA\",\"comments-form\":\"KudosAndComments--comments-form--6JVZe\",\"commentsForm\":\"KudosAndComments--comments-form--6JVZe\",\"kudoed\":\"KudosAndComments--kudoed--FPvvg\",\"newKudo\":\"KudosAndComments--newKudo--dTJRR\"};","// extracted by mini-css-extract-plugin\nexport default {\"card\":\"CommentsThread--card--glkaz\",\"card-image-top\":\"CommentsThread--card-image-top--wYeGS\",\"cardImageTop\":\"CommentsThread--card-image-top--wYeGS\",\"card-block\":\"CommentsThread--card-block--yJszg\",\"cardBlock\":\"CommentsThread--card-block--yJszg\",\"card-header\":\"CommentsThread--card-header--r6X1H\",\"cardHeader\":\"CommentsThread--card-header--r6X1H\",\"card-body\":\"CommentsThread--card-body--SWXSA\",\"cardBody\":\"CommentsThread--card-body--SWXSA\",\"card-footer\":\"CommentsThread--card-footer--+PW3r\",\"cardFooter\":\"CommentsThread--card-footer--+PW3r\",\"card-icon\":\"CommentsThread--card-icon--YN6xx\",\"cardIcon\":\"CommentsThread--card-icon--YN6xx\",\"app-icon-wrapper\":\"CommentsThread--app-icon-wrapper--C0ZsJ\",\"appIconWrapper\":\"CommentsThread--app-icon-wrapper--C0ZsJ\",\"media\":\"CommentsThread--media--D-l15\",\"media-content\":\"CommentsThread--media-content--xGofT\",\"mediaContent\":\"CommentsThread--media-content--xGofT\",\"media-body\":\"CommentsThread--media-body--D0F3r\",\"mediaBody\":\"CommentsThread--media-body--D0F3r\",\"media-object\":\"CommentsThread--media-object--H2Y+4\",\"mediaObject\":\"CommentsThread--media-object--H2Y+4\",\"media-left\":\"CommentsThread--media-left--1ux7T\",\"mediaLeft\":\"CommentsThread--media-left--1ux7T\",\"media-object-left\":\"CommentsThread--media-object-left--vgYsw\",\"mediaObjectLeft\":\"CommentsThread--media-object-left--vgYsw\",\"media-object-right\":\"CommentsThread--media-object-right--5M0hX\",\"mediaObjectRight\":\"CommentsThread--media-object-right--5M0hX\",\"media-right\":\"CommentsThread--media-right--2dCCN\",\"mediaRight\":\"CommentsThread--media-right--2dCCN\",\"media-actions\":\"CommentsThread--media-actions--iMqke\",\"mediaActions\":\"CommentsThread--media-actions--iMqke\",\"media-center\":\"CommentsThread--media-center--g1BHe\",\"mediaCenter\":\"CommentsThread--media-center--g1BHe\",\"media-middle\":\"CommentsThread--media-middle--PLkop\",\"mediaMiddle\":\"CommentsThread--media-middle--PLkop\",\"media-bottom\":\"CommentsThread--media-bottom--kNkOb\",\"mediaBottom\":\"CommentsThread--media-bottom--kNkOb\",\"list-media\":\"CommentsThread--list-media--0FaS-\",\"listMedia\":\"CommentsThread--list-media--0FaS-\",\"comments\":\"CommentsThread--comments--XIKwp\",\"comment\":\"CommentsThread--comment--ryaZV\",\"thread\":\"CommentsThread--thread--tBqd3\",\"feed-pagination\":\"CommentsThread--feed-pagination--jZZ91\",\"feedPagination\":\"CommentsThread--feed-pagination--jZZ91\",\"spinner\":\"CommentsThread--spinner--aI8Lo\",\"no-entries\":\"CommentsThread--no-entries--Jc4JD\",\"noEntries\":\"CommentsThread--no-entries--Jc4JD\",\"entry-container\":\"CommentsThread--entry-container--bmA2A\",\"entryContainer\":\"CommentsThread--entry-container--bmA2A\",\"feed-entry\":\"CommentsThread--feed-entry--Cfvot\",\"feedEntry\":\"CommentsThread--feed-entry--Cfvot\",\"entry-inset\":\"CommentsThread--entry-inset--YBh4-\",\"entryInset\":\"CommentsThread--entry-inset--YBh4-\",\"entry-header\":\"CommentsThread--entry-header--LRSh+\",\"entryHeader\":\"CommentsThread--entry-header--LRSh+\",\"entry-body\":\"CommentsThread--entry-body--GLoRL\",\"entryBody\":\"CommentsThread--entry-body--GLoRL\",\"entry-media\":\"CommentsThread--entry-media--qz5Ud\",\"entryMedia\":\"CommentsThread--entry-media--qz5Ud\",\"entry-footer\":\"CommentsThread--entry-footer--UOv5i\",\"entryFooter\":\"CommentsThread--entry-footer--UOv5i\",\"entry-block\":\"CommentsThread--entry-block--Xr071\",\"entryBlock\":\"CommentsThread--entry-block--Xr071\",\"avatar\":\"CommentsThread--avatar--19Srf\",\"avatar-img\":\"CommentsThread--avatar-img--dt85B\",\"avatarImg\":\"CommentsThread--avatar-img--dt85B\",\"card-margin\":\"CommentsThread--card-margin--VfJeG\",\"cardMargin\":\"CommentsThread--card-margin--VfJeG\",\"btn\":\"CommentsThread--btn--EZXwm\",\"btn-link\":\"CommentsThread--btn-link--ZTGYZ\",\"btnLink\":\"CommentsThread--btn-link--ZTGYZ\",\"report-and-delete-buttons\":\"CommentsThread--report-and-delete-buttons--oXecl\",\"reportAndDeleteButtons\":\"CommentsThread--report-and-delete-buttons--oXecl\",\"more-comments-button\":\"CommentsThread--more-comments-button--MnE+d\",\"moreCommentsButton\":\"CommentsThread--more-comments-button--MnE+d\",\"name-and-time\":\"CommentsThread--name-and-time--gi2yN\",\"nameAndTime\":\"CommentsThread--name-and-time--gi2yN\",\"athlete-name\":\"CommentsThread--athlete-name--d4tcE\",\"athleteName\":\"CommentsThread--athlete-name--d4tcE\",\"timestamp-and-comment-actions\":\"CommentsThread--timestamp-and-comment-actions--ivNSW\",\"timestampAndCommentActions\":\"CommentsThread--timestamp-and-comment-actions--ivNSW\",\"comment-actions\":\"CommentsThread--comment-actions---adQa\",\"commentActions\":\"CommentsThread--comment-actions---adQa\",\"comment-text\":\"CommentsThread--comment-text--LLbCi\",\"commentText\":\"CommentsThread--comment-text--LLbCi\",\"fadeIn\":\"CommentsThread--fadeIn--OLDmb\",\"newKudo\":\"CommentsThread--newKudo--BWBjc\",\"enterFadeOut\":\"CommentsThread--enterFadeOut--szGsy\"};","import React from 'react';\nimport PropTypes from 'prop-types';\nimport I18n from 'utils/I18n';\nimport Avatar from '@strava/ui/Avatar';\nimport Button, { LinkButton } from '@strava/ui/Button';\nimport { Markup } from 'interweave';\nimport { useFeedEntityContext } from '../../../../state/FeedEntityContext';\nimport { buildTimeAgoTimestamp } from '../../../../utils';\nimport useFeedAnalytics from '../../../../hooks/useFeedAnalytics';\nimport { DELETE_COMMENT_START } from '../../../../state/feed-entity-actions';\nimport styles from './styles.scss';\nimport useFeedIntersectionObserver from '../../../../hooks/useFeedIntersectionObserver';\nimport CommentReaction from '../CommentReaction';\n\nconst prefix = 'components.feed.social';\n\nconst CommentsThread = ({\n onSeeMoreCommentsClick,\n entityId,\n showCommentReactions,\n iconExperimentCohort\n}) => {\n const { dispatch, entityState, analyticProps } = useFeedEntityContext();\n\n const { inView, intersectionObserverRef } = useFeedIntersectionObserver({\n isParentFeedEntry: false\n });\n\n useFeedAnalytics({\n ...analyticProps,\n element: 'comment_preview',\n inView\n });\n\n const commentReactionAnalytics = {\n category: 'feed',\n page: 'activity',\n buttonElement: 'like_comment_btn_on_feed',\n listElement: 'like_list_btn_on_feed'\n };\n\n const comments = entityState.comments[entityId] || [];\n const numComments = comments.length;\n const totalComments = Math.min(numComments, 2);\n\n const deleteComment = (comment) => {\n dispatch({\n type: DELETE_COMMENT_START,\n payload: { comment, entityId, element: 'comments_thread' }\n });\n };\n\n const thread = () => {\n return comments\n .slice(Math.max(numComments - totalComments, 0))\n .map((comment) => {\n const timeAgoTimestamp = buildTimeAgoTimestamp(comment.timestamp);\n // eslint-disable-next-line camelcase\n const { reactions_summary } = comment;\n const hasReacted =\n // eslint-disable-next-line camelcase\n reactions_summary && reactions_summary.has_reacted\n ? reactions_summary.has_reacted\n : false;\n const commentReactionCount =\n // eslint-disable-next-line camelcase\n reactions_summary && reactions_summary.reaction_count\n ? reactions_summary.reaction_count\n : 0;\n\n return (\n \n
    \n {\n entityState.trackAnalytics({\n action: 'click',\n element: 'profile_picture',\n properties: { element_source: 'comments_thread' }\n });\n }}\n />\n
    \n
    \n
    \n \n \n \n {(comment.deletable || comment.reportable) && (\n
    \n {comment.reportable && (\n \n {I18n.t(`${prefix}.report`)}\n \n )}\n {comment.deletable && (\n deleteComment(comment)}\n type=\"button\"\n >\n {I18n.t(`${prefix}.delete`)}\n \n )}\n
    \n )}\n
    \n
    \n\n \n \n \n {showCommentReactions && (\n \n )}\n \n \n );\n });\n };\n\n return (\n
    \n {numComments > 0 &&
      {thread()}
    }\n {numComments > 2 && (\n \n {I18n.t(`${prefix}.see_all_comments`, {\n number: numComments\n })}\n \n )}\n
    \n );\n};\n\nCommentsThread.propTypes = {\n onSeeMoreCommentsClick: PropTypes.func.isRequired,\n entityId: PropTypes.string.isRequired,\n showCommentReactions: PropTypes.bool.isRequired,\n iconExperimentCohort: PropTypes.string\n};\n\nCommentsThread.defaultProps = {\n iconExperimentCohort: null\n};\n\nexport default CommentsThread;\n","// extracted by mini-css-extract-plugin\nexport default {\"media-actions\":\"MediaActions--media-actions--h6z0x\",\"mediaActions\":\"MediaActions--media-actions--h6z0x\"};","import React from 'react';\nimport PropTypes from 'prop-types';\nimport styles from './media-actions.scss';\n\nconst MediaActions = ({ children, className, ...options }) => {\n const classNames = [styles.mediaActions];\n if (className) {\n classNames.push(className);\n }\n return (\n
    \n {children}\n
    \n );\n};\n\nMediaActions.propTypes = {\n children: PropTypes.node.isRequired,\n className: PropTypes.string\n};\n\nMediaActions.defaultProps = {\n className: null\n};\n\nexport default MediaActions;\n","import React, { useState, useEffect, useCallback } from 'react';\nimport PropTypes from 'prop-types';\nimport colors from '@strava/ui/colors';\nimport Button from '@strava/ui/Button';\nimport AvatarGroup from '@strava/ui/AvatarGroup';\nimport Avatar from '@strava/ui/Avatar';\nimport I18n from 'utils/I18n';\nimport SvgActionsKudoHighlightedXsmall from '@strava/icons/ActionsKudoHighlightedXsmall';\nimport SvgActionsKudoNormalXsmall from '@strava/icons/ActionsKudoNormalXsmall';\nimport SvgActionsCommentNormalXsmall from '@strava/icons/ActionsCommentNormalXsmall';\nimport createNetworkingClient from 'utils/networking-client';\nimport Cldr from 'utils/Cldr';\nimport { devLog } from 'utils/dev-utils';\nimport {\n kudosAndCommentsProps,\n viewingAthleteProps,\n entityOwnerProps,\n segAndBestEffortAchievementsProps,\n entitiesWithKudosAndComments\n} from '../../../props/feed-prop-types';\nimport styles from './styles.scss';\nimport MentionableCommentForm from '../MentionableCommentForm';\nimport KudosCommentsAndAchievementsModal from './KudosCommentsAndAchievementsModal';\nimport CommentsThread from './CommentsThread';\n\nimport { useFeedEntityContext } from '../../../state/FeedEntityContext';\nimport {\n OPEN_MODAL_COMMENTS_TAB,\n OPEN_MODAL_KUDOS_TAB\n} from '../../../state/feed-entity-actions';\nimport { kudosUpdateEndpoint } from './utils';\nimport Media from '../media/Media';\nimport MediaBody from '../media/MediaBody';\nimport MediaActions from '../media/MediaActions';\nimport { FEED_ENTRY_TYPES } from '../../../constants';\n\nconst KudosAndComments = ({\n kudosAndComments,\n entity,\n entityId,\n ownedByCurrentAthlete,\n viewingAthlete,\n entityOwner,\n entityTitle,\n openCommentsModalOnIconClick,\n segAndBestEffortAchievements,\n showHairlineOnTop,\n reactionsEnabled,\n iconExperimentCohort\n}) => {\n const {\n canKudo,\n kudosCount,\n highlightedKudosers: initialLoadHighlightedKudosers,\n commentsEnabled\n } = kudosAndComments;\n\n const [canKudoStatus, setCanKudoStatus] = useState(canKudo);\n const [currentKudoCount, setCurrentKudoCount] = useState(kudosCount);\n const [showForm, setShowForm] = useState(false);\n const [hasKudoed, setHasKudoed] = useState(false);\n const [highlightedKudosers, setHighlightedKudosers] = useState(\n initialLoadHighlightedKudosers\n );\n const { entityState, dispatch } = useFeedEntityContext();\n const prefix = 'components.feed.social';\n\n const commentIconButtonTitle = () => {\n return openCommentsModalOnIconClick\n ? I18n.t(`${prefix}.view_all_comments`)\n : I18n.t(`${prefix}.icon.comments`);\n };\n\n const comments = entityState.comments[entityId] || [];\n\n const showKudosCallToAction =\n canKudoStatus && currentKudoCount === 0 && comments.length === 0;\n\n const commentReactionAnalytics = {\n category: 'feed',\n page: 'activity',\n buttonElement: 'like_comment_btn_on_modal',\n listElement: 'like_list_btn_on_modal'\n };\n\n const kudoIconButtonTitle = () => {\n // First to give kudos\n if (showKudosCallToAction) {\n return I18n.t(`${prefix}.give_kudos`);\n }\n return canKudoStatus && currentKudoCount > 0\n ? I18n.t(`${prefix}.icon.give_kudos`)\n : I18n.t(`${prefix}.view_all_kudos`);\n };\n\n const handleAvatarGroupClick = () => {\n entityState.trackAnalytics({\n action: 'click',\n element: 'avatar_group',\n properties: { element_source: 'highlighted_kudosers' }\n });\n\n dispatch({\n type: OPEN_MODAL_KUDOS_TAB,\n payload: {\n element: 'avatar_group',\n selectedEntityId: entityId\n }\n });\n };\n\n const showHighlightedKudoers = () => {\n return (\n // eslint-disable-next-line\n \n \n {highlightedKudosers.map((kudoer) => {\n return (\n \n );\n })}\n \n \n );\n };\n\n const handleClickKudoFail = (e) => {\n // TODO: handle error case\n devLog(e);\n };\n\n const onClickKudoSuccessful = useCallback(() => {\n // Not allowed to kudo more than once\n setCanKudoStatus(false);\n setHasKudoed(true);\n setCurrentKudoCount((prev) => prev + 1);\n\n const highlightedKudoser = {\n avatar_url: viewingAthlete.avatarUrl,\n destination_url: `/athletes/${viewingAthlete.id}`,\n display_name: viewingAthlete.name,\n show_name: false\n };\n setHighlightedKudosers((prev) =>\n [highlightedKudoser].concat(prev.slice(0, 2))\n );\n }, [viewingAthlete.avatarUrl, viewingAthlete.id, viewingAthlete.name]);\n\n const entityEndpoint = kudosUpdateEndpoint({ entity });\n\n const onClickKudo = (element) => {\n entityState.trackAnalytics({\n action: 'click',\n element\n });\n createNetworkingClient()\n .post(`/feed/${entityEndpoint}/${entityId}/kudo`)\n .then((response) => {\n if (response && response.status === 200) {\n onClickKudoSuccessful();\n } else {\n handleClickKudoFail(response.error);\n }\n })\n .catch((e) => {\n handleClickKudoFail(e);\n });\n };\n\n useEffect(() => {\n if (entityState.kudoPosted) {\n // can only kudo an entity once...\n onClickKudoSuccessful();\n }\n }, [entityState.kudoPosted, onClickKudoSuccessful, dispatch]);\n\n const onClickComment = () => {\n const element = 'comment';\n if (openCommentsModalOnIconClick) {\n dispatch({\n type: OPEN_MODAL_COMMENTS_TAB,\n payload: { element, selectedEntityId: entityId }\n });\n return;\n }\n entityState.trackAnalytics({\n action: 'click',\n element\n });\n setShowForm((prev) => !prev);\n };\n\n // eg. \"45 kudos. 12 comments\"\n const kudosAndCommentsCtaText = () => {\n const components = [];\n // kudo label text when there are no kudos (Be the first to give kudos!)\n if (showKudosCallToAction) {\n components.push(\n onClickKudo('kudos_cta')\n : () =>\n dispatch({\n type: OPEN_MODAL_KUDOS_TAB,\n payload: {\n element: 'kudos_cta',\n selectedEntityId: entityId\n }\n })\n }\n data-testid=\"give_kudos_button\"\n key=\"give_kudos_button\"\n >\n {I18n.t('components.feed.social.give_kudos')}\n \n );\n }\n // kudo label text with count (eg. 77 kudos)\n else if (currentKudoCount > 0) {\n components.push(\n \n dispatch({\n type: OPEN_MODAL_KUDOS_TAB,\n payload: { element: 'kudo_list', selectedEntityId: entityId }\n })\n }\n data-testid=\"kudos_count\"\n key=\"kudos_count\"\n >\n {Cldr.formatDecimal(currentKudoCount)} \n {I18n.t('components.feed.social.kudos')}\n \n );\n if (commentsEnabled && comments.length > 0) {\n components.push(\n
    \n ·\n
    \n );\n }\n }\n // comment label text with count (eg. 48 comments )\n if (commentsEnabled && comments.length > 0) {\n components.push(\n \n dispatch({\n type: OPEN_MODAL_COMMENTS_TAB,\n payload: { element: 'comment_list', selectedEntityId: entityId }\n })\n }\n data-testid=\"comments_count\"\n key=\"comments_count\"\n >\n {Cldr.formatDecimal(comments.length)} \n {comments.length === 1\n ? I18n.t('components.feed.social.comment')\n : I18n.t('components.feed.social.comments')}\n \n );\n }\n return (\n
    \n {components}\n
    \n );\n };\n\n const kudosAndCommentsIconButtons = () => {\n return (\n <>\n {/* Kudos thumb icon button */}\n onClickKudo('kudo')\n : () =>\n dispatch({\n type: OPEN_MODAL_KUDOS_TAB,\n payload: {\n element: 'kudo_icon',\n selectedEntityId: entityId\n }\n })\n }\n data-testid=\"kudos_button\"\n >\n {canKudoStatus || ownedByCurrentAthlete ? (\n \n ) : (\n \n )}\n \n {/* Comments icon button */}\n {commentsEnabled && (\n \n \n \n )}\n \n );\n };\n\n const mentionableCommentsForm = () => (\n \n
    \n \n
    \n
    \n );\n\n // eg scenario. for activity cards, we should show hairline (divider) when there is no map,\n // no images or the visibility text is being displayed\n const containerClassNames = () => {\n const classNames = [styles.kudosAndComments];\n if (showHairlineOnTop) {\n classNames.push(styles.hairline);\n }\n return classNames.join(' ');\n };\n\n const showCommentReactions =\n reactionsEnabled &&\n [FEED_ENTRY_TYPES.activity, FEED_ENTRY_TYPES.groupActivity].includes(\n entity\n );\n\n return (\n <>\n \n \n {highlightedKudosers.length > 0 && showHighlightedKudoers()}\n {kudosAndCommentsCtaText()}\n \n {kudosAndCommentsIconButtons()}\n \n {comments.length > 0 && commentsEnabled && (\n \n \n dispatch({\n type: OPEN_MODAL_COMMENTS_TAB,\n payload: {\n element: 'see_more_comments',\n selectedEntityId: entityId\n }\n })\n }\n entityId={entityId}\n showCommentReactions={showCommentReactions}\n iconExperimentCohort={iconExperimentCohort}\n />\n \n )}\n\n {showForm && mentionableCommentsForm()}\n {(entityState.openKudosCommentModal ||\n entityState.isViewingCommentReactionsList) &&\n entityState.selectedEntityId === entityId && (\n \n )}\n \n );\n};\n\nKudosAndComments.propTypes = {\n kudosAndComments: kudosAndCommentsProps.isRequired,\n entity: entitiesWithKudosAndComments.isRequired,\n entityId: PropTypes.string.isRequired,\n ownedByCurrentAthlete: PropTypes.bool.isRequired,\n viewingAthlete: viewingAthleteProps.isRequired,\n entityOwner: entityOwnerProps.isRequired,\n entityTitle: PropTypes.string.isRequired,\n segAndBestEffortAchievements: segAndBestEffortAchievementsProps,\n // (openCommentsModalOnIconClick) controls whether the kudos and comments modal is opened\n // directly by the social action buttons. This is used by group activities for example\n openCommentsModalOnIconClick: PropTypes.bool.isRequired,\n showHairlineOnTop: PropTypes.bool,\n reactionsEnabled: PropTypes.bool.isRequired,\n iconExperimentCohort: PropTypes.string\n};\n\nKudosAndComments.defaultProps = {\n segAndBestEffortAchievements: [],\n showHairlineOnTop: false,\n iconExperimentCohort: null\n};\n\nexport default KudosAndComments;\n","// extracted by mini-css-extract-plugin\nexport default {\"icon-container\":\"HeaderWithOwnerMetadata--icon-container--cF2wg\",\"iconContainer\":\"HeaderWithOwnerMetadata--icon-container--cF2wg\",\"avatar\":\"HeaderWithOwnerMetadata--avatar--qRfTK\",\"group-activity-avatar\":\"HeaderWithOwnerMetadata--group-activity-avatar--J2tbK\",\"groupActivityAvatar\":\"HeaderWithOwnerMetadata--group-activity-avatar--J2tbK\"};","// extracted by mini-css-extract-plugin\nexport default {\"subtitle-wrapper\":\"LocationAndTime--subtitle-wrapper--6yH0n\",\"subtitleWrapper\":\"LocationAndTime--subtitle-wrapper--6yH0n\",\"location\":\"LocationAndTime--location--Djc4K\"};","import React from 'react';\nimport PropTypes from 'prop-types';\nimport styles from './index.scss';\n\n// date can be displayed as [November 21, 2020 at 6:58 AM] or [November 21, 2020]\nconst showDate = (timestampFormat, displayDateAtTime, displayDate) => {\n if (timestampFormat === 'date_at_time') {\n return ;\n }\n return ;\n};\n\nconst showLocation = (location) =>\n location ? (\n
    \n  \n {`· ${location}`}\n
    \n ) : (\n ''\n );\n\nconst Subtitle = ({\n timestampFormat,\n displayDateAtTime,\n displayDate,\n location\n}) => (\n \n {showDate(timestampFormat, displayDateAtTime, displayDate)}\n {showLocation(location)}\n \n);\n\nSubtitle.propTypes = {\n timestampFormat: PropTypes.string,\n displayDateAtTime: PropTypes.string.isRequired,\n displayDate: PropTypes.string.isRequired,\n location: PropTypes.string\n};\n\nSubtitle.defaultProps = {\n timestampFormat: 'date',\n location: null\n};\n\nexport default Subtitle;\n","// extracted by mini-css-extract-plugin\nexport default {\"card\":\"SocialShareDropdownActions--card--ZtJiQ\",\"card-image-top\":\"SocialShareDropdownActions--card-image-top--USGBW\",\"cardImageTop\":\"SocialShareDropdownActions--card-image-top--USGBW\",\"card-block\":\"SocialShareDropdownActions--card-block--2QhRl\",\"cardBlock\":\"SocialShareDropdownActions--card-block--2QhRl\",\"card-header\":\"SocialShareDropdownActions--card-header--42q7L\",\"cardHeader\":\"SocialShareDropdownActions--card-header--42q7L\",\"card-body\":\"SocialShareDropdownActions--card-body--FMeRI\",\"cardBody\":\"SocialShareDropdownActions--card-body--FMeRI\",\"card-footer\":\"SocialShareDropdownActions--card-footer--qKSZG\",\"cardFooter\":\"SocialShareDropdownActions--card-footer--qKSZG\",\"card-icon\":\"SocialShareDropdownActions--card-icon--RFtAr\",\"cardIcon\":\"SocialShareDropdownActions--card-icon--RFtAr\",\"app-icon-wrapper\":\"SocialShareDropdownActions--app-icon-wrapper--3T+Au\",\"appIconWrapper\":\"SocialShareDropdownActions--app-icon-wrapper--3T+Au\",\"media\":\"SocialShareDropdownActions--media--LRAiQ\",\"media-content\":\"SocialShareDropdownActions--media-content--HTBL4\",\"mediaContent\":\"SocialShareDropdownActions--media-content--HTBL4\",\"media-body\":\"SocialShareDropdownActions--media-body--8Gm6g\",\"mediaBody\":\"SocialShareDropdownActions--media-body--8Gm6g\",\"media-object\":\"SocialShareDropdownActions--media-object--1Saoq\",\"mediaObject\":\"SocialShareDropdownActions--media-object--1Saoq\",\"media-left\":\"SocialShareDropdownActions--media-left--xJuUz\",\"mediaLeft\":\"SocialShareDropdownActions--media-left--xJuUz\",\"media-object-left\":\"SocialShareDropdownActions--media-object-left--nwRuN\",\"mediaObjectLeft\":\"SocialShareDropdownActions--media-object-left--nwRuN\",\"media-object-right\":\"SocialShareDropdownActions--media-object-right--o9hrk\",\"mediaObjectRight\":\"SocialShareDropdownActions--media-object-right--o9hrk\",\"media-right\":\"SocialShareDropdownActions--media-right--J3-xt\",\"mediaRight\":\"SocialShareDropdownActions--media-right--J3-xt\",\"media-actions\":\"SocialShareDropdownActions--media-actions--WyQBP\",\"mediaActions\":\"SocialShareDropdownActions--media-actions--WyQBP\",\"media-center\":\"SocialShareDropdownActions--media-center--PgZ+7\",\"mediaCenter\":\"SocialShareDropdownActions--media-center--PgZ+7\",\"media-middle\":\"SocialShareDropdownActions--media-middle--n5Zp3\",\"mediaMiddle\":\"SocialShareDropdownActions--media-middle--n5Zp3\",\"media-bottom\":\"SocialShareDropdownActions--media-bottom--CGE78\",\"mediaBottom\":\"SocialShareDropdownActions--media-bottom--CGE78\",\"list-media\":\"SocialShareDropdownActions--list-media--sE53Q\",\"listMedia\":\"SocialShareDropdownActions--list-media--sE53Q\",\"comments\":\"SocialShareDropdownActions--comments--vfMso\",\"comment\":\"SocialShareDropdownActions--comment--rU3qq\",\"thread\":\"SocialShareDropdownActions--thread--Uy3om\",\"feed-pagination\":\"SocialShareDropdownActions--feed-pagination--TCE6V\",\"feedPagination\":\"SocialShareDropdownActions--feed-pagination--TCE6V\",\"spinner\":\"SocialShareDropdownActions--spinner--U7pXP\",\"no-entries\":\"SocialShareDropdownActions--no-entries--gdSLD\",\"noEntries\":\"SocialShareDropdownActions--no-entries--gdSLD\",\"entry-container\":\"SocialShareDropdownActions--entry-container--cWCbP\",\"entryContainer\":\"SocialShareDropdownActions--entry-container--cWCbP\",\"feed-entry\":\"SocialShareDropdownActions--feed-entry--wC-TT\",\"feedEntry\":\"SocialShareDropdownActions--feed-entry--wC-TT\",\"entry-inset\":\"SocialShareDropdownActions--entry-inset--V9Et2\",\"entryInset\":\"SocialShareDropdownActions--entry-inset--V9Et2\",\"entry-header\":\"SocialShareDropdownActions--entry-header--NG2vY\",\"entryHeader\":\"SocialShareDropdownActions--entry-header--NG2vY\",\"entry-body\":\"SocialShareDropdownActions--entry-body--bMDq5\",\"entryBody\":\"SocialShareDropdownActions--entry-body--bMDq5\",\"entry-media\":\"SocialShareDropdownActions--entry-media--yCjHA\",\"entryMedia\":\"SocialShareDropdownActions--entry-media--yCjHA\",\"entry-footer\":\"SocialShareDropdownActions--entry-footer--7hfkc\",\"entryFooter\":\"SocialShareDropdownActions--entry-footer--7hfkc\",\"entry-block\":\"SocialShareDropdownActions--entry-block--hsha-\",\"entryBlock\":\"SocialShareDropdownActions--entry-block--hsha-\",\"avatar\":\"SocialShareDropdownActions--avatar--wdZvE\",\"avatar-img\":\"SocialShareDropdownActions--avatar-img--N4hBt\",\"avatarImg\":\"SocialShareDropdownActions--avatar-img--N4hBt\",\"card-margin\":\"SocialShareDropdownActions--card-margin--9dxnM\",\"cardMargin\":\"SocialShareDropdownActions--card-margin--9dxnM\",\"btn\":\"SocialShareDropdownActions--btn--+8EzT\",\"btn-link\":\"SocialShareDropdownActions--btn-link--tJg8d\",\"btnLink\":\"SocialShareDropdownActions--btn-link--tJg8d\",\"entry-actions\":\"SocialShareDropdownActions--entry-actions--svtk+\",\"entryActions\":\"SocialShareDropdownActions--entry-actions--svtk+\",\"dropdown\":\"SocialShareDropdownActions--dropdown--Q9Bt9\",\"active-dropdown\":\"SocialShareDropdownActions--active-dropdown--hZ29X\",\"activeDropdown\":\"SocialShareDropdownActions--active-dropdown--hZ29X\",\"dropdown-option\":\"SocialShareDropdownActions--dropdown-option--kWR79\",\"dropdownOption\":\"SocialShareDropdownActions--dropdown-option--kWR79\",\"fadeIn\":\"SocialShareDropdownActions--fadeIn--4Gx69\",\"newKudo\":\"SocialShareDropdownActions--newKudo--B6hmB\",\"enterFadeOut\":\"SocialShareDropdownActions--enterFadeOut--2wW7+\"};","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\n\nimport I18n from 'utils/I18n';\nimport { Dropdown, DropdownItem, DropdownLink } from '@strava/ui/Dropdown';\nimport EmbedModal from '../../../../EmbedModal/EmbedModal';\nimport { useFeedEntityContext } from '../../../state/FeedEntityContext';\n\nimport styles from './styles.scss';\n\nconst EntryActions = ({\n activityId,\n shareable,\n twitterUrl,\n embedDropdownEnabled\n}) => {\n const [isEmbedModalOpen, setIsEmbedModalOpen] = useState(false);\n const { entityState } = useFeedEntityContext();\n\n const toggleEmbedModalOpen = (event) => {\n event.preventDefault();\n setIsEmbedModalOpen(!isEmbedModalOpen);\n };\n\n function facebookShareUrl() {\n const activityUrl = `https://www.strava.com/activities/${activityId}`;\n // Facebook will error if the URL is not publicly available (like with localhost)\n // In which case, you can test using a stubbed route like:\n // const pageUrl = 'https://www.strava.com/activitiy/22481075';\n return `https://www.facebook.com/sharer.php?u=${activityUrl}`;\n }\n\n function openShareWindow() {\n const left = (window.screen.width - 570) / 2;\n const top = (window.screen.height - 570) / 2;\n const params = `menubar=no,toolbar=no,status=no,width=570,height=570,top=${top},left=${left}`;\n // Setting 'params' to an empty string will launch\n // content in a new tab or window rather than a pop-up.\n // params = \"\";\n window.open(facebookShareUrl(), 'NewWindow', params);\n }\n\n return (\n
    \n {shareable && (\n
    \n {\n entityState.trackAnalytics({\n action: 'click',\n element: 'share'\n });\n }}\n className={`${styles.dropdown}`}\n >\n \n Facebook\n \n \n Twitter\n \n {embedDropdownEnabled && (\n \n {I18n.t('templates.share.embed.get_code')}\n \n \n )}\n \n
    \n )}\n
    \n );\n};\n\nEntryActions.propTypes = {\n activityId: PropTypes.string.isRequired,\n shareable: PropTypes.bool.isRequired,\n twitterUrl: PropTypes.string.isRequired,\n embedDropdownEnabled: PropTypes.bool.isRequired\n};\n\nexport default EntryActions;\n","// extracted by mini-css-extract-plugin\nexport default {\"entry-header\":\"EntryHeader--entry-header--lXRRn\",\"entryHeader\":\"EntryHeader--entry-header--lXRRn\",\"child-entry\":\"EntryHeader--child-entry--MGzPL\",\"childEntry\":\"EntryHeader--child-entry--MGzPL\"};","import React from 'react';\nimport PropTypes from 'prop-types';\nimport styles from './entry-header.scss';\n\nconst EntryHeader = ({ children, child, className, ...options }) => {\n const classNames = [styles.entryHeader];\n if (className) {\n classNames.push(className);\n }\n if (child) {\n classNames.push(styles.childEntry);\n }\n\n return (\n
    \n {children}\n
    \n );\n};\n\nEntryHeader.propTypes = {\n children: PropTypes.node.isRequired,\n className: PropTypes.string,\n child: PropTypes.bool\n};\n\nEntryHeader.defaultProps = {\n className: null,\n child: false\n};\n\nexport default EntryHeader;\n","// extracted by mini-css-extract-plugin\nexport default {\"media-left\":\"MediaLeft--media-left--EzQvk\",\"mediaLeft\":\"MediaLeft--media-left--EzQvk\",\"small-badge\":\"MediaLeft--small-badge--FtRCp\",\"smallBadge\":\"MediaLeft--small-badge--FtRCp\",\"big-badge\":\"MediaLeft--big-badge--32809\",\"bigBadge\":\"MediaLeft--big-badge--32809\"};","import React from 'react';\nimport PropTypes from 'prop-types';\nimport styles from './media-left.scss';\n\nconst MediaLeft = ({ children, bigBadge, className, ...options }) => {\n const classNames = [styles.mediaLeft];\n if (className) {\n classNames.push(className);\n }\n\n if (bigBadge) {\n classNames.push(styles.bigBadge);\n } else {\n classNames.push(styles.smallBadge);\n }\n\n return (\n
    \n {children}\n
    \n );\n};\n\nMediaLeft.propTypes = {\n children: PropTypes.node.isRequired,\n bigBadge: PropTypes.bool,\n className: PropTypes.string\n};\n\nMediaLeft.defaultProps = {\n className: null,\n bigBadge: false\n};\n\nexport default MediaLeft;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport Avatar from '@strava/ui/Avatar';\n\nimport ActionsStarHighlightedXsmall from '@strava/icons/ActionsStarHighlightedXsmall';\nimport styles from './index.scss';\nimport LocationAndTime from '../LocationAndTime';\nimport SocialShareDropdownActions from '../SocialShareDropdownActions';\nimport {\n timeAndLocationProps,\n entityOwnerProps\n} from '../../../props/feed-prop-types';\nimport { useFeedEntityContext } from '../../../state/FeedEntityContext';\n\nimport EntryHeader from '../../shared/media/EntryHeader';\nimport Media from '../../shared/media/Media';\nimport MediaLeft from '../../shared/media/MediaLeft';\nimport MediaBody from '../../shared/media/MediaBody';\nimport MediaActions from '../../shared/media/MediaActions';\n\nconst HeaderWithOwnerMetadata = ({\n timeAndLocation,\n entityOwner,\n shareable,\n entityId,\n twitterUrl,\n isBoosted,\n entity,\n embedDropdownEnabled\n}) => {\n const { entityState } = useFeedEntityContext();\n\n const { displayImage, name, memberType, profileUrl, type } = entityOwner;\n return (\n \n \n \n
    \n {\n entityState.trackAnalytics({\n action: 'click',\n element: 'profile_picture',\n properties: { element_source: 'title' }\n });\n }}\n />\n
    \n
    \n \n \n entityState.trackAnalytics({\n action: 'click',\n element: 'owner_name'\n })\n }\n >\n {name}\n \n {timeAndLocation && (\n \n )}\n \n \n {shareable && (\n \n )}\n {isBoosted === true && (\n
    \n \n
    \n )}\n
    \n
    \n
    \n );\n};\n\nHeaderWithOwnerMetadata.propTypes = {\n timeAndLocation: timeAndLocationProps, // not included in group activity athlete entries\n entityOwner: entityOwnerProps.isRequired,\n entityId: PropTypes.string.isRequired,\n shareable: PropTypes.bool.isRequired,\n twitterUrl: PropTypes.string,\n isBoosted: PropTypes.bool.isRequired,\n entity: PropTypes.string,\n embedDropdownEnabled: PropTypes.bool.isRequired\n};\n\nHeaderWithOwnerMetadata.defaultProps = {\n twitterUrl: '',\n timeAndLocation: null,\n entity: ''\n};\n\nexport default HeaderWithOwnerMetadata;\n","// extracted by mini-css-extract-plugin\nexport default {\"card\":\"VisibilityMessage--card--+eXlj\",\"card-image-top\":\"VisibilityMessage--card-image-top--6Mfpt\",\"cardImageTop\":\"VisibilityMessage--card-image-top--6Mfpt\",\"card-block\":\"VisibilityMessage--card-block--K42Hx\",\"cardBlock\":\"VisibilityMessage--card-block--K42Hx\",\"card-header\":\"VisibilityMessage--card-header--injSF\",\"cardHeader\":\"VisibilityMessage--card-header--injSF\",\"card-body\":\"VisibilityMessage--card-body---tzZc\",\"cardBody\":\"VisibilityMessage--card-body---tzZc\",\"card-footer\":\"VisibilityMessage--card-footer--TyHAN\",\"cardFooter\":\"VisibilityMessage--card-footer--TyHAN\",\"card-icon\":\"VisibilityMessage--card-icon--u1lw9\",\"cardIcon\":\"VisibilityMessage--card-icon--u1lw9\",\"app-icon-wrapper\":\"VisibilityMessage--app-icon-wrapper--8QjPO\",\"appIconWrapper\":\"VisibilityMessage--app-icon-wrapper--8QjPO\",\"media\":\"VisibilityMessage--media--yJovY\",\"media-content\":\"VisibilityMessage--media-content--RaAKk\",\"mediaContent\":\"VisibilityMessage--media-content--RaAKk\",\"media-body\":\"VisibilityMessage--media-body--Nvf5C\",\"mediaBody\":\"VisibilityMessage--media-body--Nvf5C\",\"media-object\":\"VisibilityMessage--media-object--RPeRl\",\"mediaObject\":\"VisibilityMessage--media-object--RPeRl\",\"media-left\":\"VisibilityMessage--media-left--FA-Z2\",\"mediaLeft\":\"VisibilityMessage--media-left--FA-Z2\",\"media-object-left\":\"VisibilityMessage--media-object-left---QTpE\",\"mediaObjectLeft\":\"VisibilityMessage--media-object-left---QTpE\",\"media-object-right\":\"VisibilityMessage--media-object-right--Y61sf\",\"mediaObjectRight\":\"VisibilityMessage--media-object-right--Y61sf\",\"media-right\":\"VisibilityMessage--media-right--FToAJ\",\"mediaRight\":\"VisibilityMessage--media-right--FToAJ\",\"media-actions\":\"VisibilityMessage--media-actions--PQoz8\",\"mediaActions\":\"VisibilityMessage--media-actions--PQoz8\",\"media-center\":\"VisibilityMessage--media-center--D8FTP\",\"mediaCenter\":\"VisibilityMessage--media-center--D8FTP\",\"media-middle\":\"VisibilityMessage--media-middle--+TqrE\",\"mediaMiddle\":\"VisibilityMessage--media-middle--+TqrE\",\"media-bottom\":\"VisibilityMessage--media-bottom--WybOb\",\"mediaBottom\":\"VisibilityMessage--media-bottom--WybOb\",\"list-media\":\"VisibilityMessage--list-media--kxFmF\",\"listMedia\":\"VisibilityMessage--list-media--kxFmF\",\"comments\":\"VisibilityMessage--comments--L8snw\",\"comment\":\"VisibilityMessage--comment--7PjBu\",\"thread\":\"VisibilityMessage--thread--Z-FSq\",\"feed-pagination\":\"VisibilityMessage--feed-pagination--tzXTJ\",\"feedPagination\":\"VisibilityMessage--feed-pagination--tzXTJ\",\"spinner\":\"VisibilityMessage--spinner--popYm\",\"no-entries\":\"VisibilityMessage--no-entries--myn0+\",\"noEntries\":\"VisibilityMessage--no-entries--myn0+\",\"entry-container\":\"VisibilityMessage--entry-container--2UEp9\",\"entryContainer\":\"VisibilityMessage--entry-container--2UEp9\",\"feed-entry\":\"VisibilityMessage--feed-entry--MV5hz\",\"feedEntry\":\"VisibilityMessage--feed-entry--MV5hz\",\"entry-inset\":\"VisibilityMessage--entry-inset--Th2rl\",\"entryInset\":\"VisibilityMessage--entry-inset--Th2rl\",\"entry-header\":\"VisibilityMessage--entry-header--kc-FQ\",\"entryHeader\":\"VisibilityMessage--entry-header--kc-FQ\",\"entry-body\":\"VisibilityMessage--entry-body--9NSEx\",\"entryBody\":\"VisibilityMessage--entry-body--9NSEx\",\"entry-media\":\"VisibilityMessage--entry-media--hgO+L\",\"entryMedia\":\"VisibilityMessage--entry-media--hgO+L\",\"entry-footer\":\"VisibilityMessage--entry-footer--LYhqq\",\"entryFooter\":\"VisibilityMessage--entry-footer--LYhqq\",\"entry-block\":\"VisibilityMessage--entry-block--8oQq0\",\"entryBlock\":\"VisibilityMessage--entry-block--8oQq0\",\"avatar\":\"VisibilityMessage--avatar--MhWwl\",\"avatar-img\":\"VisibilityMessage--avatar-img--jn2jz\",\"avatarImg\":\"VisibilityMessage--avatar-img--jn2jz\",\"card-margin\":\"VisibilityMessage--card-margin--sgnhy\",\"cardMargin\":\"VisibilityMessage--card-margin--sgnhy\",\"btn\":\"VisibilityMessage--btn--yTNgQ\",\"btn-link\":\"VisibilityMessage--btn-link---PSMi\",\"btnLink\":\"VisibilityMessage--btn-link---PSMi\",\"icon-wrapper\":\"VisibilityMessage--icon-wrapper--sTObz\",\"iconWrapper\":\"VisibilityMessage--icon-wrapper--sTObz\",\"visibility-section\":\"VisibilityMessage--visibility-section--02CD9\",\"visibilitySection\":\"VisibilityMessage--visibility-section--02CD9\",\"visibility-icon\":\"VisibilityMessage--visibility-icon--MW9SB\",\"visibilityIcon\":\"VisibilityMessage--visibility-icon--MW9SB\",\"fadeIn\":\"VisibilityMessage--fadeIn--Y+DFX\",\"newKudo\":\"VisibilityMessage--newKudo--oAECk\",\"enterFadeOut\":\"VisibilityMessage--enterFadeOut--sLsQO\"};","import React from 'react';\nimport PropTypes from 'prop-types';\nimport I18n from 'utils/I18n';\nimport SvgActionsLockClosedNormalXsmall from '@strava/icons/ActionsLockClosedNormalXsmall';\nimport SvgNavigationGroupNormalXsmall from '@strava/icons/NavigationGroupNormalXsmall';\nimport styles from './index.scss';\nimport { useFeedEntityContext } from '../../../state/FeedEntityContext';\nimport useFeedAnalytics from '../../../hooks/useFeedAnalytics';\nimport useFeedIntersectionObserver from '../../../hooks/useFeedIntersectionObserver';\n\nconst VisibilityMessage = ({ visibility }) => {\n const { inView, intersectionObserverRef } = useFeedIntersectionObserver({\n isParentFeedEntry: false\n });\n\n const { analyticProps } = useFeedEntityContext();\n useFeedAnalytics({\n ...analyticProps,\n element: 'privacy_banner',\n inView\n });\n\n let icon;\n let message;\n if (visibility === 'only_me') {\n icon = (\n \n \n \n );\n message = (\n \n {I18n.t('components.feed.module.private_activity_not_visible_html')}\n \n );\n } else {\n icon = (\n \n \n \n );\n message = (\n \n {I18n.t('components.feed.module.followers_activity_not_visible_html')}\n \n );\n }\n return (\n \n
    \n
    {icon}
    \n
    \n {message}\n \n );\n};\n\nVisibilityMessage.propTypes = {\n visibility: PropTypes.string.isRequired\n};\n\nexport default VisibilityMessage;\n","// extracted by mini-css-extract-plugin\nexport default {\"card\":\"HiddenStatIndicator--card--KesCj\",\"card-image-top\":\"HiddenStatIndicator--card-image-top--gRkGU\",\"cardImageTop\":\"HiddenStatIndicator--card-image-top--gRkGU\",\"card-block\":\"HiddenStatIndicator--card-block--yVtz0\",\"cardBlock\":\"HiddenStatIndicator--card-block--yVtz0\",\"card-header\":\"HiddenStatIndicator--card-header--Fp9KT\",\"cardHeader\":\"HiddenStatIndicator--card-header--Fp9KT\",\"card-body\":\"HiddenStatIndicator--card-body--uayga\",\"cardBody\":\"HiddenStatIndicator--card-body--uayga\",\"card-footer\":\"HiddenStatIndicator--card-footer--IWU2g\",\"cardFooter\":\"HiddenStatIndicator--card-footer--IWU2g\",\"card-icon\":\"HiddenStatIndicator--card-icon--Q2NgI\",\"cardIcon\":\"HiddenStatIndicator--card-icon--Q2NgI\",\"app-icon-wrapper\":\"HiddenStatIndicator--app-icon-wrapper--J10L7\",\"appIconWrapper\":\"HiddenStatIndicator--app-icon-wrapper--J10L7\",\"media\":\"HiddenStatIndicator--media--FS3JV\",\"media-content\":\"HiddenStatIndicator--media-content--knMuC\",\"mediaContent\":\"HiddenStatIndicator--media-content--knMuC\",\"media-body\":\"HiddenStatIndicator--media-body--b9s0v\",\"mediaBody\":\"HiddenStatIndicator--media-body--b9s0v\",\"media-object\":\"HiddenStatIndicator--media-object--pOq4p\",\"mediaObject\":\"HiddenStatIndicator--media-object--pOq4p\",\"media-left\":\"HiddenStatIndicator--media-left--Ibiza\",\"mediaLeft\":\"HiddenStatIndicator--media-left--Ibiza\",\"media-object-left\":\"HiddenStatIndicator--media-object-left--CEwmB\",\"mediaObjectLeft\":\"HiddenStatIndicator--media-object-left--CEwmB\",\"media-object-right\":\"HiddenStatIndicator--media-object-right--ThZbu\",\"mediaObjectRight\":\"HiddenStatIndicator--media-object-right--ThZbu\",\"media-right\":\"HiddenStatIndicator--media-right--g8QfM\",\"mediaRight\":\"HiddenStatIndicator--media-right--g8QfM\",\"media-actions\":\"HiddenStatIndicator--media-actions--pYGFd\",\"mediaActions\":\"HiddenStatIndicator--media-actions--pYGFd\",\"media-center\":\"HiddenStatIndicator--media-center--GxpVT\",\"mediaCenter\":\"HiddenStatIndicator--media-center--GxpVT\",\"media-middle\":\"HiddenStatIndicator--media-middle--PnY-Z\",\"mediaMiddle\":\"HiddenStatIndicator--media-middle--PnY-Z\",\"media-bottom\":\"HiddenStatIndicator--media-bottom--Z5b3z\",\"mediaBottom\":\"HiddenStatIndicator--media-bottom--Z5b3z\",\"list-media\":\"HiddenStatIndicator--list-media--Dw33K\",\"listMedia\":\"HiddenStatIndicator--list-media--Dw33K\",\"comments\":\"HiddenStatIndicator--comments--KNo+H\",\"comment\":\"HiddenStatIndicator--comment--dtp8B\",\"thread\":\"HiddenStatIndicator--thread--HG4yk\",\"feed-pagination\":\"HiddenStatIndicator--feed-pagination--5faNU\",\"feedPagination\":\"HiddenStatIndicator--feed-pagination--5faNU\",\"spinner\":\"HiddenStatIndicator--spinner--uLpMl\",\"no-entries\":\"HiddenStatIndicator--no-entries--88gmI\",\"noEntries\":\"HiddenStatIndicator--no-entries--88gmI\",\"entry-container\":\"HiddenStatIndicator--entry-container--fOLt-\",\"entryContainer\":\"HiddenStatIndicator--entry-container--fOLt-\",\"feed-entry\":\"HiddenStatIndicator--feed-entry--lHi7a\",\"feedEntry\":\"HiddenStatIndicator--feed-entry--lHi7a\",\"entry-inset\":\"HiddenStatIndicator--entry-inset--9-LtS\",\"entryInset\":\"HiddenStatIndicator--entry-inset--9-LtS\",\"entry-header\":\"HiddenStatIndicator--entry-header--NrRdY\",\"entryHeader\":\"HiddenStatIndicator--entry-header--NrRdY\",\"entry-body\":\"HiddenStatIndicator--entry-body--WunhJ\",\"entryBody\":\"HiddenStatIndicator--entry-body--WunhJ\",\"entry-media\":\"HiddenStatIndicator--entry-media--2HuGd\",\"entryMedia\":\"HiddenStatIndicator--entry-media--2HuGd\",\"entry-footer\":\"HiddenStatIndicator--entry-footer--NrCi1\",\"entryFooter\":\"HiddenStatIndicator--entry-footer--NrCi1\",\"entry-block\":\"HiddenStatIndicator--entry-block--MW4Tp\",\"entryBlock\":\"HiddenStatIndicator--entry-block--MW4Tp\",\"avatar\":\"HiddenStatIndicator--avatar--oVs51\",\"avatar-img\":\"HiddenStatIndicator--avatar-img--FJFlg\",\"avatarImg\":\"HiddenStatIndicator--avatar-img--FJFlg\",\"card-margin\":\"HiddenStatIndicator--card-margin--u+Ye+\",\"cardMargin\":\"HiddenStatIndicator--card-margin--u+Ye+\",\"btn\":\"HiddenStatIndicator--btn--IW236\",\"btn-link\":\"HiddenStatIndicator--btn-link--iW+ja\",\"btnLink\":\"HiddenStatIndicator--btn-link--iW+ja\",\"icon-wrapper\":\"HiddenStatIndicator--icon-wrapper--TG-tH\",\"iconWrapper\":\"HiddenStatIndicator--icon-wrapper--TG-tH\",\"visibility-section\":\"HiddenStatIndicator--visibility-section--B782s\",\"visibilitySection\":\"HiddenStatIndicator--visibility-section--B782s\",\"stat-indicator-section\":\"HiddenStatIndicator--stat-indicator-section--MdT34\",\"statIndicatorSection\":\"HiddenStatIndicator--stat-indicator-section--MdT34\",\"visibility-icon\":\"HiddenStatIndicator--visibility-icon--d65up\",\"visibilityIcon\":\"HiddenStatIndicator--visibility-icon--d65up\",\"stat-indicator-icon\":\"HiddenStatIndicator--stat-indicator-icon--Oswf9\",\"statIndicatorIcon\":\"HiddenStatIndicator--stat-indicator-icon--Oswf9\",\"fadeIn\":\"HiddenStatIndicator--fadeIn--EcpmC\",\"newKudo\":\"HiddenStatIndicator--newKudo--SSQ5g\",\"enterFadeOut\":\"HiddenStatIndicator--enterFadeOut--lynLX\"};","import React from 'react';\nimport PropTypes from 'prop-types';\nimport SvgActionsLockClosedNormalXsmall from '@strava/icons/ActionsLockClosedNormalXsmall';\nimport styles from './index.scss';\n\nconst HiddenStatIndicator = ({\n hiddenStatIndicatorString,\n showVisibilityMessage\n}) => {\n const sectionStyle = showVisibilityMessage\n ? styles.statIndicatorSection\n : styles.visibilitySection;\n const iconStyle = showVisibilityMessage\n ? styles.statIndicatorIcon\n : styles.visibilityIcon;\n\n return (\n
    \n
    \n
    \n \n \n \n
    \n
    \n \n {hiddenStatIndicatorString}\n \n
    \n );\n};\n\nHiddenStatIndicator.propTypes = {\n hiddenStatIndicatorString: PropTypes.string.isRequired,\n showVisibilityMessage: PropTypes.bool.isRequired\n};\n\nexport default HiddenStatIndicator;\n","// extracted by mini-css-extract-plugin\nexport default {\"feed-entry\":\"Card--feed-entry--eeHS5\",\"feedEntry\":\"Card--feed-entry--eeHS5\",\"card\":\"Card--card--8qT2W\",\"btn\":\"Card--btn--Uyv9E\",\"btn-link\":\"Card--btn-link--IyxTc\",\"btnLink\":\"Card--btn-link--IyxTc\"};","import React, { forwardRef } from 'react';\nimport PropTypes from 'prop-types';\nimport styles from './card.scss';\nimport { cursorDataProps } from '../../../../props/feed-prop-types';\n\nconst Card = forwardRef(\n ({ cursorData, children, className, ...options }, ref) => {\n const classNames = () => {\n const a = [styles.feedEntry, styles.card, className];\n return a;\n };\n\n return (\n \n {children}\n \n );\n }\n);\n\nCard.propTypes = {\n children: PropTypes.node.isRequired,\n cursorData: cursorDataProps.isRequired,\n className: PropTypes.string\n};\n\nCard.defaultProps = {\n className: null\n};\n\nexport default Card;\n","// extracted by mini-css-extract-plugin\nexport default {\"entry-body\":\"EntryBody--entry-body--taihW\",\"entryBody\":\"EntryBody--entry-body--taihW\",\"impression\":\"EntryBody--impression--iPn2c\",\"entry-inset\":\"EntryBody--entry-inset--SDU+i\",\"entryInset\":\"EntryBody--entry-inset--SDU+i\"};","import React from 'react';\nimport PropTypes from 'prop-types';\nimport styles from './entry-body.scss';\n\nconst EntryBody = ({ children, className, inset, impression, ...options }) => {\n const classNames = [styles.entryBody];\n if (className) {\n classNames.push(className);\n }\n if (inset) {\n classNames.push(styles.entryInset);\n }\n\n return (\n
    \n {/* Impression */}\n {impression && (\n \"\"\n )}\n {children}\n
    \n );\n};\n\nEntryBody.propTypes = {\n children: PropTypes.node.isRequired,\n className: PropTypes.string,\n impression: PropTypes.string,\n inset: PropTypes.bool\n};\n\nEntryBody.defaultProps = {\n className: null,\n inset: false,\n impression: null\n};\n\nexport default EntryBody;\n","// extracted by mini-css-extract-plugin\nexport default {\"entry-media\":\"EntryMedia--entry-media--iuGqt\",\"entryMedia\":\"EntryMedia--entry-media--iuGqt\",\"entry-inset\":\"EntryMedia--entry-inset--HqwRV\",\"entryInset\":\"EntryMedia--entry-inset--HqwRV\"};","import React from 'react';\nimport PropTypes from 'prop-types';\nimport styles from './entry-media.scss';\n\nconst EntryMedia = ({ children, className, inset, ...options }) => {\n const classNames = [styles.entryMedia];\n if (className) {\n classNames.push(className);\n }\n if (inset) {\n classNames.push(styles.entryInset);\n }\n\n return (\n
    \n {children}\n
    \n );\n};\n\nEntryMedia.propTypes = {\n children: PropTypes.node.isRequired,\n className: PropTypes.string,\n inset: PropTypes.bool\n};\n\nEntryMedia.defaultProps = {\n className: null,\n inset: false\n};\n\nexport default EntryMedia;\n","// extracted by mini-css-extract-plugin\nexport default {\"entry-footer\":\"EntryFooter--entry-footer--Gy+uP\",\"entryFooter\":\"EntryFooter--entry-footer--Gy+uP\",\"entry-inset\":\"EntryFooter--entry-inset--mB6FB\",\"entryInset\":\"EntryFooter--entry-inset--mB6FB\"};","import React from 'react';\nimport PropTypes from 'prop-types';\nimport styles from './entry-footer.scss';\n\nconst EntryFooter = ({ children, className, inset, ...options }) => {\n const classNames = [styles.entryFooter];\n if (inset) {\n classNames.push(styles.entryInset);\n }\n if (className) {\n classNames.push(className);\n }\n\n return (\n
    \n {children}\n
    \n );\n};\n\nEntryFooter.propTypes = {\n children: PropTypes.node.isRequired,\n className: PropTypes.string,\n inset: PropTypes.bool\n};\n\nEntryFooter.defaultProps = {\n className: null,\n inset: false\n};\n\nexport default EntryFooter;\n","import React, { useCallback, useEffect, useReducer } from 'react';\nimport PropTypes from 'prop-types';\nimport { isEmpty, snakeCase } from 'lodash-es';\nimport { useInView } from 'react-intersection-observer';\n\nimport ActivityIcon from 'components/ActivityIcon';\nimport I18n from 'utils/I18n';\nimport styles from './styles.scss';\nimport ActivityEntryBody from '../shared/ActivityEntryBody';\nimport MapVisPrompt from '../shared/MapVisPrompt';\nimport MaharajAchievementCelebration from '../shared/MaharajAchievementCelebration';\nimport PhotosAndMapImage from '../shared/PhotosAndMapImage';\nimport useFeedAnalytics from '../../hooks/useFeedAnalytics';\nimport useFeedIntersectionObserver from '../../hooks/useFeedIntersectionObserver';\nimport KudosAndComments from '../shared/KudosAndComments';\nimport {\n segAndBestEffortAchievementsProps,\n cumulativeGoalAchievementProps,\n kudosAndCommentsProps,\n feedTypeProps,\n mapProps,\n pageProps,\n photoListProps,\n powerAndSegmentGoalAchievementsProps,\n statsProps,\n viewingAthleteProps,\n cursorDataProps,\n indexProps,\n entityAthleteProps,\n timeAndLocationProps\n} from '../../props/feed-prop-types';\nimport FeedEntityContext from '../../state/FeedEntityContext';\nimport { init, reducer } from '../../state/feed-entity-reducer';\nimport { SET_AUTOPLAY_VIDEO_IN_VIEW } from '../../state/feed-entity-actions';\nimport { AUTOPLAY_MARGIN_TOP } from '../../constants';\nimport CommentDeleteAlertDialog from '../shared/CommentDeleteAlertDialog';\nimport { buildInitialState } from '../../state/feed-entity-init-state';\nimport HeaderWithOwnerMetadata from '../shared/HeaderWithOwnerMetadata/HeaderWithOwnerMetadata';\nimport VisibilityMessage from '../shared/VisibilityMessage';\nimport HiddenStatIndicator from '../shared/HiddenStatIndicator';\nimport Card from '../shared/media/Card';\nimport EntryBody from '../shared/media/EntryBody';\nimport Media from '../shared/media/Media';\nimport MediaLeft from '../shared/media/MediaLeft';\nimport MediaBody from '../shared/media/MediaBody';\nimport EntryMedia from '../shared/media/EntryMedia';\nimport EntryFooter from '../shared/media/EntryFooter';\n\nconst Activity = ({\n index,\n entity,\n activity,\n cursorData,\n page,\n feedType,\n viewingAthlete,\n clubId,\n athleteProfileId,\n reactionsEnabled,\n iconExperimentCohort,\n isAutoplayEnabled\n}) => {\n const {\n avatarUrl,\n athleteName,\n athleteId,\n memberType,\n firstName\n } = activity.athlete;\n\n const {\n activityName,\n id: activityId,\n flagged,\n ownedByCurrentAthlete,\n segAndBestEffortAchievements,\n powerAndSegmentGoalAchievements,\n cumulativeGoalAchievement,\n type: sportType,\n stats,\n description,\n descriptionMentionedAthleteIds,\n mapVisPrompt,\n maharajAchievement,\n isVirtual,\n isCommute,\n workoutType,\n privacyTagKey,\n shareable,\n twitterUrl,\n isBoosted,\n visibility,\n hiddenStatIndicatorString,\n mapAndPhotos,\n embedDropdownEnabled\n } = activity;\n\n const analyticProps = {\n page,\n entity,\n entityId: activityId,\n athleteProfileId,\n feedType,\n index,\n viewingAthleteId: viewingAthlete.id,\n clubId,\n properties: {\n mentioned_athletes: descriptionMentionedAthleteIds || []\n }\n };\n\n const { inView, intersectionObserverRef } = useFeedIntersectionObserver({\n index,\n isParentFeedEntry: true\n });\n\n const { trackAnalytics } = useFeedAnalytics({\n ...analyticProps,\n inView\n });\n\n const [entityState, dispatch] = useReducer(\n reducer,\n buildInitialState({\n trackAnalytics,\n comments: { [activityId]: activity.kudosAndComments.comments },\n entity: snakeCase(entity),\n entityId: activityId,\n isAutoplayEnabled\n }),\n init\n );\n\n const providerState = {\n entityState,\n dispatch,\n analyticProps\n };\n\n const translatedSportType = I18n.t(\n `strava.activities.types_v2.${sportType.toLowerCase()}`\n );\n\n const buildEntryBody = () => {\n const elements = [];\n // activity icon\n elements.push(\n \n
    \n \n
    \n
    \n );\n // activity title, description, stats and achievements\n elements.push(\n \n \n \n );\n return elements;\n };\n\n const entityOwner = {\n displayImage: avatarUrl,\n name: athleteName,\n memberType,\n profileUrl: `/athletes/${athleteId}`,\n type: 'athlete'\n };\n\n const showVisibilityMessage =\n ownedByCurrentAthlete && visibility !== 'everyone';\n\n const showHiddenStatIndicator =\n ownedByCurrentAthlete && hiddenStatIndicatorString !== null;\n\n const pageHeight =\n window.innerHeight || document.documentElement.clientHeight;\n const [inViewAutoPlayRef, inViewAutoPlay] = useInView({\n threshold: 0,\n // 11 here is the gap between feed entries -1px to make sure that two feed\n // entries never overlap and preventing two videos playing at the same time.\n rootMargin: `-${AUTOPLAY_MARGIN_TOP}px 0px -${pageHeight -\n (AUTOPLAY_MARGIN_TOP + 11)}px 0px`\n });\n\n const { autoPlayVideos } = entityState;\n const autoPlayVideo = autoPlayVideos[activityId];\n useEffect(() => {\n if (isAutoplayEnabled && autoPlayVideo) {\n if (inViewAutoPlay) {\n autoPlayVideo.play();\n dispatch({\n type: SET_AUTOPLAY_VIDEO_IN_VIEW,\n payload: { autoPlayVideoInView: true }\n });\n } else {\n autoPlayVideo.pause();\n dispatch({\n type: SET_AUTOPLAY_VIDEO_IN_VIEW,\n payload: { autoPlayVideoInView: false }\n });\n }\n }\n }, [isAutoplayEnabled, autoPlayVideo, inViewAutoPlay]);\n\n const observerRes = useCallback(\n (node) => {\n if (isAutoplayEnabled) {\n inViewAutoPlayRef(node);\n }\n intersectionObserverRef(node);\n },\n [intersectionObserverRef, inViewAutoPlayRef, isAutoplayEnabled]\n );\n\n const buildEntryFooter = () => (\n \n {showHiddenStatIndicator && (\n \n )}\n {showVisibilityMessage && }\n \n \n );\n\n return (\n \n \n {/* Entry Header - avatar, location, social actions */}\n \n\n {/* Entry Body = activity title, description, stats and achievements */}\n \n {buildEntryBody()}\n \n\n {/* Map Visibility feature education row prompt */}\n {!isEmpty(mapVisPrompt) && (\n \n \n \n )}\n\n {/* Maharaj achievements */}\n {/* We are prioritizing the map visibility feature education row prompt\n over these achievements for the duration of the map-visibility-safe-by-default experiment */}\n {!isEmpty(maharajAchievement) && isEmpty(mapVisPrompt) && (\n \n \n \n )}\n\n {/* Map and Photos */}\n {!isEmpty(mapAndPhotos) && (\n \n \n \n )}\n\n {/* Entry Footer - Visibility Message , Kudos & Comments */}\n {buildEntryFooter()}\n \n \n \n );\n};\n\nActivity.propTypes = {\n // feed entry types could be Activity, group_activity, Post etc\n entity: PropTypes.oneOf(['Activity']).isRequired,\n // range of number 0...19 representing rows returned by the server per feed load\n index: indexProps.isRequired,\n activity: PropTypes.shape({\n activityName: PropTypes.string,\n id: PropTypes.string,\n flagged: PropTypes.bool,\n ownedByCurrentAthlete: PropTypes.bool,\n segAndBestEffortAchievements: segAndBestEffortAchievementsProps,\n powerAndSegmentGoalAchievements: powerAndSegmentGoalAchievementsProps,\n cumulativeGoalAchievement: cumulativeGoalAchievementProps,\n type: PropTypes.string,\n stats: statsProps,\n description: PropTypes.string,\n descriptionMentionedAthleteIds: PropTypes.arrayOf(PropTypes.string),\n mapVisPrompt: PropTypes.shape({\n hideAnywhereSetting: PropTypes.string,\n paths: PropTypes.shape({\n promptImpression: PropTypes.string,\n hideAnywhere: PropTypes.string\n }),\n experimentVar: PropTypes.string\n }),\n maharajAchievement: PropTypes.shape({\n image: PropTypes.string,\n image_caption: PropTypes.string,\n subtitle: PropTypes.string,\n text: PropTypes.string,\n url: PropTypes.string\n }),\n isVirtual: PropTypes.bool.isRequired,\n isCommute: PropTypes.bool.isRequired,\n workoutType: PropTypes.string,\n privacyTagKey: PropTypes.string,\n shareable: PropTypes.bool.isRequired,\n twitterUrl: PropTypes.string.isRequired,\n isBoosted: PropTypes.bool,\n visibility: PropTypes.string.isRequired,\n hiddenStatIndicatorString: PropTypes.string,\n athlete: entityAthleteProps.isRequired,\n mapAndPhotos: PropTypes.shape({\n activityMap: mapProps,\n isRoutable: PropTypes.bool,\n photoList: photoListProps\n }).isRequired,\n timeAndLocation: timeAndLocationProps.isRequired,\n kudosAndComments: kudosAndCommentsProps.isRequired,\n embedDropdownEnabled: PropTypes.bool.isRequired\n }).isRequired,\n cursorData: cursorDataProps.isRequired,\n page: pageProps.isRequired,\n feedType: feedTypeProps.isRequired,\n viewingAthlete: viewingAthleteProps.isRequired,\n reactionsEnabled: PropTypes.bool.isRequired,\n clubId: PropTypes.string.isRequired,\n athleteProfileId: PropTypes.string.isRequired,\n iconExperimentCohort: PropTypes.string,\n isAutoplayEnabled: PropTypes.bool\n};\n\nActivity.defaultProps = {\n iconExperimentCohort: null,\n isAutoplayEnabled: true\n};\n\nexport default Activity;\n","// extracted by mini-css-extract-plugin\nexport default {\"entry-title\":\"Post--entry-title--lQghn\",\"entryTitle\":\"Post--entry-title--lQghn\",\"post-body-title\":\"Post--post-body-title--bhzr+\",\"postBodyTitle\":\"Post--post-body-title--bhzr+\",\"entry-body\":\"Post--entry-body--N2wId\",\"entryBody\":\"Post--entry-body--N2wId\",\"post-body\":\"Post--post-body--tc3Hp\",\"postBody\":\"Post--post-body--tc3Hp\",\"shared-content-container\":\"Post--shared-content-container--7Kkbr\",\"sharedContentContainer\":\"Post--shared-content-container--7Kkbr\",\"shared-content\":\"Post--shared-content--iXqCY\",\"sharedContent\":\"Post--shared-content--iXqCY\",\"shared-content-image\":\"Post--shared-content-image--u0E0C\",\"sharedContentImage\":\"Post--shared-content-image--u0E0C\",\"shared-content-thumbnail\":\"Post--shared-content-thumbnail--2evyX\",\"sharedContentThumbnail\":\"Post--shared-content-thumbnail--2evyX\",\"shared-content-text\":\"Post--shared-content-text--cikP1\",\"sharedContentText\":\"Post--shared-content-text--cikP1\",\"shared-content-header\":\"Post--shared-content-header--MgPrH\",\"sharedContentHeader\":\"Post--shared-content-header--MgPrH\",\"shared-content-description\":\"Post--shared-content-description--+gJa8\",\"sharedContentDescription\":\"Post--shared-content-description--+gJa8\",\"shared-content-domain\":\"Post--shared-content-domain--8lN55\",\"sharedContentDomain\":\"Post--shared-content-domain--8lN55\",\"shared-video\":\"Post--shared-video--+g780\",\"sharedVideo\":\"Post--shared-video--+g780\",\"shared-content-video-icon\":\"Post--shared-content-video-icon--rrp4F\",\"sharedContentVideoIcon\":\"Post--shared-content-video-icon--rrp4F\"};","import React, { useReducer } from 'react';\nimport PropTypes from 'prop-types';\nimport { Markup } from 'interweave';\nimport I18n from 'utils/I18n';\nimport { snakeCase } from 'lodash-es';\nimport styles from './styles.scss';\nimport useFeedAnalytics from '../../hooks/useFeedAnalytics';\nimport {\n cursorDataProps,\n indexProps,\n pageProps,\n feedTypeProps,\n viewingAthleteProps,\n commentsProps,\n timeAndLocationProps,\n highlightedKudosersProps\n} from '../../props/feed-prop-types';\nimport FeedEntityContext from '../../state/FeedEntityContext';\nimport { init, reducer } from '../../state/feed-entity-reducer';\nimport { buildInitialState } from '../../state/feed-entity-init-state';\nimport CommentDeleteAlertDialog from '../shared/CommentDeleteAlertDialog';\nimport HeaderWithOwnerMetadata from '../shared/HeaderWithOwnerMetadata/HeaderWithOwnerMetadata';\nimport videoIcon from './video-icon.png';\nimport PhotosAndMapImage from '../shared/PhotosAndMapImage';\nimport KudosAndComments from '../shared/KudosAndComments';\nimport { getPhotoWithMaxDimension } from '../../utils';\nimport Card from '../shared/media/Card';\nimport EntryMedia from '../shared/media/EntryMedia';\nimport EntryBody from '../shared/media/EntryBody';\nimport EntryFooter from '../shared/media/EntryFooter';\nimport useFeedIntersectionObserver from '../../hooks/useFeedIntersectionObserver';\n\nconst Post = ({\n viewingAthlete,\n clubId,\n post,\n page,\n entity,\n feedType,\n index,\n cursorData,\n timeAndLocation,\n body,\n sharedContents,\n athleteProfileId,\n reactionsEnabled,\n iconExperimentCohort\n}) => {\n const analyticProps = {\n page,\n entity,\n entityId: post.entity_id,\n feedType,\n index,\n athleteProfileId,\n viewingAthleteId: viewingAthlete.id,\n clubId\n };\n\n const { inView, intersectionObserverRef } = useFeedIntersectionObserver({\n index,\n isParentFeedEntry: true\n });\n\n const { trackAnalytics } = useFeedAnalytics({\n ...analyticProps,\n inView\n });\n\n const [entityState, dispatch] = useReducer(\n reducer,\n buildInitialState({\n trackAnalytics,\n comments: { [post.entity_id]: post.comments },\n entity: snakeCase(entity),\n entityId: post.entity_id\n }),\n init\n );\n const providerState = {\n entityState,\n dispatch,\n analyticProps\n };\n\n const profileUrl =\n post.path_prefix && post.path_prefix.concat(post.originator_id);\n\n const entityOwner = {\n displayImage: post.originator_avatar_url,\n memberType: post.member_type,\n name: post.originator_name,\n profileUrl,\n type: post.parent_type.toLowerCase()\n };\n\n const entryExpandedLink = () => {\n const videoThumbnailIcon = I18n.t(\n 'templates.feed.posts.video_thumbnail_icon'\n );\n return sharedContents.map((content) => {\n // eg. expected scss class : shared-video is referenced as sharedVideo in JSX\n const typeClass = `shared${content.type.charAt(0).toUpperCase() +\n content.type.slice(1)}`;\n return (\n \n trackAnalytics({\n action: 'click',\n element: 'expanded_link'\n })\n }\n >\n
    \n {/* thumbnail image */}\n {content.thumbnail_url && (\n
    \n {content.type === 'video' && (\n \n )}\n \n
    \n )}\n {/* description */}\n
    \n

    {content.title}

    \n

    \n {content.description}\n

    \n

    {content.hostname}

    \n
    \n
    \n \n );\n });\n };\n\n const buildEntryBody = () => {\n let bodyStyle = [styles.postBody];\n if (!post.summary) {\n bodyStyle.push(styles.postBodyTitle);\n }\n bodyStyle = bodyStyle.join(' ');\n return (\n \n trackAnalytics({\n action: 'click',\n element: 'body'\n })\n }\n >\n {post.summary && (\n

    \n \n

    \n )}\n
    \n \n
    \n \n );\n };\n\n const highlightPhoto = () => {\n const photoUrlHash = post.primary_photo.urls;\n // max dimension image url\n const photoUrl = getPhotoWithMaxDimension(photoUrlHash);\n return {\n large: photoUrl,\n caption_escaped: post.primary_photo.caption,\n photo_id: post.primary_photo.unique_id\n };\n };\n\n return (\n \n \n {/* Entry Header - avatar, location, social actions */}\n \n {/* Summary, Body and Expanded Links */}\n\n {/* Summary & Body */}\n {buildEntryBody()}\n\n {/* Expanded Link */}\n {entryExpandedLink()}\n\n {/* Primary Photo */}\n {post.primary_photo && (\n \n \n trackAnalytics({\n action: 'click',\n element: 'image'\n })\n }\n >\n \n \n \n )}\n {/* Comments & Kudos */}\n \n \n \n \n \n \n );\n};\n\nPost.propTypes = {\n // feed entry types could be Activity, group_activity, Post etc\n entity: PropTypes.oneOf(['Post']).isRequired,\n feedType: feedTypeProps.isRequired,\n page: pageProps.isRequired,\n cursorData: cursorDataProps.isRequired,\n index: indexProps.isRequired,\n viewingAthlete: viewingAthleteProps.isRequired,\n reactionsEnabled: PropTypes.bool.isRequired,\n iconExperimentCohort: PropTypes.string,\n clubId: PropTypes.string.isRequired,\n post: PropTypes.shape({\n entity_id: PropTypes.number.isRequired,\n comments: commentsProps,\n originator_id: PropTypes.number.isRequired,\n originator_avatar_url: PropTypes.string,\n originator_name: PropTypes.string,\n parent_type: PropTypes.string,\n member_type: PropTypes.string,\n summary: PropTypes.string,\n is_boosted: PropTypes.bool,\n is_sharable: PropTypes.bool,\n twitter_url: PropTypes.string,\n path_prefix: PropTypes.string,\n primary_photo: PropTypes.shape({\n urls: PropTypes.shape({}),\n large: PropTypes.string,\n caption: PropTypes.string,\n unique_id: PropTypes.string\n }),\n can_kudo: PropTypes.bool,\n kudos_count: PropTypes.number,\n highlighted_kudosers: highlightedKudosersProps,\n comments_enabled: PropTypes.bool\n }).isRequired,\n body: PropTypes.string.isRequired,\n sharedContents: PropTypes.arrayOf(\n PropTypes.shape({\n description: PropTypes.string,\n id: PropTypes.number,\n post_id: PropTypes.number,\n thumbnail_url: PropTypes.string,\n title: PropTypes.string,\n type: PropTypes.string,\n url: PropTypes.string,\n hostname: PropTypes.string\n })\n ),\n timeAndLocation: timeAndLocationProps.isRequired,\n athleteProfileId: PropTypes.string.isRequired\n};\n\nPost.defaultProps = {\n sharedContents: [],\n iconExperimentCohort: null\n};\n\nexport default Post;\n","// extracted by mini-css-extract-plugin\nexport default {\"logo\":\"FancyPromo--logo--AeMP3\"};","// extracted by mini-css-extract-plugin\nexport default {\"entry-media-container\":\"PromoEntry--entry-media-container--doFxb\",\"entryMediaContainer\":\"PromoEntry--entry-media-container--doFxb\",\"entry-image\":\"PromoEntry--entry-image--kwUzd\",\"entryImage\":\"PromoEntry--entry-image--kwUzd\",\"background-header-image\":\"PromoEntry--background-header-image--s7d0h\",\"backgroundHeaderImage\":\"PromoEntry--background-header-image--s7d0h\",\"cta-btn\":\"PromoEntry--cta-btn--Vhcz2\",\"ctaBtn\":\"PromoEntry--cta-btn--Vhcz2\",\"details\":\"PromoEntry--details--4D-wH\"};","import PropTypes from 'prop-types';\nimport React from 'react';\nimport Button from '@strava/ui/Button';\nimport createNetworkingClient from 'utils/networking-client';\nimport styles from './index.scss';\nimport { useFeedEntityContext } from '../../../state/FeedEntityContext';\nimport { indexProps, cursorDataProps } from '../../../props/feed-prop-types';\nimport Card from '../media/Card';\nimport EntryBody from '../media/EntryBody';\nimport Media from '../media/Media';\nimport MediaLeft from '../media/MediaLeft';\nimport MediaBody from '../media/MediaBody';\n\nfunction BackgroundHeaderImage({ backgroundImage }) {\n return backgroundImage ? (\n
    \n
    \n \n
    \n
    \n ) : null;\n}\n\nBackgroundHeaderImage.propTypes = {\n backgroundImage: PropTypes.string.isRequired\n};\n\nconst PromoEntry = ({\n entity,\n description,\n badge,\n backgroundImage,\n impression,\n click,\n headline,\n intersectionObserverRef,\n cursorData,\n index,\n ctaText,\n ctaUrl\n}) => {\n const { entityState } = useFeedEntityContext();\n\n return (\n \n {/* Background Header Image for Fancy Promo */}\n \n\n \n \n {/* Left Logo Badge */}\n {badge}\n\n {/* Right Main Body */}\n \n {\n createNetworkingClient({ baseUrl: null, headers: null }).get(\n click\n );\n entityState.trackAnalytics({\n action: 'click',\n element: `${entity.toLowerCase()}_headline_and_description`\n });\n }}\n >\n

    {headline}

    \n
    {description}
    \n \n\n {\n createNetworkingClient({ baseUrl: null, headers: null }).get(\n click\n );\n entityState.trackAnalytics({\n action: 'click',\n element: `${entity.toLowerCase()}_cta_button`\n });\n window.location.href = ctaUrl;\n }}\n >\n {ctaText}\n \n
    \n
    \n
    \n \n );\n};\n\nPromoEntry.propTypes = {\n entity: PropTypes.oneOf(['FancyPromo', 'SimplePromo']).isRequired,\n description: PropTypes.string.isRequired,\n impression: PropTypes.string.isRequired,\n click: PropTypes.string.isRequired,\n ctaText: PropTypes.string.isRequired,\n ctaUrl: PropTypes.string.isRequired,\n backgroundImage: PropTypes.string,\n badge: PropTypes.node.isRequired,\n headline: PropTypes.string.isRequired,\n intersectionObserverRef: PropTypes.func.isRequired,\n cursorData: cursorDataProps.isRequired,\n index: indexProps.isRequired\n};\n\nPromoEntry.defaultProps = {\n backgroundImage: ''\n};\n\nexport default PromoEntry;\n","import React, { useReducer } from 'react';\nimport PropTypes from 'prop-types';\nimport createNetworkingClient from 'utils/networking-client';\nimport styles from './styles.scss';\nimport useFeedAnalytics from '../../hooks/useFeedAnalytics';\nimport {\n pageProps,\n viewingAthleteProps,\n cursorDataProps,\n feedTypeProps,\n indexProps\n} from '../../props/feed-prop-types';\nimport FeedEntityContext from '../../state/FeedEntityContext';\nimport { init, reducer } from '../../state/feed-entity-reducer';\nimport { buildInitialState } from '../../state/feed-entity-init-state';\n\nimport PromoEntry from '../shared/PromoEntry';\nimport useFeedIntersectionObserver from '../../hooks/useFeedIntersectionObserver';\n\nconst FancyPromo = ({\n viewingAthlete,\n clubId,\n page,\n entity,\n feedType,\n index,\n cursorData,\n rowData,\n athleteProfileId\n}) => {\n const { inView, intersectionObserverRef } = useFeedIntersectionObserver({\n index,\n isParentFeedEntry: true\n });\n\n const { trackAnalytics } = useFeedAnalytics({\n page,\n entity,\n entityId: rowData.trackable_id, // TODO use entityId computed in Feed.js once react feed container goes to prod\n athleteProfileId,\n feedType,\n index,\n viewingAthleteId: viewingAthlete.id,\n clubId,\n inView\n });\n\n const [entityState] = useReducer(\n reducer,\n buildInitialState({\n trackAnalytics\n }),\n init\n );\n\n const providerState = {\n entityState\n };\n\n const logo = (\n {\n createNetworkingClient({ baseUrl: null, headers: null }).get(\n rowData.click.resource\n );\n entityState.trackAnalytics({\n action: 'click',\n element: 'fancy_promo_image'\n });\n }}\n >\n \n \n );\n\n const bodyProps = {\n entity,\n badge: logo,\n backgroundImage: rowData.background_image,\n impression: rowData.impression.resource,\n click: rowData.click.resource,\n headline: rowData.headline,\n description: rowData.description,\n ctaUrl: rowData.cta_action.resource,\n intersectionObserverRef,\n index,\n cursorData,\n viewingAthlete,\n ctaText: rowData.cta_text\n };\n\n return (\n \n \n \n );\n};\n\nFancyPromo.propTypes = {\n // feed entity could be Activity, group_activity, Post etc\n entity: PropTypes.oneOf(['FancyPromo', 'SimplePromo']).isRequired,\n viewingAthlete: viewingAthleteProps.isRequired,\n clubId: PropTypes.string.isRequired,\n athleteProfileId: PropTypes.string.isRequired,\n page: pageProps.isRequired,\n cursorData: cursorDataProps.isRequired,\n feedType: feedTypeProps.isRequired,\n // range of number 0...19 representing rows returned by the server per feed load\n index: indexProps.isRequired,\n rowData: PropTypes.shape({\n headline: PropTypes.string.isRequired,\n description: PropTypes.string.isRequired,\n trackable_id: PropTypes.string,\n image: PropTypes.string,\n impression: PropTypes.shape({\n resource: PropTypes.string\n }),\n click: PropTypes.shape({\n resource: PropTypes.string\n }),\n background_image: PropTypes.string,\n cta_text: PropTypes.string,\n cta_action: PropTypes.shape({\n resource: PropTypes.string\n })\n }).isRequired\n};\n\nexport default FancyPromo;\n","// extracted by mini-css-extract-plugin\nexport default {\"cta-btn\":\"PerformanceGoalSingleView--cta-btn--GYiao\",\"ctaBtn\":\"PerformanceGoalSingleView--cta-btn--GYiao\",\"entry-title\":\"PerformanceGoalSingleView--entry-title--qTms+\",\"entryTitle\":\"PerformanceGoalSingleView--entry-title--qTms+\"};","import PropTypes from 'prop-types';\nimport React from 'react';\nimport { LinkButton } from '@strava/ui/Button';\nimport { Markup } from 'interweave';\nimport I18n from 'utils/I18n';\nimport { useFeedEntityContext } from '../../../state/FeedEntityContext';\nimport {\n indexProps,\n cursorDataProps,\n viewingAthleteProps,\n timeAndLocationProps\n} from '../../../props/feed-prop-types';\nimport HeaderWithOwnerMetadata from '../HeaderWithOwnerMetadata/HeaderWithOwnerMetadata';\nimport styles from './index.scss';\n\nimport Card from '../media/Card';\nimport EntryBody from '../media/EntryBody';\n\nconst PerformanceGoalSingleView = ({\n entity,\n entityId,\n intersectionObserverRef,\n cursorData,\n index,\n viewingAthlete,\n shareable,\n twitterUrl,\n isBoosted,\n timeAndLocation,\n goalEntries\n}) => {\n const { entityState } = useFeedEntityContext();\n\n const goalEntry = goalEntries[0];\n const joinable = viewingAthlete.id !== goalEntry.athlete_id.toString(); // Cast to string to ensure that both are strings\n const entityOwner = {\n displayImage: goalEntry.athlete_avatar_url,\n name: goalEntry.athlete_display_name,\n memberType: goalEntry.athlete_member_type,\n profileUrl: `/athletes/${goalEntry.athlete_id}`,\n type: 'athlete'\n };\n\n return (\n \n \n \n

    \n \n

    \n {joinable && (\n {\n entityState.trackAnalytics({\n action: 'click',\n element: `${entity.toLowerCase()}_join_goal`\n });\n }}\n >\n {I18n.t(\n 'components.feed.performance_goal_created_single_view.join_goal'\n )}\n \n )}\n
    \n \n );\n};\n\nPerformanceGoalSingleView.propTypes = {\n entity: PropTypes.oneOf(['PerformanceGoalCreated']).isRequired,\n entityId: PropTypes.number.isRequired,\n intersectionObserverRef: PropTypes.func.isRequired,\n cursorData: cursorDataProps.isRequired,\n index: indexProps.isRequired,\n viewingAthlete: viewingAthleteProps.isRequired,\n shareable: PropTypes.bool,\n twitterUrl: PropTypes.string.isRequired,\n isBoosted: PropTypes.bool,\n timeAndLocation: timeAndLocationProps.isRequired,\n goalEntries: PropTypes.arrayOf(\n PropTypes.shape({\n shareable: PropTypes.bool,\n is_boosted: PropTypes.bool,\n twitter_url: PropTypes.string.isRequired,\n entity_id: PropTypes.number.isRequired,\n description: PropTypes.string.isRequired,\n athlete_feed_entry_id: PropTypes.number.isRequired,\n athlete_id: PropTypes.number.isRequired,\n goal_path: PropTypes.string.isRequired,\n athlete_avatar_url: PropTypes.string.isRequired,\n athlete_member_type: PropTypes.string.isRequired,\n athlete_display_name: PropTypes.string.isRequired\n })\n ).isRequired\n};\n\nPerformanceGoalSingleView.defaultProps = {\n isBoosted: false,\n shareable: false\n};\n\nexport default PerformanceGoalSingleView;\n","// extracted by mini-css-extract-plugin\nexport default {\"first-goal-entry\":\"PerformanceGoalMultiView--first-goal-entry--PhseN\",\"firstGoalEntry\":\"PerformanceGoalMultiView--first-goal-entry--PhseN\",\"entry-body\":\"PerformanceGoalMultiView--entry-body--NjrS3\",\"entryBody\":\"PerformanceGoalMultiView--entry-body--NjrS3\",\"hidden\":\"PerformanceGoalMultiView--hidden--Mi-Vv\",\"show\":\"PerformanceGoalMultiView--show--Rcpqt\",\"join-btn\":\"PerformanceGoalMultiView--join-btn--pH9v5\",\"joinBtn\":\"PerformanceGoalMultiView--join-btn--pH9v5\",\"show-all-entries\":\"PerformanceGoalMultiView--show-all-entries--WUnMz\",\"showAllEntries\":\"PerformanceGoalMultiView--show-all-entries--WUnMz\"};","// extracted by mini-css-extract-plugin\nexport default {\"card\":\"GoalEntry--card--Mou-C\",\"card-image-top\":\"GoalEntry--card-image-top--yKzm1\",\"cardImageTop\":\"GoalEntry--card-image-top--yKzm1\",\"card-block\":\"GoalEntry--card-block--t7UBH\",\"cardBlock\":\"GoalEntry--card-block--t7UBH\",\"card-header\":\"GoalEntry--card-header--MUm-8\",\"cardHeader\":\"GoalEntry--card-header--MUm-8\",\"card-body\":\"GoalEntry--card-body--u+6QL\",\"cardBody\":\"GoalEntry--card-body--u+6QL\",\"card-footer\":\"GoalEntry--card-footer--n9y58\",\"cardFooter\":\"GoalEntry--card-footer--n9y58\",\"card-icon\":\"GoalEntry--card-icon--JmHLs\",\"cardIcon\":\"GoalEntry--card-icon--JmHLs\",\"app-icon-wrapper\":\"GoalEntry--app-icon-wrapper--OZqwW\",\"appIconWrapper\":\"GoalEntry--app-icon-wrapper--OZqwW\",\"media\":\"GoalEntry--media--5OPdx\",\"media-content\":\"GoalEntry--media-content---ur5Z\",\"mediaContent\":\"GoalEntry--media-content---ur5Z\",\"media-body\":\"GoalEntry--media-body--NGGzl\",\"mediaBody\":\"GoalEntry--media-body--NGGzl\",\"media-object\":\"GoalEntry--media-object--gkpre\",\"mediaObject\":\"GoalEntry--media-object--gkpre\",\"media-left\":\"GoalEntry--media-left--rqo-1\",\"mediaLeft\":\"GoalEntry--media-left--rqo-1\",\"media-object-left\":\"GoalEntry--media-object-left--MySIe\",\"mediaObjectLeft\":\"GoalEntry--media-object-left--MySIe\",\"media-object-right\":\"GoalEntry--media-object-right--vPweg\",\"mediaObjectRight\":\"GoalEntry--media-object-right--vPweg\",\"media-right\":\"GoalEntry--media-right--fXAa3\",\"mediaRight\":\"GoalEntry--media-right--fXAa3\",\"media-actions\":\"GoalEntry--media-actions--DV-vw\",\"mediaActions\":\"GoalEntry--media-actions--DV-vw\",\"media-center\":\"GoalEntry--media-center--NGJl9\",\"mediaCenter\":\"GoalEntry--media-center--NGJl9\",\"media-middle\":\"GoalEntry--media-middle--ydcF-\",\"mediaMiddle\":\"GoalEntry--media-middle--ydcF-\",\"media-bottom\":\"GoalEntry--media-bottom--nui0b\",\"mediaBottom\":\"GoalEntry--media-bottom--nui0b\",\"list-media\":\"GoalEntry--list-media---V3JB\",\"listMedia\":\"GoalEntry--list-media---V3JB\",\"comments\":\"GoalEntry--comments--DyP7P\",\"comment\":\"GoalEntry--comment--MBwt-\",\"thread\":\"GoalEntry--thread--TyUGr\",\"feed-pagination\":\"GoalEntry--feed-pagination--F3xxB\",\"feedPagination\":\"GoalEntry--feed-pagination--F3xxB\",\"spinner\":\"GoalEntry--spinner--01l2Y\",\"no-entries\":\"GoalEntry--no-entries--zwhRQ\",\"noEntries\":\"GoalEntry--no-entries--zwhRQ\",\"entry-container\":\"GoalEntry--entry-container--cIK3N\",\"entryContainer\":\"GoalEntry--entry-container--cIK3N\",\"feed-entry\":\"GoalEntry--feed-entry--WIdLj\",\"feedEntry\":\"GoalEntry--feed-entry--WIdLj\",\"entry-inset\":\"GoalEntry--entry-inset--eHZp+\",\"entryInset\":\"GoalEntry--entry-inset--eHZp+\",\"entry-header\":\"GoalEntry--entry-header--NRMKY\",\"entryHeader\":\"GoalEntry--entry-header--NRMKY\",\"entry-body\":\"GoalEntry--entry-body--rWg85\",\"entryBody\":\"GoalEntry--entry-body--rWg85\",\"entry-media\":\"GoalEntry--entry-media--MFMGv\",\"entryMedia\":\"GoalEntry--entry-media--MFMGv\",\"entry-footer\":\"GoalEntry--entry-footer--Fw+xq\",\"entryFooter\":\"GoalEntry--entry-footer--Fw+xq\",\"entry-block\":\"GoalEntry--entry-block--K0hDi\",\"entryBlock\":\"GoalEntry--entry-block--K0hDi\",\"avatar\":\"GoalEntry--avatar--OeHbQ\",\"avatar-img\":\"GoalEntry--avatar-img--zV2Ex\",\"avatarImg\":\"GoalEntry--avatar-img--zV2Ex\",\"card-margin\":\"GoalEntry--card-margin--LgcEu\",\"cardMargin\":\"GoalEntry--card-margin--LgcEu\",\"btn\":\"GoalEntry--btn--modpu\",\"btn-link\":\"GoalEntry--btn-link--WOM-+\",\"btnLink\":\"GoalEntry--btn-link--WOM-+\",\"icon\":\"GoalEntry--icon--J2Ma6\",\"entry-title\":\"GoalEntry--entry-title--CMO71\",\"entryTitle\":\"GoalEntry--entry-title--CMO71\",\"goal-entry\":\"GoalEntry--goal-entry--tEx23\",\"goalEntry\":\"GoalEntry--goal-entry--tEx23\",\"fadeIn\":\"GoalEntry--fadeIn--8mDPu\",\"newKudo\":\"GoalEntry--newKudo--E0xnF\",\"enterFadeOut\":\"GoalEntry--enterFadeOut--SRKKu\"};","import PropTypes from 'prop-types';\nimport React from 'react';\nimport { Markup } from 'interweave';\nimport styles from './index.scss';\n\nconst GoalEntry = ({ iconSrc, iconUrl, iconAlt, description }) => {\n return (\n
    \n
    \n {/* Left Logo Badge */}\n
    \n \n {iconAlt}\n \n
    \n\n {/* Right Main Body */}\n
    \n
    \n \n
    \n
    \n
    \n
    \n );\n};\n\nGoalEntry.propTypes = {\n iconSrc: PropTypes.string.isRequired,\n iconUrl: PropTypes.string.isRequired,\n iconAlt: PropTypes.string.isRequired,\n description: PropTypes.string.isRequired\n};\n\nexport default GoalEntry;\n","import PropTypes from 'prop-types';\nimport React, { useState } from 'react';\nimport I18n from 'utils/I18n';\nimport Button, { LinkButton } from '@strava/ui/Button';\nimport { useFeedEntityContext } from '../../../state/FeedEntityContext';\nimport {\n indexProps,\n cursorDataProps,\n viewingAthleteProps\n} from '../../../props/feed-prop-types';\n\nimport Card from '../media/Card';\nimport EntryHeader from '../media/EntryHeader';\nimport EntryBody from '../media/EntryBody';\n\nimport styles from './index.scss';\n\nimport GoalEntry from '../GoalEntry';\n\nconst PerformanceGoalMultiView = ({\n entity,\n viewingAthlete,\n intersectionObserverRef,\n cursorData,\n index,\n goalEntries\n}) => {\n const [showAllEntries, setShowAllEntries] = useState(false);\n\n const { entityState } = useFeedEntityContext();\n const firstGoalEntry = goalEntries[0];\n const nextFiveGoalEntries = goalEntries.slice(1, 6);\n const restOfGoalEntries = goalEntries.slice(6);\n const joinable = goalEntries.every((entry) => {\n if (viewingAthlete.id === entry.athlete_id.toString()) {\n return false;\n }\n return true;\n });\n\n return (\n \n \n
    \n \n {joinable && (\n {\n entityState.trackAnalytics({\n action: 'click',\n element: `${entity.toLowerCase()}_join`\n });\n }}\n >\n {I18n.t(\n 'components.feed.performance_goal_created_multi_view.join_goal'\n )}\n \n )}\n
    \n
    \n\n \n
      \n {/* Show up to the next 5 goal entries */}\n {nextFiveGoalEntries.map((entry) => (\n
    • \n \n
    • \n ))}\n {/* Remaining goal entries are hidden until show all button is clicked */}\n {restOfGoalEntries.map((entry) => (\n \n \n \n ))}\n {!showAllEntries && goalEntries.length > 5 && (\n {\n setShowAllEntries(true);\n }}\n variant=\"text\"\n data-testid=\"show-all-entries\"\n className={styles.showAllEntries}\n type=\"button\"\n >\n {I18n.t(\n 'components.feed.performance_goal_created_multi_view.show_all_entries',\n {\n count: goalEntries.length\n }\n )}\n \n )}\n
    \n
    \n \n );\n};\n\nPerformanceGoalMultiView.propTypes = {\n entity: PropTypes.oneOf(['PerformanceGoalCreated']).isRequired,\n viewingAthlete: viewingAthleteProps.isRequired,\n intersectionObserverRef: PropTypes.func.isRequired,\n cursorData: cursorDataProps.isRequired,\n index: indexProps.isRequired,\n goalEntries: PropTypes.arrayOf(\n PropTypes.shape({\n description: PropTypes.string.isRequired,\n athlete_feed_entry_id: PropTypes.number.isRequired,\n athlete_id: PropTypes.number.isRequired,\n goal_path: PropTypes.string.isRequired,\n goal_type: PropTypes.string.isRequired,\n goal_id: PropTypes.number.isRequired,\n athlete_avatar_url: PropTypes.string.isRequired,\n athlete_member_type: PropTypes.string.isRequired,\n athlete_display_name: PropTypes.string.isRequired\n })\n ).isRequired\n};\n\nexport default PerformanceGoalMultiView;\n","import React, { useReducer } from 'react';\nimport PropTypes from 'prop-types';\nimport useFeedAnalytics from '../../hooks/useFeedAnalytics';\nimport {\n pageProps,\n viewingAthleteProps,\n cursorDataProps,\n feedTypeProps,\n indexProps,\n timeAndLocationProps\n} from '../../props/feed-prop-types';\nimport FeedEntityContext from '../../state/FeedEntityContext';\nimport { init, reducer } from '../../state/feed-entity-reducer';\nimport { buildInitialState } from '../../state/feed-entity-init-state';\n\nimport PerformanceGoalSingleView from '../shared/PerformanceGoalSingleView';\nimport PerformanceGoalMultiView from '../shared/PerformanceGoalMultiView';\nimport useFeedIntersectionObserver from '../../hooks/useFeedIntersectionObserver';\n\nconst PerformanceGoalCreated = ({\n entity,\n viewingAthlete,\n clubId,\n page,\n feedType,\n index,\n cursorData,\n rowData,\n athleteProfileId,\n timeAndLocation\n}) => {\n const { inView, intersectionObserverRef } = useFeedIntersectionObserver({\n index,\n isParentFeedEntry: true\n });\n\n const { trackAnalytics } = useFeedAnalytics({\n page,\n entity,\n entityId: rowData.goal_entries[0].entity_id,\n athleteProfileId,\n feedType,\n index,\n viewingAthleteId: viewingAthlete.id,\n clubId,\n inView\n });\n\n const [entityState] = useReducer(\n reducer,\n buildInitialState({\n trackAnalytics\n }),\n init\n );\n\n const providerState = {\n entityState\n };\n\n const bodyProps = {\n entity,\n intersectionObserverRef,\n index,\n cursorData,\n viewingAthlete,\n shareable: rowData.goal_entries[0].shareable,\n twitterUrl: rowData.goal_entries[0].twitter_url,\n isBoosted: rowData.goal_entries[0].is_boosted,\n timeAndLocation,\n goalEntries: rowData.goal_entries,\n entityId: rowData.goal_entries[0].entity_id\n };\n\n return (\n \n {rowData.goal_entries.length > 1 ? (\n \n ) : (\n \n )}\n \n );\n};\n\nPerformanceGoalCreated.propTypes = {\n entity: PropTypes.oneOf(['PerformanceGoalCreated']).isRequired,\n viewingAthlete: viewingAthleteProps.isRequired,\n clubId: PropTypes.string.isRequired,\n athleteProfileId: PropTypes.string.isRequired,\n page: pageProps.isRequired,\n cursorData: cursorDataProps.isRequired,\n feedType: feedTypeProps.isRequired,\n index: indexProps.isRequired,\n timeAndLocation: timeAndLocationProps.isRequired,\n rowData: PropTypes.shape({\n goal_entries: PropTypes.arrayOf(\n PropTypes.shape({\n shareable: PropTypes.bool,\n is_boosted: PropTypes.bool,\n twitter_url: PropTypes.string.isRequired,\n entity_id: PropTypes.number.isRequired,\n description: PropTypes.string.isRequired,\n athlete_feed_entry_id: PropTypes.number.isRequired,\n athlete_id: PropTypes.number.isRequired\n })\n )\n }).isRequired\n};\n\nexport default PerformanceGoalCreated;\n","// extracted by mini-css-extract-plugin\nexport default {\"logo\":\"ChallengeJoin--logo--FGNSY\"};","// extracted by mini-css-extract-plugin\nexport default {\"media\":\"AthleteJoinEntry--media--kEDKw\",\"title-text\":\"AthleteJoinEntry--title-text--sRiv7\",\"titleText\":\"AthleteJoinEntry--title-text--sRiv7\",\"details\":\"AthleteJoinEntry--details--1CrmU\",\"icon-wrapper\":\"AthleteJoinEntry--icon-wrapper--NWHem\",\"iconWrapper\":\"AthleteJoinEntry--icon-wrapper--NWHem\",\"entry-text\":\"AthleteJoinEntry--entry-text--7nlAn\",\"entryText\":\"AthleteJoinEntry--entry-text--7nlAn\",\"join-btn\":\"AthleteJoinEntry--join-btn--Mh-s+\",\"joinBtn\":\"AthleteJoinEntry--join-btn--Mh-s+\"};","const types = {\n DOB_UPDATE_FAILED: 'DOB_UPDATE_FAILED',\n DOB_UPDATE_REQUESTED: 'DOB_UPDATE_REQUESTED',\n DOB_UPDATE_SUCCESS: 'DOB_UPDATE_SUCCESS',\n MODAL_CHANGE_DATE: 'MODAL_CHANGE_DATE',\n MODAL_CLOSE: 'MODAL_CLOSE'\n};\n\nexport default types;\n","import types from './actions';\n\nexport default function reducer(state = {}, action) {\n switch (action.name) {\n case types.DOB_UPDATE_FAILED:\n return {\n ...state,\n gatingModal: {\n ...state.gatingModal,\n requestInProgress: false\n }\n };\n\n case types.DOB_UPDATE_REQUESTED:\n return {\n ...state,\n gatingModal: {\n ...state.gatingModal,\n requestInProgress: true\n }\n };\n\n case types.DOB_UPDATE_SUCCESS: {\n const { dateOfBirth, isTooYoung } = action;\n\n return {\n ...state,\n currentAthlete: { ...state.currentAthlete, dateOfBirth },\n gatingModal: {\n ...state.gatingModal,\n requestInProgress: !isTooYoung // stay busy until athlete is navigated away\n }\n };\n }\n\n case types.MODAL_CHANGE_DATE:\n return {\n ...state,\n gatingModal: {\n ...state.gatingModal,\n ageGate: {\n ...(state.gatingModal && state.gatingModal.ageGate),\n dateSelected: action.date\n }\n }\n };\n\n case types.MODAL_CLOSE:\n return {\n ...state,\n gatingModal: null\n };\n\n default:\n return state;\n }\n}\n","import React, { useReducer } from 'react';\nimport PropTypes from 'prop-types';\n\nimport createNetworkingClient from 'utils/networking-client';\n\nimport AgeGateModal from '../../../../../apps/challenges/shared/components/AgeGateModal';\nimport { useFeedEntityContext } from '../../../state/FeedEntityContext';\n\nimport actions from './actions';\nimport reducer from './reducers';\n\nconst FeedEntryAgeGate = ({\n minimumAge,\n joinUrl,\n joinMethod,\n redirectUrl,\n currentAthlete,\n onUpdateDOB\n}) => {\n const { locale } = useFeedEntityContext();\n\n const joinChallengeFn = () => {\n return createNetworkingClient()({\n method: joinMethod,\n url: joinUrl\n }).then(() => {\n window.location = redirectUrl;\n });\n };\n\n const [state, dispatch] = useReducer(reducer, {\n currentAthlete: null,\n gatingModal: {\n gatingConditions: { minimumAge },\n joinChallengeFn,\n ageGate: { dateSelected: new Date('1970-1-1') },\n requestInProgress: false\n }\n });\n\n const handleModalClose = () => dispatch({ name: actions.MODAL_CLOSE });\n const handleDateSelectionChange = (date) =>\n dispatch({ name: actions.MODAL_CHANGE_DATE, date });\n const handleDateUpdateInProgress = () =>\n dispatch({ name: actions.DOB_UPDATE_REQUESTED });\n const handleDateUpdateFailure = () =>\n dispatch({ name: actions.DOB_UPDATE_FAILED });\n const handleDateUpdateSuccess = (date) => {\n const serializedDate = [\n date.getFullYear(),\n date.getMonth() + 1,\n date.getDate()\n ].join('-');\n\n onUpdateDOB(serializedDate);\n\n const isTooYoung =\n new Date(date) >\n (() => {\n const d = new Date(new Date().toDateString());\n d.setFullYear(d.getFullYear() - minimumAge);\n return d;\n })();\n\n dispatch({\n name: actions.DOB_UPDATE_SUCCESS,\n dateOfBirth: serializedDate,\n isTooYoung\n });\n };\n\n const statefulAthlete = { ...currentAthlete, ...state.currentAthlete };\n\n return (\n \n );\n};\n\nFeedEntryAgeGate.defaultProps = {\n onUpdateDOB: () => {}\n};\n\nFeedEntryAgeGate.propTypes = {\n minimumAge: PropTypes.number.isRequired,\n joinUrl: PropTypes.string.isRequired,\n joinMethod: PropTypes.string.isRequired,\n redirectUrl: PropTypes.string.isRequired,\n currentAthlete: PropTypes.shape({\n id: PropTypes.number.isRequired,\n dateOfBirth: PropTypes.string\n }).isRequired,\n onUpdateDOB: PropTypes.func\n};\n\nexport default FeedEntryAgeGate;\n","import PropTypes from 'prop-types';\nimport { Markup } from 'interweave';\nimport React, { useState } from 'react';\nimport Button from '@strava/ui/Button';\nimport createNetworkingClient from 'utils/networking-client';\nimport I18n from 'utils/I18n';\nimport styles from './index.scss';\nimport { useFeedEntityContext } from '../../../state/FeedEntityContext';\nimport {\n indexProps,\n cursorDataProps,\n viewingAthleteProps\n} from '../../../props/feed-prop-types';\nimport FeedEntryAgeGate from '../FeedEntryAgeGate';\nimport Card from '../media/Card';\nimport EntryHeader from '../media/EntryHeader';\nimport EntryBody from '../media/EntryBody';\nimport Media from '../media/Media';\nimport MediaLeft from '../media/MediaLeft';\nimport MediaBody from '../media/MediaBody';\n\nconst AthleteJoinEntry = ({\n entity,\n entityId,\n title,\n badge,\n entityName,\n entityUrl,\n entityIcon,\n entityMemberCount,\n isMember,\n secondaryText,\n intersectionObserverRef,\n cursorData,\n index,\n minimumAge,\n joinMethod,\n joinUrl,\n viewingAthlete,\n labels\n}) => {\n const { entityState } = useFeedEntityContext();\n const isClub = () => entity === 'Club';\n\n const buttonLabelAndVariant = isMember\n ? [labels.join, 'default']\n : [labels.view, 'primary'];\n\n const [entryState, setEntryState] = useState({\n memberCountLabel: I18n.t(labels.memberCountKey, {\n count: entityMemberCount\n }),\n disabled: false, // controls whether the join button is enabled/disabled\n label: buttonLabelAndVariant[0], // join button label text\n variant: buttonLabelAndVariant[1], // join button variant\n openAgeGateModal: false,\n ageGateModalProps: {}\n });\n\n // joins either a challenge or a club and increments the participant/membership count\n const join = ({ url, payload }) => {\n createNetworkingClient()\n .post(url, payload, { headers: { Accept: 'text/javascript' } })\n .then(() => {\n setEntryState({\n label: labels.joined,\n variant: 'primary',\n disabled: true,\n memberCountLabel: I18n.t(labels.memberCountKey, {\n count: entityMemberCount + 1\n })\n });\n })\n .catch(() => {\n // TODO: [fumba] log error in monorepo\n setEntryState((prev) => ({\n ...prev,\n label: labels.error,\n disabled: false\n }));\n });\n };\n\n // Checks if the athlete qualifies for any age-gate requirements that might be present\n // Athletes are joined in the challenge if they meet the criteria otherwise an age-gating modal\n // is opened prompting further action.\n const ageGateAndJoinChallenge = () => {\n const youngestDob =\n minimumAge &&\n (() => {\n const d = new Date(new Date().toDateString());\n d.setFullYear(d.getFullYear() - parseInt(minimumAge, 10));\n return d;\n })();\n if (\n minimumAge &&\n (!viewingAthlete.dateOfBirth ||\n new Date(viewingAthlete.dateOfBirth) > youngestDob)\n ) {\n const ageGateModalProps = {\n minimumAge: parseInt(minimumAge, 10),\n joinUrl: entityUrl,\n redirectUrl: `/challenges/${entityId}#joined`,\n joinMethod,\n currentAthlete: {\n id: parseInt(viewingAthlete.id, 10),\n dateOfBirth: viewingAthlete.dateOfBirth\n }\n };\n // open age-gate modal\n setEntryState((prev) => ({\n ...prev,\n disabled: true,\n openAgeGateModal: true,\n ageGateModalProps\n }));\n } else {\n // viewing athlete passed age-gating requirements - join them in challenge\n setEntryState((prev) => ({\n ...prev,\n disabled: true\n }));\n const payload = { challenge_id: entityId };\n const url = joinUrl;\n if (joinMethod != null) {\n join({ payload, url });\n } else {\n window.open(joinUrl, '_blank');\n }\n }\n };\n\n const onJoinButtonClick = () => {\n if (isMember) {\n // Join button is used to navigate to club/challenge detail page if the athlete is already joined\n entityState.trackAnalytics({\n action: 'click',\n element: `view_${entity.toLowerCase()}`\n });\n window.location.href = entityUrl;\n return;\n }\n entityState.trackAnalytics({\n action: 'click',\n element: `join_${entity.toLowerCase()}`\n });\n\n setEntryState((prev) => ({\n ...prev,\n disabled: true\n }));\n if (isClub()) {\n // Join Club\n const payload = { club_id: entityId };\n const url = `/clubs/${entityId}/members`;\n join({ payload, url });\n } else {\n // Challenge - age gate check & Join if applicable\n ageGateAndJoinChallenge();\n }\n };\n\n const clickGroupHeader = () => {\n entityState.trackAnalytics({\n action: 'click',\n element: 'group_header',\n properties: { element_source: entity.toLowerCase() }\n });\n };\n\n const clickTitleText = () => {\n entityState.trackAnalytics({\n action: 'click',\n element: 'title',\n properties: { element_source: entity.toLowerCase() }\n });\n };\n\n return (\n \n \n \n \n \n \n\n \n \n {badge}\n \n

    \n \n {entityName}\n \n

    \n
    \n {entityIcon && (\n
    {entityIcon}
    \n )}\n
    \n {entryState.memberCountLabel}\n {secondaryText && {secondaryText}}\n
    \n
    \n\n \n {entryState.label}\n \n
    \n
    \n
    \n\n {entryState.openAgeGateModal && (\n \n )}\n \n );\n};\n\nAthleteJoinEntry.propTypes = {\n entity: PropTypes.oneOf(['Club', 'Challenge']).isRequired,\n entityId: PropTypes.number.isRequired,\n title: PropTypes.string.isRequired,\n badge: PropTypes.node.isRequired,\n entityName: PropTypes.string.isRequired,\n entityUrl: PropTypes.string.isRequired,\n entityIcon: PropTypes.node,\n entityMemberCount: PropTypes.number.isRequired,\n isMember: PropTypes.bool.isRequired,\n secondaryText: PropTypes.string.isRequired,\n intersectionObserverRef: PropTypes.func.isRequired,\n cursorData: cursorDataProps.isRequired,\n index: indexProps.isRequired,\n minimumAge: PropTypes.number,\n joinMethod: PropTypes.string,\n joinUrl: PropTypes.string,\n viewingAthlete: viewingAthleteProps,\n labels: PropTypes.shape({\n join: PropTypes.string.isRequired,\n view: PropTypes.string.isRequired,\n joined: PropTypes.string.isRequired,\n memberCountKey: PropTypes.string.isRequired,\n error: PropTypes.string\n }).isRequired\n};\n\nAthleteJoinEntry.defaultProps = {\n entityIcon: null,\n minimumAge: null,\n joinMethod: '',\n viewingAthlete: null,\n joinUrl: null\n};\n\nexport default AthleteJoinEntry;\n","import React, { useReducer } from 'react';\nimport PropTypes from 'prop-types';\nimport getIcon from 'utils/icon-mapper';\nimport I18n from 'utils/I18n';\nimport styles from './styles.scss';\nimport useFeedAnalytics from '../../hooks/useFeedAnalytics';\nimport {\n pageProps,\n viewingAthleteProps,\n cursorDataProps,\n feedTypeProps,\n indexProps\n} from '../../props/feed-prop-types';\nimport FeedEntityContext from '../../state/FeedEntityContext';\nimport { init, reducer } from '../../state/feed-entity-reducer';\nimport { buildInitialState } from '../../state/feed-entity-init-state';\n\nimport AthleteJoinEntry from '../shared/AthleteJoinEntry';\nimport useFeedIntersectionObserver from '../../hooks/useFeedIntersectionObserver';\n\nconst i18nPrefix = 'components.feed.challenges';\n\nconst ChallengeJoin = ({\n viewingAthlete,\n clubId,\n page,\n entity,\n feedType,\n index,\n cursorData,\n rowData,\n athleteProfileId,\n locale\n}) => {\n const { inView, intersectionObserverRef } = useFeedIntersectionObserver({\n index,\n isParentFeedEntry: true\n });\n\n const { trackAnalytics } = useFeedAnalytics({\n page,\n entity,\n entityId: rowData.entity_id,\n athleteProfileId,\n feedType,\n index,\n viewingAthleteId: viewingAthlete.id,\n clubId,\n inView\n });\n\n const [entityState] = useReducer(\n reducer,\n buildInitialState({\n trackAnalytics\n }),\n init\n );\n\n const providerState = {\n entityState,\n locale\n };\n\n const logo = (\n {\n entityState.trackAnalytics({\n action: 'click',\n element: 'challenge_image'\n });\n }}\n >\n \n \n );\n\n const bodyProps = {\n entity,\n title: rowData.title,\n badge: logo,\n entityName: rowData.challenge_name,\n entityUrl: rowData.challenge_url,\n entityIcon: (\n
    \n {getIcon(`sports_${rowData.displayed_icon}_normal_xsmall`)}\n
    \n ),\n entityMemberCount: rowData.participant_count,\n isMember: !rowData.challenge_joinable,\n secondaryText: rowData.challenge_ended ? '' : rowData.days_left,\n intersectionObserverRef,\n index,\n cursorData,\n entityId: rowData.entity_id,\n minimumAge:\n rowData.gating_conditions && rowData.gating_conditions.minimum_age,\n joinMethod: rowData.join_method,\n joinUrl: rowData.join_url,\n viewingAthlete,\n labels: {\n join: rowData.virtual_race\n ? I18n.t(`${i18nPrefix}.view_virtual_race`)\n : I18n.t(`${i18nPrefix}.view_challenge`),\n view: rowData.join_button_text,\n joined: I18n.t(`${i18nPrefix}.joined`),\n memberCountKey: `${i18nPrefix}.participants`,\n error: I18n.t(`${i18nPrefix}.error`)\n }\n };\n\n return (\n \n \n \n );\n};\n\nChallengeJoin.propTypes = {\n // feed entity could be Activity, group_activity, Post etc\n entity: PropTypes.oneOf(['Challenge']).isRequired,\n viewingAthlete: viewingAthleteProps.isRequired,\n clubId: PropTypes.string.isRequired,\n athleteProfileId: PropTypes.string.isRequired,\n page: pageProps.isRequired,\n cursorData: cursorDataProps.isRequired,\n feedType: feedTypeProps.isRequired,\n // range of number 0...19 representing rows returned by the server per feed load\n index: indexProps.isRequired,\n rowData: PropTypes.shape({\n title: PropTypes.string.isRequired,\n entry_logo_url: PropTypes.string.isRequired,\n challenge_name: PropTypes.string.isRequired,\n challenge_url: PropTypes.string.isRequired,\n entity_id: PropTypes.number.isRequired,\n displayed_icon: PropTypes.string.isRequired,\n participant_count: PropTypes.number.isRequired,\n challenge_joinable: PropTypes.bool.isRequired,\n join_method: PropTypes.string.isRequired,\n join_url: PropTypes.string.isRequired,\n join_button_text: PropTypes.string.isRequired,\n challenge_ended: PropTypes.bool.isRequired,\n days_left: PropTypes.string,\n virtual_race: PropTypes.bool,\n gating_conditions: PropTypes.shape({\n minimum_age: PropTypes.number\n })\n }).isRequired,\n locale: PropTypes.string.isRequired\n};\n\nexport default ChallengeJoin;\n","// extracted by mini-css-extract-plugin\nexport default {\"logo\":\"SimplePromo--logo--UH8dJ\"};","import React, { useReducer } from 'react';\nimport PropTypes from 'prop-types';\nimport createNetworkingClient from 'utils/networking-client';\nimport styles from './styles.scss';\nimport useFeedAnalytics from '../../hooks/useFeedAnalytics';\nimport {\n pageProps,\n viewingAthleteProps,\n cursorDataProps,\n feedTypeProps,\n indexProps\n} from '../../props/feed-prop-types';\nimport FeedEntityContext from '../../state/FeedEntityContext';\nimport { init, reducer } from '../../state/feed-entity-reducer';\nimport { buildInitialState } from '../../state/feed-entity-init-state';\n\nimport PromoEntry from '../shared/PromoEntry';\nimport useFeedIntersectionObserver from '../../hooks/useFeedIntersectionObserver';\n\nconst SimplePromo = ({\n viewingAthlete,\n clubId,\n page,\n entity,\n feedType,\n index,\n cursorData,\n rowData,\n athleteProfileId\n}) => {\n const { inView, intersectionObserverRef } = useFeedIntersectionObserver({\n index,\n isParentFeedEntry: true\n });\n\n const { trackAnalytics } = useFeedAnalytics({\n page,\n entity,\n entityId: rowData.trackable_id, // TODO use entityId computed in Feed.js once react feed container goes to prod\n athleteProfileId,\n feedType,\n index,\n viewingAthleteId: viewingAthlete.id,\n clubId,\n inView\n });\n\n const [entityState] = useReducer(\n reducer,\n buildInitialState({\n trackAnalytics\n }),\n init\n );\n\n const providerState = {\n entityState\n };\n\n const logo = (\n {\n createNetworkingClient({ baseUrl: null, headers: null }).get(\n rowData.click.resource\n );\n entityState.trackAnalytics({\n action: 'click',\n element: 'simple_promo_image'\n });\n }}\n >\n \n \n );\n\n const bodyProps = {\n entity,\n badge: logo,\n impression: rowData.impression.resource,\n click: rowData.click.resource,\n headline: rowData.headline,\n description: rowData.description,\n ctaUrl: rowData.cta_action.resource,\n intersectionObserverRef,\n index,\n cursorData,\n viewingAthlete,\n ctaText: rowData.cta_text\n };\n\n return (\n \n \n \n );\n};\n\nSimplePromo.propTypes = {\n // feed entity could be Activity, group_activity, Post etc\n entity: PropTypes.oneOf(['FancyPromo', 'SimplePromo']).isRequired,\n viewingAthlete: viewingAthleteProps.isRequired,\n clubId: PropTypes.string.isRequired,\n athleteProfileId: PropTypes.string.isRequired,\n page: pageProps.isRequired,\n cursorData: cursorDataProps.isRequired,\n feedType: feedTypeProps.isRequired,\n // range of number 0...19 representing rows returned by the server per feed load\n index: indexProps.isRequired,\n rowData: PropTypes.shape({\n headline: PropTypes.string.isRequired,\n description: PropTypes.string.isRequired,\n trackable_id: PropTypes.string,\n image: PropTypes.string,\n impression: PropTypes.shape({\n resource: PropTypes.string\n }),\n click: PropTypes.shape({\n resource: PropTypes.string\n }),\n background_image: PropTypes.string,\n cta_text: PropTypes.string,\n cta_action: PropTypes.shape({\n resource: PropTypes.string\n })\n }).isRequired\n};\n\nexport default SimplePromo;\n","// extracted by mini-css-extract-plugin\nexport default {\"entry-block\":\"EntryBlock--entry-block--tFaE4\",\"entryBlock\":\"EntryBlock--entry-block--tFaE4\"};","import React from 'react';\nimport PropTypes from 'prop-types';\nimport styles from './entry-block.scss';\n\nconst EntryBlock = ({ children, className, ...options }) => {\n const classNames = [styles.entryBlock];\n if (className) {\n classNames.push(className);\n }\n\n return (\n
    \n {children}\n
    \n );\n};\n\nEntryBlock.propTypes = {\n children: PropTypes.node.isRequired,\n className: PropTypes.string\n};\n\nEntryBlock.defaultProps = {\n className: null\n};\n\nexport default EntryBlock;\n","// extracted by mini-css-extract-plugin\nexport default {\"entry-body\":\"GroupActivityEntry--entry-body--ZVd1f\",\"entryBody\":\"GroupActivityEntry--entry-body--ZVd1f\",\"no-achievements-and-maps-photos\":\"GroupActivityEntry--no-achievements-and-maps-photos--b5Ys1\",\"noAchievementsAndMapsPhotos\":\"GroupActivityEntry--no-achievements-and-maps-photos--b5Ys1\"};","import React, { useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport { isEmpty, snakeCase } from 'lodash-es';\nimport { useInView } from 'react-intersection-observer';\n\nimport { SET_AUTOPLAY_VIDEO_IN_VIEW } from '../../../state/feed-entity-actions';\nimport { useFeedEntityContext } from '../../../state/FeedEntityContext';\nimport { AUTOPLAY_MARGIN_TOP } from '../../../constants';\n\nimport PhotosAndMapImage from '../../shared/PhotosAndMapImage';\nimport HeaderWithOwnerMetadata from '../../shared/HeaderWithOwnerMetadata/HeaderWithOwnerMetadata';\nimport ActivityEntryBody from '../../shared/ActivityEntryBody';\nimport MaharajAchievementCelebration from '../../shared/MaharajAchievementCelebration';\nimport KudosAndComments from '../../shared/KudosAndComments';\n\nimport EntryBody from '../../shared/media/EntryBody';\nimport EntryMedia from '../../shared/media/EntryMedia';\nimport EntryFooter from '../../shared/media/EntryFooter';\n\nimport {\n viewingAthleteProps,\n photoListProps,\n statsProps,\n segAndBestEffortAchievementsProps,\n powerAndSegmentGoalAchievementsProps,\n cumulativeGoalAchievementProps\n} from '../../../props/feed-prop-types';\n\nimport styles from './GroupActivityEntry.scss';\n\nconst GroupActivityEntry = ({\n entity,\n page,\n viewingAthlete,\n photos,\n activity,\n reactionsEnabled,\n kudosAndComments,\n iconExperimentCohort,\n embedDropdownEnabled\n}) => {\n const entityOwner = {\n displayImage: activity.athlete_avatar_url,\n name: activity.athlete_name,\n memberType: activity.member_type,\n profileUrl: `/athletes/${activity.athlete_id}`,\n type: 'athlete',\n id: activity.athlete_id.toString()\n };\n\n const noAchievementsAndMapsPhotos =\n isEmpty(activity.web_achievement) &&\n (photos && isEmpty(photos[activity.entity_id]));\n\n const {\n entityState: { autoPlayVideos, isAutoplayEnabled },\n dispatch\n } = useFeedEntityContext();\n\n //\n // Handle autoplay when activity enters area we want to trigger autoplay\n //\n const pageHeight =\n window.innerHeight || document.documentElement.clientHeight;\n const [inViewAutoPlayRef, inViewAutoPlay] = useInView({\n threshold: 0,\n rootMargin: `-${AUTOPLAY_MARGIN_TOP}px 0px -${pageHeight -\n AUTOPLAY_MARGIN_TOP}px 0px`\n });\n\n const autoPlayVideo = autoPlayVideos[activity.entity_id.toString()];\n useEffect(() => {\n if (isAutoplayEnabled && autoPlayVideo) {\n if (inViewAutoPlay) {\n autoPlayVideo.play();\n dispatch({\n type: SET_AUTOPLAY_VIDEO_IN_VIEW,\n payload: { autoPlayVideoInView: true }\n });\n } else {\n autoPlayVideo.pause();\n dispatch({\n type: SET_AUTOPLAY_VIDEO_IN_VIEW,\n payload: { autoPlayVideoInView: false }\n });\n }\n }\n }, [isAutoplayEnabled, autoPlayVideo, inViewAutoPlay]);\n\n return (\n
  • \n {/* Entry Header - avatar, social actions */}\n \n\n {/* Entry Body = activity title, description, stats and achievements */}\n \n \n \n\n {/* Maharaj achievements */}\n {!isEmpty(activity.web_achievement) && (\n \n \n \n )}\n\n {/* Map and Photos */}\n {photos && !isEmpty(photos[activity.entity_id]) && (\n \n \n \n )}\n\n {/* Kudos And Comments */}\n \n \n \n
  • \n );\n};\n\nGroupActivityEntry.propTypes = {\n entity: PropTypes.string.isRequired,\n page: PropTypes.string.isRequired,\n viewingAthlete: viewingAthleteProps.isRequired,\n reactionsEnabled: PropTypes.bool.isRequired,\n photos: PropTypes.shape({\n photoList: photoListProps\n }).isRequired,\n activity: PropTypes.shape({\n athlete_id: PropTypes.number,\n athlete_avatar_url: PropTypes.string,\n athlete_name: PropTypes.string,\n athlete_firstname: PropTypes.string,\n member_type: PropTypes.string,\n name: PropTypes.string,\n type: PropTypes.string,\n description: PropTypes.string,\n activity_class_name: PropTypes.string,\n flagged: PropTypes.bool,\n entity_id: PropTypes.number,\n is_routable: PropTypes.bool,\n is_commute: PropTypes.bool,\n is_virtual: PropTypes.bool,\n workout_type: PropTypes.string,\n privacy_tag_key: PropTypes.string,\n stats: statsProps,\n owned_by_current_athlete: PropTypes.bool,\n achievements: segAndBestEffortAchievementsProps,\n performance_goals: powerAndSegmentGoalAchievementsProps,\n goals: cumulativeGoalAchievementProps,\n web_achievement: PropTypes.shape({\n image: PropTypes.string,\n image_caption: PropTypes.string,\n subtitle: PropTypes.string,\n text: PropTypes.string,\n url: PropTypes.string\n }),\n is_boosted: PropTypes.bool,\n shareable: PropTypes.bool,\n twitter_url: PropTypes.string,\n photos: PropTypes.arrayOf(\n PropTypes.shape({\n urls: PropTypes.shape({}).isRequired,\n caption: PropTypes.string\n })\n )\n }).isRequired,\n kudosAndComments: PropTypes.shape({}).isRequired,\n iconExperimentCohort: PropTypes.string,\n embedDropdownEnabled: PropTypes.bool\n};\n\nGroupActivityEntry.defaultProps = {\n iconExperimentCohort: null,\n embedDropdownEnabled: false\n};\n\nexport default GroupActivityEntry;\n","// extracted by mini-css-extract-plugin\nexport default {\"activity-icon\":\"GroupActivity--activity-icon--mGNC2\",\"activityIcon\":\"GroupActivity--activity-icon--mGNC2\",\"headline-image\":\"GroupActivity--headline-image--QGjPU\",\"headlineImage\":\"GroupActivity--headline-image--QGjPU\",\"entry-media\":\"GroupActivity--entry-media--ehRC+\",\"entryMedia\":\"GroupActivity--entry-media--ehRC+\",\"list-entries\":\"GroupActivity--list-entries--WR0LJ\",\"listEntries\":\"GroupActivity--list-entries--WR0LJ\",\"avatar\":\"GroupActivity--avatar--jquJz\",\"headline-text-btn\":\"GroupActivity--headline-text-btn--QRivU\",\"headlineTextBtn\":\"GroupActivity--headline-text-btn--QRivU\",\"entry-footer\":\"GroupActivity--entry-footer--Q4dBv\",\"entryFooter\":\"GroupActivity--entry-footer--Q4dBv\"};","import React, { useReducer, useCallback } from 'react';\nimport PropTypes from 'prop-types';\nimport { Markup } from 'interweave';\nimport { isEmpty, snakeCase } from 'lodash-es';\n\nimport ActivityIcon from 'components/ActivityIcon';\nimport Button from '@strava/ui/Button';\nimport useFeedAnalytics from '../../hooks/useFeedAnalytics';\nimport PhotosAndMapImage from '../shared/PhotosAndMapImage';\nimport {\n pageProps,\n viewingAthleteProps,\n cursorDataProps,\n feedTypeProps,\n indexProps,\n timeAndLocationProps,\n mapProps,\n photoListProps\n} from '../../props/feed-prop-types';\nimport FeedEntityContext from '../../state/FeedEntityContext';\nimport { init, reducer } from '../../state/feed-entity-reducer';\nimport { buildInitialState } from '../../state/feed-entity-init-state';\nimport LocationAndTime from '../shared/LocationAndTime';\nimport { getPhotoWithMaxDimension } from '../../utils';\nimport CommentDeleteAlertDialog from '../shared/CommentDeleteAlertDialog';\nimport { OPEN_MODAL_OTHER_ATHLETES_TAB } from '../../state/feed-entity-actions';\nimport useFeedIntersectionObserver from '../../hooks/useFeedIntersectionObserver';\n\nimport Card from '../shared/media/Card';\nimport EntryHeader from '../shared/media/EntryHeader';\nimport Media from '../shared/media/Media';\nimport MediaLeft from '../shared/media/MediaLeft';\nimport MediaBody from '../shared/media/MediaBody';\nimport EntryMedia from '../shared/media/EntryMedia';\nimport EntryBlock from '../shared/media/EntryBlock';\n\nimport GroupActivityEntry from './GroupActivityEntry';\nimport styles from './styles.scss';\n\nconst GroupActivity = ({\n viewingAthlete,\n clubId,\n page,\n entity,\n feedType,\n index,\n cursorData,\n rowData,\n athleteProfileId,\n timeAndLocation,\n switchMapAndPhoto,\n photos,\n kudosAndComments,\n reactionsEnabled,\n iconExperimentCohort,\n embedDropdownEnabled,\n isAutoplayEnabled\n}) => {\n const headLineActivity = rowData.activities[0];\n\n const headlineEntityId = headLineActivity.entity_id\n ? headLineActivity.entity_id.toString()\n : null;\n\n const activityIds = useCallback(\n () => rowData.activities.map((a) => a.entity_id),\n [rowData.activities]\n );\n\n const mentionedAthletesByActivity = Object.fromEntries(\n rowData.activities.map((a) => {\n return [a.entity_id, a.description_mentioned_athlete_ids || []];\n })\n );\n\n const analyticProps = {\n page,\n entity,\n athleteProfileId,\n entityId: headlineEntityId,\n activityIds: activityIds(),\n feedType,\n index,\n viewingAthleteId: viewingAthlete.id,\n clubId,\n properties: {\n mentioned_athletes: mentionedAthletesByActivity\n }\n };\n\n const { inView, intersectionObserverRef } = useFeedIntersectionObserver({\n index,\n isParentFeedEntry: true\n });\n\n const { trackAnalytics } = useFeedAnalytics({\n ...analyticProps,\n inView\n });\n\n const commentsByActivityId = useCallback(() => {\n const commentsHash = {};\n if (!isEmpty(kudosAndComments)) {\n Object.entries(kudosAndComments).forEach((entry) => {\n commentsHash[entry[0].toString()] = entry[1].comments;\n });\n }\n return commentsHash;\n }, [kudosAndComments]);\n\n const [entityState, dispatch] = useReducer(\n reducer,\n buildInitialState({\n trackAnalytics,\n comments: commentsByActivityId(),\n entity: snakeCase(entity),\n parentEntityId: headlineEntityId,\n isAutoplayEnabled\n }),\n init\n );\n\n const providerState = {\n entityState,\n dispatch,\n analyticProps\n };\n\n const getActivityMap = () => {\n let bannerImage;\n if (switchMapAndPhoto) {\n // replace activity map with a photo\n const headlinePhoto = headLineActivity.photos[0];\n if (headlinePhoto) {\n const photoUrl = getPhotoWithMaxDimension(headlinePhoto.urls);\n bannerImage = { url: photoUrl, alt: headlinePhoto.caption };\n } else {\n // fallback (this scenario should ideally not exist in prod)\n bannerImage = { url: '', alt: '' };\n }\n } else {\n bannerImage = rowData.map;\n }\n\n return bannerImage;\n };\n\n return (\n \n \n {/* headline title, activity icon, time and location */}\n \n \n {/* activity icon */}\n {headLineActivity.activity_class_name && (\n \n
    \n \n
    \n
    \n )}\n\n {/* headline title, location and time */}\n \n \n dispatch({\n type: OPEN_MODAL_OTHER_ATHLETES_TAB,\n payload: {\n element: 'group_header',\n selectedEntityId: headlineEntityId\n }\n })\n }\n >\n \n \n\n \n \n
    \n
    \n\n {/* heading map or photo */}\n \n \n \n\n {/* individual athlete activity entries */}\n \n
      \n {rowData.activities.map((activity) => (\n \n ))}\n
    \n
    \n \n \n
    \n );\n};\n\nGroupActivity.propTypes = {\n // feed entity could be Activity, group_activity, Post etc\n entity: PropTypes.oneOf(['GroupActivity']).isRequired,\n viewingAthlete: viewingAthleteProps.isRequired,\n clubId: PropTypes.string.isRequired,\n reactionsEnabled: PropTypes.bool.isRequired,\n iconExperimentCohort: PropTypes.string,\n page: pageProps.isRequired,\n cursorData: cursorDataProps.isRequired,\n feedType: feedTypeProps.isRequired,\n // range of number 0...19 representing rows returned by the server per feed load\n index: indexProps.isRequired,\n rowData: PropTypes.shape({\n title: PropTypes.string.isRequired,\n map: mapProps,\n activities: PropTypes.arrayOf(\n PropTypes.shape({\n activity_class_name: PropTypes.string,\n entity_id: PropTypes.number,\n activity_map: mapProps,\n is_routable: PropTypes.bool,\n is_commute: PropTypes.bool,\n is_virtual: PropTypes.bool,\n workout_type: PropTypes.string,\n privacy_tag_key: PropTypes.string,\n photos: PropTypes.arrayOf(\n PropTypes.shape({\n urls: PropTypes.shape({}).isRequired,\n caption: PropTypes.string\n })\n )\n })\n )\n }).isRequired,\n photos: PropTypes.shape({\n photoList: photoListProps\n }).isRequired,\n timeAndLocation: timeAndLocationProps.isRequired,\n athleteProfileId: PropTypes.string.isRequired,\n switchMapAndPhoto: PropTypes.bool.isRequired,\n kudosAndComments: PropTypes.shape({}).isRequired,\n embedDropdownEnabled: PropTypes.bool,\n isAutoplayEnabled: PropTypes.bool\n};\n\nGroupActivity.defaultProps = {\n iconExperimentCohort: null,\n embedDropdownEnabled: false,\n isAutoplayEnabled: true\n};\n\nexport default GroupActivity;\n","// extracted by mini-css-extract-plugin\nexport default {\"avatar\":\"ClubJoin--avatar--+N9qG\"};","import React, { useReducer } from 'react';\nimport PropTypes from 'prop-types';\n\nimport Avatar from '@strava/ui/Avatar';\nimport SportsRunNormalXsmall from '@strava/icons/SportsRunNormalXsmall';\nimport SportsWaterNormalXsmall from '@strava/icons/SportsWaterNormalXsmall';\nimport SportsBikeNormalXsmall from '@strava/icons/SportsBikeNormalXsmall';\nimport I18n from 'utils/I18n';\nimport styles from './styles.scss';\nimport useFeedAnalytics from '../../hooks/useFeedAnalytics';\nimport {\n pageProps,\n viewingAthleteProps,\n cursorDataProps,\n feedTypeProps,\n indexProps\n} from '../../props/feed-prop-types';\nimport FeedEntityContext from '../../state/FeedEntityContext';\nimport { init, reducer } from '../../state/feed-entity-reducer';\nimport { buildInitialState } from '../../state/feed-entity-init-state';\nimport AthleteJoinEntry from '../shared/AthleteJoinEntry';\nimport useFeedIntersectionObserver from '../../hooks/useFeedIntersectionObserver';\n\nconst i18nPrefix = 'components.feed.clubs';\n\nconst ClubJoin = ({\n viewingAthlete,\n clubId,\n page,\n entity,\n feedType,\n index,\n cursorData,\n rowData,\n athleteProfileId\n}) => {\n const { inView, intersectionObserverRef } = useFeedIntersectionObserver({\n index,\n isParentFeedEntry: true\n });\n\n const { trackAnalytics } = useFeedAnalytics({\n page,\n entity,\n entityId: rowData.entity_id,\n athleteProfileId,\n feedType,\n index,\n viewingAthleteId: viewingAthlete.id,\n clubId,\n inView\n });\n\n const [entityState] = useReducer(\n reducer,\n buildInitialState({\n trackAnalytics\n }),\n init\n );\n\n const providerState = {\n entityState\n };\n\n const clubIcon = () => {\n switch (rowData.club_type) {\n case 'cycling':\n return ;\n case 'running':\n return ;\n case 'swimming':\n return ;\n default:\n return null;\n }\n };\n\n const avatar = (\n {\n entityState.trackAnalytics({\n action: 'click',\n element: 'profile_picture'\n });\n }}\n />\n );\n\n const bodyProps = {\n entity,\n title: rowData.title,\n badge: avatar,\n entityName: rowData.club_name,\n entityUrl: rowData.club_url,\n entityIcon: clubIcon(),\n entityMemberCount: rowData.member_count,\n isMember: rowData.membership === 'member',\n secondaryText: rowData.location,\n intersectionObserverRef,\n index,\n cursorData,\n entityId: rowData.entity_id,\n labels: {\n join: I18n.t(`${i18nPrefix}.view`),\n view: I18n.t(`${i18nPrefix}.join`),\n joined: I18n.t(`${i18nPrefix}.joined`),\n memberCountKey: `${i18nPrefix}.members`,\n error: I18n.t(`${i18nPrefix}.error`)\n }\n };\n\n return (\n \n \n \n );\n};\n\nClubJoin.propTypes = {\n // feed entity could be Activity, group_activity, Post etc\n entity: PropTypes.oneOf(['Club']).isRequired,\n viewingAthlete: viewingAthleteProps.isRequired,\n clubId: PropTypes.string.isRequired,\n page: pageProps.isRequired,\n cursorData: cursorDataProps.isRequired,\n feedType: feedTypeProps.isRequired,\n // range of number 0...19 representing rows returned by the server per feed load\n index: indexProps.isRequired,\n rowData: PropTypes.shape({\n title: PropTypes.string.isRequired,\n club_avatar: PropTypes.string.isRequired,\n club_verified: PropTypes.bool.isRequired,\n club_name: PropTypes.string.isRequired,\n entity_id: PropTypes.number.isRequired,\n entity_owner: PropTypes.string,\n club_url: PropTypes.string.isRequired,\n location: PropTypes.string.isRequired,\n member_count: PropTypes.number.isRequired,\n club_type: PropTypes.string.isRequired,\n membership: PropTypes.string\n }).isRequired,\n athleteProfileId: PropTypes.string.isRequired\n};\n\nexport default ClubJoin;\n","import {\n UPDATE_NUM_ENTRIES,\n UPDATE_IS_RESTORING_SCROLL_POSITION,\n TOGGLE_IS_ACTIVITY_VIDEO_MUTED\n} from './feed-actions';\n\nexport function reducer(state, action) {\n switch (action.type) {\n case UPDATE_NUM_ENTRIES: {\n const { numEntries } = action.payload;\n return {\n ...state,\n numEntries\n };\n }\n case UPDATE_IS_RESTORING_SCROLL_POSITION: {\n const { status } = action.payload;\n return {\n ...state,\n isRestoringScrollPosition: status\n };\n }\n case TOGGLE_IS_ACTIVITY_VIDEO_MUTED: {\n const { muted } = action.payload;\n return {\n ...state,\n isActivityVideoMuted: muted\n };\n }\n default:\n throw new Error(`${action.type} - not recognized`);\n }\n}\n\nexport default { reducer };\n","import { useState } from 'react';\nimport createNetworkingClient from 'utils/networking-client';\nimport { isDev } from 'utils/dev-utils';\n\nconst useFetchFeedEntries = ({\n clubId,\n feedType,\n currentAthleteId,\n page,\n useMockData = false,\n preFetchedEntries\n}) => {\n const [entries, setEntries] = useState(preFetchedEntries || []); // profile-feed currently pre-fetches entry data and does not use\n const [pagination, setPagination] = useState({\n maxEntries: true,\n hasMore: page !== 'profile' || useMockData // profile feed does not use pagination\n });\n const [error, setError] = useState();\n const [isLoading, setIsLoading] = useState(false);\n\n const errorState = (e) => {\n setError(e);\n // TODO [monorepo] - log error to sentry\n };\n\n const buildEndpointUrl = (cursorData) => {\n const { before, rank } = cursorData; // See README for how before and rank cursor works\n\n let url;\n switch (page) {\n case 'dashboard':\n url = `/dashboard/feed`;\n break;\n case 'club':\n url = `/clubs/${clubId}/feed`;\n break;\n case 'profile':\n // profile feed entries are pre-fetched since it is still reloaded on interval graph filters and is not paginated\n return null;\n default:\n return null;\n }\n\n url = url.concat(`?feed_type=${feedType}`);\n url = currentAthleteId\n ? url.concat(`&athlete_id=${currentAthleteId}`)\n : url;\n url = clubId ? url.concat(`&club_id=${clubId}`) : url;\n url = before ? url.concat(`&before=${before}`) : url; // See README for how before and rank cursor works\n url = rank ? url.concat(`&cursor=${rank}`) : url;\n\n return url;\n };\n\n const timeout = (ms) => {\n return new Promise((resolve) => setTimeout(resolve, ms));\n };\n\n const loadMockData = async () => {\n const delay = 1000;\n const hasMore = true; // change this to false to stop infinite loading (only the first page will be loaded)\n const maxEntries = true;\n\n await timeout(delay);\n setIsLoading(false);\n import('../dev/feed-mock-data.json').then((mockData) => {\n setEntries((current) => [...current, ...mockData.entries]);\n setPagination({\n maxEntries,\n hasMore\n });\n });\n };\n\n const loadEntries = async ({ cursorData }) => {\n setIsLoading(true);\n if (useMockData && isDev()) {\n // only load mocked data in development mode to avoid prod data from being manipulated\n // by developers (eg reporting photo, deleting comment)\n await loadMockData();\n } else {\n const url = buildEndpointUrl(cursorData);\n if (url) {\n try {\n await createNetworkingClient()\n .get(url, { params: {} })\n .then((response) => {\n if (response && response.status === 200) {\n const { data } = response;\n const fetchedEntries = data.entries;\n setEntries((current) => [...current, ...fetchedEntries]);\n setPagination({\n maxEntries: data.pagination.maxEntries,\n hasMore:\n data.pagination.hasMore && fetchedEntries.length !== 0 // show limit message when no entries were fetched\n });\n setIsLoading(false);\n } else {\n // responses other than 200\n errorState(response.error);\n }\n })\n .catch((err) => {\n errorState(err);\n });\n } catch (err) {\n errorState(err);\n }\n } else {\n errorState(new Error(`endpoint for page - '${page}' is not defined`));\n }\n }\n };\n\n return { isLoading, entries, pagination, error, loadEntries };\n};\n\nexport default useFetchFeedEntries;\n","import { useCallback } from 'react';\nimport { useHistory } from 'react-router-dom';\n\nimport queryString from 'query-string';\nimport { isNil } from 'lodash-es';\n\n/**\n * Persists the scroll position for the feed into session storage so that the athlete can be\n * positioned on the last seen entry when they navigate away from the feed and back using the\n * browsers back button.\n */\nconst useFeedScrollRestoration = ({\n feedType,\n page,\n numEntries // number of entries to be fetched when the athlete navigates back to the feed\n}) => {\n // unique key since feed component can be mounted on different pages.\n // A page which might also have different variations of the feed within itself.\n const key = `${page}-${feedType}-scroll-top`;\n\n // browser history since this hook is used within 's BrowserRouter component\n const history = useHistory();\n\n /**\n * Saves the current scroll position and pushes a new url to the history stack.\n */\n const saveScrollPosition = useCallback(() => {\n if (isNil(sessionStorage)) {\n return;\n }\n // the scroll position is stored in sessionStorage vs localStorage since it is\n // cleared when the tab is closed.\n sessionStorage.setItem(key, window.scrollY);\n\n // preserve all current search params eg. dashboard?feed_type=following\n const searchParams = queryString.parse(window.location.search);\n // add new search param to the url eg. dashboard?feed_type=following&num_entries = 10\n searchParams.num_entries = numEntries;\n\n // #push - see https://v5.reactrouter.com/web/api/history\n history.push({\n search: queryString.stringify(searchParams)\n });\n }, [history, key, numEntries]);\n\n /**\n * Clears scroll position and removes num_entries search param from the browsers history stack\n */\n const clearScrollPosition = useCallback(() => {\n if (isNil(sessionStorage)) {\n return;\n }\n sessionStorage.removeItem(key);\n\n const searchParams = queryString.parse(window.location.search);\n delete searchParams.num_entries;\n history.push({\n search: queryString.stringify(searchParams)\n });\n }, [history, key]);\n\n const getScrollPosition = useCallback(() => {\n if (isNil(sessionStorage)) {\n return 0;\n }\n const value = window.sessionStorage.getItem(key);\n return value ? Number(value) : 0;\n }, [key]);\n\n return { getScrollPosition, saveScrollPosition, clearScrollPosition };\n};\n\nexport default useFeedScrollRestoration;\n","import React, { useReducer, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport I18n from 'utils/I18n';\nimport { Markup } from 'interweave';\nimport Spinner from '@strava/ui/Spinner';\nimport { minBy, snakeCase } from 'lodash-es';\nimport useInfiniteScroll from 'react-infinite-scroll-hook';\nimport { devLog } from 'utils/dev-utils';\nimport styles from './feed.scss';\n\nimport Activity from './components/Activity';\nimport Post from './components/Post';\nimport FancyPromo from './components/FancyPromo';\nimport PerformanceGoalCreated from './components/PerformanceGoalCreated';\nimport ChallengeJoin from './components/ChallengeJoin';\nimport SimplePromo from './components/SimplePromo';\nimport GroupActivity from './components/GroupActivity';\nimport ClubJoin from './components/ClubJoin';\n\nimport { reducer } from './state/feed-reducer';\n\nimport { feedTypeProps, pageProps } from './props/feed-prop-types';\nimport useFetchFeedEntries from './hooks/useFetchFeedEntries';\nimport useFeedScrollRestoration from './hooks/useFeedScrollRestoration';\nimport FeedContext from './state/FeedContext';\nimport { UPDATE_IS_RESTORING_SCROLL_POSITION } from './state/feed-actions';\n\nimport { FEED_ENTRY_TYPES } from './constants';\n\n// Cursor pagination is key for the feed so this function has been deliberately\n// exported so that it can be unit tested separately.\nexport const computeMinCursorData = (entries) => {\n return {\n minBeforeEntry: minBy(entries, (e) => {\n return e.cursorData.updated_at;\n }),\n minRankEntry: minBy(entries, (e) => {\n return e.cursorData.rank;\n })\n };\n};\n\nconst Feed = ({\n currentAthleteId,\n page,\n feedType,\n athleteProfileId,\n clubId,\n useMockData,\n reactionsEnabled,\n iconExperimentCohort,\n preFetchedEntries,\n locale,\n isAutoplayEnabled\n}) => {\n const {\n isLoading,\n error,\n entries,\n pagination,\n loadEntries\n } = useFetchFeedEntries({\n currentAthleteId,\n clubId,\n feedType,\n page,\n useMockData,\n preFetchedEntries\n });\n\n const [entityState, dispatch] = useReducer(reducer, {\n numEntries: 0,\n scrollTop: 0,\n page,\n feedType,\n isRestoringScrollPosition: false,\n isActivityVideoMuted: true\n });\n\n const {\n saveScrollPosition,\n getScrollPosition,\n clearScrollPosition\n } = useFeedScrollRestoration({ ...entityState });\n\n const providerState = {\n entityState,\n dispatch\n };\n\n useEffect(() => {\n // restore feed position if navigation is through the browser's history traversal operation\n if (performance) {\n const navigationEntries = performance.getEntriesByType('navigation');\n if (navigationEntries.length) {\n if (navigationEntries[0].type === 'back_forward') {\n const scrollPosition = getScrollPosition();\n if (scrollPosition) {\n devLog(`[Feed] restoring scroll position to ${scrollPosition}`);\n\n dispatch({\n type: UPDATE_IS_RESTORING_SCROLL_POSITION,\n payload: { status: true }\n });\n window.scrollTo(0, scrollPosition);\n clearScrollPosition();\n dispatch({\n type: UPDATE_IS_RESTORING_SCROLL_POSITION,\n payload: { status: false }\n });\n }\n }\n }\n } else {\n // TODO - log error or warning in sentry on the monorepo\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const { maxEntries, hasMore } = pagination;\n const i18nPrefix = 'components.feed';\n\n // return the proper feed card that can be rendered\n const renderEntry = (params) => {\n const { key, index } = params;\n const entryProps = Object.assign(entries[index], {\n athleteProfileId, // for analytics - when viewing feed on athlete page\n clubId, // for analytics - when viewing feed on club details page\n index,\n page,\n reactionsEnabled,\n iconExperimentCohort,\n feedType,\n key,\n locale,\n isAutoplayEnabled\n });\n\n let entry;\n const entityName = snakeCase(entryProps.entity);\n switch (entityName) {\n case FEED_ENTRY_TYPES.activity:\n entry = ;\n break;\n case FEED_ENTRY_TYPES.post:\n entry = ;\n break;\n case FEED_ENTRY_TYPES.fancyPromo:\n entry = ;\n break;\n case FEED_ENTRY_TYPES.performanceGoalCreated:\n entry = ;\n break;\n case FEED_ENTRY_TYPES.challenge:\n entry = ;\n break;\n case FEED_ENTRY_TYPES.simplePromo:\n entry = ;\n break;\n case FEED_ENTRY_TYPES.groupActivity:\n entry = ;\n break;\n case FEED_ENTRY_TYPES.club:\n entry = ;\n break;\n default:\n devLog(`Could not translate props into entry - ${entityName}`);\n entry =
    N/A RF
    ; // TODO: Replace this with sentry error logging in monorepo\n }\n return (\n saveScrollPosition()}\n onKeyDown={() => saveScrollPosition()}\n role=\"button\"\n tabIndex={0}\n className={styles.entryContainer}\n key={key}\n >\n {entry}\n \n );\n };\n\n const endMessage = () => {\n if (page === 'dashboard' && !isLoading) {\n const content = maxEntries\n ? `${i18nPrefix}.no_more.limit`\n : `${i18nPrefix}.no_more.days`;\n return (\n
    \n {I18n.t(content)}\n
    \n \n
    \n );\n }\n return null;\n };\n\n const loader = () => {\n return (\n
    \n
    \n {error ? I18n.t(`${i18nPrefix}.error_message`) : }\n
    \n
    \n );\n };\n\n const loadMoreRows = () => {\n let minBeforeEntry;\n let minRankEntry;\n if (entries.length > 0) {\n ({ minBeforeEntry, minRankEntry } = computeMinCursorData(entries));\n }\n const before = minBeforeEntry ? minBeforeEntry.cursorData.updated_at : null;\n const rank = minRankEntry ? minRankEntry.cursorData.rank : null;\n devLog(`[Feed#loadMoreRows] before: ${before} rank: ${rank}`);\n loadEntries({ cursorData: { before, rank } });\n };\n\n const [sentryRef] = useInfiniteScroll({\n loading: isLoading,\n hasNextPage: hasMore,\n onLoadMore: loadMoreRows,\n // When there is an error, we stop infinite loading.\n // It can be reactivated by setting \"error\" state as undefined.\n disabled: !!error,\n // `rootMargin` is passed to `IntersectionObserver`.\n // We can use it to trigger 'onLoadMore' when the sentry comes near to become\n // visible, instead of becoming fully visible on the screen.\n rootMargin: '0px 0px 1000px 0px'\n });\n\n return (\n \n {entries.map((_, index) => renderEntry({ key: index, index }))}\n {!hasMore && endMessage()}\n\n {(isLoading || hasMore) &&
    {loader()}
    }\n
    \n );\n};\n\nFeed.propTypes = {\n currentAthleteId: PropTypes.number.isRequired,\n page: pageProps.isRequired,\n feedType: feedTypeProps.isRequired,\n athleteProfileId: PropTypes.string.isRequired,\n clubId: PropTypes.string.isRequired,\n useMockData: PropTypes.bool.isRequired,\n reactionsEnabled: PropTypes.bool.isRequired,\n iconExperimentCohort: PropTypes.string,\n preFetchedEntries: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\n locale: PropTypes.string.isRequired,\n isAutoplayEnabled: PropTypes.bool.isRequired\n};\n\nFeed.defaultProps = {\n iconExperimentCohort: null\n};\n\nexport default Feed;\n","import React from 'react';\nimport { BrowserRouter as Router } from 'react-router-dom';\nimport Feed from './Feed';\n\nconst FeedRouter = (props) => {\n return (\n \n \n \n );\n};\n\nexport default FeedRouter;\n","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"media--container--mMuGD\",\"entry\":\"media--entry--nflNG\",\"entry-block\":\"media--entry-block--Orvh8\",\"entryBlock\":\"media--entry-block--Orvh8\",\"entry-header\":\"media--entry-header--31079\",\"entryHeader\":\"media--entry-header--31079\",\"media\":\"media--media--srMNh\",\"media-left\":\"media--media-left--naNZ9\",\"mediaLeft\":\"media--media-left--naNZ9\",\"media-actions\":\"media--media-actions--e7uE8\",\"mediaActions\":\"media--media-actions--e7uE8\",\"media-body\":\"media--media-body--2+Kk1\",\"mediaBody\":\"media--media-body--2+Kk1\",\"entry-body\":\"media--entry-body--G40Sh\",\"entryBody\":\"media--entry-body--G40Sh\",\"entry-footer\":\"media--entry-footer--MzUvu\",\"entryFooter\":\"media--entry-footer--MzUvu\",\"entry-media\":\"media--entry-media--Zty7u\",\"entryMedia\":\"media--entry-media--Zty7u\"};","import React, { useRef } from 'react';\nimport Card from './Card';\nimport EntryHeader from './EntryHeader';\nimport Media from './Media';\nimport MediaLeft from './MediaLeft';\nimport MediaActions from './MediaActions';\nimport MediaBody from './MediaBody';\nimport styles from './feed-media-showcase.scss';\nimport EntryBlock from './EntryBlock';\nimport EntryBody from './EntryBody';\nimport EntryFooter from './EntryFooter';\nimport EntryMedia from './EntryMedia/EntryMedia';\n\nconst FeedMediaShowCase = () => {\n const ref = useRef();\n\n const cursorData = {\n updated_at: 2,\n rank: 1\n };\n\n return (\n
    \n
    \n \n EntryHeader | Media (default)\n \n Media\n \n MediaLeft\n MediaBody\n \n MediaActions\n \n \n \n EntryBlock\n \n
      \n
    • \n \n EntryHeader\n \n
    • \n
    • \n \n EntryHeader\n \n
    • \n
    \n
    \n EntryBody (default)\n \n \n MediaBody\n \n \n EntryBody inset\n \n \n MediaBody\n \n \n
    \n
    \n\n
    \n \n EntryHeader | Media - centered\n \n \n MediaLeft\n MediaBody\n \n MediaActions\n \n \n \n \n
    \n\n
    \n \n EntryHeader | Media | MediaBody only\n \n \n MediaBody\n \n \n \n
    \n\n
    \n \n EntryFooter | default\n \n Media\n \n EntryFooter | inset (true)\n \n Media\n \n \n
    \n\n
    \n \n EntryMedia | default\n \n Media\n \n EntryMedia | inset (true)\n \n Media\n \n \n
    \n
    \n );\n};\n\nexport default FeedMediaShowCase;\n","// Pages that use the feed pack also use stuff like MentionableComments\n// So, we will import the main 'strava_with_framework' that imports\n// and registers that component.\nimport './strava_with_framework';\n\nimport ReactComponentMounter from '../utils/react-component-mounter';\n\n// Feed specific components:\nimport FeedRouter from '../components/Feed';\nimport FeedMediaShowCase from '../components/Feed/components/shared/media/FeedMediaShowCase';\nimport Activity from '../components/Feed/components/Activity';\nimport Post from '../components/Feed/components/Post';\nimport ChallengeJoin from '../components/Feed/components/ChallengeJoin';\nimport ClubJoin from '../components/Feed/components/ClubJoin';\nimport FancyPromo from '../components/Feed/components/FancyPromo';\nimport SimplePromo from '../components/Feed/components/SimplePromo';\nimport GroupActivity from '../components/Feed/components/GroupActivity';\nimport PerformanceGoalCreated from '../components/Feed/components/PerformanceGoalCreated';\n\n// Modules from \nimport EmailVerificationCTA from '../components/EmailVerificationCTA';\nimport NotificationEmailVerificationCTA from '../components/EmailVerificationCTA/placements/NotificationEmailVerificationCTA';\n\nReactComponentMounter.register({\n Activity,\n ChallengeJoin,\n ClubJoin,\n EmailVerificationCTA,\n FancyPromo,\n FeedRouter,\n FeedMediaShowCase,\n GroupActivity,\n NotificationEmailVerificationCTA,\n PerformanceGoalCreated,\n Post,\n SimplePromo\n});\n"],"names":["UrlResendVerificationEmail","EmailVerificationCTA","state","modalIsOpen","resendEmailInProgress","resendEmail","setState","createNetworkingClient","post","then","catch","closeModal","componentDidMount","this","props","resendOnMount","render","children","className","email","optionalExplanation","cta","onClick","styles","I18n","Modal","isOpen","onRequestClose","title","pending_email","class_name","email_settings_path","React","defaultProps","NotificationEmailVerificationCTA","iconURL","text","src","alt","FeedContext","useFeedContext","displayName","UPDATE_NUM_ENTRIES","UPDATE_IS_RESTORING_SCROLL_POSITION","TOGGLE_IS_ACTIVITY_VIDEO_MUTED","PowerAndSegmentGoalAchievements","powerAndSegmentGoalAchievements","activityId","length","href","url","description","noWrap","content","more_goals_link","count","FeaturedBestEffortAchievements","segAndBestEffortAchievements","filter","elem","featured","hidden","slice","map","achievement","entry","distance_based_best_effort","push","key","activity_id","id_string","name","elapsed_time","ActivityStats","stats","Stats","listClassName","chunk","stat","Stat","value","labelClassName","label","AchievementCount","entityId","dispatch","useFeedEntityContext","Button","variant","type","OPEN_MODAL_ACHIEVEMENTS_TAB","payload","element","selectedEntityId","size","Cldr","ActivityTextBody","activityName","ownedByCurrentAthlete","flagged","entityState","useState","readMore","setReadMore","isExpandable","splitDescription","cleanDescription","trim","firstSection","substr","Math","min","lastIndexOf","handleMentionClick","e","athleteId","target","match","trackAnalytics","action","properties","clicked_athlete_id","join","element_source","ActionsFlagHighlightedXsmall","fill","colors","disableLineBreaks","transform","nodeName","innerText","tabIndex","PropTypes","ACTIVITY_LIST","CumulativeGoalAchievement","cumulativeGoalAchievement","sportType","athleteFirstName","displayKey","prefix","toLowerCase","includes","athlete","Media","centered","options","classNames","MediaBody","ActivityEntryBody","isEmpty","FeaturedSegmentEffortAndBestEffortAchievements","anchor_container_click_data","page","entity","athleteProfileId","feedType","index","clubId","viewingAthleteId","activityIds","inView","isNil","devLog","entityName","hash","isRestoringScrollPosition","parentLevelProperties","snakeCase","in_group","FEED_ENTRY_TYPES","source","viewing_athlete_id","rank","entity_id","club_id","profile_athlete","post_id","challenge_id","headline_activity_id","group_activity_ids","trackable_id","performance_goal_id","useCallback","childElementFields","feedAnalyticsCommonFields","category","trackV2","isFirstRenderRef","useRef","useEffect","current","client","cache","errorState","updateRitmo","elementId","path","promo","Error","response","status","error","isParentFeedEntry","useInView","threshold","intersectionObserverRef","dispatchFeed","numEntries","roundUpNearest10","hideAnywhereSetting","paths","experimentVar","units","i18nPrefix","analyticProps","useFeedIntersectionObserver","useFeedRitmoCapping","analyticsProperties","hide_anywhere","useFeedAnalytics","promptImpression","ActivityDistanceNormalXsmall","ref","window","location","hideAnywhere","AchievementCelebration","subtitle","image","imageCaption","image_caption","id","lines","buttons","delay","tag","Map","activityMap","isRoutable","entryTypeClassName","isVirtual","isCommute","isGroupActivity","workoutType","privacyTagKey","elements","tags","buildActivityMapTags","srcSet","Poc","Controls","VideoItem","media","onReady","playOnHover","isAutoPlayItem","isActivityVideoMuted","isAutoplayEnabled","video","setVideo","hoverTimerRef","pause","clearTimeout","paused","preload","inViewRef","currentTime","hasStarted","posterImage","show","cx","onKeyPress","onMouseEnter","setTimeout","videojs","p","forEach","play","onMouseLeave","role","fallback","duration","videoId","photo_id","vid","controls","loop","muted","PhotoGrid","photoList","maxNumPhotosToShow","singleImageHighlighted","photoIndex","params","setParams","orderIndex","media_type","image_id","has_description","caption_escaped","order","activity_athlete_id","owner_id","video_id","photoCount","showPhotoLightbox","firstVideoId","useMemo","maxNumVideoCanAutoplay","filtered","snowplowMediaClickEvent","isImage","openLightBox","photoGridElements","highlightedImageForPosts","large","photo","photoId","caption","onTouchStart","autoPlayVideoInView","ADD_AUTOPLAY_VIDEO","autoPlayVideo","showEnhancedTag","enhanced_photo","extraPhotos","StravaMediaLightbox","selectedPhotoIndex","onMount","data","entity_type","element_entity_type","element_entity_id","onMediaClick","onCloseRequest","photoGrid","ACTIVITY","GROUP_ACTIVITY","POST","PhotosAndMapImage","feedImageHeight","entryType","feedName","isPost","showMap","showPhotoGrid","showPost","totalNumEntryImages","ACTIVITY_MAX_PHOTO_COUNT","imagesContainerClass","imageEntriesContainerClass","containerClassNames","reject","CommentsThread","onSeeMoreCommentsClick","showCommentReactions","iconExperimentCohort","commentReactionAnalytics","buttonElement","listElement","comments","numComments","totalComments","max","comment","timeAgoTimestamp","buildTimeAgoTimestamp","timestamp","reactions_summary","hasReacted","has_reacted","commentReactionCount","reaction_count","comment_id","Avatar","avatar_url","badge","member_type","deletable","reportable","DELETE_COMMENT_START","deleteComment","CommentReaction","commentId","analyticsProps","number","MediaActions","KudosAndComments","kudosAndComments","viewingAthlete","entityOwner","entityTitle","openCommentsModalOnIconClick","showHairlineOnTop","reactionsEnabled","canKudo","kudosCount","initialLoadHighlightedKudosers","highlightedKudosers","commentsEnabled","canKudoStatus","setCanKudoStatus","currentKudoCount","setCurrentKudoCount","showForm","setShowForm","hasKudoed","setHasKudoed","setHighlightedKudosers","showKudosCallToAction","handleAvatarGroupClick","OPEN_MODAL_KUDOS_TAB","handleClickKudoFail","onClickKudoSuccessful","prev","highlightedKudoser","avatarUrl","destination_url","display_name","show_name","concat","entityEndpoint","kudosUpdateEndpoint","onClickKudo","kudoPosted","components","onClickComment","OPEN_MODAL_COMMENTS_TAB","AvatarGroup","kudoer","MentionableCommentForm","autoFocus","openKudosCommentModal","isViewingCommentReactionsList","KudosCommentsAndAchievementsModal","hasOtherAthletes","Subtitle","timestampFormat","displayDateAtTime","displayDate","showDate","showLocation","shareable","twitterUrl","embedDropdownEnabled","isEmbedModalOpen","setIsEmbedModalOpen","toggleEmbedModalOpen","event","preventDefault","Dropdown","onSelect","left","screen","width","height","open","EmbedModal","embedType","embedId","onDismiss","EntryHeader","child","MediaLeft","bigBadge","HeaderWithOwnerMetadata","timeAndLocation","isBoosted","displayImage","memberType","profileUrl","SocialShareDropdownActions","ActionsStarHighlightedXsmall","icon","message","visibility","hiddenStatIndicatorString","showVisibilityMessage","sectionStyle","iconStyle","Card","forwardRef","cursorData","EntryBody","inset","impression","EntryMedia","EntryFooter","Activity","activity","athleteName","firstName","descriptionMentionedAthleteIds","mapVisPrompt","maharajAchievement","mapAndPhotos","mentioned_athletes","useReducer","reducer","buildInitialState","init","providerState","translatedSportType","showHiddenStatIndicator","pageHeight","innerHeight","document","documentElement","clientHeight","rootMargin","AUTOPLAY_MARGIN_TOP","inViewAutoPlayRef","inViewAutoPlay","autoPlayVideos","SET_AUTOPLAY_VIDEO_IN_VIEW","observerRes","node","FeedEntityContext","ActivityIcon","CommentDeleteAlertDialog","Post","photoUrlHash","videoThumbnailIcon","bodyStyle","body","sharedContents","path_prefix","originator_id","originator_avatar_url","originator_name","parent_type","toString","is_boosted","is_sharable","twitter_url","summary","typeClass","charAt","toUpperCase","rel","thumbnail_url","videoIcon","hostname","primary_photo","urls","getPhotoWithMaxDimension","unique_id","can_kudo","kudos_count","highlighted_kudosers","comments_enabled","BackgroundHeaderImage","backgroundImage","PromoEntry","click","headline","ctaText","ctaUrl","baseUrl","headers","get","rowData","bodyProps","cta_action","resource","cta_text","background_image","PerformanceGoalSingleView","goalEntries","goalEntry","joinable","athlete_id","athlete_avatar_url","athlete_display_name","athlete_member_type","athlete_feed_entry_id","goal_path","iconSrc","iconUrl","iconAlt","showAllEntries","setShowAllEntries","firstGoalEntry","nextFiveGoalEntries","restOfGoalEntries","every","goal_type","goal_id","goal_entries","DOB_UPDATE_FAILED","DOB_UPDATE_REQUESTED","DOB_UPDATE_SUCCESS","MODAL_CHANGE_DATE","MODAL_CLOSE","types","gatingModal","requestInProgress","dateOfBirth","isTooYoung","currentAthlete","ageGate","dateSelected","date","FeedEntryAgeGate","minimumAge","joinUrl","joinMethod","redirectUrl","onUpdateDOB","locale","gatingConditions","joinChallengeFn","method","Date","statefulAthlete","AgeGateModal","handleModalClose","actions","handleDateSelectionChange","handleDateUpdateInProgress","handleDateUpdateSuccess","serializedDate","getFullYear","getMonth","getDate","d","toDateString","setFullYear","handleDateUpdateFailure","AthleteJoinEntry","entityUrl","entityIcon","entityMemberCount","isMember","secondaryText","labels","buttonLabelAndVariant","view","memberCountLabel","memberCountKey","disabled","openAgeGateModal","ageGateModalProps","entryState","setEntryState","Accept","joined","clickGroupHeader","onKeyDown","youngestDob","parseInt","ageGateAndJoinChallenge","logo","challenge_url","challenge_name","entry_logo_url","getIcon","displayed_icon","participant_count","challenge_joinable","challenge_ended","days_left","gating_conditions","minimum_age","join_method","join_url","virtual_race","join_button_text","EntryBlock","GroupActivityEntry","photos","athlete_name","noAchievementsAndMapsPhotos","web_achievement","owned_by_current_athlete","achievements","performance_goals","goals","athlete_firstname","GroupActivity","switchMapAndPhoto","headLineActivity","activities","headlineEntityId","a","mentionedAthletesByActivity","Object","fromEntries","description_mentioned_athlete_ids","commentsByActivityId","commentsHash","entries","parentEntityId","activity_class_name","OPEN_MODAL_OTHER_ATHLETES_TAB","noHtml","bannerImage","headlinePhoto","getActivityMap","is_routable","is_virtual","is_commute","workout_type","privacy_tag_key","avatar","club_avatar","club_name","club_url","club_verified","club_type","SportsBikeNormalXsmall","SportsRunNormalXsmall","SportsWaterNormalXsmall","clubIcon","member_count","membership","currentAthleteId","useMockData","preFetchedEntries","setEntries","maxEntries","hasMore","pagination","setPagination","setError","isLoading","setIsLoading","buildEndpointUrl","before","timeout","ms","Promise","resolve","loadMockData","mockData","loadEntries","isDev","fetchedEntries","err","history","useHistory","saveScrollPosition","sessionStorage","setItem","scrollY","searchParams","queryString","search","num_entries","clearScrollPosition","removeItem","getScrollPosition","getItem","Number","Feed","useFetchFeedEntries","scrollTop","useFeedScrollRestoration","performance","navigationEntries","getEntriesByType","scrollPosition","scrollTo","useInfiniteScroll","loading","hasNextPage","onLoadMore","minBeforeEntry","minRankEntry","minBy","updated_at","computeMinCursorData","sentryRef","_","entryProps","assign","renderEntry","endMessage","Spinner","ReactComponentMounter","ChallengeJoin","ClubJoin","FancyPromo","FeedRouter","FeedMediaShowCase","PerformanceGoalCreated","SimplePromo"],"sourceRoot":""}