pickaxe-utils
v2.1.0
Published
Common utility methods shared across applications
Downloads
819
Keywords
Readme
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.