shopify-shipping-calculator v0.1.0
Shopify Shipping Calculator
Fetch shipping rates for a Shopify store based on country, province, and zip.
Limitations
- For use in Shopify-hosted themes only. This module does not support CORS requests.
- Request
/services/countries.jsbefore your javascript bundle. This defines aCountriesobject on the window that this library depends on.{{ '/services/javascripts/countries.js' | script_tag }} - See markup requirements below.
Install
npm i shopify-shipping-calculator --saveUsage
import shipper from 'shopify-shipping-calculator'
const form = document.querySelector('.js-form')
const calculator = shipper(form)
calculator.on('success', rates => handleSuccess(rates))
calculator.on('error', res => handleError(res))
calculator.on('change', { country, province, zip, meta } => {
// hide/show needed fields, clear previous results, etc
})
calculator.getState()
/** returns
{
country: 'United States',
province: 'New York',
zip: '10013',
meta: {
province_label: 'State',
zip_label: 'Zip code',
provinces: [...states]
}
}
*/Configuration
calculator(form, options)
This library takes two parameters: form and options. form should be the shipping calculator form element, and options is an object.
// country will default to the first country in the `window['Countries']` object
const calculator = shipper(form)
// or, optionally specify a default country
const calculator = shipper(form, {
defaultCountry: 'United States'
})Options
defaultCountry string
The preselected country shown on form load. Default: null.
const calculator = shipper(form, {
defaultCountry: "Canada"
})Events
This library emits a few helpful events and exposes data that you can use to manage the state of the calculator UI.
success
Called after a successful fetch, returns an array of shipping rates:
calculator.on('success', rates => {
rates.forEach(r => resultsContainer.innerHTML += `${r.type}: ${r.price}`)
})error
Called after an unsuccessful fetch, returns an error message from the Shopify servers:
calculator.on('error', res => console.warn(res))change
Called when the country selector changes, is passed the full state object returned from .getState().
calculator.on('change', { country, province, zip, meta } => {
!!province ? (
provinceSelector.style.display = 'block'
) : (
provinceSelector.style.display = 'none'
)
})API: Properties
.getState()
Returns an object representing the data fetched by the form.
calculator.getState()
/** returns
{
country: 'United States',
province: 'New York',
zip: '10013',
meta: {
province_label: 'State',
zip_label: 'Zip code',
provinces: [...states]
}
}
*/.on(event, callback)
Attach handlers for event emissions from the instance.
calculator.on('success', rates => // do stuff)Markup
The only markup requirements for this library are a standard HTML form element that contains inputs with name attributes matching country, province and zip.
<form class="js-form">
<select name="country"></select>
<select name="province"></select>
<input type="text" name="zip">
<input type="submit" value="submit">
</form>License
MIT