@hyperix/hooks 0.2.7 → 0.2.8
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 +57 -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,16 @@ function mergeTradeHistoryFills(pages, realtimeFills) {
|
|
|
63
63
|
}
|
|
64
64
|
return sortTradeHistory([...fillsByKey.values()]);
|
|
65
65
|
}
|
|
66
|
+
function getLatestPageFromFills(user, fills, fallbackEndTime, pageDurationMs) {
|
|
67
|
+
const endTime = fills[0]?.time ?? fallbackEndTime;
|
|
68
|
+
const startTime = Math.max(0, endTime - pageDurationMs);
|
|
69
|
+
return {
|
|
70
|
+
user,
|
|
71
|
+
startTime,
|
|
72
|
+
endTime,
|
|
73
|
+
fills: fills.filter((fill) => fill.time >= startTime && fill.time <= endTime),
|
|
74
|
+
};
|
|
75
|
+
}
|
|
66
76
|
export function useTradeHistory(user, options = {}) {
|
|
67
77
|
const userFillsState = useUserFills(user, options);
|
|
68
78
|
const symbolConverter = useSymbolConverter();
|
|
@@ -83,21 +93,52 @@ export function useTradeHistory(user, options = {}) {
|
|
|
83
93
|
};
|
|
84
94
|
}
|
|
85
95
|
export function useInfiniteTradeHistory(user, options = {}) {
|
|
86
|
-
const { aggregateByTime = true, enabled: enabledOverride, endTime, pageDurationMs = DEFAULT_TRADE_HISTORY_PAGE_DURATION_MS, realtime =
|
|
96
|
+
const { aggregateByTime = true, enabled: enabledOverride, endTime, pageDurationMs = DEFAULT_TRADE_HISTORY_PAGE_DURATION_MS, realtime = false, ...queryOptions } = options;
|
|
87
97
|
const enabled = enabledOverride ?? Boolean(user);
|
|
88
98
|
const symbolConverter = useSymbolConverter();
|
|
89
|
-
const
|
|
99
|
+
const queryClient = useQueryClient();
|
|
100
|
+
const queryKey = [
|
|
101
|
+
"infinite-trade-history",
|
|
102
|
+
user,
|
|
103
|
+
aggregateByTime,
|
|
104
|
+
pageDurationMs,
|
|
105
|
+
endTime,
|
|
106
|
+
];
|
|
107
|
+
const selectTradeHistoryData = useMemo(() => (data) => ({
|
|
108
|
+
pages: data.pages,
|
|
109
|
+
user,
|
|
110
|
+
fills: mergeTradeHistoryFills(data.pages, []),
|
|
111
|
+
}), [user]);
|
|
112
|
+
useUserFills(user, {
|
|
90
113
|
aggregateByTime,
|
|
91
114
|
enabled: enabled && realtime,
|
|
115
|
+
onUpdate: (event) => {
|
|
116
|
+
const realtimeFills = sortTradeHistory(event.fills.map((fill) => formatTradeHistoryFill(fill, symbolConverter?.getSpotByPairId(fill.coin))));
|
|
117
|
+
if (realtimeFills.length === 0) {
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
queryClient.setQueryData(queryKey, (previousData) => {
|
|
121
|
+
const [latestPage, ...olderPages] = previousData?.pages ?? [];
|
|
122
|
+
if (!previousData || !latestPage) {
|
|
123
|
+
return previousData;
|
|
124
|
+
}
|
|
125
|
+
const fills = mergeTradeHistoryFills([latestPage], realtimeFills);
|
|
126
|
+
return {
|
|
127
|
+
...previousData,
|
|
128
|
+
pages: [
|
|
129
|
+
{
|
|
130
|
+
...latestPage,
|
|
131
|
+
endTime: Math.max(latestPage.endTime, fills[0]?.time ?? 0),
|
|
132
|
+
fills,
|
|
133
|
+
},
|
|
134
|
+
...olderPages,
|
|
135
|
+
],
|
|
136
|
+
};
|
|
137
|
+
});
|
|
138
|
+
},
|
|
92
139
|
});
|
|
93
140
|
return useInfiniteQuery({
|
|
94
|
-
queryKey
|
|
95
|
-
"infinite-trade-history",
|
|
96
|
-
user,
|
|
97
|
-
aggregateByTime,
|
|
98
|
-
pageDurationMs,
|
|
99
|
-
endTime,
|
|
100
|
-
],
|
|
141
|
+
queryKey,
|
|
101
142
|
queryFn: async ({ pageParam }) => {
|
|
102
143
|
const rawFills = pageParam.latest
|
|
103
144
|
? await infoClient.userFills({
|
|
@@ -111,12 +152,13 @@ export function useInfiniteTradeHistory(user, options = {}) {
|
|
|
111
152
|
aggregateByTime,
|
|
112
153
|
});
|
|
113
154
|
const fills = sortTradeHistory(rawFills.map((fill) => formatTradeHistoryFill(fill, symbolConverter?.getSpotByPairId(fill.coin))));
|
|
114
|
-
|
|
115
|
-
|
|
155
|
+
if (pageParam.latest) {
|
|
156
|
+
return getLatestPageFromFills(user, fills, pageParam.endTime, pageDurationMs);
|
|
157
|
+
}
|
|
116
158
|
return {
|
|
117
159
|
user,
|
|
118
|
-
startTime:
|
|
119
|
-
endTime:
|
|
160
|
+
startTime: pageParam.startTime,
|
|
161
|
+
endTime: pageParam.endTime,
|
|
120
162
|
fills,
|
|
121
163
|
};
|
|
122
164
|
},
|
|
@@ -138,15 +180,7 @@ export function useInfiniteTradeHistory(user, options = {}) {
|
|
|
138
180
|
endTime: nextEndTime,
|
|
139
181
|
};
|
|
140
182
|
},
|
|
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
|
-
},
|
|
183
|
+
select: selectTradeHistoryData,
|
|
150
184
|
...queryOptions,
|
|
151
185
|
enabled,
|
|
152
186
|
});
|