2.1.0 • Published 11 months ago

pickaxe-utils v2.1.0

Weekly downloads
17
License
ISC
Repository
github
Last release
11 months ago

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.

2.1.0

11 months ago

2.0.0

3 years ago

1.10.2

3 years ago

1.10.1

5 years ago

1.10.0

5 years ago

1.9.0

6 years ago

1.8.4

6 years ago

1.8.3

6 years ago

1.8.2

6 years ago

1.8.1

6 years ago

1.8.0

6 years ago

1.7.6

6 years ago

1.7.5

7 years ago

1.7.4

7 years ago

1.7.3

7 years ago

1.7.2

7 years ago

1.7.1

7 years ago

1.7.0

7 years ago

1.6.0

7 years ago

1.5.5

7 years ago

1.5.4

7 years ago

1.5.3

7 years ago

1.5.2

7 years ago

1.5.1

7 years ago

1.5.0

7 years ago

1.4.10

7 years ago

1.4.9

7 years ago

1.4.8

7 years ago

1.4.7

7 years ago

1.4.6

7 years ago

1.4.5

7 years ago

1.4.4

7 years ago

1.4.3

7 years ago

1.4.2

8 years ago

1.4.1

8 years ago

1.4.0

8 years ago

1.3.7

8 years ago

1.3.6

8 years ago

1.3.5

8 years ago

1.3.4

8 years ago

1.3.3

8 years ago

1.3.2

8 years ago

1.3.1

8 years ago

1.3.0

8 years ago

1.2.0

8 years ago

1.1.2

8 years ago

1.1.1

8 years ago

1.1.0

8 years ago

1.0.1

8 years ago

1.0.0

8 years ago