@maestro_io/maestro-web-sdk 2.1.3 → 2.2.1
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/PanelManager/PanelManager.d.ts +3 -0
- package/dist/components/core/ScrollableContainer/ScrollableContainer.d.ts +3 -1
- package/dist/external/spatial-navigation/spatialNavigation.d.ts +1 -1
- package/dist/helpers/url.d.ts +1 -0
- package/dist/index.d.ts +3 -1
- package/dist/interfaces/IMaestroEvent.d.ts +27 -0
- package/dist/interfaces/IMaestroEventDelegate.d.ts +19 -6
- package/dist/interfaces/IMaestroManager.d.ts +8 -1
- package/dist/interfaces/IUserSettings.d.ts +36 -0
- 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/bets/view/BetsView.d.ts +4 -0
- package/dist/modules/bets/view/UserBets/BetsCard/BetsCard.d.ts +1 -0
- package/dist/modules/bets/view/UserBets/BetsCard/BetsCardEvent.d.ts +1 -0
- package/dist/modules/bets/view/UserBets/BetsCard/BetsCardFooter.d.ts +2 -1
- package/dist/modules/bets/view/UserBets/Boost/Boost.d.ts +2 -1
- package/dist/modules/bets/view/UserBets/Parlay/Parlay.d.ts +2 -1
- package/dist/modules/bets/view/UserBets/Straight/Straight.d.ts +2 -1
- package/dist/modules/bets/view/UserBets/Teaser/Teaser.d.ts +2 -1
- package/dist/modules/bets/view/components/Bet/Bet.d.ts +7 -0
- package/dist/modules/bets/view-model/BetsViewModel.d.ts +15 -0
- package/dist/modules/key-plays/interfaces/IKeyPlays.d.ts +1 -0
- package/dist/modules/key-plays/interfaces/IKeyPlaysResponse.d.ts +6 -6
- package/dist/modules/key-plays/view/KeyPlayCardView.d.ts +4 -1
- package/dist/modules/key-plays/view/KeyPlayErrorStateView.d.ts +2 -0
- package/dist/modules/key-plays/view-model/KeyPlaysViewModel.d.ts +5 -1
- 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/dist/services/BetsService.d.ts +2 -2
- package/dist/services/NetworkManager/NetworkManager.d.ts +1 -3
- package/dist/services/NetworkManager/NetworkManagerFactory.d.ts +42 -0
- package/dist/services/NetworkManager/types.d.ts +77 -0
- package/dist/services/StatsService.d.ts +2 -2
- package/dist/services/UserSettingsManager.d.ts +63 -0
- package/dist/view-models/MaestroEventViewModel.d.ts +5 -0
- package/dist/view-models/PanelManagerViewModel.d.ts +24 -0
- package/dist/view-models/index.d.ts +4 -0
- 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,168 +0,0 @@
|
|
|
1
|
-
import { Observable } from '../helpers/Observable';
|
|
2
|
-
import { ViewModel } from './ViewModel';
|
|
3
|
-
import KeyPlaysViewModel from '../modules/key-plays/view-model/KeyPlaysViewModel';
|
|
4
|
-
import BetsViewModel from '../modules/bets/view-model/BetsViewModel';
|
|
5
|
-
import SpatialNavigation from '@/external/spatial-navigation/spatialNavigation';
|
|
6
|
-
import StatsViewModel from '../modules/stats/view-model/StatsViewModel';
|
|
7
|
-
export class MaestroEventViewModel extends ViewModel {
|
|
8
|
-
constructor(eventId = '', delegate) {
|
|
9
|
-
super();
|
|
10
|
-
Object.defineProperty(this, "_eventId", {
|
|
11
|
-
enumerable: true,
|
|
12
|
-
configurable: true,
|
|
13
|
-
writable: true,
|
|
14
|
-
value: new Observable('')
|
|
15
|
-
});
|
|
16
|
-
Object.defineProperty(this, "_title", {
|
|
17
|
-
enumerable: true,
|
|
18
|
-
configurable: true,
|
|
19
|
-
writable: true,
|
|
20
|
-
value: new Observable('')
|
|
21
|
-
});
|
|
22
|
-
Object.defineProperty(this, "_isLive", {
|
|
23
|
-
enumerable: true,
|
|
24
|
-
configurable: true,
|
|
25
|
-
writable: true,
|
|
26
|
-
value: new Observable(false)
|
|
27
|
-
});
|
|
28
|
-
Object.defineProperty(this, "_isShowingPanel", {
|
|
29
|
-
enumerable: true,
|
|
30
|
-
configurable: true,
|
|
31
|
-
writable: true,
|
|
32
|
-
value: new Observable(false)
|
|
33
|
-
});
|
|
34
|
-
Object.defineProperty(this, "delegate", {
|
|
35
|
-
enumerable: true,
|
|
36
|
-
configurable: true,
|
|
37
|
-
writable: true,
|
|
38
|
-
value: void 0
|
|
39
|
-
});
|
|
40
|
-
Object.defineProperty(this, "keyPlaysViewModel", {
|
|
41
|
-
enumerable: true,
|
|
42
|
-
configurable: true,
|
|
43
|
-
writable: true,
|
|
44
|
-
value: new KeyPlaysViewModel()
|
|
45
|
-
});
|
|
46
|
-
Object.defineProperty(this, "betsViewModel", {
|
|
47
|
-
enumerable: true,
|
|
48
|
-
configurable: true,
|
|
49
|
-
writable: true,
|
|
50
|
-
value: void 0
|
|
51
|
-
});
|
|
52
|
-
Object.defineProperty(this, "statsViewModel", {
|
|
53
|
-
enumerable: true,
|
|
54
|
-
configurable: true,
|
|
55
|
-
writable: true,
|
|
56
|
-
value: void 0
|
|
57
|
-
});
|
|
58
|
-
Object.defineProperty(this, "navigation", {
|
|
59
|
-
enumerable: true,
|
|
60
|
-
configurable: true,
|
|
61
|
-
writable: true,
|
|
62
|
-
value: void 0
|
|
63
|
-
});
|
|
64
|
-
this._eventId.value = eventId;
|
|
65
|
-
this.delegate = delegate;
|
|
66
|
-
this.betsViewModel = new BetsViewModel(eventId, delegate);
|
|
67
|
-
this.statsViewModel = new StatsViewModel(eventId, { useMockData: true });
|
|
68
|
-
this.navigation = new SpatialNavigation();
|
|
69
|
-
}
|
|
70
|
-
deinit() {
|
|
71
|
-
this.betsViewModel.cleanup();
|
|
72
|
-
this.statsViewModel.cleanup();
|
|
73
|
-
this.navigation.destroy();
|
|
74
|
-
}
|
|
75
|
-
updateKeyPlaysData(data) {
|
|
76
|
-
return this.keyPlaysViewModel.setKeyPlays(data);
|
|
77
|
-
}
|
|
78
|
-
startFocusManagement() {
|
|
79
|
-
this.navigation.setCurrentFocusedKey('PANEL_NAV_BUTTON_0', {});
|
|
80
|
-
setTimeout(() => {
|
|
81
|
-
this.navigation.resume();
|
|
82
|
-
}, 0);
|
|
83
|
-
return Promise.resolve();
|
|
84
|
-
}
|
|
85
|
-
didStartPlayingClip(index) {
|
|
86
|
-
this.keyPlaysViewModel.lastPlayedClipIndex.value = index;
|
|
87
|
-
this.keyPlaysViewModel.currentClipPlaybackProgress.value = 0;
|
|
88
|
-
this.keyPlaysViewModel.currentlyPlayingClipIndex.value = index;
|
|
89
|
-
this.keyPlaysViewModel.clearLoadFailureStatus(index);
|
|
90
|
-
}
|
|
91
|
-
didStopPlayingClip(index) {
|
|
92
|
-
this.keyPlaysViewModel.lastPlayedClipIndex.value = index;
|
|
93
|
-
this.keyPlaysViewModel.currentlyPlayingClipIndex.value = null;
|
|
94
|
-
this.keyPlaysViewModel.currentClipPlaybackProgress.value = null;
|
|
95
|
-
}
|
|
96
|
-
didFailToPlayClip(index) {
|
|
97
|
-
this.keyPlaysViewModel.handleKeyPlayLoadFailure(index);
|
|
98
|
-
}
|
|
99
|
-
didUpdatePlaybackProgressOfClip(index, to) {
|
|
100
|
-
this.keyPlaysViewModel.currentClipPlaybackProgress.value = to;
|
|
101
|
-
this.keyPlaysViewModel.clearLoadFailureStatus(index);
|
|
102
|
-
}
|
|
103
|
-
didShowPanel() {
|
|
104
|
-
this.isShowingPanel = true;
|
|
105
|
-
// Analytics call ?
|
|
106
|
-
return Promise.resolve();
|
|
107
|
-
}
|
|
108
|
-
async didHidePanel() {
|
|
109
|
-
this.isShowingPanel = false;
|
|
110
|
-
// Analytics call?
|
|
111
|
-
}
|
|
112
|
-
didShowOverlay() {
|
|
113
|
-
throw new Error('Method not implemented.');
|
|
114
|
-
}
|
|
115
|
-
didHideOverlay() {
|
|
116
|
-
throw new Error('Method not implemented.');
|
|
117
|
-
}
|
|
118
|
-
currentEventDoesNotSupportKeyPlays() {
|
|
119
|
-
this.keyPlaysViewModel.errorState.value = 'unsupportedEvent';
|
|
120
|
-
}
|
|
121
|
-
getCurrentEventID() {
|
|
122
|
-
return this.eventId.value;
|
|
123
|
-
}
|
|
124
|
-
getCurrentlyPlayingClipIndex() {
|
|
125
|
-
return this.keyPlaysViewModel.currentlyPlayingClipIndex.value;
|
|
126
|
-
}
|
|
127
|
-
getLastPlayedClipIndex() {
|
|
128
|
-
return this.keyPlaysViewModel.lastPlayedClipIndex.value;
|
|
129
|
-
}
|
|
130
|
-
getCurrentClipPlaybackProgress() {
|
|
131
|
-
return this.keyPlaysViewModel.currentClipPlaybackProgress.value;
|
|
132
|
-
}
|
|
133
|
-
getKeyPlaysCount() {
|
|
134
|
-
return this.keyPlaysViewModel.allItems.length;
|
|
135
|
-
}
|
|
136
|
-
get eventId() {
|
|
137
|
-
return this._eventId;
|
|
138
|
-
}
|
|
139
|
-
get title() {
|
|
140
|
-
return this._title;
|
|
141
|
-
}
|
|
142
|
-
get isLive() {
|
|
143
|
-
return this._isLive;
|
|
144
|
-
}
|
|
145
|
-
get isShowingPanel() {
|
|
146
|
-
return this._isShowingPanel.value;
|
|
147
|
-
}
|
|
148
|
-
set isShowingPanel(value) {
|
|
149
|
-
this._isShowingPanel.value = value;
|
|
150
|
-
}
|
|
151
|
-
simulateUseCase(useCase, panelType, testData) {
|
|
152
|
-
switch (panelType) {
|
|
153
|
-
case 'bets':
|
|
154
|
-
this.betsViewModel.simulateUseCase(useCase, testData);
|
|
155
|
-
break;
|
|
156
|
-
default:
|
|
157
|
-
throw new Error(`Unsupported panel type: ${panelType}`);
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
/**
|
|
161
|
-
* This method is called when the user navigates to the MaestroEventViewModel.
|
|
162
|
-
* It will pause navigation and start focus management.
|
|
163
|
-
*/
|
|
164
|
-
deliverFocus() {
|
|
165
|
-
this.navigation.pause();
|
|
166
|
-
this.delegate.startFocusManagement();
|
|
167
|
-
}
|
|
168
|
-
}
|
|
@@ -1,222 +0,0 @@
|
|
|
1
|
-
import { Observable } from '../helpers/Observable';
|
|
2
|
-
import { ViewModel } from './ViewModel';
|
|
3
|
-
import { OverlayType, } from '../types/OverlayTypes';
|
|
4
|
-
const AUTO_DISMISS_TIMEOUT = 10400; // 10.4 seconds
|
|
5
|
-
export class OverlayViewModel extends ViewModel {
|
|
6
|
-
constructor(analyticsService) {
|
|
7
|
-
super();
|
|
8
|
-
Object.defineProperty(this, "_isVisible", {
|
|
9
|
-
enumerable: true,
|
|
10
|
-
configurable: true,
|
|
11
|
-
writable: true,
|
|
12
|
-
value: new Observable(false)
|
|
13
|
-
});
|
|
14
|
-
Object.defineProperty(this, "_currentOverlay", {
|
|
15
|
-
enumerable: true,
|
|
16
|
-
configurable: true,
|
|
17
|
-
writable: true,
|
|
18
|
-
value: new Observable(null)
|
|
19
|
-
});
|
|
20
|
-
Object.defineProperty(this, "_autoDismiss", {
|
|
21
|
-
enumerable: true,
|
|
22
|
-
configurable: true,
|
|
23
|
-
writable: true,
|
|
24
|
-
value: new Observable(true)
|
|
25
|
-
});
|
|
26
|
-
Object.defineProperty(this, "_overlayQueue", {
|
|
27
|
-
enumerable: true,
|
|
28
|
-
configurable: true,
|
|
29
|
-
writable: true,
|
|
30
|
-
value: new Observable([])
|
|
31
|
-
});
|
|
32
|
-
Object.defineProperty(this, "_hasTrackedView", {
|
|
33
|
-
enumerable: true,
|
|
34
|
-
configurable: true,
|
|
35
|
-
writable: true,
|
|
36
|
-
value: new Observable(false)
|
|
37
|
-
});
|
|
38
|
-
Object.defineProperty(this, "autoDismissTimeout", {
|
|
39
|
-
enumerable: true,
|
|
40
|
-
configurable: true,
|
|
41
|
-
writable: true,
|
|
42
|
-
value: null
|
|
43
|
-
});
|
|
44
|
-
Object.defineProperty(this, "analyticsService", {
|
|
45
|
-
enumerable: true,
|
|
46
|
-
configurable: true,
|
|
47
|
-
writable: true,
|
|
48
|
-
value: void 0
|
|
49
|
-
});
|
|
50
|
-
this.analyticsService = analyticsService;
|
|
51
|
-
}
|
|
52
|
-
get isVisible() {
|
|
53
|
-
return this._isVisible;
|
|
54
|
-
}
|
|
55
|
-
get currentOverlay() {
|
|
56
|
-
return this._currentOverlay;
|
|
57
|
-
}
|
|
58
|
-
get autoDismiss() {
|
|
59
|
-
return this._autoDismiss;
|
|
60
|
-
}
|
|
61
|
-
get overlayQueue() {
|
|
62
|
-
return this._overlayQueue;
|
|
63
|
-
}
|
|
64
|
-
get overlayTitle() {
|
|
65
|
-
const overlay = this._currentOverlay.value;
|
|
66
|
-
if (!overlay)
|
|
67
|
-
return '';
|
|
68
|
-
switch (overlay.type) {
|
|
69
|
-
case OverlayType.WinningBet:
|
|
70
|
-
return 'You won your bet!';
|
|
71
|
-
case OverlayType.FantasyPlayerEvent:
|
|
72
|
-
return overlay.fantasy?.title ?? 'Fantasy Update';
|
|
73
|
-
default:
|
|
74
|
-
return '';
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
get overlayMetadata() {
|
|
78
|
-
const overlay = this._currentOverlay.value;
|
|
79
|
-
if (!overlay)
|
|
80
|
-
return '';
|
|
81
|
-
switch (overlay.type) {
|
|
82
|
-
case OverlayType.WinningBet:
|
|
83
|
-
return (overlay.winningBet?.notificationText ??
|
|
84
|
-
'Click OK to view your winning bets.');
|
|
85
|
-
case OverlayType.FantasyPlayerEvent:
|
|
86
|
-
return overlay.fantasy?.metadata ?? 'New Player Activity';
|
|
87
|
-
default:
|
|
88
|
-
return '';
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
showOverlay(overlayEvent) {
|
|
92
|
-
// If an overlay is already visible, queue this one
|
|
93
|
-
if (this._isVisible.value) {
|
|
94
|
-
const currentQueue = this._overlayQueue.value;
|
|
95
|
-
this._overlayQueue.value = [...currentQueue, overlayEvent];
|
|
96
|
-
return;
|
|
97
|
-
}
|
|
98
|
-
// Show the overlay
|
|
99
|
-
this._currentOverlay.value = overlayEvent;
|
|
100
|
-
this._isVisible.value = true;
|
|
101
|
-
this._hasTrackedView.value = false;
|
|
102
|
-
this._autoDismiss.value = true;
|
|
103
|
-
// Set up auto-dismiss
|
|
104
|
-
this.setupAutoDismiss();
|
|
105
|
-
}
|
|
106
|
-
hideOverlay() {
|
|
107
|
-
// Clear auto-dismiss timeout
|
|
108
|
-
if (this.autoDismissTimeout) {
|
|
109
|
-
clearTimeout(this.autoDismissTimeout);
|
|
110
|
-
this.autoDismissTimeout = null;
|
|
111
|
-
}
|
|
112
|
-
// Check if there are queued overlays
|
|
113
|
-
const queue = this._overlayQueue.value;
|
|
114
|
-
if (queue.length > 0) {
|
|
115
|
-
// Show next overlay in queue
|
|
116
|
-
const nextOverlay = queue[0];
|
|
117
|
-
const remainingQueue = queue.slice(1);
|
|
118
|
-
this._overlayQueue.value = remainingQueue;
|
|
119
|
-
this._currentOverlay.value = nextOverlay;
|
|
120
|
-
this._hasTrackedView.value = false;
|
|
121
|
-
this._autoDismiss.value = true; // Reset auto-dismiss for queued overlay
|
|
122
|
-
// Keep _isVisible as true since we're showing another overlay
|
|
123
|
-
// Set up auto-dismiss for next overlay
|
|
124
|
-
this.setupAutoDismiss();
|
|
125
|
-
}
|
|
126
|
-
else {
|
|
127
|
-
// No more overlays, hide completely
|
|
128
|
-
this._isVisible.value = false;
|
|
129
|
-
this._currentOverlay.value = null;
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
handleOverlayClick() {
|
|
133
|
-
const overlay = this._currentOverlay.value;
|
|
134
|
-
if (!overlay)
|
|
135
|
-
return;
|
|
136
|
-
// Track click event
|
|
137
|
-
this.trackOverlayClicked();
|
|
138
|
-
// Handle overlay-specific actions
|
|
139
|
-
switch (overlay.type) {
|
|
140
|
-
case OverlayType.WinningBet:
|
|
141
|
-
this._autoDismiss.value = false;
|
|
142
|
-
// TODO: Navigate to bets panel and deep link to specific bet
|
|
143
|
-
break;
|
|
144
|
-
case OverlayType.FantasyPlayerEvent:
|
|
145
|
-
// Fantasy overlay handled
|
|
146
|
-
break;
|
|
147
|
-
}
|
|
148
|
-
// Hide current overlay
|
|
149
|
-
this.hideOverlay();
|
|
150
|
-
}
|
|
151
|
-
trackOverlayViewed() {
|
|
152
|
-
if (this._hasTrackedView.value)
|
|
153
|
-
return;
|
|
154
|
-
const overlay = this._currentOverlay.value;
|
|
155
|
-
if (!overlay)
|
|
156
|
-
return;
|
|
157
|
-
this._hasTrackedView.value = true;
|
|
158
|
-
const event = {
|
|
159
|
-
eventName: 'overlayViewed',
|
|
160
|
-
attributes: {
|
|
161
|
-
template: 'espn_bet',
|
|
162
|
-
templateId: '',
|
|
163
|
-
instanceName: this.overlayTitle,
|
|
164
|
-
instanceId: this.getInstanceId(overlay),
|
|
165
|
-
fullscreen: false,
|
|
166
|
-
overlayType: overlay.type,
|
|
167
|
-
},
|
|
168
|
-
};
|
|
169
|
-
this.analyticsService.track(event);
|
|
170
|
-
}
|
|
171
|
-
trackOverlayClicked() {
|
|
172
|
-
const overlay = this._currentOverlay.value;
|
|
173
|
-
if (!overlay)
|
|
174
|
-
return;
|
|
175
|
-
const event = {
|
|
176
|
-
eventName: 'overlayClicked',
|
|
177
|
-
attributes: {
|
|
178
|
-
template: 'espn_bet',
|
|
179
|
-
templateId: '',
|
|
180
|
-
instanceName: this.overlayTitle,
|
|
181
|
-
instanceId: this.getInstanceId(overlay),
|
|
182
|
-
fullscreen: false,
|
|
183
|
-
overlayType: overlay.type,
|
|
184
|
-
},
|
|
185
|
-
};
|
|
186
|
-
this.analyticsService.track(event);
|
|
187
|
-
}
|
|
188
|
-
handleOverlayViewed(_overlayType) {
|
|
189
|
-
// Track that the overlay was viewed
|
|
190
|
-
this.trackOverlayViewed();
|
|
191
|
-
}
|
|
192
|
-
handleOverlayAction(_overlayType) {
|
|
193
|
-
// Track that the overlay was clicked/actioned
|
|
194
|
-
this.trackOverlayClicked();
|
|
195
|
-
}
|
|
196
|
-
cleanup() {
|
|
197
|
-
if (this.autoDismissTimeout) {
|
|
198
|
-
clearTimeout(this.autoDismissTimeout);
|
|
199
|
-
this.autoDismissTimeout = null;
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
setupAutoDismiss() {
|
|
203
|
-
if (this.autoDismissTimeout) {
|
|
204
|
-
clearTimeout(this.autoDismissTimeout);
|
|
205
|
-
}
|
|
206
|
-
this.autoDismissTimeout = setTimeout(() => {
|
|
207
|
-
if (this._autoDismiss.value) {
|
|
208
|
-
this.hideOverlay();
|
|
209
|
-
}
|
|
210
|
-
}, AUTO_DISMISS_TIMEOUT);
|
|
211
|
-
}
|
|
212
|
-
getInstanceId(overlay) {
|
|
213
|
-
switch (overlay.type) {
|
|
214
|
-
case OverlayType.WinningBet:
|
|
215
|
-
return overlay.winningBet?.serverID ?? '';
|
|
216
|
-
case OverlayType.FantasyPlayerEvent:
|
|
217
|
-
return overlay.fantasy?.athleteId ?? '';
|
|
218
|
-
default:
|
|
219
|
-
return '';
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
}
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
import { Observable } from '../helpers/Observable';
|
|
2
|
-
import { MaestroPanelType } from '../models/IPanel';
|
|
3
|
-
export class PanelManagerViewModel {
|
|
4
|
-
constructor() {
|
|
5
|
-
Object.defineProperty(this, "_panels", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
configurable: true,
|
|
8
|
-
writable: true,
|
|
9
|
-
value: new Observable([
|
|
10
|
-
MaestroPanelType.KEY_PLAYS,
|
|
11
|
-
MaestroPanelType.STATS,
|
|
12
|
-
MaestroPanelType.FANTASY,
|
|
13
|
-
MaestroPanelType.BETS,
|
|
14
|
-
])
|
|
15
|
-
});
|
|
16
|
-
Object.defineProperty(this, "_currentPanel", {
|
|
17
|
-
enumerable: true,
|
|
18
|
-
configurable: true,
|
|
19
|
-
writable: true,
|
|
20
|
-
value: new Observable(MaestroPanelType.KEY_PLAYS)
|
|
21
|
-
});
|
|
22
|
-
Object.defineProperty(this, "_newlyFocusedPanel", {
|
|
23
|
-
enumerable: true,
|
|
24
|
-
configurable: true,
|
|
25
|
-
writable: true,
|
|
26
|
-
value: new Observable(null)
|
|
27
|
-
});
|
|
28
|
-
}
|
|
29
|
-
// Getter for panels
|
|
30
|
-
get panels() {
|
|
31
|
-
return this._panels.value;
|
|
32
|
-
}
|
|
33
|
-
// Getter for panels observable
|
|
34
|
-
get panelsObservable() {
|
|
35
|
-
return this._panels;
|
|
36
|
-
}
|
|
37
|
-
// Getter for currentPanel
|
|
38
|
-
get currentPanel() {
|
|
39
|
-
return this._currentPanel.value;
|
|
40
|
-
}
|
|
41
|
-
// Setter for currentPanel
|
|
42
|
-
set currentPanel(value) {
|
|
43
|
-
this._currentPanel.value = value;
|
|
44
|
-
}
|
|
45
|
-
// Getter for currentPanel as Observable
|
|
46
|
-
get currentPanelObservable() {
|
|
47
|
-
return this._currentPanel;
|
|
48
|
-
}
|
|
49
|
-
// Getter for newlyFocusedPanel
|
|
50
|
-
get newlyFocusedPanel() {
|
|
51
|
-
return this._newlyFocusedPanel.value;
|
|
52
|
-
}
|
|
53
|
-
// Setter for newlyFocusedPanel
|
|
54
|
-
set newlyFocusedPanel(value) {
|
|
55
|
-
this._newlyFocusedPanel.value = value;
|
|
56
|
-
}
|
|
57
|
-
// Get the index of a specific panel type
|
|
58
|
-
getIndex(forPanelType) {
|
|
59
|
-
const index = this.panels.findIndex((p) => p === forPanelType);
|
|
60
|
-
return index !== -1 ? index : null;
|
|
61
|
-
}
|
|
62
|
-
// Get the panel type at a specific index
|
|
63
|
-
getPanelType(atIndex) {
|
|
64
|
-
return this.panels[atIndex] || null;
|
|
65
|
-
}
|
|
66
|
-
// Computed property for panel to the left
|
|
67
|
-
get panelTypeToLeft() {
|
|
68
|
-
const currentIndex = this.getIndex(this.currentPanel);
|
|
69
|
-
if (currentIndex === null || currentIndex === 0)
|
|
70
|
-
return null;
|
|
71
|
-
return this.getPanelType(currentIndex - 1);
|
|
72
|
-
}
|
|
73
|
-
// Computed property for panel to the right
|
|
74
|
-
get panelTypeToRight() {
|
|
75
|
-
const currentIndex = this.getIndex(this.currentPanel);
|
|
76
|
-
if (currentIndex === null || currentIndex === this.panels.length - 1)
|
|
77
|
-
return null;
|
|
78
|
-
return this.getPanelType(currentIndex + 1);
|
|
79
|
-
}
|
|
80
|
-
}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import { Observable } from '../helpers/Observable';
|
|
2
|
-
/**
|
|
3
|
-
* Base view model that implements reactive properties
|
|
4
|
-
*/
|
|
5
|
-
export class ViewModel {
|
|
6
|
-
constructor() {
|
|
7
|
-
Object.defineProperty(this, "_isLoading", {
|
|
8
|
-
enumerable: true,
|
|
9
|
-
configurable: true,
|
|
10
|
-
writable: true,
|
|
11
|
-
value: new Observable(false)
|
|
12
|
-
});
|
|
13
|
-
Object.defineProperty(this, "_error", {
|
|
14
|
-
enumerable: true,
|
|
15
|
-
configurable: true,
|
|
16
|
-
writable: true,
|
|
17
|
-
value: new Observable(null)
|
|
18
|
-
});
|
|
19
|
-
}
|
|
20
|
-
get isLoading() {
|
|
21
|
-
return this._isLoading;
|
|
22
|
-
}
|
|
23
|
-
get error() {
|
|
24
|
-
return this._error;
|
|
25
|
-
}
|
|
26
|
-
setLoading(loading) {
|
|
27
|
-
this._isLoading.value = loading;
|
|
28
|
-
}
|
|
29
|
-
setError(error) {
|
|
30
|
-
this._error.value = error;
|
|
31
|
-
}
|
|
32
|
-
}
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
import { MaestroEventViewModel } from './MaestroEventViewModel';
|
|
2
|
-
import { PanelManagerViewModel } from './PanelManagerViewModel';
|
|
3
|
-
import { OverlayViewModel } from './OverlayViewModel';
|
|
4
|
-
import KeyPlaysViewModel from '../modules/key-plays/view-model/KeyPlaysViewModel';
|
|
5
|
-
/**
|
|
6
|
-
* Aggregates all View Models
|
|
7
|
-
*/
|
|
8
|
-
export class MaestroViewModels {
|
|
9
|
-
constructor(eventViewModel) {
|
|
10
|
-
Object.defineProperty(this, "eventViewModel", {
|
|
11
|
-
enumerable: true,
|
|
12
|
-
configurable: true,
|
|
13
|
-
writable: true,
|
|
14
|
-
value: void 0
|
|
15
|
-
});
|
|
16
|
-
Object.defineProperty(this, "panelManagerViewModel", {
|
|
17
|
-
enumerable: true,
|
|
18
|
-
configurable: true,
|
|
19
|
-
writable: true,
|
|
20
|
-
value: void 0
|
|
21
|
-
});
|
|
22
|
-
Object.defineProperty(this, "keyPlaysViewModel", {
|
|
23
|
-
enumerable: true,
|
|
24
|
-
configurable: true,
|
|
25
|
-
writable: true,
|
|
26
|
-
value: void 0
|
|
27
|
-
});
|
|
28
|
-
Object.defineProperty(this, "overlayViewModel", {
|
|
29
|
-
enumerable: true,
|
|
30
|
-
configurable: true,
|
|
31
|
-
writable: true,
|
|
32
|
-
value: void 0
|
|
33
|
-
});
|
|
34
|
-
this.eventViewModel = eventViewModel;
|
|
35
|
-
this.panelManagerViewModel = new PanelManagerViewModel();
|
|
36
|
-
this.keyPlaysViewModel = new KeyPlaysViewModel();
|
|
37
|
-
const analyticsService = {
|
|
38
|
-
track: (event) => {
|
|
39
|
-
// TODO: Implement real analytics
|
|
40
|
-
console.log('Overlay analytics:', event);
|
|
41
|
-
},
|
|
42
|
-
};
|
|
43
|
-
// Create overlay view model - SDK handles all UI directly
|
|
44
|
-
this.overlayViewModel = new OverlayViewModel(analyticsService);
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* Creates view models from an event ID
|
|
48
|
-
*/
|
|
49
|
-
static async fromEventId(eventId, delegate) {
|
|
50
|
-
try {
|
|
51
|
-
const eventViewModel = new MaestroEventViewModel(eventId, delegate);
|
|
52
|
-
return new MaestroViewModels(eventViewModel);
|
|
53
|
-
}
|
|
54
|
-
catch (error) {
|
|
55
|
-
console.error('Error creating view models from event ID', error);
|
|
56
|
-
return null;
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
}
|