@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.
- package/dist/f8820fca3a2a7957f753167da0884f9d.png +0 -0
- package/dist/maestro-web-sdk.esm.js +12 -12
- package/dist/maestro-web-sdk.esm.js.map +1 -1
- package/dist/maestro-web-sdk.umd.js +12 -12
- package/dist/maestro-web-sdk.umd.js.map +1 -1
- package/dist/package.json +87 -0
- package/dist/src/__mocks__/sentry.d.ts +4 -0
- package/dist/src/components/atoms/BaseButton/BaseButton.js +11 -0
- package/dist/src/components/atoms/BaseButton/index.js +2 -0
- package/dist/src/components/atoms/Image/index.js +34 -0
- package/dist/src/components/atoms/Rive/index.js +53 -0
- package/dist/src/components/atoms/SvgIcon/BetGeneralIcon.js +9 -0
- package/dist/src/components/atoms/SvgIcon/BetsIcon.js +11 -0
- package/dist/src/components/atoms/SvgIcon/BetsWarningIcon.js +11 -0
- package/dist/src/components/atoms/SvgIcon/CheckmarkIcon.js +6 -0
- package/dist/src/components/atoms/SvgIcon/CollapseIcon.js +6 -0
- package/dist/src/components/atoms/SvgIcon/ExpandIcon.js +6 -0
- package/dist/src/components/atoms/SvgIcon/FantasyIcon.js +15 -0
- package/dist/src/components/atoms/SvgIcon/FlameIcon.js +11 -0
- package/dist/src/components/atoms/SvgIcon/Icon.js +44 -0
- package/dist/src/components/atoms/SvgIcon/KeyPlaysIcon.js +10 -0
- package/dist/src/components/atoms/SvgIcon/MobilePhoneIcon.js +11 -0
- package/dist/src/components/atoms/SvgIcon/PlayIcon.js +8 -0
- package/dist/src/components/atoms/SvgIcon/ShopIcon.js +7 -0
- package/dist/src/components/atoms/SvgIcon/StatsIcon.js +12 -0
- package/dist/src/components/atoms/SvgIcon/TimesIcon.js +6 -0
- package/dist/src/components/atoms/SvgIcon/WarningIcon.js +8 -0
- package/dist/src/components/atoms/SvgIcon/index.js +2 -0
- package/dist/src/components/core/App/App.js +35 -0
- package/dist/src/components/core/App/index.js +2 -0
- package/dist/src/components/core/OverlayContainer.js +58 -0
- package/dist/src/components/core/PanelManager/PanelManager.js +86 -0
- package/dist/src/components/core/PanelManager/index.js +2 -0
- package/dist/src/components/core/ScrollableContainer/FocusableItem.js +38 -0
- package/dist/src/components/core/ScrollableContainer/ScrollableContainer.js +168 -0
- package/dist/src/components/core/ScrollableContainer/index.js +2 -0
- package/dist/src/components/molecules/ActionButton/ActionButton.js +10 -0
- package/dist/src/components/molecules/ActionButton/index.js +2 -0
- package/dist/src/components/molecules/HeadshotImage/HeadshotImage.js +50 -0
- package/dist/src/components/molecules/HeadshotImage/index.js +2 -0
- package/dist/src/components/molecules/Overlay/Overlay.js +139 -0
- package/dist/src/components/molecules/Overlay/index.js +2 -0
- package/dist/src/components/molecules/PanelNavButton/PanelNavButton.js +27 -0
- package/dist/src/components/molecules/PanelNavButton/index.js +2 -0
- package/dist/src/components/molecules/SegmentButton/SegmentButton.js +10 -0
- package/dist/src/components/molecules/SegmentButton/index.js +2 -0
- package/dist/src/components/molecules/TabLoadError/TabLoadError.js +14 -0
- package/dist/src/components/molecules/TabLoadError/index.js +2 -0
- package/dist/src/components/molecules/WatchButton/WatchButton.js +15 -0
- package/dist/src/components/molecules/WatchButton/index.js +2 -0
- package/dist/src/components/organisms/PanelNavigation/PanelNavigation.js +60 -0
- package/dist/src/components/organisms/PanelNavigation/index.js +2 -0
- package/dist/src/components/organisms/SegmentController/SegmentController.js +76 -0
- package/dist/src/components/organisms/SegmentController/index.js +2 -0
- package/dist/src/development/MaestroEventDelegate.js +109 -0
- package/dist/src/development/TimeSeek.js +218 -0
- package/dist/src/development/development.js +33 -0
- package/dist/src/external/AxiosNetworkClient.js +110 -0
- package/dist/src/external/LocalStorageCacheManager.js +213 -0
- package/dist/src/external/ReactRenderer.js +53 -0
- package/dist/src/external/mocks/MockExternalNetworkClient.js +187 -0
- package/dist/src/external/ports/cacheManager.js +1 -0
- package/dist/src/external/ports/networkClient.js +1 -0
- package/dist/src/external/ports/renderer.d.ts +1 -2
- package/dist/src/external/ports/renderer.js +1 -0
- package/dist/src/external/spatial-navigation/__mocks__/withFocusable.d.ts +8 -0
- package/dist/src/external/spatial-navigation/__mocks__/withFocusable.js +7 -0
- package/dist/src/external/spatial-navigation/index.js +3 -0
- package/dist/src/external/spatial-navigation/measureLayout.js +30 -0
- package/dist/src/external/spatial-navigation/spatialNavigation.js +876 -0
- package/dist/src/external/spatial-navigation/utils.js +6 -0
- package/dist/src/external/spatial-navigation/visualDebugger.js +76 -0
- package/dist/src/external/spatial-navigation/withFocusable.js +245 -0
- package/dist/src/helpers/Observable.js +37 -0
- package/dist/src/helpers/strings.js +14 -0
- package/dist/src/helpers/url.js +12 -0
- package/dist/src/index.d.ts +5 -5
- package/dist/src/index.js +165 -0
- package/dist/src/interfaces/IMaestroEvent.d.ts +12 -0
- package/dist/src/interfaces/IMaestroEvent.js +18 -0
- package/dist/src/interfaces/IMaestroEventDelegate.js +1 -0
- package/dist/src/interfaces/IMaestroManager.js +1 -0
- package/dist/src/interfaces/IUserSettings.js +20 -0
- package/dist/src/models/IModel.js +1 -0
- package/dist/src/models/IPanel.js +40 -0
- package/dist/src/models/ITheme.js +20 -0
- package/dist/src/models/IWinningBet.js +1 -0
- package/dist/src/modules/bets/interfaces/IBets.js +1 -0
- package/dist/src/modules/bets/mocks.js +573 -0
- package/dist/src/modules/bets/types/BetsAnalyticsTypes.js +1 -0
- package/dist/src/modules/bets/view/BetsView.js +143 -0
- package/dist/src/modules/bets/view/HotProps/HotPropsView.js +150 -0
- package/dist/src/modules/bets/view/SixPack/SixPackView.js +110 -0
- package/dist/src/modules/bets/view/UserBets/BetResult/BetResult.js +6 -0
- package/dist/src/modules/bets/view/UserBets/BetsCard/BetsCard.js +149 -0
- package/dist/src/modules/bets/view/UserBets/BetsCard/BetsCardEvent.js +34 -0
- package/dist/src/modules/bets/view/UserBets/BetsCard/BetsCardFooter.js +18 -0
- package/dist/src/modules/bets/view/UserBets/Boost/Boost.js +6 -0
- package/dist/src/modules/bets/view/UserBets/OutcomeBadge/OutcomeBadge.js +9 -0
- package/dist/src/modules/bets/view/UserBets/Parlay/Parlay.js +13 -0
- package/dist/src/modules/bets/view/UserBets/Straight/Straight.js +6 -0
- package/dist/src/modules/bets/view/UserBets/Teaser/Teaser.js +13 -0
- package/dist/src/modules/bets/view/UserBets/UserBetsView.js +107 -0
- package/dist/src/modules/bets/view/components/Bet/Bet.js +32 -0
- package/dist/src/modules/bets/view/components/BetPill/BetPill.js +6 -0
- package/dist/src/modules/bets/view/components/BetsCard/BetsCard.js +15 -0
- package/dist/src/modules/bets/view/components/BetsCard/BetsCardHeader.js +20 -0
- package/dist/src/modules/bets/view/components/GamblingDisclaimer/GamblingDisclaimer.js +14 -0
- package/dist/src/modules/bets/view/components/LocationWarning/LocationWarning.js +16 -0
- package/dist/src/modules/bets/view/components/PromoCodeBanner/PromoCodeBanner.js +78 -0
- package/dist/src/modules/bets/view/components/PromoCodeBanner/index.js +1 -0
- package/dist/src/modules/bets/view-model/BetsViewModel.js +974 -0
- package/dist/src/modules/fantasy/components/ExpandedAthleteList/ExpandedAthletesList.js +107 -0
- package/dist/src/modules/fantasy/components/ExpandedAthleteList/index.js +1 -0
- package/dist/src/modules/fantasy/components/LeagueCard/LeagueCard.js +20 -0
- package/dist/src/modules/fantasy/components/LeagueCard/index.js +2 -0
- package/dist/src/modules/fantasy/components/TopPlayerCard/TopPlayerCard.js +29 -0
- package/dist/src/modules/fantasy/components/TopPlayerCard/index.js +2 -0
- package/dist/src/modules/fantasy/mocks.js +3682 -0
- package/dist/src/modules/fantasy/types.js +6 -0
- package/dist/src/modules/fantasy/view/ActiveAthletesMarquee/ActiveAthletesMarquee.js +74 -0
- package/dist/src/modules/fantasy/view/ActiveAthletesMarquee/index.js +2 -0
- package/dist/src/modules/fantasy/view/ErrorBoundary.d.ts +13 -0
- package/dist/src/modules/fantasy/view/FantasyItemView.js +74 -0
- package/dist/src/modules/fantasy/view/FantasyView.js +133 -0
- package/dist/src/modules/fantasy/view/InactiveLeague/DraftDateCountdown.js +95 -0
- package/dist/src/modules/fantasy/view/InactiveLeague/InactiveLeague.js +13 -0
- package/dist/src/modules/fantasy/view/InactiveLeague/index.js +2 -0
- package/dist/src/modules/fantasy/view/LoginView/LoginView.js +27 -0
- package/dist/src/modules/fantasy/view/LoginView/index.js +2 -0
- package/dist/src/modules/fantasy/view/MatchupPair/DoubleAthleteCard/DoubleAthleteCard.js +25 -0
- package/dist/src/modules/fantasy/view/MatchupPair/DoubleAthleteCard/index.js +2 -0
- package/dist/src/modules/fantasy/view/MatchupPair/ExpandedDoubleAthleteCards.js +9 -0
- package/dist/src/modules/fantasy/view/MatchupPair/MatchupPair.js +118 -0
- package/dist/src/modules/fantasy/view/MatchupPair/index.js +2 -0
- package/dist/src/modules/fantasy/view/MatchupSingle/ExpandedSingleAthleteCards.js +9 -0
- package/dist/src/modules/fantasy/view/MatchupSingle/MatchupSingle.js +108 -0
- package/dist/src/modules/fantasy/view/MatchupSingle/SingleAthleteCard/SingleAthleteCard.js +18 -0
- package/dist/src/modules/fantasy/view/MatchupSingle/SingleAthleteCard/index.js +2 -0
- package/dist/src/modules/fantasy/view/MatchupSingle/index.js +2 -0
- package/dist/src/modules/fantasy/view/PromoView/PromoView.js +12 -0
- package/dist/src/modules/fantasy/view/PromoView/index.js +2 -0
- package/dist/src/modules/fantasy/view/index.js +2 -0
- package/dist/src/modules/fantasy/view-model/FantasyViewModel.FantasyPolling.js +132 -0
- package/dist/src/modules/fantasy/view-model/FantasyViewModel.LeagueManagerPolling.js +141 -0
- package/dist/src/modules/fantasy/view-model/FantasyViewModel.js +534 -0
- package/dist/src/modules/key-plays/constants.js +292 -0
- package/dist/src/modules/key-plays/interfaces/IKeyPlays.js +14 -0
- package/dist/src/modules/key-plays/interfaces/IKeyPlaysResponse.js +1 -0
- package/dist/src/modules/key-plays/view/KeyPlayCardScoreTagView.js +16 -0
- package/dist/src/modules/key-plays/view/KeyPlayCardView.js +144 -0
- package/dist/src/modules/key-plays/view/KeyPlayErrorStateView.js +65 -0
- package/dist/src/modules/key-plays/view/KeyPlaysView.js +151 -0
- package/dist/src/modules/key-plays/view-model/KeyPlaysViewModel.js +246 -0
- package/dist/src/modules/shop/mocks.js +390 -0
- package/dist/src/modules/shop/types.js +7 -0
- package/dist/src/modules/shop/view/ProductDetailView/ProductDetailView.js +56 -0
- package/dist/src/modules/shop/view/ProductDetailView/index.js +2 -0
- package/dist/src/modules/shop/view/ShopView.js +182 -0
- package/dist/src/modules/shop/view/components/BrowseCard/BrowseCard.js +23 -0
- package/dist/src/modules/shop/view/components/BrowseCard/index.js +2 -0
- package/dist/src/modules/shop/view/components/ProductSummaryCard/ProductSummaryCard.js +26 -0
- package/dist/src/modules/shop/view/components/ProductSummaryCard/index.js +1 -0
- package/dist/src/modules/shop/view/components/ShopPromoView/ShopPromoView.js +19 -0
- package/dist/src/modules/shop/view/components/ShopPromoView/index.js +1 -0
- package/dist/src/modules/shop/view/components/ShopSection/ShopSection.d.ts +1 -0
- package/dist/src/modules/shop/view/components/ShopSection/ShopSection.js +61 -0
- package/dist/src/modules/shop/view/components/ShopSection/ShopSectionItem.d.ts +18 -0
- package/dist/src/modules/shop/view/components/ShopSection/ShopSectionItem.js +22 -0
- package/dist/src/modules/shop/view/components/ShopSection/index.js +1 -0
- package/dist/src/modules/shop/view/index.js +2 -0
- package/dist/src/modules/shop/view-model/ShopViewModel.ShopPolling.js +111 -0
- package/dist/src/modules/shop/view-model/ShopViewModel.js +353 -0
- package/dist/src/modules/stats/interfaces/IStats.js +1 -0
- package/dist/src/modules/stats/mocks.js +746 -0
- package/dist/src/modules/stats/utils/driveSummaryUtils.js +48 -0
- package/dist/src/modules/stats/utils/renderTeamStatistic.js +16 -0
- package/dist/src/modules/stats/utils.js +62 -0
- package/dist/src/modules/stats/view/ActiveAthletes/ActiveAthletes.js +98 -0
- package/dist/src/modules/stats/view/ActiveAthletes/CollapsedAthletes/CollapsedAthletes.js +27 -0
- package/dist/src/modules/stats/view/ActiveAthletes/ExpandedAthletes/ExpandedAthletes.js +89 -0
- package/dist/src/modules/stats/view/ActiveAthletes/index.js +2 -0
- package/dist/src/modules/stats/view/DriveSummary/DrivePlayCard.js +70 -0
- package/dist/src/modules/stats/view/DriveSummary/DriveSummary.js +87 -0
- package/dist/src/modules/stats/view/DriveSummary/ExpandedItems/DriveSummaryExpanded.js +129 -0
- package/dist/src/modules/stats/view/DriveSummary/Header/DriveSummaryHeader.js +26 -0
- package/dist/src/modules/stats/view/DriveSummary/MainStat/MainStat.js +24 -0
- package/dist/src/modules/stats/view/DriveSummary/index.js +2 -0
- package/dist/src/modules/stats/view/GameLeaders/GameLeaders.js +48 -0
- package/dist/src/modules/stats/view/GameLeaders/index.js +2 -0
- package/dist/src/modules/stats/view/MatchPredictor/DonutChart/DonutChart.js +55 -0
- package/dist/src/modules/stats/view/MatchPredictor/DonutChart/index.js +1 -0
- package/dist/src/modules/stats/view/MatchPredictor/MatchPredictorView.js +60 -0
- package/dist/src/modules/stats/view/MatchPredictor/index.js +2 -0
- package/dist/src/modules/stats/view/Penalties/Penalties.js +6 -0
- package/dist/src/modules/stats/view/Penalties/index.js +2 -0
- package/dist/src/modules/stats/view/RecentGames/RecentGames.js +23 -0
- package/dist/src/modules/stats/view/RecentGames/index.js +2 -0
- package/dist/src/modules/stats/view/ScoringSummary/ExpandedScores/ExpandedScores.js +121 -0
- package/dist/src/modules/stats/view/ScoringSummary/ExpandedScores/index.js +2 -0
- package/dist/src/modules/stats/view/ScoringSummary/ScoreItem/ScoreItem.js +62 -0
- package/dist/src/modules/stats/view/ScoringSummary/ScoreItem/index.js +2 -0
- package/dist/src/modules/stats/view/ScoringSummary/ScoresSection/ScoresSection.js +23 -0
- package/dist/src/modules/stats/view/ScoringSummary/ScoresSection/index.js +2 -0
- package/dist/src/modules/stats/view/ScoringSummary/ScoringSummary.js +106 -0
- package/dist/src/modules/stats/view/ScoringSummary/index.js +2 -0
- package/dist/src/modules/stats/view/StatsItemView.js +92 -0
- package/dist/src/modules/stats/view/StatsQRCode/StatsQRCodeView.js +36 -0
- package/dist/src/modules/stats/view/StatsQRCode/index.js +1 -0
- package/dist/src/modules/stats/view/StatsView.js +137 -0
- package/dist/src/modules/stats/view/TeamStats/TeamStatsView.js +43 -0
- package/dist/src/modules/stats/view/TeamStats/index.js +1 -0
- package/dist/src/modules/stats/view/Teams/StatsCarousel.js +83 -0
- package/dist/src/modules/stats/view/Teams/StatsProgressBar.js +19 -0
- package/dist/src/modules/stats/view/Teams/Teams.js +27 -0
- package/dist/src/modules/stats/view/Teams/index.js +2 -0
- package/dist/src/modules/stats/view/WinProbability/WinProbability.js +28 -0
- package/dist/src/modules/stats/view/WinProbability/index.js +2 -0
- package/dist/src/modules/stats/view/components/AthletesStatistics/AthletesStatistics.js +89 -0
- package/dist/src/modules/stats/view/components/AthletesStatistics/StatisticTable.js +12 -0
- package/dist/src/modules/stats/view/components/AthletesStatistics/index.js +2 -0
- package/dist/src/modules/stats/view/index.js +2 -0
- package/dist/src/modules/stats/view-model/StatsViewModel.d.ts +5 -0
- package/dist/src/modules/stats/view-model/StatsViewModel.js +989 -0
- package/dist/src/sentry.js +31 -0
- package/dist/src/services/AnalyticsService/AnalyticsService.d.ts +12 -7
- package/dist/src/services/AnalyticsService/AnalyticsService.js +402 -0
- package/dist/src/services/AnalyticsService/types.js +1 -0
- package/dist/src/services/BetsService.js +122 -0
- package/dist/src/services/FantasyService.js +92 -0
- package/dist/src/services/GlobalService/GlobalService.d.ts +9 -0
- package/dist/src/services/GlobalService/PageService.d.ts +9 -0
- package/dist/src/services/GlobalService/index.d.ts +2 -0
- package/dist/src/services/GlobalService/mocks.d.ts +2 -0
- package/dist/src/services/GlobalService/types.d.ts +11 -0
- package/dist/src/services/InsightsService/InsightsPayloadBuilder.d.ts +1 -2
- package/dist/src/services/InsightsService/InsightsPayloadBuilder.js +386 -0
- package/dist/src/services/InsightsService/InsightsService.js +74 -0
- package/dist/src/services/NetworkManager/NetworkManager.js +457 -0
- package/dist/src/services/NetworkManager/NetworkManagerFactory.js +101 -0
- package/dist/src/services/NetworkManager/errors.js +45 -0
- package/dist/src/services/NetworkManager/types.js +10 -0
- package/dist/src/services/PageService/PageService.d.ts +9 -0
- package/dist/src/services/PageService/PageService.js +39 -0
- package/dist/src/services/PageService/index.d.ts +2 -0
- package/dist/src/services/PageService/index.js +2 -0
- package/dist/src/services/PageService/mocks.d.ts +2 -0
- package/dist/src/services/PageService/mocks.js +104 -0
- package/dist/src/services/PageService/types.d.ts +76 -0
- package/dist/src/services/PageService/types.js +1 -0
- package/dist/src/services/ShopService.js +46 -0
- package/dist/src/services/StaticService/PageService.d.ts +9 -0
- package/dist/src/services/StaticService/StaticService.d.ts +3 -1
- package/dist/src/services/StaticService/StaticService.js +59 -0
- package/dist/src/services/StaticService/index.js +2 -0
- package/dist/src/services/StaticService/mocks.js +104 -0
- package/dist/src/services/StaticService/types.js +1 -0
- package/dist/src/services/StatsService.d.ts +1 -0
- package/dist/src/services/StatsService.js +147 -0
- package/dist/src/services/ThemeManager/constants.js +47 -0
- package/dist/src/services/UserSettingsManager.js +155 -0
- package/dist/src/test-polyfills.js +15 -0
- package/dist/src/types/OverlayTypes.js +4 -0
- package/dist/src/view-models/MaestroEventViewModel.d.ts +1 -2
- package/dist/src/view-models/MaestroEventViewModel.js +307 -0
- package/dist/src/view-models/OverlayViewModel.js +222 -0
- package/dist/src/view-models/PanelManagerViewModel.js +212 -0
- package/dist/src/view-models/ViewModel.js +32 -0
- 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,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,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
|
+
}
|