Repository URL to install this package:
|
Version:
1.2.7 ▾
|
import { autofixSafe } from 'exotic'
import { fromArrayToInfiniteIterator } from 'chain-able'
import { getTyped } from '@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 = fromArrayToInfiniteIterator(FAKE_DATE_LIST)
const loyaltyTransactionsData = packages => {
const { obj, string, array } = 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 } = 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,
// =>
// currentPoints: current,
// earnedPoints: earned,
// testPoints: JSON.stringify(response),
}
return transformed
}
const loyaltyTransactionTransform = response => {
// console.dev('loyaltyTransactionTransform', response)
const { string, array, number } = 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
}
// 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 } = getTyped(response)
const transaction = obj('transaction')
const loyalty = obj('loyaltyPoints')
const create = obj('createloyaltyTransaction')
const loyaltyResponse = {
transaction: loyaltyTransactionTransform(transaction),
loyaltyPoints: loyaltyPointsTransform(loyalty),
}
return loyaltyResponse
}
// generateRedemption?
// side effect free, as all transforms
// * 2 || * 1/2
const multiplierIterator = 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
}
})
transaction.transactionDate = dateIterator.next()
return autofixSafe(transaction)
// just generating list
// return {
// // ...transformed,
// ...transaction,
// }
}
const generateLoyaltyTransactionsFrom = listOfLists => {
return listOfLists.map(generateLoyaltyTransactionsList)
}
export {
loyaltyTransform,
loyaltyTransactionTransform,
generateLoyaltyTransactionsFrom,
}
export default loyaltyTransform