https://github.com/vtex/estimate-calculator
Small library to calculate and compare SLAs' shippingEstimate
https://github.com/vtex/estimate-calculator
srv-checkout-ui xp-shopping
Last synced: about 1 year ago
JSON representation
Small library to calculate and compare SLAs' shippingEstimate
- Host: GitHub
- URL: https://github.com/vtex/estimate-calculator
- Owner: vtex
- Created: 2018-02-20T20:38:20.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2023-07-11T13:32:43.000Z (almost 3 years ago)
- Last Synced: 2025-04-14T09:14:53.581Z (about 1 year ago)
- Topics: srv-checkout-ui, xp-shopping
- Language: JavaScript
- Homepage:
- Size: 1.09 MB
- Stars: 3
- Watchers: 146
- Forks: 2
- Open Issues: 8
-
Metadata Files:
- Readme: README.md
- Codeowners: .github/CODEOWNERS
Awesome Lists containing this project
README
# estimate-calculator
> Small library to calculate and compare SLAs' shippingEstimate
## Install
```sh
$ npm install @vtex/estimate-calculator
```
## Usage
```js
const estimateCalculator = require('@vtex/estimate-calculator')
estimateCalculator.getFastestSla([
{ id: 1, shippingEstimate: '50bd' },
{ id: 2, shippingEstimate: '15bd' },
{ id: 3, shippingEstimate: '100bd' },
])
// { id: 2, shippingEstimate: '15bd' }
```
## API
### getShippingEstimateQuantity(estimate)
Returns only the shippingEstimate quantity
#### estimate
Type: `String`
shippingEstimate of a given SLA
### getShippingEstimateUnit(estimate)
Returns only the shippingEstimate unit
#### estimate
Type: `String`
shippingEstimate of a given SLA
### getShippingEstimateQuantityInSeconds(estimate)
Returns shippingEstimate converted to seconds
#### estimate
Type: `String`
shippingEstimate of a given SLA
### getLatestSla(slas)
Returns the SLA that will take the most time (i.e: worst-case scenario in a shippingEstimate context)
#### slas
Type: `Array`
List of SLAS
### getFastestSla(slas)
Returns the SLA that will be fastest one (i.e: best-case scenario in a shippingEstimate context)
#### slas
Type: `Array`
List of SLAS
### getCheapestSla(slas)
Returns the chepeast SLA
#### slas
Type: `Array`
List of SLAS
### selectCheapestSlaForAllItems(logisticsInfo)
Returns the chepeast SLA for all items
#### logisticsInfo
Type: `Object`
Object that contains all the logistics information of an order
### selectFastestSlaForAllItems(logisticsInfo)
Returns the fastest SLA for all items
#### logisticsInfo
Type: `Array`
Array that contains all the logistics information of each item of the order
Format of the Array:
```js
[
// {
// itemIndex: 0,
// selectedSla: '',
// selectedDeliveryChannel: '',
// addressId: '62e1db5500824a66bcef708d09388a8e',
// slas: [
// {
// id: 'Normal',
// deliveryChannel: 'delivery',
// name: 'Normal',
// deliveryIds: [Object],
// shippingEstimate: '16bd',
// shippingEstimateDate: null,
// lockTTL: null,
// availableDeliveryWindows: [],
// deliveryWindow: null,
// price: 334,
// listPrice: 334,
// tax: 0,
// pickupStoreInfo: {
// isPickupStore: false,
// friendlyName: null,
// address: null,
// additionalInfo: null,
// dockId: null,
// },
// },
// {
// id: 'Expressa',
// deliveryChannel: 'delivery',
// name: 'Expressa',
// deliveryIds: [Object],
// shippingEstimate: '1bd',
// shippingEstimateDate: null,
// lockTTL: null,
// availableDeliveryWindows: [],
// deliveryWindow: null,
// price: 6666,
// listPrice: 6666,
// tax: 0,
// pickupStoreInfo: {
// isPickupStore: false,
// friendlyName: null,
// address: null,
// additionalInfo: null,
// dockId: null,
// },
// },
// ],
// shipsTo: ['BRA'],
// itemId: '100006784',
// deliveryChannels: [{ id: 'delivery' }, { id: 'pickup-in-point' }],
// },
// {
// itemIndex: 1,
// selectedSla: '',
// selectedDeliveryChannel: '',
// addressId: '62e1db5500824a66bcef708d09388a8e',
// slas: [
// {
// id: 'Normal',
// deliveryChannel: 'delivery',
// name: 'Normal',
// deliveryIds: [
// {
// courierId: '1',
// warehouseId: '1afe1cf',
// dockId: '1b91c3b',
// courierName: 'Courrier e-commerce',
// quantity: 1,
// },
// ],
// shippingEstimate: '16bd',
// shippingEstimateDate: null,
// lockTTL: null,
// availableDeliveryWindows: [],
// deliveryWindow: null,
// price: 333,
// listPrice: 333,
// tax: 0,
// pickupStoreInfo: {
// isPickupStore: false,
// friendlyName: null,
// address: null,
// additionalInfo: null,
// dockId: null,
// },
// },
// {
// id: 'Expressa',
// deliveryChannel: 'delivery',
// name: 'Expressa',
// deliveryIds: [Object],
// shippingEstimate: '1bd',
// shippingEstimateDate: null,
// lockTTL: null,
// availableDeliveryWindows: [],
// deliveryWindow: null,
// price: 6667,
// listPrice: 6667,
// tax: 0,
// pickupStoreInfo: {
// isPickupStore: false,
// friendlyName: null,
// address: null,
// additionalInfo: null,
// dockId: null,
// },
// },
// ],
// shipsTo: ['BRA'],
// itemId: '100006786',
// deliveryChannels: [{ id: 'delivery' }, { id: 'pickup-in-point' }],
// },
// {
// itemIndex: 2,
// selectedSla: '',
// selectedDeliveryChannel: '',
// addressId: '62e1db5500824a66bcef708d09388a8e',
// slas: [
// {
// id: 'Normal',
// deliveryChannel: 'delivery',
// name: 'Normal',
// deliveryIds: [Object],
// shippingEstimate: '16bd',
// shippingEstimateDate: null,
// lockTTL: null,
// availableDeliveryWindows: [],
// deliveryWindow: null,
// price: 333,
// listPrice: 333,
// tax: 0,
// pickupStoreInfo: {
// isPickupStore: false,
// friendlyName: null,
// address: null,
// additionalInfo: null,
// dockId: null,
// },
// },
// {
// id: 'Expressa',
// deliveryChannel: 'delivery',
// name: 'Expressa',
// deliveryIds: [Object],
// shippingEstimate: '1bd',
// shippingEstimateDate: null,
// lockTTL: null,
// availableDeliveryWindows: [],
// deliveryWindow: null,
// price: 6667,
// listPrice: 6667,
// tax: 0,
// pickupStoreInfo: {
// isPickupStore: false,
// friendlyName: null,
// address: null,
// additionalInfo: null,
// dockId: null,
// },
// },
// ],
// shipsTo: ['BRA'],
// itemId: '100006785',
// deliveryChannels: [{ id: 'delivery' }, { id: 'pickup-in-point' }],
// },
// ]
```
#### Examples
```js
estimateCalculator.getShippingEstimateQuantity('10m')
// 10
estimateCalculator.getShippingEstimateUnit('10m')
// m
estimateCalculator.getShippingEstimateQuantityInSeconds('10m')
// 600
estimateCalculator.getLatestSla([
{ id: 1, shippingEstimate: '50h' },
{ id: 2, shippingEstimate: '15h' },
{ id: 3, shippingEstimate: '100h' },
])
// { id: 3, shippingEstimate: '100h' }
estimateCalculator.getFastestSla([
{ id: 1, shippingEstimate: '50h' },
{ id: 2, shippingEstimate: '15h' },
{ id: 3, shippingEstimate: '100h' },
])
// { id: 2, shippingEstimate: '15h' }
estimateCalculator.getCheapestSla([
{ id: 1, price: 50 },
{ id: 2, price: 15 },
{ id: 3, price: 100 },
])
// { id: 2, price: 15 }
estimateCalculator.selectCheapestSlaForAllItems(logistiscsInfo)
// [
// {
// selectedSla: '',
// selectedDeliveryChannel: '',
// itemIndex: 0,
// addressId: '62e1db5500824a66bcef708d09388a8e',
// slas: [
// {
// id: 'Normal',
// deliveryChannel: 'delivery',
// name: 'Normal',
// deliveryIds: [[Object]],
// shippingEstimate: '16bd',
// shippingEstimateDate: null,
// lockTTL: null,
// availableDeliveryWindows: [],
// deliveryWindow: null,
// price: 334,
// listPrice: 334,
// tax: 0,
// pickupStoreInfo: {
// isPickupStore: false,
// friendlyName: null,
// address: null,
// additionalInfo: null,
// dockId: null,
// },
// },
// {
// id: 'Expressa',
// deliveryChannel: 'delivery',
// name: 'Expressa',
// deliveryIds: [[Object]],
// shippingEstimate: '2d',
// shippingEstimateDate: null,
// lockTTL: null,
// availableDeliveryWindows: [],
// deliveryWindow: null,
// price: 6666,
// listPrice: 6666,
// tax: 0,
// pickupStoreInfo: {
// isPickupStore: false,
// friendlyName: null,
// address: null,
// additionalInfo: null,
// dockId: null,
// },
// },
// ],
// shipsTo: ['BRA'],
// itemId: '100006784',
// deliveryChannels: [[Object], [Object]],
// },
// {
// selectedSla: '',
// selectedDeliveryChannel: '',
// itemIndex: 1,
// addressId: '62e1db5500824a66bcef708d09388a8e',
// slas: [
// {
// id: 'Normal',
// deliveryChannel: 'delivery',
// name: 'Normal',
// deliveryIds: [[Object]],
// shippingEstimate: '16bd',
// shippingEstimateDate: null,
// lockTTL: null,
// availableDeliveryWindows: [],
// deliveryWindow: null,
// price: 333,
// listPrice: 333,
// tax: 0,
// pickupStoreInfo: {
// isPickupStore: false,
// friendlyName: null,
// address: null,
// additionalInfo: null,
// dockId: null,
// },
// },
// {
// id: 'Expressa',
// deliveryChannel: 'delivery',
// name: 'Expressa',
// deliveryIds: [[Object]],
// shippingEstimate: '2d',
// shippingEstimateDate: null,
// lockTTL: null,
// availableDeliveryWindows: [],
// deliveryWindow: null,
// price: 6667,
// listPrice: 6667,
// tax: 0,
// pickupStoreInfo: {
// isPickupStore: false,
// friendlyName: null,
// address: null,
// additionalInfo: null,
// dockId: null,
// },
// },
// ],
// shipsTo: ['BRA'],
// itemId: '100006786',
// deliveryChannels: [{ id: 'delivery' }, { id: 'pickup-in-point' }],
// },
// {
// selectedSla: '',
// selectedDeliveryChannel: '',
// itemIndex: 2,
// addressId: '62e1db5500824a66bcef708d09388a8e',
// slas: [
// {
// id: 'Normal',
// deliveryChannel: 'delivery',
// name: 'Normal',
// deliveryIds: [[Object]],
// shippingEstimate: '16bd',
// shippingEstimateDate: null,
// lockTTL: null,
// availableDeliveryWindows: [],
// deliveryWindow: null,
// price: 333,
// listPrice: 333,
// tax: 0,
// pickupStoreInfo: {
// isPickupStore: false,
// friendlyName: null,
// address: null,
// additionalInfo: null,
// dockId: null,
// },
// },
// {
// id: 'Expressa',
// deliveryChannel: 'delivery',
// name: 'Expressa',
// deliveryIds: [[Object]],
// shippingEstimate: '2d',
// shippingEstimateDate: null,
// lockTTL: null,
// availableDeliveryWindows: [],
// deliveryWindow: null,
// price: 6667,
// listPrice: 6667,
// tax: 0,
// pickupStoreInfo: {
// isPickupStore: false,
// friendlyName: null,
// address: null,
// additionalInfo: null,
// dockId: null,
// },
// },
// ],
// shipsTo: ['BRA'],
// itemId: '100006785',
// deliveryChannels: [{ id: 'delivery' }, { id: 'pickup-in-point' }],
// },
// ]
estimateShipping.selectFastestSlaForAllItems(logisticsInfo)
```