Repository URL to install this package:
|
Version:
2.0.21 ▾
|
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
// import { autofixSafe as autofix } from 'exotic-core'
const chain_able_boost_1 = require("chain-able-boost");
const composition_1 = require("@skava/modules/___dist/composition");
// what is an lpoints vs apoints?!
const isLabelOrName = label => points => points.label === label || points.name === label;
// label:
const isCurrentPoints = isLabelOrName('balance');
const isEarnedPoints = isLabelOrName('totalApprovedPoints');
// name:
const isAdjustedPoints = isLabelOrName('adjustedPoints');
const isRedeemedPoints = isLabelOrName('redeemedPoints');
const isBalancedPoints = isLabelOrName('pendingPoints');
const isSkippedPoints = isLabelOrName('skippedPoints');
// inout
const isTransferredOutPoints = isLabelOrName('transferedOutPoints');
const isTransferredInPoints = isLabelOrName('transferedInPoints');
// approved n such
const isReverseApprovedPoints = isLabelOrName('reversedApprovedPoints');
const isExcludedPoints = isLabelOrName('excludedPoints');
const isCanceledApprovedPoints = isLabelOrName('canceledApprovedPoints');
// isLabelOrName('cappedPoints')
// isLabelOrName('canceledRedeemedPoints')
// isLabelOrName('reverseRedeemedPoints')
// isLabelOrName('expiredPoints')
// isLabelOrName('canceledPoints')
// isLabelOrName('canceledPoints')
// isLabelOrName('forfeitedPoints')
const FAKE_DATE_LIST = Object.freeze([
'01/01/2018',
'02/01/2018',
'05/02/2018',
'04/01/2018',
'28/12/2017',
]);
const dateIterator = chain_able_boost_1.fromArrayToInfiniteIterator(FAKE_DATE_LIST);
const loyaltyTransactionsData = packages => {
const { obj, string, array } = composition_1.getTyped(packages);
const points = array('properties.buyinfo.loyalty.points');
// @todo - prettydate
const date = string('transactionDate.value') || dateIterator.next();
const indexed = {
/**
* Added the same data to both startpoints & earned points
* since seperate data is not availble in the call/fixture
*/
start: points.find(isTransferredOutPoints).value,
earned: points.find(isTransferredInPoints).value,
// @todo unsafe
adjusted: points.find(isAdjustedPoints).value,
redeemed: points.find(isRedeemedPoints).value,
balanced: points.find(isBalancedPoints).value,
};
// autofixSafe(indexed)
return {
// indexedPoints: indexed,
startPoints: indexed.start,
earnedPoints: indexed.earned,
date,
transactionDate: date,
adjustedPoints: indexed.adjusted,
redeemedPoints: indexed.redeemed,
balancedPoints: indexed.balanced,
};
};
const loyaltyPointsTransform = response => {
console.log('loyaltyPointsTransform', response);
const { array, obj, string, number } = composition_1.getTyped(response);
const points = array('properties.userinfo[0].math.points');
const current = points.find(isCurrentPoints);
const earned = points.find(isEarnedPoints);
const transformed = {
type: string('type'),
// count: obj('properties.state.count'),
count: number('properties.state.count'),
points,
// @todo fix casing
currentpoints: current,
earnedpoints: earned,
};
return transformed;
};
const loyaltyTransactionTransform = response => {
// console.dev('loyaltyTransactionTransform', response)
const { string, array, number } = composition_1.getTyped(response);
const packages = array('children.packages');
const loyaltyTransactionResponse = {
type: string('type'),
count: number('properties.state.count'),
// old name: loyaltypointsTableData
transactionList: packages.map(loyaltyTransactionsData),
earnedloyaltypoints: packages.map(loyaltyTransactionsData),
loyaltypackages: packages,
};
return loyaltyTransactionResponse;
};
exports.loyaltyTransactionTransform = loyaltyTransactionTransform;
// unused
// const loyaltyCreateTransactionTransform = response => {
// console.dev('loyaltyCreateTransactionTransform', response)
// const { obj, string } = getTyped(response)
// // this is wrong >>>>
// // this gets passed 'properties.buyinfo.loyalty.points'
// const loyaltyCreateTransactionResponse = {
// type: string('type'),
// responseMessage: string('responseMessage'),
// properties: obj('properties'),
// responseCode: string('responseCode'),
// }
// return loyaltyCreateTransactionResponse
// }
const loyaltyTransform = response => {
// console.dev('inside transaction transform 0', response)
const { obj } = composition_1.getTyped(response);
const transaction = obj('transaction');
const loyalty = obj('loyaltyPoints');
const create = obj('createloyaltyTransaction');
const loyaltyResponse = {
transaction: loyaltyTransactionTransform(transaction),
loyaltyPoints: loyaltyPointsTransform(loyalty),
};
return loyaltyResponse;
};
exports.loyaltyTransform = loyaltyTransform;
// generateRedemption?
// side effect free, as all transforms
// * 2 || * 1/2
const multiplierIterator = chain_able_boost_1.fromArrayToInfiniteIterator([1 / 2, 2]);
const generateLoyaltyTransactionsList = transformed => {
const multiplier = +multiplierIterator.next();
// console.dev(multiplierIterator, multiplier, 'mmmmmmmmmmmmm')
const { startPoints, earnedPoints, transactionDate, redeemedPoints, adjustedPoints, balancedPoints, } = transformed;
const transaction = {
startPoints,
earnedPoints,
adjustedPoints,
redeemedPoints,
balancedPoints,
};
Object.keys(transaction).forEach(key => {
// * multiplier...
if (multiplier > 1) {
transaction[key] = transaction[key] + 1;
}
else {
transaction[key] = transaction[key] - 1;
}
});
// @todo missing on type?
transaction.transactionDate = dateIterator.next();
// return autofixSafe(transaction)
return transaction;
// just generating list
// return {
// // ...transformed,
// ...transaction,
// }
};
const generateLoyaltyTransactionsFrom = listOfLists => {
return listOfLists.map(generateLoyaltyTransactionsList);
};
exports.generateLoyaltyTransactionsFrom = generateLoyaltyTransactionsFrom;
exports.default = loyaltyTransform;
//# sourceMappingURL=transform.js.map