@orderly.network/ui-tpsl 3.0.0-beta.1 → 3.0.0-beta.10
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/index.d.mts +16 -2
- package/dist/index.d.ts +16 -2
- package/dist/index.js +112 -46
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +115 -49
- package/dist/index.mjs.map +1 -1
- package/package.json +10 -10
package/dist/index.mjs
CHANGED
|
@@ -1,26 +1,37 @@
|
|
|
1
1
|
import { SDKError, MarginMode, PositionType, AlgoOrderRootType, OrderType, OrderSide, OrderStatus, AlgoOrderType } from '@orderly.network/types';
|
|
2
|
-
import { Flex, Input, inputFormatter, cn, Slider, Text, registerSimpleSheet, registerSimpleDialog, useScreen, ScrollArea, DotStatus, Grid, Button, ThrottledButton, Divider, Box, toast, TokenIcon,
|
|
2
|
+
import { Flex, Input, inputFormatter, cn, Slider, Text, registerSimpleSheet, registerSimpleDialog, useScreen, ScrollArea, DotStatus, Grid, Button, ThrottledButton, Divider, Box, toast, TokenIcon, modal, SymbolBadge as SymbolBadge$1, Tooltip, ExclamationFillIcon, Select, ChevronDownIcon, Badge, textVariants, Checkbox, SimpleDropdownMenu, CaretDownIcon, useModal } from '@orderly.network/ui';
|
|
3
3
|
import { memo, useRef, useState, useEffect, createContext, useMemo, useContext, Fragment as Fragment$1 } from 'react';
|
|
4
|
-
import { utils, useSymbolsInfo, useAccount, useEventEmitter, useLocalStorage, useMarginModeBySymbol, usePositionStream, useEstLiqPriceBySymbol, useTPSLOrder, useTpslPriceChecker, ERROR_MSG_CODES, useMemoizedFn, useOrderEntry, useGetEstLiqPrice, useOrderStream, useSubAccountAlgoOrderStream, findPositionTPSLFromOrders, useMutation, useMarkPrice, useIndexPrice, useLeverageBySymbol, useMaxQty, findTPSLFromOrder, findTPSLOrderPriceFromOrder } from '@orderly.network/hooks';
|
|
4
|
+
import { utils, useSymbolsInfo, useAccount, useEventEmitter, useLocalStorage, useMarginModeBySymbol, usePositionStream, useEstLiqPriceBySymbol, useTPSLOrder, useTpslPriceChecker, ERROR_MSG_CODES, useMemoizedFn, useOrderEntry, useGetEstLiqPrice, useOrderStream, useSubAccountAlgoOrderStream, findPositionTPSLFromOrders, useMutation, useMarkPrice, useIndexPrice, useLeverageBySymbol, useMaxQty, useBadgeBySymbol, useSymbolWithBroker, findTPSLFromOrder, findTPSLOrderPriceFromOrder } from '@orderly.network/hooks';
|
|
5
5
|
import { useTranslation, i18n, Trans } from '@orderly.network/i18n';
|
|
6
6
|
import { useOrderEntryFormErrorMsg } from '@orderly.network/react-app';
|
|
7
7
|
import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
|
|
8
|
-
import { Decimal, checkIsNaN,
|
|
8
|
+
import { Decimal, checkIsNaN, getTPSLDirection, formatNum, todpIfNeed } from '@orderly.network/utils';
|
|
9
9
|
import { order, positions } from '@orderly.network/perp';
|
|
10
10
|
import { AuthGuardDataTable } from '@orderly.network/ui-connector';
|
|
11
11
|
|
|
12
12
|
// src/editorPopover.tsx
|
|
13
|
+
var SymbolBadge = (props) => {
|
|
14
|
+
const { brokerId, brokerName, brokerNameRaw } = useBadgeBySymbol(
|
|
15
|
+
props.symbol
|
|
16
|
+
);
|
|
17
|
+
const badge = brokerName ?? brokerId ?? void 0;
|
|
18
|
+
return /* @__PURE__ */ jsx(SymbolBadge$1, { badge, fullName: brokerNameRaw });
|
|
19
|
+
};
|
|
20
|
+
var LIQ_DISTANCE_THRESHOLD = 10;
|
|
13
21
|
var OrderInfo = (props) => {
|
|
14
22
|
const { t } = useTranslation();
|
|
15
23
|
const { order: order2, symbolLeverage } = props;
|
|
16
24
|
const { symbol } = order2;
|
|
17
25
|
const markPrice = useMarkPrice(symbol);
|
|
18
26
|
const indexPrice = useIndexPrice(symbol);
|
|
27
|
+
const marginModeLabel = props.marginMode === MarginMode.ISOLATED ? t("marginMode.isolated") : props.marginMode === MarginMode.CROSS ? t("marginMode.cross") : void 0;
|
|
19
28
|
const leverage = useLeverageBySymbol(
|
|
20
29
|
symbolLeverage ? void 0 : symbol,
|
|
21
30
|
props.marginMode
|
|
22
31
|
);
|
|
23
32
|
const currentLeverage = symbolLeverage || leverage;
|
|
33
|
+
const markPriceValue = markPrice?.data;
|
|
34
|
+
const estLiqPrice = props.estLiqPrice === 0 || !markPriceValue || markPriceValue === 0 || Math.abs((props.estLiqPrice ?? 0) - markPriceValue) / markPriceValue >= LIQ_DISTANCE_THRESHOLD ? "--" : props.estLiqPrice ?? "--";
|
|
24
35
|
return /* @__PURE__ */ jsxs(
|
|
25
36
|
Flex,
|
|
26
37
|
{
|
|
@@ -44,20 +55,21 @@ var OrderInfo = (props) => {
|
|
|
44
55
|
{
|
|
45
56
|
className: "oui-whitespace-nowrap oui-break-normal",
|
|
46
57
|
rule: "symbol",
|
|
47
|
-
formatString: "base
|
|
58
|
+
formatString: "base",
|
|
48
59
|
size: "sm",
|
|
49
60
|
weight: "semibold",
|
|
50
61
|
intensity: 98,
|
|
62
|
+
suffix: /* @__PURE__ */ jsx(SymbolBadge, { symbol: symbol ?? "" }),
|
|
51
63
|
children: symbol
|
|
52
64
|
}
|
|
53
65
|
)
|
|
54
66
|
] }),
|
|
55
|
-
|
|
67
|
+
marginModeLabel && /* @__PURE__ */ jsx(
|
|
56
68
|
Text,
|
|
57
69
|
{
|
|
58
70
|
size: "2xs",
|
|
59
71
|
className: "oui-h-[18px] oui-rounded oui-bg-base-7 oui-px-2 oui-font-semibold oui-text-base-contrast-36",
|
|
60
|
-
children:
|
|
72
|
+
children: marginModeLabel
|
|
61
73
|
}
|
|
62
74
|
),
|
|
63
75
|
/* @__PURE__ */ jsxs(
|
|
@@ -143,7 +155,7 @@ var OrderInfo = (props) => {
|
|
|
143
155
|
className: "oui-text-warning",
|
|
144
156
|
size: "2xs",
|
|
145
157
|
dp: props.quoteDP ?? 2,
|
|
146
|
-
children:
|
|
158
|
+
children: estLiqPrice
|
|
147
159
|
}
|
|
148
160
|
)
|
|
149
161
|
] })
|
|
@@ -253,6 +265,7 @@ var useTPSLInputRowScript = (props) => {
|
|
|
253
265
|
});
|
|
254
266
|
return roi2 * 100;
|
|
255
267
|
} catch (error) {
|
|
268
|
+
console.error("error", error);
|
|
256
269
|
return null;
|
|
257
270
|
}
|
|
258
271
|
}, [values, leverage, rootOrderPrice, type, side]);
|
|
@@ -275,6 +288,10 @@ var usePNLInputBuilder = (props) => {
|
|
|
275
288
|
return `${type.toLowerCase()}_offset`;
|
|
276
289
|
case "Offset%" /* PERCENTAGE */:
|
|
277
290
|
return `${type.toLowerCase()}_offset_percentage`;
|
|
291
|
+
case "OffsetFromMark" /* OFFSET_FROM_MARK */:
|
|
292
|
+
return `${type.toLowerCase()}_offset_from_mark`;
|
|
293
|
+
case "PercentageFromMark" /* PERCENTAGE_FROM_MARK */:
|
|
294
|
+
return `${type.toLowerCase()}_offset_percentage_from_mark`;
|
|
278
295
|
default:
|
|
279
296
|
return `${type.toLowerCase()}_pnl`;
|
|
280
297
|
}
|
|
@@ -292,15 +309,34 @@ var usePNLInputBuilder = (props) => {
|
|
|
292
309
|
{
|
|
293
310
|
label: t("tpsl.offset"),
|
|
294
311
|
value: "Offset" /* OFFSET */,
|
|
295
|
-
testId: `${"Offset" /* OFFSET */}
|
|
312
|
+
testId: `${"Offset" /* OFFSET */}_menu_item`
|
|
296
313
|
},
|
|
297
314
|
{
|
|
298
|
-
label:
|
|
315
|
+
label: t("tpsl.offsetPercent"),
|
|
299
316
|
value: "Offset%" /* PERCENTAGE */,
|
|
300
317
|
testId: `${"Offset%" /* PERCENTAGE */}_menu_item`
|
|
318
|
+
},
|
|
319
|
+
{
|
|
320
|
+
label: t("tpsl.offsetMark"),
|
|
321
|
+
value: "OffsetFromMark" /* OFFSET_FROM_MARK */,
|
|
322
|
+
testId: `${"OffsetFromMark" /* OFFSET_FROM_MARK */}_menu_item`
|
|
323
|
+
},
|
|
324
|
+
{
|
|
325
|
+
label: t("tpsl.offsetPercentMark"),
|
|
326
|
+
value: "PercentageFromMark" /* PERCENTAGE_FROM_MARK */,
|
|
327
|
+
testId: `${"PercentageFromMark" /* PERCENTAGE_FROM_MARK */}_menu_item`
|
|
301
328
|
}
|
|
302
329
|
];
|
|
303
330
|
}, [t]);
|
|
331
|
+
const modeLabelMap = useMemo(() => {
|
|
332
|
+
return {
|
|
333
|
+
["PnL" /* PnL */]: t("tpsl.pnl"),
|
|
334
|
+
["Offset" /* OFFSET */]: t("tpsl.offsetHolder"),
|
|
335
|
+
["Offset%" /* PERCENTAGE */]: t("tpsl.offsetHolder"),
|
|
336
|
+
["OffsetFromMark" /* OFFSET_FROM_MARK */]: t("tpsl.offsetHolder"),
|
|
337
|
+
["PercentageFromMark" /* PERCENTAGE_FROM_MARK */]: t("tpsl.offsetHolder")
|
|
338
|
+
};
|
|
339
|
+
}, [t]);
|
|
304
340
|
const percentageSuffix = useRef("");
|
|
305
341
|
const onValueChange = (value2) => {
|
|
306
342
|
props.onChange(key, value2);
|
|
@@ -311,7 +347,7 @@ var usePNLInputBuilder = (props) => {
|
|
|
311
347
|
onRenderBefore: (value2, options2) => {
|
|
312
348
|
value2 = `${value2}`;
|
|
313
349
|
if (value2 === "" || value2 === "-") return "";
|
|
314
|
-
if (mode === "Offset%" /* PERCENTAGE */) {
|
|
350
|
+
if (mode === "Offset%" /* PERCENTAGE */ || mode === "PercentageFromMark" /* PERCENTAGE_FROM_MARK */) {
|
|
315
351
|
try {
|
|
316
352
|
return `${new Decimal(
|
|
317
353
|
value2.replace(
|
|
@@ -322,7 +358,7 @@ var usePNLInputBuilder = (props) => {
|
|
|
322
358
|
} catch {
|
|
323
359
|
return "";
|
|
324
360
|
}
|
|
325
|
-
} else if (mode === "Offset" /* OFFSET */) {
|
|
361
|
+
} else if (mode === "Offset" /* OFFSET */ || mode === "OffsetFromMark" /* OFFSET_FROM_MARK */) {
|
|
326
362
|
value2 = todpIfNeed(value2, dp);
|
|
327
363
|
} else ;
|
|
328
364
|
return `${value2}`;
|
|
@@ -331,7 +367,7 @@ var usePNLInputBuilder = (props) => {
|
|
|
331
367
|
if (/^\-?0{2,}$/.test(value2)) {
|
|
332
368
|
return "0";
|
|
333
369
|
}
|
|
334
|
-
if (mode === "Offset%" /* PERCENTAGE */) {
|
|
370
|
+
if (mode === "Offset%" /* PERCENTAGE */ || mode === "PercentageFromMark" /* PERCENTAGE_FROM_MARK */) {
|
|
335
371
|
if (value2 !== "") {
|
|
336
372
|
value2 = todpIfNeed(value2, 2);
|
|
337
373
|
const endStr = value2.match(/\.0{0,2}$/);
|
|
@@ -360,6 +396,7 @@ var usePNLInputBuilder = (props) => {
|
|
|
360
396
|
return {
|
|
361
397
|
mode,
|
|
362
398
|
modes,
|
|
399
|
+
modeLabelMap,
|
|
363
400
|
type: props.type,
|
|
364
401
|
formatter,
|
|
365
402
|
onModeChange: (mode2) => {
|
|
@@ -376,6 +413,7 @@ var PNLInput = (props) => {
|
|
|
376
413
|
const {
|
|
377
414
|
mode,
|
|
378
415
|
modes,
|
|
416
|
+
modeLabelMap,
|
|
379
417
|
onModeChange,
|
|
380
418
|
onValueChange,
|
|
381
419
|
quote,
|
|
@@ -383,26 +421,19 @@ var PNLInput = (props) => {
|
|
|
383
421
|
value,
|
|
384
422
|
pnl
|
|
385
423
|
} = props;
|
|
386
|
-
const
|
|
387
|
-
const [prefix, setPrefix] = useState(mode);
|
|
388
|
-
const [placeholder, setPlaceholder] = useState(
|
|
389
|
-
mode === "Offset%" /* PERCENTAGE */ ? "%" : quote
|
|
390
|
-
);
|
|
424
|
+
const [isInputFocused, setIsInputFocused] = useState(false);
|
|
391
425
|
const color = useMemo(() => {
|
|
392
426
|
const num = Number(pnl);
|
|
393
427
|
if (isNaN(num) || num === 0) return "";
|
|
394
428
|
if (num > 0) return "oui-text-trade-profit";
|
|
395
429
|
if (num < 0) return "oui-text-trade-loss";
|
|
396
430
|
}, [pnl]);
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
setPrefix(label);
|
|
400
|
-
setPlaceholder(mode === "Offset%" /* PERCENTAGE */ ? "%" : quote);
|
|
401
|
-
}, [mode, modes]);
|
|
431
|
+
const prefixLabel = String(modeLabelMap[mode] ?? mode ?? "");
|
|
432
|
+
const placeholder = isInputFocused ? "" : mode === "Offset%" /* PERCENTAGE */ || mode === "PercentageFromMark" /* PERCENTAGE_FROM_MARK */ ? "%" : quote;
|
|
402
433
|
return /* @__PURE__ */ jsx(
|
|
403
434
|
Input,
|
|
404
435
|
{
|
|
405
|
-
prefix,
|
|
436
|
+
prefix: prefixLabel,
|
|
406
437
|
size: {
|
|
407
438
|
initial: "lg",
|
|
408
439
|
lg: "md"
|
|
@@ -425,15 +456,15 @@ var PNLInput = (props) => {
|
|
|
425
456
|
root: "oui-outline-line-12 focus-within:oui-outline-primary-light"
|
|
426
457
|
},
|
|
427
458
|
onFocus: () => {
|
|
428
|
-
|
|
459
|
+
setIsInputFocused(true);
|
|
429
460
|
props.setFocus(true);
|
|
430
461
|
},
|
|
431
462
|
onBlur: () => {
|
|
432
|
-
|
|
463
|
+
setIsInputFocused(false);
|
|
433
464
|
props.setFocus(false);
|
|
434
465
|
},
|
|
435
466
|
suffix: /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
436
|
-
mode === "Offset%" /* PERCENTAGE */ && !!value && /* @__PURE__ */ jsx(
|
|
467
|
+
(mode === "Offset%" /* PERCENTAGE */ || mode === "PercentageFromMark" /* PERCENTAGE_FROM_MARK */) && !!value && /* @__PURE__ */ jsx(
|
|
437
468
|
Text,
|
|
438
469
|
{
|
|
439
470
|
size: "2xs",
|
|
@@ -462,7 +493,7 @@ var PNLMenus = (props) => {
|
|
|
462
493
|
menu: props.modes,
|
|
463
494
|
align: "end",
|
|
464
495
|
size: "xs",
|
|
465
|
-
className: "oui-min-w-[
|
|
496
|
+
className: "oui-min-w-[120px]",
|
|
466
497
|
onSelect: (item) => props.onModeChange(item),
|
|
467
498
|
children: /* @__PURE__ */ jsx("button", { className: "oui-p-2", children: /* @__PURE__ */ jsx(CaretDownIcon, { size: 12, color: "white" }) })
|
|
468
499
|
}
|
|
@@ -829,10 +860,10 @@ var TPSLQuantity = memo((props) => {
|
|
|
829
860
|
tooltip: errorMsg,
|
|
830
861
|
color: errorMsg ? "danger" : void 0,
|
|
831
862
|
formatters: [
|
|
863
|
+
inputFormatter.decimalPointFormatter,
|
|
832
864
|
inputFormatter.dpFormatter(props.base_dp),
|
|
833
865
|
inputFormatter.numberFormatter,
|
|
834
|
-
inputFormatter.currencyFormatter
|
|
835
|
-
inputFormatter.decimalPointFormatter
|
|
866
|
+
inputFormatter.currencyFormatter
|
|
836
867
|
],
|
|
837
868
|
onValueChange: (value) => {
|
|
838
869
|
props.onQuantityChange?.(value);
|
|
@@ -1015,6 +1046,8 @@ var TPSL = (props) => {
|
|
|
1015
1046
|
PnL: TPSL_OrderEntity.tp_pnl?.toString() ?? void 0,
|
|
1016
1047
|
Offset: TPSL_OrderEntity.tp_offset?.toString() ?? void 0,
|
|
1017
1048
|
"Offset%": TPSL_OrderEntity.tp_offset_percentage?.toString() ?? void 0,
|
|
1049
|
+
OffsetFromMark: TPSL_OrderEntity.tp_offset_from_mark?.toString() ?? void 0,
|
|
1050
|
+
PercentageFromMark: TPSL_OrderEntity.tp_offset_percentage_from_mark?.toString() ?? void 0,
|
|
1018
1051
|
order_price: TPSL_OrderEntity.tp_order_price?.toString() ?? void 0,
|
|
1019
1052
|
order_type: TPSL_OrderEntity.tp_order_type ?? OrderType.MARKET
|
|
1020
1053
|
},
|
|
@@ -1052,6 +1085,8 @@ var TPSL = (props) => {
|
|
|
1052
1085
|
PnL: TPSL_OrderEntity.sl_pnl?.toString() ?? void 0,
|
|
1053
1086
|
Offset: TPSL_OrderEntity.sl_offset?.toString() ?? void 0,
|
|
1054
1087
|
"Offset%": TPSL_OrderEntity.sl_offset_percentage?.toString() ?? void 0,
|
|
1088
|
+
OffsetFromMark: TPSL_OrderEntity.sl_offset_from_mark?.toString() ?? void 0,
|
|
1089
|
+
PercentageFromMark: TPSL_OrderEntity.sl_offset_percentage_from_mark?.toString() ?? void 0,
|
|
1055
1090
|
order_price: TPSL_OrderEntity.sl_order_price?.toString() ?? void 0,
|
|
1056
1091
|
order_type: TPSL_OrderEntity.sl_order_type ?? OrderType.MARKET
|
|
1057
1092
|
},
|
|
@@ -1104,6 +1139,7 @@ var TPSL = (props) => {
|
|
|
1104
1139
|
props.close?.();
|
|
1105
1140
|
onComplete?.();
|
|
1106
1141
|
}).catch((err) => {
|
|
1142
|
+
console.log("--->>>cancel order", err);
|
|
1107
1143
|
});
|
|
1108
1144
|
},
|
|
1109
1145
|
children: t("common.confirm")
|
|
@@ -1182,21 +1218,25 @@ var PositionTPSLConfirm = (props) => {
|
|
|
1182
1218
|
);
|
|
1183
1219
|
};
|
|
1184
1220
|
const isPositionTPSL = _isPositionTPSL;
|
|
1221
|
+
const displaySymbol = useSymbolWithBroker(symbol);
|
|
1185
1222
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
1186
|
-
isEditing && /* @__PURE__ */ jsx(Text, { as: "div", size: "2xs", intensity: 80, className: "oui-mb-3", children: t("tpsl.agreement", { symbol:
|
|
1223
|
+
isEditing && /* @__PURE__ */ jsx(Text, { as: "div", size: "2xs", intensity: 80, className: "oui-mb-3", children: t("tpsl.agreement", { symbol: displaySymbol }) }),
|
|
1187
1224
|
/* @__PURE__ */ jsxs(Flex, { pb: 4, children: [
|
|
1188
|
-
/* @__PURE__ */
|
|
1189
|
-
|
|
1190
|
-
|
|
1191
|
-
|
|
1192
|
-
|
|
1193
|
-
|
|
1194
|
-
|
|
1195
|
-
|
|
1196
|
-
|
|
1197
|
-
|
|
1198
|
-
|
|
1199
|
-
|
|
1225
|
+
/* @__PURE__ */ jsxs(Flex, { direction: "column", itemAlign: "start", gap: 1, grow: true, children: [
|
|
1226
|
+
/* @__PURE__ */ jsx(Box, { grow: true, children: /* @__PURE__ */ jsx(
|
|
1227
|
+
Text.formatted,
|
|
1228
|
+
{
|
|
1229
|
+
rule: "symbol",
|
|
1230
|
+
formatString: "base",
|
|
1231
|
+
size: "base",
|
|
1232
|
+
showIcon: true,
|
|
1233
|
+
as: "div",
|
|
1234
|
+
intensity: 80,
|
|
1235
|
+
children: symbol
|
|
1236
|
+
}
|
|
1237
|
+
) }),
|
|
1238
|
+
/* @__PURE__ */ jsx(SymbolBadge, { symbol })
|
|
1239
|
+
] }),
|
|
1200
1240
|
/* @__PURE__ */ jsxs(Flex, { gap: 1, children: [
|
|
1201
1241
|
isPositionTPSL && /* @__PURE__ */ jsx(Badge, { size: "xs", color: "primary", children: t("common.position") }),
|
|
1202
1242
|
/* @__PURE__ */ jsx(TPSLOrderType, { tpPrice, slPrice }),
|
|
@@ -1341,9 +1381,10 @@ var useTPSLBuilder = (options) => {
|
|
|
1341
1381
|
const [needConfirm] = useLocalStorage("orderly_order_confirm", true);
|
|
1342
1382
|
const { marginMode: symbolMarginMode } = useMarginModeBySymbol(symbol);
|
|
1343
1383
|
const [{ rows: positions }] = usePositionStream();
|
|
1344
|
-
const mainAccountPosition = positions.find(
|
|
1345
|
-
|
|
1346
|
-
|
|
1384
|
+
const mainAccountPosition = positions.find((item) => {
|
|
1385
|
+
const marginMode = options.position?.margin_mode ?? symbolMarginMode;
|
|
1386
|
+
return item.symbol === symbol && item.margin_mode === marginMode;
|
|
1387
|
+
});
|
|
1347
1388
|
const isSubAccount = options.position?.account_id && options.position?.account_id !== state.mainAccountId;
|
|
1348
1389
|
const position = isSubAccount ? options.position : mainAccountPosition;
|
|
1349
1390
|
const estLiqPrice = useEstLiqPriceBySymbol(
|
|
@@ -1670,6 +1711,8 @@ var TPSLAdvancedUI = (props) => {
|
|
|
1670
1711
|
PnL: formattedOrder.tp_pnl ?? "",
|
|
1671
1712
|
Offset: formattedOrder.tp_offset ?? "",
|
|
1672
1713
|
"Offset%": formattedOrder.tp_offset_percentage ?? "",
|
|
1714
|
+
OffsetFromMark: formattedOrder.tp_offset_from_mark ?? "",
|
|
1715
|
+
PercentageFromMark: formattedOrder.tp_offset_percentage_from_mark ?? "",
|
|
1673
1716
|
ROI: formattedOrder.tp_ROI ?? ""
|
|
1674
1717
|
});
|
|
1675
1718
|
const [slValues, setSlValues] = useState({
|
|
@@ -1680,6 +1723,8 @@ var TPSLAdvancedUI = (props) => {
|
|
|
1680
1723
|
PnL: formattedOrder.sl_pnl ?? "",
|
|
1681
1724
|
Offset: formattedOrder.sl_offset ?? "",
|
|
1682
1725
|
"Offset%": formattedOrder.sl_offset_percentage ?? "",
|
|
1726
|
+
OffsetFromMark: formattedOrder.sl_offset_from_mark ?? "",
|
|
1727
|
+
PercentageFromMark: formattedOrder.sl_offset_percentage_from_mark ?? "",
|
|
1683
1728
|
ROI: formattedOrder.sl_ROI ?? ""
|
|
1684
1729
|
});
|
|
1685
1730
|
useEffect(() => {
|
|
@@ -1692,6 +1737,8 @@ var TPSLAdvancedUI = (props) => {
|
|
|
1692
1737
|
PnL: formattedOrder.tp_pnl ?? "",
|
|
1693
1738
|
Offset: formattedOrder.tp_offset ?? "",
|
|
1694
1739
|
"Offset%": formattedOrder.tp_offset_percentage ?? "",
|
|
1740
|
+
OffsetFromMark: formattedOrder.tp_offset_from_mark ?? "",
|
|
1741
|
+
PercentageFromMark: formattedOrder.tp_offset_percentage_from_mark ?? "",
|
|
1695
1742
|
ROI: formattedOrder.tp_ROI ?? ""
|
|
1696
1743
|
}));
|
|
1697
1744
|
}, [formattedOrder]);
|
|
@@ -1705,6 +1752,8 @@ var TPSLAdvancedUI = (props) => {
|
|
|
1705
1752
|
PnL: formattedOrder.sl_pnl ?? "",
|
|
1706
1753
|
Offset: formattedOrder.sl_offset ?? "",
|
|
1707
1754
|
"Offset%": formattedOrder.sl_offset_percentage ?? "",
|
|
1755
|
+
OffsetFromMark: formattedOrder.sl_offset_from_mark ?? "",
|
|
1756
|
+
PercentageFromMark: formattedOrder.sl_offset_percentage_from_mark ?? "",
|
|
1708
1757
|
ROI: formattedOrder.sl_ROI ?? ""
|
|
1709
1758
|
}));
|
|
1710
1759
|
}, [formattedOrder]);
|
|
@@ -1935,22 +1984,31 @@ var useTPSLAdvanced = (props) => {
|
|
|
1935
1984
|
sl_pnl: order2.sl_pnl,
|
|
1936
1985
|
sl_offset: order2.sl_offset,
|
|
1937
1986
|
sl_offset_percentage: order2.sl_offset_percentage,
|
|
1987
|
+
sl_offset_from_mark: order2.sl_offset_from_mark,
|
|
1988
|
+
sl_offset_percentage_from_mark: order2.sl_offset_percentage_from_mark,
|
|
1938
1989
|
tp_pnl: order2.tp_pnl,
|
|
1939
1990
|
tp_offset: order2.tp_offset,
|
|
1940
1991
|
tp_offset_percentage: order2.tp_offset_percentage,
|
|
1992
|
+
tp_offset_from_mark: order2.tp_offset_from_mark,
|
|
1993
|
+
tp_offset_percentage_from_mark: order2.tp_offset_percentage_from_mark,
|
|
1941
1994
|
margin_mode: order2.margin_mode
|
|
1942
1995
|
}
|
|
1943
1996
|
});
|
|
1944
1997
|
const slPriceError = useTpslPriceChecker({
|
|
1945
1998
|
slPrice: formattedOrder.sl_trigger_price,
|
|
1946
1999
|
liqPrice: state.estLiqPrice,
|
|
1947
|
-
side: formattedOrder.side
|
|
2000
|
+
side: formattedOrder.side,
|
|
2001
|
+
markPrice: state.markPrice,
|
|
2002
|
+
currentPosition: state.currentPosition,
|
|
2003
|
+
orderQuantity: Number(formattedOrder.order_quantity)
|
|
1948
2004
|
});
|
|
1949
2005
|
const onSubmit = () => {
|
|
1950
2006
|
const isSlPriceError = slPriceError?.sl_trigger_price?.type === ERROR_MSG_CODES.SL_PRICE_ERROR;
|
|
1951
2007
|
helper.validate(isSlPriceError ? slPriceError : void 0).then(() => {
|
|
1952
2008
|
props.onSubmit(formattedOrder);
|
|
1953
2009
|
}).catch((err) => {
|
|
2010
|
+
console.log("metaState", metaState);
|
|
2011
|
+
console.log("err", err);
|
|
1954
2012
|
});
|
|
1955
2013
|
};
|
|
1956
2014
|
return {
|
|
@@ -2910,9 +2968,8 @@ registerSimpleSheet(TPSLDetailSheetId, TPSLDetailWidget, {
|
|
|
2910
2968
|
}
|
|
2911
2969
|
});
|
|
2912
2970
|
var useTPSLSimpleDialog = (options) => {
|
|
2913
|
-
const { type, triggerPrice, symbol } = options;
|
|
2971
|
+
const { type, triggerPrice, symbol, marginMode } = options;
|
|
2914
2972
|
const symbolInfo = useSymbolsInfo();
|
|
2915
|
-
const { marginMode } = useMarginModeBySymbol(symbol ?? "");
|
|
2916
2973
|
const [{ rows: positions }, positionsInfo] = usePositionStream(symbol);
|
|
2917
2974
|
const position = positions?.find((item) => item.margin_mode === marginMode);
|
|
2918
2975
|
useRef(AlgoOrderRootType.TP_SL);
|
|
@@ -3162,7 +3219,7 @@ var TPSLSimpleDialogUI = (props) => {
|
|
|
3162
3219
|
TPSLQuantity,
|
|
3163
3220
|
{
|
|
3164
3221
|
maxQty: props.maxQty,
|
|
3165
|
-
quantity:
|
|
3222
|
+
quantity: props.orderQuantity ?? props.maxQty,
|
|
3166
3223
|
baseTick: props.symbolInfo("base_tick"),
|
|
3167
3224
|
base_dp: props.symbolInfo("base_dp"),
|
|
3168
3225
|
base: props.symbolInfo("base"),
|
|
@@ -3455,6 +3512,8 @@ var EditBracketOrderUI = (props) => {
|
|
|
3455
3512
|
PnL: formattedOrder.tp_pnl ?? "",
|
|
3456
3513
|
Offset: formattedOrder.tp_offset ?? "",
|
|
3457
3514
|
"Offset%": formattedOrder.tp_offset_percentage ?? "",
|
|
3515
|
+
OffsetFromMark: formattedOrder.tp_offset_from_mark ?? "",
|
|
3516
|
+
PercentageFromMark: formattedOrder.tp_offset_percentage_from_mark ?? "",
|
|
3458
3517
|
ROI: formattedOrder.tp_ROI ?? ""
|
|
3459
3518
|
});
|
|
3460
3519
|
const [slValues, setSlValues] = useState({
|
|
@@ -3465,6 +3524,8 @@ var EditBracketOrderUI = (props) => {
|
|
|
3465
3524
|
PnL: formattedOrder.sl_pnl ?? "",
|
|
3466
3525
|
Offset: formattedOrder.sl_offset ?? "",
|
|
3467
3526
|
"Offset%": formattedOrder.sl_offset_percentage ?? "",
|
|
3527
|
+
OffsetFromMark: formattedOrder.sl_offset_from_mark ?? "",
|
|
3528
|
+
PercentageFromMark: formattedOrder.sl_offset_percentage_from_mark ?? "",
|
|
3468
3529
|
ROI: formattedOrder.sl_ROI ?? ""
|
|
3469
3530
|
});
|
|
3470
3531
|
useEffect(() => {
|
|
@@ -3477,6 +3538,8 @@ var EditBracketOrderUI = (props) => {
|
|
|
3477
3538
|
PnL: formattedOrder.tp_pnl ?? "",
|
|
3478
3539
|
Offset: formattedOrder.tp_offset ?? "",
|
|
3479
3540
|
"Offset%": formattedOrder.tp_offset_percentage ?? "",
|
|
3541
|
+
OffsetFromMark: formattedOrder.tp_offset_from_mark ?? "",
|
|
3542
|
+
PercentageFromMark: formattedOrder.tp_offset_percentage_from_mark ?? "",
|
|
3480
3543
|
ROI: formattedOrder.tp_ROI ?? ""
|
|
3481
3544
|
}));
|
|
3482
3545
|
}, [formattedOrder]);
|
|
@@ -3490,6 +3553,8 @@ var EditBracketOrderUI = (props) => {
|
|
|
3490
3553
|
PnL: formattedOrder.sl_pnl ?? "",
|
|
3491
3554
|
Offset: formattedOrder.sl_offset ?? "",
|
|
3492
3555
|
"Offset%": formattedOrder.sl_offset_percentage ?? "",
|
|
3556
|
+
OffsetFromMark: formattedOrder.sl_offset_from_mark ?? "",
|
|
3557
|
+
PercentageFromMark: formattedOrder.sl_offset_percentage_from_mark ?? "",
|
|
3493
3558
|
ROI: formattedOrder.sl_ROI ?? ""
|
|
3494
3559
|
}));
|
|
3495
3560
|
}, [formattedOrder]);
|
|
@@ -3631,6 +3696,7 @@ var EditBracketOrderUI = (props) => {
|
|
|
3631
3696
|
props.onSubmit().then(() => {
|
|
3632
3697
|
props.onClose?.();
|
|
3633
3698
|
}).catch((err) => {
|
|
3699
|
+
console.log("--->>>cancel order", err);
|
|
3634
3700
|
});
|
|
3635
3701
|
},
|
|
3636
3702
|
children: t("common.confirm")
|