954 lines
32 KiB
JavaScript
954 lines
32 KiB
JavaScript
/* eslint-disable no-alert, no-console , no-debugger */
|
|
import { getDomain, getCookieByName, removeCookieByName } from "@/services/auth";
|
|
|
|
export const doFormatAddress = (address) => {
|
|
let newaddress = address.streetNoOne + " " + address.city + " " + address.regionId + " " + address.countryId;
|
|
return newaddress;
|
|
};
|
|
export const fetchStates = (countryId, countryWiseStates) => {
|
|
let oneCountry = countryWiseStates.filter(
|
|
states => {
|
|
return states.id == countryId;
|
|
}
|
|
);
|
|
if (oneCountry.length > 0 && oneCountry[0].availableRegions) {
|
|
let allStates = oneCountry[0].availableRegions.map(val => {
|
|
return {
|
|
value: val.id,
|
|
label: val.name
|
|
};
|
|
});
|
|
return allStates;
|
|
} else {
|
|
return [{ "value": "", "label": "No States Found" }];
|
|
}
|
|
}
|
|
|
|
export const attribute = (customAttributes, attributeCode, productAttributes) => {
|
|
if (productAttributes.items && customAttributes) {
|
|
let result = customAttributes.filter(element => {
|
|
return element.attributeCode === attributeCode;
|
|
});
|
|
if (result.length > 0) {
|
|
let val = result[0].value; //254 //uom
|
|
let newValue = productAttributes.items.filter(elements => {
|
|
return elements.attributeCode === attributeCode
|
|
});
|
|
let filter = newValue[0].options.filter(elementNew => {
|
|
return elementNew.value === val
|
|
});
|
|
if (filter.length > 0) {
|
|
return filter[0].label;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
export const customAttributeValueNew = (customAttributes, attributeCode) => {
|
|
let result = customAttributes.filter(element => {
|
|
return element.ac === attributeCode;
|
|
});
|
|
if (result[0])
|
|
return result[0].v;
|
|
else return '';
|
|
}
|
|
export const customAttributeValue = (customAttributes, attributeCode) => {
|
|
let result = customAttributes.filter(element => {
|
|
return element.attributeCode === attributeCode;
|
|
});
|
|
if (result[0])
|
|
return result[0].value;
|
|
else return '';
|
|
}
|
|
|
|
export const getLable = (customAttributes, attributeCode) => {
|
|
let result = customAttributes.filter(element => {
|
|
return element.attributeCode === attributeCode;
|
|
});
|
|
if (result[0])
|
|
return result[0].label;
|
|
else return '';
|
|
}
|
|
|
|
export const getMeta = (data) => {
|
|
let metaObj = {};
|
|
if (data) {
|
|
data.filter(element => {
|
|
if (element.attributeCode === "meta_title")
|
|
metaObj.title = element.value;
|
|
if (element.attributeCode === "meta_description")
|
|
metaObj.description = element.value;
|
|
if (element.attributeCode === "meta_keywords")
|
|
metaObj.keywords = element.value;
|
|
if (element.attributeCode === "meta_keyword")
|
|
metaObj.keywords = element.value;
|
|
});
|
|
}
|
|
|
|
return metaObj;
|
|
}
|
|
export const getCategoryOne = (list, categoryId) => {
|
|
let result = list.filter(element => {
|
|
return element.id === categoryId;
|
|
});
|
|
if (result[0])
|
|
return result[0];
|
|
else return '';
|
|
}
|
|
export const commonValidationRules = {
|
|
noRules: [],
|
|
passwordRule: [
|
|
v => !!v || "Password is required",
|
|
v => /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[^a-zA-Z0-9])(?!.*\s).{8,}$/.test(v) || "Password must contain atleast one lowercase, one uppercase, one digit and one special character"
|
|
],
|
|
}
|
|
export const goToCategoryPage = (vm, category, subCategory, subChlid, categoryId) => {
|
|
vm.$router
|
|
.push({
|
|
name: "CategoryPage",
|
|
params: {
|
|
category: category,
|
|
subCategory: subCategory,
|
|
subChlid: subChlid
|
|
},
|
|
query: {
|
|
"pageNumber": 1,
|
|
"pageSize": "9",
|
|
"sortBy": "position",
|
|
//"category": categoryId,
|
|
"filter": 'e30='
|
|
},
|
|
meta: {
|
|
id: categoryId
|
|
}
|
|
}).catch(error => {
|
|
error;
|
|
});
|
|
}
|
|
export const goToCategoryPageRouting = (vm, category) => {
|
|
vm.$router
|
|
.push({
|
|
name: category.n + "_" + category.id,
|
|
/* query: {
|
|
"pageNumber": 1,
|
|
"pageSize": "9",
|
|
"sortBy": "position",
|
|
"filter": 'e30='
|
|
},*/
|
|
}).catch(error => {
|
|
error;
|
|
});
|
|
}
|
|
|
|
function getlabelValue(customAttributes, attributeCode) {
|
|
let result = customAttributes.filter(element => {
|
|
return element.attributeCode === attributeCode;
|
|
});
|
|
if (result[0])
|
|
return result[0].label;
|
|
else return '';
|
|
}
|
|
|
|
function getlabelValuePurchase(customAttributes) {
|
|
try {
|
|
let label = JSON.parse(customAttributes);
|
|
if (label)
|
|
return label.label;
|
|
else return '';
|
|
} catch (error) {
|
|
console.log("error", error);
|
|
return "";
|
|
}
|
|
|
|
}
|
|
export const getCategoriesPurchase = (product) => {
|
|
try {
|
|
let categoryLink = product.extensionAttributes.categoryLinks;
|
|
for (let i = 0; i < 2; i++) {
|
|
let newVal = JSON.parse(categoryLink[i]);
|
|
if (newVal) {
|
|
return newVal.category_name;
|
|
}
|
|
}
|
|
} catch (error) {
|
|
console.log("error", error);
|
|
return "";
|
|
}
|
|
|
|
return "";
|
|
}
|
|
|
|
export const googleAanalytics = (vm, res, productDetails, qtyNew, action, name) => {
|
|
setTimeout(() => {
|
|
let catName = null;
|
|
|
|
if (getCookieByName(res.item_id)) {
|
|
catName = getCookieByName(res.item_id)
|
|
catName = catName.split(':')[0];
|
|
}
|
|
|
|
else if (productDetails.extensionAttribute.catagoryLinks[0]) {
|
|
catName = productDetails.extensionAttribute.catagoryLinks[0].categoryName;
|
|
}
|
|
let gtag = window.gtag ? window.gtag : null;
|
|
if (gtag) {
|
|
gtag('event', action, {
|
|
"items": [{
|
|
'id': productDetails.sku,
|
|
'name': productDetails.name,
|
|
'category': catName,
|
|
'brand': getlabelValue(productDetails.customAttribute, "brand"),
|
|
'price': res.price,
|
|
'quantity': qtyNew
|
|
}]
|
|
});
|
|
}
|
|
|
|
console.log("google analytics called ", action, name);
|
|
}, 500)
|
|
|
|
|
|
}
|
|
export const googleAanalyticsEventRemoveCart = (action, productDetails) => {
|
|
let gtag = window.gtag ? window.gtag : null;
|
|
if (gtag) {
|
|
gtag('event', action, {
|
|
"items": [{
|
|
'id': productDetails.sku,
|
|
'name': productDetails.name,
|
|
//'category': category,
|
|
//'brand': getlabelValue(productDetails.customAttribute, "brand"),
|
|
'price': productDetails.price,
|
|
'quantity': productDetails.qty
|
|
}]
|
|
});
|
|
}
|
|
console.log("google analytics called ", action);
|
|
}
|
|
export const googleAanalyticsEventSelectContent =async (action, productDetails,categoryId) => {
|
|
let category = ''
|
|
let listName = ''
|
|
if (categoryId) {
|
|
listName = "Category Results"
|
|
category = await getCatPath(categoryId)
|
|
} else {
|
|
listName = "Search Results"
|
|
category = "Search"
|
|
}
|
|
let gtag = window.gtag ? window.gtag : null;
|
|
if (gtag) {
|
|
let item = []
|
|
let productPrice = ''
|
|
if (productDetails.lp) {
|
|
productPrice = productDetails.lp
|
|
} else {
|
|
if (productDetails.sp) {
|
|
productPrice = roundUp(productDetails.sp)
|
|
} else if (productDetails.p != 0) {
|
|
productPrice = productDetails.p
|
|
}
|
|
}
|
|
item.push({
|
|
'id': productDetails.sku,
|
|
'name': productDetails.n,
|
|
'list_name': listName,
|
|
'brand': productDetails.b,
|
|
'category':category,
|
|
'variant': productDetails.dc,
|
|
'price': productPrice,
|
|
//'quantity': productDetails.qty
|
|
})
|
|
|
|
if (item.length > 0) {
|
|
gtag('event', action, {
|
|
"content_type": "product",
|
|
"items": item
|
|
});
|
|
}
|
|
}
|
|
console.log("google analytics called ", action);
|
|
}
|
|
export const criteoForProductList = (productList) => {
|
|
let productIds = [];
|
|
if (productList.length) {
|
|
for (let p = 0; p < productList.length; p++) {
|
|
productIds.push(productList[p].id);
|
|
if (p == 2) break;
|
|
}
|
|
window.criteo_q.push(
|
|
{ event: "viewList", item: productIds }
|
|
);
|
|
console.log("view product list", productIds);
|
|
// checkDataLayerPropDuplication("ListingPage", "ProductIDList", productIds);
|
|
}
|
|
};
|
|
export const criteoForCurrentProduct = (productId) => {
|
|
if (productId) {
|
|
window.criteo_q.push(
|
|
{ event: "viewItem", item: productId }
|
|
);
|
|
console.log("view product", productId);
|
|
// checkDataLayerPropDuplication("ProductPage", "ProductID", productId);
|
|
}
|
|
};
|
|
export const criteoUpdateUserEmail = (email) => {
|
|
window.criteo_q.push(
|
|
{ event: "setEmail", email: email }
|
|
);
|
|
console.log("user email", email);
|
|
};
|
|
export const criteoViewBasket = (list) => {
|
|
let items = [];
|
|
for (let i = 0; i < list.length; i++) {
|
|
let item = list[i];
|
|
items.push(
|
|
{ id: item.stockDetails.productId, price: item.price, quantity: item.qty }
|
|
);
|
|
}
|
|
if (items.length > 0) {
|
|
window.criteo_q.push(
|
|
{
|
|
event: "viewBasket",
|
|
item: items
|
|
});
|
|
}
|
|
|
|
console.log("view basket", items);
|
|
};
|
|
export const listrakCartList = (list) => {
|
|
let items = [];
|
|
for (let i = 0; i < list.length; i++) {
|
|
let productDetails = list[i];
|
|
if (window._ltk) {
|
|
|
|
window._ltk.SCA.AddItemWithLinks(productDetails.sku, productDetails.qty, productDetails.price, productDetails.name, productDetails.customAttributes.image, productDetails.customAttributes.urlKey);
|
|
window._ltk.SCA.Submit();
|
|
console.log("listrak add to cart event called ", productDetails.sku, productDetails.qty, productDetails.price, productDetails.name, productDetails.customAttributes.image, productDetails.customAttributes.urlKey);
|
|
}
|
|
|
|
}
|
|
|
|
console.log("view basket", items);
|
|
};
|
|
export const listrakCartListClear = () => {
|
|
if (window._ltk) {
|
|
window._ltk.SCA.ClearCart();
|
|
}
|
|
console.log("listrak Clear Cart called");
|
|
};
|
|
export const googleAanalyticsPurchase = (resp, incrementId) => {
|
|
|
|
let items = [];
|
|
let purchasedProductList = [];
|
|
for (let i = 0; i < resp.items.length; i++) {
|
|
let item = resp.items[i];
|
|
let catName = "";
|
|
|
|
if (getCookieByName(item.quoteItemId)) {
|
|
catName = getCookieByName(item.quoteItemId)
|
|
catName = catName.split(':')[0];
|
|
removeCookieByName(item.quoteItemId)
|
|
}
|
|
else if (item.extensionAttributes["categoryLinks"]) {
|
|
try {
|
|
let categoryLink = JSON.parse(item.extensionAttributes["categoryLinks"][0]);
|
|
catName = categoryLink.category_name;
|
|
|
|
} catch (error) {
|
|
console.log("error", error);
|
|
}
|
|
|
|
}
|
|
|
|
items.push({
|
|
'id': item.sku,
|
|
'name': item.name,
|
|
'category': catName,
|
|
'brand': getlabelValuePurchase(item.extensionAttributes.customAttributes),
|
|
'price': item.price,
|
|
'quantity': item.qtyOrdered
|
|
})
|
|
purchasedProductList.push(
|
|
{ id: item.productId, price: item.price, quantity: item.qtyOrdered }
|
|
);
|
|
}
|
|
|
|
// let gtag = window.gtag ? window.gtag : null;
|
|
// if (gtag) {
|
|
// gtag('event', 'purchase', {
|
|
// 'transaction_id': incrementId,
|
|
// 'affiliation': 'Crane',
|
|
// 'value': resp.baseSubtotal,
|
|
// 'tax': resp.taxAmount,
|
|
// 'shipping': resp.shippingInclTax,
|
|
// 'coupon': resp.couponCode ? resp.couponCode : '',
|
|
// "items": items
|
|
// });
|
|
// }
|
|
|
|
|
|
window.dataLayer = window.dataLayer || [];
|
|
|
|
window.dataLayer.push({
|
|
'event': 'purchase',
|
|
'ecommerce': {
|
|
'purchase': {
|
|
"actionField": { "id": incrementId, "affiliation": "Crane", "revenue": resp.baseSubtotal, "tax": resp.taxAmount, "shipping": resp.shippingInclTax, 'coupon': resp.couponCode ? resp.couponCode : '' },
|
|
'products': items
|
|
}
|
|
}
|
|
});
|
|
|
|
// window.dataLayer.push({
|
|
// 'event': 'purchase',
|
|
// 'ecommerce': {
|
|
// 'purchase': {
|
|
// "actionField": { "id": incrementId, "affiliation": "Crane", "revenue": resp.baseSubtotal, "tax": resp.taxAmount, "shipping": resp.shippingInclTax, 'coupon': resp.couponCode ? resp.couponCode : '' },
|
|
// 'transaction_id': incrementId,
|
|
// 'affiliation': 'Crane',
|
|
// 'value': resp.baseSubtotal,
|
|
// 'tax': resp.taxAmount,
|
|
// 'shipping': resp.shippingInclTax,
|
|
// 'coupon': resp.couponCode ? resp.couponCode : '',
|
|
// 'items': items
|
|
// }
|
|
// }
|
|
// });
|
|
|
|
// let dlObjects = [{
|
|
// "pageName": "Success Page",
|
|
// "pageType": "purchase",
|
|
// "ecommerce": {
|
|
// "purchase": {
|
|
// "actionField": { "id": incrementId, "affiliation": "Crane", "revenue": resp.baseSubtotal, "tax": resp.taxAmount, "shipping": resp.shippingInclTax, 'coupon': resp.couponCode ? resp.couponCode : '' },
|
|
// "products": items
|
|
// },
|
|
// "currencyCode": resp.orderCurrencyCode
|
|
// }
|
|
// }];
|
|
// console.log("dlObjects", dlObjects);
|
|
|
|
// for (let i in dlObjects) {
|
|
// window.dataLayer.push(dlObjects[i]);
|
|
// }
|
|
|
|
//criteo tag - purchase order
|
|
window.criteo_q.push(
|
|
{
|
|
event: "trackTransaction",
|
|
id: incrementId,
|
|
item: purchasedProductList
|
|
});
|
|
|
|
// let purchasedDlObjects = {
|
|
// "pageType": "TransactionPage",
|
|
// "ProductBasketProducts": purchasedProductList,
|
|
// "TransactionID": incrementId
|
|
// }
|
|
// window.dataLayer.push(purchasedDlObjects);
|
|
console.log("criteo track transaction ", purchasedProductList);
|
|
console.log("Track transaction id ", incrementId);
|
|
|
|
if (window._ltk) {
|
|
window._ltk.Order.SetCustomer(resp.customerEmail, resp.customerFirstname, resp.customerLastname);
|
|
window._ltk.Order.OrderNumber = incrementId;
|
|
window._ltk.Order.ItemTotal = resp.baseSubtotal;
|
|
window._ltk.Order.ShippingTotal = resp.shippingInclTax;
|
|
window._ltk.Order.TaxTotal = resp.baseTaxAmount;
|
|
window._ltk.Order.HandlingTotal = '0.00';
|
|
window._ltk.Order.OrderTotal = resp.baseGrandTotal;
|
|
|
|
for (let i = 0; i < resp.items.length; i++) {
|
|
let item = resp.items[i];
|
|
window._ltk.Order.AddItem(item.sku, item.qtyOrdered, item.price); // one line per item ordered
|
|
}
|
|
window._ltk.Order.Submit();
|
|
console.log("listrak purchased event called", resp);
|
|
|
|
window._ltk.SCA.Update("email", resp.customerEmail);
|
|
console.log("listrak email event called", resp.customerEmail);
|
|
window._ltk.SCA.ClearCart();
|
|
}
|
|
}
|
|
export const getCatPath = async (catId) => {
|
|
let path = '';
|
|
let categoryDetailsList = window.craneCatalog;
|
|
let categoryOne = await getCategoryOne(
|
|
categoryDetailsList.allCategoryDetails,
|
|
Number(catId)
|
|
);
|
|
if (categoryOne) {
|
|
path = categoryOne.n;
|
|
}
|
|
|
|
return path;
|
|
}
|
|
export const googleAanalyticsEventPDP = async (productDetails, action, categoryId) => {
|
|
let catName = '';
|
|
if (categoryId) {
|
|
catName = await getCatPath(categoryId);
|
|
}
|
|
else {
|
|
if (productDetails.extensionAttribute.catagoryLinks[0]) {
|
|
let catId = productDetails.extensionAttribute.catagoryLinks[0].catagoryId;
|
|
catName = await getCatPath(catId);
|
|
}
|
|
}
|
|
|
|
let gtag = window.gtag ? window.gtag : null;
|
|
if (gtag) {
|
|
gtag('event', action, {
|
|
'event_category': "ecommerce",
|
|
"items": [{
|
|
'id': productDetails.sku,
|
|
'name': productDetails.name,
|
|
'category': catName,
|
|
'brand': getlabelValue(productDetails.customAttribute, "brand"),
|
|
//'price': productDetails.price,
|
|
//'quantity': qtyNew
|
|
}]
|
|
});
|
|
}
|
|
|
|
console.log("google analytics event called ", action, categoryId, catName);
|
|
if (window._ltk) {
|
|
window._ltk.Activity.AddProductBrowse(productDetails.sku);
|
|
console.log("listrak event called ", productDetails.sku);
|
|
}
|
|
}
|
|
|
|
export const listrakEmailCapture = (email) => {
|
|
if (window._ltk) {
|
|
window._ltk.SCA.Update("email", email)
|
|
console.log("listrak email event called ", email);
|
|
}
|
|
}
|
|
export const googleAanalyticsEvent = (action, category, productDetails) => {
|
|
|
|
let gtag = window.gtag ? window.gtag : null;
|
|
if (gtag) {
|
|
gtag('event', action, {
|
|
'event_category': category,
|
|
'event_label': productDetails.name,
|
|
'value': productDetails.sku
|
|
});
|
|
}
|
|
console.log("google analytics event called ", action);
|
|
}
|
|
export const googleAanalyticsCheckoutAddPaymentInfo = (action, options) => {
|
|
let gtag = window.gtag ? window.gtag : null;
|
|
if (gtag) {
|
|
let itemList = []
|
|
for (let i = 0; i < options.items.length; i++) {
|
|
itemList.push({
|
|
"item_id": options.items[i].sku,
|
|
"item_name": options.items[i].name,
|
|
//"coupon": listName,
|
|
//"discount": options[i].b,
|
|
//"affiliation": category,
|
|
//"item_brand": options[i].customAttributes.brand,
|
|
//"item_category": productPrice,
|
|
//"item_variant":options[i].customAttributes.color,
|
|
"price": options.items[i].price,
|
|
"currency": 'USD',
|
|
"quantity": options.items[i].qtyOrdered
|
|
})
|
|
}
|
|
|
|
gtag('event', 'checkout_progress', {
|
|
"checkout_step": 3,
|
|
"checkout_option": "payment_method",
|
|
"value": 1,
|
|
items: itemList
|
|
});
|
|
|
|
}
|
|
console.log("google analytics called ", action);
|
|
}
|
|
export const googleAanalyticsCheckoutAddShippingInfo = (action, options) => {
|
|
let gtag = window.gtag ? window.gtag : null;
|
|
if (gtag) {
|
|
let itemList = []
|
|
for (let i = 0; i < options.length; i++) {
|
|
itemList.push({
|
|
"item_id": options[i].sku,
|
|
"item_name": options[i].name,
|
|
"price": options[i].price,
|
|
"currency": 'USD',
|
|
"quantity": options[i].qty
|
|
})
|
|
}
|
|
|
|
gtag('event', 'checkout_progress', {
|
|
"checkout_step": 2,
|
|
"checkout_option": "shipping method",
|
|
"value": 3,
|
|
items: itemList
|
|
});
|
|
|
|
}
|
|
console.log("google analytics called ", action);
|
|
}
|
|
export const googleAanalyticsEventCategoryPage = async (productDetails, categoryId) => {
|
|
let gtag = window.gtag ? window.gtag : null;
|
|
let category = ''
|
|
let listName = ''
|
|
if (categoryId) {
|
|
listName = "Category Results"
|
|
category = await getCatPath(categoryId)
|
|
} else {
|
|
listName = "Search Results"
|
|
category = "Search"
|
|
}
|
|
|
|
if (gtag) {
|
|
let itemList = []
|
|
for (let i = 0; i < productDetails.length; i++) {
|
|
let productPrice = ''
|
|
if (productDetails[i].lp) {
|
|
productPrice = productDetails[i].lp
|
|
} else {
|
|
if (productDetails[i].sp) {
|
|
productPrice = roundUp(productDetails[i].sp)
|
|
} else if (productDetails[i].p != 0) {
|
|
productPrice = productDetails[i].p
|
|
}
|
|
}
|
|
itemList.push({
|
|
"id": productDetails[i].sku,
|
|
"name": productDetails[i].n,
|
|
"list_name": listName,
|
|
"brand": productDetails[i].b,
|
|
"category": category,
|
|
"variant": productDetails[i].dc,
|
|
//"list_position": 1,
|
|
//"quantity": 2,
|
|
"price": productPrice
|
|
})
|
|
}
|
|
if (itemList.length > 0) {
|
|
gtag('event', 'view_item_list', {
|
|
"event_category": "ecommerce",
|
|
"items": itemList
|
|
});
|
|
}
|
|
|
|
}
|
|
/*let category=''
|
|
if(categoryId)
|
|
{
|
|
category =await getCatPath(categoryId)
|
|
}else{
|
|
category ="search"
|
|
}
|
|
if(category){
|
|
window.dataLayer = window.dataLayer || [];
|
|
window.dataLayer.push({
|
|
'event':'productFilter',
|
|
'eventCategory':category,
|
|
'eventAction':action,
|
|
'eventLabel':label,
|
|
'eventValue':value
|
|
});
|
|
}*/
|
|
console.log("google analytics event category ", window.dataLayer);
|
|
}
|
|
export const googleAanalyticsCheckout = (action, options) => {
|
|
|
|
let gtag = window.gtag ? window.gtag : null;
|
|
if (gtag) {
|
|
gtag('event', action, {
|
|
...options
|
|
});
|
|
}
|
|
|
|
console.log("google analytics called ", action);
|
|
}
|
|
export const googleAanalyticsEventCategory = (action, category, categoryDetails) => {
|
|
let gtag = window.gtag ? window.gtag : null;
|
|
if (gtag) {
|
|
gtag('event', action, {
|
|
'event_category': category,
|
|
'event_label': categoryDetails.name,
|
|
'value': categoryDetails.id
|
|
});
|
|
}
|
|
console.log("google analytics event called ", {
|
|
'event_category': category,
|
|
'event_label': categoryDetails.name,
|
|
'value': categoryDetails.id
|
|
});
|
|
}
|
|
|
|
export const listrakSubscribe = async (email) => {
|
|
|
|
if (window._ltk) {
|
|
window._ltk.Subscriber.List = "Footer";
|
|
window._ltk.Subscriber.Email = email;
|
|
// window._ltk.Subscriber.Profile.Add("CheckBox.Source.Product Registrations", "on");
|
|
window._ltk.Subscriber.Submit();
|
|
|
|
}
|
|
}
|
|
|
|
export const checkEncodeURI = (str) => {
|
|
try {
|
|
decodeURIComponent(escape(window.atob(str)));
|
|
return true;
|
|
} catch (e) {
|
|
return false;
|
|
}
|
|
}
|
|
export const priceFormatter = (price, pdp) => {
|
|
if (price != undefined) {
|
|
price = price.toString();
|
|
let decimals = (price.split("."))[1];
|
|
if ((!Number(decimals) || isNaN(decimals)) || decimals.length == 1) //if 2 or 2.1
|
|
return Number(price).toFixed(2);
|
|
if (decimals.length == 2 && pdp) //if 2 or 2.1
|
|
return price;
|
|
else if (decimals.length > 1) // if 2.34 or 2.56565
|
|
return Number(price.match(/^-?\d+(?:\.\d{0,2})?/)[0]);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
export const invalidPoBoxAddress = (address) => {
|
|
let containedPoBox = false;
|
|
let addressNew = address.toLowerCase();
|
|
if (addressNew.search("po box") > -1)
|
|
containedPoBox = true;
|
|
else if (addressNew.search("pobox") > -1)
|
|
containedPoBox = true;
|
|
else if (addressNew.search("post office") > -1)
|
|
containedPoBox = true;
|
|
else if (addressNew.search("postoffice") > -1)
|
|
containedPoBox = true;
|
|
else if (addressNew.search("post office box") > -1)
|
|
containedPoBox = true;
|
|
else if (addressNew.search("postofficebox") > -1)
|
|
containedPoBox = true;
|
|
else if (addressNew.search("p.o.box") > -1)
|
|
containedPoBox = true;
|
|
else if (addressNew.search("p.o. box") > -1)
|
|
containedPoBox = true;
|
|
else if (addressNew.search("p. o. box") > -1)
|
|
containedPoBox = true;
|
|
else if (addressNew.search("p o box") > -1)
|
|
containedPoBox = true;
|
|
else
|
|
containedPoBox = false;
|
|
return containedPoBox;
|
|
}
|
|
|
|
|
|
export const getProductArray = (productData, categoryId) => {
|
|
if (productData.allCategoryDetails) {
|
|
let result = productData.allCategoryDetails.filter(element => {
|
|
return element.id === categoryId;
|
|
});
|
|
if (result[0])
|
|
return result[0].p;
|
|
else return '';
|
|
}
|
|
}
|
|
export const getProductsList = (productData, productArray) => {
|
|
let productList = [];
|
|
if (productData.products) {
|
|
for (let i = 0; i < productArray.length; i++) {
|
|
productData.products.filter(element => {
|
|
if (element.sku === productArray[i]) {
|
|
productList.push(element);
|
|
}
|
|
});
|
|
}
|
|
return productList;
|
|
}
|
|
}
|
|
|
|
/* eslint-disable */
|
|
export const checkPromotion = ({ sku, quantity, product, productPartsObjects }) => {
|
|
for (let i = 0; i < promotions.length; i++) {
|
|
let promotion = promotions[i];
|
|
let rules = promotion.promotion_rule;
|
|
promotion.appliedRules = [];
|
|
promotion.exclusive = [];
|
|
promotion.exclusiveRules = [];
|
|
for (let m = 0; m < rules.length; m++) {
|
|
let rule = rules[m];
|
|
let conditions = rule.conditions;
|
|
rule.allCondition = false;
|
|
|
|
if (rule.rule_type == "exclusive")
|
|
promotion.exclusive.push("true");
|
|
|
|
rule.evaluateConditions = [];
|
|
for (let j = 0; j < conditions.length; j++) {
|
|
let condition = conditions[j];
|
|
switch (condition.variable) {
|
|
case "product_sku":
|
|
rule.allCondition = evaluatePredicate(condition.predicate, (condition.value.toLowerCase()), sku.toLowerCase());
|
|
break;
|
|
case "product_tag":
|
|
let tags = condition.value.split(',');
|
|
if (product.tags) {
|
|
const found = tags.some(r => product.tags.indexOf(r) >= 0)
|
|
if (found)
|
|
rule.allCondition = true
|
|
else
|
|
rule.allCondition = false;
|
|
}
|
|
break;
|
|
|
|
case "quantity":
|
|
rule.allCondition = evaluatePredicate(condition.predicate, condition.value, quantity);
|
|
|
|
break;
|
|
|
|
case "Product_part_with_liner":
|
|
let partName = condition.sub_variable;
|
|
let objects = productPartsObjects.filter((obj) => obj.partName.toLowerCase() == partName.toLowerCase())[0];
|
|
if (objects && objects.linerObject && objects.linerObject.selectedLiner) {
|
|
rule.allCondition = true
|
|
}
|
|
else
|
|
rule.allCondition = false;
|
|
break;
|
|
|
|
case "count_of_product_part_press_passes":
|
|
let name = condition.sub_variable;
|
|
let partObjects = productPartsObjects.filter((obj) => obj.partName.toLowerCase() == name.toLowerCase())[0];
|
|
if (partObjects && partObjects.processes) {
|
|
let processes = partObjects.processes;
|
|
if (Object.keys(processes).length)
|
|
rule.allCondition = evaluatePredicate(condition.predicate, condition.value, processes[Object.keys(processes)[0]].passes);
|
|
else
|
|
rule.allCondition = evaluatePredicate(condition.predicate, condition.value, 0);;
|
|
}
|
|
else
|
|
rule.allCondition = false;
|
|
break;
|
|
case "count_of_product_press_passes":
|
|
let passes = 0;
|
|
let processesObject = {};
|
|
for (let k = 0; k < productPartsObjects.length; k++) {
|
|
let partObjects = productPartsObjects[k];
|
|
if (partObjects.processes) {
|
|
let processes = partObjects.processes;
|
|
for (const [key, value] of Object.entries(processes)) {
|
|
if (!processesObject.hasOwnProperty(key)) {
|
|
processesObject[key] = [];
|
|
}
|
|
for (let p = 0; p < value.colors.length; p++) {
|
|
let color = value.colors[p];
|
|
if (!processesObject[key].includes(color)) {
|
|
passes = passes + 1;
|
|
processesObject[key].push(color);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
rule.allCondition = evaluatePredicate(condition.predicate, condition.value, passes);
|
|
break;
|
|
}
|
|
rule.evaluateConditions.push(rule.allCondition);
|
|
}
|
|
if (rule.evaluateConditions.length > 0 && !rule.evaluateConditions.includes(false)) {
|
|
promotion.appliedRules.push(rule);
|
|
promotion.applied = true;
|
|
if (rule.rule_type == "exclusive") {
|
|
promotion.exclusiveRules.push("true");
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
}
|
|
return promotions.filter(promotion => {
|
|
return (promotion.applied === true && (promotion.exclusiveRules.length == promotion.exclusive.length))
|
|
})[0];
|
|
}
|
|
|
|
export const evaluatePredicate = (operator, compareValue, value) => {
|
|
let boolean = true;
|
|
switch (operator) {
|
|
case ">":
|
|
if (Number(value) > Number(compareValue))
|
|
boolean = true;
|
|
else
|
|
boolean = false
|
|
break;
|
|
case "<":
|
|
if (Number(value) < Number(compareValue))
|
|
boolean = true;
|
|
else
|
|
boolean = false
|
|
break;
|
|
case "<=":
|
|
if (Number(value) <= Number(compareValue))
|
|
boolean = true;
|
|
else
|
|
boolean = false
|
|
break;
|
|
case ">=":
|
|
if (Number(value) >= Number(compareValue))
|
|
boolean = true;
|
|
else
|
|
boolean = false
|
|
break;
|
|
case "==":
|
|
if (Number(value) == Number(compareValue))
|
|
boolean = true;
|
|
else
|
|
boolean = false
|
|
break;
|
|
|
|
case "=":
|
|
if (Number(value) === Number(compareValue))
|
|
boolean = true;
|
|
else
|
|
boolean = false
|
|
break;
|
|
|
|
case "IN":
|
|
let values = (compareValue.toLowerCase()).split(',');
|
|
if (values.includes(value.toLowerCase()))
|
|
boolean = true;
|
|
else
|
|
boolean = false
|
|
break;
|
|
}
|
|
return boolean;
|
|
}
|
|
|
|
export const setCategoryNameInLocal = async (categoryId, res) => {
|
|
let categoryDetailsList = window.craneCatalog;
|
|
let categoryOne = await getCategoryOne(
|
|
categoryDetailsList.allCategoryDetails,
|
|
Number(categoryId)
|
|
);
|
|
if (categoryOne && res) {
|
|
window.$cookies.set(res.item_id, categoryOne.n + ':' + categoryId, '30d', null, getDomain(window.location.hostname));
|
|
}
|
|
console.log('category name ', res.item_id, categoryOne.n);
|
|
}
|
|
export const getName = (label) => {
|
|
const filterList = [{ name: "brand", label: "b" }, { name: "color_parent", label: "dc" }, { name: "design_style", label: "ds" }, { name: "occasion", label: "o" }, { name: "paper_color_parent", label: "pc" }, { name: "paper_weight", label: "pw" }, { name: "personalized", label: "per" }
|
|
, { name: "photo_card", label: "ph" },
|
|
{ name: "printing_process", label: "pm" }, { name: "product_def_type", label: "pt" }, { name: "uom", label: "u" }
|
|
];
|
|
let name = filterList.filter((item) => item.label == label)
|
|
if (name) {
|
|
return name[0].name
|
|
}
|
|
|
|
}
|
|
export const roundUp = (num) => {
|
|
var with2Decimals = num.toString().match(/^-?\d+(?:\.\d{0,2})?/)[0];
|
|
return with2Decimals;
|
|
} |