@orderly.network/hooks 1.1.5-rc.0 → 1.1.6

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.
Files changed (101) hide show
  1. package/esm/dataProvider.d.ts +4 -3
  2. package/esm/dataProvider.d.ts.map +1 -1
  3. package/esm/dataProvider.js +5 -0
  4. package/esm/index.d.ts +4 -1
  5. package/esm/index.d.ts.map +1 -1
  6. package/esm/index.js +2 -0
  7. package/esm/orderly/useMarketsStream.d.ts.map +1 -1
  8. package/esm/orderly/useMarketsStream.js +1 -0
  9. package/esm/orderly/useMaxQty.d.ts.map +1 -1
  10. package/esm/orderly/useMaxQty.js +14 -27
  11. package/esm/orderly/useOrderEntry.js +19 -6
  12. package/esm/orderly/useOrderStream.d.ts +10 -1
  13. package/esm/orderly/useOrderStream.d.ts.map +1 -1
  14. package/esm/orderly/useOrderStream.js +29 -26
  15. package/esm/orderly/useOrderbookStream.d.ts.map +1 -1
  16. package/esm/orderly/useOrderbookStream.js +20 -13
  17. package/esm/orderly/usePositionStream.js +1 -1
  18. package/esm/orderly/usePrivateDataObserver.d.ts.map +1 -1
  19. package/esm/orderly/usePrivateDataObserver.js +62 -42
  20. package/esm/services/painter/backgroundPaint.d.ts +4 -4
  21. package/esm/services/painter/basePaint.d.ts +17 -8
  22. package/esm/services/painter/basePaint.d.ts.map +1 -1
  23. package/esm/services/painter/dataPaint.d.ts +4 -3
  24. package/esm/services/painter/dataPaint.d.ts.map +1 -1
  25. package/esm/services/painter/dataPaint.js +72 -35
  26. package/esm/services/painter/layout.config.d.ts +2 -2
  27. package/esm/services/painter/layout.config.d.ts.map +1 -1
  28. package/esm/services/painter/layout.config.js +13 -8
  29. package/esm/services/painter/painter.d.ts +6 -4
  30. package/esm/services/painter/painter.d.ts.map +1 -1
  31. package/esm/services/painter/painter.js +4 -4
  32. package/esm/unuse/apiPrefixMiddleware.d.ts.map +1 -1
  33. package/esm/unuse/apiPrefixMiddleware.js +0 -2
  34. package/esm/useLocalStorage.d.ts.map +1 -1
  35. package/esm/useLocalStorage.js +2 -4
  36. package/esm/useMutation.d.ts +4 -1
  37. package/esm/useMutation.d.ts.map +1 -1
  38. package/esm/useMutation.js +29 -2
  39. package/esm/usePoster.d.ts +30 -4
  40. package/esm/usePoster.d.ts.map +1 -1
  41. package/esm/usePoster.js +95 -24
  42. package/esm/utils/dev.d.ts +2 -0
  43. package/esm/utils/dev.d.ts.map +1 -0
  44. package/esm/utils/dev.js +18 -0
  45. package/esm/utils/swr.d.ts +10 -0
  46. package/esm/utils/swr.d.ts.map +1 -0
  47. package/esm/utils/swr.js +195 -0
  48. package/esm/version.d.ts +1 -1
  49. package/esm/version.d.ts.map +1 -1
  50. package/esm/version.js +2 -2
  51. package/lib/dataProvider.d.ts +4 -3
  52. package/lib/dataProvider.d.ts.map +1 -1
  53. package/lib/dataProvider.js +5 -0
  54. package/lib/index.d.ts +4 -1
  55. package/lib/index.d.ts.map +1 -1
  56. package/lib/index.js +4 -1
  57. package/lib/orderly/useMarketsStream.d.ts.map +1 -1
  58. package/lib/orderly/useMarketsStream.js +1 -0
  59. package/lib/orderly/useMaxQty.d.ts.map +1 -1
  60. package/lib/orderly/useMaxQty.js +14 -27
  61. package/lib/orderly/useOrderEntry.js +16 -3
  62. package/lib/orderly/useOrderStream.d.ts +10 -1
  63. package/lib/orderly/useOrderStream.d.ts.map +1 -1
  64. package/lib/orderly/useOrderStream.js +29 -26
  65. package/lib/orderly/useOrderbookStream.d.ts.map +1 -1
  66. package/lib/orderly/useOrderbookStream.js +20 -13
  67. package/lib/orderly/usePositionStream.js +1 -1
  68. package/lib/orderly/usePrivateDataObserver.d.ts.map +1 -1
  69. package/lib/orderly/usePrivateDataObserver.js +61 -41
  70. package/lib/services/painter/backgroundPaint.d.ts +4 -4
  71. package/lib/services/painter/basePaint.d.ts +17 -8
  72. package/lib/services/painter/basePaint.d.ts.map +1 -1
  73. package/lib/services/painter/dataPaint.d.ts +4 -3
  74. package/lib/services/painter/dataPaint.d.ts.map +1 -1
  75. package/lib/services/painter/dataPaint.js +72 -35
  76. package/lib/services/painter/layout.config.d.ts +2 -2
  77. package/lib/services/painter/layout.config.d.ts.map +1 -1
  78. package/lib/services/painter/layout.config.js +14 -9
  79. package/lib/services/painter/painter.d.ts +6 -4
  80. package/lib/services/painter/painter.d.ts.map +1 -1
  81. package/lib/services/painter/painter.js +4 -4
  82. package/lib/unuse/apiPrefixMiddleware.d.ts.map +1 -1
  83. package/lib/unuse/apiPrefixMiddleware.js +0 -2
  84. package/lib/useLocalStorage.d.ts.map +1 -1
  85. package/lib/useLocalStorage.js +2 -4
  86. package/lib/useMutation.d.ts +4 -1
  87. package/lib/useMutation.d.ts.map +1 -1
  88. package/lib/useMutation.js +29 -2
  89. package/lib/usePoster.d.ts +30 -4
  90. package/lib/usePoster.d.ts.map +1 -1
  91. package/lib/usePoster.js +93 -22
  92. package/lib/utils/dev.d.ts +2 -0
  93. package/lib/utils/dev.d.ts.map +1 -0
  94. package/lib/utils/dev.js +20 -0
  95. package/lib/utils/swr.d.ts +10 -0
  96. package/lib/utils/swr.d.ts.map +1 -0
  97. package/lib/utils/swr.js +200 -0
  98. package/lib/version.d.ts +1 -1
  99. package/lib/version.d.ts.map +1 -1
  100. package/lib/version.js +2 -2
  101. package/package.json +8 -8
