@hyperix/hooks 0.3.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/use-trade-history.d.ts +6 -2
- package/dist/use-trade-history.js +28 -16
- package/package.json +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type UseInfiniteQueryOptions, type UseInfiniteQueryResult } from "@tanstack/react-query";
|
|
2
|
-
import { type UseUserFillsOptions, type UserFill } from "./use-user-fills.js";
|
|
2
|
+
import { type UserFillsData, type UseUserFillsOptions, type UserFill } from "./use-user-fills.js";
|
|
3
3
|
export type TradeHistory = UserFill & {
|
|
4
4
|
displayCoin: string;
|
|
5
5
|
quoteCoin: string;
|
|
@@ -27,6 +27,10 @@ export type InfiniteTradeHistoryPageParam = {
|
|
|
27
27
|
startTime: number;
|
|
28
28
|
endTime: number;
|
|
29
29
|
};
|
|
30
|
+
type RawTradeHistoryPage = UserFillsData & {
|
|
31
|
+
startTime: number;
|
|
32
|
+
endTime: number;
|
|
33
|
+
};
|
|
30
34
|
type InfiniteTradeHistoryQueryKey = [
|
|
31
35
|
"infinite-trade-history",
|
|
32
36
|
`0x${string}`,
|
|
@@ -34,7 +38,7 @@ type InfiniteTradeHistoryQueryKey = [
|
|
|
34
38
|
number,
|
|
35
39
|
number | undefined
|
|
36
40
|
];
|
|
37
|
-
export type UseInfiniteTradeHistoryOptions = Omit<UseInfiniteQueryOptions<
|
|
41
|
+
export type UseInfiniteTradeHistoryOptions = Omit<UseInfiniteQueryOptions<RawTradeHistoryPage, Error, InfiniteTradeHistoryData, InfiniteTradeHistoryQueryKey, InfiniteTradeHistoryPageParam>, "queryKey" | "queryFn" | "initialPageParam" | "getNextPageParam" | "select"> & {
|
|
38
42
|
aggregateByTime?: boolean;
|
|
39
43
|
endTime?: number;
|
|
40
44
|
pageDurationMs?: number;
|
|
@@ -8,6 +8,14 @@ const DEFAULT_TRADE_HISTORY_PAGE_DURATION_MS = 7 * 24 * 60 * 60 * 1000;
|
|
|
8
8
|
function getFillKey(fill) {
|
|
9
9
|
return `${fill.hash}-${fill.tid}-${fill.time}`;
|
|
10
10
|
}
|
|
11
|
+
function sortFills(fills) {
|
|
12
|
+
return [...fills].sort((a, b) => {
|
|
13
|
+
if (a.time !== b.time) {
|
|
14
|
+
return b.time - a.time;
|
|
15
|
+
}
|
|
16
|
+
return b.tid - a.tid;
|
|
17
|
+
});
|
|
18
|
+
}
|
|
11
19
|
function formatTradeHistoryFill(fill, spotPair) {
|
|
12
20
|
const price = new Decimal(fill.px);
|
|
13
21
|
if (!spotPair) {
|
|
@@ -44,14 +52,9 @@ function formatTradeHistoryFill(fill, spotPair) {
|
|
|
44
52
|
};
|
|
45
53
|
}
|
|
46
54
|
function sortTradeHistory(fills) {
|
|
47
|
-
return
|
|
48
|
-
if (a.time !== b.time) {
|
|
49
|
-
return b.time - a.time;
|
|
50
|
-
}
|
|
51
|
-
return b.tid - a.tid;
|
|
52
|
-
});
|
|
55
|
+
return sortFills(fills);
|
|
53
56
|
}
|
|
54
|
-
function
|
|
57
|
+
function mergeFills(pages, realtimeFills) {
|
|
55
58
|
const fillsByKey = new Map();
|
|
56
59
|
for (const page of pages) {
|
|
57
60
|
for (const fill of page.fills) {
|
|
@@ -61,7 +64,13 @@ function mergeTradeHistoryFills(pages, realtimeFills) {
|
|
|
61
64
|
for (const fill of realtimeFills) {
|
|
62
65
|
fillsByKey.set(getFillKey(fill), fill);
|
|
63
66
|
}
|
|
64
|
-
return
|
|
67
|
+
return sortFills([...fillsByKey.values()]);
|
|
68
|
+
}
|
|
69
|
+
function formatTradeHistoryPage(page, symbolConverter) {
|
|
70
|
+
return {
|
|
71
|
+
...page,
|
|
72
|
+
fills: sortTradeHistory(page.fills.map((fill) => formatTradeHistoryFill(fill, symbolConverter?.getSpotByPairId(fill.coin)))),
|
|
73
|
+
};
|
|
65
74
|
}
|
|
66
75
|
function flattenTradeHistoryPages(pages) {
|
|
67
76
|
const fills = [];
|
|
@@ -111,16 +120,19 @@ export function useInfiniteTradeHistory(user, options = {}) {
|
|
|
111
120
|
pageDurationMs,
|
|
112
121
|
endTime,
|
|
113
122
|
];
|
|
114
|
-
const selectTradeHistoryData = useMemo(() => (data) =>
|
|
115
|
-
pages
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
123
|
+
const selectTradeHistoryData = useMemo(() => (data) => {
|
|
124
|
+
const pages = data.pages.map((page) => formatTradeHistoryPage(page, symbolConverter));
|
|
125
|
+
return {
|
|
126
|
+
pages,
|
|
127
|
+
user,
|
|
128
|
+
fills: flattenTradeHistoryPages(pages),
|
|
129
|
+
};
|
|
130
|
+
}, [symbolConverter, user]);
|
|
119
131
|
useUserFills(user, {
|
|
120
132
|
aggregateByTime,
|
|
121
133
|
enabled: enabled && realtime,
|
|
122
134
|
onUpdate: (event) => {
|
|
123
|
-
const realtimeFills =
|
|
135
|
+
const realtimeFills = sortFills(event.fills);
|
|
124
136
|
if (realtimeFills.length === 0) {
|
|
125
137
|
return;
|
|
126
138
|
}
|
|
@@ -129,7 +141,7 @@ export function useInfiniteTradeHistory(user, options = {}) {
|
|
|
129
141
|
if (!previousData || !latestPage) {
|
|
130
142
|
return previousData;
|
|
131
143
|
}
|
|
132
|
-
const fills =
|
|
144
|
+
const fills = mergeFills([latestPage], realtimeFills);
|
|
133
145
|
return {
|
|
134
146
|
...previousData,
|
|
135
147
|
pages: [
|
|
@@ -158,7 +170,7 @@ export function useInfiniteTradeHistory(user, options = {}) {
|
|
|
158
170
|
endTime: pageParam.endTime,
|
|
159
171
|
aggregateByTime,
|
|
160
172
|
});
|
|
161
|
-
const fills =
|
|
173
|
+
const fills = sortFills(rawFills);
|
|
162
174
|
if (pageParam.latest) {
|
|
163
175
|
return getLatestPageFromFills(user, fills, pageParam.endTime, pageDurationMs);
|
|
164
176
|
}
|