@agg-market/ui 9.0.0 → 10.0.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-N7U7QCSB.mjs → chunk-55YYUTBK.mjs} +807 -358
- package/dist/{chunk-3U4VHAP6.mjs → chunk-5G4T5R2H.mjs} +6 -2
- package/dist/{chunk-6CRY27SQ.mjs → chunk-GYOCLZGH.mjs} +538 -418
- package/dist/{chunk-HJ4UPYM7.mjs → chunk-RYQSVETG.mjs} +201 -165
- package/dist/{chunk-3G7C6WEC.mjs → chunk-XP7DREIX.mjs} +47 -15
- package/dist/events.js +575 -429
- package/dist/events.mjs +6 -4
- package/dist/index.js +1577 -948
- package/dist/index.mjs +10 -6
- package/dist/modals.js +1185 -374
- package/dist/modals.mjs +4 -2
- package/dist/pages.js +1400 -1010
- package/dist/pages.mjs +4 -4
- package/dist/primitives.js +46 -14
- package/dist/primitives.mjs +1 -1
- package/dist/styles.css +1 -1
- package/dist/tailwind.css +1 -1
- package/dist/trading.js +20 -4
- package/dist/trading.mjs +2 -2
- package/dist/types/events/item/event-list-item.types.d.mts +1 -2
- package/dist/types/events/item/event-list-item.types.d.ts +1 -2
- package/dist/types/events/item-details/event-list-item-details.types.d.mts +1 -4
- package/dist/types/events/item-details/event-list-item-details.types.d.ts +1 -4
- package/dist/types/events/item-details/event-list-item-details.utils.d.mts +42 -3
- package/dist/types/events/item-details/event-list-item-details.utils.d.ts +42 -3
- package/dist/types/events/list/event-list.types.d.mts +2 -1
- package/dist/types/events/list/event-list.types.d.ts +2 -1
- package/dist/types/events/list/index.d.mts +1 -1
- package/dist/types/events/list/index.d.ts +1 -1
- package/dist/types/events/market-details/index.d.mts +6 -2
- package/dist/types/events/market-details/index.d.ts +6 -2
- package/dist/types/events/market-details/market-details.types.d.mts +33 -9
- package/dist/types/events/market-details/market-details.types.d.ts +33 -9
- package/dist/types/events/market-details/market-details.utils.d.mts +15 -10
- package/dist/types/events/market-details/market-details.utils.d.ts +15 -10
- package/dist/types/modals/index.d.mts +1 -0
- package/dist/types/modals/index.d.ts +1 -0
- package/dist/types/pages/event-market/event-market.types.d.mts +2 -0
- package/dist/types/pages/event-market/event-market.types.d.ts +2 -0
- package/dist/types/pages/home/home.constants.d.mts +1 -3
- package/dist/types/pages/home/home.constants.d.ts +1 -3
- package/dist/types/pages/home/home.types.d.mts +0 -2
- package/dist/types/pages/home/home.types.d.ts +0 -2
- package/dist/types/pages/home/home.utils.d.mts +4 -0
- package/dist/types/pages/home/home.utils.d.ts +4 -0
- package/dist/types/pages/home/index.d.mts +1 -1
- package/dist/types/pages/home/index.d.ts +1 -1
- package/dist/types/primitives/chart/index.d.mts +9 -1
- package/dist/types/primitives/chart/index.d.ts +9 -1
- package/dist/types/primitives/venue-logo/index.d.mts +1 -1
- package/dist/types/primitives/venue-logo/index.d.ts +1 -1
- package/package.json +3 -3
|
@@ -27,7 +27,7 @@ import {
|
|
|
27
27
|
marketDetailsDefaultIsOpened,
|
|
28
28
|
orderBookRowLimitDefault,
|
|
29
29
|
toDate
|
|
30
|
-
} from "./chunk-
|
|
30
|
+
} from "./chunk-XP7DREIX.mjs";
|
|
31
31
|
|
|
32
32
|
// src/events/item/index.tsx
|
|
33
33
|
import dayjs from "dayjs";
|
|
@@ -238,7 +238,6 @@ var EventListItemContent = ({
|
|
|
238
238
|
event,
|
|
239
239
|
title,
|
|
240
240
|
image,
|
|
241
|
-
showVenueLogo = true,
|
|
242
241
|
maxOutcomes = 2,
|
|
243
242
|
classNames,
|
|
244
243
|
venueInfo,
|
|
@@ -274,7 +273,7 @@ var EventListItemContent = ({
|
|
|
274
273
|
return;
|
|
275
274
|
if ((eventToHandle == null ? void 0 : eventToHandle.key) === "Enter" || (eventToHandle == null ? void 0 : eventToHandle.key) === " ") {
|
|
276
275
|
eventToHandle == null ? void 0 : eventToHandle.preventDefault();
|
|
277
|
-
onClick();
|
|
276
|
+
onClick == null ? void 0 : onClick(event);
|
|
278
277
|
}
|
|
279
278
|
};
|
|
280
279
|
const renderArbitrage = (value) => {
|
|
@@ -301,7 +300,7 @@ var EventListItemContent = ({
|
|
|
301
300
|
className: cn(baseCardClassName, onClick && "cursor-pointer", classNames == null ? void 0 : classNames.root),
|
|
302
301
|
role: onClick ? "button" : void 0,
|
|
303
302
|
tabIndex: onClick ? 0 : void 0,
|
|
304
|
-
onClick,
|
|
303
|
+
onClick: () => onClick == null ? void 0 : onClick(event),
|
|
305
304
|
onKeyDown: handleKeyDown,
|
|
306
305
|
"aria-label": ariaLabel != null ? ariaLabel : resolvedTitle,
|
|
307
306
|
children: [
|
|
@@ -355,7 +354,7 @@ var EventListItemContent = ({
|
|
|
355
354
|
Badge,
|
|
356
355
|
{
|
|
357
356
|
text: config.formatPercent(probability),
|
|
358
|
-
prefix:
|
|
357
|
+
prefix: /* @__PURE__ */ jsx(VenueLogo, { venue: visibleOutcome.venue, size: "small" }),
|
|
359
358
|
size: "large",
|
|
360
359
|
classNames: {
|
|
361
360
|
root: cn(
|
|
@@ -388,7 +387,7 @@ var EventListItemContent = ({
|
|
|
388
387
|
) }),
|
|
389
388
|
/* @__PURE__ */ jsx("span", { className: "text-agg-muted-foreground", children: "\xD7" }),
|
|
390
389
|
singleVenue ? /* @__PURE__ */ jsxs("span", { className: "flex items-center gap-1 truncate text-agg-muted-foreground", children: [
|
|
391
|
-
|
|
390
|
+
/* @__PURE__ */ jsx(
|
|
392
391
|
VenueLogo,
|
|
393
392
|
{
|
|
394
393
|
venue: singleVenue,
|
|
@@ -396,14 +395,14 @@ var EventListItemContent = ({
|
|
|
396
395
|
isMonochromatic: true,
|
|
397
396
|
className: "text-agg-muted-foreground!"
|
|
398
397
|
}
|
|
399
|
-
)
|
|
398
|
+
),
|
|
400
399
|
/* @__PURE__ */ jsx("span", { children: venueLabel })
|
|
401
400
|
] }) : /* @__PURE__ */ jsx("span", { className: "truncate text-agg-muted-foreground", children: formatCountLabel(
|
|
402
401
|
venueCount,
|
|
403
402
|
labels.eventItem.venueSingular,
|
|
404
403
|
labels.eventItem.venuePlural
|
|
405
404
|
) }),
|
|
406
|
-
|
|
405
|
+
!singleVenue && visibleVenueLogos.length > 0 ? /* @__PURE__ */ jsx("span", { className: "flex items-center gap-1 overflow-hidden", children: visibleVenueLogos.map((venue) => /* @__PURE__ */ jsx(
|
|
407
406
|
VenueLogo,
|
|
408
407
|
{
|
|
409
408
|
venue,
|
|
@@ -471,7 +470,13 @@ EventListItem.displayName = "EventListItem";
|
|
|
471
470
|
|
|
472
471
|
// src/events/item-details/index.tsx
|
|
473
472
|
import { useEffect, useMemo as useMemo3, useState } from "react";
|
|
474
|
-
import {
|
|
473
|
+
import {
|
|
474
|
+
useLabels as useLabels3,
|
|
475
|
+
useMarketChart,
|
|
476
|
+
useSdkUiConfig as useSdkUiConfig2,
|
|
477
|
+
useVenueEvent as useVenueEvent2,
|
|
478
|
+
timeRangeToInterval
|
|
479
|
+
} from "@agg-market/hooks";
|
|
475
480
|
|
|
476
481
|
// src/primitives/chart/chart-type-switch.tsx
|
|
477
482
|
import { useLabels as useLabels2 } from "@agg-market/hooks";
|
|
@@ -534,7 +539,9 @@ var ChartTypeSwitch = ({
|
|
|
534
539
|
"transition-colors duration-200 ease-in-out",
|
|
535
540
|
isActive ? "text-agg-foreground" : "text-agg-muted-foreground"
|
|
536
541
|
),
|
|
537
|
-
onClick: () => {
|
|
542
|
+
onClick: (e) => {
|
|
543
|
+
e.stopPropagation();
|
|
544
|
+
e.preventDefault();
|
|
538
545
|
if (isActive) {
|
|
539
546
|
return;
|
|
540
547
|
}
|
|
@@ -563,14 +570,9 @@ var isDateLikeLabel = (value) => {
|
|
|
563
570
|
return false;
|
|
564
571
|
return dayjs2(value).isValid();
|
|
565
572
|
};
|
|
566
|
-
var
|
|
567
|
-
if (!isDateLikeLabel(value))
|
|
568
|
-
return value;
|
|
569
|
-
return dayjs2(value).format("MMM D, YYYY");
|
|
570
|
-
};
|
|
571
|
-
var getDefaultSelectedTimeRange = (value) => {
|
|
573
|
+
var getDefaultSelectedTimeRange = (value, fallback = "1D") => {
|
|
572
574
|
if (!value)
|
|
573
|
-
return
|
|
575
|
+
return fallback;
|
|
574
576
|
return value;
|
|
575
577
|
};
|
|
576
578
|
var getTimeWindowByRange = (range) => {
|
|
@@ -652,24 +654,6 @@ var resolveOutcomesByVenue = (venueMarkets, selectedOutcomeLabel) => {
|
|
|
652
654
|
};
|
|
653
655
|
}).filter((item) => item != null);
|
|
654
656
|
};
|
|
655
|
-
var buildPriceHistoryGroups = (selectedOutcomes, fallbackMarketId) => {
|
|
656
|
-
const marketIdByVenue = /* @__PURE__ */ new Map();
|
|
657
|
-
selectedOutcomes.forEach(({ venue, market }) => {
|
|
658
|
-
var _a, _b;
|
|
659
|
-
const marketWithCanonicalId = market;
|
|
660
|
-
const canonicalMarketId = (_a = marketWithCanonicalId.marketId) != null ? _a : fallbackMarketId;
|
|
661
|
-
if (!canonicalMarketId)
|
|
662
|
-
return;
|
|
663
|
-
if (!marketIdByVenue.has(venue)) {
|
|
664
|
-
marketIdByVenue.set(venue, /* @__PURE__ */ new Set());
|
|
665
|
-
}
|
|
666
|
-
(_b = marketIdByVenue.get(venue)) == null ? void 0 : _b.add(canonicalMarketId);
|
|
667
|
-
});
|
|
668
|
-
return [...marketIdByVenue.entries()].map(([venue, marketIds]) => ({
|
|
669
|
-
venue,
|
|
670
|
-
venueMarketOutcomeIds: [...marketIds]
|
|
671
|
-
})).filter((group) => group.venueMarketOutcomeIds.length > 0);
|
|
672
|
-
};
|
|
673
657
|
var resolveSeriesColor = (venue, index) => {
|
|
674
658
|
var _a;
|
|
675
659
|
const colorFromVenue = lineColorByVenue[venue];
|
|
@@ -677,6 +661,98 @@ var resolveSeriesColor = (venue, index) => {
|
|
|
677
661
|
return colorFromVenue;
|
|
678
662
|
return (_a = fallbackLineColors[index % fallbackLineColors.length]) != null ? _a : "#2e5cff";
|
|
679
663
|
};
|
|
664
|
+
var toNonEmptyString = (value) => {
|
|
665
|
+
if (typeof value !== "string")
|
|
666
|
+
return void 0;
|
|
667
|
+
const trimmedValue = value.trim();
|
|
668
|
+
return trimmedValue ? trimmedValue : void 0;
|
|
669
|
+
};
|
|
670
|
+
var resolveCanonicalMarketId = (venueMarkets, fallbackMarketId) => {
|
|
671
|
+
var _a;
|
|
672
|
+
const uniqueMarketIds = Array.from(
|
|
673
|
+
new Set(venueMarkets.map((market) => toNonEmptyString(market.marketId)).filter(Boolean))
|
|
674
|
+
);
|
|
675
|
+
if (uniqueMarketIds.length === 1) {
|
|
676
|
+
return uniqueMarketIds[0];
|
|
677
|
+
}
|
|
678
|
+
return (_a = toNonEmptyString(fallbackMarketId)) != null ? _a : uniqueMarketIds[0];
|
|
679
|
+
};
|
|
680
|
+
var toChartDisplayValue = (value, transformProbability) => {
|
|
681
|
+
if (value == null || !Number.isFinite(value))
|
|
682
|
+
return void 0;
|
|
683
|
+
return transformProbability(value) * 100;
|
|
684
|
+
};
|
|
685
|
+
var marketChartCandleToLineChartPoint = (candle, transformProbability) => {
|
|
686
|
+
var _a, _b, _c, _d;
|
|
687
|
+
const open = (_a = toChartDisplayValue(candle.open, transformProbability)) != null ? _a : 0;
|
|
688
|
+
const high = (_b = toChartDisplayValue(candle.high, transformProbability)) != null ? _b : open;
|
|
689
|
+
const low = (_c = toChartDisplayValue(candle.low, transformProbability)) != null ? _c : open;
|
|
690
|
+
const close = (_d = toChartDisplayValue(candle.close, transformProbability)) != null ? _d : open;
|
|
691
|
+
return {
|
|
692
|
+
time: candle.time,
|
|
693
|
+
value: close,
|
|
694
|
+
open,
|
|
695
|
+
high,
|
|
696
|
+
low,
|
|
697
|
+
close
|
|
698
|
+
};
|
|
699
|
+
};
|
|
700
|
+
var marketChartCandleToScaledCandlePoint = (candle, transformProbability) => {
|
|
701
|
+
var _a, _b, _c, _d;
|
|
702
|
+
const point = marketChartCandleToLineChartPoint(candle, transformProbability);
|
|
703
|
+
return {
|
|
704
|
+
time: point.time,
|
|
705
|
+
open: (_a = point.open) != null ? _a : point.value,
|
|
706
|
+
high: (_b = point.high) != null ? _b : point.value,
|
|
707
|
+
low: (_c = point.low) != null ? _c : point.value,
|
|
708
|
+
close: (_d = point.close) != null ? _d : point.value,
|
|
709
|
+
v: candle.volume
|
|
710
|
+
};
|
|
711
|
+
};
|
|
712
|
+
var resolveMarketChartVenueSeries = ({
|
|
713
|
+
chartData,
|
|
714
|
+
transformProbability
|
|
715
|
+
}) => {
|
|
716
|
+
if (!chartData)
|
|
717
|
+
return [];
|
|
718
|
+
return Object.entries(chartData.venues).map(([venue, venueData]) => ({
|
|
719
|
+
venue,
|
|
720
|
+
points: venueData.candles.map(
|
|
721
|
+
(candle) => marketChartCandleToLineChartPoint(candle, transformProbability)
|
|
722
|
+
)
|
|
723
|
+
})).filter((item) => item.points.length > 0);
|
|
724
|
+
};
|
|
725
|
+
var resolveMarketChartLiveState = ({
|
|
726
|
+
chartData,
|
|
727
|
+
selectedVenue,
|
|
728
|
+
transformProbability
|
|
729
|
+
}) => {
|
|
730
|
+
var _a, _b;
|
|
731
|
+
if (!chartData) {
|
|
732
|
+
return {
|
|
733
|
+
liveCandle: null,
|
|
734
|
+
lineValue: void 0,
|
|
735
|
+
live: false
|
|
736
|
+
};
|
|
737
|
+
}
|
|
738
|
+
const venueEntries = selectedVenue ? Object.entries(chartData.venues).filter(([venue]) => venue === selectedVenue) : Object.entries(chartData.venues);
|
|
739
|
+
if (venueEntries.length === 0) {
|
|
740
|
+
return {
|
|
741
|
+
liveCandle: null,
|
|
742
|
+
lineValue: void 0,
|
|
743
|
+
live: false
|
|
744
|
+
};
|
|
745
|
+
}
|
|
746
|
+
const singleVenueView = selectedVenue != null || venueEntries.length === 1;
|
|
747
|
+
const liveCandleEntry = singleVenueView ? venueEntries.find(([, venueData]) => venueData.liveCandle != null) : null;
|
|
748
|
+
const primaryLineValue = (_b = (_a = venueEntries[0]) == null ? void 0 : _a[1]) == null ? void 0 : _b.lineValue;
|
|
749
|
+
const lineValue = primaryLineValue != null ? toChartDisplayValue(primaryLineValue, transformProbability) : void 0;
|
|
750
|
+
return {
|
|
751
|
+
liveCandle: (liveCandleEntry == null ? void 0 : liveCandleEntry[1].liveCandle) ? marketChartCandleToScaledCandlePoint(liveCandleEntry[1].liveCandle, transformProbability) : null,
|
|
752
|
+
lineValue,
|
|
753
|
+
live: liveCandleEntry != null
|
|
754
|
+
};
|
|
755
|
+
};
|
|
680
756
|
|
|
681
757
|
// src/events/item-details/index.tsx
|
|
682
758
|
import { jsx as jsx3, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
@@ -741,31 +817,23 @@ var resolveAverageProbability = (values) => {
|
|
|
741
817
|
return void 0;
|
|
742
818
|
return validValues.reduce((sum, value) => sum + value, 0) / validValues.length;
|
|
743
819
|
};
|
|
744
|
-
var resolveOutcomeCandidateIds = (market, outcome) => {
|
|
745
|
-
var _a, _b;
|
|
746
|
-
const marketWithCanonicalId = market;
|
|
747
|
-
return [
|
|
748
|
-
outcome.id,
|
|
749
|
-
(_a = outcome.externalIdentifier) != null ? _a : void 0,
|
|
750
|
-
market.externalIdentifier,
|
|
751
|
-
(_b = marketWithCanonicalId.marketId) != null ? _b : void 0
|
|
752
|
-
].filter((value) => typeof value === "string" && value.trim().length > 0);
|
|
753
|
-
};
|
|
754
820
|
var EventListItemDetailsGraphSection = ({
|
|
755
821
|
venueMarkets,
|
|
756
|
-
canonicalMarketId,
|
|
757
822
|
selectedOutcomeLabel,
|
|
758
823
|
onSelectedOutcomeLabelChange,
|
|
759
824
|
switchLabels,
|
|
760
825
|
isDateOutcomeMarket,
|
|
761
826
|
classNames,
|
|
762
|
-
showVenueLogo,
|
|
763
827
|
venueInfo,
|
|
764
828
|
formatPercent,
|
|
765
829
|
selectedTimeRange,
|
|
766
|
-
selectedChartType
|
|
830
|
+
selectedChartType,
|
|
831
|
+
selectedOutcome: _selectedOutcome,
|
|
832
|
+
selectedMarket
|
|
767
833
|
}) => {
|
|
834
|
+
var _a, _b;
|
|
768
835
|
const labels = useLabels3();
|
|
836
|
+
const { enableLiveUpdates } = useSdkUiConfig2();
|
|
769
837
|
const [selectedVenue, setSelectedVenue] = useState(null);
|
|
770
838
|
const [activeProbabilityMode, setActiveProbabilityMode] = useState("yes");
|
|
771
839
|
const probabilityModeConfigs = useMemo3(() => {
|
|
@@ -834,105 +902,71 @@ var EventListItemDetailsGraphSection = ({
|
|
|
834
902
|
no: buildModeData("no")
|
|
835
903
|
};
|
|
836
904
|
}, [labels, probabilityModeConfigs, selectedOutcomesByMode, venueInfo]);
|
|
837
|
-
const allOutcomesForHistory = useMemo3(() => {
|
|
838
|
-
const outcomeByModeAndId = /* @__PURE__ */ new Map();
|
|
839
|
-
probabilityModeOrder.forEach((mode) => {
|
|
840
|
-
selectedOutcomesByMode[mode].forEach((outcomeByVenue) => {
|
|
841
|
-
outcomeByModeAndId.set(
|
|
842
|
-
`${outcomeByVenue.venue}:${outcomeByVenue.outcome.id}`,
|
|
843
|
-
outcomeByVenue
|
|
844
|
-
);
|
|
845
|
-
});
|
|
846
|
-
});
|
|
847
|
-
return [...outcomeByModeAndId.values()];
|
|
848
|
-
}, [selectedOutcomesByMode]);
|
|
849
|
-
const priceHistoryGroups = useMemo3(() => {
|
|
850
|
-
return buildPriceHistoryGroups(allOutcomesForHistory, canonicalMarketId);
|
|
851
|
-
}, [allOutcomesForHistory, canonicalMarketId]);
|
|
852
905
|
const timeWindow = useMemo3(() => {
|
|
853
906
|
return getTimeWindowByRange(selectedTimeRange);
|
|
854
907
|
}, [selectedTimeRange]);
|
|
908
|
+
const activeOutcomes = selectedOutcomesByMode[activeProbabilityMode];
|
|
909
|
+
const activeCanonicalMarketId = useMemo3(() => {
|
|
910
|
+
return resolveCanonicalMarketId(activeOutcomes.map((item) => item.market));
|
|
911
|
+
}, [activeOutcomes]);
|
|
912
|
+
const venueMarketIds = useMemo3(() => {
|
|
913
|
+
return activeOutcomes.map((item) => item.market.id);
|
|
914
|
+
}, [activeOutcomes]);
|
|
855
915
|
const {
|
|
856
|
-
data:
|
|
857
|
-
isLoading:
|
|
858
|
-
error:
|
|
859
|
-
|
|
860
|
-
} =
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
}
|
|
870
|
-
priceHistoryData.forEach((historyItem) => {
|
|
871
|
-
const venue = historyItem.venue;
|
|
872
|
-
const venueHistory = historyByVenue.get(venue);
|
|
873
|
-
if (venueHistory) {
|
|
874
|
-
venueHistory.push(historyItem);
|
|
875
|
-
return;
|
|
876
|
-
}
|
|
877
|
-
historyByVenue.set(venue, [historyItem]);
|
|
878
|
-
});
|
|
879
|
-
return historyByVenue;
|
|
880
|
-
}, [priceHistoryData]);
|
|
881
|
-
const chartSeriesByMode = useMemo3(() => {
|
|
882
|
-
const buildSeries = (mode) => {
|
|
883
|
-
const modeConfig = probabilityModeConfigs[mode];
|
|
884
|
-
const chartSeries = [];
|
|
885
|
-
normalizedVenueDataByMode[mode].forEach((venueData) => {
|
|
886
|
-
var _a;
|
|
887
|
-
const venueHistory = priceHistoryByVenue.get(venueData.venue);
|
|
888
|
-
if (!(venueHistory == null ? void 0 : venueHistory.length))
|
|
889
|
-
return;
|
|
890
|
-
const candidateIds = resolveOutcomeCandidateIds(venueData.market, venueData.outcome);
|
|
891
|
-
const matchingHistory = (_a = venueHistory.find((historyItem) => candidateIds.includes(historyItem.marketId))) != null ? _a : venueHistory.length === 1 ? venueHistory[0] : void 0;
|
|
892
|
-
if (!matchingHistory)
|
|
893
|
-
return;
|
|
894
|
-
const points = matchingHistory.points.map((point) => {
|
|
895
|
-
const probability = normalizeProbability(point.price);
|
|
896
|
-
if (probability == null || !Number.isFinite(point.timestamp))
|
|
897
|
-
return null;
|
|
898
|
-
const open = normalizeProbability(point.open);
|
|
899
|
-
const high = normalizeProbability(point.high);
|
|
900
|
-
const low = normalizeProbability(point.low);
|
|
901
|
-
const close = normalizeProbability(point.close);
|
|
902
|
-
const transformedPoint = {
|
|
903
|
-
time: point.timestamp,
|
|
904
|
-
value: clampProbability(modeConfig.transformProbability(probability)) * 100,
|
|
905
|
-
open: open == null ? void 0 : clampProbability(modeConfig.transformProbability(open)) * 100,
|
|
906
|
-
high: high == null ? void 0 : clampProbability(modeConfig.transformProbability(high)) * 100,
|
|
907
|
-
low: low == null ? void 0 : clampProbability(modeConfig.transformProbability(low)) * 100,
|
|
908
|
-
close: close == null ? void 0 : clampProbability(modeConfig.transformProbability(close)) * 100
|
|
909
|
-
};
|
|
910
|
-
return transformedPoint;
|
|
911
|
-
}).filter((point) => point != null);
|
|
912
|
-
if (points.length === 0)
|
|
913
|
-
return;
|
|
914
|
-
chartSeries.push({
|
|
915
|
-
id: `${mode}-${venueData.venue}-${matchingHistory.marketId}`,
|
|
916
|
-
venue: venueData.venue,
|
|
917
|
-
color: venueData.color,
|
|
918
|
-
points,
|
|
919
|
-
lineWidth: 2,
|
|
920
|
-
lineStyle: "solid"
|
|
921
|
-
});
|
|
922
|
-
});
|
|
923
|
-
return chartSeries;
|
|
924
|
-
};
|
|
925
|
-
return {
|
|
926
|
-
yes: buildSeries("yes"),
|
|
927
|
-
no: buildSeries("no")
|
|
928
|
-
};
|
|
929
|
-
}, [normalizedVenueDataByMode, priceHistoryByVenue, probabilityModeConfigs]);
|
|
916
|
+
data: marketChartData,
|
|
917
|
+
isLoading: isMarketChartLoading,
|
|
918
|
+
error: marketChartError,
|
|
919
|
+
refetch: refetchMarketChart
|
|
920
|
+
} = useMarketChart({
|
|
921
|
+
marketId: (_a = selectedMarket == null ? void 0 : selectedMarket.id) != null ? _a : null,
|
|
922
|
+
venueMarketIds,
|
|
923
|
+
interval: timeRangeToInterval(selectedTimeRange),
|
|
924
|
+
startTs: timeWindow.startTs * 1e3,
|
|
925
|
+
endTs: timeWindow.endTs * 1e3,
|
|
926
|
+
enabled: !!(selectedMarket == null ? void 0 : selectedMarket.id),
|
|
927
|
+
live: enableLiveUpdates
|
|
928
|
+
});
|
|
930
929
|
const visibleChartSeries = useMemo3(() => {
|
|
931
|
-
const
|
|
930
|
+
const transformProbability = probabilityModeConfigs[activeProbabilityMode].transformProbability;
|
|
931
|
+
const colorByVenue = new Map(
|
|
932
|
+
normalizedVenueDataByMode[activeProbabilityMode].map((venueData) => [
|
|
933
|
+
venueData.venue,
|
|
934
|
+
venueData.color
|
|
935
|
+
])
|
|
936
|
+
);
|
|
937
|
+
const series = resolveMarketChartVenueSeries({
|
|
938
|
+
chartData: marketChartData,
|
|
939
|
+
transformProbability
|
|
940
|
+
}).map((seriesItem) => {
|
|
941
|
+
var _a2;
|
|
942
|
+
const resolvedVenue = seriesItem.venue;
|
|
943
|
+
return {
|
|
944
|
+
id: `${activeProbabilityMode}-${resolvedVenue}-${activeCanonicalMarketId != null ? activeCanonicalMarketId : "chart"}`,
|
|
945
|
+
venue: resolvedVenue,
|
|
946
|
+
color: (_a2 = colorByVenue.get(resolvedVenue)) != null ? _a2 : resolveSeriesColor(resolvedVenue, 0),
|
|
947
|
+
points: seriesItem.points,
|
|
948
|
+
lineWidth: 2,
|
|
949
|
+
lineStyle: "solid"
|
|
950
|
+
};
|
|
951
|
+
});
|
|
932
952
|
if (!selectedVenue)
|
|
933
|
-
return
|
|
934
|
-
return
|
|
935
|
-
}, [
|
|
953
|
+
return series;
|
|
954
|
+
return series.filter((seriesItem) => seriesItem.venue === selectedVenue);
|
|
955
|
+
}, [
|
|
956
|
+
activeCanonicalMarketId,
|
|
957
|
+
activeProbabilityMode,
|
|
958
|
+
marketChartData,
|
|
959
|
+
normalizedVenueDataByMode,
|
|
960
|
+
probabilityModeConfigs,
|
|
961
|
+
selectedVenue
|
|
962
|
+
]);
|
|
963
|
+
const chartLiveState = useMemo3(() => {
|
|
964
|
+
return resolveMarketChartLiveState({
|
|
965
|
+
chartData: marketChartData,
|
|
966
|
+
selectedVenue,
|
|
967
|
+
transformProbability: probabilityModeConfigs[activeProbabilityMode].transformProbability
|
|
968
|
+
});
|
|
969
|
+
}, [activeProbabilityMode, marketChartData, probabilityModeConfigs, selectedVenue]);
|
|
936
970
|
const segmentedDisplayItems = useMemo3(() => {
|
|
937
971
|
return probabilityModeOrder.map((mode) => {
|
|
938
972
|
const averageProbability = resolveAverageProbability(
|
|
@@ -970,31 +1004,22 @@ var EventListItemDetailsGraphSection = ({
|
|
|
970
1004
|
return venue;
|
|
971
1005
|
});
|
|
972
1006
|
};
|
|
973
|
-
const
|
|
974
|
-
void
|
|
1007
|
+
const handleRetryMarketChart = () => {
|
|
1008
|
+
void refetchMarketChart();
|
|
975
1009
|
};
|
|
976
|
-
if (
|
|
977
|
-
return /* @__PURE__ */ jsx3(
|
|
978
|
-
|
|
1010
|
+
if (marketChartError) {
|
|
1011
|
+
return /* @__PURE__ */ jsx3("div", { className: cn("w-full", classNames == null ? void 0 : classNames.chart), children: /* @__PURE__ */ jsx3(
|
|
1012
|
+
StateMessage,
|
|
979
1013
|
{
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
ariaLabel: labels.eventItemDetails.chartUnavailableAria,
|
|
988
|
-
tone: "warning",
|
|
989
|
-
title: labels.eventItemDetails.chartUnavailableTitle,
|
|
990
|
-
description: labels.eventItemDetails.chartUnavailableDescription,
|
|
991
|
-
actionLabel: labels.common.retry,
|
|
992
|
-
onAction: handleRetryPriceHistory,
|
|
993
|
-
className: "min-h-[300px] px-5 py-10 md:px-10"
|
|
994
|
-
}
|
|
995
|
-
)
|
|
1014
|
+
tone: "warning",
|
|
1015
|
+
ariaLabel: labels.eventItemDetails.chartUnavailableAria,
|
|
1016
|
+
title: labels.eventItemDetails.chartUnavailableTitle,
|
|
1017
|
+
description: labels.eventItemDetails.chartUnavailableDescription,
|
|
1018
|
+
actionLabel: labels.common.retry,
|
|
1019
|
+
onAction: handleRetryMarketChart,
|
|
1020
|
+
className: "min-h-[300px] px-5 py-10 md:px-10"
|
|
996
1021
|
}
|
|
997
|
-
);
|
|
1022
|
+
) });
|
|
998
1023
|
}
|
|
999
1024
|
return /* @__PURE__ */ jsx3(
|
|
1000
1025
|
LineChart,
|
|
@@ -1002,8 +1027,10 @@ var EventListItemDetailsGraphSection = ({
|
|
|
1002
1027
|
classNames: { root: classNames == null ? void 0 : classNames.chart },
|
|
1003
1028
|
series: visibleChartSeries,
|
|
1004
1029
|
height: 300,
|
|
1005
|
-
isLoading:
|
|
1030
|
+
isLoading: isMarketChartLoading,
|
|
1006
1031
|
chartType: selectedChartType,
|
|
1032
|
+
liveCandle: selectedChartType === "candlestick" ? (_b = chartLiveState.liveCandle) != null ? _b : void 0 : void 0,
|
|
1033
|
+
lineValue: chartLiveState.lineValue,
|
|
1007
1034
|
showSeriesControls: activeModeVenueData.length > 0 || segmentedDisplayItems.length > 0,
|
|
1008
1035
|
renderSeriesControls: () => {
|
|
1009
1036
|
return /* @__PURE__ */ jsxs2(
|
|
@@ -1019,7 +1046,7 @@ var EventListItemDetailsGraphSection = ({
|
|
|
1019
1046
|
classNames == null ? void 0 : classNames.outcomeBadges
|
|
1020
1047
|
),
|
|
1021
1048
|
children: activeModeVenueData.map((venueData) => {
|
|
1022
|
-
var
|
|
1049
|
+
var _a2;
|
|
1023
1050
|
const text = venueData.probability == null ? "-" : formatPercent(venueData.probability);
|
|
1024
1051
|
const isActiveVenue = selectedVenue === venueData.venue;
|
|
1025
1052
|
return /* @__PURE__ */ jsx3(
|
|
@@ -1036,14 +1063,14 @@ var EventListItemDetailsGraphSection = ({
|
|
|
1036
1063
|
{
|
|
1037
1064
|
text,
|
|
1038
1065
|
size: "large",
|
|
1039
|
-
prefix:
|
|
1066
|
+
prefix: /* @__PURE__ */ jsx3(
|
|
1040
1067
|
VenueLogo,
|
|
1041
1068
|
{
|
|
1042
1069
|
venue: venueData.venue,
|
|
1043
1070
|
size: "small",
|
|
1044
|
-
title: (
|
|
1071
|
+
title: (_a2 = venueInfo == null ? void 0 : venueInfo[venueData.venue]) == null ? void 0 : _a2.label
|
|
1045
1072
|
}
|
|
1046
|
-
)
|
|
1073
|
+
),
|
|
1047
1074
|
classNames: {
|
|
1048
1075
|
root: cn("h-9 shrink-0 border-2 px-4 text-agg-base leading-agg-6")
|
|
1049
1076
|
},
|
|
@@ -1084,45 +1111,55 @@ var EventListItemDetailsGraphSection = ({
|
|
|
1084
1111
|
};
|
|
1085
1112
|
var EventListItemDetailsContent = ({
|
|
1086
1113
|
event,
|
|
1087
|
-
title,
|
|
1088
|
-
image,
|
|
1089
|
-
showVenueLogo = true,
|
|
1090
1114
|
classNames,
|
|
1091
1115
|
venueInfo,
|
|
1092
1116
|
detailsStats,
|
|
1093
1117
|
ariaLabel,
|
|
1094
|
-
defaultTimeRange
|
|
1118
|
+
defaultTimeRange,
|
|
1119
|
+
onClick
|
|
1095
1120
|
}) => {
|
|
1121
|
+
var _a;
|
|
1096
1122
|
const config = useSdkUiConfig2();
|
|
1097
1123
|
const labels = useLabels3();
|
|
1098
1124
|
const venueMarkets = useMemo3(() => {
|
|
1099
|
-
var
|
|
1100
|
-
return (
|
|
1125
|
+
var _a2;
|
|
1126
|
+
return (_a2 = event.venueMarkets) != null ? _a2 : [];
|
|
1101
1127
|
}, [event.venueMarkets]);
|
|
1128
|
+
const [selectedMarket, setSelectedMarket] = useState(venueMarkets[0]);
|
|
1129
|
+
const [selectedOutcome] = useState(
|
|
1130
|
+
(_a = selectedMarket == null ? void 0 : selectedMarket.venueMarketOutcomes.find(
|
|
1131
|
+
(outcome) => outcome.winner
|
|
1132
|
+
)) != null ? _a : selectedMarket == null ? void 0 : selectedMarket.venueMarketOutcomes[0]
|
|
1133
|
+
);
|
|
1102
1134
|
const primaryVenueMarket = useMemo3(() => {
|
|
1103
1135
|
return selectPrimaryVenueMarket(venueMarkets);
|
|
1104
1136
|
}, [venueMarkets]);
|
|
1137
|
+
const filteredVenueMarkets = useMemo3(() => {
|
|
1138
|
+
if (!selectedMarket)
|
|
1139
|
+
return venueMarkets;
|
|
1140
|
+
return venueMarkets.filter(
|
|
1141
|
+
(vm) => vm.question === (selectedMarket == null ? void 0 : selectedMarket.question)
|
|
1142
|
+
);
|
|
1143
|
+
}, [venueMarkets, selectedMarket]);
|
|
1105
1144
|
const outcomeLabels = useMemo3(() => {
|
|
1106
|
-
return resolveOutcomeLabels(
|
|
1107
|
-
}, [
|
|
1145
|
+
return resolveOutcomeLabels(filteredVenueMarkets);
|
|
1146
|
+
}, [filteredVenueMarkets]);
|
|
1108
1147
|
const [selectedOutcomeLabel, setSelectedOutcomeLabel] = useState(() => {
|
|
1109
1148
|
return resolveDefaultOutcomeLabel(outcomeLabels);
|
|
1110
1149
|
});
|
|
1150
|
+
const configTimeRange = config.defaultChartTimeRange;
|
|
1111
1151
|
const [selectedTimeRange, setSelectedTimeRange] = useState(() => {
|
|
1112
|
-
return getDefaultSelectedTimeRange(defaultTimeRange);
|
|
1152
|
+
return getDefaultSelectedTimeRange(defaultTimeRange, configTimeRange);
|
|
1113
1153
|
});
|
|
1114
1154
|
const [selectedChartType, setSelectedChartType] = useState("line");
|
|
1115
1155
|
useEffect(() => {
|
|
1116
|
-
setSelectedTimeRange(getDefaultSelectedTimeRange(defaultTimeRange));
|
|
1117
|
-
}, [defaultTimeRange]);
|
|
1118
|
-
const resolvedTitle = resolveTileTitle(event, primaryVenueMarket, title);
|
|
1119
|
-
const resolvedImage = resolveTileImage(event, primaryVenueMarket, image);
|
|
1156
|
+
setSelectedTimeRange(getDefaultSelectedTimeRange(defaultTimeRange, configTimeRange));
|
|
1157
|
+
}, [defaultTimeRange, configTimeRange]);
|
|
1120
1158
|
const isDateOutcomeMarket = outcomeLabels.length > 2 && outcomeLabels.every(isDateLikeLabel);
|
|
1121
|
-
const outcomeSelectorLabels = outcomeLabels;
|
|
1122
1159
|
const probabilityByLabel = useMemo3(() => {
|
|
1123
1160
|
return new Map(
|
|
1124
1161
|
outcomeLabels.map((label) => {
|
|
1125
|
-
const outcomesByVenue = resolveOutcomesByVenue(
|
|
1162
|
+
const outcomesByVenue = resolveOutcomesByVenue(filteredVenueMarkets, label);
|
|
1126
1163
|
const probabilities = outcomesByVenue.map((item) => normalizeProbability(item.outcome.price)).filter((value) => value != null);
|
|
1127
1164
|
if (probabilities.length === 0) {
|
|
1128
1165
|
return [label, void 0];
|
|
@@ -1131,13 +1168,13 @@ var EventListItemDetailsContent = ({
|
|
|
1131
1168
|
return [label, averageProbability];
|
|
1132
1169
|
})
|
|
1133
1170
|
);
|
|
1134
|
-
}, [outcomeLabels,
|
|
1171
|
+
}, [outcomeLabels, filteredVenueMarkets]);
|
|
1135
1172
|
const mainOutcomeLabel = useMemo3(() => {
|
|
1136
1173
|
if (outcomeLabels.length === 0)
|
|
1137
1174
|
return void 0;
|
|
1138
1175
|
return [...outcomeLabels].sort((left, right) => {
|
|
1139
|
-
var
|
|
1140
|
-
const leftProbability = (
|
|
1176
|
+
var _a2, _b;
|
|
1177
|
+
const leftProbability = (_a2 = probabilityByLabel.get(left)) != null ? _a2 : -1;
|
|
1141
1178
|
const rightProbability = (_b = probabilityByLabel.get(right)) != null ? _b : -1;
|
|
1142
1179
|
return rightProbability - leftProbability;
|
|
1143
1180
|
})[0];
|
|
@@ -1154,17 +1191,17 @@ var EventListItemDetailsContent = ({
|
|
|
1154
1191
|
setSelectedOutcomeLabel(fallbackOutcomeLabel);
|
|
1155
1192
|
}, [isDateOutcomeMarket, mainOutcomeLabel, outcomeLabels, selectedOutcomeLabel]);
|
|
1156
1193
|
const switchLabels = useMemo3(() => {
|
|
1157
|
-
var
|
|
1194
|
+
var _a2, _b;
|
|
1158
1195
|
if (isDateOutcomeMarket) {
|
|
1159
1196
|
return [labels.eventItemDetails.yes, labels.eventItemDetails.no];
|
|
1160
1197
|
}
|
|
1161
1198
|
const sortedOutcomeLabels = [...outcomeLabels].sort((left, right) => {
|
|
1162
|
-
var
|
|
1163
|
-
const leftProbability = (
|
|
1199
|
+
var _a3, _b2;
|
|
1200
|
+
const leftProbability = (_a3 = probabilityByLabel.get(left)) != null ? _a3 : -1;
|
|
1164
1201
|
const rightProbability = (_b2 = probabilityByLabel.get(right)) != null ? _b2 : -1;
|
|
1165
1202
|
return rightProbability - leftProbability;
|
|
1166
1203
|
});
|
|
1167
|
-
const firstLabel = (
|
|
1204
|
+
const firstLabel = (_a2 = sortedOutcomeLabels[0]) != null ? _a2 : labels.eventItemDetails.yes;
|
|
1168
1205
|
const secondLabel = (_b = sortedOutcomeLabels.find((label) => label !== firstLabel)) != null ? _b : firstLabel;
|
|
1169
1206
|
return [firstLabel, secondLabel];
|
|
1170
1207
|
}, [
|
|
@@ -1175,34 +1212,44 @@ var EventListItemDetailsContent = ({
|
|
|
1175
1212
|
probabilityByLabel
|
|
1176
1213
|
]);
|
|
1177
1214
|
const volumeLabel = useMemo3(() => {
|
|
1178
|
-
var
|
|
1179
|
-
const resolvedVolume = typeof event.volume === "number" ? event.volume : (
|
|
1215
|
+
var _a2;
|
|
1216
|
+
const resolvedVolume = typeof event.volume === "number" ? event.volume : (_a2 = primaryVenueMarket == null ? void 0 : primaryVenueMarket.volume) != null ? _a2 : void 0;
|
|
1180
1217
|
if (typeof resolvedVolume !== "number")
|
|
1181
1218
|
return "";
|
|
1182
1219
|
return `${config.formatCompactCurrency(resolvedVolume)} ${labels.eventItemDetails.volumeSuffix}`;
|
|
1183
1220
|
}, [config, event.volume, labels.eventItemDetails.volumeSuffix, primaryVenueMarket == null ? void 0 : primaryVenueMarket.volume]);
|
|
1184
1221
|
if (!primaryVenueMarket || !selectedOutcomeLabel) {
|
|
1185
|
-
return /* @__PURE__ */ jsx3(
|
|
1222
|
+
return /* @__PURE__ */ jsx3(
|
|
1223
|
+
EventListItemDetailsUnavailableState,
|
|
1224
|
+
{
|
|
1225
|
+
classNames,
|
|
1226
|
+
ariaLabel: ariaLabel != null ? ariaLabel : event.title
|
|
1227
|
+
}
|
|
1228
|
+
);
|
|
1186
1229
|
}
|
|
1187
1230
|
return /* @__PURE__ */ jsxs2(
|
|
1188
1231
|
Card,
|
|
1189
1232
|
{
|
|
1190
1233
|
className: cn(detailsBaseCardClassName, classNames == null ? void 0 : classNames.root),
|
|
1191
|
-
"aria-label": ariaLabel != null ? ariaLabel :
|
|
1234
|
+
"aria-label": ariaLabel != null ? ariaLabel : event.title,
|
|
1235
|
+
onClick: () => {
|
|
1236
|
+
onClick == null ? void 0 : onClick(event);
|
|
1237
|
+
},
|
|
1192
1238
|
children: [
|
|
1193
1239
|
/* @__PURE__ */ jsxs2(
|
|
1194
1240
|
"div",
|
|
1195
1241
|
{
|
|
1196
1242
|
className: cn(
|
|
1197
1243
|
"flex flex-row gap-3 md:gap-4",
|
|
1198
|
-
"items-
|
|
1244
|
+
venueMarkets.length > 1 ? "items-start" : "items-center",
|
|
1245
|
+
"justify-start",
|
|
1199
1246
|
classNames == null ? void 0 : classNames.header
|
|
1200
1247
|
),
|
|
1201
1248
|
children: [
|
|
1202
|
-
|
|
1249
|
+
event.image ? /* @__PURE__ */ jsx3(
|
|
1203
1250
|
RemoteImage,
|
|
1204
1251
|
{
|
|
1205
|
-
src:
|
|
1252
|
+
src: event.image,
|
|
1206
1253
|
alt: "",
|
|
1207
1254
|
className: "size-10 rounded-agg-lg object-cover md:size-[60px]"
|
|
1208
1255
|
}
|
|
@@ -1217,19 +1264,18 @@ var EventListItemDetailsContent = ({
|
|
|
1217
1264
|
"truncate text-wrap wrap-break-word line-clamp-2",
|
|
1218
1265
|
classNames == null ? void 0 : classNames.title
|
|
1219
1266
|
),
|
|
1220
|
-
children:
|
|
1267
|
+
children: event.title
|
|
1221
1268
|
}
|
|
1222
1269
|
),
|
|
1223
|
-
|
|
1270
|
+
venueMarkets.length > 1 ? /* @__PURE__ */ jsx3(
|
|
1224
1271
|
"div",
|
|
1225
1272
|
{
|
|
1226
1273
|
className: cn(
|
|
1227
|
-
"flex items-center gap-2 overflow-x-auto pb-1 md:
|
|
1274
|
+
"flex flex-row flex-nowrap items-center gap-2 overflow-x-auto pb-1 md:pb-0",
|
|
1228
1275
|
classNames == null ? void 0 : classNames.headerPills
|
|
1229
1276
|
),
|
|
1230
|
-
children:
|
|
1231
|
-
const isActive =
|
|
1232
|
-
const displayLabel = isDateLikeLabel(outcomeSelectorLabel) ? formatDateLabel(outcomeSelectorLabel) : outcomeSelectorLabel;
|
|
1277
|
+
children: venueMarkets.map((venueMarket) => {
|
|
1278
|
+
const isActive = (selectedMarket == null ? void 0 : selectedMarket.id) === venueMarket.id;
|
|
1233
1279
|
return /* @__PURE__ */ jsx3(
|
|
1234
1280
|
Button,
|
|
1235
1281
|
{
|
|
@@ -1241,10 +1287,14 @@ var EventListItemDetailsContent = ({
|
|
|
1241
1287
|
"border-2",
|
|
1242
1288
|
isActive ? "border-agg-primary bg-agg-secondary text-agg-foreground font-agg-bold" : "border-transparent bg-agg-secondary-hover text-agg-foreground font-agg-normal"
|
|
1243
1289
|
),
|
|
1244
|
-
onClick: () =>
|
|
1245
|
-
|
|
1290
|
+
onClick: (e) => {
|
|
1291
|
+
e.stopPropagation();
|
|
1292
|
+
e.preventDefault();
|
|
1293
|
+
setSelectedMarket(venueMarket);
|
|
1294
|
+
},
|
|
1295
|
+
children: venueMarket.question
|
|
1246
1296
|
},
|
|
1247
|
-
|
|
1297
|
+
venueMarket.id
|
|
1248
1298
|
);
|
|
1249
1299
|
})
|
|
1250
1300
|
}
|
|
@@ -1273,14 +1323,14 @@ var EventListItemDetailsContent = ({
|
|
|
1273
1323
|
/* @__PURE__ */ jsx3(
|
|
1274
1324
|
EventListItemDetailsGraphSection,
|
|
1275
1325
|
{
|
|
1276
|
-
|
|
1277
|
-
|
|
1326
|
+
selectedOutcome,
|
|
1327
|
+
selectedMarket,
|
|
1328
|
+
venueMarkets: filteredVenueMarkets,
|
|
1278
1329
|
selectedOutcomeLabel,
|
|
1279
1330
|
onSelectedOutcomeLabelChange: setSelectedOutcomeLabel,
|
|
1280
1331
|
switchLabels,
|
|
1281
1332
|
isDateOutcomeMarket,
|
|
1282
1333
|
classNames,
|
|
1283
|
-
showVenueLogo,
|
|
1284
1334
|
venueInfo,
|
|
1285
1335
|
formatPercent: config.formatPercent,
|
|
1286
1336
|
selectedTimeRange,
|
|
@@ -1306,7 +1356,11 @@ var EventListItemDetailsContent = ({
|
|
|
1306
1356
|
isActive ? "font-agg-bold! text-agg-foreground!" : "font-agg-normal! text-agg-muted-foreground!"
|
|
1307
1357
|
),
|
|
1308
1358
|
"aria-pressed": isActive,
|
|
1309
|
-
onClick: () =>
|
|
1359
|
+
onClick: (e) => {
|
|
1360
|
+
e.stopPropagation();
|
|
1361
|
+
e.preventDefault();
|
|
1362
|
+
setSelectedTimeRange(timeRange);
|
|
1363
|
+
},
|
|
1310
1364
|
children: timeRange === "ALL" ? labels.eventItemDetails.allTimeRange : timeRange
|
|
1311
1365
|
},
|
|
1312
1366
|
timeRange
|
|
@@ -1324,19 +1378,20 @@ var EventListItemDetailsByEventId = (_a) => {
|
|
|
1324
1378
|
} = _b, rest = __objRest(_b, [
|
|
1325
1379
|
"eventId"
|
|
1326
1380
|
]);
|
|
1381
|
+
const resolvedEventId = eventId != null ? eventId : "";
|
|
1327
1382
|
const {
|
|
1328
1383
|
event: fetchedEvent,
|
|
1329
1384
|
error,
|
|
1330
1385
|
isError,
|
|
1331
1386
|
isLoading
|
|
1332
1387
|
} = useVenueEvent2({
|
|
1333
|
-
eventId:
|
|
1334
|
-
enabled: !!
|
|
1388
|
+
eventId: resolvedEventId,
|
|
1389
|
+
enabled: !!resolvedEventId
|
|
1335
1390
|
});
|
|
1336
1391
|
const resolvedEvent = useMemo3(() => {
|
|
1337
1392
|
return resolveEventListItemEvent(fetchedEvent);
|
|
1338
1393
|
}, [fetchedEvent]);
|
|
1339
|
-
if (!
|
|
1394
|
+
if (!resolvedEventId) {
|
|
1340
1395
|
return /* @__PURE__ */ jsx3(
|
|
1341
1396
|
EventListItemDetailsUnavailableState,
|
|
1342
1397
|
{
|
|
@@ -1375,26 +1430,22 @@ var EventListItemDetails = (props) => {
|
|
|
1375
1430
|
}
|
|
1376
1431
|
if ("eventId" in props && typeof props.eventId === "string") {
|
|
1377
1432
|
const {
|
|
1378
|
-
title: titleOverride,
|
|
1379
|
-
image: imageOverride,
|
|
1380
|
-
showVenueLogo: showVenueLogoOverride,
|
|
1381
1433
|
classNames,
|
|
1382
1434
|
venueInfo,
|
|
1383
1435
|
detailsStats,
|
|
1384
1436
|
ariaLabel: ariaLabelOverride,
|
|
1385
|
-
defaultTimeRange: defaultTimeRangeOverride
|
|
1437
|
+
defaultTimeRange: defaultTimeRangeOverride,
|
|
1438
|
+
onClick
|
|
1386
1439
|
} = props;
|
|
1387
1440
|
const byEventIdProps = {
|
|
1388
1441
|
eventId: props.eventId,
|
|
1389
1442
|
isLoading: false,
|
|
1390
|
-
title: titleOverride,
|
|
1391
|
-
image: imageOverride,
|
|
1392
|
-
showVenueLogo: showVenueLogoOverride,
|
|
1393
1443
|
classNames,
|
|
1394
1444
|
venueInfo,
|
|
1395
1445
|
detailsStats,
|
|
1396
1446
|
ariaLabel: ariaLabelOverride,
|
|
1397
|
-
defaultTimeRange: defaultTimeRangeOverride
|
|
1447
|
+
defaultTimeRange: defaultTimeRangeOverride,
|
|
1448
|
+
onClick
|
|
1398
1449
|
};
|
|
1399
1450
|
return /* @__PURE__ */ jsx3(EventListItemDetailsByEventId, __spreadValues({}, byEventIdProps));
|
|
1400
1451
|
}
|
|
@@ -1412,10 +1463,11 @@ EventListItemDetails.displayName = "EventListItemDetails";
|
|
|
1412
1463
|
import { useEffect as useEffect2, useId, useMemo as useMemo4, useState as useState2 } from "react";
|
|
1413
1464
|
import {
|
|
1414
1465
|
useLabels as useLabels4,
|
|
1415
|
-
|
|
1416
|
-
|
|
1466
|
+
useMarketChart as useMarketChart2,
|
|
1467
|
+
useMarketOrderbook,
|
|
1468
|
+
useVenueMarkets,
|
|
1417
1469
|
useSdkUiConfig as useSdkUiConfig3,
|
|
1418
|
-
|
|
1470
|
+
timeRangeToInterval as timeRangeToInterval2
|
|
1419
1471
|
} from "@agg-market/hooks";
|
|
1420
1472
|
|
|
1421
1473
|
// src/events/market-details/market-details.utils.ts
|
|
@@ -1447,24 +1499,29 @@ var resolveInitialTab = (defaultTab) => {
|
|
|
1447
1499
|
return parsedTab.data;
|
|
1448
1500
|
return "order-book";
|
|
1449
1501
|
};
|
|
1450
|
-
var
|
|
1451
|
-
var _a, _b
|
|
1452
|
-
if (!
|
|
1502
|
+
var resolveMarketFromVenueMarkets = (venueMarkets, marketId) => {
|
|
1503
|
+
var _a, _b;
|
|
1504
|
+
if (!venueMarkets || venueMarkets.length === 0)
|
|
1453
1505
|
return void 0;
|
|
1454
1506
|
if (!marketId) {
|
|
1507
|
+
const primary = selectPrimaryVenueMarket(venueMarkets);
|
|
1508
|
+
const totalVolume2 = venueMarkets.reduce((sum, vm) => {
|
|
1509
|
+
return sum + (typeof vm.volume === "number" ? vm.volume : 0);
|
|
1510
|
+
}, 0);
|
|
1455
1511
|
return {
|
|
1456
|
-
id:
|
|
1457
|
-
venueMarkets
|
|
1458
|
-
volume:
|
|
1459
|
-
status:
|
|
1460
|
-
startDate:
|
|
1461
|
-
endDate:
|
|
1462
|
-
creationDate:
|
|
1463
|
-
question:
|
|
1512
|
+
id: (_a = primary == null ? void 0 : primary.id) != null ? _a : venueMarkets[0].id,
|
|
1513
|
+
venueMarkets,
|
|
1514
|
+
volume: totalVolume2 || (primary == null ? void 0 : primary.volume),
|
|
1515
|
+
status: primary == null ? void 0 : primary.status,
|
|
1516
|
+
startDate: primary == null ? void 0 : primary.startDate,
|
|
1517
|
+
endDate: primary == null ? void 0 : primary.endDate,
|
|
1518
|
+
creationDate: primary == null ? void 0 : primary.creationDate,
|
|
1519
|
+
question: (_b = primary == null ? void 0 : primary.question) != null ? _b : venueMarkets[0].question
|
|
1464
1520
|
};
|
|
1465
1521
|
}
|
|
1466
|
-
const
|
|
1467
|
-
|
|
1522
|
+
const matchedVenueMarket = venueMarkets.find(
|
|
1523
|
+
(vm) => vm.id === marketId || vm.externalIdentifier === marketId
|
|
1524
|
+
);
|
|
1468
1525
|
if (!matchedVenueMarket)
|
|
1469
1526
|
return void 0;
|
|
1470
1527
|
const siblingVenueMarkets = venueMarkets.filter(
|
|
@@ -1477,11 +1534,11 @@ var resolveMarket = (event, marketId) => {
|
|
|
1477
1534
|
id: matchedVenueMarket.id,
|
|
1478
1535
|
venueMarkets: siblingVenueMarkets,
|
|
1479
1536
|
volume: totalVolume || matchedVenueMarket.volume,
|
|
1480
|
-
status:
|
|
1481
|
-
startDate:
|
|
1482
|
-
endDate:
|
|
1483
|
-
creationDate:
|
|
1484
|
-
question:
|
|
1537
|
+
status: matchedVenueMarket.status,
|
|
1538
|
+
startDate: matchedVenueMarket.startDate,
|
|
1539
|
+
endDate: matchedVenueMarket.endDate,
|
|
1540
|
+
creationDate: matchedVenueMarket.creationDate,
|
|
1541
|
+
question: matchedVenueMarket.question
|
|
1485
1542
|
};
|
|
1486
1543
|
};
|
|
1487
1544
|
var resolveDisplayOutcomeLabels = (labels) => {
|
|
@@ -1550,7 +1607,8 @@ var resolveHeaderOutcomeItems = (venueMarkets, defaultOutcomeLabel) => {
|
|
|
1550
1607
|
label,
|
|
1551
1608
|
probability: probabilityByLabel.get(label),
|
|
1552
1609
|
tone: resolveOutcomeTone(label, index),
|
|
1553
|
-
isDefault: normalizeLabel2(label) === normalizeLabel2((_a = defaultOutcomeLabel != null ? defaultOutcomeLabel : labels[0]) != null ? _a : "")
|
|
1610
|
+
isDefault: normalizeLabel2(label) === normalizeLabel2((_a = defaultOutcomeLabel != null ? defaultOutcomeLabel : labels[0]) != null ? _a : ""),
|
|
1611
|
+
venue: venueMarkets[0].venue
|
|
1554
1612
|
};
|
|
1555
1613
|
});
|
|
1556
1614
|
};
|
|
@@ -1641,23 +1699,23 @@ var resolveOtherTabRows = (market, labels) => {
|
|
|
1641
1699
|
return rows;
|
|
1642
1700
|
};
|
|
1643
1701
|
var buildMarketDetailsModel = ({
|
|
1644
|
-
|
|
1702
|
+
venueMarkets,
|
|
1645
1703
|
marketId,
|
|
1646
1704
|
title,
|
|
1647
1705
|
image,
|
|
1648
1706
|
formatCompactCurrency,
|
|
1649
1707
|
labels
|
|
1650
1708
|
}) => {
|
|
1651
|
-
var _a;
|
|
1652
|
-
const market =
|
|
1709
|
+
var _a, _b;
|
|
1710
|
+
const market = resolveMarketFromVenueMarkets(venueMarkets, marketId);
|
|
1653
1711
|
if (!market)
|
|
1654
1712
|
return void 0;
|
|
1655
1713
|
const primaryVenueMarket = selectPrimaryVenueMarket(market.venueMarkets);
|
|
1656
1714
|
if (!primaryVenueMarket)
|
|
1657
1715
|
return void 0;
|
|
1658
|
-
const resolvedTitle =
|
|
1659
|
-
const resolvedImage =
|
|
1660
|
-
const resolvedVolume = typeof market.volume === "number" ? market.volume : (
|
|
1716
|
+
const resolvedTitle = (title == null ? void 0 : title.trim()) || primaryVenueMarket.question || market.question;
|
|
1717
|
+
const resolvedImage = (_a = typeof image === "string" && image.trim() ? image : void 0) != null ? _a : typeof primaryVenueMarket.image === "string" && primaryVenueMarket.image.trim() ? primaryVenueMarket.image : void 0;
|
|
1718
|
+
const resolvedVolume = typeof market.volume === "number" ? market.volume : (_b = primaryVenueMarket.volume) != null ? _b : void 0;
|
|
1661
1719
|
const subtitle = resolveSubtitle({
|
|
1662
1720
|
venueMarkets: market.venueMarkets,
|
|
1663
1721
|
volume: resolvedVolume,
|
|
@@ -1803,7 +1861,7 @@ var getOutcomeButtonClassName = ({
|
|
|
1803
1861
|
);
|
|
1804
1862
|
};
|
|
1805
1863
|
var MarketDetailsContent = ({
|
|
1806
|
-
|
|
1864
|
+
venueMarkets,
|
|
1807
1865
|
marketId,
|
|
1808
1866
|
title,
|
|
1809
1867
|
image,
|
|
@@ -1811,29 +1869,29 @@ var MarketDetailsContent = ({
|
|
|
1811
1869
|
onOpenChange,
|
|
1812
1870
|
defaultTab,
|
|
1813
1871
|
defaultOutcomeLabel,
|
|
1814
|
-
defaultTimeRange
|
|
1872
|
+
defaultTimeRange,
|
|
1815
1873
|
orderBookDepth = orderBookRowLimitDefault,
|
|
1816
1874
|
ariaLabel,
|
|
1817
1875
|
classNames,
|
|
1818
|
-
otherContent
|
|
1819
|
-
liveUpdate = false
|
|
1876
|
+
otherContent
|
|
1820
1877
|
}) => {
|
|
1878
|
+
var _a, _b, _c, _d;
|
|
1821
1879
|
const config = useSdkUiConfig3();
|
|
1822
1880
|
const labels = useLabels4();
|
|
1823
1881
|
const detailsContentId = useId();
|
|
1824
1882
|
const model = useMemo4(() => {
|
|
1825
1883
|
return buildMarketDetailsModel({
|
|
1826
|
-
|
|
1884
|
+
venueMarkets,
|
|
1827
1885
|
marketId,
|
|
1828
1886
|
title,
|
|
1829
1887
|
image,
|
|
1830
1888
|
formatCompactCurrency: config.formatCompactCurrency,
|
|
1831
1889
|
labels
|
|
1832
1890
|
});
|
|
1833
|
-
}, [config.formatCompactCurrency,
|
|
1891
|
+
}, [config.formatCompactCurrency, venueMarkets, image, labels, marketId, title]);
|
|
1834
1892
|
const resolvedMarket = useMemo4(() => {
|
|
1835
|
-
return
|
|
1836
|
-
}, [
|
|
1893
|
+
return resolveMarketFromVenueMarkets(venueMarkets, marketId);
|
|
1894
|
+
}, [venueMarkets, marketId]);
|
|
1837
1895
|
const marketDetailsTabs = useMemo4(() => {
|
|
1838
1896
|
return getMarketDetailsTabs(labels);
|
|
1839
1897
|
}, [labels]);
|
|
@@ -1844,22 +1902,23 @@ var MarketDetailsContent = ({
|
|
|
1844
1902
|
useEffect2(() => {
|
|
1845
1903
|
setSelectedTab(resolveInitialTab(defaultTab));
|
|
1846
1904
|
}, [defaultTab]);
|
|
1847
|
-
const
|
|
1905
|
+
const resolvedDefaultTimeRange = (_a = defaultTimeRange != null ? defaultTimeRange : config.defaultChartTimeRange) != null ? _a : "1D";
|
|
1906
|
+
const [selectedTimeRange, setSelectedTimeRange] = useState2(resolvedDefaultTimeRange);
|
|
1848
1907
|
const [selectedChartType, setSelectedChartType] = useState2("line");
|
|
1849
1908
|
useEffect2(() => {
|
|
1850
|
-
setSelectedTimeRange(
|
|
1851
|
-
}, [
|
|
1909
|
+
setSelectedTimeRange(resolvedDefaultTimeRange);
|
|
1910
|
+
}, [resolvedDefaultTimeRange]);
|
|
1852
1911
|
const [selectedOutcomeLabel, setSelectedOutcomeLabel] = useState2(
|
|
1853
1912
|
() => {
|
|
1854
|
-
var
|
|
1855
|
-
return resolveInitialOutcomeLabel((
|
|
1913
|
+
var _a2;
|
|
1914
|
+
return resolveInitialOutcomeLabel((_a2 = model == null ? void 0 : model.outcomeLabels) != null ? _a2 : [], defaultOutcomeLabel);
|
|
1856
1915
|
}
|
|
1857
1916
|
);
|
|
1858
1917
|
const [selectedGraphVenue, setSelectedGraphVenue] = useState2(null);
|
|
1859
1918
|
useEffect2(() => {
|
|
1860
|
-
var
|
|
1919
|
+
var _a2;
|
|
1861
1920
|
setSelectedOutcomeLabel(
|
|
1862
|
-
resolveInitialOutcomeLabel((
|
|
1921
|
+
resolveInitialOutcomeLabel((_a2 = model == null ? void 0 : model.outcomeLabels) != null ? _a2 : [], defaultOutcomeLabel)
|
|
1863
1922
|
);
|
|
1864
1923
|
}, [defaultOutcomeLabel, model == null ? void 0 : model.outcomeLabels]);
|
|
1865
1924
|
const headerOutcomeItems = useMemo4(() => {
|
|
@@ -1886,52 +1945,66 @@ var MarketDetailsContent = ({
|
|
|
1886
1945
|
return outcomesByLabelMap;
|
|
1887
1946
|
}, [headerOutcomeItems, model]);
|
|
1888
1947
|
const selectedOutcomesByVenue = useMemo4(() => {
|
|
1889
|
-
var
|
|
1948
|
+
var _a2;
|
|
1890
1949
|
if (!selectedOutcomeLabel)
|
|
1891
1950
|
return [];
|
|
1892
|
-
return (
|
|
1951
|
+
return (_a2 = outcomesByLabel.get(selectedOutcomeLabel)) != null ? _a2 : [];
|
|
1893
1952
|
}, [outcomesByLabel, selectedOutcomeLabel]);
|
|
1953
|
+
const chartEnabled = isOpened && selectedTab === "graph";
|
|
1954
|
+
const orderBookEnabled = isOpened && selectedTab === "order-book";
|
|
1894
1955
|
const timeWindow = useMemo4(() => {
|
|
1895
1956
|
return getTimeWindowByRange(selectedTimeRange);
|
|
1896
1957
|
}, [selectedTimeRange]);
|
|
1897
|
-
const
|
|
1898
|
-
|
|
1899
|
-
|
|
1900
|
-
|
|
1901
|
-
uniqueOutcomesByVenueAndId.set(
|
|
1902
|
-
`${outcomeByVenue.venue}:${outcomeByVenue.outcome.id}`,
|
|
1903
|
-
outcomeByVenue
|
|
1904
|
-
);
|
|
1905
|
-
});
|
|
1906
|
-
});
|
|
1907
|
-
return [...uniqueOutcomesByVenueAndId.values()];
|
|
1908
|
-
}, [outcomesByLabel]);
|
|
1909
|
-
const canonicalMarketIdForHistory = model == null ? void 0 : model.market.id;
|
|
1910
|
-
const priceHistoryGroups = useMemo4(() => {
|
|
1911
|
-
return buildPriceHistoryGroups(graphOutcomes, canonicalMarketIdForHistory);
|
|
1912
|
-
}, [canonicalMarketIdForHistory, graphOutcomes]);
|
|
1913
|
-
const { data: priceHistoryData, isLoading: isPriceHistoryLoading } = usePriceHistory2(__spreadProps(__spreadValues({
|
|
1914
|
-
groups: priceHistoryGroups
|
|
1915
|
-
}, timeWindow), {
|
|
1916
|
-
enabled: isOpened && selectedTab === "graph" && priceHistoryGroups.length > 0
|
|
1917
|
-
}));
|
|
1918
|
-
const orderBookInputs = useMemo4(() => {
|
|
1919
|
-
return selectedOutcomesByVenue.map(({ market, outcome }) => ({
|
|
1920
|
-
market,
|
|
1921
|
-
outcome,
|
|
1922
|
-
liveUpdate
|
|
1923
|
-
}));
|
|
1924
|
-
}, [selectedOutcomesByVenue, liveUpdate]);
|
|
1958
|
+
const primaryVenueMarketId = (_c = (_b = selectedOutcomesByVenue[0]) == null ? void 0 : _b.market.id) != null ? _c : null;
|
|
1959
|
+
const venueMarketIds = useMemo4(() => {
|
|
1960
|
+
return selectedOutcomesByVenue.map((item) => item.market.id);
|
|
1961
|
+
}, [selectedOutcomesByVenue]);
|
|
1925
1962
|
const {
|
|
1926
|
-
data:
|
|
1963
|
+
data: marketChartData,
|
|
1964
|
+
isLoading: isMarketChartLoading,
|
|
1965
|
+
error: marketChartError,
|
|
1966
|
+
refetch: refetchMarketChart
|
|
1967
|
+
} = useMarketChart2({
|
|
1968
|
+
marketId: primaryVenueMarketId,
|
|
1969
|
+
venueMarketIds,
|
|
1970
|
+
interval: timeRangeToInterval2(selectedTimeRange),
|
|
1971
|
+
startTs: timeWindow.startTs * 1e3,
|
|
1972
|
+
endTs: timeWindow.endTs * 1e3,
|
|
1973
|
+
enabled: chartEnabled && !!primaryVenueMarketId
|
|
1974
|
+
});
|
|
1975
|
+
const {
|
|
1976
|
+
data: marketOrderbookData,
|
|
1927
1977
|
isLoading: isOrderBookLoading,
|
|
1928
1978
|
error: orderBookError,
|
|
1929
|
-
|
|
1930
|
-
} =
|
|
1931
|
-
|
|
1932
|
-
enabled:
|
|
1933
|
-
|
|
1979
|
+
refetch: refetchOrderBook
|
|
1980
|
+
} = useMarketOrderbook({
|
|
1981
|
+
marketId: primaryVenueMarketId,
|
|
1982
|
+
enabled: orderBookEnabled && !!primaryVenueMarketId,
|
|
1983
|
+
venueOutcomes: selectedOutcomesByVenue.map((item) => ({
|
|
1984
|
+
venue: item.market.venue,
|
|
1985
|
+
venueMarketOutcomeId: item.outcome.id
|
|
1986
|
+
}))
|
|
1934
1987
|
});
|
|
1988
|
+
const orderBookData = useMemo4(() => {
|
|
1989
|
+
if (!marketOrderbookData)
|
|
1990
|
+
return void 0;
|
|
1991
|
+
const results = selectedOutcomesByVenue.flatMap(({ market, outcome }) => {
|
|
1992
|
+
const venueOrderbook = marketOrderbookData.venueOrderbooks[market.venue];
|
|
1993
|
+
if (!venueOrderbook)
|
|
1994
|
+
return [];
|
|
1995
|
+
return [
|
|
1996
|
+
{
|
|
1997
|
+
market,
|
|
1998
|
+
outcome,
|
|
1999
|
+
orderbook: {
|
|
2000
|
+
bids: venueOrderbook.bids,
|
|
2001
|
+
asks: venueOrderbook.asks
|
|
2002
|
+
}
|
|
2003
|
+
}
|
|
2004
|
+
];
|
|
2005
|
+
});
|
|
2006
|
+
return results.length === selectedOutcomesByVenue.length ? results : void 0;
|
|
2007
|
+
}, [marketOrderbookData, selectedOutcomesByVenue]);
|
|
1935
2008
|
const askRows = useMemo4(() => {
|
|
1936
2009
|
return resolveOrderBookRows({
|
|
1937
2010
|
data: orderBookData,
|
|
@@ -1944,78 +2017,43 @@ var MarketDetailsContent = ({
|
|
|
1944
2017
|
side: "bids"
|
|
1945
2018
|
});
|
|
1946
2019
|
}, [orderBookData]);
|
|
1947
|
-
const priceHistoryByVenue = useMemo4(() => {
|
|
1948
|
-
const historyByVenue = /* @__PURE__ */ new Map();
|
|
1949
|
-
if (!(priceHistoryData == null ? void 0 : priceHistoryData.length)) {
|
|
1950
|
-
return historyByVenue;
|
|
1951
|
-
}
|
|
1952
|
-
priceHistoryData.forEach((historyItem) => {
|
|
1953
|
-
const venue = historyItem.venue;
|
|
1954
|
-
const venueHistory = historyByVenue.get(venue);
|
|
1955
|
-
if (venueHistory) {
|
|
1956
|
-
venueHistory.push(historyItem);
|
|
1957
|
-
return;
|
|
1958
|
-
}
|
|
1959
|
-
historyByVenue.set(venue, [historyItem]);
|
|
1960
|
-
});
|
|
1961
|
-
return historyByVenue;
|
|
1962
|
-
}, [priceHistoryData]);
|
|
1963
|
-
const graphSeriesByOutcomeLabel = useMemo4(() => {
|
|
1964
|
-
const seriesByOutcomeLabel = /* @__PURE__ */ new Map();
|
|
1965
|
-
const resolveOutcomeCandidateIds2 = (outcomeByVenue) => {
|
|
1966
|
-
var _a, _b;
|
|
1967
|
-
const marketWithCanonicalId = outcomeByVenue.market;
|
|
1968
|
-
return [
|
|
1969
|
-
outcomeByVenue.outcome.id,
|
|
1970
|
-
(_a = outcomeByVenue.outcome.externalIdentifier) != null ? _a : void 0,
|
|
1971
|
-
outcomeByVenue.market.externalIdentifier,
|
|
1972
|
-
(_b = marketWithCanonicalId.marketId) != null ? _b : void 0,
|
|
1973
|
-
canonicalMarketIdForHistory
|
|
1974
|
-
].filter((value) => typeof value === "string" && value.trim().length > 0);
|
|
1975
|
-
};
|
|
1976
|
-
headerOutcomeItems.forEach((headerOutcomeItem) => {
|
|
1977
|
-
var _a;
|
|
1978
|
-
const outcomes = (_a = outcomesByLabel.get(headerOutcomeItem.label)) != null ? _a : [];
|
|
1979
|
-
const graphSeries2 = [];
|
|
1980
|
-
outcomes.forEach((outcomeByVenue, index) => {
|
|
1981
|
-
var _a2;
|
|
1982
|
-
const venueHistory = priceHistoryByVenue.get(outcomeByVenue.venue);
|
|
1983
|
-
if (!(venueHistory == null ? void 0 : venueHistory.length))
|
|
1984
|
-
return;
|
|
1985
|
-
const candidateIds = resolveOutcomeCandidateIds2(outcomeByVenue);
|
|
1986
|
-
const matchingHistory = (_a2 = venueHistory.find((historyItem) => candidateIds.includes(historyItem.marketId))) != null ? _a2 : venueHistory.length === 1 ? venueHistory[0] : void 0;
|
|
1987
|
-
if (!matchingHistory)
|
|
1988
|
-
return;
|
|
1989
|
-
const points = matchingHistory.points.map((point) => ({
|
|
1990
|
-
time: point.timestamp,
|
|
1991
|
-
value: point.price * 100,
|
|
1992
|
-
open: point.open == null ? void 0 : point.open * 100,
|
|
1993
|
-
high: point.high == null ? void 0 : point.high * 100,
|
|
1994
|
-
low: point.low == null ? void 0 : point.low * 100,
|
|
1995
|
-
close: point.close == null ? void 0 : point.close * 100
|
|
1996
|
-
})).filter((point) => Number.isFinite(point.time) && Number.isFinite(point.value));
|
|
1997
|
-
if (points.length === 0)
|
|
1998
|
-
return;
|
|
1999
|
-
graphSeries2.push({
|
|
2000
|
-
id: `${headerOutcomeItem.label}-${outcomeByVenue.venue}-${matchingHistory.marketId}`,
|
|
2001
|
-
venue: outcomeByVenue.venue,
|
|
2002
|
-
color: resolveSeriesColor(outcomeByVenue.venue, index),
|
|
2003
|
-
points
|
|
2004
|
-
});
|
|
2005
|
-
});
|
|
2006
|
-
seriesByOutcomeLabel.set(headerOutcomeItem.label, graphSeries2);
|
|
2007
|
-
});
|
|
2008
|
-
return seriesByOutcomeLabel;
|
|
2009
|
-
}, [canonicalMarketIdForHistory, headerOutcomeItems, outcomesByLabel, priceHistoryByVenue]);
|
|
2010
2020
|
const graphSeries = useMemo4(() => {
|
|
2011
|
-
|
|
2012
|
-
|
|
2013
|
-
|
|
2014
|
-
|
|
2021
|
+
const colorByVenue = new Map(
|
|
2022
|
+
selectedOutcomesByVenue.map((item, index) => [
|
|
2023
|
+
item.venue,
|
|
2024
|
+
resolveSeriesColor(item.venue, index)
|
|
2025
|
+
])
|
|
2026
|
+
);
|
|
2027
|
+
const seriesForOutcomeLabel = resolveMarketChartVenueSeries({
|
|
2028
|
+
chartData: marketChartData,
|
|
2029
|
+
transformProbability: (value) => value
|
|
2030
|
+
}).map((seriesItem) => {
|
|
2031
|
+
var _a2;
|
|
2032
|
+
const resolvedVenue = seriesItem.venue;
|
|
2033
|
+
return {
|
|
2034
|
+
id: `${selectedOutcomeLabel != null ? selectedOutcomeLabel : "graph"}-${resolvedVenue}-${primaryVenueMarketId != null ? primaryVenueMarketId : "chart"}`,
|
|
2035
|
+
venue: resolvedVenue,
|
|
2036
|
+
color: (_a2 = colorByVenue.get(resolvedVenue)) != null ? _a2 : resolveSeriesColor(resolvedVenue, 0),
|
|
2037
|
+
points: seriesItem.points
|
|
2038
|
+
};
|
|
2039
|
+
});
|
|
2015
2040
|
if (!selectedGraphVenue)
|
|
2016
2041
|
return seriesForOutcomeLabel;
|
|
2017
2042
|
return seriesForOutcomeLabel.filter((seriesItem) => seriesItem.venue === selectedGraphVenue);
|
|
2018
|
-
}, [
|
|
2043
|
+
}, [
|
|
2044
|
+
primaryVenueMarketId,
|
|
2045
|
+
marketChartData,
|
|
2046
|
+
selectedGraphVenue,
|
|
2047
|
+
selectedOutcomeLabel,
|
|
2048
|
+
selectedOutcomesByVenue
|
|
2049
|
+
]);
|
|
2050
|
+
const graphLiveState = useMemo4(() => {
|
|
2051
|
+
return resolveMarketChartLiveState({
|
|
2052
|
+
chartData: marketChartData,
|
|
2053
|
+
selectedVenue: selectedGraphVenue,
|
|
2054
|
+
transformProbability: (value) => value
|
|
2055
|
+
});
|
|
2056
|
+
}, [marketChartData, selectedGraphVenue]);
|
|
2019
2057
|
const otherRows = useMemo4(() => {
|
|
2020
2058
|
if (!model)
|
|
2021
2059
|
return [];
|
|
@@ -2023,9 +2061,10 @@ var MarketDetailsContent = ({
|
|
|
2023
2061
|
}, [labels, model]);
|
|
2024
2062
|
const isOrderBookNotFound = orderBookError && typeof orderBookError === "object" && "status" in orderBookError && orderBookError.status === 404;
|
|
2025
2063
|
const hasOrderBookError = !!orderBookError && !isOrderBookNotFound;
|
|
2026
|
-
const hasNoOrderBook = isOrderBookNotFound || !isOrderBookLoading && !hasOrderBookError && (
|
|
2064
|
+
const hasNoOrderBook = isOrderBookNotFound || !isOrderBookLoading && !hasOrderBookError && (selectedOutcomesByVenue.length === 0 || askRows.length === 0 && bidRows.length === 0);
|
|
2065
|
+
const hasChartError = !!marketChartError;
|
|
2027
2066
|
const handleOutcomeKeyDown = (eventToHandle) => {
|
|
2028
|
-
var
|
|
2067
|
+
var _a2;
|
|
2029
2068
|
if ((eventToHandle == null ? void 0 : eventToHandle.key) !== "ArrowLeft" && (eventToHandle == null ? void 0 : eventToHandle.key) !== "ArrowRight") {
|
|
2030
2069
|
return;
|
|
2031
2070
|
}
|
|
@@ -2036,14 +2075,14 @@ var MarketDetailsContent = ({
|
|
|
2036
2075
|
});
|
|
2037
2076
|
const direction = eventToHandle.key === "ArrowRight" ? 1 : -1;
|
|
2038
2077
|
const nextIndex = activeIndex < 0 ? 0 : (activeIndex + direction + headerOutcomeItems.length) % headerOutcomeItems.length;
|
|
2039
|
-
setSelectedOutcomeLabel((
|
|
2078
|
+
setSelectedOutcomeLabel((_a2 = headerOutcomeItems[nextIndex]) == null ? void 0 : _a2.label);
|
|
2040
2079
|
};
|
|
2041
|
-
const handleToggleExpanded = (
|
|
2042
|
-
if (
|
|
2080
|
+
const handleToggleExpanded = (event) => {
|
|
2081
|
+
if (event && "key" in event && (event == null ? void 0 : event.key) !== "Enter" && (event == null ? void 0 : event.key) !== " ") {
|
|
2043
2082
|
return;
|
|
2044
2083
|
}
|
|
2045
|
-
|
|
2046
|
-
|
|
2084
|
+
event == null ? void 0 : event.preventDefault();
|
|
2085
|
+
event == null ? void 0 : event.stopPropagation();
|
|
2047
2086
|
setIsOpened((prev) => {
|
|
2048
2087
|
const next = !prev;
|
|
2049
2088
|
onOpenChange == null ? void 0 : onOpenChange(next);
|
|
@@ -2058,7 +2097,10 @@ var MarketDetailsContent = ({
|
|
|
2058
2097
|
});
|
|
2059
2098
|
};
|
|
2060
2099
|
const handleRetryOrderBook = () => {
|
|
2061
|
-
void
|
|
2100
|
+
void refetchOrderBook();
|
|
2101
|
+
};
|
|
2102
|
+
const handleRetryMarketChart = () => {
|
|
2103
|
+
void refetchMarketChart();
|
|
2062
2104
|
};
|
|
2063
2105
|
useEffect2(() => {
|
|
2064
2106
|
if (!selectedGraphVenue) {
|
|
@@ -2101,7 +2143,7 @@ var MarketDetailsContent = ({
|
|
|
2101
2143
|
onClick: handleToggleExpanded,
|
|
2102
2144
|
onKeyDown: handleToggleExpanded,
|
|
2103
2145
|
children: [
|
|
2104
|
-
/* @__PURE__ */ jsxs3("div", { className: "flex min-w-52 items-center gap-3 md:gap-4", children: [
|
|
2146
|
+
/* @__PURE__ */ jsxs3("div", { className: "flex min-w-52 max-w-3/4 items-center gap-3 md:gap-4", children: [
|
|
2105
2147
|
model.image ? /* @__PURE__ */ jsx4(
|
|
2106
2148
|
RemoteImage,
|
|
2107
2149
|
{
|
|
@@ -2148,7 +2190,7 @@ var MarketDetailsContent = ({
|
|
|
2148
2190
|
/* @__PURE__ */ jsx4(
|
|
2149
2191
|
VenueLogo,
|
|
2150
2192
|
{
|
|
2151
|
-
venue:
|
|
2193
|
+
venue: "polymarket",
|
|
2152
2194
|
size: "small",
|
|
2153
2195
|
color: isActiveOutcome ? "var(--agg-color-on-primary)" : void 0
|
|
2154
2196
|
}
|
|
@@ -2255,13 +2297,26 @@ var MarketDetailsContent = ({
|
|
|
2255
2297
|
)
|
|
2256
2298
|
] }) }) : null,
|
|
2257
2299
|
selectedTab === "graph" ? /* @__PURE__ */ jsxs3("div", { className: cn("flex flex-col gap-5", classNames == null ? void 0 : classNames.graph), children: [
|
|
2258
|
-
/* @__PURE__ */ jsx4(
|
|
2300
|
+
hasChartError ? /* @__PURE__ */ jsx4(
|
|
2301
|
+
StateMessage,
|
|
2302
|
+
{
|
|
2303
|
+
ariaLabel: labels.marketDetails.chartUnavailableAria,
|
|
2304
|
+
tone: "warning",
|
|
2305
|
+
title: labels.marketDetails.chartUnavailableTitle,
|
|
2306
|
+
description: labels.marketDetails.chartUnavailableDescription,
|
|
2307
|
+
actionLabel: labels.common.retry,
|
|
2308
|
+
onAction: handleRetryMarketChart,
|
|
2309
|
+
className: "min-h-[248px] px-5 py-10 md:min-h-[272px]"
|
|
2310
|
+
}
|
|
2311
|
+
) : /* @__PURE__ */ jsx4(
|
|
2259
2312
|
LineChart,
|
|
2260
2313
|
{
|
|
2261
2314
|
series: graphSeries,
|
|
2262
2315
|
height: 260,
|
|
2263
|
-
isLoading:
|
|
2316
|
+
isLoading: isMarketChartLoading,
|
|
2264
2317
|
chartType: selectedChartType,
|
|
2318
|
+
liveCandle: selectedChartType === "candlestick" ? (_d = graphLiveState.liveCandle) != null ? _d : void 0 : void 0,
|
|
2319
|
+
lineValue: graphLiveState.lineValue,
|
|
2265
2320
|
classNames: { root: "w-full" },
|
|
2266
2321
|
showSeriesControls: selectedOutcomesByVenue.length > 0 || headerOutcomeItems.length > 0,
|
|
2267
2322
|
renderSeriesControls: () => {
|
|
@@ -2385,7 +2440,7 @@ var MarketDetailsContent = ({
|
|
|
2385
2440
|
);
|
|
2386
2441
|
};
|
|
2387
2442
|
var MarketDetails = (props) => {
|
|
2388
|
-
var _a
|
|
2443
|
+
var _a;
|
|
2389
2444
|
const [uncontrolledIsOpened, setUncontrolledIsOpened] = useState2(
|
|
2390
2445
|
(_a = props.defaultIsOpened) != null ? _a : marketDetailsDefaultIsOpened
|
|
2391
2446
|
);
|
|
@@ -2402,15 +2457,6 @@ var MarketDetails = (props) => {
|
|
|
2402
2457
|
}
|
|
2403
2458
|
(_a2 = props.onOpenChange) == null ? void 0 : _a2.call(props, nextIsOpened);
|
|
2404
2459
|
};
|
|
2405
|
-
const hasEventProp = "event" in props && !!props.event;
|
|
2406
|
-
const {
|
|
2407
|
-
event: fetchedEvent,
|
|
2408
|
-
error: eventError,
|
|
2409
|
-
isLoading: isFetchingEvent
|
|
2410
|
-
} = useVenueEvent3({
|
|
2411
|
-
eventId: hasEventProp ? "" : (_b = props.eventId) != null ? _b : "",
|
|
2412
|
-
enabled: !props.isLoading && !hasEventProp && !!props.eventId
|
|
2413
|
-
});
|
|
2414
2460
|
if (props.isLoading) {
|
|
2415
2461
|
return /* @__PURE__ */ jsx4(
|
|
2416
2462
|
MarketDetailsLoadingState,
|
|
@@ -2421,42 +2467,115 @@ var MarketDetails = (props) => {
|
|
|
2421
2467
|
}
|
|
2422
2468
|
);
|
|
2423
2469
|
}
|
|
2424
|
-
if ("
|
|
2470
|
+
if ("venueMarkets" in props && props.venueMarkets) {
|
|
2425
2471
|
return /* @__PURE__ */ jsx4(
|
|
2426
2472
|
MarketDetailsContent,
|
|
2427
2473
|
__spreadProps(__spreadValues({}, props), {
|
|
2428
2474
|
isOpened: resolvedIsOpened,
|
|
2429
2475
|
onOpenChange: handleOpenChange,
|
|
2430
|
-
|
|
2476
|
+
venueMarkets: props.venueMarkets
|
|
2431
2477
|
})
|
|
2432
2478
|
);
|
|
2433
2479
|
}
|
|
2434
|
-
|
|
2435
|
-
|
|
2436
|
-
|
|
2480
|
+
const { ariaLabel: fallbackAriaLabel, classNames: fallbackClassNames } = props;
|
|
2481
|
+
return /* @__PURE__ */ jsx4(MarketDetailsUnavailableState, { ariaLabel: fallbackAriaLabel, classNames: fallbackClassNames });
|
|
2482
|
+
};
|
|
2483
|
+
MarketDetails.displayName = "MarketDetails";
|
|
2484
|
+
var resolveInitialExpandedId = (markets, defaultId) => {
|
|
2485
|
+
var _a, _b;
|
|
2486
|
+
if (!markets.length)
|
|
2487
|
+
return null;
|
|
2488
|
+
if (defaultId) {
|
|
2489
|
+
const match = markets.find((m) => m.id === defaultId);
|
|
2490
|
+
if (match)
|
|
2491
|
+
return match.id;
|
|
2492
|
+
}
|
|
2493
|
+
return (_b = (_a = markets[0]) == null ? void 0 : _a.id) != null ? _b : null;
|
|
2494
|
+
};
|
|
2495
|
+
var MarketDetailsList = ({
|
|
2496
|
+
eventId,
|
|
2497
|
+
expandedMarketId,
|
|
2498
|
+
defaultExpandedMarketId,
|
|
2499
|
+
onExpandedMarketChange,
|
|
2500
|
+
defaultTab,
|
|
2501
|
+
defaultTimeRange,
|
|
2502
|
+
classNames,
|
|
2503
|
+
ariaLabel
|
|
2504
|
+
}) => {
|
|
2505
|
+
const labels = useLabels4();
|
|
2506
|
+
const resolvedEventId = eventId || "";
|
|
2507
|
+
const { markets, isLoading, error } = useVenueMarkets({
|
|
2508
|
+
venueEventId: resolvedEventId,
|
|
2509
|
+
enabled: !!resolvedEventId
|
|
2510
|
+
});
|
|
2511
|
+
const [internalExpandedId, setInternalExpandedId] = useState2(
|
|
2512
|
+
() => resolveInitialExpandedId(markets, defaultExpandedMarketId)
|
|
2513
|
+
);
|
|
2514
|
+
useEffect2(() => {
|
|
2515
|
+
if (typeof expandedMarketId !== "undefined")
|
|
2516
|
+
return;
|
|
2517
|
+
setInternalExpandedId((current) => {
|
|
2518
|
+
if (current && markets.some((m) => m.id === current))
|
|
2519
|
+
return current;
|
|
2520
|
+
return resolveInitialExpandedId(markets, defaultExpandedMarketId);
|
|
2521
|
+
});
|
|
2522
|
+
}, [defaultExpandedMarketId, expandedMarketId, markets]);
|
|
2523
|
+
useEffect2(() => {
|
|
2524
|
+
if (typeof expandedMarketId === "undefined")
|
|
2525
|
+
return;
|
|
2526
|
+
setInternalExpandedId(expandedMarketId);
|
|
2527
|
+
}, [expandedMarketId]);
|
|
2528
|
+
const resolvedExpandedId = typeof expandedMarketId === "undefined" ? internalExpandedId : expandedMarketId;
|
|
2529
|
+
const handleToggle = (marketId, isOpened) => {
|
|
2530
|
+
const next = isOpened ? marketId : null;
|
|
2531
|
+
if (typeof expandedMarketId === "undefined") {
|
|
2532
|
+
setInternalExpandedId(next);
|
|
2533
|
+
}
|
|
2534
|
+
onExpandedMarketChange == null ? void 0 : onExpandedMarketChange(next);
|
|
2535
|
+
};
|
|
2536
|
+
if (isLoading) {
|
|
2537
|
+
return /* @__PURE__ */ jsxs3("div", { className: cn("flex flex-col gap-3", classNames == null ? void 0 : classNames.root), "aria-label": ariaLabel, children: [
|
|
2538
|
+
/* @__PURE__ */ jsx4(MarketDetailsLoadingState, { isOpened: true, classNames: { root: classNames == null ? void 0 : classNames.item } }),
|
|
2539
|
+
/* @__PURE__ */ jsx4(MarketDetailsLoadingState, { isOpened: false, classNames: { root: classNames == null ? void 0 : classNames.item } })
|
|
2540
|
+
] });
|
|
2541
|
+
}
|
|
2542
|
+
if (error) {
|
|
2543
|
+
return /* @__PURE__ */ jsx4(Card, { className: cn(marketDetailsBaseCardClassName, "p-0", classNames == null ? void 0 : classNames.root), children: /* @__PURE__ */ jsx4(
|
|
2544
|
+
StateMessage,
|
|
2437
2545
|
{
|
|
2438
|
-
|
|
2439
|
-
|
|
2440
|
-
|
|
2546
|
+
ariaLabel: ariaLabel != null ? ariaLabel : labels.marketDetails.unavailableAria,
|
|
2547
|
+
title: labels.marketDetails.unavailableTitle,
|
|
2548
|
+
description: labels.marketDetails.unavailableDescription,
|
|
2549
|
+
className: "min-h-[280px] md:min-h-[320px]"
|
|
2441
2550
|
}
|
|
2442
|
-
);
|
|
2551
|
+
) });
|
|
2443
2552
|
}
|
|
2444
|
-
if (
|
|
2445
|
-
|
|
2446
|
-
|
|
2447
|
-
|
|
2448
|
-
|
|
2553
|
+
if (markets.length === 0) {
|
|
2554
|
+
return /* @__PURE__ */ jsx4(Card, { className: cn(marketDetailsBaseCardClassName, "p-0", classNames == null ? void 0 : classNames.root), children: /* @__PURE__ */ jsx4(
|
|
2555
|
+
StateMessage,
|
|
2556
|
+
{
|
|
2557
|
+
ariaLabel: ariaLabel != null ? ariaLabel : labels.marketDetails.notFoundAria,
|
|
2558
|
+
title: labels.marketDetails.notFoundTitle,
|
|
2559
|
+
description: labels.marketDetails.notFoundDescription,
|
|
2560
|
+
className: "min-h-[280px] md:min-h-[320px]"
|
|
2561
|
+
}
|
|
2562
|
+
) });
|
|
2449
2563
|
}
|
|
2450
|
-
return /* @__PURE__ */ jsx4(
|
|
2451
|
-
|
|
2452
|
-
|
|
2453
|
-
|
|
2454
|
-
|
|
2455
|
-
|
|
2456
|
-
|
|
2457
|
-
|
|
2564
|
+
return /* @__PURE__ */ jsx4("div", { className: cn("flex flex-col gap-3", classNames == null ? void 0 : classNames.root), "aria-label": ariaLabel, children: markets.map((market) => /* @__PURE__ */ jsx4(
|
|
2565
|
+
MarketDetails,
|
|
2566
|
+
{
|
|
2567
|
+
venueMarkets: [market],
|
|
2568
|
+
isOpened: resolvedExpandedId === market.id,
|
|
2569
|
+
onOpenChange: (nextIsOpened) => handleToggle(market.id, nextIsOpened),
|
|
2570
|
+
defaultTab,
|
|
2571
|
+
defaultTimeRange,
|
|
2572
|
+
ariaLabel: market.question,
|
|
2573
|
+
classNames: { root: classNames == null ? void 0 : classNames.item }
|
|
2574
|
+
},
|
|
2575
|
+
market.id
|
|
2576
|
+
)) });
|
|
2458
2577
|
};
|
|
2459
|
-
|
|
2578
|
+
MarketDetailsList.displayName = "MarketDetailsList";
|
|
2460
2579
|
|
|
2461
2580
|
// src/events/list/index.tsx
|
|
2462
2581
|
import { useCallback, useEffect as useEffect3, useMemo as useMemo5, useRef, useState as useState3 } from "react";
|
|
@@ -2555,11 +2674,11 @@ var estimateTabsWidth = (items) => {
|
|
|
2555
2674
|
var EventList = ({
|
|
2556
2675
|
title,
|
|
2557
2676
|
maxItemsPerRow = 3,
|
|
2558
|
-
limit =
|
|
2677
|
+
limit = 9,
|
|
2559
2678
|
maxVisibleItems,
|
|
2560
|
-
showVenueLogo = true,
|
|
2561
2679
|
search,
|
|
2562
|
-
categoryIds
|
|
2680
|
+
categoryIds,
|
|
2681
|
+
onClick
|
|
2563
2682
|
}) => {
|
|
2564
2683
|
var _a, _b;
|
|
2565
2684
|
const labels = useLabels5();
|
|
@@ -2714,10 +2833,10 @@ var EventList = ({
|
|
|
2714
2833
|
EventListItem,
|
|
2715
2834
|
{
|
|
2716
2835
|
event,
|
|
2717
|
-
showVenueLogo,
|
|
2718
2836
|
classNames: {
|
|
2719
2837
|
root: "w-full min-w-0 max-w-none"
|
|
2720
|
-
}
|
|
2838
|
+
},
|
|
2839
|
+
onClick
|
|
2721
2840
|
},
|
|
2722
2841
|
event.id
|
|
2723
2842
|
)),
|
|
@@ -2759,5 +2878,6 @@ export {
|
|
|
2759
2878
|
EventListItem,
|
|
2760
2879
|
EventListItemDetails,
|
|
2761
2880
|
MarketDetails,
|
|
2881
|
+
MarketDetailsList,
|
|
2762
2882
|
EventList
|
|
2763
2883
|
};
|