@orderly.network/hooks 0.0.93 → 0.0.95

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.js CHANGED
@@ -666,6 +666,14 @@ var reduceItems = (depth, level, data, asks = false) => {
666
666
  } else {
667
667
  priceKey = new utils.Decimal(Math.floor(price / depth)).mul(depth).toNumber();
668
668
  }
669
+ if (depth < 1 && depth > 0 && priceKey.toString().indexOf(".") !== -1) {
670
+ const priceStr = price.toString();
671
+ const index = priceStr.indexOf(".");
672
+ const decimal = priceStr.slice(index + 1);
673
+ const decimalDepth = depth.toString().slice(2).length;
674
+ const decimalStr = decimal.slice(0, ramda.min(decimal.length, decimalDepth));
675
+ priceKey = new utils.Decimal(priceStr.slice(0, index) + "." + decimalStr).toNumber();
676
+ }
669
677
  if (prices.has(priceKey)) {
670
678
  const item = prices.get(priceKey);
671
679
  const itemPrice = new utils.Decimal(item[1]).add(quantity).toNumber();
@@ -686,8 +694,32 @@ var reduceItems = (depth, level, data, asks = false) => {
686
694
  return result;
687
695
  };
688
696
  var reduceOrderbook = (depth, level, data) => {
689
- const asks = reduceItems(depth, level, data.asks, true).reverse();
690
- const bids = reduceItems(depth, level, data.bids);
697
+ let asks = reduceItems(depth, level, data.asks, true);
698
+ let bids = reduceItems(depth, level, data.bids);
699
+ if (asks.length !== 0 && bids.length !== 0 && asks[0][0] <= bids[0][0]) {
700
+ if (asks.length === 1) {
701
+ const [price, qty, newQuantity] = asks[0];
702
+ asks.shift();
703
+ asks.push([price + (depth === void 0 ? 0 : depth), qty, newQuantity]);
704
+ } else {
705
+ const [bidPrice] = bids[0];
706
+ while (asks.length > 0) {
707
+ const [askPrice, askQty, newQuantity] = asks[0];
708
+ if (askPrice <= bidPrice) {
709
+ asks.shift();
710
+ for (let index = 0; index < asks.length; index++) {
711
+ if (index === 0) {
712
+ asks[index][1] += askQty;
713
+ }
714
+ asks[index][2] += newQuantity;
715
+ }
716
+ } else {
717
+ break;
718
+ }
719
+ }
720
+ }
721
+ }
722
+ asks = asks.reverse();
691
723
  return {
692
724
  asks: asks.length < level ? paddingFn(level - asks.length).concat(asks) : asks,
693
725
  bids: bids.length < level ? bids.concat(paddingFn(level - bids.length)) : bids
@@ -830,7 +862,10 @@ var useOrderbookStream = (symbol, initial = INIT_DATA, options) => {
830
862
  React2.useEffect(() => {
831
863
  prevMiddlePrice.current = middlePrice;
832
864
  }, [middlePrice]);
833
- const reducedData = reduceOrderbook(depth, level, data);
865
+ const reducedData = reduceOrderbook(depth, level, {
866
+ asks: [...data.asks],
867
+ bids: [...data.bids]
868
+ });
834
869
  return [
835
870
  {
836
871
  asks: reducedData.asks.slice(-level),