Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
@skava/modules-modules / utils / priceSplitter.ts
Size: Mime:
/**
 * @deprecated - use Money
 */
import { isObj, EMPTY_OBJ } from 'exotic'

interface Price {
  type?: 'Sale' | 'Reg'
  value?: any
  minReg?: string
  maxReg?: string
  reg?: string
  sale?: string
  ismin?: boolean | 'true' | 'false'
  minSale?: boolean | 'true' | 'false'
  maxSale?: boolean | 'true' | 'false'
}
interface Pricing {
  currencyCode?: string
  prices?: Price[]
}

/**
 * @version -1 named "initprice"
 */
function transformPrice(pricing: Pricing) {
  if (!isObj(pricing)) {
    pricing = EMPTY_OBJ
  }

  let salePrices = {}
  let regPrices = {}
  const currencyCode = pricing.currencyCode || '$'
  if (pricing.prices) {
    for (let job = 0; job < pricing.prices.length; job++) {
      const priceData = pricing.prices[job]
      if (priceData.type === 'Sale') {
        salePrices = Object.assign(salePrices, salePrice(priceData))
      } else if (priceData.type === 'Reg') {
        regPrices = Object.assign(regPrices, regPrice(priceData))
      }
    }
  }
  return setPriceData(salePrices, regPrices, currencyCode)
}

// @TODO use indexBy('label', 'value') to access in this remap
// @see catalog/product/index get regPrice()
function regPrice(priceData: Price) {
  if (!priceData) {
    return '@todo'
  }

  const price = {}

  priceData.value = parseFloat(priceData.value)
  priceData.value = priceData.value.toFixed(2)

  if (priceData.ismin === 'true') {
    price.minReg = priceData.value
  } else if (priceData.ismax === 'true') {
    price.maxReg = priceData.value
  }
  price.reg = priceData.value
  return price
}

// @see catalog/product/index get salePrice()
function salePrice(priceData: Price) {
  if (!priceData) {
    return '@todo'
  }

  const price = {}
  priceData.value = parseFloat(priceData.value)
  priceData.value = priceData.value.toFixed(2)
  if (priceData.ismin === 'true') {
    price.minSale = priceData.value
  } else if (priceData.ismax === 'true') {
    price.maxSale = priceData.value
  }
  price.sale = priceData.value

  return price
}

function setPriceData(
  salePrices: Price,
  regPrices: Price,
  currencyCode: string
) {
  const price = {}

  if (salePrices) {
    if (salePrices.minSale && salePrices.maxSale) {
      price.sale =
        currencyCode +
        salePrices.maxSale +
        ' - ' +
        currencyCode +
        salePrices.minSale
    } else if (salePrices.sale) {
      price.sale = currencyCode + salePrices.sale
    }
  }
  if (regPrices) {
    if (regPrices.minReg && regPrices.maxReg) {
      price.reg =
        currencyCode +
        regPrices.maxReg +
        ' - ' +
        currencyCode +
        regPrices.minReg
    } else if (regPrices.reg) {
      price.reg = currencyCode + regPrices.reg
    }
  }
  price.reg = price.sale === price.reg ? null : price.reg
  price.sale = price.sale ? price.sale : price.reg
  price.reg = price.sale ? price.reg : null
  return price
}

export { transformPrice, regPrice, salePrice, setPriceData }
export default transformPrice