AugurProject/augur-ui

View on GitHub
src/modules/orders/selectors/order-book-series.js

Summary

Maintainability
A
0 mins
Test Coverage
import { createBigNumber } from "utils/create-big-number";
import memoize from "memoizee";

export default function(orderBook) {
  return getOrderBookSeries(orderBook);
}

const getOrderBookSeries = memoize(
  orderBook => {
    const orderBookSeries = Object.keys(orderBook).reduce((p, type) => {
      if (p[type] == null) p[type] = [];

      let totalQuantity = createBigNumber(0);

      orderBook[type].forEach(order => {
        const matchedPriceIndex = p[type].findIndex(
          existing => existing[0] === order.price.value
        );

        totalQuantity = totalQuantity.plus(
          createBigNumber(order.shares.value.toString())
        );

        if (matchedPriceIndex > -1) {
          p[type][matchedPriceIndex][1] = totalQuantity.toNumber();
        } else {
          p[type].push([order.price.value, totalQuantity.toNumber()]);
        }
      });

      p[type].sort((a, b) => a[0] - b[0]);

      return p;
    }, {});

    return orderBookSeries;
  },
  { max: 1 }
);