@orderly.network/ui-order-entry 2.11.1 → 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.mjs CHANGED
@@ -2911,6 +2911,7 @@ var OrderEntryProvider = (props) => {
2911
2911
  onBlur,
2912
2912
  getErrorMsg,
2913
2913
  setOrderValue,
2914
+ manualSetOrderValue,
2914
2915
  setOrderValues,
2915
2916
  currentFocusInput,
2916
2917
  errors,
@@ -2929,6 +2930,7 @@ var OrderEntryProvider = (props) => {
2929
2930
  onBlur,
2930
2931
  getErrorMsg,
2931
2932
  setOrderValue,
2933
+ manualSetOrderValue,
2932
2934
  setOrderValues,
2933
2935
  currentFocusInput,
2934
2936
  errors,
@@ -2947,6 +2949,7 @@ var OrderEntryProvider = (props) => {
2947
2949
  onBlur,
2948
2950
  getErrorMsg,
2949
2951
  setOrderValue,
2952
+ manualSetOrderValue,
2950
2953
  setOrderValues,
2951
2954
  currentFocusInput,
2952
2955
  errors,
@@ -4375,7 +4378,12 @@ var SLIDER_MAX = 100;
4375
4378
  var QuantitySlider = memo((props) => {
4376
4379
  const { canTrade, side, order_quantity, maxQty } = props;
4377
4380
  const [sliderValue, setSliderValue] = useState(0);
4378
- const { setOrderValue, symbolInfo, lastQuantityInputType } = useOrderEntryContext();
4381
+ const {
4382
+ setOrderValue,
4383
+ manualSetOrderValue,
4384
+ symbolInfo,
4385
+ lastQuantityInputType
4386
+ } = useOrderEntryContext();
4379
4387
  const { base_dp, base_tick } = symbolInfo;
4380
4388
  const { t } = useTranslation();
4381
4389
  const color = useMemo(
@@ -4388,22 +4396,30 @@ var QuantitySlider = memo((props) => {
4388
4396
  const onSliderValueChange = (value) => {
4389
4397
  lastQuantityInputType.current = 4 /* QUANTITY_SLIDER */;
4390
4398
  setSliderValue(value);
4399
+ sliderToQuantity(value, true);
4391
4400
  };
4392
- const sliderToQuantity = (value) => {
4401
+ const sliderToQuantity = (value, isManual = false) => {
4393
4402
  const newQty = new Decimal(value).div(SLIDER_MAX).mul(maxQty).toFixed(base_dp, Decimal.ROUND_DOWN);
4394
- setOrderValue("order_quantity", utils.formatNumber(newQty, base_tick));
4403
+ if (isManual) {
4404
+ manualSetOrderValue?.(
4405
+ "order_quantity",
4406
+ utils.formatNumber(newQty, base_tick)
4407
+ );
4408
+ } else {
4409
+ setOrderValue("order_quantity", utils.formatNumber(newQty, base_tick));
4410
+ }
4395
4411
  };
4396
4412
  const onMax = () => {
4397
4413
  onSliderValueChange(SLIDER_MAX);
4398
4414
  if (sliderValue === SLIDER_MAX) {
4399
- sliderToQuantity(SLIDER_MAX);
4415
+ sliderToQuantity(SLIDER_MAX, true);
4400
4416
  }
4401
4417
  };
4402
4418
  useEffect(() => {
4403
4419
  if (lastQuantityInputType.current === 4 /* QUANTITY_SLIDER */) {
4404
4420
  sliderToQuantity(sliderValue);
4405
4421
  }
4406
- }, [sliderValue, maxQty]);
4422
+ }, [maxQty]);
4407
4423
  useEffect(() => {
4408
4424
  const quantityToSlider = () => {
4409
4425
  if (order_quantity && Number(order_quantity) !== 0 && maxQty !== 0) {
@@ -5158,6 +5174,7 @@ var OrderEntry = (props) => {
5158
5174
  side,
5159
5175
  formattedOrder,
5160
5176
  setOrderValue,
5177
+ manualSetOrderValue,
5161
5178
  setOrderValues,
5162
5179
  symbolInfo,
5163
5180
  maxQty,
@@ -5213,11 +5230,11 @@ var OrderEntry = (props) => {
5213
5230
  return;
5214
5231
  }
5215
5232
  if (slippage) {
5216
- setOrderValue("slippage", Number(slippage));
5233
+ manualSetOrderValue("slippage", Number(slippage));
5217
5234
  } else {
5218
- setOrderValue("slippage", void 0);
5235
+ manualSetOrderValue("slippage", void 0);
5219
5236
  }
5220
- }, [slippage, disableFeatures]);
5237
+ }, [slippage, disableFeatures, manualSetOrderValue]);
5221
5238
  useEffect(() => {
5222
5239
  const clickHandler = (event) => {
5223
5240
  const target = event.target;
@@ -5291,12 +5308,12 @@ var OrderEntry = (props) => {
5291
5308
  return new Decimal(maxQty).todp(symbolInfo.base_dp, Decimal.ROUND_DOWN).toString();
5292
5309
  }, [maxQty, symbolInfo.base_dp]);
5293
5310
  const onMaxQtyConfirm = useCallback(() => {
5294
- setOrderValue("order_quantity", formattedMaxQty);
5311
+ manualSetOrderValue("order_quantity", formattedMaxQty);
5295
5312
  requestAnimationFrame(() => {
5296
5313
  onSubmit();
5297
5314
  });
5298
5315
  setMaxQtyConfirmOpen(false);
5299
- }, [setOrderValue, formattedMaxQty]);
5316
+ }, [manualSetOrderValue, formattedMaxQty, onSubmit]);
5300
5317
  const validateSubmit = async () => {
5301
5318
  if (formattedOrder.reduce_only && maxQty === 0) {
5302
5319
  return modal.confirm({
@@ -5304,7 +5321,7 @@ var OrderEntry = (props) => {
5304
5321
  content: t("orderEntry.reduceOnly.reminder.content"),
5305
5322
  okLabel: t("orderEntry.placeOrderNow"),
5306
5323
  onOk: async () => {
5307
- setOrderValue("reduce_only", false);
5324
+ manualSetOrderValue("reduce_only", false);
5308
5325
  requestAnimationFrame(() => {
5309
5326
  props.resetMetaState();
5310
5327
  onSubmit();
@@ -5336,7 +5353,7 @@ var OrderEntry = (props) => {
5336
5353
  };
5337
5354
  const onSubmitAdvancedTPSL = (order) => {
5338
5355
  if (order.side !== formattedOrder.side) {
5339
- setOrderValue("side", order.side);
5356
+ manualSetOrderValue("side", order.side);
5340
5357
  }
5341
5358
  setOrderValues({
5342
5359
  position_type: order.position_type,
@@ -5384,7 +5401,7 @@ var OrderEntry = (props) => {
5384
5401
  setNeedConfirm,
5385
5402
  hidden,
5386
5403
  setHidden,
5387
- onValueChange: setOrderValue,
5404
+ onValueChange: manualSetOrderValue,
5388
5405
  orderTypeExtra: formattedOrder["order_type_ext"],
5389
5406
  showExtra: formattedOrder["order_type"] === OrderType.LIMIT && !props.tpslSwitch
5390
5407
  };
@@ -5399,6 +5416,7 @@ var OrderEntry = (props) => {
5399
5416
  onBlur: props.onBlur,
5400
5417
  getErrorMsg,
5401
5418
  setOrderValue,
5419
+ manualSetOrderValue,
5402
5420
  setOrderValues,
5403
5421
  currentFocusInput: currentFocusInput.current,
5404
5422
  priceInputRef: props.priceInputRef,
@@ -5434,7 +5452,7 @@ var OrderEntry = (props) => {
5434
5452
  canTrade: props.canTrade,
5435
5453
  side,
5436
5454
  order_type: formattedOrder.order_type,
5437
- setOrderValue,
5455
+ setOrderValue: manualSetOrderValue,
5438
5456
  symbolLeverage: props.symbolLeverage,
5439
5457
  marginMode: props.marginMode
5440
5458
  }
@@ -5529,10 +5547,10 @@ var OrderEntry = (props) => {
5529
5547
  onSwitchChanged: props.setTpslSwitch,
5530
5548
  orderType: formattedOrder.order_type,
5531
5549
  errors: validated || props.slPriceError !== void 0 ? { ...errors, ...props.slPriceError } : null,
5532
- setOrderValue,
5550
+ setOrderValue: manualSetOrderValue,
5533
5551
  reduceOnlyChecked: formattedOrder.reduce_only ?? false,
5534
5552
  onReduceOnlyChange: (checked) => {
5535
- setOrderValue("reduce_only", checked);
5553
+ manualSetOrderValue("reduce_only", checked);
5536
5554
  },
5537
5555
  values: {
5538
5556
  position_type: formattedOrder.position_type ?? PositionType.PARTIAL,
@@ -5569,7 +5587,7 @@ var OrderEntry = (props) => {
5569
5587
  {
5570
5588
  checked: formattedOrder.reduce_only ?? false,
5571
5589
  onCheckedChange: (checked) => {
5572
- setOrderValue("reduce_only", checked);
5590
+ manualSetOrderValue("reduce_only", checked);
5573
5591
  }
5574
5592
  }
5575
5593
  ),
@@ -5658,7 +5676,7 @@ var OrderEntry = (props) => {
5658
5676
  children: showTPSLAdvanced && /* @__PURE__ */ jsx(
5659
5677
  TPSLAdvancedWidget,
5660
5678
  {
5661
- setOrderValue,
5679
+ setOrderValue: manualSetOrderValue,
5662
5680
  order: formattedOrder,
5663
5681
  onSubmit: onSubmitAdvancedTPSL,
5664
5682
  onClose: () => {
@@ -5937,6 +5955,12 @@ var useOrderEntryScript = (inputs) => {
5937
5955
  );
5938
5956
  }
5939
5957
  );
5958
+ const manualSetOrderValue = useMemoizedFn(
5959
+ (key, value, options2) => {
5960
+ lastUserActiveTimeRef.current = Date.now();
5961
+ setOrderValue(key, value, options2);
5962
+ }
5963
+ );
5940
5964
  const onTPSLSwitchChanged = (state2) => {
5941
5965
  setTpslSwitch(state2);
5942
5966
  if (state2) {
@@ -6063,22 +6087,21 @@ var useOrderEntryScript = (inputs) => {
6063
6087
  }
6064
6088
  }, [tpslSwitch]);
6065
6089
  useEffect(() => {
6066
- lastUserActiveTimeRef.current = Date.now();
6067
- }, [
6068
- formattedOrder.order_price,
6069
- formattedOrder.order_quantity,
6070
- formattedOrder.side
6071
- ]);
6072
- useEffect(() => {
6090
+ let estLiqPrice = state.estLiqPrice;
6091
+ if (estLiqPrice == null || formattedOrder.side == null || state.markPrice == null) {
6092
+ estLiqPrice = null;
6093
+ } else if (formattedOrder.side === OrderSide.BUY && estLiqPrice > state.markPrice || formattedOrder.side === OrderSide.SELL && estLiqPrice < state.markPrice) {
6094
+ estLiqPrice = null;
6095
+ }
6073
6096
  const lastActive = lastUserActiveTimeRef.current;
6074
6097
  const now = Date.now();
6075
6098
  const isUserActive = now - lastActive <= ORDER_ENTRY_EST_LIQ_ACTIVE_WINDOW_MS;
6076
6099
  ee.emit(ORDER_ENTRY_EST_LIQ_PRICE_CHANGE, {
6077
6100
  symbol,
6078
- estLiqPrice: state.estLiqPrice ?? null,
6101
+ estLiqPrice,
6079
6102
  isUserActive
6080
6103
  });
6081
- }, [ee, symbol, state.estLiqPrice]);
6104
+ }, [ee, symbol, state.estLiqPrice, state.markPrice, formattedOrder.side]);
6082
6105
  useEffect(() => {
6083
6106
  setOrderValue("margin_mode", marginMode);
6084
6107
  }, [marginMode]);
@@ -6090,6 +6113,7 @@ var useOrderEntryScript = (inputs) => {
6090
6113
  level: formattedOrder.level,
6091
6114
  formattedOrder,
6092
6115
  setOrderValue,
6116
+ manualSetOrderValue,
6093
6117
  setOrderValues,
6094
6118
  // account-level leverage (for other consumers)
6095
6119
  currentLeverage,