@maestro_io/maestro-web-sdk 3.3.1 → 4.0.0-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (269) hide show
  1. package/dist/f8820fca3a2a7957f753167da0884f9d.png +0 -0
  2. package/dist/maestro-web-sdk.esm.js +12 -12
  3. package/dist/maestro-web-sdk.esm.js.map +1 -1
  4. package/dist/maestro-web-sdk.umd.js +12 -12
  5. package/dist/maestro-web-sdk.umd.js.map +1 -1
  6. package/dist/package.json +87 -0
  7. package/dist/src/__mocks__/sentry.d.ts +4 -0
  8. package/dist/src/components/atoms/BaseButton/BaseButton.js +11 -0
  9. package/dist/src/components/atoms/BaseButton/index.js +2 -0
  10. package/dist/src/components/atoms/Image/index.js +34 -0
  11. package/dist/src/components/atoms/Rive/index.js +53 -0
  12. package/dist/src/components/atoms/SvgIcon/BetGeneralIcon.js +9 -0
  13. package/dist/src/components/atoms/SvgIcon/BetsIcon.js +11 -0
  14. package/dist/src/components/atoms/SvgIcon/BetsWarningIcon.js +11 -0
  15. package/dist/src/components/atoms/SvgIcon/CheckmarkIcon.js +6 -0
  16. package/dist/src/components/atoms/SvgIcon/CollapseIcon.js +6 -0
  17. package/dist/src/components/atoms/SvgIcon/ExpandIcon.js +6 -0
  18. package/dist/src/components/atoms/SvgIcon/FantasyIcon.js +15 -0
  19. package/dist/src/components/atoms/SvgIcon/FlameIcon.js +11 -0
  20. package/dist/src/components/atoms/SvgIcon/Icon.js +44 -0
  21. package/dist/src/components/atoms/SvgIcon/KeyPlaysIcon.js +10 -0
  22. package/dist/src/components/atoms/SvgIcon/MobilePhoneIcon.js +11 -0
  23. package/dist/src/components/atoms/SvgIcon/PlayIcon.js +8 -0
  24. package/dist/src/components/atoms/SvgIcon/ShopIcon.js +7 -0
  25. package/dist/src/components/atoms/SvgIcon/StatsIcon.js +12 -0
  26. package/dist/src/components/atoms/SvgIcon/TimesIcon.js +6 -0
  27. package/dist/src/components/atoms/SvgIcon/WarningIcon.js +8 -0
  28. package/dist/src/components/atoms/SvgIcon/index.js +2 -0
  29. package/dist/src/components/core/App/App.js +35 -0
  30. package/dist/src/components/core/App/index.js +2 -0
  31. package/dist/src/components/core/OverlayContainer.js +58 -0
  32. package/dist/src/components/core/PanelManager/PanelManager.js +86 -0
  33. package/dist/src/components/core/PanelManager/index.js +2 -0
  34. package/dist/src/components/core/ScrollableContainer/FocusableItem.js +38 -0
  35. package/dist/src/components/core/ScrollableContainer/ScrollableContainer.js +168 -0
  36. package/dist/src/components/core/ScrollableContainer/index.js +2 -0
  37. package/dist/src/components/molecules/ActionButton/ActionButton.js +10 -0
  38. package/dist/src/components/molecules/ActionButton/index.js +2 -0
  39. package/dist/src/components/molecules/HeadshotImage/HeadshotImage.js +50 -0
  40. package/dist/src/components/molecules/HeadshotImage/index.js +2 -0
  41. package/dist/src/components/molecules/Overlay/Overlay.js +139 -0
  42. package/dist/src/components/molecules/Overlay/index.js +2 -0
  43. package/dist/src/components/molecules/PanelNavButton/PanelNavButton.js +27 -0
  44. package/dist/src/components/molecules/PanelNavButton/index.js +2 -0
  45. package/dist/src/components/molecules/SegmentButton/SegmentButton.js +10 -0
  46. package/dist/src/components/molecules/SegmentButton/index.js +2 -0
  47. package/dist/src/components/molecules/TabLoadError/TabLoadError.js +14 -0
  48. package/dist/src/components/molecules/TabLoadError/index.js +2 -0
  49. package/dist/src/components/molecules/WatchButton/WatchButton.js +15 -0
  50. package/dist/src/components/molecules/WatchButton/index.js +2 -0
  51. package/dist/src/components/organisms/PanelNavigation/PanelNavigation.js +60 -0
  52. package/dist/src/components/organisms/PanelNavigation/index.js +2 -0
  53. package/dist/src/components/organisms/SegmentController/SegmentController.js +76 -0
  54. package/dist/src/components/organisms/SegmentController/index.js +2 -0
  55. package/dist/src/development/MaestroEventDelegate.js +109 -0
  56. package/dist/src/development/TimeSeek.js +218 -0
  57. package/dist/src/development/development.js +33 -0
  58. package/dist/src/external/AxiosNetworkClient.js +110 -0
  59. package/dist/src/external/LocalStorageCacheManager.js +213 -0
  60. package/dist/src/external/ReactRenderer.js +53 -0
  61. package/dist/src/external/mocks/MockExternalNetworkClient.js +187 -0
  62. package/dist/src/external/ports/cacheManager.js +1 -0
  63. package/dist/src/external/ports/networkClient.js +1 -0
  64. package/dist/src/external/ports/renderer.d.ts +1 -2
  65. package/dist/src/external/ports/renderer.js +1 -0
  66. package/dist/src/external/spatial-navigation/__mocks__/withFocusable.d.ts +8 -0
  67. package/dist/src/external/spatial-navigation/__mocks__/withFocusable.js +7 -0
  68. package/dist/src/external/spatial-navigation/index.js +3 -0
  69. package/dist/src/external/spatial-navigation/measureLayout.js +30 -0
  70. package/dist/src/external/spatial-navigation/spatialNavigation.js +876 -0
  71. package/dist/src/external/spatial-navigation/utils.js +6 -0
  72. package/dist/src/external/spatial-navigation/visualDebugger.js +76 -0
  73. package/dist/src/external/spatial-navigation/withFocusable.js +245 -0
  74. package/dist/src/helpers/Observable.js +37 -0
  75. package/dist/src/helpers/strings.js +14 -0
  76. package/dist/src/helpers/url.js +12 -0
  77. package/dist/src/index.d.ts +5 -5
  78. package/dist/src/index.js +165 -0
  79. package/dist/src/interfaces/IMaestroEvent.d.ts +12 -0
  80. package/dist/src/interfaces/IMaestroEvent.js +18 -0
  81. package/dist/src/interfaces/IMaestroEventDelegate.js +1 -0
  82. package/dist/src/interfaces/IMaestroManager.js +1 -0
  83. package/dist/src/interfaces/IUserSettings.js +20 -0
  84. package/dist/src/models/IModel.js +1 -0
  85. package/dist/src/models/IPanel.js +40 -0
  86. package/dist/src/models/ITheme.js +20 -0
  87. package/dist/src/models/IWinningBet.js +1 -0
  88. package/dist/src/modules/bets/interfaces/IBets.js +1 -0
  89. package/dist/src/modules/bets/mocks.js +573 -0
  90. package/dist/src/modules/bets/types/BetsAnalyticsTypes.js +1 -0
  91. package/dist/src/modules/bets/view/BetsView.js +143 -0
  92. package/dist/src/modules/bets/view/HotProps/HotPropsView.js +150 -0
  93. package/dist/src/modules/bets/view/SixPack/SixPackView.js +110 -0
  94. package/dist/src/modules/bets/view/UserBets/BetResult/BetResult.js +6 -0
  95. package/dist/src/modules/bets/view/UserBets/BetsCard/BetsCard.js +149 -0
  96. package/dist/src/modules/bets/view/UserBets/BetsCard/BetsCardEvent.js +34 -0
  97. package/dist/src/modules/bets/view/UserBets/BetsCard/BetsCardFooter.js +18 -0
  98. package/dist/src/modules/bets/view/UserBets/Boost/Boost.js +6 -0
  99. package/dist/src/modules/bets/view/UserBets/OutcomeBadge/OutcomeBadge.js +9 -0
  100. package/dist/src/modules/bets/view/UserBets/Parlay/Parlay.js +13 -0
  101. package/dist/src/modules/bets/view/UserBets/Straight/Straight.js +6 -0
  102. package/dist/src/modules/bets/view/UserBets/Teaser/Teaser.js +13 -0
  103. package/dist/src/modules/bets/view/UserBets/UserBetsView.js +107 -0
  104. package/dist/src/modules/bets/view/components/Bet/Bet.js +32 -0
  105. package/dist/src/modules/bets/view/components/BetPill/BetPill.js +6 -0
  106. package/dist/src/modules/bets/view/components/BetsCard/BetsCard.js +15 -0
  107. package/dist/src/modules/bets/view/components/BetsCard/BetsCardHeader.js +20 -0
  108. package/dist/src/modules/bets/view/components/GamblingDisclaimer/GamblingDisclaimer.js +14 -0
  109. package/dist/src/modules/bets/view/components/LocationWarning/LocationWarning.js +16 -0
  110. package/dist/src/modules/bets/view/components/PromoCodeBanner/PromoCodeBanner.js +78 -0
  111. package/dist/src/modules/bets/view/components/PromoCodeBanner/index.js +1 -0
  112. package/dist/src/modules/bets/view-model/BetsViewModel.js +974 -0
  113. package/dist/src/modules/fantasy/components/ExpandedAthleteList/ExpandedAthletesList.js +107 -0
  114. package/dist/src/modules/fantasy/components/ExpandedAthleteList/index.js +1 -0
  115. package/dist/src/modules/fantasy/components/LeagueCard/LeagueCard.js +20 -0
  116. package/dist/src/modules/fantasy/components/LeagueCard/index.js +2 -0
  117. package/dist/src/modules/fantasy/components/TopPlayerCard/TopPlayerCard.js +29 -0
  118. package/dist/src/modules/fantasy/components/TopPlayerCard/index.js +2 -0
  119. package/dist/src/modules/fantasy/mocks.js +3682 -0
  120. package/dist/src/modules/fantasy/types.js +6 -0
  121. package/dist/src/modules/fantasy/view/ActiveAthletesMarquee/ActiveAthletesMarquee.js +74 -0
  122. package/dist/src/modules/fantasy/view/ActiveAthletesMarquee/index.js +2 -0
  123. package/dist/src/modules/fantasy/view/ErrorBoundary.d.ts +13 -0
  124. package/dist/src/modules/fantasy/view/FantasyItemView.js +74 -0
  125. package/dist/src/modules/fantasy/view/FantasyView.js +133 -0
  126. package/dist/src/modules/fantasy/view/InactiveLeague/DraftDateCountdown.js +95 -0
  127. package/dist/src/modules/fantasy/view/InactiveLeague/InactiveLeague.js +13 -0
  128. package/dist/src/modules/fantasy/view/InactiveLeague/index.js +2 -0
  129. package/dist/src/modules/fantasy/view/LoginView/LoginView.js +27 -0
  130. package/dist/src/modules/fantasy/view/LoginView/index.js +2 -0
  131. package/dist/src/modules/fantasy/view/MatchupPair/DoubleAthleteCard/DoubleAthleteCard.js +25 -0
  132. package/dist/src/modules/fantasy/view/MatchupPair/DoubleAthleteCard/index.js +2 -0
  133. package/dist/src/modules/fantasy/view/MatchupPair/ExpandedDoubleAthleteCards.js +9 -0
  134. package/dist/src/modules/fantasy/view/MatchupPair/MatchupPair.js +118 -0
  135. package/dist/src/modules/fantasy/view/MatchupPair/index.js +2 -0
  136. package/dist/src/modules/fantasy/view/MatchupSingle/ExpandedSingleAthleteCards.js +9 -0
  137. package/dist/src/modules/fantasy/view/MatchupSingle/MatchupSingle.js +108 -0
  138. package/dist/src/modules/fantasy/view/MatchupSingle/SingleAthleteCard/SingleAthleteCard.js +18 -0
  139. package/dist/src/modules/fantasy/view/MatchupSingle/SingleAthleteCard/index.js +2 -0
  140. package/dist/src/modules/fantasy/view/MatchupSingle/index.js +2 -0
  141. package/dist/src/modules/fantasy/view/PromoView/PromoView.js +12 -0
  142. package/dist/src/modules/fantasy/view/PromoView/index.js +2 -0
  143. package/dist/src/modules/fantasy/view/index.js +2 -0
  144. package/dist/src/modules/fantasy/view-model/FantasyViewModel.FantasyPolling.js +132 -0
  145. package/dist/src/modules/fantasy/view-model/FantasyViewModel.LeagueManagerPolling.js +141 -0
  146. package/dist/src/modules/fantasy/view-model/FantasyViewModel.js +534 -0
  147. package/dist/src/modules/key-plays/constants.js +292 -0
  148. package/dist/src/modules/key-plays/interfaces/IKeyPlays.js +14 -0
  149. package/dist/src/modules/key-plays/interfaces/IKeyPlaysResponse.js +1 -0
  150. package/dist/src/modules/key-plays/view/KeyPlayCardScoreTagView.js +16 -0
  151. package/dist/src/modules/key-plays/view/KeyPlayCardView.js +144 -0
  152. package/dist/src/modules/key-plays/view/KeyPlayErrorStateView.js +65 -0
  153. package/dist/src/modules/key-plays/view/KeyPlaysView.js +151 -0
  154. package/dist/src/modules/key-plays/view-model/KeyPlaysViewModel.js +246 -0
  155. package/dist/src/modules/shop/mocks.js +390 -0
  156. package/dist/src/modules/shop/types.js +7 -0
  157. package/dist/src/modules/shop/view/ProductDetailView/ProductDetailView.js +56 -0
  158. package/dist/src/modules/shop/view/ProductDetailView/index.js +2 -0
  159. package/dist/src/modules/shop/view/ShopView.js +182 -0
  160. package/dist/src/modules/shop/view/components/BrowseCard/BrowseCard.js +23 -0
  161. package/dist/src/modules/shop/view/components/BrowseCard/index.js +2 -0
  162. package/dist/src/modules/shop/view/components/ProductSummaryCard/ProductSummaryCard.js +26 -0
  163. package/dist/src/modules/shop/view/components/ProductSummaryCard/index.js +1 -0
  164. package/dist/src/modules/shop/view/components/ShopPromoView/ShopPromoView.js +19 -0
  165. package/dist/src/modules/shop/view/components/ShopPromoView/index.js +1 -0
  166. package/dist/src/modules/shop/view/components/ShopSection/ShopSection.d.ts +1 -0
  167. package/dist/src/modules/shop/view/components/ShopSection/ShopSection.js +61 -0
  168. package/dist/src/modules/shop/view/components/ShopSection/ShopSectionItem.d.ts +18 -0
  169. package/dist/src/modules/shop/view/components/ShopSection/ShopSectionItem.js +22 -0
  170. package/dist/src/modules/shop/view/components/ShopSection/index.js +1 -0
  171. package/dist/src/modules/shop/view/index.js +2 -0
  172. package/dist/src/modules/shop/view-model/ShopViewModel.ShopPolling.js +111 -0
  173. package/dist/src/modules/shop/view-model/ShopViewModel.js +353 -0
  174. package/dist/src/modules/stats/interfaces/IStats.js +1 -0
  175. package/dist/src/modules/stats/mocks.js +746 -0
  176. package/dist/src/modules/stats/utils/driveSummaryUtils.js +48 -0
  177. package/dist/src/modules/stats/utils/renderTeamStatistic.js +16 -0
  178. package/dist/src/modules/stats/utils.js +62 -0
  179. package/dist/src/modules/stats/view/ActiveAthletes/ActiveAthletes.js +98 -0
  180. package/dist/src/modules/stats/view/ActiveAthletes/CollapsedAthletes/CollapsedAthletes.js +27 -0
  181. package/dist/src/modules/stats/view/ActiveAthletes/ExpandedAthletes/ExpandedAthletes.js +89 -0
  182. package/dist/src/modules/stats/view/ActiveAthletes/index.js +2 -0
  183. package/dist/src/modules/stats/view/DriveSummary/DrivePlayCard.js +70 -0
  184. package/dist/src/modules/stats/view/DriveSummary/DriveSummary.js +87 -0
  185. package/dist/src/modules/stats/view/DriveSummary/ExpandedItems/DriveSummaryExpanded.js +129 -0
  186. package/dist/src/modules/stats/view/DriveSummary/Header/DriveSummaryHeader.js +26 -0
  187. package/dist/src/modules/stats/view/DriveSummary/MainStat/MainStat.js +24 -0
  188. package/dist/src/modules/stats/view/DriveSummary/index.js +2 -0
  189. package/dist/src/modules/stats/view/GameLeaders/GameLeaders.js +48 -0
  190. package/dist/src/modules/stats/view/GameLeaders/index.js +2 -0
  191. package/dist/src/modules/stats/view/MatchPredictor/DonutChart/DonutChart.js +55 -0
  192. package/dist/src/modules/stats/view/MatchPredictor/DonutChart/index.js +1 -0
  193. package/dist/src/modules/stats/view/MatchPredictor/MatchPredictorView.js +60 -0
  194. package/dist/src/modules/stats/view/MatchPredictor/index.js +2 -0
  195. package/dist/src/modules/stats/view/Penalties/Penalties.js +6 -0
  196. package/dist/src/modules/stats/view/Penalties/index.js +2 -0
  197. package/dist/src/modules/stats/view/RecentGames/RecentGames.js +23 -0
  198. package/dist/src/modules/stats/view/RecentGames/index.js +2 -0
  199. package/dist/src/modules/stats/view/ScoringSummary/ExpandedScores/ExpandedScores.js +121 -0
  200. package/dist/src/modules/stats/view/ScoringSummary/ExpandedScores/index.js +2 -0
  201. package/dist/src/modules/stats/view/ScoringSummary/ScoreItem/ScoreItem.js +62 -0
  202. package/dist/src/modules/stats/view/ScoringSummary/ScoreItem/index.js +2 -0
  203. package/dist/src/modules/stats/view/ScoringSummary/ScoresSection/ScoresSection.js +23 -0
  204. package/dist/src/modules/stats/view/ScoringSummary/ScoresSection/index.js +2 -0
  205. package/dist/src/modules/stats/view/ScoringSummary/ScoringSummary.js +106 -0
  206. package/dist/src/modules/stats/view/ScoringSummary/index.js +2 -0
  207. package/dist/src/modules/stats/view/StatsItemView.js +92 -0
  208. package/dist/src/modules/stats/view/StatsQRCode/StatsQRCodeView.js +36 -0
  209. package/dist/src/modules/stats/view/StatsQRCode/index.js +1 -0
  210. package/dist/src/modules/stats/view/StatsView.js +137 -0
  211. package/dist/src/modules/stats/view/TeamStats/TeamStatsView.js +43 -0
  212. package/dist/src/modules/stats/view/TeamStats/index.js +1 -0
  213. package/dist/src/modules/stats/view/Teams/StatsCarousel.js +83 -0
  214. package/dist/src/modules/stats/view/Teams/StatsProgressBar.js +19 -0
  215. package/dist/src/modules/stats/view/Teams/Teams.js +27 -0
  216. package/dist/src/modules/stats/view/Teams/index.js +2 -0
  217. package/dist/src/modules/stats/view/WinProbability/WinProbability.js +28 -0
  218. package/dist/src/modules/stats/view/WinProbability/index.js +2 -0
  219. package/dist/src/modules/stats/view/components/AthletesStatistics/AthletesStatistics.js +89 -0
  220. package/dist/src/modules/stats/view/components/AthletesStatistics/StatisticTable.js +12 -0
  221. package/dist/src/modules/stats/view/components/AthletesStatistics/index.js +2 -0
  222. package/dist/src/modules/stats/view/index.js +2 -0
  223. package/dist/src/modules/stats/view-model/StatsViewModel.d.ts +5 -0
  224. package/dist/src/modules/stats/view-model/StatsViewModel.js +989 -0
  225. package/dist/src/sentry.js +31 -0
  226. package/dist/src/services/AnalyticsService/AnalyticsService.d.ts +12 -7
  227. package/dist/src/services/AnalyticsService/AnalyticsService.js +402 -0
  228. package/dist/src/services/AnalyticsService/types.js +1 -0
  229. package/dist/src/services/BetsService.js +122 -0
  230. package/dist/src/services/FantasyService.js +92 -0
  231. package/dist/src/services/GlobalService/GlobalService.d.ts +9 -0
  232. package/dist/src/services/GlobalService/PageService.d.ts +9 -0
  233. package/dist/src/services/GlobalService/index.d.ts +2 -0
  234. package/dist/src/services/GlobalService/mocks.d.ts +2 -0
  235. package/dist/src/services/GlobalService/types.d.ts +11 -0
  236. package/dist/src/services/InsightsService/InsightsPayloadBuilder.d.ts +1 -2
  237. package/dist/src/services/InsightsService/InsightsPayloadBuilder.js +386 -0
  238. package/dist/src/services/InsightsService/InsightsService.js +74 -0
  239. package/dist/src/services/NetworkManager/NetworkManager.js +457 -0
  240. package/dist/src/services/NetworkManager/NetworkManagerFactory.js +101 -0
  241. package/dist/src/services/NetworkManager/errors.js +45 -0
  242. package/dist/src/services/NetworkManager/types.js +10 -0
  243. package/dist/src/services/PageService/PageService.d.ts +9 -0
  244. package/dist/src/services/PageService/PageService.js +39 -0
  245. package/dist/src/services/PageService/index.d.ts +2 -0
  246. package/dist/src/services/PageService/index.js +2 -0
  247. package/dist/src/services/PageService/mocks.d.ts +2 -0
  248. package/dist/src/services/PageService/mocks.js +104 -0
  249. package/dist/src/services/PageService/types.d.ts +76 -0
  250. package/dist/src/services/PageService/types.js +1 -0
  251. package/dist/src/services/ShopService.js +46 -0
  252. package/dist/src/services/StaticService/PageService.d.ts +9 -0
  253. package/dist/src/services/StaticService/StaticService.d.ts +3 -1
  254. package/dist/src/services/StaticService/StaticService.js +59 -0
  255. package/dist/src/services/StaticService/index.js +2 -0
  256. package/dist/src/services/StaticService/mocks.js +104 -0
  257. package/dist/src/services/StaticService/types.js +1 -0
  258. package/dist/src/services/StatsService.d.ts +1 -0
  259. package/dist/src/services/StatsService.js +147 -0
  260. package/dist/src/services/ThemeManager/constants.js +47 -0
  261. package/dist/src/services/UserSettingsManager.js +155 -0
  262. package/dist/src/test-polyfills.js +15 -0
  263. package/dist/src/types/OverlayTypes.js +4 -0
  264. package/dist/src/view-models/MaestroEventViewModel.d.ts +1 -2
  265. package/dist/src/view-models/MaestroEventViewModel.js +307 -0
  266. package/dist/src/view-models/OverlayViewModel.js +222 -0
  267. package/dist/src/view-models/PanelManagerViewModel.js +212 -0
  268. package/dist/src/view-models/ViewModel.js +32 -0
  269. package/package.json +1 -1
