{"version":3,"file":"js/strava_with_framework_and_feed-2f47e63709d6577e4cf2.js","mappings":"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","sources":["webpack://StravaModern/./app/javascript/components/Feed/feed.scss?5d97","webpack://StravaModern/./app/javascript/components/Feed/components/Activity/styles.scss?e094","webpack://StravaModern/./app/javascript/components/Feed/components/shared/ActivityEntryBody/index.scss?3531","webpack://StravaModern/./app/javascript/components/Feed/components/shared/ActivityEntryBody/PowerAndSegmentGoalAchievements/PowerAndSegmentGoalAchievements.js","webpack://StravaModern/./app/javascript/components/Feed/components/shared/ActivityEntryBody/FeaturedSegmentEffortAndBestEffortAchievements/FeaturedSegmentEffortAndBestEffortAchievements.js","webpack://StravaModern/./app/javascript/components/Feed/components/shared/ActivityEntryBody/ActivityStats/ActivityStats.js","webpack://StravaModern/./app/javascript/components/Feed/components/shared/ActivityEntryBody/AchievementCount/AchievementCount.js","webpack://StravaModern/./app/javascript/components/Feed/components/shared/FeedEntityContext.js","webpack://StravaModern/./app/javascript/components/Feed/components/shared/ActivityEntryBody/ActivityTextBody/ActivityTextBody.js","webpack://StravaModern/./app/javascript/components/Feed/components/shared/ActivityEntryBody/CumulativeGoalAchievement/CumulativeGoalAchievement.js","webpack://StravaModern/./app/javascript/components/Feed/components/shared/media/Media/media.scss?6a38","webpack://StravaModern/./app/javascript/components/Feed/components/shared/media/Media/Media.js","webpack://StravaModern/./app/javascript/components/Feed/components/shared/media/MediaBody/media-body.scss?1807","webpack://StravaModern/./app/javascript/components/Feed/components/shared/media/MediaBody/MediaBody.js","webpack://StravaModern/./app/javascript/components/Feed/components/shared/ActivityEntryBody/ActivityEntryBody.js","webpack://StravaModern/./app/javascript/components/Feed/components/shared/MapVisPrompt/index.scss?9357","webpack://StravaModern/./app/javascript/components/Feed/components/shared/FeedContext.js","webpack://StravaModern/./app/javascript/components/Feed/hooks/useFeedAnalytics.js","webpack://StravaModern/./app/javascript/components/Feed/hooks/useFeedRitmoCapping.js","webpack://StravaModern/./app/javascript/components/Feed/components/shared/feed.actions.js","webpack://StravaModern/./app/javascript/components/Feed/utils/utils.js","webpack://StravaModern/./app/javascript/components/Feed/hooks/useFeedIntersectionObserver.js","webpack://StravaModern/./app/javascript/components/Feed/components/shared/MapVisPrompt/MapVisPrompt.js","webpack://StravaModern/./app/javascript/components/Feed/components/shared/MaharajAchievementCelebration/index.scss?ce81","webpack://StravaModern/./app/javascript/components/Feed/components/shared/MaharajAchievementCelebration/MaharajAchievementCelebration.js","webpack://StravaModern/./app/javascript/components/Feed/components/shared/PhotosAndMapImage/styles.scss?8410","webpack://StravaModern/./app/javascript/components/Feed/components/shared/PhotosAndMapImage/Map/Map.js","webpack://StravaModern/./app/javascript/components/Feed/components/shared/entity-actions.js","webpack://StravaModern/./app/javascript/components/Feed/components/shared/PhotosAndMapImage/PhotoGrid/VideoItem/Controls/Controls.scss?c1d8","webpack://StravaModern/./app/javascript/components/Feed/components/shared/PhotosAndMapImage/PhotoGrid/VideoItem/Controls/Controls.js","webpack://StravaModern/./app/javascript/components/Feed/components/shared/PhotosAndMapImage/PhotoGrid/VideoItem/VideoItem.scss?a90e","webpack://StravaModern/./app/javascript/components/Feed/components/shared/PhotosAndMapImage/PhotoGrid/VideoItem/VideoItem.js","webpack://StravaModern/./app/javascript/components/Feed/components/shared/PhotosAndMapImage/PhotoGrid/PhotoGrid.js","webpack://StravaModern/./app/javascript/components/Feed/components/shared/PhotosAndMapImage/PhotosAndMapImage.js","webpack://StravaModern/./app/javascript/components/Feed/components/shared/KudosAndComments/styles.scss?bbd6","webpack://StravaModern/./app/javascript/components/Feed/components/shared/KudosAndComments/CommentsThread/styles.scss?c7f7","webpack://StravaModern/./app/javascript/components/Feed/components/shared/media/MediaLeft/media-left.scss?1044","webpack://StravaModern/./app/javascript/components/Feed/components/shared/media/MediaLeft/MediaLeft.js","webpack://StravaModern/./app/javascript/components/Feed/components/shared/KudosAndComments/CommentsThread/CommentsThread.js","webpack://StravaModern/./app/javascript/components/Feed/components/shared/media/MediaActions/media-actions.scss?0433","webpack://StravaModern/./app/javascript/components/Feed/components/shared/media/MediaActions/MediaActions.js","webpack://StravaModern/./app/javascript/components/Feed/components/shared/KudosAndComments/KudosAndComments.js","webpack://StravaModern/./app/javascript/components/Feed/components/shared/feedEntity.reducer.js","webpack://StravaModern/./app/javascript/components/Feed/components/shared/feedEntity.init-state.js","webpack://StravaModern/./app/javascript/components/Feed/components/shared/HeaderWithOwnerMetadata/HeaderWithOwnerMetadata.scss?7129","webpack://StravaModern/./app/javascript/components/Feed/components/shared/LocationAndTime/index.scss?7424","webpack://StravaModern/./app/javascript/components/Feed/components/shared/LocationAndTime/LocationAndTime.js","webpack://StravaModern/./app/javascript/components/Feed/components/shared/EntityActions/styles.scss?10d2","webpack://StravaModern/./app/javascript/components/Feed/components/shared/EntityActions/EntityActions.js","webpack://StravaModern/./app/javascript/components/Feed/components/shared/media/EntryHeader/entry-header.scss?d8d9","webpack://StravaModern/./app/javascript/components/Feed/components/shared/media/EntryHeader/EntryHeader.js","webpack://StravaModern/./app/javascript/components/Feed/components/shared/HeaderWithOwnerMetadata/HeaderWithOwnerMetadata.js","webpack://StravaModern/./app/javascript/components/Feed/components/shared/VisibilityMessage/index.scss?2201","webpack://StravaModern/./app/javascript/components/Feed/components/shared/VisibilityMessage/VisibilityMessage.js","webpack://StravaModern/./app/javascript/components/Feed/components/shared/HiddenStatIndicator/index.scss?f6aa","webpack://StravaModern/./app/javascript/components/Feed/components/shared/HiddenStatIndicator/HiddenStatIndicator.js","webpack://StravaModern/./app/javascript/components/Feed/components/shared/media/Card/card.scss?39d0","webpack://StravaModern/./app/javascript/components/Feed/components/shared/media/Card/Card.js","webpack://StravaModern/./app/javascript/components/Feed/components/shared/media/EntryBody/entry-body.scss?4042","webpack://StravaModern/./app/javascript/components/Feed/components/shared/media/EntryBody/EntryBody.js","webpack://StravaModern/./app/javascript/components/Feed/components/shared/media/EntryMedia/entry-media.scss?5130","webpack://StravaModern/./app/javascript/components/Feed/components/shared/media/EntryMedia/EntryMedia.js","webpack://StravaModern/./app/javascript/components/Feed/components/shared/media/EntryFooter/entry-footer.scss?89c8","webpack://StravaModern/./app/javascript/components/Feed/components/shared/media/EntryFooter/EntryFooter.js","webpack://StravaModern/./app/javascript/components/Feed/components/Activity/Activity.js","webpack://StravaModern/./app/javascript/constants/follows/following-constants.js","webpack://StravaModern/./app/javascript/api/athlete/athlete.js","webpack://StravaModern/./app/javascript/components/Feed/components/SuggestedActivity/SuggestedActivity.helpers.js","webpack://StravaModern/./app/javascript/components/Feed/components/SuggestedActivity/SuggestedActivity.scss?0ca8","webpack://StravaModern/./app/javascript/components/Feed/components/SuggestedActivity/SuggestedActivity.js","webpack://StravaModern/./app/javascript/components/Feed/components/Post/styles.scss?ff7c","webpack://StravaModern/./app/javascript/components/Feed/components/Post/Post.js","webpack://StravaModern/./app/javascript/components/Feed/components/FancyPromo/styles.scss?8b0d","webpack://StravaModern/./app/javascript/components/Feed/components/shared/PromoEntry/index.scss?71c9","webpack://StravaModern/./app/javascript/components/shared/ConditionalWrapper/ConditionalWrapper.js","webpack://StravaModern/./app/javascript/components/Feed/components/shared/PromoEntry/PromoEntry.js","webpack://StravaModern/./app/javascript/components/Feed/components/FancyPromo/FancyPromo.js","webpack://StravaModern/./app/javascript/components/Feed/components/shared/PerformanceGoalSingleView/index.scss?31d4","webpack://StravaModern/./app/javascript/components/Feed/components/shared/PerformanceGoalSingleView/PerformanceGoalSingleView.js","webpack://StravaModern/./app/javascript/components/Feed/components/shared/PerformanceGoalMultiView/index.scss?12b1","webpack://StravaModern/./app/javascript/components/Feed/components/shared/GoalEntry/index.scss?b240","webpack://StravaModern/./app/javascript/components/Feed/components/shared/GoalEntry/GoalEntry.js","webpack://StravaModern/./app/javascript/components/Feed/components/shared/PerformanceGoalMultiView/PerformanceGoalMultiView.js","webpack://StravaModern/./app/javascript/components/Feed/components/PerformanceGoalCreated/PerformanceGoalCreated.js","webpack://StravaModern/./app/javascript/components/Feed/components/ChallengeJoin/styles.scss?817e","webpack://StravaModern/./app/javascript/components/Feed/components/shared/AthleteJoinEntry/index.scss?810e","webpack://StravaModern/./app/javascript/components/Feed/components/shared/FeedEntryAgeGate/actions.js","webpack://StravaModern/./app/javascript/components/Feed/components/shared/FeedEntryAgeGate/reducers.js","webpack://StravaModern/./app/javascript/components/Feed/components/shared/FeedEntryAgeGate/index.js","webpack://StravaModern/./app/javascript/components/Feed/components/shared/AthleteJoinEntry/AthleteJoinEntry.js","webpack://StravaModern/./app/javascript/components/Feed/components/ChallengeJoin/ChallengeJoin.js","webpack://StravaModern/./app/javascript/components/Feed/components/SimplePromo/styles.scss?a8b4","webpack://StravaModern/./app/javascript/components/Feed/components/SimplePromo/SimplePromo.js","webpack://StravaModern/./app/javascript/components/Feed/components/shared/media/EntryBlock/entry-block.scss?32d3","webpack://StravaModern/./app/javascript/components/Feed/components/shared/media/EntryBlock/EntryBlock.js","webpack://StravaModern/./app/javascript/components/Feed/components/GroupActivity/GroupActivityEntry/GroupActivityEntry.scss?508e","webpack://StravaModern/./app/javascript/components/Feed/components/GroupActivity/GroupActivityEntry/GroupActivityEntry.js","webpack://StravaModern/./app/javascript/components/Feed/components/GroupActivity/styles.scss?9dad","webpack://StravaModern/./app/javascript/components/Feed/components/GroupActivity/GroupActivity.js","webpack://StravaModern/./app/javascript/components/Feed/components/ClubJoin/styles.scss?e380","webpack://StravaModern/./app/javascript/components/Feed/components/ClubJoin/ClubJoin.js","webpack://StravaModern/./app/javascript/components/Feed/components/shared/feed.reducer.js","webpack://StravaModern/./app/javascript/components/Feed/hooks/useFetchFeedEntries.js","webpack://StravaModern/./app/javascript/components/Feed/hooks/useFeedScrollRestoration.js","webpack://StravaModern/./app/javascript/components/Feed/Feed.js","webpack://StravaModern/./app/javascript/components/Feed/FeedRouter.js","webpack://StravaModern/./app/javascript/components/Feed/components/shared/media/feed-media-showcase.scss?7449","webpack://StravaModern/./app/javascript/components/Feed/components/shared/media/FeedMediaShowCase.js","webpack://StravaModern/./app/javascript/packs/strava_with_framework_and_feed.js"],"sourcesContent":["// extracted by mini-css-extract-plugin\nexport default {\"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\",\"no-posts-message\":\"Feed--no-posts-message--Zza+D\",\"noPostsMessage\":\"Feed--no-posts-message--Zza+D\",\"create-post-link\":\"Feed--create-post-link--rm2hX\",\"createPostLink\":\"Feed--create-post-link--rm2hX\"};","// 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 { useKudosAndCommentsContext } from '../../../../../shared/KudosCommentsAndAchievements/KudosAndCommentsContext';\nimport { OPEN_MODAL_ACHIEVEMENTS_TAB } from '../../../../../shared/KudosCommentsAndAchievements/kudosAndComments.actions';\n\n// Segment Effort And Best Effort Achievements Count\nconst AchievementCount = ({ segAndBestEffortAchievements, entityId }) => {\n const { dispatch } = useKudosAndCommentsContext();\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 from 'react';\n\nconst FeedEntityContext = React.createContext();\n// Context object accepts a displayName string property.\n// React DevTools uses this string to determine what to display for the context.\nFeedEntityContext.displayName = 'FeedEntityContext';\n\nexport function useFeedEntityContext() {\n return React.useContext(FeedEntityContext);\n}\n\nexport default FeedEntityContext;\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 '../../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 { feedEntityState } = 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 isEntityClub = e.target.href.includes('club');\n const entityId = e.target.href.match(/\\/([^/]+)$/)[1];\n feedEntityState.trackAnalytics({\n action: 'click',\n element: 'mention',\n properties: {\n clicked_athlete_id: isEntityClub ? null : entityId,\n clicked_club_id: isEntityClub ? entityId : null\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 feedEntityState.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\",\"center-vertically\":\"MediaBody--center-vertically--kge-V\",\"centerVertically\":\"MediaBody--center-vertically--kge-V\"};","import React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from '@strava/ui/clsx';\nimport styles from './media-body.scss';\n\nconst MediaBody = ({ children, className, centerVertically, ...options }) => (\n \n {children}\n \n);\n\nMediaBody.propTypes = {\n children: PropTypes.node.isRequired,\n className: PropTypes.string,\n centerVertically: PropTypes.bool\n};\n\nMediaBody.defaultProps = {\n className: null,\n centerVertically: false\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 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","import { useCallback, useEffect, useRef } from 'react';\nimport { isNil, snakeCase } from 'lodash-es';\n\nimport { trackV2 } from 'utils/analytics';\nimport { FEED_ENTRY_TYPES } from '../constants';\nimport { useFeedContext } from '../components/shared/FeedContext';\nimport { devLog } from '../../../utils/devUtils';\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 { useCallback } from 'react';\n\nimport { useFeedContext } from '../components/shared/FeedContext';\nimport { logError } from '../../../utils/sentry';\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 logError(e);\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","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","import { snakeCase } from 'lodash-es';\nimport { AUTOPLAY_MARGIN_TOP } from '../constants';\n\n// plus 10 entries and then round up to nearest 10\nexport const roundUpNearest10 = (num) => {\n const n = num < 1 ? 10 : num + 10;\n return Math.ceil(n / 10) * 10;\n};\n\n/**\n * @description Helper function that returns analytic properties for tracking\n * number of entries for the first page of entries on initial load.\n *\n * The preFetchedEntries data is injected on the server side. As a result,\n * Web will only have context for the first page of entries (max of 20 entries)\n * on the initial load.\n *\n * We are only concerned about tracking the first page of entries on the initial load.\n *\n * @params {Array.} preFetchedEntries - the feed entries\n *\n * @returns {Object.<{ inventorySize: number, trackedPageCount: number, inventoryPageSizes: number[], inventoryEntryTypes: string[] }>} - the tracking data properties\n * */\nexport const getFeedAnalyticsFinishLoadData = (preFetchedEntries) => {\n /**\n * defaultNumEntries => max number of entries for the fist page load on initial load.\n * */\n const defaultNumEntries = 20;\n\n const firstPage = preFetchedEntries.slice(0, defaultNumEntries);\n\n // Size of the first page of entries\n const inventorySize = firstPage.length || 0;\n // Number of pages that were used to track the inventory size\n // We are only concerned about tracking the first page entries on the initial load.\n const trackedPageCount = 1;\n // Sizes for each of the loaded pages\n const inventoryPageSizes = [inventorySize];\n // Use page to identify the entry type\n const inventoryEntryTypes = firstPage.map((entry) => snakeCase(entry.entity));\n\n return {\n inventorySize,\n trackedPageCount,\n inventoryPageSizes,\n inventoryEntryTypes\n };\n};\n\nexport const createPath = ({ search: searchProp }) => {\n const { location } = window;\n const { pathname, hash } = location;\n const search = typeof searchProp === 'string' ? searchProp : location.search;\n let path = pathname || '/';\n\n if (search && search !== '?') {\n path += search.charAt(0) === '?' ? `${search}&` : `?${search}`;\n }\n\n if (hash && hash !== '#') {\n path += hash.charAt(0) === '#' ? hash : `#${hash}`;\n }\n\n return path;\n};\n\n// AutoPlay Video\nexport const rootMargin = (padding = 0) => {\n const pageHeight =\n window.innerHeight || document.documentElement.clientHeight;\n const rootMarginDiff = pageHeight - (AUTOPLAY_MARGIN_TOP + padding);\n return rootMarginDiff > 0\n ? `-${AUTOPLAY_MARGIN_TOP}px 0px -${rootMarginDiff}px 0px`\n : `0px`;\n};\n","import { useEffect } from 'react';\nimport { useInView } from 'react-intersection-observer';\n\nimport { useFeedContext } from '../components/shared/FeedContext';\n\nimport { UPDATE_NUM_ENTRIES } from '../components/shared/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 '../FeedEntityContext';\nimport useFeedIntersectionObserver from '../../../hooks/useFeedIntersectionObserver';\n\nfunction MapVisPrompt({ hideAnywhereSetting, paths, 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: '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_v2`)}\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 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';\nimport { useFeedEntityContext } from '../FeedEntityContext';\nimport useFeedAnalytics from '../../../hooks/useFeedAnalytics';\nimport useFeedIntersectionObserver from '../../../hooks/useFeedIntersectionObserver';\n\n// This is for Maharaj achievements only - https://github.com/strava/maharaj\nconst AchievementCelebration = ({\n url,\n text,\n subtitle,\n image,\n type,\n analytics,\n activityOwnerId,\n image_caption: imageCaption\n}) => {\n const { analyticProps } = useFeedEntityContext() || {};\n\n const { inView, intersectionObserverRef } = useFeedIntersectionObserver({\n isParentFeedEntry: false\n });\n\n const getElementType = (achievementType) => {\n switch (achievementType) {\n case 'challenge':\n return 'challenge_completion';\n default:\n return achievementType;\n }\n };\n\n useFeedAnalytics({\n ...analyticProps,\n element: getElementType(type),\n properties: {\n activity_athlete_id: activityOwnerId,\n ...analytics\n },\n inView\n });\n\n return (\n \n
    \n \n
    \n
    \n
    \n \n \n \n
    \n {subtitle && (\n \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 type: PropTypes.string,\n activityOwnerId: PropTypes.string,\n analytics: PropTypes.shape({})\n};\n\nAchievementCelebration.defaultProps = {\n url: '',\n text: '',\n subtitle: null,\n image: '',\n image_caption: '',\n type: '',\n analytics: {},\n activityOwnerId: ''\n};\n\nexport default AchievementCelebration;\n","// extracted by mini-css-extract-plugin\nexport default {\"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\",\"btn\":\"PhotosAndMapImage--btn--NLW+N\",\"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\",\"entry-more-images\":\"PhotosAndMapImage--entry-more-images--8M2Y9\",\"entryMoreImages\":\"PhotosAndMapImage--entry-more-images--8M2Y9\",\"more-text\":\"PhotosAndMapImage--more-text--cbrtw\",\"moreText\":\"PhotosAndMapImage--more-text--cbrtw\",\"entry-grid-image\":\"PhotosAndMapImage--entry-grid-image--svOE2\",\"entryGridImage\":\"PhotosAndMapImage--entry-grid-image--svOE2\",\"grid-photo\":\"PhotosAndMapImage--grid-photo--uHD6S\",\"gridPhoto\":\"PhotosAndMapImage--grid-photo--uHD6S\",\"grid-group-activity-photos\":\"PhotosAndMapImage--grid-group-activity-photos--OIXFr\",\"gridGroupActivityPhotos\":\"PhotosAndMapImage--grid-group-activity-photos--OIXFr\",\"grid-photo-n1\":\"PhotosAndMapImage--grid-photo-n1--XvdSq\",\"gridPhotoN1\":\"PhotosAndMapImage--grid-photo-n1--XvdSq\",\"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\",\"grid-photo-n2\":\"PhotosAndMapImage--grid-photo-n2--0taQ3\",\"gridPhotoN2\":\"PhotosAndMapImage--grid-photo-n2--0taQ3\",\"grid-photo-n3\":\"PhotosAndMapImage--grid-photo-n3--8WRqf\",\"gridPhotoN3\":\"PhotosAndMapImage--grid-photo-n3--8WRqf\",\"grid-photo-n4\":\"PhotosAndMapImage--grid-photo-n4--L4nvT\",\"gridPhotoN4\":\"PhotosAndMapImage--grid-photo-n4--L4nvT\",\"grid-photo-n5\":\"PhotosAndMapImage--grid-photo-n5--JjFY8\",\"gridPhotoN5\":\"PhotosAndMapImage--grid-photo-n5--JjFY8\",\"grid-photo-n6\":\"PhotosAndMapImage--grid-photo-n6--IDLOZ\",\"gridPhotoN6\":\"PhotosAndMapImage--grid-photo-n6--IDLOZ\",\"entry-grid-map-image\":\"PhotosAndMapImage--entry-grid-map-image--HZsJN\",\"entryGridMapImage\":\"PhotosAndMapImage--entry-grid-map-image--HZsJN\",\"enhanced-tag\":\"PhotosAndMapImage--enhanced-tag--5Spv9\",\"enhancedTag\":\"PhotosAndMapImage--enhanced-tag--5Spv9\",\"left\":\"PhotosAndMapImage--left--Sz8Ha\"};","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 '../../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 { feedEntityState, 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 feedEntityState.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 feedEntityState.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","export const ADD_AUTOPLAY_VIDEO = 'ADD_AUTOPLAY_VIDEO';\nexport const SET_AUTOPLAY_VIDEO_IN_VIEW = 'SET_AUTOPLAY_VIDEO_IN_VIEW';\n\nexport default {\n ADD_AUTOPLAY_VIDEO,\n SET_AUTOPLAY_VIDEO_IN_VIEW\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"time\":\"Controls--time--Tfs0x\",\"play-control\":\"Controls--play-control--1JCGq\",\"playControl\":\"Controls--play-control--1JCGq\",\"mute-control\":\"Controls--mute-control--C6dGr\",\"muteControl\":\"Controls--mute-control--C6dGr\"};","import React, { useEffect, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport videojs from 'video.js';\n\nimport ActionsVideoThumbnailNormalXsmall from '@strava/icons/ActionsVideoThumbnailNormalXsmall';\nimport ActionsPauseNormalXsmall from '@strava/icons/ActionsPauseNormalXsmall';\nimport ActionsAudioOffNormalXsmall from '@strava/icons/ActionsAudioOffNormalXsmall';\nimport ActionsAudioOnNormalXsmall from '@strava/icons/ActionsAudioOnNormalXsmall';\n\nimport { TOGGLE_IS_ACTIVITY_VIDEO_MUTED } from '../../../../feed.actions';\nimport { useFeedContext } from '../../../../FeedContext';\nimport { useFeedEntityContext } from '../../../../FeedEntityContext';\n\nimport styles from './Controls.scss';\n\nfunction Controls({ duration, video, isAutoplayEnabled, videoId }) {\n const {\n entityState: { isActivityVideoMuted },\n dispatch: dispatchFeed\n } = useFeedContext();\n\n const [state, setState] = useState({\n time: duration,\n isPlaying: false\n });\n\n const { feedEntityState } = useFeedEntityContext();\n\n function handleMuteToggleClick(e) {\n e.preventDefault();\n e.stopPropagation();\n\n const muted = !video.muted();\n video.muted(muted);\n\n dispatchFeed({\n type: TOGGLE_IS_ACTIVITY_VIDEO_MUTED,\n payload: { muted }\n });\n\n feedEntityState.trackAnalytics({\n category: 'feed',\n page: 'activity',\n action: 'click',\n element: 'video_audio',\n properties: {\n video_id: videoId,\n audio_cta: video.muted() ? 'muted' : 'unmuted'\n }\n });\n }\n\n function handlePlayEvent() {\n setState((prevState) => ({\n ...prevState,\n isPlaying: true,\n time: video.remainingTime()\n }));\n }\n\n function handlePauseEvent() {\n setState((prevState) => ({\n ...prevState,\n isPlaying: false\n }));\n }\n\n function handleTimeupdate() {\n setState((prevState) => ({\n ...prevState,\n time: video.remainingTime()\n }));\n }\n\n function handlePlayToggleClick(e) {\n e.preventDefault();\n e.stopPropagation();\n\n if (state.isPlaying) {\n video.pause();\n } else {\n // Pause all video that are currently playing\n videojs\n .getAllPlayers()\n .filter((p) => !p.paused())\n .forEach((p) => p.pause());\n\n video.play();\n }\n }\n\n useEffect(() => {\n if (video) {\n video.on('play', handlePlayEvent);\n video.on('pause', handlePauseEvent);\n video.on('timeupdate', handleTimeupdate);\n }\n\n return () => {\n if (video) {\n video.off('play', handlePlayEvent);\n video.off('pause', handlePauseEvent);\n video.off('timeupdate', handleTimeupdate);\n }\n };\n }, [video]);\n\n if (!video) {\n return null;\n }\n\n return (\n <>\n {/* Timer */}\n {isAutoplayEnabled || state.isPlaying ? (\n
    \n {videojs.formatTime(state.time)}\n
    \n ) : null}\n\n {/* Play/Stop button */}\n {!isAutoplayEnabled ? (\n \n {state.isPlaying ? (\n \n ) : (\n \n )}\n \n ) : null}\n\n {/* Mute/Unmute button */}\n {state.isPlaying ? (\n \n {isActivityVideoMuted ? (\n \n ) : (\n \n )}\n \n ) : null}\n \n );\n}\n\nControls.defaultProps = {\n video: null,\n isAutoplayEnabled: true\n};\n\nControls.propTypes = {\n duration: PropTypes.number.isRequired,\n video: PropTypes.shape({\n on: PropTypes.func.isRequired,\n one: PropTypes.func.isRequired,\n off: PropTypes.func.isRequired,\n readyState: PropTypes.func.isRequired,\n play: PropTypes.func.isRequired,\n pause: PropTypes.func.isRequired,\n paused: PropTypes.func.isRequired,\n duration: PropTypes.func.isRequired,\n remainingTime: PropTypes.func.isRequired,\n muted: PropTypes.func.isRequired\n }),\n isAutoplayEnabled: PropTypes.bool,\n videoId: PropTypes.string.isRequired\n};\n\nexport default Controls;\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';\nimport cx from '@strava/ui/clsx';\nimport Poc from '../../../../../../Poc';\nimport Controls from './Controls';\n\nimport { useFeedContext } from '../../../FeedContext';\nimport { useFeedEntityContext } from '../../../FeedEntityContext';\n\nimport styles from './VideoItem.scss';\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 feedEntityState: { 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';\nimport cx from '@strava/ui/clsx';\n\nimport StravaMediaLightbox from 'components/StravaMediaLightbox';\n\nimport { photoListProps } from '../../../../props/feed-prop-types';\nimport { ADD_AUTOPLAY_VIDEO } from '../../entity-actions';\nimport { useFeedEntityContext } from '../../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 {\n feedEntityState,\n analyticProps,\n feedDispatch\n } = 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 feedEntityState.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 feedEntityState.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 feedDispatch({\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
    {`+ ${extraPhotos}`}
    \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';\nimport cx from '@strava/ui/clsx';\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 it's 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.gridPhotoN1;\n case 2:\n return styles.gridPhotoN2;\n case 3:\n return cx(styles.gridPhotoN3, !showMap && styles.entryGridMapImage);\n case 4:\n return cx(styles.gridPhotoN4, !showMap && styles.entryGridMapImage);\n case 5:\n return styles.gridPhotoN5;\n case 6:\n return cx(styles.gridPhotoN6, !showMap && styles.entryGridMapImage);\n default:\n return cx(styles.gridPhotoN6, !showMap && styles.entryGridMapImage);\n }\n } else if (entryType === GROUP_ACTIVITY) {\n return showMap\n ? cx(styles.gridPhotoN1, styles.groupActivityMap)\n : styles.gridGroupActivityPhotos;\n } else if (entryType === POST) {\n return styles.gridPhotoN1;\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 styles.gridPhoto,\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 {\"media-left\":\"CommentsThread--media-left--1ux7T\",\"mediaLeft\":\"CommentsThread--media-left--1ux7T\",\"comments\":\"CommentsThread--comments--XIKwp\",\"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\",\"comment\":\"CommentsThread--comment--ryaZV\",\"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\"};","// 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';\nimport I18n from 'utils/I18n';\nimport Avatar from '@strava/ui/Avatar';\nimport Button, { LinkButton } from '@strava/ui/Button';\nimport { Markup } from 'interweave';\nimport { useKudosAndCommentsContext } from '../../../../../shared/KudosCommentsAndAchievements/KudosAndCommentsContext';\nimport { buildTimeAgoTimestamp } from '../../../../../shared/utils/buildTimeAgoTimeStamp';\nimport useFeedAnalytics from '../../../../hooks/useFeedAnalytics';\nimport { DELETE_COMMENT_START } from '../../../../../shared/KudosCommentsAndAchievements/kudosAndComments.actions';\nimport styles from './styles.scss';\nimport useFeedIntersectionObserver from '../../../../hooks/useFeedIntersectionObserver';\nimport CommentReaction from '../../../../../shared/KudosCommentsAndAchievements/CommentReaction';\nimport { FEED_ENTRY_TYPES } from '../../../../../Feed/constants';\n\nimport Media from '../../../../components/shared/media/Media';\nimport MediaLeft from '../../../../components/shared/media/MediaLeft';\nimport MediaBody from '../../../../components/shared/media/MediaBody';\n\nconst prefix = 'components.feed.social';\n\nconst CommentsThread = ({\n onSeeMoreCommentsClick,\n entity,\n entityId,\n showCommentReactions\n}) => {\n const {\n dispatch,\n kudosAndCommentsEntityState,\n analyticProps\n } = useKudosAndCommentsContext();\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:\n entity === FEED_ENTRY_TYPES.post\n ? FEED_ENTRY_TYPES.post\n : FEED_ENTRY_TYPES.activity,\n buttonElement: 'like_comment_btn_on_feed',\n listElement: 'like_list_btn_on_feed'\n };\n\n const comments = kudosAndCommentsEntityState.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 return (\n
    \n {numComments > 0 && (\n
      \n {comments\n .slice(Math.max(numComments - totalComments, 0))\n .map((comment) => {\n const timeAgoTimestamp = buildTimeAgoTimestamp(comment.timestamp);\n const { reactions_summary: reactionsSummary } = comment;\n const hasReacted = reactionsSummary?.has_reacted\n ? reactionsSummary.has_reacted\n : false;\n const commentReactionCount = reactionsSummary?.reaction_count\n ? reactionsSummary.reaction_count\n : 0;\n\n return (\n
    1. \n \n \n {\n kudosAndCommentsEntityState.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 )}\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 entity: PropTypes.string.isRequired,\n entityId: PropTypes.string.isRequired,\n showCommentReactions: PropTypes.bool.isRequired\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 {\n kudosAndCommentsProps,\n viewingAthleteProps,\n entityOwnerProps,\n segAndBestEffortAchievementsProps,\n entitiesWithKudosAndComments\n} from '../../../props/feed-prop-types';\nimport styles from './styles.scss';\nimport MentionableCommentForm from '../../../../shared/MentionableCommentForm';\nimport KudosCommentsAndAchievementsModal from '../../../../shared/KudosCommentsAndAchievements/KudosCommentsAndAchievementsModal/KudosCommentsAndAchievementsModal';\nimport CommentsThread from './CommentsThread';\nimport { useKudosAndCommentsContext } from '../../../../shared/KudosCommentsAndAchievements/KudosAndCommentsContext';\nimport {\n OPEN_MODAL_COMMENTS_TAB,\n OPEN_MODAL_KUDOS_TAB\n} from '../../../../shared/KudosCommentsAndAchievements/kudosAndComments.actions';\nimport { updateKudosEndpoint } from '../../../../shared/utils/updateKudosEndpoint';\nimport Media from '../media/Media';\nimport MediaBody from '../media/MediaBody';\nimport MediaActions from '../media/MediaActions';\nimport { FEED_ENTRY_TYPES } from '../../../constants';\nimport { logError } from '../../../../../utils/sentry';\n\nconst KudosAndComments = ({\n kudosAndComments,\n entity,\n entityId,\n ownedByCurrentAthlete,\n viewingAthlete,\n entityOwner,\n entityTitle,\n clubMentionsEnabled,\n openCommentsModalOnIconClick,\n segAndBestEffortAchievements,\n showHairlineOnTop\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 {\n kudosAndCommentsEntityState,\n dispatch\n } = useKudosAndCommentsContext();\n\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 = kudosAndCommentsEntityState.comments[entityId] || [];\n\n const showKudosCallToAction =\n canKudoStatus && currentKudoCount === 0 && comments.length === 0;\n\n const commentReactionAnalytics = {\n category: 'feed',\n page:\n entity === FEED_ENTRY_TYPES.post\n ? FEED_ENTRY_TYPES.post\n : FEED_ENTRY_TYPES.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 kudosAndCommentsEntityState.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 logError(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 = updateKudosEndpoint({ entity });\n\n const onClickKudo = (element) => {\n kudosAndCommentsEntityState.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 (kudosAndCommentsEntityState.kudoPosted) {\n // can only kudo an entity once...\n onClickKudoSuccessful();\n }\n }, [kudosAndCommentsEntityState.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 kudosAndCommentsEntityState.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 entryTypesAllowingCommentReactions = [\n FEED_ENTRY_TYPES.activity,\n FEED_ENTRY_TYPES.groupActivity,\n FEED_ENTRY_TYPES.post\n ];\n\n const showCommentReactions = [...entryTypesAllowingCommentReactions].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 entity={entity}\n showCommentReactions={showCommentReactions}\n />\n \n )}\n\n {showForm && mentionableCommentsForm()}\n {(kudosAndCommentsEntityState.openKudosCommentModal ||\n kudosAndCommentsEntityState.isViewingCommentReactionsList) &&\n kudosAndCommentsEntityState.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 clubMentionsEnabled: 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};\n\nKudosAndComments.defaultProps = {\n segAndBestEffortAchievements: [],\n showHairlineOnTop: false\n};\n\nexport default KudosAndComments;\n","import {\n ADD_AUTOPLAY_VIDEO,\n SET_AUTOPLAY_VIDEO_IN_VIEW\n} from './entity-actions';\n\nexport function feedEntityInit({\n entity,\n parentEntityId,\n entityId,\n trackAnalytics,\n isAutoplayEnabled,\n autoPlayVideos\n}) {\n return {\n entity,\n parentEntityId,\n entityId,\n trackAnalytics,\n isAutoplayEnabled,\n autoPlayVideos\n };\n}\n\nexport function feedEntityReducer(state, action) {\n switch (action.type) {\n case ADD_AUTOPLAY_VIDEO: {\n const { autoPlayVideo } = action.payload;\n return {\n ...state,\n autoPlayVideos: { ...state.autoPlayVideos, ...autoPlayVideo }\n };\n }\n case SET_AUTOPLAY_VIDEO_IN_VIEW: {\n const { autoPlayVideoInView } = action.payload;\n return { ...state, autoPlayVideoInView };\n }\n\n default:\n throw new Error(`${action.type} - not recognised`);\n }\n}\n\nexport default { feedEntityInit, feedEntityReducer };\n","export const buildInitialFeedState = (overrides) => ({\n entity: null,\n parentEntityId: null,\n entityId: null,\n autoPlayVideos: {},\n isAutoplayEnabled: true,\n ...overrides\n});\n\nexport default { buildInitialFeedState };\n","// extracted by mini-css-extract-plugin\nexport default {\"icon-container\":\"HeaderWithOwnerMetadata--icon-container--A1pQt\",\"iconContainer\":\"HeaderWithOwnerMetadata--icon-container--A1pQt\",\"avatar\":\"HeaderWithOwnerMetadata--avatar--z40Fk\",\"group-activity-avatar\":\"HeaderWithOwnerMetadata--group-activity-avatar--4iHo4\",\"groupActivityAvatar\":\"HeaderWithOwnerMetadata--group-activity-avatar--4iHo4\",\"name-boosted\":\"HeaderWithOwnerMetadata--name-boosted--5yVoM\",\"nameBoosted\":\"HeaderWithOwnerMetadata--name-boosted--5yVoM\",\"boosted\":\"HeaderWithOwnerMetadata--boosted--2pxgo\"};","// 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 {\"entry-actions\":\"EntityActions--entry-actions--MDLpq\",\"entryActions\":\"EntityActions--entry-actions--MDLpq\",\"dropdown\":\"EntityActions--dropdown--eaAs4\",\"active-dropdown\":\"EntityActions--active-dropdown--0eCaG\",\"activeDropdown\":\"EntityActions--active-dropdown--0eCaG\",\"dropdown-option\":\"EntityActions--dropdown-option--hlcXh\",\"dropdownOption\":\"EntityActions--dropdown-option--hlcXh\"};","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\n\nimport { TranslationContext } from '@strava/container-context';\nimport EmbedModal from '@strava/embed-modal';\nimport I18n from 'utils/I18n';\nimport {\n Dropdown,\n DropdownItem,\n DropdownLink,\n DropdownList\n} from '@strava/ui/Dropdown';\nimport { useFeedEntityContext } from '../FeedEntityContext';\nimport EntityDeleteAlertDialog from '../EntityDeleteAlertDialog';\n\nimport styles from './styles.scss';\n\nconst EntryActions = ({\n entityId,\n shareable,\n twitterUrl,\n embedDropdownEnabled,\n entityParentType,\n entityParentId,\n isDeletable,\n extraEntityActions\n}) => {\n const [isEmbedModalOpen, setIsEmbedModalOpen] = useState(false);\n const { feedEntityState } = useFeedEntityContext();\n const [isDeleteModalOpen, setIsDeleteModalOpen] = useState(false);\n\n const toggleEmbedModalOpen = (event) => {\n event.preventDefault();\n setIsEmbedModalOpen(!isEmbedModalOpen);\n };\n\n function facebookShareUrl() {\n const activityUrl = `https://www.strava.com/activities/${entityId}`;\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 || isDeletable || extraEntityActions) && (\n
    \n {\n // old analytics call from when this component was called\n // the \"Share Dropdown\", left for legacy compatiblity reasons\n feedEntityState.trackAnalytics({\n action: 'click',\n element: 'share'\n });\n\n // new analytics call.\n feedEntityState.trackAnalytics({\n action: 'click',\n element: 'entity_actions',\n properties: {\n entity_id: entityId,\n entity_parent_id: entityParentId\n }\n });\n }}\n className={`${styles.dropdown}`}\n >\n \n {shareable && (\n \n Facebook\n \n )}\n {shareable && (\n \n Twitter\n \n )}\n {embedDropdownEnabled && shareable && (\n \n {I18n.t('templates.share.embed.get_code')}\n I18n.t(key, props),\n getLanguage: () => I18n.language()\n }}\n >\n \n \n \n )}\n {isDeletable && (\n setIsDeleteModalOpen(true)}\n >\n {I18n.t('templates.generic.delete')}\n \n )}\n {extraEntityActions?.map(([node, props], i) => (\n \n {node}\n \n ))}\n \n \n
    \n )}\n {isDeletable && (\n \n )}\n
    \n );\n};\n\nEntryActions.propTypes = {\n entityId: PropTypes.string.isRequired,\n shareable: PropTypes.bool.isRequired,\n twitterUrl: PropTypes.string.isRequired,\n embedDropdownEnabled: PropTypes.bool.isRequired,\n entityParentType: PropTypes.string.isRequired,\n entityParentId: PropTypes.number.isRequired,\n extraEntityActions: PropTypes.arrayOf(PropTypes.shape({})),\n isDeletable: PropTypes.bool\n};\n\nEntryActions.defaultProps = {\n isDeletable: false,\n extraEntityActions: undefined\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","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 './HeaderWithOwnerMetadata.scss';\nimport LocationAndTime from '../LocationAndTime';\nimport EntityActions from '../EntityActions';\nimport {\n timeAndLocationProps,\n entityOwnerProps\n} from '../../../props/feed-prop-types';\nimport { useFeedEntityContext } from '../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 entityParentType,\n entityParentId,\n isDeletable,\n extraEntityActions\n}) => {\n const { feedEntityState } = useFeedEntityContext();\n\n const { displayImage, name, memberType, profileUrl, type } = entityOwner;\n return (\n \n \n \n
    \n {\n feedEntityState.trackAnalytics({\n action: 'click',\n element: 'profile_picture',\n properties: { element_source: 'title' }\n });\n }}\n />\n
    \n
    \n \n
    \n \n feedEntityState.trackAnalytics({\n action: 'click',\n element: 'owner_name'\n })\n }\n >\n {name}\n \n {isBoosted === true && (\n
    \n \n
    \n )}\n
    \n {timeAndLocation && (\n \n )}\n
    \n \n {(shareable || isDeletable) && (\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 entityParentType: PropTypes.string.isRequired,\n entityParentId: PropTypes.number.isRequired,\n isDeletable: PropTypes.bool,\n extraEntityActions: PropTypes.arrayOf(PropTypes.shape({}))\n};\n\nHeaderWithOwnerMetadata.defaultProps = {\n twitterUrl: '',\n timeAndLocation: null,\n entity: '',\n isDeletable: false,\n extraEntityActions: undefined\n};\n\nexport default HeaderWithOwnerMetadata;\n","// extracted by mini-css-extract-plugin\nexport default {\"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\"};","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 '../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 {\"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\"};","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, useRef } from 'react';\nimport PropTypes from 'prop-types';\nimport { isEmpty, snakeCase } from 'lodash-es';\nimport { useInView } from 'react-intersection-observer';\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 '../shared/FeedEntityContext';\nimport KudosAndCommentsContext from '../../../shared/KudosCommentsAndAchievements/KudosAndCommentsContext';\nimport {\n initKudosAndCommentsState,\n kudosAndCommentsReducer\n} from '../../../shared/KudosCommentsAndAchievements/kudosAndComments.reducer';\nimport {\n feedEntityInit,\n feedEntityReducer\n} from '../shared/feedEntity.reducer';\nimport { SET_AUTOPLAY_VIDEO_IN_VIEW } from '../shared/entity-actions';\nimport { rootMargin } from '../../../Feed/utils';\nimport { FEED_ENTRY_TYPES } from '../../constants';\nimport CommentDeleteAlertDialog from '../../../shared/KudosCommentsAndAchievements/CommentDeleteAlertDialog';\nimport { buildInitialFeedState } from '../shared/feedEntity.init-state';\nimport { buildInitialKudosAndCommentsState } from '../../../shared/KudosCommentsAndAchievements/kudosAndComments.initial-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 isAutoplayEnabled,\n clubMentionsEnabled,\n extraEntityActions,\n extraTrackingProperties\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 descriptionMentionsClubIds,\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 mentioned_clubs: descriptionMentionsClubIds || [],\n ...extraTrackingProperties\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 [kudosAndCommentsEntityState, dispatch] = useReducer(\n kudosAndCommentsReducer,\n buildInitialKudosAndCommentsState({\n trackAnalytics,\n comments: { [activityId]: activity.kudosAndComments.comments },\n entity: snakeCase(entity),\n entityId: activityId\n }),\n initKudosAndCommentsState\n );\n\n const [feedEntityState, feedDispatch] = useReducer(\n feedEntityReducer,\n buildInitialFeedState({\n trackAnalytics,\n entity: snakeCase(entity),\n entityId: activityId,\n isAutoplayEnabled\n }),\n feedEntityInit\n );\n\n const kudosAndCommentsProviderState = {\n kudosAndCommentsEntityState,\n dispatch,\n analyticProps\n };\n\n const feedProviderState = {\n feedEntityState,\n feedDispatch,\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 [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: rootMargin(11)\n });\n\n const { autoPlayVideos } = feedEntityState;\n const autoPlayVideo = autoPlayVideos[activityId];\n const playPromiseRef = useRef();\n\n useEffect(() => {\n if (isAutoplayEnabled && autoPlayVideo) {\n if (inViewAutoPlay) {\n playPromiseRef.current = autoPlayVideo.play();\n feedDispatch({\n type: SET_AUTOPLAY_VIDEO_IN_VIEW,\n payload: { autoPlayVideoInView: true }\n });\n } else if (playPromiseRef.current !== undefined) {\n playPromiseRef.current.then(() => {\n autoPlayVideo.pause();\n feedDispatch({\n type: SET_AUTOPLAY_VIDEO_IN_VIEW,\n payload: { autoPlayVideoInView: false }\n });\n });\n }\n }\n }, [isAutoplayEnabled, autoPlayVideo, inViewAutoPlay, playPromiseRef]);\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 \n {/* Entry Header - avatar, location, social actions */}\n \n {/* Entry Body = activity title, description, stats and achievements */}\n \n {buildEntryBody()}\n \n\n {/* Map Visibility feature education row prompt */}\n {/* Prioritize achievements over the map visibility feature education row prompt and hide\n the prompt when there is an achievement to show */}\n {!isEmpty(mapVisPrompt) && isEmpty(maharajAchievement) && (\n \n \n \n )}\n\n {/* Maharaj achievements */}\n {!isEmpty(maharajAchievement) && (\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};\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 clubMentionsEnabled: PropTypes.bool.isRequired,\n activity: PropTypes.shape({\n activityName: PropTypes.string,\n id: PropTypes.string,\n flagged: PropTypes.bool,\n athlete_id: PropTypes.number,\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 descriptionMentionsClubIds: 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 }),\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 type: PropTypes.string,\n analytics: PropTypes.shape({})\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 clubId: PropTypes.string.isRequired,\n athleteProfileId: PropTypes.string.isRequired,\n isAutoplayEnabled: PropTypes.bool,\n extraEntityActions: PropTypes.shape({}),\n extraTrackingProperties: PropTypes.shape({})\n};\n\nActivity.defaultProps = {\n isAutoplayEnabled: true,\n extraEntityActions: undefined,\n extraTrackingProperties: undefined\n};\n\nexport default Activity;\n","export const FOLLOWING_STATUS = Object.freeze({\n following: 'following',\n pending: 'pending',\n error: 'error',\n canFollow: 'can_follow',\n canRequest: 'can_request'\n});\n\nexport const FOLLOW_ACTIONS = Object.freeze({\n add: 'add',\n followRequested: 'follow_requested',\n following: 'following',\n requestToFollow: 'request_to_follow',\n follow: 'follow'\n});\n","import createNetworkingClient from 'utils/networking-client';\nimport { StatusCodes } from 'http-status-codes';\nimport { FOLLOWING_STATUS } from '../../constants/follows/following-constants';\nimport { logError } from '../../utils/sentry';\n\n/**\n * Follows an athlete on strava.\n *\n * @param {Object} param\n * @param {string} param.followerId - id for the athlete who is requesting the follow\n * @param {string} param.followingId - id for the athlete to be followed\n * @returns {Promise} - enum value PENDING or FOLLOWING\n */\nexport const followAthlete = ({ followerId, followingId }) => {\n return new Promise((resolve) => {\n createNetworkingClient()\n .post(`/athletes/${followerId}/follows`, {\n follow: {\n follower_id: followerId,\n following_id: followingId\n }\n })\n .then((response) => {\n if (response?.status === StatusCodes.OK) {\n const { data } = response;\n if (data.approved) {\n resolve(FOLLOWING_STATUS.following);\n } else {\n resolve(FOLLOWING_STATUS.pending);\n }\n } else {\n resolve(FOLLOWING_STATUS.error);\n // TODO log sentry error\n }\n })\n .catch(() => {\n resolve(FOLLOWING_STATUS.error);\n // TODO log sentry error\n });\n });\n};\n\nexport const unfollowAthlete = ({ followerId, followingId }) => {\n return new Promise((resolve) => {\n createNetworkingClient()\n .delete(\n `/athletes/${followerId}/follows/${followingId}`,\n {\n data: {\n follow: {\n follower_id: followerId,\n following_id: followingId\n }\n }\n },\n { headers: { Accept: 'text/javascript' } }\n )\n .then((response) => {\n if (response?.status === StatusCodes.NO_CONTENT) {\n resolve(true);\n } else {\n logError(response);\n resolve(false);\n }\n })\n .catch((e) => {\n logError(e);\n resolve(false);\n });\n });\n};\n\nexport default { followAthlete, unfollowAthlete };\n","import { useEffect } from 'react';\nimport createNetworkingClient from 'utils/networking-client';\n\nconst sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));\nconst mockOptOut = window.location.search.includes('mock-opt-out');\n\n// eslint-disable-next-line react-hooks/exhaustive-deps\nexport const useEffectOnce = (fn) => useEffect(fn, []);\n\nexport const optOutReason = {\n uninterestedInSportType: 'uninterested_in_sport_type',\n uninterestedInAthlete: 'uninterested_in_athlete',\n notUseful: 'not_useful',\n other: 'other'\n};\n\nexport const optOutApiCall = (activityId) =>\n mockOptOut\n ? sleep(1000)\n : createNetworkingClient().post(\n `/discovery/activities/${activityId}/opt_out?discovery_strategy=NEW_REG_FEED`\n );\n\nexport const feedbackApiCall = (activityId, reason) => {\n const params = new URLSearchParams({\n discovery_strategy: 'NEW_REG_FEED',\n opt_out_reason: reason\n });\n\n return mockOptOut\n ? sleep(800)\n : createNetworkingClient().post(\n `/discovery/activities/${activityId}/opt_out?${params}`\n );\n};\n\nexport const undoApiCall = (activityId, reason) => {\n const params = new URLSearchParams({\n discovery_strategy: 'NEW_REG_FEED',\n ...(reason && { opt_out_reason: reason })\n });\n\n return mockOptOut\n ? sleep(800)\n : createNetworkingClient().post(\n `/discovery/activities/${activityId}/delete_opt_out?${params}`\n );\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"loading-overlay\":\"SuggestedActivity--loading-overlay--26rG-\",\"loadingOverlay\":\"SuggestedActivity--loading-overlay--26rG-\",\"loading-spinner\":\"SuggestedActivity--loading-spinner--+sU-2\",\"loadingSpinner\":\"SuggestedActivity--loading-spinner--+sU-2\",\"is-loading\":\"SuggestedActivity--is-loading--El2Oo\",\"isLoading\":\"SuggestedActivity--is-loading--El2Oo\",\"context-header\":\"SuggestedActivity--context-header--uqPg+\",\"contextHeader\":\"SuggestedActivity--context-header--uqPg+\",\"activity-hidden\":\"SuggestedActivity--activity-hidden--K4SPQ\",\"activityHidden\":\"SuggestedActivity--activity-hidden--K4SPQ\",\"subhead\":\"SuggestedActivity--subhead--Q4k4T\",\"with-feedback\":\"SuggestedActivity--with-feedback--o8Wtr\",\"withFeedback\":\"SuggestedActivity--with-feedback--o8Wtr\"};","/* eslint-disable react/prop-types */\nimport React, { useState } from 'react';\nimport Spinner from '@strava/ui/Spinner';\nimport cx from '@strava/ui/clsx';\nimport I18n from 'utils/I18n';\nimport { trackV2 } from 'utils/analytics';\nimport { followAthlete, unfollowAthlete } from 'api/athlete';\nimport EntryHeader from '../shared/media/EntryHeader';\nimport Activity from '../Activity';\nimport Card from '../shared/media/Card';\nimport {\n useEffectOnce,\n optOutApiCall,\n feedbackApiCall,\n undoApiCall,\n optOutReason\n} from './SuggestedActivity.helpers';\nimport styles from './SuggestedActivity.scss';\n\n// namespaced translations macro\nconst t = (keyPath, params) =>\n I18n.t(`components.feed.discovery.${keyPath}`, params);\n\n// vs = visibility status\nconst vs = {\n VISIBLE: 'VISIBLE',\n HIDDEN: 'HIDDEN',\n HIDDEN_WITH_FEEDBACK_GIVEN: 'HIDDEN_WITH_FEEDBACK_GIVEN'\n};\n\n// Quick and dirty state management & error handling for api calls. Basically a\n// minimal implementation of react-query with state tracking only.\n//\n// status can be 'idle', 'loading', 'error', or 'success'\nconst useMutation = (apiFn) => {\n const [status, setStatus] = useState('idle');\n const mutate = (...params) => {\n setStatus('loading');\n const unchainedPromise = apiFn(...params);\n unchainedPromise\n .then(() => setStatus('success'))\n .catch(() => setStatus('error'));\n return unchainedPromise;\n };\n return { status, mutate };\n};\n\nconst SuggestedActivity = (props) => {\n const { activity, viewingAthlete } = props;\n\n // all stateful items are declared here:\n const [hideState, setHideState] = useState(vs.VISIBLE);\n const [didFollow, setDidFollow] = useState(false);\n const [reasonProvided, setReasonProvided] = useState(null);\n const optOutAction = useMutation(optOutApiCall);\n const feedbackAction = useMutation(feedbackApiCall);\n const undoAction = useMutation(undoApiCall);\n\n const followAction = useMutation(() =>\n followAthlete({\n followerId: viewingAthlete.id,\n followingId: activity.athlete.athleteId\n })\n );\n\n const unfollowAction = useMutation(() =>\n unfollowAthlete({\n followerId: viewingAthlete.id,\n followingId: activity.athlete.athleteId\n })\n );\n\n const anythingIsLoading =\n optOutAction.status === 'loading' ||\n feedbackAction.status === 'loading' ||\n undoAction.status === 'loading';\n\n // hit trackV2 with some partial application with the params that\n // are common to all of our track events within this scope so that we don't\n // have to repeat ourselves as much!\n const track = ({ properties, ...trackArgs }) =>\n trackV2({\n category: 'feed',\n ...trackArgs,\n properties: {\n suggested_activity_id: activity.id,\n suggested_athlete_id: activity.athlete.athleteId,\n ...properties\n }\n });\n\n const onClickHideActivity = async () => {\n track({\n page: 'activity',\n action: 'click',\n element: 'hide'\n });\n await optOutAction.mutate(activity.id);\n setHideState(vs.HIDDEN);\n };\n\n const onFeedback = async (reason) => {\n track({\n page: 'hide_activity_survey',\n action: 'click',\n element: reason\n });\n await feedbackAction.mutate(activity.id, reason);\n setReasonProvided(reason);\n setHideState(vs.HIDDEN_WITH_FEEDBACK_GIVEN);\n };\n\n const unHideActivity = async () => {\n track({\n page: 'activity',\n action: 'click',\n element: 'undo_hide'\n });\n if (reasonProvided) {\n await undoAction.mutate(activity.id, reasonProvided);\n }\n await undoAction.mutate(activity.id);\n setReasonProvided(null);\n setHideState(vs.VISIBLE);\n };\n\n const onToggleFollow = async () => {\n if (\n unfollowAction.status === 'loading' ||\n followAction.status === 'loading'\n ) {\n // noop if action is pending\n return;\n }\n\n if (didFollow === false) {\n track({\n page: 'activity',\n action: 'click',\n element: 'follow'\n });\n await followAction.mutate();\n setDidFollow(true);\n } else {\n track({\n page: 'activity',\n action: 'click',\n element: 'undo_follow'\n });\n await unfollowAction.mutate();\n setDidFollow(false);\n }\n };\n\n return (\n <>\n {/* Context header is always shown regardless of activity visibility state */}\n {activity.activityContextHeader && (\n \n {activity.activityContextHeader.subtitle}\n \n )}\n \n {(() => {\n switch (hideState) {\n case vs.HIDDEN:\n return (\n \n );\n case vs.HIDDEN_WITH_FEEDBACK_GIVEN:\n return ;\n default:\n return (\n \n );\n }\n })()}\n \n \n );\n};\n\nconst LoadingOverlay = ({ children, isLoading }) => (\n
    \n {children}\n {isLoading && (\n
    \n \n
    \n )}\n
    \n);\n\nconst ActivityHidden = ({ onFeedback, onUndo, track }) => {\n useEffectOnce(() => {\n track({\n page: 'hide_activity_survey',\n action: 'screen_enter',\n element: ''\n });\n\n return () => {\n track({\n page: 'hide_activity_survey',\n action: 'screen_exit',\n element: ''\n });\n };\n });\n return (\n \n

    {t('opt_out.activity_hidden')}

    \n
    {t('opt_out.hide_reason_question')}
    \n
    \n onFeedback(optOutReason.uninterestedInSportType)}\n >\n {t('opt_out.not_interested_sport_type')}\n \n \n \n \n \n
    \n
    \n );\n};\n\nconst ActivityHiddenWithFeedback = ({ onUndo }) => (\n \n

    {t('opt_out.activity_hidden')}

    \n \n
    \n);\n\nexport default SuggestedActivity;\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 '../shared/FeedEntityContext';\nimport KudosAndCommentsContext from '../../../shared/KudosCommentsAndAchievements/KudosAndCommentsContext';\nimport {\n feedEntityInit,\n feedEntityReducer\n} from '../shared/feedEntity.reducer';\nimport { buildInitialFeedState } from '../shared/feedEntity.init-state';\nimport { buildInitialKudosAndCommentsState } from '../../../shared/KudosCommentsAndAchievements/kudosAndComments.initial-state';\nimport {\n initKudosAndCommentsState,\n kudosAndCommentsReducer\n} from '../../../shared/KudosCommentsAndAchievements/kudosAndComments.reducer';\nimport CommentDeleteAlertDialog from '../../../shared/KudosCommentsAndAchievements/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/generalUtils';\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 isDeletable,\n clubMentionsEnabled\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 [feedEntityState, feedDispatch] = useReducer(\n feedEntityReducer,\n buildInitialFeedState({\n trackAnalytics,\n entity: snakeCase(entity),\n entityId: post.entity_id\n }),\n feedEntityInit\n );\n const feedProviderState = {\n feedEntityState,\n feedDispatch,\n analyticProps\n };\n\n const [kudosAndCommentsEntityState, dispatch] = useReducer(\n kudosAndCommentsReducer,\n buildInitialKudosAndCommentsState({\n trackAnalytics,\n comments: { [post.entity_id]: post.comments },\n entity: snakeCase(entity),\n entityId: post.entity_id\n }),\n initKudosAndCommentsState\n );\n const kudosAndCommentsProviderState = {\n kudosAndCommentsEntityState,\n dispatch,\n analyticProps\n };\n\n // Checks if post is authored by club or athlete\n const idForProfileUrl =\n post.originator_type === 'club' && clubId ? clubId : post.originator_id;\n\n // Checks if the post delongs to a club or athlete profile\n const urlPostPrefix =\n clubId && post.parent_type === 'Club' ? clubId : post.originator_id;\n\n const postUrl = post.path_prefix && post.path_prefix.concat(urlPostPrefix);\n\n const avatarUrl = () => {\n let url;\n if (post.originator_type === 'club') {\n url = post.path_prefix && post.path_prefix.concat(idForProfileUrl);\n } else {\n url = `/athletes/${post.originator_id}`;\n }\n return url;\n };\n\n const entityOwner = {\n displayImage: post.originator_avatar_url,\n memberType: post.member_type,\n name: post.originator_name,\n profileUrl: avatarUrl(),\n type: post.parent_type.toLowerCase()\n };\n\n const athleteHasDeletePermissions =\n isDeletable || viewingAthlete.id === post.originator_id.toString();\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 \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};\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 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 originator_type: PropTypes.string.isRequired,\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 isDeletable: PropTypes.bool.isRequired,\n clubMentionsEnabled: PropTypes.bool.isRequired\n};\n\nPost.defaultProps = {\n sharedContents: []\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\",\"details-with-cta\":\"PromoEntry--details-with-cta--gg-uD\",\"detailsWithCta\":\"PromoEntry--details-with-cta--gg-uD\"};","// eslint-disable-next-line no-unused-vars\nimport React from 'react';\n\n/* Used to conditionally wrap a component\n\nExample use case:\n\n {children}}\n>\n <>\n

    {brand}

    \n

    {model}

    \n \"\"\n

    {description}

    \n

    {price}

    \n \n\n\n*/\n\nconst ConditionalWrapper = ({ condition, wrapper, children }) =>\n condition ? wrapper(children) : children;\n\nexport default ConditionalWrapper;\n","import PropTypes from 'prop-types';\nimport React from 'react';\nimport Button from '@strava/ui/Button';\nimport createNetworkingClient from 'utils/networking-client';\nimport { Markup } from 'interweave';\nimport styles from './index.scss';\nimport { useFeedEntityContext } from '../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';\nimport ConditionalWrapper from '../../../../shared/ConditionalWrapper';\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 { feedEntityState } = useFeedEntityContext();\n const hasCta = ctaUrl && ctaText && click;\n\n const bodyWrapper = (children) => (\n {\n createNetworkingClient({\n baseUrl: null,\n headers: null\n }).get(click);\n feedEntityState.trackAnalytics({\n action: 'click',\n element: `${entity.toLowerCase()}_headline_and_description`\n });\n }}\n >\n {children}\n \n );\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 (center vertically if there's no CTA) */}\n \n \n <>\n

    \n \n

    \n
    \n {description}\n
    \n \n \n\n {hasCta && (\n {\n createNetworkingClient({ baseUrl: null, headers: null }).get(\n click\n );\n feedEntityState.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};\n\nPromoEntry.propTypes = {\n entity: PropTypes.oneOf(['FancyPromo', 'SimplePromo']).isRequired,\n description: PropTypes.string.isRequired,\n impression: PropTypes.string.isRequired,\n click: PropTypes.string,\n ctaText: PropTypes.string,\n ctaUrl: PropTypes.string,\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 ctaText: '',\n ctaUrl: '',\n click: null\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 '../shared/FeedEntityContext';\nimport {\n feedEntityInit,\n feedEntityReducer\n} from '../shared/feedEntity.reducer';\nimport { buildInitialFeedState } from '../shared/feedEntity.init-state';\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 [feedEntityState] = useReducer(\n feedEntityReducer,\n buildInitialFeedState({\n trackAnalytics\n }),\n feedEntityInit\n );\n\n const providerState = {\n feedEntityState\n };\n\n const logo = (\n {\n createNetworkingClient({ baseUrl: null, headers: null }).get(\n rowData.click.resource\n );\n feedEntityState.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 '../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';\nimport { FEED_ENTRY_TYPES } from '../../../constants';\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 { feedEntityState } = 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 feedEntityState.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 {\"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\"};","import PropTypes from 'prop-types';\nimport React from 'react';\nimport { Markup } from 'interweave';\nimport styles from './index.scss';\nimport Media from '../../../components/shared/media/Media';\nimport MediaLeft from '../../../components/shared/media/MediaLeft';\nimport MediaBody from '../../../components/shared/media/MediaBody';\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 '../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 { feedEntityState } = 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 feedEntityState.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 '../shared/FeedEntityContext';\nimport {\n feedEntityInit,\n feedEntityReducer\n} from '../shared/feedEntity.reducer';\nimport { buildInitialFeedState } from '../shared/feedEntity.init-state';\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 [feedEntityState] = useReducer(\n feedEntityReducer,\n buildInitialFeedState({\n trackAnalytics\n }),\n feedEntityInit\n );\n\n const providerState = {\n feedEntityState\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 '../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 '../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';\nimport { logError } from '../../../../../utils/sentry';\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 { feedEntityState } = 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:\n labels.memberCountKey && entityMemberCount\n ? I18n.t(labels.memberCountKey, {\n count: entityMemberCount\n })\n : null,\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:\n labels.memberCountKey && entityMemberCount\n ? I18n.t(labels.memberCountKey, {\n count: entityMemberCount\n })\n : null\n });\n })\n .catch((e) => {\n logError(e);\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 feedEntityState.trackAnalytics({\n action: 'click',\n element: `view_${entity.toLowerCase()}`\n });\n window.location.href = entityUrl;\n return;\n }\n feedEntityState.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 feedEntityState.trackAnalytics({\n action: 'click',\n element: 'group_header',\n properties: { element_source: entity.toLowerCase() }\n });\n };\n\n const clickTitleText = () => {\n feedEntityState.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 \n {entryState.memberCountLabel}\n \n )}\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,\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,\n error: PropTypes.string\n }).isRequired\n};\n\nAthleteJoinEntry.defaultProps = {\n entityIcon: null,\n entityMemberCount: 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 '../shared/FeedEntityContext';\nimport {\n feedEntityInit,\n feedEntityReducer\n} from '../shared/feedEntity.reducer';\nimport { buildInitialFeedState } from '../shared/feedEntity.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 [feedEntityState] = useReducer(\n feedEntityReducer,\n buildInitialFeedState({\n trackAnalytics\n }),\n feedEntityInit\n );\n\n const providerState = {\n feedEntityState,\n locale\n };\n\n const logo = (\n {\n feedEntityState.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: rowData.displayed_icon ? (\n
    {getIcon(rowData.displayed_icon)}
    \n ) : null,\n entityMemberCount: rowData.participant_count,\n isMember: !rowData.challenge_joinable,\n secondaryText: rowData.secondary_text,\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: rowData.participant_count\n ? `${i18nPrefix}.participants`\n : null,\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,\n participant_count: PropTypes.number,\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 secondary_text: 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 ConditionalWrapper from '../../../shared/ConditionalWrapper';\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 '../shared/FeedEntityContext';\nimport {\n feedEntityInit,\n feedEntityReducer\n} from '../shared/feedEntity.reducer';\nimport { buildInitialFeedState } from '../shared/feedEntity.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 [feedEntityState] = useReducer(\n feedEntityReducer,\n buildInitialFeedState({\n trackAnalytics\n }),\n feedEntityInit\n );\n\n const providerState = {\n feedEntityState\n };\n\n const logoWrapper = (children) => (\n {\n createNetworkingClient({ baseUrl: null, headers: null }).get(\n rowData.click.resource\n );\n feedEntityState.trackAnalytics({\n action: 'click',\n element: 'simple_promo_image'\n });\n }}\n >\n {children}\n \n );\n\n const logo = (\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, useRef } 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 '../../shared/entity-actions';\nimport { useFeedEntityContext } from '../../shared/FeedEntityContext';\nimport { rootMargin } from '../../../utils';\nimport { FEED_ENTRY_TYPES } 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 clubMentionsEnabled,\n kudosAndComments\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 feedEntityState: { autoPlayVideos, isAutoplayEnabled },\n feedDispatch\n } = useFeedEntityContext();\n\n //\n // Handle autoplay when activity enters area we want to trigger autoplay\n //\n const [inViewAutoPlayRef, inViewAutoPlay] = useInView({\n threshold: 0,\n rootMargin: rootMargin()\n });\n\n const autoPlayVideo = autoPlayVideos[activity.entity_id.toString()];\n const playPromiseRef = useRef();\n\n useEffect(() => {\n if (isAutoplayEnabled && autoPlayVideo) {\n if (inViewAutoPlay) {\n playPromiseRef.current = autoPlayVideo.play();\n feedDispatch({\n type: SET_AUTOPLAY_VIDEO_IN_VIEW,\n payload: { autoPlayVideoInView: true }\n });\n } else if (playPromiseRef.current !== undefined) {\n playPromiseRef.current.then(() => {\n autoPlayVideo.pause();\n feedDispatch({\n type: SET_AUTOPLAY_VIDEO_IN_VIEW,\n payload: { autoPlayVideoInView: false }\n });\n });\n }\n }\n }, [\n isAutoplayEnabled,\n autoPlayVideo,\n inViewAutoPlay,\n feedDispatch,\n playPromiseRef\n ]);\n\n return (\n
  • \n {/* Entry Header - avatar, social actions, delete button */}\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 clubMentionsEnabled: 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 embeddable: PropTypes.bool\n }).isRequired,\n kudosAndComments: PropTypes.shape({}).isRequired\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 '../shared/FeedEntityContext';\nimport KudosAndCommentsContext from '../../../shared/KudosCommentsAndAchievements/KudosAndCommentsContext';\nimport {\n feedEntityInit,\n feedEntityReducer\n} from '../shared/feedEntity.reducer';\nimport { buildInitialFeedState } from '../shared/feedEntity.init-state';\nimport { buildInitialKudosAndCommentsState } from '../../../shared/KudosCommentsAndAchievements/kudosAndComments.initial-state';\nimport {\n initKudosAndCommentsState,\n kudosAndCommentsReducer\n} from '../../../shared/KudosCommentsAndAchievements/kudosAndComments.reducer';\nimport LocationAndTime from '../shared/LocationAndTime';\nimport { getPhotoWithMaxDimension } from '../../../../utils/generalUtils';\nimport CommentDeleteAlertDialog from '../../../shared/KudosCommentsAndAchievements/CommentDeleteAlertDialog';\nimport { OPEN_MODAL_OTHER_ATHLETES_TAB } from '../../../shared/KudosCommentsAndAchievements/kudosAndComments.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 clubMentionsEnabled,\n athleteProfileId,\n timeAndLocation,\n switchMapAndPhoto,\n photos,\n kudosAndComments,\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 [feedEntityState, feedDispatch] = useReducer(\n feedEntityReducer,\n buildInitialFeedState({\n trackAnalytics,\n entity: snakeCase(entity),\n parentEntityId: headlineEntityId,\n isAutoplayEnabled\n }),\n feedEntityInit\n );\n\n const [kudosAndCommentsEntityState, dispatch] = useReducer(\n kudosAndCommentsReducer,\n buildInitialKudosAndCommentsState({\n trackAnalytics,\n comments: commentsByActivityId(),\n entity: snakeCase(entity),\n parentEntityId: headlineEntityId\n }),\n initKudosAndCommentsState\n );\n\n const kudosAndCommentsProviderState = {\n kudosAndCommentsEntityState,\n dispatch,\n analyticProps\n };\n\n const feedProviderState = {\n feedEntityState,\n feedDispatch,\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 \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};\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 clubMentionsEnabled: PropTypes.bool.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 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 isAutoplayEnabled: PropTypes.bool\n};\n\nGroupActivity.defaultProps = {\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 '../shared/FeedEntityContext';\nimport {\n feedEntityInit,\n feedEntityReducer\n} from '../shared/feedEntity.reducer';\nimport { buildInitialFeedState } from '../shared/feedEntity.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 [feedEntityState] = useReducer(\n feedEntityReducer,\n buildInitialFeedState({\n trackAnalytics\n }),\n feedEntityInit\n );\n\n const providerState = {\n feedEntityState\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 feedEntityState.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/devUtils';\nimport { logError } from '../../../utils/sentry';\nimport { FEED_PAGES } from '../constants';\n\nconst useFetchFeedEntries = ({\n clubId,\n athleteProfileId,\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 hasMore: page !== 'profile' || useMockData, // profile feed does not use pagination\n page: 0, // keep track of number of pages loaded in pagination,\n inventoryPageSizes: [] // keep track of the number of entries loaded per page\n });\n const [error, setError] = useState();\n const [isLoading, setIsLoading] = useState(false);\n\n const errorState = (e) => {\n setError(e);\n logError(e);\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 FEED_PAGES.dashboard:\n url = `/dashboard/feed`;\n break;\n case FEED_PAGES.club:\n url = `/clubs/${clubId}/feed`;\n break;\n case FEED_PAGES.club_posts:\n url = `/clubs/${clubId}/post_feed`;\n break;\n case FEED_PAGES.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 case FEED_PAGES.athlete:\n url = `/athletes/${athleteProfileId}/posts/feed`;\n break;\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 = false; // change this to false to stop infinite loading (only the first page will be loaded)\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((prev) => ({\n ...prev,\n hasMore,\n page: prev.page + 1,\n inventoryPageSizes: [\n ...prev.inventoryPageSizes,\n mockData.entries.length\n ]\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\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\n const hasMore =\n data.pagination.hasMore && fetchedEntries.length !== 0; // show limit message when no entries were fetched\n setPagination((prev) => ({\n ...prev,\n hasMore,\n page: prev.page + 1,\n inventoryPageSizes: [\n ...prev.inventoryPageSizes,\n fetchedEntries.entries.length\n ]\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';\n\nimport queryString from 'query-string';\nimport { isNil } from 'lodash-es';\nimport { createPath } from '../utils';\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 const globalHistory = window.history;\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 const path = createPath({\n search: queryString.stringify(searchParams)\n });\n\n // #pushState - see https://developer.mozilla.org/en-US/docs/Web/API/History/pushState\n globalHistory.pushState(null, '', path);\n }, [globalHistory, 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\n const path = createPath({\n search: queryString.stringify(searchParams)\n });\n\n // #replaceState - see https://developer.mozilla.org/en-US/docs/Web/API/History/replaceState\n globalHistory.replaceState(null, '', path);\n }, [globalHistory, 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/devUtils';\nimport styles from './feed.scss';\nimport Activity from './components/Activity';\nimport SuggestedActivity from './components/SuggestedActivity';\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 './components/shared/feed.reducer';\n\nimport { feedTypeProps, pageProps } from './props/feed-prop-types';\nimport useFetchFeedEntries from './hooks/useFetchFeedEntries';\nimport useFeedScrollRestoration from './hooks/useFeedScrollRestoration';\nimport FeedContext from './components/shared/FeedContext';\nimport { UPDATE_IS_RESTORING_SCROLL_POSITION } from './components/shared/feed.actions';\n\nimport { FEED_ENTRY_TYPES, FEED_PAGES } from './constants';\nimport { logError, logMessage } from '../../utils/sentry';\nimport { trackV2 } from '../../utils/analytics';\nimport { getFeedAnalyticsFinishLoadData } from './utils';\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 preFetchedEntries,\n locale,\n isAutoplayEnabled,\n canCreateClubPost,\n clubMentionsEnabled,\n isDeletable\n}) => {\n const {\n isLoading,\n error,\n entries,\n pagination,\n loadEntries\n } = useFetchFeedEntries({\n currentAthleteId,\n clubId,\n athleteProfileId,\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 const { hasMore, ...paginationRest } = pagination;\n const i18nPrefix = 'components.feed';\n\n useEffect(() => {\n // Track the number of entries on the initial load.\n if (\n Array.isArray(preFetchedEntries) &&\n preFetchedEntries.length <= 20 &&\n page === FEED_PAGES.dashboard\n ) {\n const {\n inventorySize,\n trackedPageCount,\n inventoryPageSizes,\n inventoryEntryTypes\n } = getFeedAnalyticsFinishLoadData(preFetchedEntries);\n\n trackV2({\n category: 'performance',\n action: 'finish_load',\n element: 'feed_inventory',\n page: 'following_feed',\n properties: {\n inventory_size: inventorySize,\n tracked_page_count: trackedPageCount,\n inventory_page_sizes: inventoryPageSizes,\n inventory_entry_types: inventoryEntryTypes\n }\n });\n }\n }, [page, preFetchedEntries]);\n\n useEffect(() => {\n // Track the number of entries when user reaches the bottom of the feed.\n if (!hasMore && page === FEED_PAGES.dashboard) {\n trackV2({\n category: 'performance',\n action: 'finish_load',\n element: 'feed_inventory_limit',\n page: 'following_feed',\n properties: {\n inventory_size: entries?.length || 0, // total number of entries in the feed\n tracked_page_count: paginationRest.page, // number of pages that were used to track the inventory size\n inventory_page_sizes: [\n preFetchedEntries.length,\n ...paginationRest.inventoryPageSizes\n ] // sizes for each of the loaded pages\n }\n });\n }\n }, [hasMore, preFetchedEntries, paginationRest, entries.length, page]);\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 logMessage('feed scroll restoration failed. `performance` is undefined.');\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\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 feedType,\n key,\n locale,\n isAutoplayEnabled,\n clubMentionsEnabled,\n isDeletable\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.suggestedActivity:\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 logError(\n new Error(`Could not translate props into entry - ${entityName}`)\n );\n entry = <>;\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 = `${i18nPrefix}.no_more.limit`;\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 handleNoPostsMessage = () => {\n const createPostLink =\n page === FEED_PAGES.club_posts\n ? `/clubs/${clubId}/posts/new`\n : `athletes/${athleteProfileId}/posts/new`;\n const canCreateAthletePost =\n page === FEED_PAGES.athlete &&\n currentAthleteId === parseInt(athleteProfileId, 10);\n\n return (\n
    \n {I18n.t('templates.discussions.discussion.no_posts_yet')}\n {(canCreateClubPost || canCreateAthletePost) && (\n \n {I18n.t('templates.discussions.discussion.create_first_club_post')}\n \n )}\n
    \n );\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 {(page === FEED_PAGES.club_posts || FEED_PAGES.athlete) &&\n !isLoading &&\n entries.length === 0 &&\n handleNoPostsMessage()}\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 preFetchedEntries: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\n locale: PropTypes.string.isRequired,\n isAutoplayEnabled: PropTypes.bool.isRequired,\n canCreateClubPost: PropTypes.bool,\n clubMentionsEnabled: PropTypes.bool.isRequired,\n isDeletable: PropTypes.bool.isRequired\n};\n\nFeed.defaultProps = {\n canCreateClubPost: false\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\nReactComponentMounter.register({\n Activity,\n ChallengeJoin,\n ClubJoin,\n FancyPromo,\n FeedRouter,\n FeedMediaShowCase,\n GroupActivity,\n PerformanceGoalCreated,\n Post,\n SimplePromo\n});\n"],"names":["PowerAndSegmentGoalAchievements","powerAndSegmentGoalAchievements","activityId","length","href","url","className","styles","description","noWrap","content","I18n","more_goals_link","count","defaultProps","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","useKudosAndCommentsContext","title","Button","variant","type","onClick","OPEN_MODAL_ACHIEVEMENTS_TAB","payload","element","selectedEntityId","size","Cldr","FeedEntityContext","React","useFeedEntityContext","displayName","ELLIPSIS","MAX_LENGTH","ActivityTextBody","activityName","ownedByCurrentAthlete","flagged","feedEntityState","useState","readMore","setReadMore","isExpandable","splitDescription","cleanDescription","trim","firstSection","substr","Math","min","lastIndexOf","handleMentionClick","e","isEntityClub","target","includes","match","trackAnalytics","action","properties","clicked_athlete_id","clicked_club_id","join","element_source","ActionsFlagHighlightedXsmall","fill","colors","disableLineBreaks","transform","nodeName","innerText","tabIndex","PropTypes","ACTIVITY_LIST","CumulativeGoalAchievement","cumulativeGoalAchievement","sportType","athleteFirstName","displayKey","prefix","lowercaseType","toLowerCase","athlete","Media","children","centered","options","classNames","MediaBody","centerVertically","clsx","ActivityEntryBody","isEmpty","FeaturedSegmentEffortAndBestEffortAchievements","anchor_container_click_data","FeedContext","useFeedContext","page","entity","athleteProfileId","feedType","index","clubId","viewingAthleteId","activityIds","inView","isNil","devLog","entityState","isRestoringScrollPosition","parentLevelProperties","entityName","snakeCase","inGroup","FEED_ENTRY_TYPES","source","hash","in_group","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","createNetworkingClient","cache","errorState","logError","updateRitmo","elementId","path","promo","Error","post","then","response","status","error","catch","UPDATE_NUM_ENTRIES","UPDATE_IS_RESTORING_SCROLL_POSITION","TOGGLE_IS_ACTIVITY_VIDEO_MUTED","roundUpNearest10","num","n","ceil","createPath","searchProp","search","location","window","pathname","charAt","rootMargin","padding","pageHeight","innerHeight","document","documentElement","clientHeight","rootMarginDiff","AUTOPLAY_MARGIN_TOP","isParentFeedEntry","useInView","threshold","intersectionObserverRef","dispatchFeed","numEntries","hideAnywhereSetting","paths","units","i18nPrefix","analyticProps","useFeedIntersectionObserver","useFeedRitmoCapping","analyticsProperties","cta","hide_anywhere","useFeedAnalytics","promptImpression","ActivityDistanceNormalXsmall","ref","hideAnywhere","AchievementCelebration","text","subtitle","image","analytics","activityOwnerId","imageCaption","image_caption","achievementType","activity_athlete_id","src","alt","id","lines","buttons","delay","tag","Map","activityMap","isRoutable","entryTypeClassName","isVirtual","isCommute","isGroupActivity","workoutType","privacyTagKey","elements","tags","buildActivityMapTags","srcSet","ADD_AUTOPLAY_VIDEO","SET_AUTOPLAY_VIDEO_IN_VIEW","Controls","duration","video","isAutoplayEnabled","videoId","isActivityVideoMuted","time","isPlaying","state","setState","handleMuteToggleClick","preventDefault","stopPropagation","muted","video_id","audio_cta","handlePlayEvent","prevState","remainingTime","handlePauseEvent","handleTimeupdate","handlePlayToggleClick","pause","videojs","p","paused","forEach","play","on","off","role","onKeyPress","ActionsPauseNormalXsmall","ActionsVideoThumbnailNormalXsmall","ActionsAudioOffNormalXsmall","ActionsAudioOnNormalXsmall","VideoItem","media","onReady","playOnHover","isAutoPlayItem","setVideo","hoverTimerRef","clearTimeout","preload","inViewRef","currentTime","hasStarted","posterImage","show","cx","onMouseEnter","setTimeout","onMouseLeave","fallback","photo_id","Poc","vid","controls","loop","PhotoGrid","photoList","maxNumPhotosToShow","singleImageHighlighted","feedDispatch","isOpen","photoIndex","params","setParams","orderIndex","media_type","image_id","has_description","caption_escaped","order","owner_id","photoCount","showPhotoLightbox","firstVideoId","useMemo","maxNumVideoCanAutoplay","filtered","snowplowMediaClickEvent","isImage","openLightBox","photoGridElements","highlightedImageForPosts","large","photo","photoId","caption","onTouchStart","autoPlayVideoInView","autoPlayVideo","showEnhancedTag","enhanced_photo","extraPhotos","s","StravaMediaLightbox","selectedPhotoIndex","onMount","data","entity_type","element_entity_type","element_entity_id","onMediaClick","onCloseRequest","photoGrid","ACTIVITY","GROUP_ACTIVITY","POST","ACTIVITY_MAX_PHOTO_COUNT","GROUP_ACTIVITY_MAX_PHOTO_COUNT","POST_MAX_PHOTO_COUNT","PhotosAndMapImage","entryType","feedName","isPost","showMap","showPhotoGrid","showPost","totalNumEntryImages","imagesContainerClass","imageEntriesContainerClass","containerClassNames","feedImageHeight","reject","MediaLeft","bigBadge","onSeeMoreCommentsClick","showCommentReactions","kudosAndCommentsEntityState","commentReactionAnalytics","buttonElement","listElement","comments","numComments","totalComments","max","comment","timeAgoTimestamp","buildTimeAgoTimestamp","timestamp","reactionsSummary","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","clubMentionsEnabled","openCommentsModalOnIconClick","showHairlineOnTop","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","updateKudosEndpoint","onClickKudo","kudoPosted","onClickComment","OPEN_MODAL_COMMENTS_TAB","entryTypesAllowingCommentReactions","AvatarGroup","kudoer","components","kudosAndCommentsCtaText","MentionableCommentForm","autoFocus","openKudosCommentModal","isViewingCommentReactionsList","KudosCommentsAndAchievementsModal","hasOtherAthletes","feedEntityInit","parentEntityId","autoPlayVideos","feedEntityReducer","buildInitialFeedState","overrides","Subtitle","timestampFormat","displayDateAtTime","displayDate","showDate","showLocation","EntryActions","shareable","twitterUrl","embedDropdownEnabled","entityParentType","entityParentId","isDeletable","extraEntityActions","isEmbedModalOpen","setIsEmbedModalOpen","isDeleteModalOpen","setIsDeleteModalOpen","toggleEmbedModalOpen","event","Dropdown","entity_parent_id","onSelect","left","screen","width","top","height","open","activityUrl","facebookShareUrl","TranslationContext","t","props","getLanguage","EmbedModal","embedType","embedId","onDismiss","i","node","EntityDeleteAlertDialog","clubOrAthleteId","undefined","EntryHeader","child","HeaderWithOwnerMetadata","timeAndLocation","isBoosted","displayImage","memberType","profileUrl","f","ActionsStarHighlightedXsmall","EntityActions","visibility","icon","message","hiddenStatIndicatorString","showVisibilityMessage","sectionStyle","iconStyle","Card","forwardRef","cursorData","a","EntryBody","inset","impression","EntryMedia","EntryFooter","Activity","activity","extraTrackingProperties","athleteName","athleteId","firstName","descriptionMentionedAthleteIds","descriptionMentionsClubIds","mapVisPrompt","maharajAchievement","mapAndPhotos","mentioned_athletes","mentioned_clubs","useReducer","kudosAndCommentsReducer","buildInitialKudosAndCommentsState","initKudosAndCommentsState","kudosAndCommentsProviderState","feedProviderState","translatedSportType","showHiddenStatIndicator","inViewAutoPlayRef","inViewAutoPlay","playPromiseRef","observerRes","KudosAndCommentsContext","parseInt","ActivityIcon","buildEntryBody","CommentDeleteAlertDialog","FOLLOWING_STATUS","Object","freeze","following","pending","canFollow","canRequest","add","followRequested","requestToFollow","follow","followAthlete","followerId","followingId","Promise","resolve","follower_id","following_id","StatusCodes","approved","unfollowAthlete","delete","headers","Accept","sleep","ms","mockOptOut","optOutReason","uninterestedInSportType","uninterestedInAthlete","notUseful","other","optOutApiCall","feedbackApiCall","reason","URLSearchParams","discovery_strategy","opt_out_reason","undoApiCall","keyPath","vs","VISIBLE","HIDDEN","HIDDEN_WITH_FEEDBACK_GIVEN","useMutation","apiFn","setStatus","mutate","unchainedPromise","LoadingOverlay","isLoading","Spinner","ActivityHidden","fn","onFeedback","onUndo","track","ActivityHiddenWithFeedback","hideState","setHideState","didFollow","setDidFollow","reasonProvided","setReasonProvided","optOutAction","feedbackAction","undoAction","followAction","unfollowAction","anythingIsLoading","trackArgs","suggested_activity_id","suggested_athlete_id","onClickHideActivity","unHideActivity","onToggleFollow","activityContextHeader","Post","body","sharedContents","idForProfileUrl","originator_type","originator_id","urlPostPrefix","parent_type","postUrl","path_prefix","originator_avatar_url","originator_name","athleteHasDeletePermissions","toString","is_boosted","is_sharable","twitter_url","bodyStyle","summary","videoThumbnailIcon","typeClass","toUpperCase","rel","thumbnail_url","videoIcon","hostname","entryExpandedLink","primary_photo","photoUrlHash","urls","photoUrl","getPhotoWithMaxDimension","unique_id","highlightPhoto","can_kudo","kudos_count","highlighted_kudosers","comments_enabled","condition","wrapper","BackgroundHeaderImage","backgroundImage","PromoEntry","click","headline","ctaText","ctaUrl","hasCta","baseUrl","get","rowData","providerState","logo","cta_action","resource","cta_text","bodyProps","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","reducer","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","joined","clickGroupHeader","onKeyDown","youngestDob","ageGateAndJoinChallenge","challenge_url","challenge_name","entry_logo_url","displayed_icon","getIcon","participant_count","challenge_joinable","secondary_text","gating_conditions","minimum_age","join_method","join_url","virtual_race","join_button_text","EntryBlock","photos","athlete_name","noAchievementsAndMapsPhotos","web_achievement","embeddable","owned_by_current_athlete","achievements","performance_goals","goals","athlete_firstname","GroupActivity","switchMapAndPhoto","headLineActivity","activities","headlineEntityId","mentionedAthletesByActivity","fromEntries","description_mentioned_athlete_ids","commentsByActivityId","commentsHash","entries","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","hasMore","inventoryPageSizes","pagination","setPagination","setError","setIsLoading","buildEndpointUrl","before","FEED_PAGES","timeout","loadMockData","mockData","loadEntries","isDev","fetchedEntries","err","globalHistory","history","saveScrollPosition","sessionStorage","setItem","scrollY","searchParams","queryString","num_entries","pushState","clearScrollPosition","removeItem","replaceState","getScrollPosition","getItem","Number","Feed","canCreateClubPost","useFetchFeedEntries","scrollTop","useFeedScrollRestoration","paginationRest","Array","isArray","defaultNumEntries","firstPage","inventorySize","trackedPageCount","inventoryEntryTypes","getFeedAnalyticsFinishLoadData","inventory_size","tracked_page_count","inventory_page_sizes","inventory_entry_types","performance","navigationEntries","getEntriesByType","scrollPosition","scrollTo","logMessage","useInfiniteScroll","loading","hasNextPage","onLoadMore","minBeforeEntry","minRankEntry","minBy","updated_at","computeMinCursorData","sentryRef","_","entryProps","assign","renderEntry","endMessage","createPostLink","canCreateAthletePost","handleNoPostsMessage","ReactComponentMounter","ChallengeJoin","ClubJoin","FancyPromo","FeedRouter","FeedMediaShowCase","PerformanceGoalCreated","SimplePromo"],"sourceRoot":""}