{"version":3,"file":"5108.bundle.ed39234b76394ad73362.js","mappings":"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","sources":["webpack://fieldlevel.app/./app-core/constants/environment.js","webpack://fieldlevel.app/./app-core/constants/system.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/dateUtils.js"],"sourcesContent":["// 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 { 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","function dayOfTheWeek(date, format = 'long') {\r\n return date.toLocaleString('default', { weekday: format });\r\n}\r\n\r\nfunction monthOfTheYear(date, format = 'long') {\r\n return date.toLocaleString('default', { month: format });\r\n}\r\n\r\nfunction adjustDateToLocalizedDate(date) {\r\n let newDate = new Date(date);\r\n let offset = newDate.getTimezoneOffset();\r\n let offsetInMiilis = 60 * 1000 * offset;\r\n return new Date(newDate.getTime() + offsetInMiilis);\r\n}\r\n\r\nfunction convertToDate(utcDateString) {\r\n if (utcDateString instanceof Date) {\r\n return utcDateString;\r\n }\r\n\r\n // assumes a UTC date in format - 2017-06-07T23:12:16.98\r\n // tell Date.parse that this is a UTC date\r\n if (utcDateString[utcDateString.length - 1] != 'Z') {\r\n utcDateString += 'Z';\r\n }\r\n\r\n const date = new Date();\r\n date.setTime(Date.parse(utcDateString));\r\n return date;\r\n}\r\n\r\nfunction isNewerThan(utcDateString, monthsAgo) {\r\n if (utcDateString) {\r\n let promotionDate = convertToDate(utcDateString);\r\n let today = new Date();\r\n let monthsAgoDate = new Date().setMonth(today.getMonth() - monthsAgo);\r\n\r\n return promotionDate > monthsAgoDate;\r\n }\r\n\r\n return false;\r\n}\r\n\r\n/**\r\n * This function is intended to replicate the functionality of moment.from() using the standard\r\n * 'en-US' locality. There may be slight differences between month/day calculations, but we're not\r\n * overly concerned with 100% parity. This function is enabling a transition away from momentjs\r\n * entirely, and should be phased out once a holistic alternative is discovered (e.g Temporal)\r\n */\r\nexport function momentFrom({ compareDate, baseDate = new Date(), withoutSuffix = false }) {\r\n const compareDateObj = new Date(compareDate);\r\n const baseDateObj = new Date(baseDate);\r\n\r\n const diffInMs = compareDateObj - baseDateObj;\r\n const isFuture = diffInMs >= 0;\r\n\r\n // This table was copied from the moment.js documentation, for en-US locales only\r\n const relativeLookupTable = {\r\n future: 'in %s',\r\n past: '%s ago',\r\n s: 'a few seconds',\r\n // The ss setting is apparently only enabled if explicitly configured by the implementing codebase\r\n // ss: '%d seconds',\r\n m: 'a minute',\r\n mm: '%d minutes',\r\n h: 'an hour',\r\n hh: '%d hours',\r\n d: 'a day',\r\n dd: '%d days',\r\n w: 'a week',\r\n ww: '%d weeks',\r\n M: 'a month',\r\n MM: '%d months',\r\n y: 'a year',\r\n yy: '%d years'\r\n };\r\n\r\n const differenceLookup = (() => {\r\n const diffInSeconds = Math.abs(diffInMs / 1000);\r\n\r\n if (diffInSeconds < 45) {\r\n return ['s', diffInSeconds];\r\n }\r\n\r\n const diffInMinutes = diffInSeconds / 60;\r\n\r\n if (diffInSeconds < 90) {\r\n return ['m', diffInMinutes];\r\n }\r\n if (diffInMinutes < 45) {\r\n return ['mm', diffInMinutes];\r\n }\r\n const diffInHours = diffInMinutes / 60;\r\n\r\n if (diffInMinutes < 90) {\r\n return ['h', diffInHours];\r\n }\r\n if (diffInHours < 22) {\r\n return ['hh', diffInHours];\r\n }\r\n const diffInDays = diffInHours / 24;\r\n\r\n if (diffInHours < 36) {\r\n return ['d', diffInDays];\r\n }\r\n if (diffInDays < 26) {\r\n return ['dd', diffInDays];\r\n }\r\n const diffInMonths = diffInDays / 31;\r\n\r\n // For future dates, tests seem to confirm this cutoff is 46 days, but past dates it's 47\r\n if (diffInDays < (isFuture ? 46 : 47)) {\r\n return ['M', diffInMonths];\r\n }\r\n\r\n // For future dates, tests seem to confirm this cutoff is 322 days, but past dates it's 320\r\n if (diffInDays < (isFuture ? 322 : 320)) {\r\n return ['MM', Math.min(diffInMonths, 10)];\r\n }\r\n const diffInYears = diffInDays / 365;\r\n\r\n // For future dates, tests seem to confirm this cutoff is 549 days, but past dates it's 547\r\n if (diffInDays < (isFuture ? 549 : 547)) {\r\n return ['y', diffInYears];\r\n }\r\n return ['yy', diffInYears];\r\n })();\r\n\r\n const differentialString = relativeLookupTable[differenceLookup[0]].replace('%d', Math.ceil(differenceLookup[1]));\r\n\r\n return withoutSuffix\r\n ? differentialString\r\n : (isFuture ? relativeLookupTable['future'] : relativeLookupTable['past']).replace('%s', differentialString);\r\n}\r\n\r\nexport function getIsWithinBusinessHours({ date = new Date() } = {}) {\r\n const currentPacificHourString = new Date(date).toLocaleString('en-US', {\r\n timeZone: 'America/Los_Angeles',\r\n hour: 'numeric',\r\n hour12: false\r\n });\r\n const currentPacificHour = parseInt(currentPacificHourString);\r\n\r\n return currentPacificHour >= 9 && currentPacificHour < 17;\r\n}\r\n\r\n/**\r\n * This function is intended to replicate the functionality of moment.format(moment.HTML5_FMT.DATETIME_LOCAL)\r\n */\r\nexport function formatDateTimeLocal({ date = new Date() } = {}) {\r\n const dateObj = new Date(date);\r\n\r\n const paddedMonth = (dateObj.getMonth() + 1).toString().padStart(2, '0');\r\n const paddedDate = dateObj.getDate().toString().padStart(2, '0');\r\n const paddedHours = dateObj.getHours().toString().padStart(2, '0');\r\n const paddedMinutes = dateObj.getMinutes().toString().padStart(2, '0');\r\n\r\n return `${dateObj.getFullYear()}-${paddedMonth}-${paddedDate}T${paddedHours}:${paddedMinutes}`;\r\n}\r\n\r\nfunction fromNowVerbose(utcDate, withoutSuffix) {\r\n return momentFrom({ compareDate: convertToDate(utcDate), withoutSuffix }).replace('in a few seconds', 'just now');\r\n}\r\n\r\nfunction fromNow(utcDateString, format = 'long') {\r\n const inputDate = convertToDate(utcDateString);\r\n\r\n const now = new Date();\r\n const secondsApart = (now.getTime() - inputDate.getTime()) / 1000;\r\n\r\n if (secondsApart < 3) {\r\n return 'Now';\r\n }\r\n\r\n const today = new Date(now);\r\n const secondsSinceMidnight = (now - today.setHours(0, 0, 0, 0)) / 1000;\r\n\r\n if (secondsApart <= secondsSinceMidnight) {\r\n return 'Today';\r\n }\r\n\r\n const yesterday = new Date(now);\r\n yesterday.setHours(0, 0, 0, 0);\r\n yesterday.setDate(now.getDate() - 1);\r\n\r\n const secondsSinceMidnightYesterday = (now - yesterday) / 1000;\r\n if (secondsApart > secondsSinceMidnight && secondsApart <= secondsSinceMidnightYesterday) {\r\n return 'Yesterday';\r\n }\r\n\r\n if (now.getFullYear() === inputDate.getFullYear()) {\r\n let options = { month: 'long', day: 'numeric' };\r\n return inputDate.toLocaleString('en-US', options);\r\n }\r\n\r\n let options = { year: 'numeric', month: format == 'long' ? 'long' : 'numeric', day: 'numeric' };\r\n return inputDate.toLocaleString('en-US', options);\r\n}\r\n\r\nfunction formatDate(utcDateString, dateOptions = { format: 'long', excludeYear: false }) {\r\n const inputDate = convertToDate(utcDateString);\r\n\r\n let options = { month: dateOptions.format, day: 'numeric' };\r\n if (!dateOptions.excludeYear) {\r\n options.year = 'numeric';\r\n }\r\n\r\n return inputDate.toLocaleString('en-US', options);\r\n}\r\n\r\nfunction simpleFromNow(utcDate, withTime, todayDate = new Date()) {\r\n const today = new Date(todayDate);\r\n const yesterday = new Date(today.getTime() - 1000 * 60 * 60 * 24);\r\n const messageDate = convertToDate(utcDate);\r\n const secondsAgo = (today - messageDate) / 1000;\r\n const isToday = messageDate.getDate() === today.getDate() && Math.abs(messageDate - today) < 1000 * 60 * 60 * 24;\r\n const isYesterday =\r\n messageDate.getDate() === yesterday.getDate() && Math.abs(messageDate - today) < 1000 * 60 * 60 * 48;\r\n\r\n const isSameYear = messageDate.getFullYear() === today.getFullYear();\r\n\r\n let dateString = '';\r\n if (secondsAgo < 3) {\r\n dateString = 'Now';\r\n } else if (isToday) {\r\n dateString = 'Today';\r\n } else if (isYesterday) {\r\n dateString = 'Yesterday';\r\n } else if (isSameYear) {\r\n dateString = messageDate.toLocaleString('en-US', { month: 'short', day: 'numeric' });\r\n } else {\r\n dateString = messageDate.toLocaleString('en-US', { month: 'numeric', day: 'numeric', year: '2-digit' });\r\n }\r\n\r\n if (withTime && secondsAgo >= 3) {\r\n const messageTime = messageDate.toLocaleString('en-US', { hour: 'numeric', minute: '2-digit', hour12: true });\r\n dateString = dateString + ' at ' + messageTime;\r\n }\r\n\r\n return dateString;\r\n}\r\n\r\nconst daysApart = (dateString1, dateString2, includeLabel = true) => {\r\n const date1 = convertToDate(dateString1);\r\n const date2 = convertToDate(dateString2);\r\n const secondsApart = Math.abs((date2.getTime() - date1.getTime()) / 1000);\r\n const days = Math.floor(secondsApart / 86400);\r\n return includeLabel ? `${days} day${days > 1 ? 's' : ''}` : days;\r\n};\r\n\r\nconst hoursApart = (dateString1, dateString2) => {\r\n const date1 = convertToDate(dateString1);\r\n const date2 = convertToDate(dateString2);\r\n const secondsApart = Math.abs((date2.getTime() - date1.getTime()) / 1000);\r\n return Math.floor(secondsApart / (60 * 60));\r\n};\r\n\r\nfunction fromDate(dateString1, dateString2) {\r\n if (!dateString1 || !dateString2) return false;\r\n\r\n let from;\r\n const date1 = convertToDate(dateString1).getTime();\r\n const date2 = convertToDate(dateString2).getTime();\r\n\r\n // convert to positive and make seconds vs milliseconds\r\n const difference = Math.abs(date2 - date1) / 1000;\r\n\r\n const years = 60 * 60 * 24 * 365;\r\n const months = 60 * 60 * 24 * 30;\r\n const days = 60 * 60 * 24;\r\n const hours = 60 * 60;\r\n\r\n if (difference / years > 1) {\r\n from = Math.floor(difference / years);\r\n from += from > 1 ? ' years' : ' year';\r\n } else if (difference / months > 1) {\r\n from = Math.floor(difference / months);\r\n from += from > 1 ? ' months' : ' month';\r\n } else if (difference / days > 1) {\r\n from = Math.floor(difference / days);\r\n from += from > 1 ? ' days' : ' day';\r\n } else if (difference / hours > 1) {\r\n from = Math.floor(difference / hours);\r\n from += from > 1 ? ' hours' : ' hour';\r\n } else if (difference / 60 > 1) {\r\n from = Math.floor(difference / 60);\r\n from += from > 1 ? ' minutes' : ' minute';\r\n } else {\r\n from = 'seconds';\r\n }\r\n\r\n return from;\r\n}\r\n\r\nexport {\r\n adjustDateToLocalizedDate,\r\n convertToDate,\r\n fromNow,\r\n formatDate,\r\n isNewerThan,\r\n simpleFromNow,\r\n fromNowVerbose,\r\n dayOfTheWeek,\r\n monthOfTheYear,\r\n daysApart,\r\n hoursApart,\r\n fromDate\r\n};\r\n"],"names":["ImageHostOverride","IS_DEV_MODE","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_SPORT","ENUM_UTM_MEDIUM","INTERCOM_APPID","WWW_URL","FACEBOOK_APP_ID","DEFAULT_TEAM_LOGO_URL_HS","DEFAULT_TEAM_LOGO_URL_COLLEGE","METRICS_ENABLED_LIST","http","cacheString","createCacheString","pubSub","createSimplePubSub","resetCacheString","teamId","publish","getCacheString","subscribe","shortName","set","keyName","keyValue","ttl","data","value","Date","now","localStorage","setItem","JSON","stringify","get","getItem","item","parse","removeItem","getStorageKeyName","username","concat","toLowerCase","setCachedImageGuid","imageGuid","Storage","getCachedImageGuid","userGuid","HEADSHOT_SIZES","LOGO_SIZES","CF_BASE_URL","IMAGE_BASE_URL","Environment","WEBAPI_PATH","checkHeadshotSize","size","includes","Error","checkLogoSize","console","warn","imageSrcManager","_ref","athleteHeadshotCache","userHeadshotCache","updateAthleteHeadshotCache","_ref6","subscribeToAthleteHeadshotCache","updateUserHeadshotCache","_ref7","subscribeToUserHeadshotCache","updateOrgLogoCache","_ref8","orgLogoCache","subscribeToOrgLogoCache","updateTeamLogoCache","_ref9","teamLogoCache","subscribeToTeamLogoCache","getUserHeadshotSrc","_ref2","guid","componentSize","cachedImageGuid","imgSize","imgName","imgSrc","getAthleteHeadshotSrc","_ref3","isAnonymous","placeholderSrc","getOrgLogoSrc","_ref4","isBlurred","breakCache","blurredUrl","logoUrl","logoSrc","getTeamLogoSrc","_ref5","sportEnum","short","team","sport","Number","isInteger","getSport","makeImageSrcManager","convertOptionsCase","options","map","option","convertedOption","Object","keys","key","_camelCase","sportId","filter","i","Value","EnumName","getProjectionLevels","projectedLevels","sportLevels","projectedLevel","_level$Label","level","find","sl","reportError","Label","label","join","convertToTeamObject","organization","OrganizationName","ShortName","AthleticAssociationEnum","City","State","SportEnum","TeamId","arguments","length","undefined","getTime","dayOfTheWeek","date","format","toLocaleString","weekday","monthOfTheYear","month","adjustDateToLocalizedDate","newDate","offsetInMiilis","getTimezoneOffset","convertToDate","utcDateString","setTime","fromNowVerbose","utcDate","withoutSuffix","compareDate","baseDate","diffInMs","isFuture","relativeLookupTable","future","past","s","m","mm","h","hh","d","dd","w","ww","M","MM","y","yy","differenceLookup","diffInSeconds","Math","abs","diffInMinutes","diffInHours","diffInDays","diffInMonths","min","diffInYears","differentialString","replace","ceil","momentFrom","fromNow","inputDate","secondsApart","secondsSinceMidnight","setHours","yesterday","setDate","getDate","getFullYear","day","year","formatDate","dateOptions","excludeYear","simpleFromNow","withTime","todayDate","today","messageDate","secondsAgo","isToday","isYesterday","isSameYear","dateString","hour","minute","hour12"],"sourceRoot":""}