Repository URL to install this package:
|
Version:
9.0.35-framework ▾
|
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
/* eslint max-statements: "OFF" */
const date_fns_1 = require("date-fns");
const composition_1 = require("composition");
const exotic_1 = require("exotic");
/**
* @todo - add getImmutableTyped, or getFrozenTyped, or array.frozen()
*/
const utils_1 = require("@skava/utils");
const ORDER_STATUS_LABEL = {
NONE: 'None',
ONHOLD: 'On hold',
SUBMITTED: 'Submitted',
READYTOEDIT: 'Ready to edit',
FREEZEEDIT: 'Freeze edit',
SUBMITTEDTOFULFILMENT: 'Submitted to fulfillment',
READYTOSHIP: 'Ready to ship',
SHIPPED: 'Shipped',
RETURNSUBMITTED: 'Return submitted',
UNABLETOSHIP: 'Unable to ship',
// Cancelled in India/British english
CANCELED: 'Canceled',
DELIVERED: 'Delivered',
STANDARD_DELIVERY: 'Standard Delivery',
};
function formatOrderStatus(status) {
/**
* @todo @fixme @invalid
* @note @ganesh
* this is bad performance
* obviously was copied from formatPrice which is @deprecated
* this is not a reusable util, this is a domain specific data
*/
if (exotic_1.isString(status)) {
return ORDER_STATUS_LABEL[status] || exotic_1.EMPTY_STRING;
}
else {
return 'N/A';
}
}
function fixStringyBooleans(x) {
switch (x) {
case 'true':
return true;
break;
case 'TRUE':
return true;
case 'false':
return false;
case 'FALSE':
return false;
default:
return x;
break;
}
}
// @todo use the util from deps (once this kinda util moved to deps ;p)
function toPrettyDate(date, dateFormat = 'MMM DD, YYYY') {
if (date) {
const ms = parseInt(date);
const actualDate = date_fns_1.getTime(ms);
return date_fns_1.format(actualDate, dateFormat);
}
return Date.now();
}
/**
* @todo @fixme @james @unsafe
*/
function parseInvalidJSON(x) {
if (exotic_1.isString(x) === false) {
return x;
}
const value = x.replace(/\\/g, '');
return JSON.parse(value);
}
const isLabelCreatedAt = item => item.label === 'createdtime';
const isLabelName = data => data.label === 'name';
const getMath = math => {
const { string } = composition_1.getTyped(math);
const getPrice = path => {
// number
const value = string(path);
return utils_1.formatPrice(value, '$');
};
const grandTotal = () => {
const total = string('totalSale');
const tax = string('tax');
const grandTotal = exotic_1.toNumber(total) + exotic_1.toNumber(tax);
return utils_1.formatPrice(grandTotal, '$');
};
/**
* @todo - this is unclear
*/
const transformedMath = {
subTotal: getPrice('sale'),
giftSale: getPrice('giftsale'),
tax: getPrice('tax'),
shippingCharge: getPrice('fulfilsale'),
shippingTax: getPrice('fulfiltax'),
discount: getPrice('discount'),
total: getPrice('totalSale'),
grandTotal: grandTotal(),
// all numbers...
// There is no coupontotal coming from the API...?
couponTotal: getPrice('coupontotal') || 0,
};
return transformedMath;
};
const toPaymentDetails = payment => {
const { obj } = composition_1.getTyped(payment);
// this seems like an invalid invariant
const cardDetails = obj('properties.paymentcardinfo.additionalinfo[0]');
const additionalInfo = obj('properties.creditcardinfo[0].cards[0].additionalinfo');
const transformed = {
carddetails: parseInvalidJSON(cardDetails.value),
name: additionalInfo.find(isLabelName),
};
return transformed;
};
exports.toPaymentDetails = toPaymentDetails;
const filterProductType = product => {
return product.type === 'SKU';
};
const filterShippingType = product => {
return product.type === 'SHIPPING';
};
const findHasShipped = flags => {
const found = flags.find(flag => {
return flag.label === 'shipped';
});
return fixStringyBooleans(found.value);
};
const toShippingDetail = detail => {
const { array, obj, string } = composition_1.getTyped(detail);
const price = string('properties.cartinfo.total');
const hasShipped = findHasShipped(array('properties.iteminfo.flags'));
const shippingaddress = array('properties.userinfo');
return {
price: utils_1.formatPrice(price, '$'),
shippingaddress,
hasShipped,
};
};
const toProductDetail = product => {
const { array, string, number, obj } = composition_1.getTyped(product);
const price = string('properties.cartinfo.total');
const shippingmethod = string('properties.cartinfo.shippingmethods.0.name');
const shippingaddress = array('properties.userinfo');
return {
identifier: string('properties.iteminfo.psvid'),
skuid: string('identifier'),
name: string('name'),
image: string('image'),
quantity: number('properties.iteminfo.cartinfo.quantity'),
// @todo - money
price: utils_1.formatPrice(price, '$'),
skuinfo: obj('properties.skuinfo'),
shippingmethod,
shippingaddress,
};
};
exports.toProductDetail = toProductDetail;
const toPackage = pkg => {
const { array, string, number, obj } = composition_1.getTyped(pkg);
const getPrice = path => {
const value = string(path);
return utils_1.formatPrice(value, '$');
};
const getStatus = path => {
const status = string('properties.state.status');
return formatOrderStatus(status);
};
const orderPlacedOnLabelValue = array('properties.state.additionalinfo').find(isLabelCreatedAt) || exotic_1.EMPTY_OBJ;
/**
* @todo @invalid @fixme unsafe
*/
const properties = {
buyinfo: obj('properties.buyinfo'),
cartinfo: obj('properties.cartinfo'),
iteminfo: obj('properties.iteminfo'),
state: obj('properties.state'),
math: obj('properties.math'),
orderinfo: obj('properties.orderinfo'),
userinfo: obj('properties.userinfo[0]'),
};
const products = array('children.products')
.filter(filterProductType)
.map(toProductDetail);
const shipping = array('children.products')
.filter(filterShippingType)
.map(toShippingDetail);
return {
orderTotalAmount: getPrice('properties.math.totalSale'),
orderTotalItems: number('properties.state.count') || products.length,
orderId: string('properties.orderinfo.orderId'),
orderCreatedTime: toPrettyDate(orderPlacedOnLabelValue.value),
status: getStatus('properties.state.status'),
products,
shipping,
math: getMath(obj('properties.math')),
properties,
};
};
exports.toPackage = toPackage;
const transformDetailOrders = response => {
const { array, number, string } = composition_1.getTyped(response);
const ordersResponse = {
state: {
// autofix(properties.state)
statuscode: number('properties.state.statuscode'),
offset: number('properties.state.offset'),
count: number('properties.state.count'),
status: number('properties.state.status'),
},
packages: array('children.packages').map(toPackage),
payments: array('children.payments'),
paymentcardinfo: array('children.payments').map(toPaymentDetails),
};
return ordersResponse;
};
exports.transformDetailOrders = transformDetailOrders;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmb3JtT3JkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvZ3JhcGhxbC1tb2R1bGVzL29tcy9zdHJlYW0vZW5kcG9pbnRzL3RyYW5zZm9ybU9yZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsa0NBQWtDO0FBQ2xDLHVDQUEwQztBQUMxQyw2Q0FBMkM7QUFDM0MsbUNBQW9FO0FBQ3BFOztHQUVHO0FBQ0gsd0NBQTBDO0FBRTFDLE1BQU0sa0JBQWtCLEdBQUc7SUFDekIsSUFBSSxFQUFFLE1BQU07SUFDWixNQUFNLEVBQUUsU0FBUztJQUNqQixTQUFTLEVBQUUsV0FBVztJQUN0QixXQUFXLEVBQUUsZUFBZTtJQUM1QixVQUFVLEVBQUUsYUFBYTtJQUN6QixxQkFBcUIsRUFBRSwwQkFBMEI7SUFDakQsV0FBVyxFQUFFLGVBQWU7SUFDNUIsT0FBTyxFQUFFLFNBQVM7SUFDbEIsZUFBZSxFQUFFLGtCQUFrQjtJQUNuQyxZQUFZLEVBQUUsZ0JBQWdCO0lBQzlCLHFDQUFxQztJQUNyQyxRQUFRLEVBQUUsVUFBVTtJQUNwQixTQUFTLEVBQUUsV0FBVztJQUN0QixpQkFBaUIsRUFBRSxtQkFBbUI7Q0FDdkMsQ0FBQTtBQUNELFNBQVMsaUJBQWlCLENBQUMsTUFBdUM7SUFDaEU7Ozs7OztPQU1HO0lBQ0gsSUFBSSxpQkFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1FBQ3BCLE9BQU8sa0JBQWtCLENBQUMsTUFBTSxDQUFDLElBQUkscUJBQVksQ0FBQTtLQUNsRDtTQUFNO1FBQ0wsT0FBTyxLQUFLLENBQUE7S0FDYjtBQUNILENBQUM7QUFFRCxTQUFTLGtCQUFrQixDQUFDLENBQTRDO0lBQ3RFLFFBQVEsQ0FBQyxFQUFFO1FBQ1QsS0FBSyxNQUFNO1lBQ1QsT0FBTyxJQUFJLENBQUE7WUFDWCxNQUFLO1FBQ1AsS0FBSyxNQUFNO1lBQ1QsT0FBTyxJQUFJLENBQUE7UUFDYixLQUFLLE9BQU87WUFDVixP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