@@ -0,0 +1,108 @@
1
+ import { withFocusable, } from '@/external/spatial-navigation';
2
+ import React from 'react';
3
+ import LeagueCard from '../../components/LeagueCard';
4
+ import './MatchupSingle.styles.css';
5
+ import Image from '@/components/atoms/Image';
6
+ import SDK from '@/index';
7
+ import ExpandedSingleAthleteCards from './ExpandedSingleAthleteCards';
8
+ import ActiveAthletesMarquee from '../ActiveAthletesMarquee';
9
+ class MatchupSingle extends React.Component {
10
+ constructor() {
11
+ super(...arguments);
12
+ Object.defineProperty(this, "state", {
13
+ enumerable: true,
14
+ configurable: true,
15
+ writable: true,
16
+ value: {
17
+ expanded: false,
18
+ }
19
+ });
20
+ Object.defineProperty(this, "onAthleteArrowPress", {
21
+ enumerable: true,
22
+ configurable: true,
23
+ writable: true,
24
+ value: (index) => (d) => {
25
+ if (d === 'left') {
26
+ SDK.getMaestroEventViewModel().deliverFocus();
27
+ return false;
28
+ }
29
+ if (d === 'up' && index === 0) {
30
+ SDK.getMaestroEventViewModel().navigation.setFocus(this.focusKey);
31
+ this.setState({
32
+ expanded: false,
33
+ });
34
+ return false;
35
+ }
36
+ if (d === 'down' &&
37
+ index === this.props.item.roster.length &&
38
+ !this.props.item.topPlayers.length) {
39
+ this.setState({
40
+ expanded: false,
41
+ }, () => {
42
+ SDK.getMaestroEventViewModel().navigation.navigateByDirection('down');
43
+ });
44
+ return false;
45
+ }
46
+ if (d === 'down' &&
47
+ index ===
48
+ this.props.item.roster.length + this.props.item.topPlayers.length - 1) {
49
+ this.setState({
50
+ expanded: false,
51
+ }, () => {
52
+ SDK.getMaestroEventViewModel().navigation.navigateByDirection('down');
53
+ });
54
+ return false;
55
+ }
56
+ return true;
57
+ }
58
+ });
59
+ Object.defineProperty(this, "onAthleteBackPress", {
60
+ enumerable: true,
61
+ configurable: true,
62
+ writable: true,
63
+ value: () => {
64
+ this.setState({
65
+ expanded: false,
66
+ }, () => {
67
+ SDK.getMaestroEventViewModel().navigation.setFocus(this.focusKey);
68
+ });
69
+ }
70
+ });
71
+ }
72
+ get focusKey() {
73
+ return this.props.item.id;
74
+ }
75
+ onEnterPress() {
76
+ if (!this.shouldExpand) {
77
+ this.props.onEnterPress();
78
+ return;
79
+ }
80
+ const newValue = !this.state.expanded;
81
+ this.setState({
82
+ expanded: newValue,
83
+ }, () => {
84
+ if (newValue) {
85
+ SDK.getMaestroEventViewModel().navigation.setFocus(`${this.focusKey}-athlete-0`);
86
+ }
87
+ });
88
+ this.props.onEnterPress();
89
+ }
90
+ get shouldExpand() {
91
+ return this.props.item.roster.length > 0;
92
+ }
93
+ render() {
94
+ return (React.createElement(LeagueCard, { leagueColor: this.props.item.league.color, leagueLogo: this.props.item.league.logo, renderTitle: () => (React.createElement("div", null,
95
+ React.createElement("div", null, this.props.item.league.title),
96
+ this.props.item.league.subtitle && (React.createElement("div", { className: "subtitle" }, this.props.item.league.subtitle)))), expanded: this.state.expanded, shouldExpand: this.shouldExpand, ...this.props, onEnterPress: this.onEnterPress.bind(this), focusKey: this.focusKey },
97
+ React.createElement("div", { className: "matchup-single" },
98
+ React.createElement(Image, { src: this.props.item.team.logo, width: 64, height: 64, alt: "Matchup Single Team logo" }),
99
+ React.createElement("div", { className: "points T50 FONT_BOLD" },
100
+ this.props.item.team.points.toFixed(1),
101
+ ' ',
102
+ this.props.item.team.scoringType,
103
+ " Points")),
104
+ !this.state.expanded && (React.createElement(ActiveAthletesMarquee, { activeAthletes: this.props.item.activeAthletes })),
105
+ this.state.expanded && (React.createElement(ExpandedSingleAthleteCards, { topPlayers: this.props.item.topPlayers, focusKey: this.focusKey, items: this.props.item.roster, onArrowPress: this.onAthleteArrowPress.bind(this), onBackPress: this.onAthleteBackPress.bind(this) }))));
106
+ }
107
+ }
108
+ export default withFocusable()(MatchupSingle);
@@ -0,0 +1,18 @@
1
+ import { withFocusable, } from '@/external/spatial-navigation';
2
+ import React from 'react';
3
+ import './SingleAthleteCard.styles.css';
4
+ import HeadshotImage from '@/components/molecules/HeadshotImage';
5
+ const SingleAthleteCard = (props) => {
6
+ return (React.createElement("div", { className: "roster-single-athlete-card focus-ring FONT_BOLD", "data-focused": props.focused },
7
+ React.createElement("div", { className: "image-wrapper" },
8
+ React.createElement(HeadshotImage, { src: props.athleteHeadshot, alt: "Roster Single Athlete Card Headshot" }),
9
+ React.createElement("div", { className: "athlete-position-badge" },
10
+ ' ',
11
+ React.createElement("span", null, props.athletesSlot))),
12
+ React.createElement("div", { className: "content" },
13
+ React.createElement("div", { className: "name T05_ALT" },
14
+ props.athleteAbbrevName,
15
+ React.createElement("div", { className: "TEXT_200" }, props.teamTriCode)),
16
+ props.proGameStatusLines.map((line, index) => (React.createElement("div", { className: "pro-game-stats-line TEXT_200", key: `${line}-${index}` }, line))))));
17
+ };
18
+ export default withFocusable()(SingleAthleteCard);
@@ -0,0 +1,2 @@
1
+ import SingleAthleteCard from './SingleAthleteCard';
2
+ export default SingleAthleteCard;
@@ -0,0 +1,2 @@
1
+ import MatchupSingle from './MatchupSingle';
2
+ export default MatchupSingle;
@@ -0,0 +1,12 @@
1
+ import React from 'react';
2
+ import { withFocusable, } from '@/external/spatial-navigation';
3
+ import './PromoView.styles.css';
4
+ import Image from '@/components/atoms/Image';
5
+ const PromoView = (props) => {
6
+ return (React.createElement("div", { className: "fantasy-promo-view focus-ring T20", "data-focused": props.focused, style: { backgroundImage: `url(${props.item.background})` } },
7
+ React.createElement(Image, { src: props.item.logo, alt: "Promo Logo", className: "promo-logo" }),
8
+ React.createElement("div", { className: "title" }, props.item.title),
9
+ React.createElement(Image, { src: props.item.qrCode, alt: "QR Code", className: "promo-qr-code" }),
10
+ React.createElement("p", null, props.item.description)));
11
+ };
12
+ export default withFocusable()(PromoView);
@@ -0,0 +1,2 @@
1
+ import PromoView from './PromoView';
2
+ export default PromoView;
@@ -0,0 +1,2 @@
1
+ import FantasyView from './FantasyView';
2
+ export default FantasyView;
@@ -0,0 +1,132 @@
1
+ import SDK from '@/index';
2
+ import { captureException } from '@/sentry';
3
+ import { stringHashCode } from '@/helpers/strings';
4
+ const DEFAULT_FANTASY_POLLING_INTERVAL = 60000;
5
+ export default class FantasyPolling {
6
+ constructor(service) {
7
+ Object.defineProperty(this, "polling", {
8
+ enumerable: true,
9
+ configurable: true,
10
+ writable: true,
11
+ value: {
12
+ interval: DEFAULT_FANTASY_POLLING_INTERVAL,
13
+ task: null,
14
+ lastResponseHash: null,
15
+ }
16
+ });
17
+ Object.defineProperty(this, "fantasyService", {
18
+ enumerable: true,
19
+ configurable: true,
20
+ writable: true,
21
+ value: void 0
22
+ });
23
+ this.fantasyService = service;
24
+ }
25
+ /**
26
+ * Refresh polling for fantasy data
27
+ */
28
+ async refresh(params, callback) {
29
+ // First stop any existing polling
30
+ this.stop();
31
+ // Start the poll loop
32
+ await this.start(params, callback);
33
+ }
34
+ /**
35
+ * Stop polling for fantasy data
36
+ */
37
+ stop() {
38
+ if (this.polling.task) {
39
+ this.polling.task.stop();
40
+ this.polling.task = null;
41
+ }
42
+ }
43
+ removeLastResponseHash() {
44
+ this.polling.lastResponseHash = null;
45
+ }
46
+ async start(params, callback) {
47
+ try {
48
+ this.polling.task = this.fantasyService.pollFantasy(params, this.polling.interval, (response) => {
49
+ this.updateInterval(params, response.headers, callback);
50
+ this.processPolledData(response.data, callback);
51
+ }, (error) => this.handlePollingError(error, params.swid));
52
+ }
53
+ catch (error) {
54
+ captureException(error, {
55
+ context: 'FantasyViewModel.pollFantasy',
56
+ });
57
+ console.error('[FANTASY] Error setting up fantasy polling:', error);
58
+ }
59
+ }
60
+ /**
61
+ * @description Update polling interval checking either response header or panel config.
62
+ * Refresh polling if necessary.
63
+ */
64
+ updateInterval(params, headers, callback) {
65
+ const headerInterval = this.getResponseHeaderPollingIntervalValue(headers);
66
+ const panelConfigInterval = this.getPanelConfigInterval();
67
+ const newInterval = headerInterval || panelConfigInterval; // order matters here
68
+ // Only update if we have a valid new interval and it's different from current
69
+ if (newInterval && newInterval !== this.polling.interval) {
70
+ console.log(`[Fantasy] Updating fantasy polling interval from ${this.polling.interval}ms to ${newInterval}ms`);
71
+ this.polling.interval = newInterval;
72
+ // Restart polling with the new interval
73
+ this.refresh(params, callback);
74
+ }
75
+ }
76
+ getResponseHeaderPollingIntervalValue(headers) {
77
+ const newInterval = headers['polling-interval'];
78
+ if (!newInterval) {
79
+ return null;
80
+ }
81
+ const parsedInterval = parseInt(newInterval, 10);
82
+ if (isNaN(parsedInterval) || parsedInterval <= 0) {
83
+ console.warn(`[Fantasy] Invalid polling interval header received: ${newInterval}.`);
84
+ return null;
85
+ }
86
+ return parsedInterval * 1000; // Convert seconds to milliseconds
87
+ }
88
+ getPanelConfigInterval() {
89
+ const config = SDK.getPageConfig();
90
+ const panel = config?.panels?.find((p) => p.panel_type === 'espnFantasy');
91
+ if (!panel) {
92
+ return null;
93
+ }
94
+ const fantasyPollingInterval = panel.renderer?.block_data?.fan_polling_interval;
95
+ if (!fantasyPollingInterval) {
96
+ return null;
97
+ }
98
+ const parsedInterval = parseInt(fantasyPollingInterval, 10);
99
+ if (isNaN(parsedInterval) || parsedInterval <= 0) {
100
+ console.warn(`[FANTASY] Invalid fantasy polling interval from panel config: ${fantasyPollingInterval}.`);
101
+ return null;
102
+ }
103
+ return parsedInterval * 1000; // Convert seconds to milliseconds
104
+ }
105
+ /**
106
+ * Process data received from polling
107
+ */
108
+ processPolledData(data, callback) {
109
+ // Calculate hash for the response to check if it's different from the last one
110
+ const responseHash = stringHashCode(JSON.stringify(data));
111
+ // Check if this is the same as the last successful response
112
+ if (this.polling.lastResponseHash === responseHash) {
113
+ console.log('[Fantasy] Fantasy Response hash is the same as last successful response - skipping update');
114
+ return;
115
+ }
116
+ this.polling.lastResponseHash = responseHash;
117
+ callback(data);
118
+ }
119
+ /**
120
+ * Handle errors that occur during fantasy polling
121
+ */
122
+ handlePollingError(error, swid) {
123
+ console.error('[FANTASY] Fantasy polling error:', error);
124
+ captureException(error, {
125
+ context: 'FantasyViewModel.pollFantasy',
126
+ extra: {
127
+ swid: swid ? `${swid.substring(0, 8)}...` : 'unknown',
128
+ pollingInterval: this.polling.interval,
129
+ },
130
+ });
131
+ }
132
+ }
@@ -0,0 +1,141 @@
1
+ import SDK from '@/index';
2
+ import { captureException } from '@/sentry';
3
+ import { stringHashCode } from '@/helpers/strings';
4
+ const DEFAULT_LEAGUE_MANAGER_POLLING_INTERVAL = 60000;
5
+ export default class LeagueManagerPolling {
6
+ constructor(service) {
7
+ Object.defineProperty(this, "polling", {
8
+ enumerable: true,
9
+ configurable: true,
10
+ writable: true,
11
+ value: {}
12
+ });
13
+ Object.defineProperty(this, "fantasyService", {
14
+ enumerable: true,
15
+ configurable: true,
16
+ writable: true,
17
+ value: void 0
18
+ });
19
+ this.fantasyService = service;
20
+ }
21
+ /**
22
+ * Refresh polling for league manager data
23
+ */
24
+ refresh(key, params, callback) {
25
+ // First stop any existing polling
26
+ this.stop(key);
27
+ // Initialize polling state if it doesn't exist
28
+ if (!this.polling[key]) {
29
+ this.polling[key] = {
30
+ interval: DEFAULT_LEAGUE_MANAGER_POLLING_INTERVAL,
31
+ lastResponseHash: null,
32
+ task: null,
33
+ };
34
+ }
35
+ // Start the poll loop
36
+ this.start(key, params, callback);
37
+ }
38
+ /**
39
+ * Stop polling for fantasy data
40
+ */
41
+ stop(key) {
42
+ if (this.polling[key]?.task) {
43
+ this.polling[key]?.task?.stop?.();
44
+ this.polling[key].task = null;
45
+ }
46
+ }
47
+ start(key, params, callback) {
48
+ try {
49
+ this.polling[key].task = this.fantasyService.pollLeagueManager(params, this.polling[key].interval, (response) => {
50
+ this.updateInterval(key, params, callback, response.headers);
51
+ this.processPolledData(key, response.data, callback);
52
+ }, (error) => this.handlePollingError(error, key, params));
53
+ }
54
+ catch (error) {
55
+ captureException(error, {
56
+ context: 'FantasyViewModel.pollLeagueManager',
57
+ });
58
+ console.error('[FANTASY] Error setting up league manager polling:', error);
59
+ }
60
+ }
61
+ /**
62
+ * Process data received from polling
63
+ */
64
+ processPolledData(key, data, callback) {
65
+ // Calculate hash for the response to check if it's different from the last one
66
+ const responseHash = stringHashCode(JSON.stringify(data));
67
+ // Check if this is the same as the last successful response
68
+ if (this.polling[key].lastResponseHash === responseHash) {
69
+ console.log('[Fantasy] League manager Response hash is the same as last successful response - skipping update');
70
+ return;
71
+ }
72
+ this.polling[key].lastResponseHash = responseHash;
73
+ callback(data);
74
+ }
75
+ /**
76
+ * @description Update polling interval checking either response header or panel config.
77
+ * Refresh polling if necessary.
78
+ */
79
+ updateInterval(key, params, callback, headers) {
80
+ const headerInterval = this.getResponseHeaderPollingIntervalValue(headers);
81
+ const panelConfigInterval = this.getPanelConfigInterval();
82
+ const newInterval = headerInterval || panelConfigInterval; // order matters here
83
+ // Only update if we have a valid new interval and it's different from current
84
+ if (newInterval && newInterval !== this.polling[key]?.interval) {
85
+ console.log(`[Fantasy] Updating league manager polling interval from ${this.polling[key]?.interval}ms to ${newInterval}ms`);
86
+ this.polling[key].interval = newInterval;
87
+ // Restart polling with the new interval
88
+ this.refresh(key, params, callback);
89
+ }
90
+ }
91
+ getResponseHeaderPollingIntervalValue(headers) {
92
+ const newInterval = headers['polling-interval'];
93
+ if (!newInterval) {
94
+ return null;
95
+ }
96
+ const parsedInterval = parseInt(newInterval, 10);
97
+ if (isNaN(parsedInterval) || parsedInterval <= 0) {
98
+ console.warn(`[Fantasy] Invalid polling interval header received: ${newInterval}.`);
99
+ return null;
100
+ }
101
+ return parsedInterval * 1000; // Convert seconds to milliseconds
102
+ }
103
+ getPanelConfigInterval() {
104
+ const config = SDK.getPageConfig();
105
+ const panel = config?.panels?.find((p) => p.panel_type === 'espnFantasy');
106
+ if (!panel) {
107
+ return null;
108
+ }
109
+ const fantasyPollingInterval = panel.renderer?.block_data?.lm_polling_interval;
110
+ if (!fantasyPollingInterval) {
111
+ return null;
112
+ }
113
+ const parsedInterval = parseInt(fantasyPollingInterval, 10);
114
+ if (isNaN(parsedInterval) || parsedInterval <= 0) {
115
+ console.warn(`[FANTASY] Invalid league manager polling interval from panel config: ${fantasyPollingInterval}.`);
116
+ return null;
117
+ }
118
+ return parsedInterval * 1000; // Convert seconds to milliseconds
119
+ }
120
+ stopAll() {
121
+ Object.keys(this.polling).forEach((key) => {
122
+ this.stop(key);
123
+ });
124
+ this.polling = {};
125
+ }
126
+ /**
127
+ * Handle errors that occur during league manager polling
128
+ */
129
+ handlePollingError(error, key, params) {
130
+ console.error('[FANTASY] League manager polling error:', error);
131
+ captureException(error, {
132
+ context: 'FantasyViewModel.pollLeagueManager',
133
+ extra: {
134
+ key,
135
+ leagueId: params?.leagueId,
136
+ game: params?.game,
137
+ pollingInterval: this.polling[key]?.interval,
138
+ },
139
+ });
140
+ }
141
+ }