@@ -11,40 +11,32 @@ const useMarkPricesStream_1 = require("./useMarkPricesStream");
11
11
  const useMutation_1 = require("../useMutation");
12
12
  const version_1 = __importDefault(require("../version"));
13
13
  const dataProvider_1 = require("../dataProvider");
14
- const useOrderStream = (params) => {
14
+ const swr_1 = require("../utils/swr");
15
+ const useEventEmitter_1 = require("../useEventEmitter");
16
+ const useOrderStream = (
17
+ /**
18
+ * Orders query params
19
+ */
20
+ params, options) => {
15
21
  const { status, symbol, side, size = 100 } = params;
16
22
  const { data: markPrices = {} } = (0, useMarkPricesStream_1.useMarkPricesStream)();
17
- const { regesterKeyHandler } = (0, dataProvider_1.useDataCenterContext)();
23
+ const ee = (0, useEventEmitter_1.useEventEmitter)();
24
+ const { regesterKeyHandler, unregisterKeyHandler } = (0, dataProvider_1.useDataCenterContext)();
18
25
  const [doCancelOrder, { error: cancelOrderError, isMutating: cancelMutating },] = (0, useMutation_1.useMutation)("/v1/order", "DELETE");
19
26
  const [doUpdateOrder, { error: updateOrderError, isMutating: updateMutating },] = (0, useMutation_1.useMutation)("/v1/order", "PUT");
20
27
  const [doCanceAlgolOrder, { error: cancelAlgoOrderError, isMutating: cancelAlgoMutating },] = (0, useMutation_1.useMutation)("/v1/algo/order", "DELETE");
21
28
  const [doUpdateAlgoOrder, { error: updateAlgoOrderError, isMutating: updateAlgoMutating },] = (0, useMutation_1.useMutation)("/v1/algo/order", "PUT");
22
- const getKey = (pageIndex, previousPageData) => {
23
- // reached the end
24
- if (previousPageData && !previousPageData.rows?.length)
25
- return null;
26
- const search = new URLSearchParams([
27
- ["size", size.toString()],
28
- ["page", `${pageIndex + 1}`],
29
- ["source_type", "ALL"],
30
- ]);
31
- if (status) {
32
- search.set(`status`, status);
33
- }
34
- if (symbol) {
35
- search.set(`symbol`, symbol);
36
- }
37
- if (side) {
38
- search.set(`side`, side);
39
- }
40
- return `/v1/orders?${search.toString()}`;
41
- };
42
29
  (0, react_1.useEffect)(() => {
43
30
  const formatKey = (value) => (value ? `:${value}` : "");
44
31
  const key = `orders${formatKey(status)}${formatKey(symbol)}${formatKey(side)}`;
45
- regesterKeyHandler(key, getKey);
46
- }, [status, symbol, side]);
47
- const ordersResponse = (0, usePrivateInfiniteQuery_1.usePrivateInfiniteQuery)(getKey, {
32
+ regesterKeyHandler?.(key, (0, swr_1.generateKeyFun)({ status, symbol, side, size }));
33
+ return () => {
34
+ if (!options?.stopOnUnmount)
35
+ return;
36
+ unregisterKeyHandler(key);
37
+ };
38
+ }, [status, symbol, side, options?.keeplive]);
39
+ const ordersResponse = (0, usePrivateInfiniteQuery_1.usePrivateInfiniteQuery)((0, swr_1.generateKeyFun)({ status, symbol, side, size }), {
48
40
  initialSize: 1,
49
41
  // revalidateFirstPage: false,
50
42
  // onError: (err) => {
@@ -59,6 +51,7 @@ const useOrderStream = (params) => {
59
51
  }
60
52
  return ordersResponse.data?.map((item) => item.rows)?.flat();
61
53
  }, [ordersResponse.data]);
54
+ // console.log(ordersResponse.data);
62
55
  const orders = (0, react_1.useMemo)(() => {
63
56
  if (!flattenOrders) {
64
57
  return null;
@@ -103,7 +96,17 @@ const useOrderStream = (params) => {
103
96
  * update algo order
104
97
  */
105
98
  const updateAlgoOrder = (0, react_1.useCallback)((orderId, order) => {
106
- return _updateOrder(orderId, order, "algoOrder");
99
+ return _updateOrder(orderId, order, "algoOrder").then((res) => {
100
+ // TODO: remove this when the WS service provides the correct data
101
+ ee.emit("algoOrder:cache", {
102
+ // ...res.data.rows[0],
103
+ ...order,
104
+ order_id: Number(orderId),
105
+ // trigger_price: price,
106
+ });
107
+ //------------fix end----------------
108
+ return res;
109
+ });
107
110
  }, []);
108
111
  const _cancelOrder = (0, react_1.useCallback)((orderId, type, symbol) => {
109
112
  switch (type) {
@@ -1 +1 @@
1
- {"version":3,"file":"useOrderbookStream.d.ts","sourceRoot":"","sources":["../../src/orderly/useOrderbookStream.ts"],"names":[],"mappings":"AAUA,MAAM,MAAM,aAAa,GAAG,MAAM,EAAE,CAAC;AAErC,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,aAAa,EAAE,CAAC;IACtB,IAAI,EAAE,aAAa,EAAE,CAAC;CACvB,CAAC;AAyFF;;;;;GAKG;AACH,eAAO,MAAM,eAAe,UACnB,MAAM,GAAG,SAAS,SAClB,MAAM,WACJ,OAAO,QACV,aAAa,KAClB,aAqDF,CAAC;AAgCF,eAAO,MAAM,cAAc,SAAU,aAAa,UAAU,aAAa;;;CAWxE,CAAC;AAEF;;;;;GAKG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAIF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,WACrB,MAAM,YACL,aAAa,YACZ,gBAAgB;;;;;;;;;;;2BA2HgB,MAAM;;;;;;;;;IAmDjD,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC"}
1
+ {"version":3,"file":"useOrderbookStream.d.ts","sourceRoot":"","sources":["../../src/orderly/useOrderbookStream.ts"],"names":[],"mappings":"AAUA,MAAM,MAAM,aAAa,GAAG,MAAM,EAAE,CAAC;AAErC,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,aAAa,EAAE,CAAC;IACtB,IAAI,EAAE,aAAa,EAAE,CAAC;CACvB,CAAC;AAyFF;;;;;GAKG;AACH,eAAO,MAAM,eAAe,UACnB,MAAM,GAAG,SAAS,SAClB,MAAM,WACJ,OAAO,QACV,aAAa,KAClB,aAyDF,CAAC;AAgCF,eAAO,MAAM,cAAc,SAAU,aAAa,UAAU,aAAa;;;CAWxE,CAAC;AAEF;;;;;GAKG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAIF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,WACrB,MAAM,YACL,aAAa,YACZ,gBAAgB;;;;;;;;;;;2BAgIgB,MAAM;;;;;;;;;IAmDjD,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC"}
@@ -98,18 +98,22 @@ const reduceOrderbook = (depth, level, padding, data) => {
98
98
  if (askPrice <= bidPrice) {
99
99
  // console.log("xxxxxxxxxxx reset ask list begin", [...asks], { ...asks[0] });
100
100
  asks.shift();
101
- // let logStr = "";
101
+ let logStr = "";
102
102
  for (let index = 0; index < asks.length; index++) {
103
103
  if (index === 0) {
104
104
  const quantity = asks[index][1] + askQty;
105
105
  asks[index][1] = quantity;
106
106
  asks[index][2] = quantity;
107
- asks[index][3] += newAmount;
107
+ // asks[index][3] += newAmount;
108
+ // FIXME: fix this code later
109
+ asks[index][3] = Math.ceil(quantity) * asks[index][0];
108
110
  }
109
111
  else {
110
- asks[index][3] += newAmount;
112
+ // asks[index][3] += newAmount;
113
+ // FIXME: fix this code later
114
+ asks[index][3] = asks[index][0] * asks[index][1] + asks[index - 1][3];
111
115
  }
112
- // logStr += `index: ${index} ${asks[index]}\n`;
116
+ logStr += `index: ${index} ${asks[index]}\n`;
113
117
  }
114
118
  // console.log("xxxxxxxxxxx reset ask list end", logStr);
115
119
  }
@@ -189,6 +193,8 @@ const useOrderbookStream = (symbol, initial = INIT_DATA, options) => {
189
193
  // const [level, setLevel] = useState(() => options?.level ?? 10);
190
194
  const config = (0, useSymbolsInfo_1.useSymbolsInfo)()[symbol];
191
195
  const [depth, setDepth] = (0, react_1.useState)();
196
+ // markPrice, lastPrice
197
+ const prevMiddlePrice = (0, react_1.useRef)(0);
192
198
  const depths = (0, react_1.useMemo)(() => {
193
199
  const tick = config("quote_tick");
194
200
  return [tick, tick * 10, tick * 100, tick * 1000];
@@ -236,6 +242,7 @@ const useOrderbookStream = (symbol, initial = INIT_DATA, options) => {
236
242
  ignore = true;
237
243
  // clean the data;
238
244
  setData(INIT_DATA);
245
+ prevMiddlePrice.current = 0;
239
246
  };
240
247
  }, [symbol]);
241
248
  // const {data:markPrices} = useMarkPricesStream();
@@ -264,6 +271,7 @@ const useOrderbookStream = (symbol, initial = INIT_DATA, options) => {
264
271
  });
265
272
  return () => {
266
273
  ignore = true;
274
+ prevMiddlePrice.current = 0;
267
275
  subscription?.(); //unsubscribe
268
276
  };
269
277
  }, [symbol, requestData]);
@@ -274,12 +282,10 @@ const useOrderbookStream = (symbol, initial = INIT_DATA, options) => {
274
282
  //
275
283
  setDepth(() => depth);
276
284
  }, []);
277
- // markPrice, lastPrice
278
- const prevMiddlePrice = (0, react_1.useRef)(0);
279
285
  const middlePrice = (0, react_1.useMemo)(() => {
280
286
  let asksFrist = 0, bidsFirst = 0;
281
287
  if (data.asks.length > 0) {
282
- asksFrist = data.asks[data.asks.length - 1][0];
288
+ asksFrist = data.asks[0][0];
283
289
  }
284
290
  if (data.bids.length > 0) {
285
291
  bidsFirst = data.bids[0][0];
@@ -287,7 +293,7 @@ const useOrderbookStream = (symbol, initial = INIT_DATA, options) => {
287
293
  if (isNaN(asksFrist) || isNaN(bidsFirst) || !ticker)
288
294
  return 0;
289
295
  return [asksFrist, bidsFirst, ticker["24h_close"]].sort()[1];
290
- }, [ticker, data]);
296
+ }, [ticker?.["24h_close"], data]);
291
297
  (0, react_1.useEffect)(() => {
292
298
  prevMiddlePrice.current = middlePrice;
293
299
  }, [middlePrice]);
@@ -297,11 +303,12 @@ const useOrderbookStream = (symbol, initial = INIT_DATA, options) => {
297
303
  });
298
304
  // emit the asks0 and bids0
299
305
  (0, react_1.useEffect)(() => {
300
- eventEmitter.emit("orderbook:update", [
301
- reducedData.asks?.[0]?.[0],
302
- reducedData.bids?.[0]?.[0],
303
- ]);
304
- }, [reducedData.asks?.[0]?.[0], reducedData.bids?.[0]?.[0]]);
306
+ const updateData = [
307
+ reducedData.asks?.[reducedData.asks.length - 1]?.[0],
308
+ reducedData.bids?.[0]?.[0]
309
+ ];
310
+ eventEmitter.emit("orderbook:update", updateData);
311
+ }, [reducedData.asks?.[reducedData.asks.length - 1]?.[0], reducedData.bids?.[0]?.[0]]);
305
312
  return [
306
313
  {
307
314
  asks: reducedData.asks.slice(-level),
@@ -105,7 +105,7 @@ symbol, options) => {
105
105
  notional,
106
106
  unsettlement_pnl: unsettlementPnL,
107
107
  unrealized_pnl: unrealPnl,
108
- unsettled_pnl_ROI: unrealPnlROI,
108
+ unrealized_pnl_ROI: unrealPnlROI,
109
109
  };
110
110
  });
111
111
  return [
@@ -1 +1 @@
1
- {"version":3,"file":"usePrivateDataObserver.d.ts","sourceRoot":"","sources":["../../src/orderly/usePrivateDataObserver.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGjD,eAAO,MAAM,sBAAsB;uBAEd,MAAM,KAAK,IAAI,MAAM,EAAE,cAAc,CAAC;UAgI1D,CAAC"}
1
+ {"version":3,"file":"usePrivateDataObserver.d.ts","sourceRoot":"","sources":["../../src/orderly/usePrivateDataObserver.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAIjD,eAAO,MAAM,sBAAsB;uBAEd,MAAM,KAAK,IAAI,MAAM,EAAE,cAAc,CAAC;UA4K1D,CAAC"}
@@ -6,39 +6,58 @@ const useWS_1 = require("../useWS");
6
6
  const swr_1 = require("swr");
7
7
  const useAccount_1 = require("../useAccount");
8
8
  const infinite_1 = require("swr/infinite");
9
- const use_debounce_1 = require("use-debounce");
10
9
  const useEventEmitter_1 = require("../useEventEmitter");
11
- const json_1 = require("../utils/json");
10
+ const swr_2 = require("../utils/swr");
12
11
  const usePrivateDataObserver = (options) => {
13
12
  const ws = (0, useWS_1.useWS)();
14
- const { mutate } = (0, swr_1.useSWRConfig)();
13
+ // const { mutate } = useSWRConfig();
15
14
  const ee = (0, useEventEmitter_1.useEventEmitter)();
16
15
  const { state } = (0, useAccount_1.useAccount)();
17
- const updateOrders = (0, use_debounce_1.useDebouncedCallback)((data) => {
16
+ // TODO: remove this when the WS service provides the correct data
17
+ const algoOrderCacheQuneue = (0, react_1.useRef)([]);
18
+ const updateOrders = (data, isAlgoOrder) => {
18
19
  const map = options.getKeysMap("orders");
19
- const orderStatus = getSessionStorage("orderly_order_status", "positions");
20
- map.forEach((getKey, key) => {
21
- if ((orderStatus === "history" && key === "orders") ||
22
- (orderStatus === "positions" && key === "orders:NEW") ||
23
- key.includes("INCOMPLETE") || // always update pending list
24
- key.includes(orderStatus)) {
25
- mutate((0, infinite_1.unstable_serialize)((index, prevData) => [
26
- getKey(index, prevData),
27
- state.accountId,
28
- ]));
20
+ // console.log("$$$$$$$$$$$$", data, algoOrderCacheQuneue.current);
21
+ if (isAlgoOrder) {
22
+ /// TODO: remove this when the WS service provides the correct data
23
+ if (algoOrderCacheQuneue.current.length) {
24
+ const index = algoOrderCacheQuneue.current.findIndex((item) => item.order_id === data.algoOrderId);
25
+ if (index > -1) {
26
+ data = {
27
+ ...data,
28
+ ...algoOrderCacheQuneue.current[index],
29
+ };
30
+ algoOrderCacheQuneue.current.splice(index, 1);
31
+ }
29
32
  }
33
+ }
34
+ map.forEach((getKey, key) => {
35
+ (0, swr_1.mutate)((0, infinite_1.unstable_serialize)((index, prevData) => [
36
+ getKey(index, prevData),
37
+ state.accountId,
38
+ ]), (prevData) => {
39
+ return (0, swr_2.updateOrdersHandler)(key, data, prevData);
40
+ }, {
41
+ revalidate: false,
42
+ });
43
+ });
44
+ // emit events;
45
+ // ee.emit("orders:changed", {
46
+ // ...data,
47
+ // status: data.status || (data as WSMessage.AlgoOrder).algoStatus,
48
+ // });
49
+ ee.emit("orders:changed", {
50
+ ...data,
51
+ status: data.status || data.algoStatus,
30
52
  });
31
- // update the orders history list;
32
- // ee.emit("orders:changed");
33
- }, 500);
53
+ };
34
54
  // orders
35
55
  (0, react_1.useEffect)(() => {
36
56
  if (!state.accountId)
37
57
  return;
38
58
  const unsubscribe = ws.privateSubscribe("executionreport", {
39
59
  onMessage: (data) => {
40
- updateOrders(data);
41
- ee.emit("orders:changed", data);
60
+ updateOrders(data, false);
42
61
  },
43
62
  });
44
63
  return () => unsubscribe?.();
@@ -49,13 +68,18 @@ const usePrivateDataObserver = (options) => {
49
68
  return;
50
69
  const unsubscribe = ws.privateSubscribe("algoexecutionreport", {
51
70
  onMessage: (data) => {
52
- updateOrders(data);
53
- if (Array.isArray(data)) {
54
- data.forEach((item) => ee.emit("orders:changed", { ...item, status: item.algoStatus }));
55
- }
56
- else {
57
- ee.emit("orders:changed", { ...data, status: data.algoStatus });
58
- }
71
+ setTimeout(() => {
72
+ if (Array.isArray(data)) {
73
+ data.forEach((item) => {
74
+ updateOrders(item, true);
75
+ // ee.emit("orders:changed", { ...item, status: item.algoStatus });
76
+ });
77
+ }
78
+ else {
79
+ updateOrders(data, true);
80
+ // ee.emit("orders:changed", { ...data, status: data.algoStatus });
81
+ }
82
+ }, 100);
59
83
  },
60
84
  });
61
85
  return () => unsubscribe?.();
@@ -70,7 +94,7 @@ const usePrivateDataObserver = (options) => {
70
94
  const { positions: nextPostions } = data;
71
95
  // console.log("ws----- positions data-----", data);
72
96
  // updatePositions();
73
- mutate(key, (prevPositions) => {
97
+ (0, swr_1.mutate)(key, (prevPositions) => {
74
98
  // return nextPostions;
75
99
  if (!!prevPositions) {
76
100
  return {
@@ -112,19 +136,15 @@ const usePrivateDataObserver = (options) => {
112
136
  unsubscribe?.();
113
137
  };
114
138
  }, [state.accountId]);
139
+ // cache algo orders
140
+ (0, react_1.useEffect)(() => {
141
+ const handler = (data) => {
142
+ algoOrderCacheQuneue.current.push(data);
143
+ };
144
+ ee.on("algoOrder:cache", handler);
145
+ return () => {
146
+ ee.off("algoOrder:cache", handler);
147
+ };
148
+ }, []);
115
149
  };
116
150
  exports.usePrivateDataObserver = usePrivateDataObserver;
117
- const getSessionStorage = (key, initialValue) => {
118
- // Prevent build error "window is undefined" but keep keep working
119
- if (typeof window === "undefined") {
120
- return initialValue;
121
- }
122
- try {
123
- const item = window.sessionStorage.getItem(key);
124
- return item ? (0, json_1.parseJSON)(item) : initialValue;
125
- }
126
- catch (error) {
127
- console.warn(`Error reading sessionStorage key “${key}”:`, error);
128
- return initialValue;
129
- }
130
- };
@@ -1,9 +1,9 @@
1
- import { BasePaint, type drawOptions } from "./basePaint";
1
+ import { BasePaint, type DrawOptions } from "./basePaint";
2
2
  export declare class BackgroundPaint extends BasePaint {
3
3
  private img;
4
- draw(options: drawOptions): Promise<void>;
5
- _drawColor(options: drawOptions): void;
6
- _drawImage(options: drawOptions): Promise<void>;
4
+ draw(options: DrawOptions): Promise<void>;
5
+ _drawColor(options: DrawOptions): void;
6
+ _drawImage(options: DrawOptions): Promise<void>;
7
7
  private loadImg;
8
8
  }
9
9
  //# sourceMappingURL=backgroundPaint.d.ts.map
@@ -1,5 +1,8 @@
1
1
  import { PosterPainter } from "./painter";
2
2
  export type posterDataSource = {
3
+ /**
4
+ * slogan of the poster
5
+ */
3
6
  message?: string;
4
7
  position: {
5
8
  symbol: string;
@@ -17,7 +20,7 @@ export type posterDataSource = {
17
20
  */
18
21
  ROI: number;
19
22
  /**
20
- * The informations of the position, such as open price, opened at, mark price, quantity
23
+ * The informations of the position, such as open price, opened at, mark price, quantity and custom message.
21
24
  */
22
25
  informations: {
23
26
  title: string;
@@ -51,23 +54,29 @@ export type layoutInfo = {
51
54
  bottom: number;
52
55
  }>;
53
56
  };
54
- export type posterLayoutConfig = {
57
+ export type PosterLayoutConfig = {
55
58
  message?: layoutInfo;
56
59
  domain?: layoutInfo;
57
60
  position?: layoutInfo;
58
- unrealizedPnl?: layoutInfo;
59
- informations?: layoutInfo;
61
+ unrealizedPnl?: layoutInfo & {
62
+ secondaryColor: string;
63
+ secondaryFontSize: number;
64
+ };
65
+ informations?: layoutInfo & {
66
+ labelColor?: string;
67
+ };
60
68
  updateTime?: layoutInfo;
61
69
  };
62
- export type drawOptions = {
70
+ export type DrawOptions = {
63
71
  /**
64
72
  * Color of common text
65
73
  */
66
74
  color?: string;
75
+ fontFamily?: string;
67
76
  /**
68
77
  * Lose color
69
78
  */
70
- loseColor?: string;
79
+ lossColor?: string;
71
80
  /**
72
81
  * Profit color
73
82
  */
@@ -79,12 +88,12 @@ export type drawOptions = {
79
88
  backgroundColor?: string;
80
89
  backgroundImg?: string;
81
90
  data?: posterDataSource;
82
- layout?: posterLayoutConfig;
91
+ layout?: PosterLayoutConfig;
83
92
  };
84
93
  export declare abstract class BasePaint {
85
94
  protected ctx: CanvasRenderingContext2D;
86
95
  protected painter: PosterPainter;
87
96
  constructor(ctx: CanvasRenderingContext2D, painter: PosterPainter);
88
- abstract draw(options: drawOptions): Promise<void>;
97
+ abstract draw(options: DrawOptions): Promise<void>;
89
98
  }
90
99
  //# sourceMappingURL=basePaint.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"basePaint.d.ts","sourceRoot":"","sources":["../../../src/services/painter/basePaint.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE;QACR,MAAM,EAAE,MAAM,CAAC;QAEf,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QACvB;;WAEG;QACH,QAAQ,EAAE,MAAM,CAAC;QACjB;;WAEG;QACH,GAAG,EAAE,MAAM,CAAC;QACZ;;WAEG;QACH,GAAG,EAAE,MAAM,CAAC;QACZ;;WAEG;QACH,YAAY,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,EAAE,CAAC;QACjD;;WAEG;QACH,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAGhB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,YAAY,CAAC,EAAE,kBAAkB,CAAC;IAClC,QAAQ,EAAE,OAAO,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC,CAAC;CACJ,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,CAAC,EAAE,UAAU,CAAC;IAErB,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB,aAAa,CAAC,EAAE,UAAU,CAAC;IAE3B,YAAY,CAAC,EAAE,UAAU,CAAC;IAC1B,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,gBAAgB,CAAC;IACxB,MAAM,CAAC,EAAE,kBAAkB,CAAC;CAC7B,CAAC;AAEF,8BAAsB,SAAS;IAE3B,SAAS,CAAC,GAAG,EAAE,wBAAwB;IACvC,SAAS,CAAC,OAAO,EAAE,aAAa;gBADtB,GAAG,EAAE,wBAAwB,EAC7B,OAAO,EAAE,aAAa;IAElC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;CACnD"}
1
+ {"version":3,"file":"basePaint.d.ts","sourceRoot":"","sources":["../../../src/services/painter/basePaint.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C,MAAM,MAAM,gBAAgB,GAAG;IAC7B;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE;QACR,MAAM,EAAE,MAAM,CAAC;QAEf,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QACvB;;WAEG;QACH,QAAQ,EAAE,MAAM,CAAC;QACjB;;WAEG;QACH,GAAG,EAAE,MAAM,CAAC;QACZ;;WAEG;QACH,GAAG,EAAE,MAAM,CAAC;QACZ;;WAEG;QACH,YAAY,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,EAAE,CAAC;QACjD;;WAEG;QACH,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAGhB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,YAAY,CAAC,EAAE,kBAAkB,CAAC;IAClC,QAAQ,EAAE,OAAO,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC,CAAC;CACJ,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,CAAC,EAAE,UAAU,CAAC;IAErB,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB,aAAa,CAAC,EAAE,UAAU,GAAG;QAC3B,cAAc,EAAE,MAAM,CAAC;QACvB,iBAAiB,EAAE,MAAM,CAAC;KAC3B,CAAC;IAEF,YAAY,CAAC,EAAE,UAAU,GAAG;QAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,gBAAgB,CAAC;IACxB,MAAM,CAAC,EAAE,kBAAkB,CAAC;CAC7B,CAAC;AAEF,8BAAsB,SAAS;IAE3B,SAAS,CAAC,GAAG,EAAE,wBAAwB;IACvC,SAAS,CAAC,OAAO,EAAE,aAAa;gBADtB,GAAG,EAAE,wBAAwB,EAC7B,OAAO,EAAE,aAAa;IAElC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;CACnD"}
@@ -1,9 +1,10 @@
1
- import { BasePaint, drawOptions } from "./basePaint";
1
+ import { BasePaint, DrawOptions } from "./basePaint";
2
2
  export declare class DataPaint extends BasePaint {
3
3
  private positionInfoCellWidth;
4
4
  private DEFAULT_PROFIT_COLOR;
5
- private DEFAULT_LOSE_COLOR;
6
- draw(options: drawOptions): Promise<void>;
5
+ private DEFAULT_LOSS_COLOR;
6
+ private transformTop;
7
+ draw(options: DrawOptions): Promise<void>;
7
8
  private drawMessage;
8
9
  private drawPosition;
9
10
  private drawUnrealizedPnL;
@@ -1 +1 @@
1
- {"version":3,"file":"dataPaint.d.ts","sourceRoot":"","sources":["../../../src/services/painter/dataPaint.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAc,MAAM,aAAa,CAAC;AAGjE,qBAAa,SAAU,SAAQ,SAAS;IACtC,OAAO,CAAC,qBAAqB,CAAO;IAEpC,OAAO,CAAC,oBAAoB,CAAoB;IAChD,OAAO,CAAC,kBAAkB,CAAsB;IAE1C,IAAI,CAAC,OAAO,EAAE,WAAW;IA0B/B,OAAO,CAAC,WAAW;IAiBnB,OAAO,CAAC,YAAY;IAoEpB,OAAO,CAAC,iBAAiB;IAoDzB,OAAO,CAAC,gBAAgB;IA6BxB,OAAO,CAAC,aAAa;IAgBrB,OAAO,CAAC,gBAAgB;IAkBxB,OAAO,CAAC,SAAS;IAoCjB,OAAO,CAAC,MAAM;CAGf"}
1
+ {"version":3,"file":"dataPaint.d.ts","sourceRoot":"","sources":["../../../src/services/painter/dataPaint.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAc,MAAM,aAAa,CAAC;AAGjE,qBAAa,SAAU,SAAQ,SAAS;IACtC,OAAO,CAAC,qBAAqB,CAAO;IAEpC,OAAO,CAAC,oBAAoB,CAAoB;IAChD,OAAO,CAAC,kBAAkB,CAAsB;IAEhD,OAAO,CAAC,YAAY,CAAK;IAEnB,IAAI,CAAC,OAAO,EAAE,WAAW;IAoC/B,OAAO,CAAC,WAAW;IAkBnB,OAAO,CAAC,YAAY;IA2EpB,OAAO,CAAC,iBAAiB;IAyEzB,OAAO,CAAC,gBAAgB;IAoCxB,OAAO,CAAC,aAAa;IAmBrB,OAAO,CAAC,gBAAgB;IAoBxB,OAAO,CAAC,SAAS;IAuCjB,OAAO,CAAC,MAAM;CAGf"}