@hyperix/hooks 0.2.7 → 0.2.9
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 +4 -2
- package/dist/use-trade-history.js +64 -23
- package/package.json +1 -1
|
@@ -27,13 +27,14 @@ export type InfiniteTradeHistoryPageParam = {
|
|
|
27
27
|
startTime: number;
|
|
28
28
|
endTime: number;
|
|
29
29
|
};
|
|
30
|
-
|
|
30
|
+
type InfiniteTradeHistoryQueryKey = [
|
|
31
31
|
"infinite-trade-history",
|
|
32
32
|
`0x${string}`,
|
|
33
33
|
boolean,
|
|
34
34
|
number,
|
|
35
35
|
number | undefined
|
|
36
|
-
]
|
|
36
|
+
];
|
|
37
|
+
export type UseInfiniteTradeHistoryOptions = Omit<UseInfiniteQueryOptions<TradeHistoryPage, Error, InfiniteTradeHistoryData, InfiniteTradeHistoryQueryKey, InfiniteTradeHistoryPageParam>, "queryKey" | "queryFn" | "initialPageParam" | "getNextPageParam" | "select"> & {
|
|
37
38
|
aggregateByTime?: boolean;
|
|
38
39
|
endTime?: number;
|
|
39
40
|
pageDurationMs?: number;
|
|
@@ -46,3 +47,4 @@ export declare function useTradeHistory(user: `0x${string}`, options?: UseUserFi
|
|
|
46
47
|
error?: string;
|
|
47
48
|
};
|
|
48
49
|
export declare function useInfiniteTradeHistory(user: `0x${string}`, options?: UseInfiniteTradeHistoryOptions): UseInfiniteQueryResult<InfiniteTradeHistoryData, Error>;
|
|
50
|
+
export {};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { useInfiniteQuery, } from "@tanstack/react-query";
|
|
1
|
+
import { useInfiniteQuery, useQueryClient, } from "@tanstack/react-query";
|
|
2
2
|
import Decimal from "decimal.js";
|
|
3
3
|
import { useMemo } from "react";
|
|
4
4
|
import { infoClient } from "./config/hl.js";
|
|
@@ -63,6 +63,23 @@ function mergeTradeHistoryFills(pages, realtimeFills) {
|
|
|
63
63
|
}
|
|
64
64
|
return sortTradeHistory([...fillsByKey.values()]);
|
|
65
65
|
}
|
|
66
|
+
function flattenTradeHistoryPages(pages) {
|
|
67
|
+
const fills = [];
|
|
68
|
+
for (const page of pages) {
|
|
69
|
+
fills.push(...page.fills);
|
|
70
|
+
}
|
|
71
|
+
return fills;
|
|
72
|
+
}
|
|
73
|
+
function getLatestPageFromFills(user, fills, fallbackEndTime, pageDurationMs) {
|
|
74
|
+
const endTime = fills[0]?.time ?? fallbackEndTime;
|
|
75
|
+
const startTime = Math.max(0, endTime - pageDurationMs);
|
|
76
|
+
return {
|
|
77
|
+
user,
|
|
78
|
+
startTime,
|
|
79
|
+
endTime,
|
|
80
|
+
fills: fills.filter((fill) => fill.time >= startTime && fill.time <= endTime),
|
|
81
|
+
};
|
|
82
|
+
}
|
|
66
83
|
export function useTradeHistory(user, options = {}) {
|
|
67
84
|
const userFillsState = useUserFills(user, options);
|
|
68
85
|
const symbolConverter = useSymbolConverter();
|
|
@@ -83,21 +100,52 @@ export function useTradeHistory(user, options = {}) {
|
|
|
83
100
|
};
|
|
84
101
|
}
|
|
85
102
|
export function useInfiniteTradeHistory(user, options = {}) {
|
|
86
|
-
const { aggregateByTime = true, enabled: enabledOverride, endTime, pageDurationMs = DEFAULT_TRADE_HISTORY_PAGE_DURATION_MS, realtime =
|
|
103
|
+
const { aggregateByTime = true, enabled: enabledOverride, endTime, pageDurationMs = DEFAULT_TRADE_HISTORY_PAGE_DURATION_MS, realtime = false, ...queryOptions } = options;
|
|
87
104
|
const enabled = enabledOverride ?? Boolean(user);
|
|
88
105
|
const symbolConverter = useSymbolConverter();
|
|
89
|
-
const
|
|
106
|
+
const queryClient = useQueryClient();
|
|
107
|
+
const queryKey = [
|
|
108
|
+
"infinite-trade-history",
|
|
109
|
+
user,
|
|
110
|
+
aggregateByTime,
|
|
111
|
+
pageDurationMs,
|
|
112
|
+
endTime,
|
|
113
|
+
];
|
|
114
|
+
const selectTradeHistoryData = useMemo(() => (data) => ({
|
|
115
|
+
pages: data.pages,
|
|
116
|
+
user,
|
|
117
|
+
fills: flattenTradeHistoryPages(data.pages),
|
|
118
|
+
}), [user]);
|
|
119
|
+
useUserFills(user, {
|
|
90
120
|
aggregateByTime,
|
|
91
121
|
enabled: enabled && realtime,
|
|
122
|
+
onUpdate: (event) => {
|
|
123
|
+
const realtimeFills = sortTradeHistory(event.fills.map((fill) => formatTradeHistoryFill(fill, symbolConverter?.getSpotByPairId(fill.coin))));
|
|
124
|
+
if (realtimeFills.length === 0) {
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
queryClient.setQueryData(queryKey, (previousData) => {
|
|
128
|
+
const [latestPage, ...olderPages] = previousData?.pages ?? [];
|
|
129
|
+
if (!previousData || !latestPage) {
|
|
130
|
+
return previousData;
|
|
131
|
+
}
|
|
132
|
+
const fills = mergeTradeHistoryFills([latestPage], realtimeFills);
|
|
133
|
+
return {
|
|
134
|
+
...previousData,
|
|
135
|
+
pages: [
|
|
136
|
+
{
|
|
137
|
+
...latestPage,
|
|
138
|
+
endTime: Math.max(latestPage.endTime, fills[0]?.time ?? 0),
|
|
139
|
+
fills,
|
|
140
|
+
},
|
|
141
|
+
...olderPages,
|
|
142
|
+
],
|
|
143
|
+
};
|
|
144
|
+
});
|
|
145
|
+
},
|
|
92
146
|
});
|
|
93
147
|
return useInfiniteQuery({
|
|
94
|
-
queryKey
|
|
95
|
-
"infinite-trade-history",
|
|
96
|
-
user,
|
|
97
|
-
aggregateByTime,
|
|
98
|
-
pageDurationMs,
|
|
99
|
-
endTime,
|
|
100
|
-
],
|
|
148
|
+
queryKey,
|
|
101
149
|
queryFn: async ({ pageParam }) => {
|
|
102
150
|
const rawFills = pageParam.latest
|
|
103
151
|
? await infoClient.userFills({
|
|
@@ -111,12 +159,13 @@ export function useInfiniteTradeHistory(user, options = {}) {
|
|
|
111
159
|
aggregateByTime,
|
|
112
160
|
});
|
|
113
161
|
const fills = sortTradeHistory(rawFills.map((fill) => formatTradeHistoryFill(fill, symbolConverter?.getSpotByPairId(fill.coin))));
|
|
114
|
-
|
|
115
|
-
|
|
162
|
+
if (pageParam.latest) {
|
|
163
|
+
return getLatestPageFromFills(user, fills, pageParam.endTime, pageDurationMs);
|
|
164
|
+
}
|
|
116
165
|
return {
|
|
117
166
|
user,
|
|
118
|
-
startTime:
|
|
119
|
-
endTime:
|
|
167
|
+
startTime: pageParam.startTime,
|
|
168
|
+
endTime: pageParam.endTime,
|
|
120
169
|
fills,
|
|
121
170
|
};
|
|
122
171
|
},
|
|
@@ -138,15 +187,7 @@ export function useInfiniteTradeHistory(user, options = {}) {
|
|
|
138
187
|
endTime: nextEndTime,
|
|
139
188
|
};
|
|
140
189
|
},
|
|
141
|
-
select:
|
|
142
|
-
const realtimeFills = realtimeState.data?.fills ?? [];
|
|
143
|
-
return {
|
|
144
|
-
pages: data.pages,
|
|
145
|
-
pageParams: data.pageParams,
|
|
146
|
-
user,
|
|
147
|
-
fills: mergeTradeHistoryFills(data.pages, realtimeFills),
|
|
148
|
-
};
|
|
149
|
-
},
|
|
190
|
+
select: selectTradeHistoryData,
|
|
150
191
|
...queryOptions,
|
|
151
192
|
enabled,
|
|
152
193
|
});
|