From 045e28d0efebdef1e83b4b46b6938cbbe5b6d3d5 Mon Sep 17 00:00:00 2001 From: Robert Raposa Date: Wed, 16 Jan 2019 17:25:08 -0500 Subject: [PATCH] feat(analytics): add track events for links - Add required prop for handleAllTrackEvents. - Add EVENT_NAMES to help support event overrides. BREAKING CHANGE: New required prop handleAllTrackEvents. --- .gitignore | 2 + package.json | 4 +- .../__snapshots__/SiteFooter.test.jsx.snap | 14 ++++ src/lib/components/SiteFooter/index.jsx | 76 ++++++++++++++++--- 4 files changed, 86 insertions(+), 10 deletions(-) diff --git a/.gitignore b/.gitignore index 18f2b36db..510c02e80 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ coverage dist node_modules + +.idea/ diff --git a/package.json b/package.json index fef4ea005..8331c7daa 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,8 @@ "start": "NODE_ENV=development BABEL_ENV=development node_modules/.bin/webpack-dev-server --config=config/webpack.dev.config.js --progress", "test": "jest --coverage", "snapshot": "jest --updateSnapshot", - "travis-deploy-once": "travis-deploy-once" + "travis-deploy-once": "travis-deploy-once", + "watch": "watch 'npm run build' ./src" }, "repository": { "type": "git", @@ -68,6 +69,7 @@ "source-map-loader": "^0.2.1", "style-loader": "^0.20.2", "travis-deploy-once": "^5.0.0", + "watch": "^1.0.2", "webpack": "^4.19.1", "webpack-cli": "^3.1.0", "webpack-dev-server": "^3.1.9", diff --git a/src/lib/components/SiteFooter/__snapshots__/SiteFooter.test.jsx.snap b/src/lib/components/SiteFooter/__snapshots__/SiteFooter.test.jsx.snap index c10d1324c..b83b3f66a 100644 --- a/src/lib/components/SiteFooter/__snapshots__/SiteFooter.test.jsx.snap +++ b/src/lib/components/SiteFooter/__snapshots__/SiteFooter.test.jsx.snap @@ -180,6 +180,7 @@ exports[` does not render mobile links 1`] = `
  • does not render mobile links 1`] = `
  • does not render mobile links 1`] = `
  • does not render mobile links 1`] = `
  • does not render mobile links 1`] = `
  • does not render social links 1`] = `
  • @@ -499,6 +505,7 @@ exports[` does not render social links 1`] = `
  • @@ -704,6 +711,7 @@ exports[` renders correctly 1`] = `
  • renders correctly 1`] = `
  • renders correctly 1`] = `
  • renders correctly 1`] = `
  • renders correctly 1`] = `
  • renders correctly 1`] = `
  • @@ -835,6 +848,7 @@ exports[` renders correctly 1`] = `
  • diff --git a/src/lib/components/SiteFooter/index.jsx b/src/lib/components/SiteFooter/index.jsx index 0f32781b7..f9da6c3b1 100644 --- a/src/lib/components/SiteFooter/index.jsx +++ b/src/lib/components/SiteFooter/index.jsx @@ -2,7 +2,26 @@ import React from 'react'; import PropTypes from 'prop-types'; import { Hyperlink, Icon } from '@edx/paragon'; +const EVENT_NAMES = { + FOOTER_LINK: 'edx.bi.footer.link', +}; + class SiteFooter extends React.Component { + constructor(props) { + super(props); + this.externalLinkClickHandler = this.externalLinkClickHandler.bind(this); + } + + externalLinkClickHandler(event) { + const label = event.currentTarget.getAttribute('href'); + const eventName = EVENT_NAMES.FOOTER_LINK; + const properties = { + category: 'outbound_link', + label, + }; + this.props.handleAllTrackEvents(eventName, properties); + } + renderSiteLogo() { return ( {`${this.props.siteName} @@ -33,32 +52,69 @@ class SiteFooter extends React.Component { {/* TODO: Use Paragon HyperLink with Icon. */} {/* Would need to add rel to paragon if we still need it. */}
  • - +
  • + +
  • - +
  • - +
  • - +
  • - +
  • - +
  • @@ -80,7 +136,7 @@ class SiteFooter extends React.Component { mobileLinks = (