{"version":3,"file":"444.bundle.2e3f83bd377031839e85.js","mappings":"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","sources":["webpack://fieldlevel.app/./app-core/components/DefaultLogo.jsx","webpack://fieldlevel.app/./app-core/components/SearchFilters/useParamTools.js","webpack://fieldlevel.app/./app-core/components/TeamDetailsDisplay.jsx","webpack://fieldlevel.app/./app-core/components/TeamLogo.jsx","webpack://fieldlevel.app/./app-core/constants/environment.js","webpack://fieldlevel.app/./app-core/constants/system.js","webpack://fieldlevel.app/./app-core/icons/PrimeBadgeIcon.jsx","webpack://fieldlevel.app/./app-core/services/enumHelper.js","webpack://fieldlevel.app/./app-core/services/http/index.js","webpack://fieldlevel.app/./app-core/services/teamLogoCache.js","webpack://fieldlevel.app/./app-core/services/orgLogoCache.js","webpack://fieldlevel.app/./common/storage.js","webpack://fieldlevel.app/./app-core/services/athleteHeadshotCache.js","webpack://fieldlevel.app/./app-core/services/userHeadshotCache.js","webpack://fieldlevel.app/./app-core/services/imageSrcManager.js","webpack://fieldlevel.app/./app-core/utility/apiUtils.js","webpack://fieldlevel.app/./app-core/utility/cachingUtils.js","webpack://fieldlevel.app/./app-core/utility/lookupEnumLabel.js","webpack://fieldlevel.app/./app-core/routes/teams/components/TeamsListDisplay.jsx","webpack://fieldlevel.app/./app-public/shared/api/teamApi.js","webpack://fieldlevel.app/./app-public/routes/teams/TeamsList/useFetchTeamSearchOptions.js","webpack://fieldlevel.app/./app-public/routes/teams/TeamsList/useFetchTeamSearchResults.js","webpack://fieldlevel.app/./app-public/routes/teams/TeamsList/useFilterTools.js","webpack://fieldlevel.app/./app-public/routes/teams/TeamsList/TeamsList.jsx","webpack://fieldlevel.app/./app-public/shared/hooks/useCanonical.js","webpack://fieldlevel.app/./app-core/utility/makeCrossAppUrlBuilder.js","webpack://fieldlevel.app/./app-public/shared/services/crossAppUrlBuilder.js","webpack://fieldlevel.app/./app-public/shared/utility/urlGeneration.js"],"sourcesContent":["import { useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { Logo } from '@fieldlevel/playbook';\r\n\r\nimport { DEFAULT_TEAM_LOGO_URL_COLLEGE, DEFAULT_TEAM_LOGO_URL_HS } from '@appCore/constants/system';\r\nimport { generateDeprecationNotice } from '@appCore/utility/consoleUtils';\r\n\r\nconst Sizes = {\r\n small: 32,\r\n base: 40,\r\n large: 60\r\n};\r\n\r\nconst DefaultLogo = ({ useHighSchool = true, size = 'base', organizationName, lazy }) => {\r\n const sizeLowercase = size?.toLowerCase();\r\n\r\n // Generate deprecation notice for uppercase strings\r\n useEffect(() => {\r\n if (size !== sizeLowercase) {\r\n generateDeprecationNotice({\r\n message: `DefaultLogo - The usage of '${size}' for props.size has been deprecated. Please use lowercase strings instead.`\r\n });\r\n }\r\n }, [size, sizeLowercase]);\r\n\r\n const srcUrl = useHighSchool ? DEFAULT_TEAM_LOGO_URL_HS : DEFAULT_TEAM_LOGO_URL_COLLEGE;\r\n\r\n return <Logo size={sizeLowercase} source={srcUrl} alt={organizationName} lazy={lazy} />;\r\n};\r\n\r\nDefaultLogo.propTypes = {\r\n useHighSchool: PropTypes.bool,\r\n size: PropTypes.oneOf([...Object.keys(Sizes), 'Small', 'Base', 'Large']),\r\n organizationName: PropTypes.string,\r\n lazy: PropTypes.bool\r\n};\r\n\r\nexport default DefaultLogo;\r\n","import { useEffect, useRef } from 'react';\r\n\r\nimport useURLParams from '@appCore/hooks/routeTools/useURLParams/useURLParams';\r\n\r\nimport {\r\n deriveSecondaryKey,\r\n getIndexFromSecondaryKey,\r\n getIsEmptyValue,\r\n getIsSecondaryKey,\r\n SELECTION_TYPES,\r\n UNSTABLE_getGroupIndexFromCheckboxGroupKey,\r\n UNSTABLE_getGroupIndexFromDependentSelectGroupKey\r\n} from './utility';\r\n\r\n/**\r\n * This hook attempts to encapsulate some of the more commonly used functionality when working with\r\n * SearchFilters. It accepts a SearchFilters FilterDefinition and returns three functions (deriveValues(),\r\n * deriveRequestParams(), and deriveSearchParamsOnValuesChange()) which can be used to manage filter state on\r\n * any given page.\r\n *\r\n * In particular, it handles:\r\n * - Automatically parsing filter values from searchParams/defaults when configured in the filterDef\r\n * - Automatically parsing request params from given values when configured in the filterDef\r\n * - Automatically resetting filters when the primary filter changes\r\n * - Automatically resetting page-tracking filters when any filters change\r\n */\r\nconst useParamTools = ({ filterDef }) => {\r\n const searchParams = useURLParams().search;\r\n const prevSearchParams = useRef(searchParams);\r\n\r\n useEffect(() => {\r\n if (prevSearchParams.current !== searchParams) {\r\n prevSearchParams.current = searchParams;\r\n }\r\n }, [searchParams]);\r\n\r\n if (!filterDef) {\r\n return null;\r\n }\r\n\r\n const pageSearchParamKey = 'page' in filterDef ? filterDef.page.searchParamKey : 'page';\r\n const pageRequestParamKey = 'page' in filterDef ? filterDef.page.requestParamKey : 'page';\r\n\r\n const deriveValues = () => {\r\n const getPrimaryValue = () => {\r\n if (filterDef.primary.disabled) {\r\n return '';\r\n }\r\n return searchParams[filterDef.primary.searchParamKey] || filterDef.primary.defaultValue || '';\r\n };\r\n\r\n const getSecondaryValue = ({ secondaryDef }) => {\r\n if (secondaryDef.disabled) {\r\n return secondaryDef.selectionType === SELECTION_TYPES.multiSelect ? [] : '';\r\n }\r\n if (secondaryDef.selectionType === SELECTION_TYPES.multiSelect) {\r\n if (!searchParams[secondaryDef.searchParamKey]) {\r\n return [];\r\n }\r\n const multiSelectValue = Array.isArray(searchParams[secondaryDef.searchParamKey])\r\n ? searchParams[secondaryDef.searchParamKey]\r\n : [searchParams[secondaryDef.searchParamKey]];\r\n\r\n if (!multiSelectValue.every(val => !!secondaryDef.options.find(opt => opt.value === val))) {\r\n return [];\r\n }\r\n return multiSelectValue;\r\n }\r\n if (secondaryDef.selectionType === SELECTION_TYPES.singleSelect) {\r\n if (!secondaryDef.options.find(opt => opt.value === searchParams[secondaryDef.searchParamKey])) {\r\n return '';\r\n }\r\n return searchParams[secondaryDef.searchParamKey] || '';\r\n }\r\n if (secondaryDef.selectionType === 'checkbox') {\r\n return searchParams[secondaryDef.searchParamKey] === 'true' ? true : '';\r\n }\r\n return searchParams[secondaryDef.searchParamKey] || '';\r\n };\r\n\r\n const getTextValue = () => {\r\n if (filterDef.text.disabled) {\r\n return '';\r\n }\r\n return searchParams[filterDef.text.searchParamKey] || '';\r\n };\r\n\r\n const getSortValue = () => {\r\n if (filterDef.sort.disabled) {\r\n return '';\r\n }\r\n return searchParams[filterDef.sort.searchParamKey] || filterDef.sort.defaultValue || '';\r\n };\r\n\r\n const values = {\r\n ...filterDef.secondary.reduce((acc, secondaryDef, secondaryDefIdx) => {\r\n if (secondaryDef.selectionType === 'unstable_dependentSelectGroup') {\r\n const keyPrefix = deriveSecondaryKey({ idx: secondaryDefIdx });\r\n return secondaryDef.group.reduce(\r\n (groupAcc, groupItemDef, groupItemDefIdx) => ({\r\n ...groupAcc,\r\n [`${keyPrefix}.${groupItemDefIdx}`]: getSecondaryValue({ secondaryDef: groupItemDef })\r\n }),\r\n acc\r\n );\r\n }\r\n\r\n if (secondaryDef.selectionType === 'unstable_checkboxGroup') {\r\n const keyPrefix = deriveSecondaryKey({ idx: secondaryDefIdx });\r\n return secondaryDef.group.reduce(\r\n (groupAcc, groupItemDef, groupItemDefIdx) => ({\r\n ...groupAcc,\r\n [`${keyPrefix}.${groupItemDefIdx}`]: getSecondaryValue({ secondaryDef: groupItemDef })\r\n }),\r\n acc\r\n );\r\n }\r\n\r\n return {\r\n ...acc,\r\n [deriveSecondaryKey({ idx: secondaryDefIdx })]: getSecondaryValue({ secondaryDef })\r\n };\r\n }, {})\r\n };\r\n\r\n // Only attach a value for 'primary', 'text', and 'sort' if they exist in the definition (they're optional)\r\n if (filterDef.primary) {\r\n values.primary = getPrimaryValue();\r\n }\r\n if (filterDef.text) {\r\n values.text = getTextValue();\r\n }\r\n if (filterDef.sort) {\r\n values.sort = getSortValue();\r\n }\r\n\r\n return values;\r\n };\r\n\r\n const deriveRequestParams = ({ values }) => {\r\n const newParams = Object.keys(values).reduce((acc, key) => {\r\n // Don't account for empty values\r\n if (getIsEmptyValue(values[key])) {\r\n return acc;\r\n }\r\n if (getIsSecondaryKey({ key })) {\r\n const secondaryDefIdx = getIndexFromSecondaryKey({ key });\r\n const secondaryDef = filterDef.secondary[secondaryDefIdx];\r\n\r\n if (secondaryDef.selectionType === 'unstable_dependentSelectGroup') {\r\n const groupDefKey = UNSTABLE_getGroupIndexFromDependentSelectGroupKey({ key });\r\n const groupDef = secondaryDef.group[groupDefKey];\r\n if (groupDef.disabled) {\r\n return acc;\r\n }\r\n acc[groupDef.requestParamKey] = values[key];\r\n return acc;\r\n }\r\n\r\n if (secondaryDef.selectionType === 'unstable_checkboxGroup') {\r\n const groupDefKey = UNSTABLE_getGroupIndexFromCheckboxGroupKey({ key });\r\n const groupDef = secondaryDef.group[groupDefKey];\r\n if (groupDef.disabled) {\r\n return acc;\r\n }\r\n acc[groupDef.requestParamKey] = values[key];\r\n return acc;\r\n }\r\n\r\n // Don't derive requestParams from disabled secondary filters\r\n if (secondaryDef.disabled) {\r\n return acc;\r\n }\r\n acc[secondaryDef.requestParamKey] = values[key];\r\n return acc;\r\n }\r\n // Don't derive requestParams from disabled text/alt filters\r\n if (filterDef[key].disabled) {\r\n return acc;\r\n }\r\n acc[filterDef[key].requestParamKey] = values[key];\r\n return acc;\r\n }, {});\r\n\r\n if (pageSearchParamKey && pageRequestParamKey && searchParams[pageSearchParamKey]) {\r\n newParams[pageRequestParamKey] = searchParams[pageSearchParamKey];\r\n }\r\n\r\n return newParams;\r\n };\r\n\r\n const deriveSearchParamsOnValuesChange = ({ values }) => {\r\n const mergedParams = {\r\n ...searchParams,\r\n\r\n // Here we take special care in handling \"dependent select groups\", making sure that we only propagate\r\n // values that pass the specified dependency condition.\r\n ...filterDef.secondary?.reduce((acc, secondaryDef, secondaryDefIdx) => {\r\n if (secondaryDef.selectionType !== 'unstable_dependentSelectGroup') {\r\n return acc;\r\n }\r\n const secondaryKey = deriveSecondaryKey({ idx: secondaryDefIdx });\r\n const groupValues = Object.keys(values)\r\n .filter(valKey => valKey.startsWith(`${secondaryKey}.`))\r\n .reduce(\r\n (groupValAcc, groupValKey) => ({\r\n ...groupValAcc,\r\n [groupValKey]: values[groupValKey]\r\n }),\r\n {}\r\n );\r\n\r\n const validSearchParamKeys = {};\r\n for (let i = 0; i < secondaryDef.group.length; i++) {\r\n const groupDef = secondaryDef.group[i];\r\n const groupDefKey = `${secondaryKey}.${i}`;\r\n\r\n // If the current values change doesn't include these keys, don't update them!\r\n if (!Object.hasOwn(values, groupDefKey)) {\r\n continue;\r\n }\r\n\r\n if (!groupDef.dependencyCondition || groupDef.dependencyCondition({ groupValues })) {\r\n validSearchParamKeys[groupDef.searchParamKey] = values[groupDefKey];\r\n } else if (!Object.hasOwn(validSearchParamKeys, groupDef.searchParamKey)) {\r\n validSearchParamKeys[groupDef.searchParamKey] =\r\n groupDef.selectionType === SELECTION_TYPES.multiSelect ? [] : '';\r\n }\r\n }\r\n\r\n return {\r\n ...acc,\r\n ...validSearchParamKeys\r\n };\r\n }, {}),\r\n\r\n ...Object.keys(values).reduce((acc, key) => {\r\n if (getIsSecondaryKey({ key })) {\r\n const secondaryDefIdx = getIndexFromSecondaryKey({ key });\r\n const secondaryDef = filterDef.secondary[secondaryDefIdx];\r\n\r\n // We already handled this above\r\n if (secondaryDef.selectionType === 'unstable_dependentSelectGroup') {\r\n return acc;\r\n }\r\n\r\n if (secondaryDef.selectionType === 'unstable_checkboxGroup') {\r\n const groupIdx = UNSTABLE_getGroupIndexFromCheckboxGroupKey({ key });\r\n const groupDef = secondaryDef.group[groupIdx];\r\n acc[groupDef.searchParamKey] = values[key] && 'true';\r\n return acc;\r\n }\r\n\r\n acc[secondaryDef.searchParamKey] = values[key];\r\n return acc;\r\n }\r\n\r\n acc[filterDef[key].searchParamKey] = values[key];\r\n return acc;\r\n }, {})\r\n };\r\n\r\n // Now delete any empty keys\r\n Object.keys(mergedParams).forEach(key => {\r\n if (getIsEmptyValue(mergedParams[key])) {\r\n delete mergedParams[key];\r\n }\r\n });\r\n\r\n // Find the changed param keys from the previous\r\n const changedParams = Array.from(\r\n new Set([...Object.keys(mergedParams), ...Object.keys(prevSearchParams.current)])\r\n ).reduce((acc, key) => {\r\n if (mergedParams[key] !== prevSearchParams.current[key]) {\r\n acc.push(key);\r\n }\r\n return acc;\r\n }, []);\r\n\r\n // If the primary key changed, reset all filters\r\n if (filterDef.primary && changedParams.includes(filterDef.primary.searchParamKey)) {\r\n // Check to see if the primaryKey actually has a value here (it's possible it 'changed' because it was reset to ''), and if so, return the custom object. Otherwise return empty\r\n return mergedParams[filterDef.primary.searchParamKey]\r\n ? { [filterDef.primary.searchParamKey]: mergedParams[filterDef.primary.searchParamKey] }\r\n : {};\r\n }\r\n\r\n // If anything other than 'page' changed, reset page\r\n if (pageSearchParamKey && changedParams.some(key => key !== pageSearchParamKey)) {\r\n delete mergedParams[pageSearchParamKey];\r\n }\r\n\r\n return mergedParams;\r\n };\r\n\r\n const values = deriveValues();\r\n\r\n return {\r\n values,\r\n requestParams: deriveRequestParams({ values }),\r\n deriveSearchParamsOnValuesChange\r\n };\r\n};\r\n\r\nexport default useParamTools;\r\n","import PropTypes from 'prop-types';\r\nimport cx from 'classnames';\r\n\r\nimport { Stack } from '@fieldlevel/playbook';\r\n\r\nimport TeamLogo from '@appCore/components/TeamLogo';\r\nimport WiredLink from '@appCore/components/WiredLink';\r\nimport { generateDeprecationNotice } from '@appCore/utility/consoleUtils';\r\nimport { IS_DEV_MODE } from '@appCore/constants/environment';\r\n\r\nconst ORIENTATION_TYPES = {\r\n horizontal: 'horizontal',\r\n vertical: 'vertical'\r\n};\r\n\r\nconst PRESENTATION_MODE_TYPES = {\r\n details: 'details',\r\n short: 'short'\r\n};\r\n\r\nconst defaultConfig = {\r\n orientation: ORIENTATION_TYPES.horizontal,\r\n showAthleticAssociation: true,\r\n showSportLabel: true,\r\n urlBuilder: null,\r\n generateTeamProfileLinkProps: null,\r\n teamProfileLinkProps: null,\r\n mode: PRESENTATION_MODE_TYPES.details,\r\n useHighSchoolDefaultLogo: true,\r\n lazyLoadLogo: false\r\n};\r\n\r\nconst TeamDetailsDisplay = ({ team, onClick, options, children }) => {\r\n const config = { ...defaultConfig, ...options };\r\n\r\n // Generate a deprecation notice for uppercase config settings\r\n if (['Short', 'Details'].includes(config.mode)) {\r\n if (IS_DEV_MODE) {\r\n generateDeprecationNotice({\r\n message: `TeamDetailsDisplay - usage of 'Short' or 'Details' for config.mode has been deprecated. Please use lowercase strings instead.`\r\n });\r\n }\r\n config.mode = config.mode.toLowerCase();\r\n }\r\n\r\n if (['Horizontal', 'Vertical'].includes(config.orientation)) {\r\n if (IS_DEV_MODE) {\r\n generateDeprecationNotice({\r\n message: `TeamDetailsDisplay - usage of 'Horizontal' or 'Vertical' for config.orientation has been deprecated. Please use lowercase strings instead.`\r\n });\r\n }\r\n config.orientation = config.orientation.toLowerCase();\r\n }\r\n\r\n if (IS_DEV_MODE && (config.urlBuilder || config.generateTeamProfileLinkProps)) {\r\n generateDeprecationNotice({\r\n message: `TeamDetailsDisplay - config.urlBuilder and config.generateTeamProfileLinkProps have been deprecated. Please use config.teamProfileLinkProps instead`\r\n });\r\n }\r\n\r\n const legacyUrlBuilderObj = config.urlBuilder && config.urlBuilder(team);\r\n const linkProps = config.teamProfileLinkProps || config.generateTeamProfileLinkProps?.(team);\r\n\r\n const TeamProfileLinkWrapper = (() => {\r\n if (legacyUrlBuilderObj?.href) {\r\n return props => (\r\n <WiredLink\r\n url={legacyUrlBuilderObj.href}\r\n target={legacyUrlBuilderObj.target}\r\n onClick={onClick}\r\n {...props}\r\n />\r\n );\r\n }\r\n if (linkProps) {\r\n return props => <WiredLink {...linkProps} {...props} />;\r\n }\r\n return props => <>{props.children}</>;\r\n })();\r\n\r\n const showAthleticAssociation = config.showAthleticAssociation && team.AthleticAssociationEnum;\r\n const showSport = team.SportEnum.Id != 0 && config.showSportLabel;\r\n const logoSize = config.mode === PRESENTATION_MODE_TYPES.short ? 'base' : 'large';\r\n const breakCache = config.breakCache || false;\r\n\r\n return (\r\n <Stack noWrap align=\"center\" vertical={config.orientation === ORIENTATION_TYPES.vertical}>\r\n <Stack.Item>\r\n <div className=\"relative flex flex-col items-center\">\r\n <div className=\"flex-none\">\r\n <TeamProfileLinkWrapper unstyled>\r\n <TeamLogo\r\n shortName={team.ShortName || ''}\r\n sportEnum={team.SportEnum.Value}\r\n size={logoSize}\r\n teamId={team.TeamId}\r\n breakCache={breakCache}\r\n isPremium={team.IsPremium}\r\n organizationName={team.OrganizationName}\r\n useHighSchoolDefaultLogo={config.useHighSchoolDefaultLogo}\r\n lazy={config.lazyLoadLogo}\r\n />\r\n </TeamProfileLinkWrapper>\r\n </div>\r\n </div>\r\n </Stack.Item>\r\n <Stack.Item fill>\r\n <div className={cx(config.orientation === ORIENTATION_TYPES.vertical && 'text-center')}>\r\n <div className=\"font-bold text-body-lg text-base\">\r\n <TeamProfileLinkWrapper>\r\n {team.OrganizationName} {team.TeamName}\r\n </TeamProfileLinkWrapper>\r\n </div>\r\n {(showAthleticAssociation || showSport) && (\r\n <div className=\"text-body-sm text-base\">\r\n {showAthleticAssociation && <>{team.AthleticAssociationEnum.Label}</>}\r\n {showAthleticAssociation && showSport && <> - </>}\r\n {showSport && team.SportEnum.Label}\r\n </div>\r\n )}\r\n\r\n {config.mode !== PRESENTATION_MODE_TYPES.short && (\r\n <>\r\n {children}\r\n {!children && (\r\n <div className=\"text-body-sm text-muted\">\r\n {team.City}, {team.State}\r\n </div>\r\n )}\r\n </>\r\n )}\r\n </div>\r\n </Stack.Item>\r\n </Stack>\r\n );\r\n};\r\n\r\nexport const TeamDetailsProps = {\r\n team: PropTypes.shape({\r\n OrganizationName: PropTypes.string.isRequired,\r\n SportEnum: PropTypes.object.isRequired,\r\n ShortName: PropTypes.string,\r\n AthleticAssociationEnum: PropTypes.object,\r\n City: PropTypes.string,\r\n State: PropTypes.string,\r\n TeamId: PropTypes.number\r\n }).isRequired,\r\n options: PropTypes.shape({\r\n showAthleticAssociation: PropTypes.bool,\r\n showSportLabel: PropTypes.bool,\r\n orientation: PropTypes.oneOf(['Horizontal', 'Vertical', ...Object.values(ORIENTATION_TYPES)]),\r\n urlBuilder: PropTypes.func,\r\n generateTeamProfileLinkProps: PropTypes.func,\r\n teamProfileLinkProps: PropTypes.exact(WiredLink.propTypes),\r\n mode: PropTypes.oneOf(['Details', 'Short', ...Object.values(PRESENTATION_MODE_TYPES)]),\r\n breakCache: PropTypes.bool,\r\n useHighSchoolDefaultLogo: PropTypes.bool,\r\n lazyLoadLogo: PropTypes.bool\r\n }),\r\n onClick: PropTypes.func,\r\n children: PropTypes.node\r\n};\r\n\r\nTeamDetailsDisplay.propTypes = TeamDetailsProps;\r\n\r\nexport default TeamDetailsDisplay;\r\n","import { useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { Logo } from '@fieldlevel/playbook';\r\n\r\nimport { getSport } from '@appCore/utility/apiUtils';\r\nimport { generateDeprecationNotice } from '@appCore/utility/consoleUtils';\r\nimport imageSrcManager from '@appCore/services/imageSrcManager';\r\nimport { ENUM_SPORT } from '@appCore/constants/system';\r\nimport PrimeBadgeIcon from '@appCore/icons/PrimeBadgeIcon';\r\nimport DefaultLogo from '@appCore/components/DefaultLogo';\r\n\r\nconst Sizes = {\r\n small: 32,\r\n base: 40,\r\n large: 60\r\n};\r\n\r\nconst getSizeInPixels = size => {\r\n return Sizes[size];\r\n};\r\n\r\nconst TeamLogo = ({\r\n shortName,\r\n sportEnum,\r\n organizationName,\r\n size = 'base',\r\n breakCache,\r\n isBlurred,\r\n teamId,\r\n lazy,\r\n isPremium,\r\n useHighSchoolDefaultLogo\r\n}) => {\r\n const sizeLowercase = size?.toLowerCase();\r\n\r\n // Generate deprecation notice for uppercase strings\r\n useEffect(() => {\r\n if (size !== sizeLowercase) {\r\n generateDeprecationNotice({\r\n message: `TeamLogo - The usage of '${size}' for props.size has been deprecated. Please use lowercase strings instead.`\r\n });\r\n }\r\n }, [size, sizeLowercase]);\r\n\r\n let sportName = sportEnum;\r\n\r\n if (typeof sportEnum === 'number') {\r\n sportName = getSport(sportEnum, ENUM_SPORT);\r\n }\r\n\r\n const logoSrc =\r\n shortName &&\r\n (() => {\r\n const size1x = getSizeInPixels(sizeLowercase);\r\n const src1x = imageSrcManager.getTeamLogoSrc({\r\n shortName,\r\n sportEnum: sportName,\r\n size: size1x,\r\n breakCache,\r\n isBlurred,\r\n teamId\r\n });\r\n const size2x = size1x * 2;\r\n const src2x = imageSrcManager.getTeamLogoSrc({\r\n shortName,\r\n sportEnum: sportName,\r\n size: size2x,\r\n breakCache,\r\n isBlurred,\r\n teamId\r\n });\r\n return {\r\n source: src2x,\r\n sourceSet: `${src1x} 1x, ${src2x} 2x`\r\n };\r\n })();\r\n\r\n return (\r\n <div className=\"relative flex justify-center\">\r\n {logoSrc ? (\r\n <>\r\n <Logo\r\n size={sizeLowercase}\r\n alt={organizationName}\r\n source={logoSrc.source}\r\n sourceSet={logoSrc.sourceSet}\r\n lazy={lazy}\r\n />\r\n {isPremium && (\r\n <span className=\"absolute bottom-[-10px] flex items-center max-w-full\">\r\n <PrimeBadgeIcon size={sizeLowercase} />\r\n </span>\r\n )}\r\n </>\r\n ) : (\r\n <DefaultLogo\r\n useHighSchool={useHighSchoolDefaultLogo}\r\n size={sizeLowercase}\r\n organizationName={organizationName}\r\n lazy={lazy}\r\n />\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nTeamLogo.propTypes = {\r\n shortName: PropTypes.string,\r\n sportEnum: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\r\n teamId: PropTypes.number,\r\n organizationName: PropTypes.string,\r\n size: PropTypes.oneOf([...Object.keys(Sizes), 'Small', 'Base', 'Large']),\r\n breakCache: PropTypes.bool,\r\n isBlurred: PropTypes.bool,\r\n lazy: PropTypes.bool,\r\n isPremium: PropTypes.bool,\r\n useHighSchoolDefaultLogo: PropTypes.bool\r\n};\r\n\r\nexport default TeamLogo;\r\n","// This null;\r\nexport const ImageHostOverride = null;\r\n\r\nexport const IS_DEV_MODE = process.env.NODE_ENV === 'development';\r\n// All of our non-production environments contain a subdomain with a \"-\", eg: www-dev, www-integration, etc\r\nexport const IS_PRODUCTION = () => window.location.hostname.indexOf('-') === -1;\r\n","import { getSystemConstantFromWindow } from '@common/utils';\r\n\r\nexport const ENUM_ATHLETE_PLAN = getSystemConstantFromWindow('ENUM_ATHLETE_PLAN');\r\nexport const ENUM_ATHLETE_PROFILE_ACTIVITY_TYPE = getSystemConstantFromWindow('ENUM_ATHLETE_PROFILE_ACTIVITY_TYPE');\r\nexport const ENUM_ATHLETIC_ASSOCIATION = getSystemConstantFromWindow('ENUM_ATHLETIC_ASSOCIATION');\r\nexport const ENUM_COMMITMENT_LEVEL = getSystemConstantFromWindow('ENUM_COMMITMENT_LEVEL');\r\nexport const ENUM_INSTITUTION_OF_INTEREST_STATUS = getSystemConstantFromWindow('ENUM_INSTITUTION_OF_INTEREST_STATUS');\r\nexport const ENUM_SCHOOL_TYPE = getSystemConstantFromWindow('ENUM_SCHOOL_TYPE');\r\nexport const ENUM_SPORT = getSystemConstantFromWindow('ENUM_SPORT');\r\nexport const ENUM_UTM_MEDIUM = getSystemConstantFromWindow('ENUM_UTM_MEDIUM');\r\nexport const INTERCOM_APPID = getSystemConstantFromWindow('INTERCOM_APPID');\r\nexport const WWW_URL = getSystemConstantFromWindow('WWW_URL');\r\n\r\nexport const FACEBOOK_APP_ID = '362899207119772';\r\nexport const DEFAULT_TEAM_LOGO_URL_HS = '/assets/images/icon-hs-300x300.png';\r\nexport const DEFAULT_TEAM_LOGO_URL_COLLEGE = '/assets/images/icon-college-300x300.png';\r\n\r\nexport const METRICS_ENABLED_LIST = [\r\n 512, 1024, 1, 2, 8192, 16384, 16, 32, 256, 32768, 65536, 33554432, 131072, 262144, 268435456, 536870912, 8388608,\r\n 16777216, 64, 128, 4, 8, 524288, 1048576, 2048, 4096, 67108864, 134217728, 536870914, 536870913, 536870916,\r\n 536870915, 536870918, 536870917, 2097152, 4194304, 536870925, 536870926, 536870927, 536870919, 536870920, 536870923,\r\n 536870924, 536870928, 536870929, 536870930, 536870931\r\n];\r\n","import PropTypes from 'prop-types';\r\n\r\nconst PrimeBadgeIcon = ({ size = 'base' }) => {\r\n const uniqueGradientId = `gradient_${Math.round(Math.random() * 100000)}`;\r\n return (\r\n <>\r\n {size === 'small' && (\r\n <svg width=\"32\" height=\"10\" viewBox=\"0 0 32 10\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect width=\"32\" height=\"10\" rx=\"2\" fill={`url(#${uniqueGradientId})`} />\r\n <path\r\n d=\"M7.80762 5.88916V5.19775H8.8916C9.14551 5.19775 9.34277 5.1333 9.4834 5.00439C9.62598 4.87354 9.69727 4.68799 9.69727 4.44775V4.44189C9.69727 4.20166 9.62598 4.01709 9.4834 3.88818C9.34277 3.75928 9.14551 3.69482 8.8916 3.69482H7.80762V2.99463H9.1084C9.40527 2.99463 9.66504 3.05518 9.8877 3.17627C10.1104 3.29541 10.2832 3.46338 10.4062 3.68018C10.5312 3.89697 10.5938 4.1499 10.5938 4.43896V4.44482C10.5938 4.73584 10.5312 4.98975 10.4062 5.20654C10.2832 5.42334 10.1104 5.59131 9.8877 5.71045C9.66504 5.82959 9.40527 5.88916 9.1084 5.88916H7.80762ZM7.36523 7.22217V2.99463H8.25V7.22217H7.36523ZM11.4082 7.22217V2.99463H13.1689C13.4893 2.99463 13.7617 3.04932 13.9863 3.15869C14.2129 3.26611 14.3848 3.42041 14.502 3.62158C14.6211 3.82275 14.6807 4.06201 14.6807 4.33936V4.34521C14.6807 4.6167 14.6133 4.86084 14.4785 5.07764C14.3457 5.29248 14.1582 5.44775 13.916 5.54346L14.8066 7.22217H13.8047L13.0166 5.67529C13.0107 5.67529 13.0039 5.67529 12.9961 5.67529C12.9883 5.67529 12.9814 5.67529 12.9756 5.67529H12.293V7.22217H11.4082ZM12.293 5.03076H13.0723C13.293 5.03076 13.4648 4.97217 13.5879 4.85498C13.7129 4.73584 13.7754 4.57178 13.7754 4.36279V4.35693C13.7754 4.15186 13.7119 3.98877 13.585 3.86768C13.458 3.74658 13.2832 3.68604 13.0605 3.68604H12.293V5.03076ZM15.5742 7.22217V2.99463H16.459V7.22217H15.5742ZM17.4844 7.22217V2.99463H18.498L19.667 6.08838H19.7197L20.8857 2.99463H21.8994V7.22217H21.1113V4.34521H20.6748L21.5186 3.11182L19.9688 7.22217H19.415L17.8682 3.11182L18.709 4.34521H18.2725V7.22217H17.4844ZM22.9277 7.22217V2.99463H25.7285V3.72412H23.8125V4.74365H25.6201V5.42334H23.8125V6.49268H25.7285V7.22217H22.9277Z\"\r\n fill=\"white\"\r\n />\r\n <defs>\r\n <linearGradient\r\n id={uniqueGradientId}\r\n x1=\"16\"\r\n y1=\"0\"\r\n x2=\"16\"\r\n y2=\"10\"\r\n gradientUnits=\"userSpaceOnUse\"\r\n >\r\n <stop stopColor=\"#DAC785\" />\r\n <stop offset=\"1\" stopColor=\"#B39A4C\" />\r\n </linearGradient>\r\n </defs>\r\n </svg>\r\n )}\r\n {size === 'base' && (\r\n <svg width=\"40\" height=\"12\" viewBox=\"0 0 40 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect width=\"40\" height=\"12\" rx=\"4\" fill={`url(#${uniqueGradientId})`} />\r\n <path\r\n d=\"M10.3589 6.94482V6.13818H11.6235C11.9198 6.13818 12.1499 6.06299 12.314 5.9126C12.4803 5.75993 12.5635 5.54346 12.5635 5.26318V5.25635C12.5635 4.97607 12.4803 4.76074 12.314 4.61035C12.1499 4.45996 11.9198 4.38477 11.6235 4.38477H10.3589V3.56787H11.8765C12.2228 3.56787 12.5259 3.63851 12.7856 3.77979C13.0454 3.91878 13.2471 4.11475 13.3906 4.36768C13.5365 4.62061 13.6094 4.91569 13.6094 5.25293V5.25977C13.6094 5.59928 13.5365 5.89551 13.3906 6.14844C13.2471 6.40137 13.0454 6.59733 12.7856 6.73633C12.5259 6.87533 12.2228 6.94482 11.8765 6.94482H10.3589ZM9.84277 8.5V3.56787H10.875V8.5H9.84277ZM14.5596 8.5V3.56787H16.6138C16.9875 3.56787 17.3053 3.63167 17.5674 3.75928C17.8317 3.8846 18.0322 4.06462 18.1689 4.29932C18.3079 4.53402 18.3774 4.81315 18.3774 5.13672V5.14355C18.3774 5.46029 18.2988 5.74512 18.1416 5.99805C17.9867 6.2487 17.7679 6.42985 17.4854 6.5415L18.5244 8.5H17.3555L16.436 6.69531C16.4292 6.69531 16.4212 6.69531 16.4121 6.69531C16.403 6.69531 16.395 6.69531 16.3882 6.69531H15.5918V8.5H14.5596ZM15.5918 5.94336H16.501C16.7585 5.94336 16.959 5.875 17.1025 5.73828C17.2484 5.59928 17.3213 5.40788 17.3213 5.16406V5.15723C17.3213 4.91797 17.2472 4.7277 17.0991 4.58643C16.951 4.44515 16.7471 4.37451 16.4873 4.37451H15.5918V5.94336ZM19.4199 8.5V3.56787H20.4521V8.5H19.4199ZM21.6484 8.5V3.56787H22.8311L24.1948 7.17725H24.2563L25.6167 3.56787H26.7993V8.5H25.8799V5.14355H25.3706L26.355 3.70459L24.5469 8.5H23.9009L22.0962 3.70459L23.0771 5.14355H22.5679V8.5H21.6484ZM27.999 8.5V3.56787H31.2666V4.41895H29.0312V5.6084H31.1401V6.40137H29.0312V7.64893H31.2666V8.5H27.999Z\"\r\n fill=\"white\"\r\n />\r\n <defs>\r\n <linearGradient\r\n id={uniqueGradientId}\r\n x1=\"20\"\r\n y1=\"0\"\r\n x2=\"20\"\r\n y2=\"12\"\r\n gradientUnits=\"userSpaceOnUse\"\r\n >\r\n <stop stopColor=\"#DAC785\" />\r\n <stop offset=\"1\" stopColor=\"#B79F50\" />\r\n </linearGradient>\r\n </defs>\r\n </svg>\r\n )}\r\n {size === 'large' && (\r\n <svg width=\"60\" height=\"16\" viewBox=\"0 0 60 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect width=\"60\" height=\"16\" rx=\"4\" fill={`url(#${uniqueGradientId})`} />\r\n <path\r\n fillRule=\"evenodd\"\r\n clipRule=\"evenodd\"\r\n d=\"M15.0021 7.55306L13.0783 4.19918L16.9497 4.19828L18.8573 7.54466L18.8584 7.54466L18.8578 7.54558L18.8586 7.547L18.857 7.54701L16.9587 10.9009L13.0923 10.917L15.0022 7.55306L15.0021 7.55306Z\"\r\n fill=\"#C3AA59\"\r\n />\r\n <path\r\n fillRule=\"evenodd\"\r\n clipRule=\"evenodd\"\r\n d=\"M13.0783 4.19918L15.0021 7.55306L18.8586 7.547L16.9497 4.19828L13.0783 4.19918Z\"\r\n fill=\"#DAC785\"\r\n />\r\n <path\r\n d=\"M16.8169 3.93677H12.9023L14.8596 7.4599L12.9023 10.7873H17.0127L18.97 7.4599L16.8169 3.93677Z\"\r\n stroke=\"white\"\r\n />\r\n <path\r\n d=\"M25.0996 8.89282V7.97095H26.5449C26.8835 7.97095 27.1465 7.88501 27.334 7.71313C27.5241 7.53866 27.6191 7.29126 27.6191 6.97095V6.96313C27.6191 6.64282 27.5241 6.39673 27.334 6.22485C27.1465 6.05298 26.8835 5.96704 26.5449 5.96704H25.0996V5.03345H26.834C27.2298 5.03345 27.5762 5.11418 27.873 5.27563C28.1699 5.43449 28.4004 5.65845 28.5645 5.94751C28.7311 6.23657 28.8145 6.57381 28.8145 6.95923V6.96704C28.8145 7.35506 28.7311 7.6936 28.5645 7.98267C28.4004 8.27173 28.1699 8.49569 27.873 8.65454C27.5762 8.8134 27.2298 8.89282 26.834 8.89282H25.0996ZM24.5098 10.6702V5.03345H25.6895V10.6702H24.5098ZM29.9004 10.6702V5.03345H32.248C32.6751 5.03345 33.0384 5.10636 33.3379 5.2522C33.64 5.39543 33.8691 5.60116 34.0254 5.86938C34.1842 6.13761 34.2637 6.45662 34.2637 6.82642V6.83423C34.2637 7.19621 34.1738 7.52173 33.9941 7.81079C33.8171 8.09725 33.5671 8.30428 33.2441 8.43188L34.4316 10.6702H33.0957L32.0449 8.60767C32.0371 8.60767 32.028 8.60767 32.0176 8.60767C32.0072 8.60767 31.998 8.60767 31.9902 8.60767H31.0801V10.6702H29.9004ZM31.0801 7.74829H32.1191C32.4134 7.74829 32.6426 7.67017 32.8066 7.51392C32.9733 7.35506 33.0566 7.13631 33.0566 6.85767V6.84985C33.0566 6.57642 32.972 6.35897 32.8027 6.19751C32.6335 6.03605 32.4004 5.95532 32.1035 5.95532H31.0801V7.74829ZM35.4551 10.6702V5.03345H36.6348V10.6702H35.4551ZM38.002 10.6702V5.03345H39.3535L40.9121 9.15845H40.9824L42.5371 5.03345H43.8887V10.6702H42.8379V6.83423H42.2559L43.3809 5.1897L41.3145 10.6702H40.5762L38.5137 5.1897L39.6348 6.83423H39.0527V10.6702H38.002ZM45.2598 10.6702V5.03345H48.9941V6.0061H46.4395V7.36548H48.8496V8.27173H46.4395V9.69751H48.9941V10.6702H45.2598Z\"\r\n fill=\"white\"\r\n />\r\n <defs>\r\n <linearGradient\r\n id={uniqueGradientId}\r\n x1=\"30\"\r\n y1=\"0\"\r\n x2=\"30\"\r\n y2=\"16\"\r\n gradientUnits=\"userSpaceOnUse\"\r\n >\r\n <stop stopColor=\"#DAC785\" />\r\n <stop offset=\"1\" stopColor=\"#AA944C\" />\r\n </linearGradient>\r\n </defs>\r\n </svg>\r\n )}\r\n </>\r\n );\r\n};\r\n\r\nPrimeBadgeIcon.propTypes = {\r\n size: PropTypes.oneOf(['small', 'base', 'large'])\r\n};\r\n\r\nexport default PrimeBadgeIcon;\r\n","import { ENUM_SPORT, ENUM_ATHLETIC_ASSOCIATION, ENUM_COMMITMENT_LEVEL } from '@appCore/constants/system';\r\nimport lookupEnumLabel from '@appCore/utility/lookupEnumLabel';\r\n\r\nfunction isString(value) {\r\n return typeof value === 'string' || value instanceof String;\r\n}\r\n\r\nfunction isNumber(value) {\r\n return typeof value === 'number' && isFinite(value);\r\n}\r\n\r\nfunction isUndefined(value) {\r\n return typeof value === 'undefined';\r\n}\r\n\r\nconst enumHelper = {\r\n toSportEnum: function (value) {\r\n let sport = null;\r\n if (isNumber(value)) {\r\n sport = ENUM_SPORT.filter(function (item) {\r\n return item.Value === value;\r\n })[0];\r\n }\r\n if (isString(value)) {\r\n sport = ENUM_SPORT.filter(function (item) {\r\n return item.EnumName.toLowerCase() === value.toLowerCase();\r\n })[0];\r\n }\r\n if (isUndefined(sport)) {\r\n sport = null;\r\n }\r\n\r\n return sport;\r\n },\r\n toAthleticAssociationEnum: function (value) {\r\n let athleticAssociation = null;\r\n if (isNumber(value)) {\r\n athleticAssociation = ENUM_ATHLETIC_ASSOCIATION.filter(function (item) {\r\n return item.Value === value;\r\n })[0];\r\n }\r\n if (isString(value)) {\r\n athleticAssociation = ENUM_ATHLETIC_ASSOCIATION.filter(function (item) {\r\n return item.EnumName.toLowerCase() === value.toLowerCase();\r\n })[0];\r\n }\r\n if (isUndefined(athleticAssociation)) {\r\n athleticAssociation = null;\r\n }\r\n\r\n return athleticAssociation;\r\n },\r\n toCommitmentLevelEnum: function (value) {\r\n let commitmentLevel = null;\r\n if (isNumber(value)) {\r\n commitmentLevel = ENUM_COMMITMENT_LEVEL.filter(function (item) {\r\n return item.Value === value;\r\n })[0];\r\n }\r\n if (isString(value)) {\r\n commitmentLevel = ENUM_COMMITMENT_LEVEL.filter(function (item) {\r\n return item.EnumName.toLowerCase() === value.toLowerCase();\r\n })[0];\r\n }\r\n if (isUndefined(commitmentLevel)) {\r\n commitmentLevel = null;\r\n }\r\n\r\n return commitmentLevel;\r\n },\r\n enumIntToName: function (intVal, enumStructure) {\r\n if (Number.isInteger(+intVal)) {\r\n for (let i in enumStructure) {\r\n if (\r\n enumStructure.hasOwnProperty(i) &&\r\n enumStructure[i].hasOwnProperty('Value') &&\r\n enumStructure[i].Value === intVal\r\n ) {\r\n return enumStructure[i].EnumName;\r\n }\r\n }\r\n }\r\n\r\n return intVal;\r\n },\r\n toEnumViewModel: function (enumValue) {\r\n return {\r\n Label: enumValue.Label,\r\n Value: enumValue.EnumName,\r\n Id: enumValue.Value\r\n };\r\n },\r\n toEnumLabel: function (enumValue, enumType) {\r\n return lookupEnumLabel(enumValue, enumType);\r\n }\r\n};\r\n\r\nexport default enumHelper;\r\n","import { http } from './http';\r\n\r\nexport default http;\r\n","import { createCacheString } from '@appCore/utility/cachingUtils';\r\nimport { createSimplePubSub } from '@appCore/utility/pubSubUtils';\r\n\r\nlet cacheString = createCacheString();\r\nconst pubSub = createSimplePubSub();\r\n\r\nconst teamLogoCache = {\r\n resetCacheString: teamId => {\r\n cacheString = createCacheString();\r\n pubSub.publish({ teamId });\r\n },\r\n getCacheString: () => {\r\n return cacheString;\r\n },\r\n subscribe: pubSub.subscribe\r\n};\r\n\r\nexport default teamLogoCache;\r\n","import { createCacheString } from '@appCore/utility/cachingUtils';\r\nimport { createSimplePubSub } from '@appCore/utility/pubSubUtils';\r\n\r\nlet cacheString = createCacheString();\r\nconst pubSub = createSimplePubSub();\r\n\r\nconst orgLogoCache = {\r\n resetCacheString: shortName => {\r\n cacheString = createCacheString();\r\n pubSub.publish({ shortName });\r\n },\r\n getCacheString: () => {\r\n return cacheString;\r\n },\r\n subscribe: pubSub.subscribe\r\n};\r\n\r\nexport default orgLogoCache;\r\n","// Set a value in localStorage with a given key and time-to-live in seconds\r\nexport const set = (keyName, keyValue, ttl) => {\r\n const data = {\r\n value: keyValue,\r\n ttl: Date.now() + ttl * 1000\r\n };\r\n localStorage.setItem(keyName, JSON.stringify(data));\r\n};\r\n\r\n// Get a value from localStorage with the given key, or null if the time-to-live has exceeded\r\nexport const get = keyName => {\r\n const data = localStorage.getItem(keyName);\r\n if (!data) {\r\n return null;\r\n }\r\n\r\n const item = JSON.parse(data);\r\n\r\n if (item.ttl && Date.now() > item.ttl) {\r\n localStorage.removeItem(keyName);\r\n return null;\r\n }\r\n\r\n return item.value;\r\n};\r\n","import * as Storage from '@common/storage';\r\n\r\nimport { createSimplePubSub } from '@appCore/utility/pubSubUtils';\r\n\r\nconst KEY_PREFIX = 'athlete_headshot_';\r\nconst CACHE_TTL = 600;\r\n\r\nconst getStorageKeyName = username => {\r\n return `${KEY_PREFIX}${username.toLowerCase()}`;\r\n};\r\n\r\nconst pubSub = createSimplePubSub();\r\n\r\nconst athleteHeadshotCache = {\r\n setCachedImageGuid: (username, imageGuid) => {\r\n const keyName = getStorageKeyName(username);\r\n Storage.set(keyName, imageGuid, CACHE_TTL);\r\n pubSub.publish({ username });\r\n },\r\n getCachedImageGuid: username => {\r\n const keyName = getStorageKeyName(username);\r\n return Storage.get(keyName);\r\n },\r\n subscribe: pubSub.subscribe\r\n};\r\n\r\nexport default athleteHeadshotCache;\r\n","import * as Storage from '@common/storage';\r\n\r\nimport { createSimplePubSub } from '@appCore/utility/pubSubUtils';\r\n\r\nconst KEY_PREFIX = 'user_headshot_';\r\nconst CACHE_TTL = 600;\r\n\r\nconst getStorageKeyName = userGuid => {\r\n return `${KEY_PREFIX}${userGuid}`;\r\n};\r\n\r\nconst pubSub = createSimplePubSub();\r\n\r\nconst userHeadshotCache = {\r\n setCachedImageGuid: (userGuid, imageGuid) => {\r\n const keyName = getStorageKeyName(userGuid);\r\n Storage.set(keyName, imageGuid, CACHE_TTL);\r\n pubSub.publish(userGuid);\r\n },\r\n getCachedImageGuid: userGuid => {\r\n const keyName = getStorageKeyName(userGuid);\r\n return Storage.get(keyName);\r\n },\r\n subscribe: pubSub.subscribe\r\n};\r\n\r\nexport default userHeadshotCache;\r\n","import teamLogoCache from '@appCore/services/teamLogoCache';\r\nimport orgLogoCache from '@appCore/services/orgLogoCache';\r\nimport athleteHeadshotCache from '@appCore/services/athleteHeadshotCache';\r\nimport userHeadshotCache from '@appCore/services/userHeadshotCache';\r\nimport { getSport } from '@appCore/utility/apiUtils';\r\nimport * as Environment from '@appCore/constants/environment';\r\nimport { ENUM_SPORT } from '@appCore/constants/system';\r\n\r\n// This array contains all the known headshot image variant sizes that Cloudflare will generate. Using a size outside of this list will\r\n// result in errors in certain cases, so talk to the Platform team if you need to add a new variant size.\r\nconst HEADSHOT_SIZES = [2, 64, 80, 90, 100, 120, 144, 200, 256, 650];\r\n\r\n// This array contains all the known dynamic image sizes for team logos. Our process for purging the CDN cache when a dynamic image changes\r\n// currently relies on knowing all of the sizes of images that the client can request. If you add a new image size here, be sure to also\r\n// update the PurgeCloudflareLogoImageCacheJob in the API project as well.\r\nconst LOGO_SIZES = [6, 12, 32, 40, 60, 64, 80, 120, 140, 200, 248, 256, 350];\r\n\r\nconst CF_BASE_URL = 'https://imagedelivery.net/R3XOqFcTepHxP5M00fjeUw';\r\nconst CF_PLACEHOLDER_GUID = 'b855ca4d-53cd-4a96-4981-ff065ac69200';\r\nconst IMAGE_BASE_URL = Environment.ImageHostOverride || '';\r\nconst WEBAPI_PATH = 'webapi/v2';\r\n\r\nconst checkHeadshotSize = size => {\r\n if (!HEADSHOT_SIZES.includes(size)) {\r\n throw new Error('Unknown headshot variant size requested. See ImageUtils for acceptable sizes.');\r\n }\r\n};\r\n\r\nconst checkLogoSize = size => {\r\n if (!LOGO_SIZES.includes(size)) {\r\n console.warn(\r\n \"WARNING: ImageUtils is returning an image size that isn't in the list of known dynamic image sizes. This is a problem due to how we do cache invalidation for user-provided image content. Please review the comment block in the ImageUtils module and make the appropriate changes.\"\r\n );\r\n }\r\n};\r\n\r\nexport const makeImageSrcManager = ({ athleteHeadshotCache, userHeadshotCache }) => {\r\n const getUserHeadshotSrc = ({ guid, componentSize }) => {\r\n const cachedImageGuid = userHeadshotCache.getCachedImageGuid(guid);\r\n const imgSize = componentSize * 2;\r\n const imgName = `img${imgSize}`;\r\n\r\n const imgSrc = cachedImageGuid\r\n ? `${CF_BASE_URL}/${cachedImageGuid}/${imgName}`\r\n : `${IMAGE_BASE_URL}/${WEBAPI_PATH}/Images/GetHeadshot?UserGuid=${guid}&Width=${imgSize}`;\r\n\r\n checkHeadshotSize(imgSize);\r\n\r\n return imgSrc;\r\n };\r\n\r\n const getAthleteHeadshotSrc = ({ username, componentSize, isAnonymous = false }) => {\r\n const imgSize = componentSize * 2;\r\n const imgName = `img${imgSize}`;\r\n\r\n const placeholderSrc = `${CF_BASE_URL}/${CF_PLACEHOLDER_GUID}/${imgName}`;\r\n\r\n checkHeadshotSize(imgSize);\r\n\r\n if (isAnonymous) {\r\n return placeholderSrc;\r\n } else {\r\n const cachedImageGuid = athleteHeadshotCache.getCachedImageGuid(username);\r\n return cachedImageGuid\r\n ? `${CF_BASE_URL}/${cachedImageGuid}/${imgName}`\r\n : `${IMAGE_BASE_URL}/${WEBAPI_PATH}/LegacyImages/Headshot?Username=${username}&Width=${imgSize}`;\r\n }\r\n };\r\n\r\n const getOrgLogoSrc = ({ shortName, size, isBlurred, breakCache }) => {\r\n const blurredUrl = `${IMAGE_BASE_URL}/teamcontact/${shortName}/none/blurredsporticon`;\r\n const logoUrl = `${IMAGE_BASE_URL}/media/orglogo?shortname=${shortName}&width=${size}&height=${size}`;\r\n const url = isBlurred ? blurredUrl : logoUrl;\r\n const cacheBuster = breakCache ? `&r=${orgLogoCache.getCacheString()}` : '';\r\n const logoSrc = url + cacheBuster;\r\n checkLogoSize(size);\r\n\r\n return logoSrc.toLowerCase();\r\n };\r\n\r\n const getTeamLogoSrc = ({ shortName, sportEnum, size, breakCache, isBlurred, teamId }) => {\r\n const short = shortName || '';\r\n const team = teamId || 0;\r\n const normalizedSport = Number.isInteger(sportEnum) ? getSport(sportEnum, ENUM_SPORT) : sportEnum;\r\n const sport = normalizedSport || 'baseball';\r\n\r\n const blurredUrl = `${IMAGE_BASE_URL}/teamcontact/${short}/${sport}/blurredsporticon?teamid=${team}`;\r\n const logoUrl = `${IMAGE_BASE_URL}/media/teamlogo?shortname=${short}&sportenum=${sport}&width=${size}&height=${size}&teamid=${team}`;\r\n const url = isBlurred ? blurredUrl : logoUrl;\r\n const cacheBuster = breakCache ? `&r=${teamLogoCache.getCacheString()}` : '';\r\n const logoSrc = url + cacheBuster;\r\n\r\n checkLogoSize(size);\r\n\r\n return logoSrc.toLowerCase();\r\n };\r\n\r\n return {\r\n updateAthleteHeadshotCache: ({ username, imageGuid }) =>\r\n athleteHeadshotCache.setCachedImageGuid(username, imageGuid),\r\n subscribeToAthleteHeadshotCache: athleteHeadshotCache.subscribe,\r\n\r\n updateUserHeadshotCache: ({ userGuid, imageGuid }) => userHeadshotCache.setCachedImageGuid(userGuid, imageGuid),\r\n subscribeToUserHeadshotCache: userHeadshotCache.subscribe,\r\n\r\n updateOrgLogoCache: ({ shortName }) => orgLogoCache.resetCacheString(shortName),\r\n subscribeToOrgLogoCache: orgLogoCache.subscribe,\r\n\r\n updateTeamLogoCache: ({ teamId }) => teamLogoCache.resetCacheString(teamId),\r\n subscribeToTeamLogoCache: teamLogoCache.subscribe,\r\n\r\n getUserHeadshotSrc,\r\n getAthleteHeadshotSrc,\r\n getOrgLogoSrc,\r\n getTeamLogoSrc\r\n };\r\n};\r\n\r\nconst imageSrcManager = makeImageSrcManager({ athleteHeadshotCache, userHeadshotCache });\r\nexport default imageSrcManager;\r\n","import _ from 'lodash';\r\n\r\nimport { reportError } from '@appCore/services/logger';\r\n\r\n// converts LabelValuePair arrays that are returned from our Apis\r\n// to lowercased properties that our Playbook components expect.\r\n// e.g. { Label: 'Pitcher', Value: 1 } => { label: 'Pitcher', value: 1 }\r\nfunction convertOptionsCase(options) {\r\n return options.map(option => {\r\n const convertedOption = {};\r\n\r\n Object.keys(option).map(key => {\r\n convertedOption[_.camelCase(key)] = option[key];\r\n });\r\n\r\n return convertedOption;\r\n });\r\n}\r\n\r\n// recently converted the endpoint that provides data\r\n// to the AthleteVideoCard to a component builder. the data\r\n// structure is slightly different so we're using this adapter to\r\n// modify the data to the old shape until the For You Feed and Category\r\n// apis are converted to the component builder\r\nconst athleteVideoCardAdapter = videoData => {\r\n if (!videoData.Athlete.AthleteComponent) {\r\n return videoData;\r\n }\r\n\r\n const athlete = videoData.Athlete.AthleteComponent;\r\n\r\n const data = {\r\n Athlete: {\r\n ...athlete,\r\n CommitmentLevel: athlete.CommitmentLevelEnum.Id,\r\n SportEnum: videoData.SportEnum.Value\r\n },\r\n AthleteCertifications: [],\r\n VideoComponent: { ...videoData.VideoComponent },\r\n RecommendationMetadata: { ...videoData.RecommendationMetadata }\r\n };\r\n\r\n videoData.AthleteCertifications.map(cert => {\r\n data.AthleteCertifications.push({\r\n Assessment: cert.Assessment,\r\n CertificationId: cert.CertificationId,\r\n CertifiedByDisplayName: 'Coach ' + cert.CertifiedBy.LastName,\r\n ProjectedCompetitionLevels: cert.ProjectedCompetitionLevels\r\n });\r\n });\r\n\r\n return data;\r\n};\r\n\r\n// helper function to get the Enum string instead of\r\n// of the sportId e.g converts 1 into Baseball.\r\nconst getSport = function (sportId, ENUM_SPORT) {\r\n if (sportId) {\r\n let sportEnum = ENUM_SPORT.filter(function (i) {\r\n return i.Value == sportId;\r\n })[0];\r\n return sportEnum.EnumName.toLowerCase();\r\n }\r\n};\r\n\r\n// helper function to get the Enum object from the sport id\r\n// e.g converts 1 into baseball ENUM object.\r\nconst getSportEnumBySportId = function (sportId, ENUM_SPORT) {\r\n if (sportId) {\r\n let sportEnum = ENUM_SPORT.filter(function (i) {\r\n return i.Value == sportId;\r\n })[0];\r\n return sportEnum;\r\n }\r\n};\r\n\r\n// helper function to get a short label instead\r\n// of the competition level id e.g. converts 1 to Pro\r\nconst getProjectionLevels = function (projectedLevels, sportLevels, sportEnum) {\r\n let labels = projectedLevels.map(projectedLevel => {\r\n let level = sportLevels.find(sl => sl.Value == projectedLevel);\r\n\r\n if (!level) {\r\n // we may have removed some projection levels from our sport definitions which could cause this condition. report to datadog so we're aware\r\n reportError(\r\n `Unable to find projected level - ${projectedLevel} - in levels for ${sportEnum} - ${sportLevels.map(\r\n level => level.Value\r\n )}`\r\n );\r\n }\r\n\r\n return level?.Label ?? '';\r\n });\r\n\r\n return labels.filter(label => label !== '').join(', ');\r\n};\r\n\r\n// helper function to convert an org/sport into a team object\r\n// that can be used for TeamDetails component. this is used for\r\n// job openings and events since they are tied to the organization\r\n// and not a particular team and we want the same visual representation\r\n// of the TeamDetails\r\nconst convertToTeamObject = (organization, sportEnum) => {\r\n return {\r\n OrganizationName: organization.OrganizationName,\r\n ShortName: organization.ShortName,\r\n AthleticAssociationEnum: organization.AthleticAssociationEnum,\r\n City: organization.City,\r\n State: organization.State,\r\n SportEnum: sportEnum,\r\n TeamId: 0\r\n };\r\n};\r\n\r\nexport {\r\n convertOptionsCase,\r\n athleteVideoCardAdapter,\r\n getSport,\r\n getSportEnumBySportId,\r\n getProjectionLevels,\r\n convertToTeamObject\r\n};\r\n","export const createCacheString = (date = new Date()) => {\r\n return date.getTime();\r\n};\r\n","import {\r\n ENUM_ATHLETIC_ASSOCIATION,\r\n ENUM_SPORT,\r\n ENUM_SCHOOL_TYPE,\r\n ENUM_ATHLETE_PROFILE_ACTIVITY_TYPE,\r\n ENUM_ATHLETE_PLAN,\r\n ENUM_COMMITMENT_LEVEL,\r\n ENUM_INSTITUTION_OF_INTEREST_STATUS\r\n} from '@appCore/constants/system';\r\n\r\n/*\r\n This utility method was originally written as a \"filter\" for Angular.js 1+. Its usage has spread\r\n beyond the original use-case so it's being maintained as a utility method moving forward.\r\n */\r\n\r\nconst lookupEnumLabel = (() => {\r\n let enums = {\r\n CompetitionLevelEnum: {\r\n 0: 'None',\r\n 1: 'Pro',\r\n 2: 'DI',\r\n 4: 'DII',\r\n 8: 'DIII',\r\n 16: 'NAIA',\r\n 32: 'JC',\r\n 64: 'HS',\r\n 128: 'Club',\r\n 256: 'MCLA'\r\n },\r\n CompetitionLevelEnumLong: {\r\n 0: 'None',\r\n 1: 'Professional',\r\n 2: 'NCAA DI',\r\n 4: 'NCAA DII',\r\n 8: 'NCAA DIII',\r\n 16: 'NAIA',\r\n 32: 'Junior College',\r\n 64: 'High School',\r\n 128: 'Club/Travel',\r\n 256: 'MCLA'\r\n },\r\n AthleticAssociationEnum: {},\r\n SportEnum: {},\r\n SportEnumNoGender: {},\r\n FamilyMemberRelationshipTypeEnum: {\r\n 0: 'Mother',\r\n 1: 'Father',\r\n 2: 'Grandmother',\r\n 3: 'Grandfather',\r\n 4: 'Legal Guardian',\r\n 5: 'Step Mother',\r\n 6: 'Step Father',\r\n 7: 'Uncle',\r\n 8: 'Aunt'\r\n },\r\n SchoolType: {},\r\n AthleteProfileActivityTypeEnum: {},\r\n AthletePlanEnum: {},\r\n CommitmentLevelEnum: {},\r\n MatchStrengthEnum: {\r\n '-1': 'None',\r\n 0: 'Low',\r\n 1: 'Medium',\r\n 2: 'High',\r\n 3: 'Excellent'\r\n },\r\n InstitutionOfInterestStatusEnum: {}\r\n };\r\n\r\n for (let i in ENUM_INSTITUTION_OF_INTEREST_STATUS) {\r\n if (ENUM_INSTITUTION_OF_INTEREST_STATUS.hasOwnProperty(i)) {\r\n enums.InstitutionOfInterestStatusEnum[ENUM_INSTITUTION_OF_INTEREST_STATUS[i].Value] =\r\n ENUM_INSTITUTION_OF_INTEREST_STATUS[i].Label;\r\n }\r\n }\r\n\r\n for (let i in ENUM_ATHLETIC_ASSOCIATION) {\r\n if (ENUM_ATHLETIC_ASSOCIATION.hasOwnProperty(i)) {\r\n enums.AthleticAssociationEnum[ENUM_ATHLETIC_ASSOCIATION[i].Value] = ENUM_ATHLETIC_ASSOCIATION[i].Label;\r\n }\r\n }\r\n\r\n for (let i in ENUM_SPORT) {\r\n if (ENUM_SPORT.hasOwnProperty(i)) {\r\n //ensure we are not looking at a prototype property\r\n enums.SportEnum[ENUM_SPORT[i].Value] = ENUM_SPORT[i].Label;\r\n enums.SportEnumNoGender[ENUM_SPORT[i].Value] = ENUM_SPORT[i].Label.replace(\"Men's\", '').replace(\r\n \"Women's\",\r\n ''\r\n );\r\n }\r\n }\r\n\r\n for (let i in ENUM_SCHOOL_TYPE) {\r\n if (ENUM_SCHOOL_TYPE.hasOwnProperty(i)) {\r\n enums.SchoolType[ENUM_SCHOOL_TYPE[i].Value] = ENUM_SCHOOL_TYPE[i].Label;\r\n }\r\n }\r\n\r\n for (let i in ENUM_ATHLETE_PROFILE_ACTIVITY_TYPE) {\r\n if (ENUM_ATHLETE_PROFILE_ACTIVITY_TYPE.hasOwnProperty(i)) {\r\n enums.AthleteProfileActivityTypeEnum[ENUM_ATHLETE_PROFILE_ACTIVITY_TYPE[i].Value] =\r\n ENUM_ATHLETE_PROFILE_ACTIVITY_TYPE[i].Label;\r\n }\r\n }\r\n\r\n for (let i in ENUM_ATHLETE_PLAN) {\r\n if (ENUM_ATHLETE_PLAN.hasOwnProperty(i)) {\r\n enums.AthletePlanEnum[ENUM_ATHLETE_PLAN[i].Value] = ENUM_ATHLETE_PLAN[i].Label;\r\n }\r\n }\r\n\r\n for (let i in ENUM_COMMITMENT_LEVEL) {\r\n if (ENUM_COMMITMENT_LEVEL.hasOwnProperty(i)) {\r\n enums.CommitmentLevelEnum[ENUM_COMMITMENT_LEVEL[i].Value] = ENUM_COMMITMENT_LEVEL[i].Label;\r\n }\r\n }\r\n\r\n for (let i in ENUM_INSTITUTION_OF_INTEREST_STATUS) {\r\n if (ENUM_INSTITUTION_OF_INTEREST_STATUS.hasOwnProperty(i)) {\r\n enums.InstitutionOfInterestStatusEnum[ENUM_INSTITUTION_OF_INTEREST_STATUS[i].Value] =\r\n ENUM_INSTITUTION_OF_INTEREST_STATUS[i].Label;\r\n }\r\n }\r\n\r\n return function (val, theEnumType, notFoundLabel) {\r\n if (val !== undefined) {\r\n return enums[theEnumType] && enums[theEnumType][val] ? enums[theEnumType][val] : notFoundLabel;\r\n }\r\n return null;\r\n };\r\n})();\r\n\r\nexport default lookupEnumLabel;\r\n","import { useState, Fragment } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { List, TwoColumnListItem } from '@appCore/components/SearchFilters/layouts/ListWithFilters/ListWithFilters';\r\nimport TeamDetailsDisplay from '@appCore/components/TeamDetailsDisplay';\r\nimport WiredLink from '@appCore/components/WiredLink';\r\nimport { isSmallAndUp } from '@appCore/utility/viewport';\r\n\r\nexport const TeamsListItem = props => {\r\n const {\r\n teamItem,\r\n teamProfileLinkProps,\r\n teamProfileRosterLinkProps,\r\n teamProfileAlumniLinkProps,\r\n shouldLazyLoadLogos\r\n } = props;\r\n\r\n return (\r\n <TwoColumnListItem\r\n col1Content={\r\n <TeamDetailsDisplay\r\n team={teamItem.Team}\r\n options={{\r\n teamProfileLinkProps,\r\n lazyLoadLogo: shouldLazyLoadLogos\r\n }}\r\n />\r\n }\r\n col2Content={\r\n <div className=\"grid grid-cols-12 gap-4 items-center sm:gap-0\">\r\n <div className=\"col-span-6 sm:col-span-4 text-center text-body-lg\">\r\n <p className=\"font-bold\">\r\n {teamProfileRosterLinkProps ? (\r\n <WiredLink {...teamProfileRosterLinkProps}>{teamItem.RosterCount}</WiredLink>\r\n ) : (\r\n 'n/a'\r\n )}\r\n </p>\r\n <p>Roster</p>\r\n </div>\r\n <div className=\"col-span-6 sm:col-span-4 text-center text-body-lg\">\r\n <WiredLink {...teamProfileAlumniLinkProps}>\r\n <p className=\"font-bold\">{teamItem.AlumniCount}</p>\r\n </WiredLink>\r\n <p>Alumni</p>\r\n </div>\r\n </div>\r\n }\r\n />\r\n );\r\n};\r\n\r\nTeamsListItem.propTypes = {\r\n teamItem: PropTypes.shape({\r\n Team: PropTypes.object.isRequired,\r\n RosterCount: PropTypes.number,\r\n AlumniCount: PropTypes.number.isRequired\r\n }).isRequired,\r\n teamProfileLinkProps: PropTypes.exact(WiredLink.propTypes).isRequired,\r\n teamProfileRosterLinkProps: PropTypes.exact(WiredLink.propTypes),\r\n teamProfileAlumniLinkProps: PropTypes.exact(WiredLink.propTypes).isRequired,\r\n shouldLazyLoadLogos: PropTypes.bool.isRequired\r\n};\r\n\r\nconst TeamsListDisplay = props => {\r\n const { teams, emptyStateRendering, renderTeamsListItem } = props;\r\n\r\n const [isScreenSmallAndUpAtStart] = useState(isSmallAndUp);\r\n\r\n return (\r\n <List>\r\n {!teams.length\r\n ? emptyStateRendering\r\n : teams.map((teamItem, idx) => (\r\n <Fragment key={teamItem.Team.TeamId}>\r\n {renderTeamsListItem({\r\n teamItem,\r\n shouldLazyLoadLogos: isScreenSmallAndUpAtStart ? idx > 9 : idx > 4\r\n })}\r\n </Fragment>\r\n ))}\r\n </List>\r\n );\r\n};\r\n\r\nTeamsListDisplay.propTypes = {\r\n teams: PropTypes.arrayOf(\r\n PropTypes.shape({\r\n Team: PropTypes.shape({\r\n TeamId: PropTypes.number.isRequired\r\n }).isRequired\r\n })\r\n ).isRequired,\r\n emptyStateRendering: PropTypes.node.isRequired,\r\n renderTeamsListItem: PropTypes.func.isRequired\r\n};\r\n\r\nexport default TeamsListDisplay;\r\n","import http from '@appCore/services/http';\r\n\r\nconst baseUrl = '/api/teamapi';\r\n\r\nexport const GetTeamSearchOptions = () => {\r\n return http.get(`${baseUrl}/searchOptions`);\r\n};\r\n\r\nexport const GetTeamSearchResults = ({ athleticAssociation, conference, query, sportEnum, state, page }) => {\r\n return http.get(`${baseUrl}/search`, { athleticAssociation, conference, query, sport: sportEnum, state, page });\r\n};\r\n","import { useQuery } from '@tanstack/react-query';\r\n\r\nimport { GetTeamSearchOptions } from '@appPublic/shared/api/teamApi';\r\nimport { PATH_PATTERNS } from '@appPublic/routes/teams/shared/constants';\r\n\r\nconst useFetchTeamSearchOptions = ({ options } = {}) =>\r\n useQuery(\r\n [`${PATH_PATTERNS.teamsList}_fetchTeamSearchOptions`],\r\n async () => {\r\n const resp = await GetTeamSearchOptions();\r\n\r\n return {\r\n ...resp,\r\n StateOptions: [...resp.StateOptions.US, ...resp.StateOptions.CA].map(item => ({\r\n ...item,\r\n Value: item.Value.toLowerCase()\r\n }))\r\n };\r\n },\r\n options\r\n );\r\n\r\nexport default useFetchTeamSearchOptions;\r\n","import { useQuery } from '@tanstack/react-query';\r\n\r\nimport EnumHelper from '@appCore/services/enumHelper';\r\n\r\nimport { GetTeamSearchResults } from '@appPublic/shared/api/teamApi';\r\nimport { PATH_PATTERNS } from '@appPublic/routes/teams/shared/constants';\r\n\r\nconst useFetchTeamSearchResults = ({\r\n params: { athleticAssociation, conference, query, sportEnum, state, page } = {},\r\n options\r\n} = {}) =>\r\n useQuery(\r\n [\r\n `${PATH_PATTERNS.teamsList}_fetchTeamSearchResults`,\r\n {\r\n athleticAssociation: `${athleticAssociation}`,\r\n conference: `${conference}`,\r\n query: `${query}`,\r\n sportEnum: `${sportEnum}`,\r\n state: `${state}`,\r\n page: `${page}`\r\n }\r\n ],\r\n async () => {\r\n const resp = await GetTeamSearchResults({ athleticAssociation, conference, query, sportEnum, state, page });\r\n\r\n resp.Page.Results = resp.Page.Results.map(item => {\r\n const sport = EnumHelper.toSportEnum(item.TeamPlaysSportId);\r\n return {\r\n AlumniCount: item.AlumniCount,\r\n RosterCount: item.RosterCount,\r\n Team: {\r\n TeamId: item.TeamId,\r\n OrganizationName: item.Name,\r\n ShortName: item.ShortName,\r\n TeamsInSportCount: item.TeamsInSportCount,\r\n AthleticAssociationEnum: {\r\n Label: item.AthleticAssociation,\r\n Id: item.AthleticAssociationEnum\r\n },\r\n SportEnum: {\r\n Id: sport.Value,\r\n Value: sport.EnumName,\r\n Label: sport.Label\r\n },\r\n IsFourYear: item.IsFourYear,\r\n IsPromoter: !item.IsRecruiter,\r\n IsVerified: true,\r\n City: item.City,\r\n State: item.State,\r\n TeamName: item.TeamName\r\n }\r\n };\r\n });\r\n return resp;\r\n },\r\n options\r\n );\r\n\r\nexport default useFetchTeamSearchResults;\r\n","import useParamTools from '@appCore/components/SearchFilters/useParamTools';\r\n\r\nimport { useTeamsUrlBuilder } from '@appPublic/routes/teams/urlBuilder';\r\n\r\nconst useFilterTools = ({ searchOptions }) => {\r\n const teamsUrlBuilder = useTeamsUrlBuilder();\r\n\r\n const derivedFilterDef = searchOptions && {\r\n primary: {\r\n label: 'All sports',\r\n selectionType: 'singleSelect',\r\n options: [\r\n { label: 'All sports', value: '' },\r\n ...searchOptions.SportOptions.map(opt => ({ label: opt.Label, value: opt.Value }))\r\n ],\r\n searchParamKey: 'sportEnum',\r\n requestParamKey: 'sportEnum'\r\n },\r\n secondary: [\r\n {\r\n label: 'Level',\r\n selectionType: 'singleSelect',\r\n options: searchOptions.AthleticAssociationOptions.map(opt => ({\r\n label: opt.Label,\r\n value: `${opt.Value}`\r\n })),\r\n searchParamKey: 'athleticAssociation',\r\n requestParamKey: 'athleticAssociation'\r\n },\r\n {\r\n label: 'State',\r\n selectionType: 'singleSelect',\r\n options: searchOptions.StateOptions.map(opt => ({ label: opt.Label, value: `${opt.Value}` })),\r\n searchParamKey: 'state',\r\n requestParamKey: 'state'\r\n },\r\n {\r\n label: 'Conference',\r\n selectionType: 'singleSelect',\r\n options: searchOptions.ConferenceOptions.map(opt => ({ label: opt.Label, value: opt.Value })),\r\n searchParamKey: 'conference',\r\n requestParamKey: 'conference'\r\n }\r\n ],\r\n text: {\r\n placeholder: 'Search by team name',\r\n searchParamKey: 'query',\r\n requestParamKey: 'query'\r\n }\r\n };\r\n\r\n const paramTools = useParamTools({\r\n filterDef: derivedFilterDef\r\n });\r\n\r\n if (!paramTools) {\r\n return {};\r\n }\r\n\r\n const { deriveSearchParamsOnValuesChange, values, requestParams } = paramTools;\r\n\r\n return {\r\n filterProps: {\r\n filterDef: derivedFilterDef,\r\n onChange: ({ key, value }) => {\r\n teamsUrlBuilder\r\n .teamsList({ searchParams: deriveSearchParamsOnValuesChange({ values: { [key]: value } }) })\r\n .go();\r\n },\r\n onChangeMany: ({ values }) => {\r\n teamsUrlBuilder.teamsList({ searchParams: deriveSearchParamsOnValuesChange({ values }) }).go();\r\n },\r\n values\r\n },\r\n requestParams\r\n };\r\n};\r\n\r\nexport default useFilterTools;\r\n","import { useEffect, useState } from 'react';\r\n\r\nimport useURLParams from '@appCore/hooks/routeTools/useURLParams/useURLParams';\r\nimport ListWithFilters, {\r\n ListCount,\r\n DefaultListEmptyState,\r\n ListPagingControls,\r\n DefaultTwoColumnListItemLoadingSkeleton\r\n} from '@appCore/components/SearchFilters/layouts/ListWithFilters/ListWithFilters';\r\nimport TeamsListDisplay, { TeamsListItem } from '@appCore/routes/teams/components/TeamsListDisplay';\r\nimport PageTitle from '@appCore/components/PageTitle';\r\n\r\nimport { useTeamsUrlBuilder } from '@appPublic/routes/teams/urlBuilder';\r\nimport { publicTeamPage } from '@appPublic/shared/utility/urlGeneration';\r\nimport crossAppUrlBuilder from '@appPublic/shared/services/crossAppUrlBuilder';\r\nimport ContentWrapper from '@appPublic/shared/components/layouts/ContentWrapper';\r\nimport { ScrollRestorationSignal } from '@appPublic/shared/components/UNSTABLE_ScrollRestoration';\r\nimport { useCanonicalListPage } from '@appPublic/shared/hooks/useCanonical';\r\nimport { UNSTABLE_useContentHeight } from '@appPublic/shared/components/layouts/Layout';\r\n\r\nimport useFetchTeamSearchOptions from './useFetchTeamSearchOptions';\r\nimport useFetchTeamSearchResults from './useFetchTeamSearchResults';\r\nimport useFilterTools from './useFilterTools';\r\n\r\nconst TeamsList = props => {\r\n const searchParams = useURLParams().search;\r\n const teamsUrlBuilder = useTeamsUrlBuilder();\r\n\r\n useCanonicalListPage();\r\n UNSTABLE_useContentHeight({ className: 'min-h-[3850px] sm:min-h-[2500px]' });\r\n\r\n // Once we've loaded the teams count once, just keep it around\r\n const [teamsCount, setTeamsCount] = useState(null);\r\n\r\n const { data: searchOptionsData, isLoading: searchOptionsIsLoading } = useFetchTeamSearchOptions({\r\n options: {\r\n useErrorBoundary: true\r\n }\r\n });\r\n\r\n const { filterProps, requestParams } = useFilterTools({\r\n searchOptions: searchOptionsData\r\n });\r\n const derivedSearchOptionsIsLoading = !!(searchOptionsIsLoading || !filterProps);\r\n\r\n const { data: searchResultsData, isLoading: searchResultsIsLoading } = useFetchTeamSearchResults({\r\n params: requestParams && { ...requestParams, conference: requestParams.conference?.replaceAll('-', '') },\r\n options: { enabled: !!requestParams, useErrorBoundary: true }\r\n });\r\n\r\n useEffect(() => {\r\n if (!teamsCount && searchResultsData) {\r\n setTeamsCount(searchResultsData.TotalTeams);\r\n }\r\n }, [searchResultsData]);\r\n\r\n const pageTitle = (() => {\r\n if (!filterProps) {\r\n return;\r\n }\r\n if (\r\n ['sportEnum', 'athleticAssociation', 'conference', 'state'].every(\r\n searchParamKey => !searchParams[searchParamKey]\r\n )\r\n ) {\r\n return `Explore Teams`;\r\n }\r\n\r\n const conferenceString = searchParams.conference\r\n ? filterProps.filterDef.secondary\r\n .find(({ searchParamKey }) => searchParamKey === 'conference')\r\n .options.find(opt => opt.value === searchParams.conference).label\r\n : '';\r\n const levelString = searchParams.athleticAssociation\r\n ? filterProps.filterDef.secondary\r\n .find(({ searchParamKey }) => searchParamKey === 'athleticAssociation')\r\n .options.find(opt => opt.value === searchParams.athleticAssociation).label\r\n : '';\r\n const sportString = searchParams.sportEnum\r\n ? filterProps.filterDef.primary.options.find(opt => opt.value === searchParams.sportEnum).label\r\n : '';\r\n const stateString = searchParams.state\r\n ? filterProps.filterDef.secondary\r\n .find(({ searchParamKey }) => searchParamKey === 'state')\r\n .options.find(opt => opt.value === searchParams.state).label\r\n : '';\r\n\r\n return `${conferenceString && conferenceString + ' '}${levelString && levelString + ' '}${\r\n sportString && sportString + ' '\r\n }Teams${stateString && ' in ' + stateString}`;\r\n })();\r\n\r\n return (\r\n <>\r\n {searchResultsData && <ScrollRestorationSignal />}\r\n <PageTitle title={pageTitle && `${pageTitle} | FieldLevel`} />\r\n <ContentWrapper>\r\n <ListWithFilters\r\n heading=\"Teams\"\r\n filterPropsIsLoading={derivedSearchOptionsIsLoading}\r\n filterProps={filterProps}\r\n listCountRendering={\r\n searchResultsData && (\r\n <ListCount\r\n count={searchResultsData.Page.TotalResultCount}\r\n itemNameSingular=\"Team\"\r\n itemNamePlural=\"Teams\"\r\n />\r\n )\r\n }\r\n listIsLoading={searchResultsIsLoading}\r\n listSkeletonRendering={DefaultTwoColumnListItemLoadingSkeleton}\r\n listRendering={\r\n searchResultsData && (\r\n <TeamsListDisplay\r\n teams={searchResultsData.Page.Results}\r\n emptyStateRendering={\r\n <DefaultListEmptyState\r\n actionLabel=\"Clear all filters\"\r\n // We only intend for this to clear \"secondary\" filters\r\n actionLinkProps={\r\n teamsUrlBuilder.teamsList({\r\n searchParams: searchParams.sportEnum\r\n ? { sportEnum: searchParams.sportEnum }\r\n : undefined\r\n }).wiredLinkProps\r\n }\r\n />\r\n }\r\n renderTeamsListItem={({ teamItem, shouldLazyLoadLogos }) => (\r\n <TeamsListItem\r\n teamItem={teamItem}\r\n teamProfileLinkProps={publicTeamPage(\r\n {\r\n teamShortName: teamItem.Team.ShortName,\r\n teamSportEnum: teamItem.Team.SportEnum.Value.toLowerCase()\r\n },\r\n !teamItem.Team.IsFourYear\r\n )}\r\n teamProfileRosterLinkProps={\r\n teamItem.Team.IsPromoter\r\n ? crossAppUrlBuilder.publicTeamPageRoster({\r\n pathParams: {\r\n teamShortName: teamItem.Team.ShortName,\r\n teamSportEnum: teamItem.Team.SportEnum.Value.toLowerCase()\r\n },\r\n searchParams:\r\n teamItem.Team.TeamsInSportCount > 1\r\n ? { teamId: teamItem.Team.TeamId }\r\n : {}\r\n }).wiredLinkProps\r\n : undefined\r\n }\r\n teamProfileAlumniLinkProps={\r\n crossAppUrlBuilder.publicTeamPageAlumni({\r\n pathParams: {\r\n teamShortName: teamItem.Team.ShortName,\r\n teamSportEnum: teamItem.Team.SportEnum.Value.toLowerCase()\r\n }\r\n }).wiredLinkProps\r\n }\r\n shouldLazyLoadLogos={shouldLazyLoadLogos}\r\n />\r\n )}\r\n />\r\n )\r\n }\r\n pagingControlsRendering={\r\n searchResultsData && (\r\n <ListPagingControls\r\n buildLinkProps={({ page }) => {\r\n return teamsUrlBuilder.teamsList({\r\n searchParams: { ...searchParams, page }\r\n }).wiredLinkProps;\r\n }}\r\n currentPage={searchResultsData.Page.Page}\r\n totalPages={searchResultsData.Page.TotalPageCount}\r\n />\r\n )\r\n }\r\n />\r\n </ContentWrapper>\r\n </>\r\n );\r\n};\r\n\r\nexport default TeamsList;\r\n","import { useEffect } from 'react';\r\nimport { useLocation } from 'react-router-dom';\r\n\r\nconst removeExistingCanonicalTag = () => {\r\n const existing = document.querySelector('head link[rel=\"canonical\"]');\r\n existing?.remove();\r\n};\r\n\r\nconst addCanonicalTag = ({ href = window.location.href } = {}) => {\r\n const link = document.createElement('link');\r\n link.setAttribute('rel', 'canonical');\r\n link.setAttribute('href', href);\r\n document.head.appendChild(link);\r\n return () => link.remove();\r\n};\r\n\r\n/**\r\n * This hook is intended to capture the use-case where a page may have various tracking-related (or otherwise\r\n * content-agnostic) search params in its URL, so we remove them from the canonical tag.\r\n */\r\nexport const useCanonicalNoSearchParams = () =>\r\n useCanonical({\r\n getHref: () => {\r\n const currentURL = new URL(window.location.href);\r\n currentURL.search = '';\r\n return currentURL.href;\r\n }\r\n });\r\n\r\n/**\r\n * This hook is intended to capture the desired canonical tag for \"list\" pages in app-public. It preserves\r\n * the url as-is, with the exception of searchParams.page, which will only be included in the href if it's > 1\r\n */\r\nexport const useCanonicalListPage = () => {\r\n useCanonical({\r\n getHref: () => {\r\n // We want to canonicalize the url as-is, unless the 'page' searchParam is <= 1\r\n const currentURL = new URL(window.location.href);\r\n const pageParam = currentURL.searchParams.get('page');\r\n if (pageParam) {\r\n const parsed = parseInt(pageParam, 10);\r\n if (!Number.isFinite(parsed) || parsed <= 1) {\r\n currentURL.searchParams.delete('page');\r\n }\r\n }\r\n return currentURL.href;\r\n }\r\n });\r\n};\r\n\r\n/**\r\n * This hook may be used to dynamically add a `<link rel=\"canonical\" />` tag to the `<head>` of the document.\r\n * By default, the link's href value will be `window.location.href`, but you may pass a getHref function to\r\n * return any value you choose.\r\n *\r\n * Usage notes:\r\n * - When the hook is mounted, if a canonical link tag already exists in document.head, it will be removed\r\n * - The hook will only ever add one link tag to the document. When unmounted, it will be removed.\r\n * - The hook will invoke getHref() any time the location changes, so you may reliably accommodate changes to the\r\n * url (e.g. when searchParams change with filters, etc.) within your getHref() function.\r\n *\r\n * @param {object} params\r\n * @param {Function} [params.getHref] - This function should return the desired value of the link's href attribute\r\n */\r\nconst useCanonical = ({ getHref = () => window.location.href } = {}) => {\r\n useEffect(() => {\r\n removeExistingCanonicalTag();\r\n return addCanonicalTag({ href: getHref() });\r\n }, [useLocation()]);\r\n};\r\n\r\nexport default useCanonical;\r\n","import {\r\n sameDomainPathReload,\r\n reactRouterGetDerivedPath,\r\n generateURLBuilderFactory,\r\n applyUrlBuilderFactoryToConfig\r\n} from '@appCore/utility/routingUtils';\r\n\r\nconst crossAppRouteService = {\r\n href: ({ reactRouterPathPattern, pathParams, searchParams }) =>\r\n reactRouterGetDerivedPath({ reactRouterPathPattern, pathParams, searchParams }),\r\n go: ({ reactRouterPathPattern, pathParams, searchParams, options }) =>\r\n sameDomainPathReload({\r\n newPath: reactRouterGetDerivedPath({ reactRouterPathPattern, pathParams, searchParams }),\r\n replace: options?.location === 'replace'\r\n })\r\n};\r\n\r\nconst builderFactory = generateURLBuilderFactory(crossAppRouteService, service => ({\r\n url: service.href,\r\n reloadPage: true\r\n}));\r\n\r\nconst makeCrossAppUrlBuilder = config => applyUrlBuilderFactoryToConfig({ config, factory: builderFactory });\r\n\r\nexport default makeCrossAppUrlBuilder;\r\n","import makeCrossAppUrlBuilder from '@appCore/utility/makeCrossAppUrlBuilder';\r\n\r\nconst PATHS = {\r\n publicPrivacyPolicy: '/policies/privacy',\r\n publicSignInPage: '/signin',\r\n publicSignUpPage: `/join`,\r\n publicTeamPage: `/:teamShortName/:teamSportEnum`,\r\n publicTeamPageAlumni: `/:teamShortName/:teamSportEnum/alumni`,\r\n publicTeamPagePlacements: `/:teamShortName/:teamSportEnum/placements`,\r\n publicTeamPageRecruitment: `/:teamShortName/:teamSportEnum/recruitment`,\r\n publicTeamPageRoster: `/:teamShortName/:teamSportEnum/roster`,\r\n publicTermsAndConditions: '/policies/terms'\r\n};\r\n\r\nexport default makeCrossAppUrlBuilder({\r\n publicPrivacyPolicy: {\r\n reactRouterPathPattern: PATHS.publicPrivacyPolicy\r\n },\r\n publicSignInPage: {\r\n reactRouterPathPattern: PATHS.publicSignInPage,\r\n searchParamKeys: ['returnUrl']\r\n },\r\n publicSignUpPage: {\r\n reactRouterPathPattern: PATHS.publicSignUpPage,\r\n searchParamKeys: ['returnUrl', 'signUpAs']\r\n },\r\n publicTeamPage: {\r\n reactRouterPathPattern: PATHS.publicTeamPage,\r\n searchParamKeys: ['teamId']\r\n },\r\n publicTeamPageAlumni: {\r\n reactRouterPathPattern: PATHS.publicTeamPageAlumni,\r\n searchParamKeys: ['teamId']\r\n },\r\n publicTeamPagePlacements: {\r\n reactRouterPathPattern: PATHS.publicTeamPagePlacements,\r\n searchParamKeys: ['teamId']\r\n },\r\n publicTeamPageRecruitment: {\r\n reactRouterPathPattern: PATHS.publicTeamPageRecruitment,\r\n searchParamKeys: ['teamId']\r\n },\r\n publicTeamPageRoster: {\r\n reactRouterPathPattern: PATHS.publicTeamPageRoster,\r\n searchParamKeys: ['teamId']\r\n },\r\n publicTermsAndConditions: {\r\n reactRouterPathPattern: PATHS.publicTermsAndConditions\r\n }\r\n});\r\n","import crossAppUrlBuilder from '@appPublic/shared/services/crossAppUrlBuilder';\r\n\r\nexport const publicTeamPage = (pathParams, isPromoter) => {\r\n pathParams.teamSportEnum = pathParams?.teamSportEnum?.toLowerCase();\r\n\r\n return isPromoter\r\n ? crossAppUrlBuilder.publicTeamPagePlacements({\r\n pathParams: pathParams\r\n }).wiredLinkProps\r\n : crossAppUrlBuilder.publicTeamPageRecruitment({\r\n pathParams: pathParams\r\n }).wiredLinkProps;\r\n};\r\n"],"names":["DefaultLogo","_ref","useHighSchool","size","organizationName","lazy","sizeLowercase","toLowerCase","useEffect","generateDeprecationNotice","message","concat","srcUrl","DEFAULT_TEAM_LOGO_URL_HS","DEFAULT_TEAM_LOGO_URL_COLLEGE","_jsx","Logo","source","alt","propTypes","PropTypes","Object","keys","small","base","large","filterDef","searchParams","useURLParams","search","prevSearchParams","useRef","current","pageSearchParamKey","page","searchParamKey","pageRequestParamKey","requestParamKey","values","deriveValues","getSecondaryValue","_ref2","secondaryDef","disabled","selectionType","SELECTION_TYPES","multiSelect","multiSelectValue","Array","isArray","every","val","options","find","opt","value","singleSelect","secondary","reduce","acc","secondaryDefIdx","keyPrefix","deriveSecondaryKey","idx","group","groupAcc","groupItemDef","groupItemDefIdx","primary","defaultValue","text","sort","requestParams","_ref3","newParams","key","getIsEmptyValue","getIsSecondaryKey","getIndexFromSecondaryKey","groupDefKey","UNSTABLE_getGroupIndexFromDependentSelectGroupKey","groupDef","UNSTABLE_getGroupIndexFromCheckboxGroupKey","deriveRequestParams","deriveSearchParamsOnValuesChange","_ref4","_filterDef$secondary","mergedParams","secondaryKey","groupValues","filter","valKey","startsWith","groupValAcc","groupValKey","validSearchParamKeys","i","length","hasOwn","dependencyCondition","groupIdx","forEach","changedParams","from","Set","push","includes","some","ORIENTATION_TYPES","horizontal","vertical","PRESENTATION_MODE_TYPES","details","short","defaultConfig","orientation","showAthleticAssociation","showSportLabel","urlBuilder","generateTeamProfileLinkProps","teamProfileLinkProps","mode","useHighSchoolDefaultLogo","lazyLoadLogo","TeamDetailsDisplay","_config$generateTeamP","team","onClick","children","config","IS_DEV_MODE","legacyUrlBuilderObj","linkProps","call","TeamProfileLinkWrapper","href","props","WiredLink","url","target","_Fragment","AthleticAssociationEnum","showSport","SportEnum","Id","logoSize","breakCache","_jsxs","Stack","noWrap","align","Item","className","unstyled","TeamLogo","shortName","ShortName","sportEnum","Value","teamId","TeamId","isPremium","IsPremium","OrganizationName","fill","cx","TeamName","Label","City","State","TeamDetailsProps","isRequired","Sizes","isBlurred","sportName","getSport","ENUM_SPORT","logoSrc","size1x","getSizeInPixels","src1x","imageSrcManager","getTeamLogoSrc","size2x","src2x","sourceSet","PrimeBadgeIcon","ImageHostOverride","process","ENUM_ATHLETE_PLAN","getSystemConstantFromWindow","ENUM_ATHLETE_PROFILE_ACTIVITY_TYPE","ENUM_ATHLETIC_ASSOCIATION","ENUM_COMMITMENT_LEVEL","ENUM_INSTITUTION_OF_INTEREST_STATUS","ENUM_SCHOOL_TYPE","ENUM_UTM_MEDIUM","INTERCOM_APPID","WWW_URL","FACEBOOK_APP_ID","METRICS_ENABLED_LIST","uniqueGradientId","Math","round","random","width","height","viewBox","xmlns","rx","d","id","x1","y1","x2","y2","gradientUnits","stopColor","offset","fillRule","clipRule","stroke","isString","String","isNumber","isFinite","isUndefined","enumHelper","toSportEnum","sport","item","EnumName","toAthleticAssociationEnum","athleticAssociation","toCommitmentLevelEnum","commitmentLevel","enumIntToName","intVal","enumStructure","Number","isInteger","hasOwnProperty","toEnumViewModel","enumValue","toEnumLabel","enumType","lookupEnumLabel","http","cacheString","createCacheString","pubSub","createSimplePubSub","resetCacheString","publish","getCacheString","subscribe","set","keyName","keyValue","ttl","data","Date","now","localStorage","setItem","JSON","stringify","get","getItem","parse","removeItem","getStorageKeyName","username","setCachedImageGuid","imageGuid","Storage","getCachedImageGuid","userGuid","HEADSHOT_SIZES","LOGO_SIZES","CF_BASE_URL","IMAGE_BASE_URL","Environment","WEBAPI_PATH","checkHeadshotSize","Error","checkLogoSize","console","warn","athleteHeadshotCache","userHeadshotCache","updateAthleteHeadshotCache","_ref6","subscribeToAthleteHeadshotCache","updateUserHeadshotCache","_ref7","subscribeToUserHeadshotCache","updateOrgLogoCache","_ref8","orgLogoCache","subscribeToOrgLogoCache","updateTeamLogoCache","_ref9","teamLogoCache","subscribeToTeamLogoCache","getUserHeadshotSrc","guid","componentSize","cachedImageGuid","imgSize","imgName","imgSrc","getAthleteHeadshotSrc","isAnonymous","placeholderSrc","getOrgLogoSrc","blurredUrl","logoUrl","_ref5","makeImageSrcManager","convertOptionsCase","map","option","convertedOption","_camelCase","sportId","getProjectionLevels","projectedLevels","sportLevels","projectedLevel","_level$Label","level","sl","reportError","label","join","convertToTeamObject","organization","arguments","undefined","getTime","enums","CompetitionLevelEnum","CompetitionLevelEnumLong","SportEnumNoGender","FamilyMemberRelationshipTypeEnum","SchoolType","AthleteProfileActivityTypeEnum","AthletePlanEnum","CommitmentLevelEnum","MatchStrengthEnum","InstitutionOfInterestStatusEnum","replace","theEnumType","notFoundLabel","TeamsListItem","teamItem","teamProfileRosterLinkProps","teamProfileAlumniLinkProps","shouldLazyLoadLogos","TwoColumnListItem","col1Content","Team","col2Content","RosterCount","AlumniCount","TeamsListDisplay","teams","emptyStateRendering","renderTeamsListItem","isScreenSmallAndUpAtStart","useState","isSmallAndUp","List","Fragment","baseUrl","useQuery","PATH_PATTERNS","teamsList","async","resp","StateOptions","US","CA","params","conference","query","state","GetTeamSearchResults","Page","Results","EnumHelper","TeamPlaysSportId","Name","TeamsInSportCount","AthleticAssociation","IsFourYear","IsPromoter","IsRecruiter","IsVerified","searchOptions","teamsUrlBuilder","useTeamsUrlBuilder","derivedFilterDef","SportOptions","AthleticAssociationOptions","ConferenceOptions","placeholder","paramTools","useParamTools","filterProps","onChange","go","onChangeMany","_requestParams$confer","useCanonicalListPage","UNSTABLE_useContentHeight","teamsCount","setTeamsCount","searchOptionsData","isLoading","searchOptionsIsLoading","useFetchTeamSearchOptions","useErrorBoundary","useFilterTools","derivedSearchOptionsIsLoading","searchResultsData","searchResultsIsLoading","useFetchTeamSearchResults","replaceAll","enabled","TotalTeams","pageTitle","conferenceString","levelString","sportString","stateString","ScrollRestorationSignal","PageTitle","title","ContentWrapper","ListWithFilters","heading","filterPropsIsLoading","listCountRendering","ListCount","count","TotalResultCount","itemNameSingular","itemNamePlural","listIsLoading","listSkeletonRendering","DefaultTwoColumnListItemLoadingSkeleton","listRendering","DefaultListEmptyState","actionLabel","actionLinkProps","wiredLinkProps","publicTeamPage","teamShortName","teamSportEnum","crossAppUrlBuilder","publicTeamPageRoster","pathParams","publicTeamPageAlumni","pagingControlsRendering","ListPagingControls","buildLinkProps","currentPage","totalPages","TotalPageCount","useCanonicalNoSearchParams","useCanonical","getHref","currentURL","URL","window","location","pageParam","parsed","parseInt","delete","removeExistingCanonicalTag","existing","document","querySelector","remove","link","createElement","setAttribute","head","appendChild","addCanonicalTag","useLocation","crossAppRouteService","reactRouterPathPattern","reactRouterGetDerivedPath","sameDomainPathReload","newPath","builderFactory","generateURLBuilderFactory","service","reloadPage","applyUrlBuilderFactoryToConfig","factory","publicPrivacyPolicy","publicSignInPage","searchParamKeys","publicSignUpPage","publicTeamPagePlacements","publicTeamPageRecruitment","publicTermsAndConditions","isPromoter","_pathParams$teamSport"],"sourceRoot":""}