@orderly.network/ui-order-entry 2.11.1-alpha.0 → 2.11.2-alpha.0

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 CHANGED
@@ -47,6 +47,9 @@ declare const useOrderEntryScript: (inputs: OrderEntryScriptInputs) => {
47
47
  setOrderValue: (this: unknown, key: string, value: unknown, options?: {
48
48
  shouldUpdateLastChangedField?: boolean;
49
49
  } | undefined) => void;
50
+ manualSetOrderValue: (this: unknown, key: string, value: unknown, options?: {
51
+ shouldUpdateLastChangedField?: boolean;
52
+ } | undefined) => void;
50
53
  setOrderValues: (values: Partial<_orderly_network_types.OrderlyOrder>) => void;
51
54
  currentLeverage: number | null;
52
55
  symbolLeverage: number | undefined;
package/dist/index.d.ts CHANGED
@@ -47,6 +47,9 @@ declare const useOrderEntryScript: (inputs: OrderEntryScriptInputs) => {
47
47
  setOrderValue: (this: unknown, key: string, value: unknown, options?: {
48
48
  shouldUpdateLastChangedField?: boolean;
49
49
  } | undefined) => void;
50
+ manualSetOrderValue: (this: unknown, key: string, value: unknown, options?: {
51
+ shouldUpdateLastChangedField?: boolean;
52
+ } | undefined) => void;
50
53
  setOrderValues: (values: Partial<_orderly_network_types.OrderlyOrder>) => void;
51
54
  currentLeverage: number | null;
52
55
  symbolLeverage: number | undefined;
package/dist/index.js CHANGED
@@ -2917,6 +2917,7 @@ var OrderEntryProvider = (props) => {
2917
2917
  onBlur,
2918
2918
  getErrorMsg,
2919
2919
  setOrderValue,
2920
+ manualSetOrderValue,
2920
2921
  setOrderValues,
2921
2922
  currentFocusInput,
2922
2923
  errors,
@@ -2935,6 +2936,7 @@ var OrderEntryProvider = (props) => {
2935
2936
  onBlur,
2936
2937
  getErrorMsg,
2937
2938
  setOrderValue,
2939
+ manualSetOrderValue,
2938
2940
  setOrderValues,
2939
2941
  currentFocusInput,
2940
2942
  errors,
@@ -2953,6 +2955,7 @@ var OrderEntryProvider = (props) => {
2953
2955
  onBlur,
2954
2956
  getErrorMsg,
2955
2957
  setOrderValue,
2958
+ manualSetOrderValue,
2956
2959
  setOrderValues,
2957
2960
  currentFocusInput,
2958
2961
  errors,
@@ -4381,7 +4384,12 @@ var SLIDER_MAX = 100;
4381
4384
  var QuantitySlider = React3.memo((props) => {
4382
4385
  const { canTrade, side, order_quantity, maxQty } = props;
4383
4386
  const [sliderValue, setSliderValue] = React3.useState(0);
4384
- const { setOrderValue, symbolInfo, lastQuantityInputType } = useOrderEntryContext();
4387
+ const {
4388
+ setOrderValue,
4389
+ manualSetOrderValue,
4390
+ symbolInfo,
4391
+ lastQuantityInputType
4392
+ } = useOrderEntryContext();
4385
4393
  const { base_dp, base_tick } = symbolInfo;
4386
4394
  const { t } = i18n.useTranslation();
4387
4395
  const color = React3.useMemo(
@@ -4394,22 +4402,30 @@ var QuantitySlider = React3.memo((props) => {
4394
4402
  const onSliderValueChange = (value) => {
4395
4403
  lastQuantityInputType.current = 4 /* QUANTITY_SLIDER */;
4396
4404
  setSliderValue(value);
4405
+ sliderToQuantity(value, true);
4397
4406
  };
4398
- const sliderToQuantity = (value) => {
4407
+ const sliderToQuantity = (value, isManual = false) => {
4399
4408
  const newQty = new utils.Decimal(value).div(SLIDER_MAX).mul(maxQty).toFixed(base_dp, utils.Decimal.ROUND_DOWN);
4400
- setOrderValue("order_quantity", hooks.utils.formatNumber(newQty, base_tick));
4409
+ if (isManual) {
4410
+ manualSetOrderValue?.(
4411
+ "order_quantity",
4412
+ hooks.utils.formatNumber(newQty, base_tick)
4413
+ );
4414
+ } else {
4415
+ setOrderValue("order_quantity", hooks.utils.formatNumber(newQty, base_tick));
4416
+ }
4401
4417
  };
4402
4418
  const onMax = () => {
4403
4419
  onSliderValueChange(SLIDER_MAX);
4404
4420
  if (sliderValue === SLIDER_MAX) {
4405
- sliderToQuantity(SLIDER_MAX);
4421
+ sliderToQuantity(SLIDER_MAX, true);
4406
4422
  }
4407
4423
  };
4408
4424
  React3.useEffect(() => {
4409
4425
  if (lastQuantityInputType.current === 4 /* QUANTITY_SLIDER */) {
4410
4426
  sliderToQuantity(sliderValue);
4411
4427
  }
4412
- }, [sliderValue, maxQty]);
4428
+ }, [maxQty]);
4413
4429
  React3.useEffect(() => {
4414
4430
  const quantityToSlider = () => {
4415
4431
  if (order_quantity && Number(order_quantity) !== 0 && maxQty !== 0) {
@@ -5164,6 +5180,7 @@ var OrderEntry = (props) => {
5164
5180
  side,
5165
5181
  formattedOrder,
5166
5182
  setOrderValue,
5183
+ manualSetOrderValue,
5167
5184
  setOrderValues,
5168
5185
  symbolInfo,
5169
5186
  maxQty,
@@ -5219,11 +5236,11 @@ var OrderEntry = (props) => {
5219
5236
  return;
5220
5237
  }
5221
5238
  if (slippage) {
5222
- setOrderValue("slippage", Number(slippage));
5239
+ manualSetOrderValue("slippage", Number(slippage));
5223
5240
  } else {
5224
- setOrderValue("slippage", void 0);
5241
+ manualSetOrderValue("slippage", void 0);
5225
5242
  }
5226
- }, [slippage, disableFeatures]);
5243
+ }, [slippage, disableFeatures, manualSetOrderValue]);
5227
5244
  React3.useEffect(() => {
5228
5245
  const clickHandler = (event) => {
5229
5246
  const target = event.target;
@@ -5297,12 +5314,12 @@ var OrderEntry = (props) => {
5297
5314
  return new utils.Decimal(maxQty).todp(symbolInfo.base_dp, utils.Decimal.ROUND_DOWN).toString();
5298
5315
  }, [maxQty, symbolInfo.base_dp]);
5299
5316
  const onMaxQtyConfirm = React3.useCallback(() => {
5300
- setOrderValue("order_quantity", formattedMaxQty);
5317
+ manualSetOrderValue("order_quantity", formattedMaxQty);
5301
5318
  requestAnimationFrame(() => {
5302
5319
  onSubmit();
5303
5320
  });
5304
5321
  setMaxQtyConfirmOpen(false);
5305
- }, [setOrderValue, formattedMaxQty]);
5322
+ }, [manualSetOrderValue, formattedMaxQty, onSubmit]);
5306
5323
  const validateSubmit = async () => {
5307
5324
  if (formattedOrder.reduce_only && maxQty === 0) {
5308
5325
  return ui.modal.confirm({
@@ -5310,7 +5327,7 @@ var OrderEntry = (props) => {
5310
5327
  content: t("orderEntry.reduceOnly.reminder.content"),
5311
5328
  okLabel: t("orderEntry.placeOrderNow"),
5312
5329
  onOk: async () => {
5313
- setOrderValue("reduce_only", false);
5330
+ manualSetOrderValue("reduce_only", false);
5314
5331
  requestAnimationFrame(() => {
5315
5332
  props.resetMetaState();
5316
5333
  onSubmit();
@@ -5342,7 +5359,7 @@ var OrderEntry = (props) => {
5342
5359
  };
5343
5360
  const onSubmitAdvancedTPSL = (order) => {
5344
5361
  if (order.side !== formattedOrder.side) {
5345
- setOrderValue("side", order.side);
5362
+ manualSetOrderValue("side", order.side);
5346
5363
  }
5347
5364
  setOrderValues({
5348
5365
  position_type: order.position_type,
@@ -5390,7 +5407,7 @@ var OrderEntry = (props) => {
5390
5407
  setNeedConfirm,
5391
5408
  hidden,
5392
5409
  setHidden,
5393
- onValueChange: setOrderValue,
5410
+ onValueChange: manualSetOrderValue,
5394
5411
  orderTypeExtra: formattedOrder["order_type_ext"],
5395
5412
  showExtra: formattedOrder["order_type"] === types.OrderType.LIMIT && !props.tpslSwitch
5396
5413
  };
@@ -5405,6 +5422,7 @@ var OrderEntry = (props) => {
5405
5422
  onBlur: props.onBlur,
5406
5423
  getErrorMsg,
5407
5424
  setOrderValue,
5425
+ manualSetOrderValue,
5408
5426
  setOrderValues,
5409
5427
  currentFocusInput: currentFocusInput.current,
5410
5428
  priceInputRef: props.priceInputRef,
@@ -5440,7 +5458,7 @@ var OrderEntry = (props) => {
5440
5458
  canTrade: props.canTrade,
5441
5459
  side,
5442
5460
  order_type: formattedOrder.order_type,
5443
- setOrderValue,
5461
+ setOrderValue: manualSetOrderValue,
5444
5462
  symbolLeverage: props.symbolLeverage,
5445
5463
  marginMode: props.marginMode
5446
5464
  }
@@ -5535,10 +5553,10 @@ var OrderEntry = (props) => {
5535
5553
  onSwitchChanged: props.setTpslSwitch,
5536
5554
  orderType: formattedOrder.order_type,
5537
5555
  errors: validated || props.slPriceError !== void 0 ? { ...errors, ...props.slPriceError } : null,
5538
- setOrderValue,
5556
+ setOrderValue: manualSetOrderValue,
5539
5557
  reduceOnlyChecked: formattedOrder.reduce_only ?? false,
5540
5558
  onReduceOnlyChange: (checked) => {
5541
- setOrderValue("reduce_only", checked);
5559
+ manualSetOrderValue("reduce_only", checked);
5542
5560
  },
5543
5561
  values: {
5544
5562
  position_type: formattedOrder.position_type ?? types.PositionType.PARTIAL,
@@ -5575,7 +5593,7 @@ var OrderEntry = (props) => {
5575
5593
  {
5576
5594
  checked: formattedOrder.reduce_only ?? false,
5577
5595
  onCheckedChange: (checked) => {
5578
- setOrderValue("reduce_only", checked);
5596
+ manualSetOrderValue("reduce_only", checked);
5579
5597
  }
5580
5598
  }
5581
5599
  ),
@@ -5664,7 +5682,7 @@ var OrderEntry = (props) => {
5664
5682
  children: showTPSLAdvanced && /* @__PURE__ */ jsxRuntime.jsx(
5665
5683
  uiTpsl.TPSLAdvancedWidget,
5666
5684
  {
5667
- setOrderValue,
5685
+ setOrderValue: manualSetOrderValue,
5668
5686
  order: formattedOrder,
5669
5687
  onSubmit: onSubmitAdvancedTPSL,
5670
5688
  onClose: () => {
@@ -5943,6 +5961,12 @@ var useOrderEntryScript = (inputs) => {
5943
5961
  );
5944
5962
  }
5945
5963
  );
5964
+ const manualSetOrderValue = hooks.useMemoizedFn(
5965
+ (key, value, options2) => {
5966
+ lastUserActiveTimeRef.current = Date.now();
5967
+ setOrderValue(key, value, options2);
5968
+ }
5969
+ );
5946
5970
  const onTPSLSwitchChanged = (state2) => {
5947
5971
  setTpslSwitch(state2);
5948
5972
  if (state2) {
@@ -6069,22 +6093,21 @@ var useOrderEntryScript = (inputs) => {
6069
6093
  }
6070
6094
  }, [tpslSwitch]);
6071
6095
  React3.useEffect(() => {
6072
- lastUserActiveTimeRef.current = Date.now();
6073
- }, [
6074
- formattedOrder.order_price,
6075
- formattedOrder.order_quantity,
6076
- formattedOrder.side
6077
- ]);
6078
- React3.useEffect(() => {
6096
+ let estLiqPrice = state.estLiqPrice;
6097
+ if (estLiqPrice == null || formattedOrder.side == null || state.markPrice == null) {
6098
+ estLiqPrice = null;
6099
+ } else if (formattedOrder.side === types.OrderSide.BUY && estLiqPrice > state.markPrice || formattedOrder.side === types.OrderSide.SELL && estLiqPrice < state.markPrice) {
6100
+ estLiqPrice = null;
6101
+ }
6079
6102
  const lastActive = lastUserActiveTimeRef.current;
6080
6103
  const now = Date.now();
6081
6104
  const isUserActive = now - lastActive <= ORDER_ENTRY_EST_LIQ_ACTIVE_WINDOW_MS;
6082
6105
  ee.emit(types.ORDER_ENTRY_EST_LIQ_PRICE_CHANGE, {
6083
6106
  symbol,
6084
- estLiqPrice: state.estLiqPrice ?? null,
6107
+ estLiqPrice,
6085
6108
  isUserActive
6086
6109
  });
6087
- }, [ee, symbol, state.estLiqPrice]);
6110
+ }, [ee, symbol, state.estLiqPrice, state.markPrice, formattedOrder.side]);
6088
6111
  React3.useEffect(() => {
6089
6112
  setOrderValue("margin_mode", marginMode);
6090
6113
  }, [marginMode]);
@@ -6096,6 +6119,7 @@ var useOrderEntryScript = (inputs) => {
6096
6119
  level: formattedOrder.level,
6097
6120
  formattedOrder,
6098
6121
  setOrderValue,
6122
+ manualSetOrderValue,
6099
6123
  setOrderValues,
6100
6124
  // account-level leverage (for other consumers)
6101
6125
  currentLeverage,