AugurProject/augur-ui

View on GitHub
src/modules/reports/selectors/get-payout-numerators.js

Summary

Maintainability
A
1 hr
Test Coverage
import { SCALAR } from "modules/markets/constants/market-types";
import { createBigNumber, BigNumber } from "utils/create-big-number";

export const getPayoutNumerators = (market, selectedOutcome, invalid) => {
  const { maxPrice, minPrice } = market;
  const numTicks = createBigNumber(market.numTicks);
  const payoutNumerators = Array(market.numOutcomes).fill(createBigNumber(0));
  const isScalar = market.marketType === SCALAR;

  if (invalid) {
    const equalValue = createBigNumber(numTicks)
      .dividedBy(market.numOutcomes)
      .dp(0, BigNumber.ROUND_DOWN);
    return Array(market.numOutcomes).fill(equalValue);
  } else if (isScalar) {
    // selectedOutcome must be a BN as string
    const priceRange = createBigNumber(maxPrice).minus(
      createBigNumber(minPrice)
    );
    const reportNormalizedToZero = createBigNumber(selectedOutcome).minus(
      createBigNumber(minPrice)
    );
    const longPayout = reportNormalizedToZero
      .times(numTicks)
      .dividedBy(priceRange);
    const shortPayout = numTicks.minus(longPayout);
    payoutNumerators[0] = shortPayout;
    payoutNumerators[1] = longPayout;
  } else {
    // for binary and categorical the selected outcome is outcome.id
    // and must be a number
    payoutNumerators[selectedOutcome] = numTicks;
  }

  return payoutNumerators;
};