Google Tag Manager Impressions

function sendFindifyClickEvent(list, data, callback) {
  window.dataLayer.push({
    eventCallback: callback,
    event: "gaEvent",
    eventCategory: "Ecommerce",
    eventAction: "Product Click",
    ecommerce: {
      click: {
        actionField: {
          list: list
        },
        products: [{
          currencyCode: data.config.currency.code,
          name: data.title, // Name or ID is required.
          id: data.sku[0],
          price: data.price[0],
          brand: data.brand,
          category: data.category[0].category1,
          list: list,
          position: data.index + 1
        }]
      }
    }
  });
}
function addFindifyImpression(list, data){
  window.dataLayer.push({
    ecommerce: {
      currencyCode: data.config.currency.code, 
      impressions: [{          
          name:  data.title,       // Name or ID is required.
          id:  data.id,
          price:  data.price[0],
          brand:  data.brand,
          category: data.category[0].category1,
          list: list,
          position: data.index
        }]
    }
  });
}
window.findifyApiRegistry = [
  {
    hook: 'search.item',
    mapProps: function(res, callbacks) {
      return {
        onClick: function(e) {
          e.preventDefault();
          sendFindifyClickEvent('Autocomplete Results', res, function() {
            e.isDefaultPrevented = function() {
              return false
            };
            return callbacks.onClick(e);
          });
          return false;
        }
      };
    }
  },
  {
    hook: 'collection.item',
    mapProps: function(res) {
      return {
        onClick: function(e) {
          e.preventDefault();
          sendFindifyClickEvent('Collection Results', res, function() {
            e.isDefaultPrevented = function() {
              return false
            };
            return callbacks.onClick(e);
          });
          return false;
        }
      };
    }
  },
  {
    hook: 'recommendations.item',
    mapProps: function(res) {
      return {
        onClick: function(e) {
          e.preventDefault();
          sendFindifyClickEvent('Recommendation Results', res, function() {
            e.isDefaultPrevented = function() {
              return false
            };
            return callbacks.onClick(e);
          });
          return false;
        }
      };
    }
  }
]