@maestro_io/maestro-web-sdk 2.1.3 → 2.2.0
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/MaestroEventDelegate.d.ts +1 -0
- package/dist/components/atoms/SvgIcon/Icon.d.ts +0 -2
- package/dist/components/core/ScrollableContainer/ScrollableContainer.d.ts +3 -1
- package/dist/external/spatial-navigation/spatialNavigation.d.ts +1 -1
- package/dist/interfaces/IMaestroEvent.d.ts +14 -0
- package/dist/interfaces/IMaestroEventDelegate.d.ts +19 -6
- package/dist/maestro-web-sdk.umd.js +3 -3
- package/dist/maestro-web-sdk.umd.js.map +1 -1
- package/dist/models/IPanel.d.ts +1 -2
- package/dist/modules/stats/interfaces/IStats.d.ts +38 -12
- package/dist/modules/stats/mocks.d.ts +0 -80
- package/dist/modules/stats/utils/driveSummaryUtils.d.ts +18 -0
- package/dist/modules/stats/view/ActiveAthletes/ActiveAthletes.d.ts +6 -19
- package/dist/modules/stats/view/DriveSummary/DrivePlayCard.d.ts +26 -0
- package/dist/modules/stats/view/DriveSummary/DriveSummary.d.ts +24 -0
- package/dist/modules/stats/view/DriveSummary/index.d.ts +2 -0
- package/dist/modules/stats/view/GameLeaders/GameLeaders.d.ts +15 -4
- package/dist/modules/stats/view/MatchPredictor/MatchPredictorView.d.ts +13 -48
- package/dist/modules/stats/view/RecentGames/RecentGames.d.ts +10 -21
- package/dist/modules/stats/view/StatsItemView.d.ts +19 -0
- package/dist/modules/stats/view/StatsView.d.ts +3 -3
- package/dist/modules/stats/view/TeamStats/TeamStatsView.d.ts +2 -4
- package/dist/modules/stats/view/Teams/Teams.d.ts +10 -26
- package/dist/modules/stats/view/WinProbability/WinProbability.d.ts +10 -21
- package/dist/modules/stats/view-model/StatsViewModel.d.ts +149 -5
- package/package.json +1 -1
- package/dist/MaestroEventDelegate.js +0 -60
- package/dist/components/atoms/BaseButton/BaseButton.js +0 -11
- package/dist/components/atoms/BaseButton/index.js +0 -2
- package/dist/components/atoms/Image/index.js +0 -30
- package/dist/components/atoms/Rive/index.js +0 -53
- package/dist/components/atoms/SvgIcon/BetGeneralIcon.js +0 -9
- package/dist/components/atoms/SvgIcon/BetsIcon.js +0 -11
- package/dist/components/atoms/SvgIcon/BetsWarningIcon.js +0 -11
- package/dist/components/atoms/SvgIcon/CheckmarkIcon.js +0 -6
- package/dist/components/atoms/SvgIcon/CollapseIcon.js +0 -6
- package/dist/components/atoms/SvgIcon/ExpandIcon.js +0 -6
- package/dist/components/atoms/SvgIcon/FantasyIcon.d.ts +0 -6
- package/dist/components/atoms/SvgIcon/FantasyIcon.js +0 -8
- package/dist/components/atoms/SvgIcon/FlameIcon.js +0 -11
- package/dist/components/atoms/SvgIcon/Icon.js +0 -42
- package/dist/components/atoms/SvgIcon/KeyPlaysIcon.js +0 -10
- package/dist/components/atoms/SvgIcon/MobilePhoneIcon.js +0 -11
- package/dist/components/atoms/SvgIcon/PlayIcon.js +0 -8
- package/dist/components/atoms/SvgIcon/StatsIcon.js +0 -12
- package/dist/components/atoms/SvgIcon/TimesIcon.js +0 -6
- package/dist/components/atoms/SvgIcon/WarningIcon.js +0 -8
- package/dist/components/atoms/SvgIcon/index.js +0 -2
- package/dist/components/core/App/App.js +0 -41
- package/dist/components/core/App/index.js +0 -2
- package/dist/components/core/OverlayContainer.js +0 -58
- package/dist/components/core/PanelManager/PanelManager.js +0 -80
- package/dist/components/core/PanelManager/index.js +0 -2
- package/dist/components/core/ScrollableContainer/FocusableItem.js +0 -38
- package/dist/components/core/ScrollableContainer/ScrollableContainer.js +0 -166
- package/dist/components/core/ScrollableContainer/index.js +0 -2
- package/dist/components/molecules/ActionButton/ActionButton.js +0 -10
- package/dist/components/molecules/ActionButton/index.js +0 -2
- package/dist/components/molecules/Overlay/Overlay.js +0 -139
- package/dist/components/molecules/Overlay/index.js +0 -2
- package/dist/components/molecules/PanelNavButton/PanelNavButton.js +0 -40
- package/dist/components/molecules/PanelNavButton/index.js +0 -2
- package/dist/components/molecules/SegmentButton/SegmentButton.js +0 -10
- package/dist/components/molecules/SegmentButton/index.js +0 -2
- package/dist/components/molecules/WatchButton/WatchButton.js +0 -15
- package/dist/components/molecules/WatchButton/index.js +0 -2
- package/dist/components/organisms/PanelNavigation/PanelNavigation.js +0 -71
- package/dist/components/organisms/PanelNavigation/index.js +0 -2
- package/dist/components/organisms/SegmentController/SegmentController.js +0 -68
- package/dist/components/organisms/SegmentController/index.js +0 -2
- package/dist/external/AxiosNetworkClient.js +0 -83
- package/dist/external/LocalStorageCacheManager.js +0 -213
- package/dist/external/ReactRenderer.js +0 -86
- package/dist/external/mocks/MockExternalNetworkClient.js +0 -161
- package/dist/external/ports/cacheManager.js +0 -1
- package/dist/external/ports/networkClient.js +0 -1
- package/dist/external/ports/renderer.js +0 -1
- package/dist/external/spatial-navigation/index.js +0 -3
- package/dist/external/spatial-navigation/measureLayout.js +0 -30
- package/dist/external/spatial-navigation/spatialNavigation.js +0 -864
- package/dist/external/spatial-navigation/utils.js +0 -6
- package/dist/external/spatial-navigation/visualDebugger.js +0 -76
- package/dist/external/spatial-navigation/withFocusable.js +0 -245
- package/dist/helpers/Observable.js +0 -37
- package/dist/helpers/deliver-focus.d.ts +0 -5
- package/dist/helpers/deliver-focus.js +0 -12
- package/dist/index.js +0 -192
- package/dist/interfaces/IMaestroEvent.js +0 -6
- package/dist/interfaces/IMaestroEventDelegate.js +0 -1
- package/dist/interfaces/IMaestroManager.js +0 -1
- package/dist/models/IModel.js +0 -1
- package/dist/models/IPanel.js +0 -53
- package/dist/models/ITheme.js +0 -20
- package/dist/models/IWinningBet.js +0 -1
- package/dist/modules/bets/interfaces/IBets.js +0 -1
- package/dist/modules/bets/mocks.js +0 -572
- package/dist/modules/bets/view/BetsView.js +0 -116
- package/dist/modules/bets/view/HotProps/HotPropsView.js +0 -139
- package/dist/modules/bets/view/SixPack/SixPackView.js +0 -103
- package/dist/modules/bets/view/TabLoadFailureView.js +0 -12
- package/dist/modules/bets/view/UserBets/BetResult/BetResult.js +0 -6
- package/dist/modules/bets/view/UserBets/BetsCard/BetsCard.js +0 -122
- package/dist/modules/bets/view/UserBets/BetsCard/BetsCardEvent.js +0 -34
- package/dist/modules/bets/view/UserBets/BetsCard/BetsCardFooter.js +0 -22
- package/dist/modules/bets/view/UserBets/Boost/Boost.js +0 -6
- package/dist/modules/bets/view/UserBets/OutcomeBadge/OutcomeBadge.js +0 -9
- package/dist/modules/bets/view/UserBets/Parlay/Parlay.js +0 -13
- package/dist/modules/bets/view/UserBets/Straight/Straight.js +0 -6
- package/dist/modules/bets/view/UserBets/Teaser/Teaser.js +0 -13
- package/dist/modules/bets/view/UserBets/UserBetsView.js +0 -114
- package/dist/modules/bets/view/components/Bet/Bet.js +0 -32
- package/dist/modules/bets/view/components/BetPill/BetPill.js +0 -6
- package/dist/modules/bets/view/components/BetsCard/BetsCard.js +0 -15
- package/dist/modules/bets/view/components/BetsCard/BetsCardHeader.js +0 -20
- package/dist/modules/bets/view/components/GamblingDisclaimer/GamblingDisclaimer.js +0 -14
- package/dist/modules/bets/view/components/LocationWarning/LocationWarning.js +0 -16
- package/dist/modules/bets/view/components/PromoCodeBanner/PromoCodeBanner.js +0 -63
- package/dist/modules/bets/view/components/PromoCodeBanner/index.js +0 -1
- package/dist/modules/bets/view-model/BetsViewModel.js +0 -767
- package/dist/modules/key-plays/constants.js +0 -292
- package/dist/modules/key-plays/interfaces/IKeyPlays.js +0 -14
- package/dist/modules/key-plays/interfaces/IKeyPlaysResponse.js +0 -1
- package/dist/modules/key-plays/view/KeyPlayCardScoreTagView.js +0 -13
- package/dist/modules/key-plays/view/KeyPlayCardView.js +0 -120
- package/dist/modules/key-plays/view/KeyPlayErrorStateView.js +0 -58
- package/dist/modules/key-plays/view/KeyPlaysView.js +0 -166
- package/dist/modules/key-plays/view-model/KeyPlaysViewModel.js +0 -182
- package/dist/modules/stats/interfaces/IStats.js +0 -1
- package/dist/modules/stats/mocks.js +0 -686
- package/dist/modules/stats/utils/renderTeamStatistic.js +0 -16
- package/dist/modules/stats/utils.js +0 -62
- package/dist/modules/stats/view/ActiveAthletes/ActiveAthletes.js +0 -78
- package/dist/modules/stats/view/ActiveAthletes/CollapsedAthletes/CollapsedAthletes.js +0 -27
- package/dist/modules/stats/view/ActiveAthletes/ExpandedAthletes/ExpandedAthletes.js +0 -15
- package/dist/modules/stats/view/ActiveAthletes/index.js +0 -2
- package/dist/modules/stats/view/GameLeaders/GameLeaders.js +0 -9
- package/dist/modules/stats/view/GameLeaders/index.js +0 -2
- package/dist/modules/stats/view/MatchPredictor/DonutChart/DonutChart.js +0 -55
- package/dist/modules/stats/view/MatchPredictor/DonutChart/index.js +0 -1
- package/dist/modules/stats/view/MatchPredictor/MatchPredictorView.js +0 -66
- package/dist/modules/stats/view/MatchPredictor/index.js +0 -2
- package/dist/modules/stats/view/RecentGames/RecentGames.js +0 -22
- package/dist/modules/stats/view/RecentGames/index.js +0 -2
- package/dist/modules/stats/view/StatsQRCode/StatsQRCodeView.js +0 -38
- package/dist/modules/stats/view/StatsQRCode/index.js +0 -1
- package/dist/modules/stats/view/StatsView.js +0 -107
- package/dist/modules/stats/view/TeamStats/TeamStatsView.js +0 -69
- package/dist/modules/stats/view/TeamStats/index.js +0 -1
- package/dist/modules/stats/view/Teams/StatsCarousel.js +0 -14
- package/dist/modules/stats/view/Teams/StatsProgressBar.js +0 -18
- package/dist/modules/stats/view/Teams/Teams.js +0 -42
- package/dist/modules/stats/view/Teams/index.js +0 -2
- package/dist/modules/stats/view/WinProbability/WinProbability.js +0 -27
- package/dist/modules/stats/view/WinProbability/index.js +0 -2
- package/dist/modules/stats/view/components/AthletesStatistics/AthletesStatistics.js +0 -29
- package/dist/modules/stats/view/components/AthletesStatistics/StatisticTable.js +0 -12
- package/dist/modules/stats/view/components/AthletesStatistics/index.js +0 -2
- package/dist/modules/stats/view/index.js +0 -2
- package/dist/modules/stats/view-model/StatsViewModel.js +0 -90
- package/dist/services/BetsService.js +0 -102
- package/dist/services/NetworkManager/NetworkManager.js +0 -410
- package/dist/services/NetworkManager/errors.js +0 -45
- package/dist/services/StatsService.js +0 -68
- package/dist/services/ThemeManager/constants.js +0 -47
- package/dist/test-polyfills.js +0 -15
- package/dist/types/OverlayTypes.js +0 -4
- package/dist/view-models/MaestroEventViewModel.js +0 -168
- package/dist/view-models/OverlayViewModel.js +0 -222
- package/dist/view-models/PanelManagerViewModel.js +0 -80
- package/dist/view-models/ViewModel.js +0 -32
- package/dist/view-models/index.js +0 -59
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import './TeamsView.styles.css';
|
|
3
|
-
import Image from '@/components/atoms/Image';
|
|
4
|
-
import { withFocusable, } from '@/external/spatial-navigation';
|
|
5
|
-
import { CarouselSlider, StatsCarousel } from './StatsCarousel';
|
|
6
|
-
import { renderTeamStatistic } from '../../utils/renderTeamStatistic';
|
|
7
|
-
const Teams = (props) => {
|
|
8
|
-
const teams = [props.homeTeam, props.awayTeam];
|
|
9
|
-
return (React.createElement("section", { className: "stats-teams-view focus-ring", "data-focused": props.focused, style: {
|
|
10
|
-
'--home-team': `#${props.homeTeam.color}`,
|
|
11
|
-
'--away-team': `#${props.awayTeam.color}`,
|
|
12
|
-
}, "data-live": props.isLive },
|
|
13
|
-
React.createElement("div", { className: "stats-teams-view-header" }, teams.map((team) => (React.createElement("div", { key: team.id, className: "stats-team" },
|
|
14
|
-
React.createElement(Image, { src: team.logo, alt: team.name, crossOrigin: "anonymous" }),
|
|
15
|
-
React.createElement("div", null,
|
|
16
|
-
React.createElement("span", { className: props.isLive ? 'T05_ALT' : 'T30' }, team.abbreviation),
|
|
17
|
-
React.createElement("p", { className: "T02" }, team.record)))))),
|
|
18
|
-
props.isLive && (React.createElement("div", { className: "statistics" },
|
|
19
|
-
React.createElement("table", { className: "statistics-table" },
|
|
20
|
-
React.createElement("thead", null,
|
|
21
|
-
React.createElement("tr", null,
|
|
22
|
-
React.createElement("th", { className: "T10" }),
|
|
23
|
-
props.linescoresHeader.map((header) => (React.createElement("th", { key: header, className: "T10" }, header))))),
|
|
24
|
-
React.createElement("tbody", null, teams.map((team) => (React.createElement("tr", { key: team.id },
|
|
25
|
-
React.createElement("td", { className: "T30" }, team.name),
|
|
26
|
-
team.linescores.map((lineScore, index) => (React.createElement("td", { key: `${lineScore}-${index}`, className: "T10" }, lineScore)))))))),
|
|
27
|
-
props.statistics && props.statistics.length > 0 && (React.createElement(StatsCarousel, { itemsLength: props.statistics.length }, props.statistics.map((statistic) => (React.createElement(CarouselSlider, { itemsLength: props.statistics.length, key: statistic.displayName }, renderTeamStatistic({
|
|
28
|
-
statisticName: statistic.displayName,
|
|
29
|
-
firstDisplayValue: statistic.homeTeamValue,
|
|
30
|
-
secondDisplayValue: statistic.awayTeamValue,
|
|
31
|
-
awayProgressValue: statistic.awayTeamValue,
|
|
32
|
-
homeProgressValue: statistic.homeTeamValue,
|
|
33
|
-
classNames: {
|
|
34
|
-
container: 'score-statistics',
|
|
35
|
-
header: 'score-statistics-header',
|
|
36
|
-
firstValue: 'T30',
|
|
37
|
-
secondValue: 'T30',
|
|
38
|
-
statisticName: 'statistic-name T02',
|
|
39
|
-
},
|
|
40
|
-
}))))))))));
|
|
41
|
-
};
|
|
42
|
-
export default withFocusable()(Teams);
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import './WinProbability.styles.css';
|
|
3
|
-
import { withFocusable, } from '@/external/spatial-navigation';
|
|
4
|
-
import Image from '@/components/atoms/Image';
|
|
5
|
-
const WinProbability = (props) => {
|
|
6
|
-
return (React.createElement("section", { className: "win-probability focus-ring", "data-focused": props.focused },
|
|
7
|
-
React.createElement("h5", { className: "T05_ALT" }, "Win Probability"),
|
|
8
|
-
React.createElement("div", { className: "win-probability-card" }, [props.awayTeam, props.homeTeam].map((team, index) => {
|
|
9
|
-
return (React.createElement("div", { className: "team", key: team.id },
|
|
10
|
-
React.createElement(Image, { src: team.logo, alt: `${team.abbreviation} logo`, crossOrigin: "anonymous" }),
|
|
11
|
-
React.createElement("div", { className: "info" },
|
|
12
|
-
React.createElement("span", { className: "T60" }, team.winPercentage ? `${team.winPercentage}%` : '–'),
|
|
13
|
-
React.createElement("div", { className: "name T01" },
|
|
14
|
-
index === 0 ? React.createElement(AwayTeamChartLine, null) : React.createElement(HomeTeamChartLine, null),
|
|
15
|
-
React.createElement("span", null, team.abbreviation)))));
|
|
16
|
-
})),
|
|
17
|
-
React.createElement(Image, { src: props.chartImageUrl, alt: "Win Probability Chart", crossOrigin: "anonymous" })));
|
|
18
|
-
};
|
|
19
|
-
const AwayTeamChartLine = () => {
|
|
20
|
-
return (React.createElement("svg", { width: "25", height: "4", viewBox: "0 0 25 4", fill: "none", xmlns: "http://www.w3.org/2000/svg" },
|
|
21
|
-
React.createElement("path", { d: "M2.33337 2H22.3334", stroke: "white", strokeWidth: "4", strokeLinecap: "round" })));
|
|
22
|
-
};
|
|
23
|
-
const HomeTeamChartLine = () => {
|
|
24
|
-
return (React.createElement("svg", { width: "25", height: "4", viewBox: "0 0 25 4", fill: "none", xmlns: "http://www.w3.org/2000/svg" },
|
|
25
|
-
React.createElement("path", { d: "M2.66992 2H22.6699", stroke: "white", strokeWidth: "4", strokeLinecap: "round", strokeDasharray: "2 7" })));
|
|
26
|
-
};
|
|
27
|
-
export default withFocusable()(WinProbability);
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import StatisticsTable from './StatisticTable';
|
|
3
|
-
import Image from '@/components/atoms/Image';
|
|
4
|
-
import { withFocusable, } from '@/external/spatial-navigation';
|
|
5
|
-
import './AthleteStatistics.styles.css';
|
|
6
|
-
const AthletesStatistics = (props) => {
|
|
7
|
-
const item = props.item;
|
|
8
|
-
return (React.createElement("div", { className: "athletes-statistics focus-ring", "data-focused": props.focused },
|
|
9
|
-
!!item.displayName && (React.createElement("span", { className: "T05_ALT" }, item.displayName)),
|
|
10
|
-
React.createElement("div", { className: "leaders-wrapper" }, [item.awayAthlete, item.homeAthlete].map((athlete) => {
|
|
11
|
-
return (React.createElement("div", { className: "leader", key: athlete.id + item.displayName },
|
|
12
|
-
React.createElement("div", { className: "image-wrapper T02", "data-position": athlete.position },
|
|
13
|
-
React.createElement(Image, { src: athlete.headshot, alt: `${item.displayName} ${athlete.displayName} Headshot Image` })),
|
|
14
|
-
React.createElement("div", { className: "leader-info" },
|
|
15
|
-
React.createElement("div", { className: "main-statistic T05_ALT" },
|
|
16
|
-
athlete.shortName,
|
|
17
|
-
' ',
|
|
18
|
-
React.createElement("span", { className: "athlete-number T02" },
|
|
19
|
-
"#",
|
|
20
|
-
athlete.jersey)),
|
|
21
|
-
Array.isArray(athlete.statistics) &&
|
|
22
|
-
!!athlete.statistics.length && (React.createElement("div", { className: "main-statistic T30" },
|
|
23
|
-
athlete.statistics[0].displayValue,
|
|
24
|
-
' ',
|
|
25
|
-
React.createElement("span", { className: "athlete-points T02" }, athlete.statistics[0].abbreviation))))));
|
|
26
|
-
})),
|
|
27
|
-
React.createElement(StatisticsTable, { item: item })));
|
|
28
|
-
};
|
|
29
|
-
export default withFocusable()(AthletesStatistics);
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
const StatisticsTable = (props) => {
|
|
3
|
-
return (React.createElement("table", { className: "athletes-statistics-table T10" },
|
|
4
|
-
React.createElement("tbody", null, props.item.awayAthlete.statistics.slice(1).map((statistic, index) => {
|
|
5
|
-
return (React.createElement("tr", { key: statistic.abbreviation },
|
|
6
|
-
React.createElement("td", null, statistic.displayValue),
|
|
7
|
-
React.createElement("td", null, statistic.abbreviation),
|
|
8
|
-
React.createElement("td", null, props.item.homeAthlete.statistics[index + 1].displayValue ||
|
|
9
|
-
'0')));
|
|
10
|
-
}))));
|
|
11
|
-
};
|
|
12
|
-
export default StatisticsTable;
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
import { Observable } from '../../../helpers/Observable';
|
|
2
|
-
import { ViewModel } from '../../../view-models/ViewModel';
|
|
3
|
-
import { MOCK_STATS_API_PRE_GAME_RESPONSE } from '../mocks';
|
|
4
|
-
// TODO: Implement actual ViewModel
|
|
5
|
-
export class StatsViewModel extends ViewModel {
|
|
6
|
-
constructor(_eventId, // TODO: Will be used when implementing real API calls
|
|
7
|
-
options = {}) {
|
|
8
|
-
super();
|
|
9
|
-
// Observable properties
|
|
10
|
-
Object.defineProperty(this, "statsData", {
|
|
11
|
-
enumerable: true,
|
|
12
|
-
configurable: true,
|
|
13
|
-
writable: true,
|
|
14
|
-
value: new Observable(null)
|
|
15
|
-
});
|
|
16
|
-
Object.defineProperty(this, "isDataLoading", {
|
|
17
|
-
enumerable: true,
|
|
18
|
-
configurable: true,
|
|
19
|
-
writable: true,
|
|
20
|
-
value: new Observable(true)
|
|
21
|
-
});
|
|
22
|
-
Object.defineProperty(this, "hasEverSuccessfullyLoaded", {
|
|
23
|
-
enumerable: true,
|
|
24
|
-
configurable: true,
|
|
25
|
-
writable: true,
|
|
26
|
-
value: new Observable(false)
|
|
27
|
-
});
|
|
28
|
-
// Properties
|
|
29
|
-
Object.defineProperty(this, "useMockData", {
|
|
30
|
-
enumerable: true,
|
|
31
|
-
configurable: true,
|
|
32
|
-
writable: true,
|
|
33
|
-
value: false
|
|
34
|
-
});
|
|
35
|
-
Object.defineProperty(this, "initialized", {
|
|
36
|
-
enumerable: true,
|
|
37
|
-
configurable: true,
|
|
38
|
-
writable: true,
|
|
39
|
-
value: false
|
|
40
|
-
});
|
|
41
|
-
// TODO: Store eventId when implementing real API calls
|
|
42
|
-
// this.eventId = _eventId;
|
|
43
|
-
this.useMockData = options.useMockData || false;
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* Initialize the ViewModel and start data fetching
|
|
47
|
-
*/
|
|
48
|
-
async init() {
|
|
49
|
-
await this.fetchNewData();
|
|
50
|
-
this.initialized = true;
|
|
51
|
-
}
|
|
52
|
-
/**
|
|
53
|
-
* Clean up resources when the ViewModel is no longer needed
|
|
54
|
-
*/
|
|
55
|
-
cleanup() {
|
|
56
|
-
this.initialized = false;
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* Fetch new stats data immediately (one-time)
|
|
60
|
-
*/
|
|
61
|
-
async fetchNewData() {
|
|
62
|
-
this.isDataLoading.value = true;
|
|
63
|
-
try {
|
|
64
|
-
// Handle mock data if enabled
|
|
65
|
-
if (this.useMockData) {
|
|
66
|
-
await this.fetchMockData();
|
|
67
|
-
return;
|
|
68
|
-
}
|
|
69
|
-
// TODO: Implement real API call when stats service is available
|
|
70
|
-
// For now, fall back to mock data
|
|
71
|
-
await this.fetchMockData();
|
|
72
|
-
this.isDataLoading.value = false;
|
|
73
|
-
}
|
|
74
|
-
catch (error) {
|
|
75
|
-
console.error('Error fetching stats data:', error);
|
|
76
|
-
this.isDataLoading.value = false;
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
/**
|
|
80
|
-
* Fetch mock data for testing
|
|
81
|
-
*/
|
|
82
|
-
async fetchMockData() {
|
|
83
|
-
// Simulate network delay
|
|
84
|
-
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
85
|
-
this.statsData.value = MOCK_STATS_API_PRE_GAME_RESPONSE;
|
|
86
|
-
this.hasEverSuccessfullyLoaded.value = true;
|
|
87
|
-
this.isDataLoading.value = false;
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
export default StatsViewModel;
|
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
import NetworkManager, { HttpMethod } from './NetworkManager/NetworkManager';
|
|
2
|
-
/**
|
|
3
|
-
* Service for handling bets-related API calls
|
|
4
|
-
*/
|
|
5
|
-
class BetsService {
|
|
6
|
-
constructor(delegate) {
|
|
7
|
-
Object.defineProperty(this, "networkManager", {
|
|
8
|
-
enumerable: true,
|
|
9
|
-
configurable: true,
|
|
10
|
-
writable: true,
|
|
11
|
-
value: void 0
|
|
12
|
-
});
|
|
13
|
-
this.networkManager = NetworkManager.getInstance({
|
|
14
|
-
externalBaseURL: delegate.getBettingAPIBaseURL(),
|
|
15
|
-
});
|
|
16
|
-
}
|
|
17
|
-
/**
|
|
18
|
-
* Get non-personalized bets for an event
|
|
19
|
-
*
|
|
20
|
-
* @param eventID - The ID of the event
|
|
21
|
-
* @returns Promise with the bets data
|
|
22
|
-
*/
|
|
23
|
-
async getNonPersonalizedBets(eventID) {
|
|
24
|
-
return this.networkManager.externalApiRequest({
|
|
25
|
-
endpoint: this.nonPersonalizedBetsEndpoint(eventID),
|
|
26
|
-
method: HttpMethod.GET,
|
|
27
|
-
params: {},
|
|
28
|
-
headers: {},
|
|
29
|
-
});
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Get personalized bets for an event
|
|
33
|
-
*
|
|
34
|
-
* @param eventID - The ID of the event
|
|
35
|
-
* @param swid - The ESPN SWID parameter
|
|
36
|
-
* @param jwt - The authorization JWT
|
|
37
|
-
* @returns Promise with the personalized bets data
|
|
38
|
-
*/
|
|
39
|
-
async getPersonalizedBets(eventID, swid, jwt) {
|
|
40
|
-
return this.networkManager.externalApiRequest({
|
|
41
|
-
endpoint: this.personalizedBetsEndpoint(eventID),
|
|
42
|
-
method: HttpMethod.GET,
|
|
43
|
-
params: { swid },
|
|
44
|
-
headers: { 'x-p13n-auth': jwt },
|
|
45
|
-
});
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* Start polling for non-personalized bets
|
|
49
|
-
*
|
|
50
|
-
* @param eventID - The ID of the event
|
|
51
|
-
* @param interval - The polling interval in milliseconds
|
|
52
|
-
* @param onData - Callback for successful data fetch
|
|
53
|
-
* @param onError - Callback for errors
|
|
54
|
-
* @returns Object with a stop function to stop polling
|
|
55
|
-
*/
|
|
56
|
-
pollNonPersonalizedBets(eventID, interval, onData, onError) {
|
|
57
|
-
return this.networkManager.pollExternalApiRequest({
|
|
58
|
-
endpoint: this.nonPersonalizedBetsEndpoint(eventID),
|
|
59
|
-
interval,
|
|
60
|
-
method: HttpMethod.GET,
|
|
61
|
-
params: {},
|
|
62
|
-
headers: {},
|
|
63
|
-
onData,
|
|
64
|
-
onError,
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
/**
|
|
68
|
-
* Start polling for personalized bets
|
|
69
|
-
*
|
|
70
|
-
* @param eventID - The ID of the event
|
|
71
|
-
* @param swid - The ESPN SWID parameter
|
|
72
|
-
* @param jwt - The authorization JWT
|
|
73
|
-
* @param interval - The polling interval in milliseconds
|
|
74
|
-
* @param onData - Callback for successful data fetch
|
|
75
|
-
* @param onError - Callback for errors
|
|
76
|
-
* @returns Object with a stop function to stop polling
|
|
77
|
-
*/
|
|
78
|
-
pollPersonalizedBets(eventID, swid, jwt, interval, onData, onError) {
|
|
79
|
-
return this.networkManager.pollExternalApiRequest({
|
|
80
|
-
endpoint: this.personalizedBetsEndpoint(eventID),
|
|
81
|
-
interval,
|
|
82
|
-
method: HttpMethod.GET,
|
|
83
|
-
params: { swid },
|
|
84
|
-
headers: { 'x-p13n-auth': jwt },
|
|
85
|
-
onData,
|
|
86
|
-
onError,
|
|
87
|
-
});
|
|
88
|
-
}
|
|
89
|
-
/**
|
|
90
|
-
* Get the endpoint for non-personalized bets
|
|
91
|
-
*/
|
|
92
|
-
nonPersonalizedBetsEndpoint(eventID) {
|
|
93
|
-
return `/site/v2/events/${eventID}/odds`;
|
|
94
|
-
}
|
|
95
|
-
/**
|
|
96
|
-
* Get the endpoint for personalized bets
|
|
97
|
-
*/
|
|
98
|
-
personalizedBetsEndpoint(eventID) {
|
|
99
|
-
return `/personalized/site/v2/events/${eventID}/odds`;
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
export default BetsService;
|