pickaxe-utils

2.0.0 • Public • Published

Install

$ npm install --save pickaxe-utils

Usage

const { AttributeUtils } = require('pickaxe-utils')

// initialize new AttributeUtils with attribute categories
// and order attribute categories (and optional productRules
// for newer product definitions that have them defined).
const attUtils = new AttributeUtils(attCats, orderAttCats, { productRules })

const selections = {
  envelopes: 'bronze_pearl',
  paper_types: 'bamboo',
  gloss_coating: 'front_only',
  foil_pressed_designs: 'snowflakes',
  quantity: 150,
  shipping: {
    'shipping_options': 'studio',
    'studio_shipping_options': 'studio_one_day_standard'
  },
  packaging: 'pkg_charcoal'
}

AttributeUtils.getProductPrice

/**
 * Returns price based on current selected attributes
 * @param {Object<string, *>} selected - current selected attributes
 * @return {PriceObj} - current price
 */
const price = attUtils.getProductPrice(selections)

AttributeUtils.getTotalPrice

/**
 * Returns total price/subtotals based on selected attributes
 * @param {Object} selected - current selected attributes
 * @return {Object} - { total: Price, subtotals: Object }
 */
const price = attUtils.getTotalPrice(selections)

AttributeUtils.getVolumePrices

/**
 * Returns price breaks for current selected attributes
 * @param {Object<string, *>} selected - current selected attributes
 * @return {Object<number, PriceObj>}
 */
const price = attUtils.getVolumePrices(selections)

AttributeUtils.sanitizeSelections

/**
 * Returns updated selections that eliminate any values that aren't legitimate
 *  values for that attribute.
 * @param {Object<string, *>} selected - current selected attributes
 * @return {{ selected: Object, invalid?: Object, ignored?: Object }}
 */
const cleanedSelections = attUtils.sanitizeSelections(selected)

AttributeUtils.enforceRules

/**
 * Returns updated attributes and selections based on current selection.
 * This only enforces visibility rules and valid attribute values, it doesn't
 *  update prices like updateAttributes does.
 * @param {Object<string, *>} selected - current selected attributes
 * @param {Object<string, *>} [defaultSelections] - optional default values
 * @param {Object<string, *>} [newSelections] - optional 'new' selections, to determine rule enforcement order
 * @return {{ attCats: Object, selected: Object, invalid?: Object, ignored?: Object, conflict?: Object }}
 */
const cleanedFilteredSelections = attUtils.enforceRules(selected)

AttributeUtils.updateAttributes

/**
 * Returns updated attributes and selections based on current selection
 * @param {Object<string, *>} selected - current selected attributes
 * @return {{ attCats: Object, selected: Object }}
 */
const result = attUtils.updateAttributes(selections)

AttributeUtils.validateOrder

/**
 * Indicates whether current selected attributes represent a valid order
 * @param {Object<string, *>} selected - current selected attributes
 * @return {boolean}
 */
const isValid = attUtils.validateOrder(selections)

AttributeUtils.formatCurrency

/**
 * Returns formatted price (eg. $0.40)
 * @param {PriceObj}
 * @param {boolean} [showCode=false]
 * @return {string}
 */
const price = { value: 6.136558, code: 'USD' }
console.log(attUtils.formatCurrency(price))
// output: 6.14
console.log(attUtils.formatCurrency(price, true))
// output: $6.14

Administration

A summary of how rules are defined in the product definitions can be found in the README_rules document.

Readme

Keywords

none

Package Sidebar

Install

npm i pickaxe-utils

Weekly Downloads

95

Version

2.0.0

License

ISC

Unpacked Size

559 kB

Total Files

50

Last publish

Collaborators

  • whccdev
  • mmacgregor_whcc
  • rob.kemmetmueller
  • mculotta
  • timturnerwhcc
  • tinykite
  • james.nelson