@orderly.network/hooks 0.0.92 → 0.0.94

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) {
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,48 +694,66 @@ 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
694
726
  };
695
727
  };
696
- var mergeOrderbook = (data, update) => {
697
- const asks = [...data.asks];
698
- const bids = [...data.bids];
699
- update.asks.forEach((element) => {
700
- for (let index = 0; index < asks.length; index++) {
701
- if (element[1] === 0) {
702
- if (element[0] === asks[index][0]) {
703
- asks.splice(index, 1);
704
- break;
705
- }
706
- } else if (element[0] === asks[index][0]) {
707
- asks[index] = element;
708
- break;
709
- } else if (element[0] < asks[index][0]) {
710
- asks.splice(index, 0, element);
711
- break;
712
- }
713
- }
714
- });
715
- update.bids.forEach((element) => {
716
- for (let index = 0; index < bids.length; index++) {
717
- if (element[1] === 0) {
718
- if (element[0] === bids[index][0]) {
719
- bids.splice(index, 1);
720
- break;
728
+ var mergeItems = (data, update) => {
729
+ if (data.length === 0)
730
+ return update;
731
+ data = data.filter(([price]) => !isNaN(price));
732
+ while (update.length > 0) {
733
+ const item = update.shift();
734
+ if (item) {
735
+ const [price, quantity] = item;
736
+ const index = data.findIndex(([p], index2) => p === price);
737
+ if (index === -1) {
738
+ if (quantity === 0)
739
+ continue;
740
+ data.push(item);
741
+ } else {
742
+ if (quantity === 0) {
743
+ data.splice(index, 1);
744
+ } else {
745
+ data[index] = item;
721
746
  }
722
- } else if (element[0] === bids[index][0]) {
723
- bids[index] = element;
724
- break;
725
- } else if (element[0] > bids[index][0]) {
726
- bids.splice(index, 0, element);
727
- break;
728
747
  }
729
748
  }
730
- });
749
+ }
750
+ return data;
751
+ };
752
+ var mergeOrderbook = (data, update) => {
753
+ let asks = [...data.asks];
754
+ let bids = [...data.bids];
755
+ asks = mergeItems(asks, update.asks).sort(asksSortFn);
756
+ bids = mergeItems(bids, update.bids).sort(bidsSortFn);
731
757
  return {
732
758
  asks,
733
759
  bids
@@ -771,14 +797,12 @@ var useOrderbookStream = (symbol, initial = INIT_DATA, options) => {
771
797
  if (ignore)
772
798
  return;
773
799
  if (!!message) {
774
- let bids = message.bids.sort(bidsSortFn);
775
- bids = bids.filter((item) => !isNaN(item[0]));
776
- bids = bids.filter((item) => item[1] > 0);
777
- let asks = message.asks.sort(asksSortFn);
778
- asks = asks.filter((item) => !isNaN(item[0]));
779
- asks = asks.filter((item) => item[1] > 0);
800
+ let bids = [...message.bids.sort(bidsSortFn)];
801
+ bids = bids.filter((item) => !isNaN(item[0]) && item[1] > 0);
802
+ let asks = [...message.asks.sort(asksSortFn)];
803
+ asks = asks.filter((item) => !isNaN(item[0]) && item[1] > 0);
780
804
  setRequestData({ bids, asks });
781
- setData({ bids, asks });
805
+ setData({ bids: [...bids], asks: [...asks] });
782
806
  }
783
807
  setIsLoading(false);
784
808
  }
@@ -838,7 +862,10 @@ var useOrderbookStream = (symbol, initial = INIT_DATA, options) => {
838
862
  React2.useEffect(() => {
839
863
  prevMiddlePrice.current = middlePrice;
840
864
  }, [middlePrice]);
841
- const reducedData = reduceOrderbook(depth, level, data);
865
+ const reducedData = reduceOrderbook(depth, level, {
866
+ asks: [...data.asks],
867
+ bids: [...data.bids]
868
+ });
842
869
  return [
843
870
  {
844
871
  asks: reducedData.asks.slice(-level),