|
| 1 | +// Includes |
| 2 | +var Reflux = require('reflux'); |
| 3 | +var JSE = require('jekyll-store-engine'); |
| 4 | +var listenAndMix = JSE.Mixins.listenAndMix; |
| 5 | + |
| 6 | +var GoogleAnalyticsStore = Reflux.createStore({ |
| 7 | + // Public |
| 8 | + listenables: [JSE.Actions], |
| 9 | + mixins: [ |
| 10 | + listenAndMix(JSE.Stores.Basket), |
| 11 | + listenAndMix(JSE.Stores.Delivery), |
| 12 | + listenAndMix(JSE.Stores.Order) |
| 13 | + ], |
| 14 | + onSetTrackingId: function(args) { |
| 15 | + t.ga('create', args.id, 'auto'); |
| 16 | + t.ga('require', 'ec'); |
| 17 | + }, |
| 18 | + onPageLoaded: function() { |
| 19 | + t.ga('send', 'pageview'); |
| 20 | + }, |
| 21 | + onVisit: function(args) { |
| 22 | + t.ga('ec:addProduct', { 'name': args.name }); |
| 23 | + t.ga('ec:setAction', 'detail'); |
| 24 | + }, |
| 25 | + onSetItem: function(args) { |
| 26 | + t.ga('ec:addProduct', { 'name': args.name, 'quantity': args.quantity }); |
| 27 | + t.ga('ec:setAction', 'add'); |
| 28 | + t.ga('send', 'event', 'UX', 'click', 'add to basket'); |
| 29 | + }, |
| 30 | + onRemoveItem: function(args) { |
| 31 | + t.ga('ec:addProduct', { 'name': args.name }); |
| 32 | + t.ga('ec:setAction', 'remove'); |
| 33 | + t.ga('send', 'event', 'UX', 'click', 'remove from basket'); |
| 34 | + }, |
| 35 | + onCheckoutStep: function(args) { |
| 36 | + t.addBasket(); |
| 37 | + t.ga('ec:setAction','checkout', { 'step': args.step }); |
| 38 | + }, |
| 39 | + onSetPaymentOptions: function(args) { |
| 40 | + t.ga('set', '&cu', args.currency); |
| 41 | + }, |
| 42 | + onCompleted: function(args) { |
| 43 | + t.addBasket(); |
| 44 | + t.ga('ec:setAction', 'purchase', { |
| 45 | + 'id': args.number, |
| 46 | + 'revenue': t.order.getIn(['totals', 'order']).toString(), |
| 47 | + 'shipping': t.delivery.get('amount').toString() |
| 48 | + }); |
| 49 | + t.ga('send', 'pageview'); |
| 50 | + }, |
| 51 | + |
| 52 | + // Private |
| 53 | + ga: require('ga-browser')(), |
| 54 | + addBasket: function() { |
| 55 | + t.basket.forEach(function(item, name) { |
| 56 | + t.ga('ec:addProduct', { |
| 57 | + 'name': name, |
| 58 | + 'price': item.get('price').toString(), |
| 59 | + 'quantity': item.get('quantity').toString() |
| 60 | + }); |
| 61 | + }); |
| 62 | + } |
| 63 | +}); |
| 64 | + |
| 65 | +var t = module.exports = GoogleAnalyticsStore; |
0 commit comments