UNPKG

wechat-mini-program-ga-sdk

Version:

Integrate Google Analytics with Wechat Mini Program via Measurement Protocol

444 lines (351 loc) 11.4 kB
import _default from './config'; function checkObjList(obj){ if( typeof obj !== 'object'){ return "Error, this is not a object" } if(obj.hasOwnProperty('list')){ return true } return false } function impressionListIndex(imp){ let listMapping = new Map() let ls = [] if(imp.every(checkObjList)){ for (let x of imp){ if(x.hasOwnProperty('list')){ ls.push(x['list']) } } let lst = [...new Set(ls)] //console.log(lst) for (let [i,v] of lst.entries()){ listMapping.set(v,i+1) } listMapping.set("type","every") return listMapping } if(imp.some(checkObjList)){ for (let [i,x] of imp.entries()){ if(x.hasOwnProperty('list')){ ls.push(x['list']) } ls.push("_not_set_") } let lst = [...new Set(ls)] //console.log(lst) for (let [i,v] of lst.entries()){ listMapping.set(v,i+1) } listMapping.set("type","some") //console.log(listMapping) return listMapping } if(ls.length == imp.length){ listMapping.set('len',lst.length) } //console.log(ls) let lst = [...new Set(ls)] //console.log(lst) for (let [i,v] of lst.entries()){ listMapping.set(v,i+1) } listMapping.set("type","none") return listMapping } function isEmptyObj(obj){ if(Object.keys(obj).length === 0 && obj.constructor === Object){ return true } return false } class EEC{ constructor(){ this.objectEntriesPolyfilll() } objectEntriesPolyfilll(){ if (!Object.entries) Object.entries = function( obj ){ var ownProps = Object.keys( obj ), i = ownProps.length, resArray = new Array(i); // preallocate the Array while (i--) resArray[i] = [ownProps[i], obj[ownProps[i]]]; return resArray; }; } impressions(obj,cd,cm){ if(!obj.hasOwnProperty("impressions")) return {} if(!Array.isArray(obj.impressions)) throw new Error("impressions must be a object array"); let pcd = { ..._default.productScopeCD, ...cd } let pcm = { ..._default.productScopeCM, ...cm } let product = {} let ilLen = impressionListIndex(obj.impressions).get("type") let ilMap = impressionListIndex(obj.impressions) ilMap.delete("type") //has list on the object if(ilLen == "every"){ for (let [id,ls] of ilMap.entries() ){ product[`il${ls}nm`]=id } for (let [i,v] of obj.impressions.entries()){ let listIndex = ilMap.get(v.list) || i+1 if(v.hasOwnProperty('name')){ product[`il${listIndex}pi${i+1}nm`] = v['name'] } if(v.hasOwnProperty('id')){ product[`il${listIndex}pi${i+1}id`] = v['id'] } if(v.hasOwnProperty('category')){ product[`il${listIndex}pi${i+1}ca`] = v['category'] } if(v.hasOwnProperty('brand')){ product[`il${listIndex}pi${i+1}br`] = v['brand'] } if(v.hasOwnProperty('category')){ product[`il${listIndex}pi${i+1}ca`] = v['category'] } if(v.hasOwnProperty('variant')){ product[`il${listIndex}pi${i+1}va`] = v['variant'] } if(v.hasOwnProperty('price')){ product[`il${listIndex}pi${i+1}pr`] = v['price'] } if(v.hasOwnProperty('position')){ product[`il${listIndex}pi${i+1}ps`] = v['position'] } if(!isEmptyObj(pcd)){ for(let k in pcd){ if(!!k && pcd[k] ){ product[`il${listIndex}pi${i+1}cd${k}`] = pcd[k] } } } if(!isEmptyObj(pcm)){ for(let k in pcm){ if(!!k && pcm[k] ){ product[`il${listIndex}pi${i+1}cm${k}`] = pcm[k] } } } } return product }else if(ilLen == "some"){ for (let [id,ls] of ilMap.entries() ){ if(typeof id == "string"){ product[`il${ls}nm`]=id } for (let [i,v] of obj.impressions.entries()){ let listIndex = ilMap.get(v.list) || ilMap.get("_not_set_") if(v.hasOwnProperty('name')){ product[`il${listIndex}pi${i+1}nm`] = v['name'] } if(v.hasOwnProperty('id')){ product[`il${listIndex}pi${i+1}id`] = v['id'] } if(v.hasOwnProperty('category')){ product[`il${listIndex}pi${i+1}ca`] = v['category'] } if(v.hasOwnProperty('brand')){ product[`il${listIndex}pi${i+1}br`] = v['brand'] } if(v.hasOwnProperty('category')){ product[`il${listIndex}pi${i+1}ca`] = v['category'] } if(v.hasOwnProperty('variant')){ product[`il${listIndex}pi${i+1}va`] = v['variant'] } if(v.hasOwnProperty('price')){ product[`il${listIndex}pi${i+1}pr`] = v['price'] } if(v.hasOwnProperty('position')){ product[`il${listIndex}pi${i+1}ps`] = v['position'] } if(!isEmptyObj(pcd)){ for(let k in pcd){ if(!!k && pcd[k] ){ product[`il${listIndex}pi${i+1}cd${k}`] = pcd[k] } } } if(!isEmptyObj(pcm)){ for(let k in pcm){ if(!!k && pcm[k] ){ product[`il${listIndex}pi${i+1}cm${k}`] = pcm[k] } } } } } //console.log(product) return product }else{ // no list on the object for (let [i,v] of obj.impressions.entries()){ let listIndex = 1 if(v.hasOwnProperty('name')){ product[`il${listIndex}pi${i+1}nm`] = v['name'] } if(v.hasOwnProperty('id')){ product[`il${listIndex}pi${i+1}id`] = v['id'] } if(v.hasOwnProperty('category')){ product[`il${listIndex}pi${i+1}ca`] = v['category'] } if(v.hasOwnProperty('brand')){ product[`il${listIndex}pi${i+1}br`] = v['brand'] } if(v.hasOwnProperty('category')){ product[`il${listIndex}pi${i+1}ca`] = v['category'] } if(v.hasOwnProperty('variant')){ product[`il${listIndex}pi${i+1}va`] = v['variant'] } if(v.hasOwnProperty('price')){ product[`il${listIndex}pi${i+1}pr`] = v['price'] } if(v.hasOwnProperty('position')){ product[`il${listIndex}pi${i+1}ps`] = v['position'] } if(!isEmptyObj(pcd)){ for(let k in pcd){ if(!!k && pcd[k] ){ product[`il${listIndex}pi${i+1}cd${k}`] = pcd[k] } } } if(!isEmptyObj(pcm)){ for(let k in pcm){ if(!!k && pcm[k] ){ product[`il${listIndex}pi${i+1}cm${k}`] = pcm[k] } } } } } return product } /*var t = { "promotions": [{ "id": "bts", "name": "Back To School", "creative": "HOME banner", "position": "right sidebar" }] }*/ promotions(obj){ if(!obj.hasOwnProperty("promotions") ) return {}; if(!Array.isArray(obj.promotions)) throw new Error("promotion must be a object array"); let product= {} ///if(obj.promotions.hasOwnProperty('action')){ // product['promoa'] = obj.promotions.action //} for (let [i,v] of obj.promotions.entries()){ if(v.hasOwnProperty("id")){ product[`promo${i+1}id`] = v['id'] } if(v.hasOwnProperty("name")){ product[`promo${i+1}nm`] = v['name'] } if(v.hasOwnProperty("creative")){ product[`promo${i+1}cr`] = v['creative'] } if(v.hasOwnProperty("position")){ product[`promo${i+1}ps`] = v['position'] } } return product } /*promotions(t) var t = {"products": [{ "id": "bc823", "name": "Fuelworks T-Shirt", "price": "92.00", "brand": "Fuelworks", "category": "T-Shirts", "position": "4" }] }*/ products(obj,cd,cm){ if(!obj.hasOwnProperty("products") ) return {}; if(!Array.isArray(obj.products)) throw new Error("products must be a object array"); let pcd = { ..._default.productScopeCD, ...cd } let pcm = { ..._default.productScopeCM, ...cm } let product = {} for(let[i,v] of obj.products.entries()){ if(v.hasOwnProperty('id')){ product[`pr${i+1}id`] = v['id'] } if(v.hasOwnProperty('name')){ product[`pr${i+1}nm`] = v['name'] } if(v.hasOwnProperty('brand')){ product[`pr${i+1}br`] = v['brand'] } if(v.hasOwnProperty('price')){ product[`pr${i+1}pr`] = v['price'] } if(v.hasOwnProperty('category')){ product[`pr${i+1}ca`] = v['category'] } if(v.hasOwnProperty('variant')){ product[`pr${i+1}va`] = v['variant'] } if(v.hasOwnProperty('quantity')){ product[`pr${i+1}qt`] = v['quantity'] } if(v.hasOwnProperty('coupon')){ product[`pr${i+1}cc`] = v['coupon'] } if(v.hasOwnProperty('position')){ product[`pr${i+1}ps`] = v['position'] } if(!isEmptyObj(pcd)){ for(let k in pcd){ if(!!k && pcd[k] ){ product[`pr${i+1}cd${k}`] = pcd[k] } } } if(!isEmptyObj(pcm)){ for(let k in pcm){ if(!!k && pcm[k] ){ product[`pr${i+1}cm${k}`] = pcm[k] } } } } return product } checkEEC(obj,cd,cm){ if(obj.hasOwnProperty("impressions")){ var imp = this.impressions(obj,cd,cm) } if(obj.hasOwnProperty("promotions")){ var promo = this.promotions(obj,cd,cm) } if(obj.hasOwnProperty("products")){ var prod = this.products(obj,cd,cm) } let eecObj = { ...imp, ...promo, ...prod } return eecObj } } const eec = new EEC() export default eec