@agg-build/ui 2.5.3 → 2.7.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/{chunk-AELMIG74.mjs → chunk-C247AYH7.mjs} +242 -162
- package/dist/{chunk-FAU2VOL6.mjs → chunk-O27JUYCF.mjs} +36 -25
- package/dist/index.js +277 -186
- package/dist/index.mjs +2 -2
- package/dist/pages.js +277 -186
- package/dist/pages.mjs +2 -2
- package/dist/trading.js +36 -25
- package/dist/trading.mjs +1 -1
- package/dist/types/pages/event-market/sports-event-market.fixtures.d.mts +5 -5
- package/dist/types/pages/event-market/sports-event-market.fixtures.d.ts +5 -5
- package/dist/types/pages/event-market/sports-event-market.utils.d.mts +34 -43
- package/dist/types/pages/event-market/sports-event-market.utils.d.ts +34 -43
- package/dist/types/pages/event-market/sports-markets.d.mts +1 -2
- package/dist/types/pages/event-market/sports-markets.d.ts +1 -2
- package/dist/types/trading/place-order/index.place-order.utils.d.mts +9 -0
- package/dist/types/trading/place-order/index.place-order.utils.d.ts +9 -0
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -20552,7 +20552,7 @@ var buildLiveRouteCards = ({
|
|
|
20552
20552
|
};
|
|
20553
20553
|
}
|
|
20554
20554
|
const avgPrice = sq.avgPrice;
|
|
20555
|
-
const soloQuoteData = __spreadProps(__spreadValues({}, quoteData), {
|
|
20555
|
+
const soloQuoteData = __spreadValues(__spreadProps(__spreadValues({}, quoteData), {
|
|
20556
20556
|
// Preview-only solos intentionally carry no executable quoteId; the card
|
|
20557
20557
|
// should still render for comparison, while the CTA stays disabled until
|
|
20558
20558
|
// the user is funded and requotes.
|
|
@@ -20565,7 +20565,7 @@ var buildLiveRouteCards = ({
|
|
|
20565
20565
|
returnPct: sq.returnPct,
|
|
20566
20566
|
// venueSoloQuotes stripped on solo card's quoteData (only the primary needs them)
|
|
20567
20567
|
venueSoloQuotes: void 0
|
|
20568
|
-
});
|
|
20568
|
+
}), sq.quoteId ? { status: "ok", error: void 0 } : null);
|
|
20569
20569
|
return {
|
|
20570
20570
|
id: `live-solo-${sq.venue}`,
|
|
20571
20571
|
hint: labels.averagePrice(avgPrice),
|
|
@@ -20621,6 +20621,17 @@ var buildLiveRouteCards = ({
|
|
|
20621
20621
|
})() : [];
|
|
20622
20622
|
return [...baseCards, ...unavailableCards, ...warningOnlyUnavailableCards];
|
|
20623
20623
|
};
|
|
20624
|
+
var resolveDefaultRouteCardId = (routeCards, primaryStatus) => {
|
|
20625
|
+
var _a, _b, _c, _d;
|
|
20626
|
+
if (routeCards.length === 0) return null;
|
|
20627
|
+
if (primaryStatus === "insufficient_balance") {
|
|
20628
|
+
const executableCard = routeCards.find(
|
|
20629
|
+
(card) => !card.isUnavailable && card.quoteData.status === "ok" && card.quoteData.quoteId
|
|
20630
|
+
);
|
|
20631
|
+
if (executableCard) return executableCard.id;
|
|
20632
|
+
}
|
|
20633
|
+
return (_d = (_c = (_a = routeCards.find((card) => !card.isUnavailable)) == null ? void 0 : _a.id) != null ? _c : (_b = routeCards[0]) == null ? void 0 : _b.id) != null ? _d : null;
|
|
20634
|
+
};
|
|
20624
20635
|
var sellSharesToAtomicUnits = (shares) => {
|
|
20625
20636
|
if (!Number.isFinite(shares) || shares <= 0) return BigInt(0);
|
|
20626
20637
|
const [whole = "0", fraction = ""] = shares.toFixed(12).split(".");
|
|
@@ -22555,7 +22566,7 @@ var PlaceOrder = ({
|
|
|
22555
22566
|
resolvedClaim,
|
|
22556
22567
|
midpointsResult
|
|
22557
22568
|
}) => {
|
|
22558
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _A, _B, _C, _D, _E, _F, _G, _H, _I, _J, _K, _L, _M, _N, _O, _P, _Q, _R, _S, _T, _U, _V, _W, _X;
|
|
22569
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _A, _B, _C, _D, _E, _F, _G, _H, _I, _J, _K, _L, _M, _N, _O, _P, _Q, _R, _S, _T, _U, _V, _W, _X, _Y;
|
|
22559
22570
|
const {
|
|
22560
22571
|
enableDebug: isExecutionDebugEnabled,
|
|
22561
22572
|
features: { enableAnimations, showFeesBreakdown, showLimitOrders },
|
|
@@ -22986,13 +22997,13 @@ var PlaceOrder = ({
|
|
|
22986
22997
|
venueSellQuotes.quotes
|
|
22987
22998
|
]);
|
|
22988
22999
|
const resolvedSelectedRouteCardId = (0, import_react39.useMemo)(() => {
|
|
22989
|
-
var _a2
|
|
23000
|
+
var _a2;
|
|
22990
23001
|
if (routeCards.length === 0) return null;
|
|
22991
23002
|
if (selectedRouteCardId && routeCards.some((card) => card.id === selectedRouteCardId && !card.isUnavailable)) {
|
|
22992
23003
|
return selectedRouteCardId;
|
|
22993
23004
|
}
|
|
22994
|
-
return (
|
|
22995
|
-
}, [routeCards, selectedRouteCardId]);
|
|
23005
|
+
return resolveDefaultRouteCardId(routeCards, isSell ? void 0 : (_a2 = smartRoute.data) == null ? void 0 : _a2.status);
|
|
23006
|
+
}, [routeCards, selectedRouteCardId, isSell, (_w = smartRoute.data) == null ? void 0 : _w.status]);
|
|
22996
23007
|
(0, import_react39.useEffect)(() => {
|
|
22997
23008
|
if (routeCards.length === 0) {
|
|
22998
23009
|
setSelectedRouteCardId(null);
|
|
@@ -23032,14 +23043,14 @@ var PlaceOrder = ({
|
|
|
23032
23043
|
setLimitPriceInputError(null);
|
|
23033
23044
|
}, [executionType, scopedSelectedOutcomeId, selectedOutcomeDisplayPrice]);
|
|
23034
23045
|
const orderedRouteCards = routeCards;
|
|
23035
|
-
const selectedRouteCard = (
|
|
23046
|
+
const selectedRouteCard = (_y = (_x = orderedRouteCards.find((card) => card.id === resolvedSelectedRouteCardId)) != null ? _x : orderedRouteCards[0]) != null ? _y : null;
|
|
23036
23047
|
const isKalshiRoute = (0, import_react39.useMemo)(() => {
|
|
23037
23048
|
if (selectedRouteCard) {
|
|
23038
23049
|
return selectedRouteCard.venue === "kalshi" || selectedRouteCard.quoteData.fills.some((f) => f.venue === "kalshi");
|
|
23039
23050
|
}
|
|
23040
23051
|
return (scopedSelectedMarket == null ? void 0 : scopedSelectedMarket.venue) === "kalshi";
|
|
23041
23052
|
}, [selectedRouteCard, scopedSelectedMarket]);
|
|
23042
|
-
const displayedBalance = isPaperMode ? paperTotalBalance : isKalshiRoute ? (
|
|
23053
|
+
const displayedBalance = isPaperMode ? paperTotalBalance : isKalshiRoute ? (_z = liveBalanceState.kalshiBalance) != null ? _z : 0 : liveAvailableBalance;
|
|
23043
23054
|
const legacyKalshiAccount = (0, import_react39.useMemo)(
|
|
23044
23055
|
() => {
|
|
23045
23056
|
var _a2;
|
|
@@ -23047,8 +23058,8 @@ var PlaceOrder = ({
|
|
|
23047
23058
|
},
|
|
23048
23059
|
[user == null ? void 0 : user.venueAccounts]
|
|
23049
23060
|
);
|
|
23050
|
-
const isKalshiAccountActive = (
|
|
23051
|
-
const isKalshiVerified = ((
|
|
23061
|
+
const isKalshiAccountActive = (_A = kalshiKeyStatus == null ? void 0 : kalshiKeyStatus.connected) != null ? _A : (legacyKalshiAccount == null ? void 0 : legacyKalshiAccount.status) === "active";
|
|
23062
|
+
const isKalshiVerified = ((_B = kalshiKeyStatus == null ? void 0 : kalshiKeyStatus.kycStatus) != null ? _B : legacyKalshiAccount == null ? void 0 : legacyKalshiAccount.kycStatus) === "verified";
|
|
23052
23063
|
const hasKalshiConnectionState = kalshiKeyStatus !== void 0 || (user == null ? void 0 : user.venueAccounts) != null;
|
|
23053
23064
|
const isKalshiAvailable = (0, import_hooks63.getVenueAvailabilityState)({
|
|
23054
23065
|
venueId: "kalshi",
|
|
@@ -23075,7 +23086,7 @@ var PlaceOrder = ({
|
|
|
23075
23086
|
[aggClient, onConnectKalshi, refetchKalshiKeyStatus]
|
|
23076
23087
|
);
|
|
23077
23088
|
const needsKycVerification = isAuthenticated && hasKalshiConnectionState && isKalshiRoute && isKalshiAccountActive && !isKalshiVerified;
|
|
23078
|
-
const verifyKalshiConnectionLabel = (
|
|
23089
|
+
const verifyKalshiConnectionLabel = (_F = (_E = (_D = (_C = labels.onboarding) == null ? void 0 : _C.connectKalshiModal) == null ? void 0 : _D.actions) == null ? void 0 : _E.verifyConnection) != null ? _F : tradingLabels.kycRequired;
|
|
23079
23090
|
const handleRouteCardSelect = (0, import_react39.useCallback)(
|
|
23080
23091
|
(cardId) => {
|
|
23081
23092
|
if (cardId === resolvedSelectedRouteCardId) {
|
|
@@ -23090,15 +23101,15 @@ var PlaceOrder = ({
|
|
|
23090
23101
|
[resolvedSelectedRouteCardId, routeCards]
|
|
23091
23102
|
);
|
|
23092
23103
|
const executionProgress = (0, import_hooks63.useExecutionProgress)({
|
|
23093
|
-
orderIds: (
|
|
23094
|
-
quoteId: (
|
|
23104
|
+
orderIds: (_G = submissionProgressState == null ? void 0 : submissionProgressState.orderIds) != null ? _G : null,
|
|
23105
|
+
quoteId: (_H = submissionProgressState == null ? void 0 : submissionProgressState.quoteId) != null ? _H : null,
|
|
23095
23106
|
mode: isPaperMode ? "paper" : void 0,
|
|
23096
|
-
enabled: ((submissionProgressState == null ? void 0 : submissionProgressState.phase) === "submitting" || (submissionProgressState == null ? void 0 : submissionProgressState.phase) === "executing") && !!((
|
|
23107
|
+
enabled: ((submissionProgressState == null ? void 0 : submissionProgressState.phase) === "submitting" || (submissionProgressState == null ? void 0 : submissionProgressState.phase) === "executing") && !!((_I = submissionProgressState == null ? void 0 : submissionProgressState.orderIds) == null ? void 0 : _I.length)
|
|
23097
23108
|
});
|
|
23098
|
-
const selectedOutcomeLabel = (
|
|
23099
|
-
const headerImage = (
|
|
23100
|
-
const headerTitle = (
|
|
23101
|
-
const headerSubtitle = (
|
|
23109
|
+
const selectedOutcomeLabel = (_L = (_K = (_J = outcomes.find((outcome) => outcome.id === scopedSelectedOutcomeId)) == null ? void 0 : _J.label) != null ? _K : scopedSelectedOutcome == null ? void 0 : scopedSelectedOutcome.label) != null ? _L : "";
|
|
23110
|
+
const headerImage = (_N = (_M = scopedSelectedMarket == null ? void 0 : scopedSelectedMarket.image) != null ? _M : scopedSelectedEvent == null ? void 0 : scopedSelectedEvent.image) != null ? _N : null;
|
|
23111
|
+
const headerTitle = (_P = (_O = scopedSelectedEvent == null ? void 0 : scopedSelectedEvent.title) != null ? _O : scopedSelectedMarket == null ? void 0 : scopedSelectedMarket.question) != null ? _P : "";
|
|
23112
|
+
const headerSubtitle = (_Q = scopedSelectedMarket == null ? void 0 : scopedSelectedMarket.question) != null ? _Q : "";
|
|
23102
23113
|
const buildExecutionSummary = (0, import_react39.useCallback)(
|
|
23103
23114
|
(quoteData, executionVenue, orderId, partialFillSummary) => {
|
|
23104
23115
|
var _a2, _b2, _c2, _d2, _e2, _f2, _g2, _h2;
|
|
@@ -23396,19 +23407,19 @@ var PlaceOrder = ({
|
|
|
23396
23407
|
queryClient,
|
|
23397
23408
|
submissionProgressState
|
|
23398
23409
|
]);
|
|
23399
|
-
const activeQuoteData = (
|
|
23410
|
+
const activeQuoteData = (_S = (_R = selectedRouteCard == null ? void 0 : selectedRouteCard.quoteData) != null ? _R : smartRoute.data) != null ? _S : null;
|
|
23400
23411
|
const visibleRouteCards = orderedRouteCards.length > PLACE_ORDER_ROUTE_COLLAPSED_CARD_COUNT && !isRoutesExpanded ? orderedRouteCards.slice(0, PLACE_ORDER_ROUTE_COLLAPSED_CARD_COUNT) : orderedRouteCards;
|
|
23401
23412
|
const hasEnteredAmount = internalAmount > 0;
|
|
23402
23413
|
const isQuoteLoading = !isLimitOrder && hasEnteredAmount && (smartRoute.isFetching || smartRoute.isLoading || isSell && (venueSellQuotes.isFetching || venueSellQuotes.isLoading));
|
|
23403
23414
|
const routeLoadingMessage = isQuoteLoading ? smartRoute.loadingReason === "updating-route" ? tradingLabels.updatingRoute : smartRoute.loadingReason === "refreshing-quotes" ? tradingLabels.refreshingQuotes : tradingLabels.findingBestOdds : null;
|
|
23404
|
-
const selectedRouteFills = (
|
|
23415
|
+
const selectedRouteFills = (_T = selectedRouteCard == null ? void 0 : selectedRouteCard.quoteData.fills) != null ? _T : [];
|
|
23405
23416
|
const isKalshiOnlyRoute = isKalshiRoute && ((selectedRouteCard == null ? void 0 : selectedRouteCard.venue) === import_sdk23.Venue.kalshi || selectedRouteFills.length > 0 && selectedRouteFills.every((fill) => fill.venue === import_sdk23.Venue.kalshi));
|
|
23406
23417
|
const isOnchainOnlyRoute = !isKalshiRoute || selectedRouteFills.length > 0 && selectedRouteFills.every((fill) => fill.venue !== import_sdk23.Venue.kalshi);
|
|
23407
23418
|
const kalshiRequiredAmount = isSell ? 0 : selectedRouteFills.filter((fill) => fill.venue === import_sdk23.Venue.kalshi).reduce((total, fill) => total + fill.venueQty * fill.avgPrice, 0);
|
|
23408
23419
|
const onchainRequiredAmount = isSell ? 0 : selectedRouteFills.filter((fill) => fill.venue !== import_sdk23.Venue.kalshi).reduce((total, fill) => total + fill.venueQty * fill.avgPrice, 0);
|
|
23409
23420
|
const resolvedKalshiRequiredAmount = isKalshiOnlyRoute || isKalshiRoute && selectedRouteFills.length === 0 ? internalAmount : kalshiRequiredAmount;
|
|
23410
23421
|
const resolvedOnchainRequiredAmount = isOnchainOnlyRoute || !isKalshiRoute && selectedRouteFills.length === 0 ? internalAmount : onchainRequiredAmount;
|
|
23411
|
-
const isKalshiBalanceInsufficient = !isPaperMode && isKalshiRoute && resolvedKalshiRequiredAmount > ((
|
|
23422
|
+
const isKalshiBalanceInsufficient = !isPaperMode && isKalshiRoute && resolvedKalshiRequiredAmount > ((_U = liveBalanceState.kalshiBalance) != null ? _U : 0);
|
|
23412
23423
|
const isOnchainBalanceInsufficient = resolvedOnchainRequiredAmount > liveAvailableBalance;
|
|
23413
23424
|
const isInsufficientBalance = !isSell && isAuthenticated && hasEnteredAmount && !isBalanceLoading && (isLimitOrder ? internalAmount > totalBalance : isPaperMode ? internalAmount > paperTotalBalance : isKalshiBalanceInsufficient || isOnchainBalanceInsufficient);
|
|
23414
23425
|
const isQuoteInsufficientBalance = !isLimitOrder && (activeQuoteData == null ? void 0 : activeQuoteData.status) === "insufficient_balance";
|
|
@@ -23502,7 +23513,7 @@ var PlaceOrder = ({
|
|
|
23502
23513
|
}
|
|
23503
23514
|
return (_d2 = selectedRouteCard.hint) != null ? _d2 : "";
|
|
23504
23515
|
}, [selectedRouteCard, tradingLabels]);
|
|
23505
|
-
const displayedToWinValue = (
|
|
23516
|
+
const displayedToWinValue = (_V = selectedRouteCard == null ? void 0 : selectedRouteCard.numericValue) != null ? _V : 0;
|
|
23506
23517
|
const limitOrderPayload = (0, import_react39.useMemo)(() => {
|
|
23507
23518
|
if (!scopedSelectedMarket || !scopedSelectedOutcomeId || internalAmount <= 0) return null;
|
|
23508
23519
|
if (limitPriceInputError) return null;
|
|
@@ -23621,13 +23632,13 @@ var PlaceOrder = ({
|
|
|
23621
23632
|
];
|
|
23622
23633
|
}, [activeFeeBreakdown, tradingLabels]);
|
|
23623
23634
|
const isActionLoading = isPrimaryActionLoading || executeManaged.isPending || placeLimitOrder.isPending || isBeforeActionPending;
|
|
23624
|
-
const selectedRouteGeoBlocked = (
|
|
23635
|
+
const selectedRouteGeoBlocked = (_W = selectedRouteCard == null ? void 0 : selectedRouteCard.isUnavailable) != null ? _W : false;
|
|
23625
23636
|
const geoBlockedVenuesFromWarnings = (0, import_react39.useMemo)(
|
|
23626
23637
|
() => {
|
|
23627
23638
|
var _a2;
|
|
23628
23639
|
return extractGeoBlockedVenues((_a2 = smartRoute.data) == null ? void 0 : _a2.warnings);
|
|
23629
23640
|
},
|
|
23630
|
-
[(
|
|
23641
|
+
[(_X = smartRoute.data) == null ? void 0 : _X.warnings]
|
|
23631
23642
|
);
|
|
23632
23643
|
const isPrimaryVenueGeoBlocked = (0, import_react39.useMemo)(() => {
|
|
23633
23644
|
var _a2, _b2;
|
|
@@ -24285,7 +24296,7 @@ var PlaceOrder = ({
|
|
|
24285
24296
|
PlaceOrderResolvedView,
|
|
24286
24297
|
{
|
|
24287
24298
|
tradingState: resolvedReadOnlyTradingState,
|
|
24288
|
-
resolutionTimestamp: (
|
|
24299
|
+
resolutionTimestamp: (_Y = resolvedEventTradingState.resolvesAt) != null ? _Y : resolvedReadOnlyTradingState.resolvesAt,
|
|
24289
24300
|
resolvedClaim,
|
|
24290
24301
|
classNames,
|
|
24291
24302
|
className,
|
|
@@ -25718,64 +25729,15 @@ var SPORTS_LEGACY_PROP_CATEGORY_KEY_SET = /* @__PURE__ */ new Set([
|
|
|
25718
25729
|
"assists",
|
|
25719
25730
|
"shots"
|
|
25720
25731
|
]);
|
|
25721
|
-
var
|
|
25722
|
-
"
|
|
25723
|
-
|
|
25724
|
-
|
|
25725
|
-
|
|
25726
|
-
|
|
25727
|
-
|
|
25728
|
-
totals: "game_lines",
|
|
25729
|
-
period_lines: "halves",
|
|
25730
|
-
exact_score: "exact_score",
|
|
25731
|
-
team_props: "other",
|
|
25732
|
-
player_props: "other",
|
|
25733
|
-
specials: "other",
|
|
25734
|
-
completion: "other",
|
|
25735
|
-
other: "other"
|
|
25736
|
-
};
|
|
25737
|
-
var SPORTS_SECTION_TAB_DEFINITIONS = [
|
|
25738
|
-
{
|
|
25739
|
-
key: "game_lines",
|
|
25740
|
-
// NO sportsMarketType filter: spread/total markets on some sports (e.g.
|
|
25741
|
-
// esports "Map 1 Rounds Handicap"/"Total Rounds") are sportsMarketType="other"
|
|
25742
|
-
// with marketGroup=spreads/totals; AND-ing the game-line types would drop them
|
|
25743
|
-
// and leave only the moneyline. marketGroup already scopes the tab. (Safe now
|
|
25744
|
-
// that classify_market no longer mis-groups prop/to-score-first/extra-innings
|
|
25745
|
-
// markets into game_lines/totals — see agg-venue-core market_group.rs.)
|
|
25746
|
-
marketGroup: ["game_lines", "spreads", "totals"]
|
|
25747
|
-
// No server-side period filter: many regular-time game-line markets arrive
|
|
25748
|
-
// with period=null (moneyline sides, team totals, BTTS), and a
|
|
25749
|
-
// period=["full"] filter would drop them server-side. The Game Lines tab
|
|
25750
|
-
// narrows to the regular-time group client-side instead (see SportsMarkets).
|
|
25751
|
-
},
|
|
25752
|
-
{ key: "exact_score", marketGroup: ["exact_score"] },
|
|
25753
|
-
{
|
|
25754
|
-
key: "halves",
|
|
25755
|
-
// NO sportsMarketType filter: half-result legs ("France leading at halftime?")
|
|
25756
|
-
// are sportsMarketType="other"; AND-ing the game-line types would drop them.
|
|
25757
|
-
// marketGroup=period_lines + period already scope the tab.
|
|
25758
|
-
marketGroup: ["period_lines"],
|
|
25759
|
-
period: ["1h", "2h"]
|
|
25760
|
-
},
|
|
25761
|
-
{ key: "corners", marketCategory: "corners" },
|
|
25762
|
-
{ key: "goals", marketCategory: "goals" },
|
|
25763
|
-
{ key: "assists", marketCategory: "assists" },
|
|
25764
|
-
{ key: "shots", marketCategory: "shots" },
|
|
25765
|
-
{
|
|
25766
|
-
key: "other",
|
|
25767
|
-
// `player_props` is deliberately NOT fetched here: goals/assists/shots/corners
|
|
25768
|
-
// props already have dedicated tabs (resolveMarketSectionTabKey routes them
|
|
25769
|
-
// there by category), so including the group would re-fetch hundreds of props
|
|
25770
|
-
// already shown elsewhere. The handful with no stat category (e.g. "saves")
|
|
25771
|
-
// are back-filled from the game-wide set in resolveSportsSectionMarkets.
|
|
25772
|
-
marketGroup: ["other", "team_props", "specials", "completion"]
|
|
25773
|
-
}
|
|
25732
|
+
var SPORTS_GAME_LINE_GROUPS = [
|
|
25733
|
+
"game_lines",
|
|
25734
|
+
"spreads",
|
|
25735
|
+
"totals",
|
|
25736
|
+
"team_props",
|
|
25737
|
+
"specials",
|
|
25738
|
+
"completion"
|
|
25774
25739
|
];
|
|
25775
|
-
var
|
|
25776
|
-
var SPORTS_NON_STANDARD_VISIBLE_TAB_KEY_SET = new Set(
|
|
25777
|
-
SPORTS_NON_STANDARD_VISIBLE_TAB_KEYS
|
|
25778
|
-
);
|
|
25740
|
+
var SPORTS_GENERIC_STAT = "player_props";
|
|
25779
25741
|
var ESPORTS_CATEGORY_TOKENS = /* @__PURE__ */ new Set([
|
|
25780
25742
|
"esports",
|
|
25781
25743
|
"video games",
|
|
@@ -25786,9 +25748,6 @@ var ESPORTS_CATEGORY_TOKENS = /* @__PURE__ */ new Set([
|
|
|
25786
25748
|
]);
|
|
25787
25749
|
var ESPORTS_TITLE_PATTERN = /\b(?:esports?|valorant|counter-strike|cs2|league of legends|lol|dota|rocket league|overwatch|rainbow six|starcraft|call of duty)\b/i;
|
|
25788
25750
|
var SERIES_SCOPE_PATTERN = /\b(?:bo[1-9]|best of \d+|map \d+|game \d+)\b/i;
|
|
25789
|
-
var SPORTS_SECTION_TAB_BY_KEY = new Map(
|
|
25790
|
-
SPORTS_SECTION_TAB_DEFINITIONS.map((definition) => [definition.key, definition])
|
|
25791
|
-
);
|
|
25792
25751
|
var SPORTS_PERIOD_ORDER = [
|
|
25793
25752
|
"full",
|
|
25794
25753
|
"1h",
|
|
@@ -25853,12 +25812,13 @@ var getSportsMarketTypeOrderIndex = (sportsMarketType) => {
|
|
|
25853
25812
|
const marketTypeIndex = SPORTS_MARKET_TYPE_ORDER.indexOf(sportsMarketType);
|
|
25854
25813
|
return marketTypeIndex >= 0 ? marketTypeIndex : SPORTS_MARKET_TYPE_ORDER.length;
|
|
25855
25814
|
};
|
|
25856
|
-
var
|
|
25857
|
-
|
|
25858
|
-
if (
|
|
25859
|
-
|
|
25860
|
-
}
|
|
25861
|
-
return
|
|
25815
|
+
var resolveSportsPeriodFamily = (period) => {
|
|
25816
|
+
if (period === "1h" || period === "2h") return "halves";
|
|
25817
|
+
if (period === "q1" || period === "q2" || period === "q3" || period === "q4") return "quarters";
|
|
25818
|
+
if (/^inning_\d{1,2}$/.test(period)) return "innings";
|
|
25819
|
+
if (/^set_\d{1,2}$/.test(period)) return "sets";
|
|
25820
|
+
if (/^(?:map|game)_\d{1,2}$/.test(period)) return "maps";
|
|
25821
|
+
return period;
|
|
25862
25822
|
};
|
|
25863
25823
|
var normalizeSportsPeriod = (value) => {
|
|
25864
25824
|
const resolvedValue = toTrimmedString(value).toLowerCase();
|
|
@@ -25903,34 +25863,134 @@ var resolveFallbackSportsMarketCategory = (market) => {
|
|
|
25903
25863
|
if (question.includes("goal")) return "goals";
|
|
25904
25864
|
return null;
|
|
25905
25865
|
};
|
|
25866
|
+
var resolveSportsStatToken = (market) => {
|
|
25867
|
+
const subtype = toTrimmedString(market.marketSubtype).toLowerCase();
|
|
25868
|
+
const playerMatch = /_player_(.+)$/.exec(subtype);
|
|
25869
|
+
if (playerMatch) return playerMatch[1];
|
|
25870
|
+
const category = normalizeSportsMarketCategory(market.marketCategory);
|
|
25871
|
+
if (category && SPORTS_LEGACY_PROP_CATEGORY_KEY_SET.has(category)) return category;
|
|
25872
|
+
return null;
|
|
25873
|
+
};
|
|
25906
25874
|
var resolveMarketSectionTabKey = (market) => {
|
|
25875
|
+
var _a;
|
|
25907
25876
|
if (normalizeSportsMarketType(market.sportsMarketType) === "to_advance") {
|
|
25908
25877
|
return "game_lines";
|
|
25909
25878
|
}
|
|
25910
25879
|
const normalizedCategory = normalizeSportsMarketCategory(market.marketCategory);
|
|
25911
25880
|
const fallbackCategory = !normalizedCategory || normalizedCategory === "other" ? resolveFallbackSportsMarketCategory(market) : null;
|
|
25912
25881
|
const category = fallbackCategory != null ? fallbackCategory : normalizedCategory;
|
|
25913
|
-
if (category &&
|
|
25914
|
-
|
|
25915
|
-
}
|
|
25882
|
+
if (category && SPORTS_LEGACY_PROP_CATEGORY_KEY_SET.has(category)) return `stat:${category}`;
|
|
25883
|
+
if (category === "exact_score") return "exact_score";
|
|
25916
25884
|
const group = normalizeSportsMarketGroup(market.marketGroup);
|
|
25917
|
-
if (group) return
|
|
25885
|
+
if (group === "exact_score") return "exact_score";
|
|
25886
|
+
if (group === "player_props") {
|
|
25887
|
+
return `stat:${(_a = resolveSportsStatToken(market)) != null ? _a : SPORTS_GENERIC_STAT}`;
|
|
25888
|
+
}
|
|
25889
|
+
if (group === "period_lines") {
|
|
25890
|
+
return `period:${resolveSportsPeriodFamily(normalizeSportsPeriod(market.period))}`;
|
|
25891
|
+
}
|
|
25892
|
+
if (group === "other") return "other";
|
|
25893
|
+
if (group) return "game_lines";
|
|
25918
25894
|
if (category === "game_lines") return "game_lines";
|
|
25919
25895
|
if (category === "other") return "other";
|
|
25920
25896
|
return null;
|
|
25921
25897
|
};
|
|
25922
|
-
var
|
|
25923
|
-
var _a;
|
|
25924
|
-
const
|
|
25925
|
-
const
|
|
25898
|
+
var resolveVisibleSportsSectionTabs = (event) => {
|
|
25899
|
+
var _a, _b, _c;
|
|
25900
|
+
const periodsByFamily = /* @__PURE__ */ new Map();
|
|
25901
|
+
const statVolume = /* @__PURE__ */ new Map();
|
|
25902
|
+
let hasGameLines = false;
|
|
25903
|
+
let hasExactScore = false;
|
|
25904
|
+
let hasOther = false;
|
|
25905
|
+
for (const market of event.venueMarkets) {
|
|
25906
|
+
const key = resolveMarketSectionTabKey(market);
|
|
25907
|
+
if (!key) continue;
|
|
25908
|
+
if (key === "game_lines") hasGameLines = true;
|
|
25909
|
+
else if (key === "exact_score") hasExactScore = true;
|
|
25910
|
+
else if (key === "other") hasOther = true;
|
|
25911
|
+
else if (key.startsWith("period:")) {
|
|
25912
|
+
const family = key.slice("period:".length);
|
|
25913
|
+
const periods = (_a = periodsByFamily.get(family)) != null ? _a : /* @__PURE__ */ new Set();
|
|
25914
|
+
periods.add(normalizeSportsPeriod(market.period));
|
|
25915
|
+
periodsByFamily.set(family, periods);
|
|
25916
|
+
} else if (key.startsWith("stat:")) {
|
|
25917
|
+
const stat = key.slice("stat:".length);
|
|
25918
|
+
statVolume.set(stat, ((_b = statVolume.get(stat)) != null ? _b : 0) + ((_c = market.volume) != null ? _c : 0));
|
|
25919
|
+
}
|
|
25920
|
+
}
|
|
25921
|
+
const tabs = [];
|
|
25922
|
+
if (hasGameLines) tabs.push({ key: "game_lines", kind: "game_lines" });
|
|
25923
|
+
const periodTabs = Array.from(periodsByFamily.entries()).map(([periodFamily, periods]) => ({
|
|
25924
|
+
key: `period:${periodFamily}`,
|
|
25925
|
+
kind: "period",
|
|
25926
|
+
periodFamily,
|
|
25927
|
+
periods: Array.from(periods).sort(
|
|
25928
|
+
(left, right) => getSportsPeriodOrderIndex(left) - getSportsPeriodOrderIndex(right)
|
|
25929
|
+
)
|
|
25930
|
+
})).sort(
|
|
25931
|
+
(left, right) => getSportsPeriodOrderIndex(left.periods[0]) - getSportsPeriodOrderIndex(right.periods[0])
|
|
25932
|
+
);
|
|
25933
|
+
tabs.push(...periodTabs);
|
|
25934
|
+
const statTabs = Array.from(statVolume.entries()).sort((left, right) => {
|
|
25935
|
+
if (left[0] === SPORTS_GENERIC_STAT !== (right[0] === SPORTS_GENERIC_STAT)) {
|
|
25936
|
+
return left[0] === SPORTS_GENERIC_STAT ? 1 : -1;
|
|
25937
|
+
}
|
|
25938
|
+
return right[1] - left[1];
|
|
25939
|
+
}).map(([stat]) => ({ key: `stat:${stat}`, kind: "stat", stat }));
|
|
25940
|
+
tabs.push(...statTabs);
|
|
25941
|
+
if (hasExactScore) tabs.push({ key: "exact_score", kind: "exact_score" });
|
|
25942
|
+
if (hasOther) tabs.push({ key: "other", kind: "other" });
|
|
25943
|
+
if (isNonStandardSportsLikeEvent(event)) {
|
|
25944
|
+
return tabs.filter((tab) => tab.kind === "game_lines" || tab.kind === "other");
|
|
25945
|
+
}
|
|
25946
|
+
return tabs;
|
|
25947
|
+
};
|
|
25948
|
+
var resolveSportsSectionFilters = (tab) => {
|
|
25949
|
+
if (tab.kind === "period") {
|
|
25950
|
+
return {
|
|
25951
|
+
marketGroup: ["period_lines"],
|
|
25952
|
+
marketCategory: void 0,
|
|
25953
|
+
sportsMarketType: void 0,
|
|
25954
|
+
period: tab.periods ? [...tab.periods] : void 0
|
|
25955
|
+
};
|
|
25956
|
+
}
|
|
25957
|
+
if (tab.kind === "stat") {
|
|
25958
|
+
const legacyCategory = SPORTS_LEGACY_PROP_CATEGORY_KEY_SET.has(
|
|
25959
|
+
tab.stat
|
|
25960
|
+
) ? tab.stat : null;
|
|
25961
|
+
return legacyCategory ? {
|
|
25962
|
+
marketGroup: void 0,
|
|
25963
|
+
marketCategory: [legacyCategory],
|
|
25964
|
+
sportsMarketType: void 0,
|
|
25965
|
+
period: void 0
|
|
25966
|
+
} : {
|
|
25967
|
+
marketGroup: ["player_props"],
|
|
25968
|
+
marketCategory: void 0,
|
|
25969
|
+
sportsMarketType: void 0,
|
|
25970
|
+
period: void 0
|
|
25971
|
+
};
|
|
25972
|
+
}
|
|
25973
|
+
if (tab.kind === "exact_score") {
|
|
25974
|
+
return {
|
|
25975
|
+
marketGroup: ["exact_score"],
|
|
25976
|
+
marketCategory: void 0,
|
|
25977
|
+
sportsMarketType: void 0,
|
|
25978
|
+
period: void 0
|
|
25979
|
+
};
|
|
25980
|
+
}
|
|
25981
|
+
if (tab.kind === "other") {
|
|
25982
|
+
return {
|
|
25983
|
+
marketGroup: ["other"],
|
|
25984
|
+
marketCategory: void 0,
|
|
25985
|
+
sportsMarketType: void 0,
|
|
25986
|
+
period: void 0
|
|
25987
|
+
};
|
|
25988
|
+
}
|
|
25926
25989
|
return {
|
|
25927
|
-
marketGroup:
|
|
25928
|
-
|
|
25929
|
-
|
|
25930
|
-
|
|
25931
|
-
marketCategory: !useMarketGroup && resolvedDefinition.marketCategory ? [resolvedDefinition.marketCategory] : void 0,
|
|
25932
|
-
sportsMarketType: resolvedDefinition.sportsMarketType ? [...resolvedDefinition.sportsMarketType] : void 0,
|
|
25933
|
-
period: resolvedDefinition.period ? [...resolvedDefinition.period] : void 0
|
|
25990
|
+
marketGroup: [...SPORTS_GAME_LINE_GROUPS],
|
|
25991
|
+
marketCategory: void 0,
|
|
25992
|
+
sportsMarketType: void 0,
|
|
25993
|
+
period: void 0
|
|
25934
25994
|
};
|
|
25935
25995
|
};
|
|
25936
25996
|
var hasTeamTitledOutcomes = (market) => {
|
|
@@ -25944,28 +26004,41 @@ var isClusterRelation = (left, right) => {
|
|
|
25944
26004
|
var _a, _b;
|
|
25945
26005
|
return ((_a = left.matchedVenueMarkets) != null ? _a : []).some((market) => market.id === right.id) || ((_b = right.matchedVenueMarkets) != null ? _b : []).some((market) => market.id === left.id);
|
|
25946
26006
|
};
|
|
25947
|
-
var
|
|
25948
|
-
|
|
25949
|
-
|
|
25950
|
-
|
|
25951
|
-
);
|
|
26007
|
+
var isDecomposedLeg = (market) => {
|
|
26008
|
+
var _a;
|
|
26009
|
+
const labels = ((_a = market.venueMarketOutcomes) != null ? _a : []).map(
|
|
26010
|
+
(outcome) => toTrimmedString(outcome.label).toLowerCase()
|
|
26011
|
+
);
|
|
26012
|
+
return labels.length === 2 && labels.every((label2) => YES_NO_LABELS.has(label2)) && !hasTeamTitledOutcomes(market);
|
|
26013
|
+
};
|
|
26014
|
+
var dropDecomposedLegsMergedIntoSingle = (markets) => {
|
|
26015
|
+
const legs = markets.filter((market) => isDecomposedLeg(market));
|
|
26016
|
+
if (legs.length === 0) return markets;
|
|
26017
|
+
const hasMergedSingle = markets.some(
|
|
26018
|
+
(market) => {
|
|
26019
|
+
var _a, _b;
|
|
26020
|
+
return hasTeamTitledOutcomes(market) && ((_b = (_a = market.venueMarketOutcomes) == null ? void 0 : _a.length) != null ? _b : 0) >= legs.length && markets.some((other) => other !== market && isClusterRelation(market, other));
|
|
26021
|
+
}
|
|
26022
|
+
);
|
|
26023
|
+
return hasMergedSingle ? markets.filter((market) => !isDecomposedLeg(market)) : markets;
|
|
26024
|
+
};
|
|
25952
26025
|
var resolveSportsSectionMarkets = ({
|
|
25953
|
-
|
|
26026
|
+
tab,
|
|
25954
26027
|
eventMarkets,
|
|
25955
26028
|
sectionMarkets
|
|
25956
26029
|
}) => {
|
|
25957
|
-
const effectiveSectionMarkets = sectionMarkets.length > 0 ? sectionMarkets : eventMarkets.filter((market) => resolveMarketSectionTabKey(market) ===
|
|
26030
|
+
const effectiveSectionMarkets = sectionMarkets.length > 0 ? sectionMarkets : eventMarkets.filter((market) => resolveMarketSectionTabKey(market) === tab.key);
|
|
25958
26031
|
const filteredSectionMarkets = effectiveSectionMarkets.filter(
|
|
25959
|
-
(market) => resolveMarketSectionTabKey(market) ===
|
|
26032
|
+
(market) => resolveMarketSectionTabKey(market) === tab.key
|
|
25960
26033
|
);
|
|
25961
|
-
if (
|
|
26034
|
+
if (tab.key === "other" || tab.key === `stat:${SPORTS_GENERIC_STAT}`) {
|
|
25962
26035
|
const seenIds = new Set(filteredSectionMarkets.map((market) => market.id));
|
|
25963
|
-
const
|
|
25964
|
-
(market) => !seenIds.has(market.id) && resolveMarketSectionTabKey(market) ===
|
|
26036
|
+
const strayMarkets = eventMarkets.filter(
|
|
26037
|
+
(market) => !seenIds.has(market.id) && resolveMarketSectionTabKey(market) === tab.key
|
|
25965
26038
|
);
|
|
25966
|
-
return [...filteredSectionMarkets, ...
|
|
26039
|
+
return [...filteredSectionMarkets, ...strayMarkets];
|
|
25967
26040
|
}
|
|
25968
|
-
if (
|
|
26041
|
+
if (tab.kind !== "game_lines") return filteredSectionMarkets;
|
|
25969
26042
|
const dedupeEventMarketsOfType = (type) => {
|
|
25970
26043
|
const dedupedMarkets = [];
|
|
25971
26044
|
const seenKeys = /* @__PURE__ */ new Set();
|
|
@@ -26065,7 +26138,9 @@ var resolveSpreadOutcomeTeamNames = (activeMarket, groupMarkets) => {
|
|
|
26065
26138
|
return toTrimmedString((_b = (_a = market.venueMarketOutcomes) == null ? void 0 : _a[index]) == null ? void 0 : _b.title);
|
|
26066
26139
|
}).filter((title2) => isSpreadTeamTitle(title2));
|
|
26067
26140
|
if (cleanTitles.length === 0) return null;
|
|
26068
|
-
return cleanTitles.reduce(
|
|
26141
|
+
return cleanTitles.reduce(
|
|
26142
|
+
(longest, title2) => title2.length > longest.length ? title2 : longest
|
|
26143
|
+
);
|
|
26069
26144
|
};
|
|
26070
26145
|
return { favored: pickName(0), dog: pickName(1) };
|
|
26071
26146
|
};
|
|
@@ -26074,9 +26149,7 @@ var resolveCombinedMoneylineLegLabel = (market) => {
|
|
|
26074
26149
|
return toTrimmedString(typedMarket.shortTitle) || toTrimmedString(market.question);
|
|
26075
26150
|
};
|
|
26076
26151
|
var areCombinedMoneylineLegsDistinct = (markets) => {
|
|
26077
|
-
const labels = markets.map(
|
|
26078
|
-
(market) => resolveCombinedMoneylineLegLabel(market).toLowerCase()
|
|
26079
|
-
);
|
|
26152
|
+
const labels = markets.map((market) => resolveCombinedMoneylineLegLabel(market).toLowerCase());
|
|
26080
26153
|
return labels.every((label2) => label2.length > 0) && new Set(labels).size === labels.length;
|
|
26081
26154
|
};
|
|
26082
26155
|
var resolveDisplayGroupFamilyKey = (market) => {
|
|
@@ -26361,6 +26434,15 @@ var buildSportsSlideFromGroup = (group) => {
|
|
|
26361
26434
|
defaultStopIndex
|
|
26362
26435
|
};
|
|
26363
26436
|
};
|
|
26437
|
+
var formatSportsPeriodGrammarLabel = (period) => {
|
|
26438
|
+
const grammarMatch = SPORTS_PERIOD_GRAMMAR_PATTERN.exec(period);
|
|
26439
|
+
if (!grammarMatch) return null;
|
|
26440
|
+
if (grammarMatch[1]) {
|
|
26441
|
+
const family = grammarMatch[1].charAt(0).toUpperCase() + grammarMatch[1].slice(1);
|
|
26442
|
+
return `${family} ${Number(grammarMatch[2])}`;
|
|
26443
|
+
}
|
|
26444
|
+
return `First ${Number(grammarMatch[3])} Innings`;
|
|
26445
|
+
};
|
|
26364
26446
|
var resolveSportsCategoryTokens = (event) => {
|
|
26365
26447
|
return new Set(
|
|
26366
26448
|
event.categories.flatMap((entry) => {
|
|
@@ -26383,39 +26465,20 @@ var isNonStandardSportsLikeEvent = (event) => {
|
|
|
26383
26465
|
return ESPORTS_TITLE_PATTERN.test(question) || SERIES_SCOPE_PATTERN.test(question);
|
|
26384
26466
|
});
|
|
26385
26467
|
};
|
|
26386
|
-
var resolveVisibleSportsSectionTabDefinitions = (event) => {
|
|
26387
|
-
const presentTabKeys = /* @__PURE__ */ new Set();
|
|
26388
|
-
for (const market of event.venueMarkets) {
|
|
26389
|
-
const tabKey = resolveMarketSectionTabKey(market);
|
|
26390
|
-
if (tabKey) presentTabKeys.add(tabKey);
|
|
26391
|
-
}
|
|
26392
|
-
let definitions = SPORTS_SECTION_TAB_DEFINITIONS.filter(
|
|
26393
|
-
(definition) => presentTabKeys.has(definition.key)
|
|
26394
|
-
);
|
|
26395
|
-
if (isNonStandardSportsLikeEvent(event)) {
|
|
26396
|
-
definitions = definitions.filter(
|
|
26397
|
-
(definition) => SPORTS_NON_STANDARD_VISIBLE_TAB_KEY_SET.has(definition.key)
|
|
26398
|
-
);
|
|
26399
|
-
}
|
|
26400
|
-
return definitions;
|
|
26401
|
-
};
|
|
26402
26468
|
var mergeSportsSectionMarketsIntoEvent = ({
|
|
26403
26469
|
event,
|
|
26404
26470
|
sectionMarketsByKey
|
|
26405
26471
|
}) => {
|
|
26406
|
-
var _a;
|
|
26407
26472
|
const orderedVenueMarkets = [...event.venueMarkets];
|
|
26408
26473
|
const seenMarketIds = new Set(orderedVenueMarkets.map((market) => market.id));
|
|
26409
|
-
for (const
|
|
26410
|
-
for (const market of
|
|
26474
|
+
for (const markets of Object.values(sectionMarketsByKey)) {
|
|
26475
|
+
for (const market of markets != null ? markets : []) {
|
|
26411
26476
|
if (seenMarketIds.has(market.id)) continue;
|
|
26412
26477
|
seenMarketIds.add(market.id);
|
|
26413
26478
|
orderedVenueMarkets.push(market);
|
|
26414
26479
|
}
|
|
26415
26480
|
}
|
|
26416
|
-
return __spreadProps(__spreadValues({}, event), {
|
|
26417
|
-
venueMarkets: orderedVenueMarkets
|
|
26418
|
-
});
|
|
26481
|
+
return __spreadProps(__spreadValues({}, event), { venueMarkets: orderedVenueMarkets });
|
|
26419
26482
|
};
|
|
26420
26483
|
|
|
26421
26484
|
// src/pages/event-market/sports-market-card.tsx
|
|
@@ -26898,24 +26961,48 @@ SportsMarketCard.displayName = "SportsMarketCard";
|
|
|
26898
26961
|
|
|
26899
26962
|
// src/pages/event-market/sports-markets.tsx
|
|
26900
26963
|
var import_jsx_runtime170 = require("react/jsx-runtime");
|
|
26901
|
-
var
|
|
26902
|
-
|
|
26964
|
+
var STAT_LABEL_OVERRIDES = {
|
|
26965
|
+
rbis: "RBIs",
|
|
26966
|
+
hits_runs_rbis: "Hits + Runs + RBIs",
|
|
26967
|
+
ot: "OT"
|
|
26968
|
+
};
|
|
26969
|
+
var formatStatLabel = (stat) => {
|
|
26970
|
+
var _a;
|
|
26971
|
+
return (_a = STAT_LABEL_OVERRIDES[stat]) != null ? _a : stat.split("_").filter(Boolean).map((word) => word.charAt(0).toUpperCase() + word.slice(1)).join(" ");
|
|
26972
|
+
};
|
|
26973
|
+
var LEGACY_STAT_LABEL_KEYS = {
|
|
26974
|
+
corners: "cornersTab",
|
|
26975
|
+
goals: "goalsTab",
|
|
26976
|
+
assists: "assistsTab",
|
|
26977
|
+
shots: "shotsTab"
|
|
26978
|
+
};
|
|
26979
|
+
var resolveSportsSectionLabel = (labels, tab) => {
|
|
26980
|
+
var _a, _b, _c, _d, _e;
|
|
26981
|
+
const sports = labels.eventMarketPage.sports;
|
|
26982
|
+
switch (tab.kind) {
|
|
26903
26983
|
case "game_lines":
|
|
26904
|
-
return
|
|
26905
|
-
case "halves":
|
|
26906
|
-
return labels.eventMarketPage.sports.halvesTab;
|
|
26984
|
+
return sports.gameLinesTab;
|
|
26907
26985
|
case "exact_score":
|
|
26908
|
-
return
|
|
26909
|
-
case "corners":
|
|
26910
|
-
return labels.eventMarketPage.sports.cornersTab;
|
|
26911
|
-
case "goals":
|
|
26912
|
-
return labels.eventMarketPage.sports.goalsTab;
|
|
26913
|
-
case "assists":
|
|
26914
|
-
return labels.eventMarketPage.sports.assistsTab;
|
|
26915
|
-
case "shots":
|
|
26916
|
-
return labels.eventMarketPage.sports.shotsTab;
|
|
26986
|
+
return sports.exactScoreTab;
|
|
26917
26987
|
case "other":
|
|
26918
|
-
return
|
|
26988
|
+
return sports.otherTab;
|
|
26989
|
+
case "stat": {
|
|
26990
|
+
if (tab.stat === "player_props") return sports.playerPropsTab;
|
|
26991
|
+
const legacyLabelKey = tab.stat ? LEGACY_STAT_LABEL_KEYS[tab.stat] : void 0;
|
|
26992
|
+
return legacyLabelKey ? sports[legacyLabelKey] : formatStatLabel((_a = tab.stat) != null ? _a : "");
|
|
26993
|
+
}
|
|
26994
|
+
case "period": {
|
|
26995
|
+
switch (tab.periodFamily) {
|
|
26996
|
+
case "halves":
|
|
26997
|
+
return sports.halvesTab;
|
|
26998
|
+
case "quarters":
|
|
26999
|
+
return sports.quartersTab;
|
|
27000
|
+
case "sets":
|
|
27001
|
+
return sports.setsTab;
|
|
27002
|
+
default:
|
|
27003
|
+
return (_e = (_c = formatSportsPeriodGrammarLabel((_b = tab.periodFamily) != null ? _b : "")) == null ? void 0 : _c.replace(/^First /, "")) != null ? _e : formatStatLabel((_d = tab.periodFamily) != null ? _d : "");
|
|
27004
|
+
}
|
|
27005
|
+
}
|
|
26919
27006
|
}
|
|
26920
27007
|
};
|
|
26921
27008
|
var SportsTabButton = ({
|
|
@@ -27003,18 +27090,23 @@ var SportsMarkets = ({
|
|
|
27003
27090
|
}
|
|
27004
27091
|
return merged;
|
|
27005
27092
|
}, [event.venueMarkets, gameMarkets]);
|
|
27006
|
-
const
|
|
27007
|
-
() =>
|
|
27093
|
+
const visibleTabs = (0, import_react44.useMemo)(
|
|
27094
|
+
() => resolveVisibleSportsSectionTabs(__spreadProps(__spreadValues({}, event), { venueMarkets: tabSourceMarkets })),
|
|
27008
27095
|
[event, tabSourceMarkets]
|
|
27009
27096
|
);
|
|
27010
|
-
const shouldRenderTabs =
|
|
27011
|
-
const [activeTabKey, setActiveTabKey] = (0, import_react44.useState)(
|
|
27012
|
-
|
|
27097
|
+
const shouldRenderTabs = visibleTabs.length > 1 && tabSourceMarkets.length > 1;
|
|
27098
|
+
const [activeTabKey, setActiveTabKey] = (0, import_react44.useState)((_b = (_a = visibleTabs[0]) == null ? void 0 : _a.key) != null ? _b : "game_lines");
|
|
27099
|
+
const activeTab = (0, import_react44.useMemo)(
|
|
27100
|
+
() => {
|
|
27101
|
+
var _a2, _b2;
|
|
27102
|
+
return (_b2 = (_a2 = visibleTabs.find((tab) => tab.key === activeTabKey)) != null ? _a2 : visibleTabs[0]) != null ? _b2 : { key: "game_lines", kind: "game_lines" };
|
|
27103
|
+
},
|
|
27104
|
+
[visibleTabs, activeTabKey]
|
|
27013
27105
|
);
|
|
27014
27106
|
const [expandedGroupId, setExpandedGroupId] = (0, import_react44.useState)(null);
|
|
27015
27107
|
const [stableMarketsByTab, setStableMarketsByTab] = (0, import_react44.useState)({});
|
|
27016
|
-
const activeTabLabel = resolveSportsSectionLabel(labels,
|
|
27017
|
-
const sectionFilters = resolveSportsSectionFilters(
|
|
27108
|
+
const activeTabLabel = resolveSportsSectionLabel(labels, activeTab);
|
|
27109
|
+
const sectionFilters = resolveSportsSectionFilters(activeTab);
|
|
27018
27110
|
const sectionMarketsQuery = (0, import_hooks68.useVenueMarkets)({
|
|
27019
27111
|
aggKey: event.aggKey ? [event.aggKey] : void 0,
|
|
27020
27112
|
sportsMarketType: sectionFilters.sportsMarketType,
|
|
@@ -27037,26 +27129,25 @@ var SportsMarkets = ({
|
|
|
27037
27129
|
} = sectionMarketsQuery;
|
|
27038
27130
|
const resolvedSectionMarkets = (0, import_react44.useMemo)(
|
|
27039
27131
|
() => resolveSportsSectionMarkets({
|
|
27040
|
-
|
|
27132
|
+
tab: activeTab,
|
|
27041
27133
|
eventMarkets: tabSourceMarkets,
|
|
27042
27134
|
sectionMarkets
|
|
27043
27135
|
}),
|
|
27044
|
-
[
|
|
27136
|
+
[activeTab, tabSourceMarkets, sectionMarkets]
|
|
27045
27137
|
);
|
|
27046
27138
|
const isSectionSettled = !isSectionLoading && !hasNextPage && !isFetchingNextPage;
|
|
27047
27139
|
const stableSectionMarkets = stableMarketsByTab[activeTabKey];
|
|
27048
|
-
const displayedSectionMarkets =
|
|
27140
|
+
const displayedSectionMarkets = (0, import_react44.useMemo)(
|
|
27141
|
+
() => stableSectionMarkets != null ? stableSectionMarkets : isSectionSettled ? resolvedSectionMarkets : [],
|
|
27142
|
+
[stableSectionMarkets, isSectionSettled, resolvedSectionMarkets]
|
|
27143
|
+
);
|
|
27049
27144
|
const periodGroups = (0, import_react44.useMemo)(
|
|
27050
27145
|
() => groupSportsMarketsByPeriod(displayedSectionMarkets),
|
|
27051
27146
|
[displayedSectionMarkets]
|
|
27052
27147
|
);
|
|
27053
|
-
const displayedPeriodGroups = (0, import_react44.useMemo)(
|
|
27054
|
-
() => activeTabKey === "game_lines" ? periodGroups.filter((periodGroup) => periodGroup.key === "full") : periodGroups,
|
|
27055
|
-
[activeTabKey, periodGroups]
|
|
27056
|
-
);
|
|
27057
27148
|
const allGroups = (0, import_react44.useMemo)(
|
|
27058
|
-
() =>
|
|
27059
|
-
[
|
|
27149
|
+
() => periodGroups.flatMap((periodGroup) => periodGroup.groups),
|
|
27150
|
+
[periodGroups]
|
|
27060
27151
|
);
|
|
27061
27152
|
(0, import_react44.useEffect)(() => {
|
|
27062
27153
|
if (hasNextPage && !isFetchingNextPage) {
|
|
@@ -27090,9 +27181,9 @@ var SportsMarkets = ({
|
|
|
27090
27181
|
}, [activeTabKey, displayedSectionMarkets, hasAggKey, onSectionMarketsChange]);
|
|
27091
27182
|
(0, import_react44.useEffect)(() => {
|
|
27092
27183
|
var _a2, _b2;
|
|
27093
|
-
if (
|
|
27094
|
-
setActiveTabKey((_b2 = (_a2 =
|
|
27095
|
-
}, [activeTabKey,
|
|
27184
|
+
if (visibleTabs.some((tab) => tab.key === activeTabKey)) return;
|
|
27185
|
+
setActiveTabKey((_b2 = (_a2 = visibleTabs[0]) == null ? void 0 : _a2.key) != null ? _b2 : "game_lines");
|
|
27186
|
+
}, [activeTabKey, visibleTabs]);
|
|
27096
27187
|
const lastActiveTabRef = (0, import_react44.useRef)(null);
|
|
27097
27188
|
(0, import_react44.useEffect)(() => {
|
|
27098
27189
|
if (allGroups.length === 0) return;
|
|
@@ -27139,14 +27230,14 @@ var SportsMarkets = ({
|
|
|
27139
27230
|
role: "tablist",
|
|
27140
27231
|
"aria-label": labels.eventMarketPage.sports.sectionTabsAria,
|
|
27141
27232
|
className: "flex flex-nowrap items-center gap-2 overflow-x-auto [scrollbar-width:none] [&::-webkit-scrollbar]:hidden",
|
|
27142
|
-
children:
|
|
27233
|
+
children: visibleTabs.map((tab) => /* @__PURE__ */ (0, import_jsx_runtime170.jsx)(
|
|
27143
27234
|
SportsTabButton,
|
|
27144
27235
|
{
|
|
27145
|
-
isActive:
|
|
27146
|
-
label: resolveSportsSectionLabel(labels,
|
|
27147
|
-
onClick: () => setActiveTabKey(
|
|
27236
|
+
isActive: tab.key === activeTabKey,
|
|
27237
|
+
label: resolveSportsSectionLabel(labels, tab),
|
|
27238
|
+
onClick: () => setActiveTabKey(tab.key)
|
|
27148
27239
|
},
|
|
27149
|
-
|
|
27240
|
+
tab.key
|
|
27150
27241
|
))
|
|
27151
27242
|
}
|
|
27152
27243
|
) : null,
|
|
@@ -27160,7 +27251,7 @@ var SportsMarkets = ({
|
|
|
27160
27251
|
classNames: { root: "min-h-[220px]" }
|
|
27161
27252
|
}
|
|
27162
27253
|
) : null,
|
|
27163
|
-
|
|
27254
|
+
periodGroups.map((periodGroup) => {
|
|
27164
27255
|
return /* @__PURE__ */ (0, import_jsx_runtime170.jsx)(
|
|
27165
27256
|
"section",
|
|
27166
27257
|
{
|
|
@@ -27217,7 +27308,7 @@ var SportsEventMarketPage = ({
|
|
|
27217
27308
|
}, [event, sectionMarketsByKey]);
|
|
27218
27309
|
const eventTradingState = (0, import_react45.useMemo)(() => (0, import_hooks69.resolveEventTradingState)(composedEvent), [composedEvent]);
|
|
27219
27310
|
const hasSportsSections = (0, import_react45.useMemo)(
|
|
27220
|
-
() =>
|
|
27311
|
+
() => resolveVisibleSportsSectionTabs(event).length > 0,
|
|
27221
27312
|
[event]
|
|
27222
27313
|
);
|
|
27223
27314
|
const stickyOrderPanelState = resolveEventMarketPageStickyState({
|