{"version":3,"file":"js/9571-014e4ae5d9c1f9236877.js","mappings":"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","sources":["webpack://StravaModern/./node_modules/@strava/react-hooks/src/use-local-storage/useLocalStorage.hook.js","webpack://StravaModern/./node_modules/@strava/react-hooks/src/use-safe-dispatch/useSafeDispatch.hook.js","webpack://StravaModern/./node_modules/@strava/react-hooks/src/use-safe-state/useSafeState.hook.js","webpack://StravaModern/./node_modules/@strava/ui/node_modules/@strava/icons/NavigationProfileHighlightedMedium.js","webpack://StravaModern/./node_modules/@strava/ui/node_modules/@strava/icons/BadgesMulticolorSuperuserSmall.js","webpack://StravaModern/./node_modules/@strava/ui/node_modules/@strava/icons/BadgesMulticolorSummitSmall.js","webpack://StravaModern/./node_modules/@strava/ui/node_modules/@strava/icons/BadgesMulticolorProSmall.js","webpack://StravaModern/./node_modules/@strava/ui/node_modules/@strava/icons/BadgesMulticolorVerifiedSmall.js","webpack://StravaModern/./node_modules/@strava/ui/Avatar/styles.scss?af32","webpack://StravaModern/./node_modules/@strava/ui/Avatar/index.js"],"sourcesContent":["import { useEffect, useState } from 'react';\n\n// Exporting so we can test this function\n/**\n * Merges two objects, but also removes/adds fields based on defaultObj\n * fields and structure\n * @param {Object} defaultObj Object with default fields\n * @param {Object} savedObj Object Saved object\n */\nexport function mergeData(defaultObj, savedObj) {\n const merged = {};\n\n Object.keys(defaultObj).forEach((k) => {\n if (!Object.prototype.hasOwnProperty.call(savedObj, k)) {\n merged[k] = defaultObj[k];\n }\n });\n Object.keys(savedObj).forEach((k) => {\n if (Object.prototype.hasOwnProperty.call(defaultObj, k)) {\n merged[k] = savedObj[k];\n }\n });\n\n return merged;\n}\n\nexport function useLocalStorage(\n key,\n defaultValue = '',\n options = { merge: false }\n) {\n const [state, setState] = useState(() => {\n try {\n const value = window.localStorage.getItem(key);\n\n if (value) {\n const saved = JSON.parse(value);\n\n if (options.merge) {\n return mergeData(defaultValue, saved);\n }\n\n return saved;\n }\n return typeof defaultValue === 'function' ? defaultValue() : defaultValue;\n } catch (e) {\n return defaultValue;\n }\n });\n\n useEffect(() => {\n try {\n window.localStorage.setItem(key, JSON.stringify(state));\n } catch (e) {\n // Noop\n }\n }, [key, state]);\n\n return [state, setState];\n}\n\nexport default useLocalStorage;\n","import { useCallback, useEffect, useRef } from 'react';\n\n/**\n * This is just a wrapper function over the dispatch,\n * we want to pass any arguments back to the actual dispatch and\n * when a component un-mounts we should no longer dispatch.\n * This tells a component that it is ok to still dispatch and prevents\n * memory leaks when the component un-mounts.\n *\n * Using `safeDispatch` prevents this error:\n * \"Warning: Can’t perform a React state update on an unmounted component.\"\n *\n * This helps when we have async behavior where we call an async API call,\n * then based on the async response, we set the state. But if the component\n * unmounts before the API call resolves, we don't want to set the state.\n * */\nexport const useSafeDispatch = (dispatch) => {\n const mountedRef = useRef(false);\n\n useEffect(() => {\n mountedRef.current = true;\n return () => {\n mountedRef.current = false;\n };\n }, []);\n\n return useCallback(\n (...args) => (mountedRef.current ? dispatch(...args) : () => {}),\n [dispatch]\n );\n};\n\nexport default useSafeDispatch;\n","import { useRef, useCallback, useEffect, useState } from 'react';\n\n/**\n * The `useSafeState` hook acts the same as React's `useState`,\n * where we can set the initial state, and it returns (1) the current state,\n * and (2) the state setter.\n *\n * But with `useSafeState`, it will only set the state when the component is mounted\n * in order to prevent memory leaks and avoid this warning:\n * \"Warning: Can’t perform a React state update on an unmounted component.\"\n * When a component is unmounted, we don't want to set the state.\n *\n * This helps when we have async behavior where we call an async API call,\n * then based on the async response, we set the state. But if the component\n * unmounts before the API call resolves, we don't want to set the state.\n * */\nexport const useSafeState = (initialState) => {\n const mountedRef = useRef(false);\n const [state, setState] = useState(initialState);\n\n useEffect(() => {\n mountedRef.current = true;\n return () => {\n mountedRef.current = false;\n };\n }, []);\n\n const setSafeState = useCallback(\n (args) => (mountedRef.current ? setState(args) : () => {}),\n []\n );\n\n return [state, setSafeState];\n};\n\nexport default useSafeState;\n","import * as React from 'react';\nimport PropTypes from 'prop-types';\n\nconst SvgNavigationProfileHighlightedMedium = React.forwardRef(\n ({ color, size, title, titleId, ...props }, ref) => (\n \n {title ? {title} : null}\n \n \n )\n);\nSvgNavigationProfileHighlightedMedium.defaultProps = {\n color: 'currentColor',\n size: 32,\n title: undefined,\n titleId: undefined\n};\nSvgNavigationProfileHighlightedMedium.propTypes = {\n color: PropTypes.string,\n size: PropTypes.number,\n title: PropTypes.string,\n titleId: PropTypes.string\n};\nexport default SvgNavigationProfileHighlightedMedium;\n","import * as React from 'react';\nimport PropTypes from 'prop-types';\n\nconst SvgBadgesMulticolorSuperuserSmall = React.forwardRef(\n ({ color, size, title, titleId, ...props }, ref) => (\n \n {title ? {title} : null}\n \n \n \n \n \n \n )\n);\nSvgBadgesMulticolorSuperuserSmall.defaultProps = {\n color: 'currentColor',\n size: 24,\n title: undefined,\n titleId: undefined\n};\nSvgBadgesMulticolorSuperuserSmall.propTypes = {\n color: PropTypes.string,\n size: PropTypes.number,\n title: PropTypes.string,\n titleId: PropTypes.string\n};\nexport default SvgBadgesMulticolorSuperuserSmall;\n","import * as React from 'react';\nimport PropTypes from 'prop-types';\n\nconst SvgBadgesMulticolorSummitSmall = React.forwardRef(\n ({ color, size, title, titleId, ...props }, ref) => (\n \n {title ? {title} : null}\n \n \n \n \n \n \n )\n);\nSvgBadgesMulticolorSummitSmall.defaultProps = {\n color: 'currentColor',\n size: 24,\n title: undefined,\n titleId: undefined\n};\nSvgBadgesMulticolorSummitSmall.propTypes = {\n color: PropTypes.string,\n size: PropTypes.number,\n title: PropTypes.string,\n titleId: PropTypes.string\n};\nexport default SvgBadgesMulticolorSummitSmall;\n","import * as React from 'react';\nimport PropTypes from 'prop-types';\n\nconst SvgBadgesMulticolorProSmall = React.forwardRef(\n ({ color, size, title, titleId, ...props }, ref) => (\n \n {title ? {title} : null}\n \n \n \n \n \n \n )\n);\nSvgBadgesMulticolorProSmall.defaultProps = {\n color: 'currentColor',\n size: 24,\n title: undefined,\n titleId: undefined\n};\nSvgBadgesMulticolorProSmall.propTypes = {\n color: PropTypes.string,\n size: PropTypes.number,\n title: PropTypes.string,\n titleId: PropTypes.string\n};\nexport default SvgBadgesMulticolorProSmall;\n","import * as React from 'react';\nimport PropTypes from 'prop-types';\n\nconst SvgBadgesMulticolorVerifiedSmall = React.forwardRef(\n ({ color, size, title, titleId, ...props }, ref) => (\n \n {title ? {title} : null}\n \n \n \n \n \n )\n);\nSvgBadgesMulticolorVerifiedSmall.defaultProps = {\n color: 'currentColor',\n size: 24,\n title: undefined,\n titleId: undefined\n};\nSvgBadgesMulticolorVerifiedSmall.propTypes = {\n color: PropTypes.string,\n size: PropTypes.number,\n title: PropTypes.string,\n titleId: PropTypes.string\n};\nexport default SvgBadgesMulticolorVerifiedSmall;\n","// extracted by mini-css-extract-plugin\nexport default {\"avatar\":\"Avatar--avatar--0cH8u\",\"img-wrapper\":\"Avatar--img-wrapper--uEKlj\",\"imgWrapper\":\"Avatar--img-wrapper--uEKlj\",\"badge\":\"Avatar--badge--dPtDC\",\"athlete\":\"Avatar--athlete--sA9o6\",\"xsmall\":\"Avatar--xsmall--pBfF6\",\"small\":\"Avatar--small--UyvKr\",\"large\":\"Avatar--large--+f+X2\",\"xlarge\":\"Avatar--xlarge--CUpYU\",\"club\":\"Avatar--club--wlZQJ\"};","import React, { useEffect } from 'react';\nimport PropTypes from 'prop-types';\n\nimport { useSafeState } from '@strava/react-hooks';\n\nimport AvatarFallback from '@strava/icons/NavigationProfileHighlightedMedium';\n\nimport EmployeeBadge from '@strava/icons/BadgesMulticolorSuperuserSmall';\nimport SubscriberBadge from '@strava/icons/BadgesMulticolorSummitSmall';\nimport ProBadge from '@strava/icons/BadgesMulticolorProSmall';\nimport VerifiedBadge from '@strava/icons/BadgesMulticolorVerifiedSmall';\n\nimport styles from './styles.scss';\n\nconst Img = ({ src, alt, title, fallback }) => {\n const [children, setChildren] = useSafeState(null);\n\n useEffect(() => {\n let image = new Image();\n image.onload = () => {\n setChildren({alt});\n };\n image.onerror = () => {\n setChildren(fallback);\n };\n image.src = src;\n return () => {\n image = null;\n };\n }, [src, alt, title, fallback]);\n\n return children;\n};\n\nImg.propTypes = {\n src: PropTypes.string.isRequired,\n alt: PropTypes.string.isRequired,\n title: PropTypes.string.isRequired,\n fallback: PropTypes.node\n};\n\nImg.defaultProps = {\n fallback: null\n};\n\nfunction getBadge(badge) {\n switch (badge) {\n case 'ambassador':\n return ;\n case 'employee':\n return ;\n case 'subscriber':\n case 'premium':\n return ;\n case 'pro':\n return ;\n case 'verified':\n return ;\n default:\n return null;\n }\n}\n/**\n * Prop Deprecation Warning: We are slowly deprecating the `name` prop in favor of the `title` prop\n * so that the React props match up to the element's attribute.\n * */\nconst Avatar = ({\n name,\n alt,\n title,\n type,\n src,\n size,\n badge,\n href,\n className: classNameProp,\n ...otherProps\n}) => {\n const classNames = [styles.avatar, styles[type]];\n if (styles[size]) {\n classNames.push(styles[size]);\n }\n if (classNameProp) {\n classNames.push(classNameProp);\n }\n\n // TODO: uncomment when existing Avatar usage is refactored. Otherwise, there will be a lot of warning in the console.\n // if (name || process.env.NODE_ENV !== 'production') {\n // console.warn(\n // '[Prop Deprecation Warning] Deprecating the `name` prop in favor of the `title`.'\n // );\n // }\n\n const children = (\n <>\n {badge &&
{getBadge(badge)}
}\n
\n : null}\n />\n
\n \n );\n\n if (href) {\n return (\n \n {children}\n \n );\n }\n\n return (\n
\n {children}\n
\n );\n};\n\nAvatar.propTypes = {\n name: PropTypes.string,\n alt: PropTypes.string,\n title: PropTypes.string,\n href: PropTypes.string,\n src: PropTypes.string.isRequired,\n type: PropTypes.oneOf(['athlete', 'club']).isRequired,\n size: PropTypes.oneOf(['xsmall', 'small', 'default', 'large', 'xlarge']),\n badge: PropTypes.oneOf([\n '', // in some cases active has member_type as empty string for default users\n 'ambassador',\n 'employee',\n 'subscriber',\n 'premium', // legacy name referring to 'subscriber', used in active\n 'pro',\n 'verified'\n ]),\n className: PropTypes.string\n};\n\nAvatar.defaultProps = {\n name: null,\n href: null,\n alt: '',\n title: null,\n size: null,\n badge: null,\n className: null\n};\n\nexport default Avatar;\n"],"names":["useSafeDispatch","dispatch","mountedRef","useRef","useEffect","current","useCallback","useSafeState","initialState","useState","state","setState","args","SvgNavigationProfileHighlightedMedium","React","ref","color","size","title","titleId","props","fill","xmlns","viewBox","width","height","id","d","defaultProps","undefined","propTypes","PropTypes","SvgBadgesMulticolorSuperuserSmall","fillRule","SvgBadgesMulticolorSummitSmall","SvgBadgesMulticolorProSmall","SvgBadgesMulticolorVerifiedSmall","Img","src","alt","fallback","children","setChildren","image","Image","onload","onerror","Avatar","name","type","badge","href","classNameProp","className","otherProps","classNames","styles","avatar","push","getBadge","imgWrapper","join","isRequired"],"sourceRoot":""}