Repository URL to install this package:
|
Version:
0.0.15 ▾
|
import { autofixSafe as autofix } from '@exotic/presets';
import { toBoolean, isNonEmptyArray } from 'exotic';
import { getTyped } from 'composition';
import { wording } from './fixture';
const objToString = (obj) => {
const objString = {
value: '',
};
Object.keys(obj).forEach(key => {
if (key !== 'label' && key !== '__typename') {
objString.value += obj[key] + ' ';
}
});
return objString.value;
};
const transformCard = (card) => {
const { lastfourdigits, expirationmonth, expirationyear } = card;
const paymentMethod = lastfourdigits && expirationmonth && expirationyear
? '"' +
wording.visaEnding +
' *' +
lastfourdigits +
wording.expire +
expirationmonth +
'/' +
expirationyear.slice(-2) +
'"'
: '';
return paymentMethod;
};
const transformAddress = (address) => {
const { addressLine1, addressLine2, city, state, country, postalCode } = address;
const userAddress = [addressLine1, addressLine2, city, state, country, postalCode];
const addressValue = userAddress.filter(data => data);
const addressMethod = '"' + addressValue.join(',') + '"';
return addressMethod;
};
const isDefaultPayment = (card) => toBoolean(card.isdefault) === true;
const isDefaultAddress = (address) => toBoolean(address.isDefault) === true;
const emptyCsv = (text) => {
// const formatData = [text, '']
// const csv = formatData.join(',') + '\n'
const csv = `${text},\n`;
return csv;
};
const transformProfileData = (props, addressInfo, profileDetails) => {
const profileInformation = {
csv: '',
paymentDetails: [],
addressDetails: [],
};
const basicDetails = (addressCardDetails) => {
const { cards, userinfo } = addressCardDetails;
const addressAndPaymentInfo = {
defaultAddress: '',
defaultPayment: '',
};
/**
* if some data are not available spreadsheet fill the cell with next available data
* so misalignment occurs in exported data to fix that issue defaul data provided (emptyData)
*/
const emptyData = '-';
const { firstName, lastName, phoneNumber, email } = userinfo;
const profileData = wording.profileData;
if (cards.length > 0) {
profileInformation.paymentDetails = cards.map(transformCard);
const defaultPaymentIndex = cards.findIndex(isDefaultPayment);
addressAndPaymentInfo.defaultPayment =
profileInformation.paymentDetails[defaultPaymentIndex] || '';
}
if (addressInfo.length > 0) {
profileInformation.addressDetails = addressInfo.map(transformAddress);
const defaultAddressIndex = addressInfo.findIndex(isDefaultAddress);
addressAndPaymentInfo.defaultAddress =
profileInformation.addressDetails[defaultAddressIndex] || '';
}
const userData = [
firstName || emptyData,
lastName || emptyData,
phoneNumber || emptyData,
email || emptyData,
addressAndPaymentInfo.defaultAddress || emptyData,
addressAndPaymentInfo.defaultPayment || emptyData,
];
for (let i = 0 && profileData.length === userData.length; i < profileData.length; i++) {
const formatData = [profileData[i], userData[i]];
profileInformation.csv += formatData.join(',') + '\n';
}
};
const preferencesDetails = () => {
profileInformation.csv += '\n';
const sendemails = autofix(profileDetails.sendemails) ? 'ON' : 'OFF';
const permission = autofix(profileDetails.permission) ? 'ON' : 'OFF';
const sendSMS = autofix(profileDetails.sendSMS) ? 'ON' : 'OFF';
const emailText = [wording.preferences, sendemails];
profileInformation.csv += emailText.join(',') + '\n';
const permissionText = [wording.permission, permission];
profileInformation.csv += permissionText.join(',') + '\n';
const sendSMSText = [wording.sendSMS, sendSMS];
profileInformation.csv += sendSMSText.join(',') + '\n';
};
const addressPaymentDetails = () => {
profileInformation.csv += '\n';
if (profileInformation.addressDetails.length) {
profileInformation.addressDetails.forEach((addressDetail, index) => {
const formatData = [wording.address + (index + 1), addressDetail];
profileInformation.csv += formatData.join(',') + '\n';
});
}
else {
const emptyData = [wording.address, '-'];
profileInformation.csv += emptyData.join(',') + '\n';
}
profileInformation.csv += '\n';
if (profileInformation.paymentDetails.length) {
profileInformation.paymentDetails.forEach((paymentMethod, index) => {
const formatData = [wording.paymentMethod + (index + 1), paymentMethod];
profileInformation.csv += formatData.join(',') + '\n';
});
}
else {
const emptyData = [wording.paymentMethod, '-'];
profileInformation.csv += emptyData.join(',') + '\n';
}
};
profileInformation.csv = '';
basicDetails(props);
preferencesDetails();
addressPaymentDetails();
return profileInformation.csv;
};
const transformOrderHistory = (orderList) => {
const orderHistory = {
options: [],
fields: [],
csv: '',
};
const orderHistoryHeaders = () => {
const fields = [
'Order #',
'Order Placed',
'Order Status',
'Image URL',
'SKU #',
'Shipping Address',
'Shipping Method',
'Payment Method',
'SKU Quantity',
'Price/Item',
'Estimated Overall Sales Tax for Order',
'Order Total',
];
return fields;
};
const orderHistoryOptions = (orderInfo) => {
const orderItems = orderInfo.productItems[0];
const paymentInfo = '';
const { string } = getTyped(paymentInfo);
const emptyData = '-';
const { array } = getTyped(orderInfo);
const items = array('productItems.0.productItem');
const item = isNonEmptyArray(items) ? items : [];
const orderHistoryOption = item.map(function (product) {
const options = [
orderInfo.orderId || emptyData,
'"' + orderInfo.orderCreatedTime + '"' || emptyData,
orderInfo.status || emptyData,
product.image || emptyData,
product.skuId || emptyData,
objToString(product.shippingAddress) || emptyData,
product.shippingMethod || emptyData,
string('carddetails.cardNumber') || emptyData,
product.quantity || emptyData,
product.price || emptyData,
orderInfo.math.tax || emptyData,
orderInfo.math.grandTotal || emptyData,
];
return options;
});
return orderHistoryOption;
};
const handleOrderHistoryItem = (item) => {
orderHistory.csv += item.join(',') + '\n';
};
// @note this type must be wrong
const handleOrderHistoryList = (option) => {
if (option.length > 1) {
option.forEach(handleOrderHistoryItem);
orderHistory.csv += '\n';
}
else {
orderHistory.csv += option.join(',') + '\n' + '\n';
}
};
orderHistory.csv = '';
orderHistory.options = orderList.orders.map(orderHistoryOptions);
orderHistory.fields = orderHistoryHeaders();
orderHistory.csv = orderHistory.fields.join(',') + '\n';
orderHistory.options.forEach(handleOrderHistoryList);
return orderHistory.csv;
};
export { transformProfileData, transformOrderHistory };
//# sourceMappingURL=transform.js.map