mirror of
https://github.com/elyby/accounts-frontend.git
synced 2025-05-31 14:11:58 +05:30
#247: track first page view and ignore redirects for GA
This commit is contained in:
14
npm-shrinkwrap.json
generated
14
npm-shrinkwrap.json
generated
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "ely-by-account",
|
"name": "ely-by-account",
|
||||||
"version": "1.0.0",
|
"version": "1.1.6-dev",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"abab": {
|
"abab": {
|
||||||
"version": "1.0.3",
|
"version": "1.0.3",
|
||||||
@ -1878,6 +1878,18 @@
|
|||||||
"resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz",
|
"resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"debounce": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"from": "debounce@latest",
|
||||||
|
"resolved": "https://registry.npmjs.org/debounce/-/debounce-1.0.0.tgz",
|
||||||
|
"dependencies": {
|
||||||
|
"date-now": {
|
||||||
|
"version": "1.0.1",
|
||||||
|
"from": "date-now@1.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/date-now/-/date-now-1.0.1.tgz"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"debug": {
|
"debug": {
|
||||||
"version": "2.3.2",
|
"version": "2.3.2",
|
||||||
"from": "debug@>=2.1.1 <3.0.0",
|
"from": "debug@>=2.1.1 <3.0.0",
|
||||||
|
@ -22,6 +22,7 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"babel-polyfill": "^6.3.14",
|
"babel-polyfill": "^6.3.14",
|
||||||
"classnames": "^2.1.3",
|
"classnames": "^2.1.3",
|
||||||
|
"debounce": "^1.0.0",
|
||||||
"history": "^3.2.1",
|
"history": "^3.2.1",
|
||||||
"intl": "^1.2.2",
|
"intl": "^1.2.2",
|
||||||
"intl-format-cache": "^2.0.4",
|
"intl-format-cache": "^2.0.4",
|
||||||
|
@ -46,3 +46,18 @@ export const rAF = window.requestAnimationFrame
|
|||||||
|| window.webkitRequestAnimationFrame
|
|| window.webkitRequestAnimationFrame
|
||||||
|| window.msRequestAnimationFrame
|
|| window.msRequestAnimationFrame
|
||||||
|| ((cb) => setTimeout(cb, 1000 / 60));
|
|| ((cb) => setTimeout(cb, 1000 / 60));
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a function, that, as long as it continues to be invoked, will not
|
||||||
|
* be triggered. The function will be called after it stops being called for
|
||||||
|
* N milliseconds. If `immediate` is passed, trigger the function on the
|
||||||
|
* leading edge, instead of the trailing. The function also has a property 'clear'
|
||||||
|
* that is a function which will clear the timer to prevent previously scheduled executions.
|
||||||
|
*
|
||||||
|
* @source https://github.com/component/debounce
|
||||||
|
*
|
||||||
|
* @param {function} function - function to wrap
|
||||||
|
* @param {number} [timeout=100] - timeout in ms
|
||||||
|
* @param {bool} [immediate=false] - whether to execute at the beginning
|
||||||
|
*/
|
||||||
|
export debounce from 'debounce';
|
||||||
|
@ -31,19 +31,5 @@
|
|||||||
<% for (var chunk in htmlWebpackPlugin.files.chunks) { %>
|
<% for (var chunk in htmlWebpackPlugin.files.chunks) { %>
|
||||||
<script src="<%= htmlWebpackPlugin.files.chunks[chunk].entry %>"></script>
|
<script src="<%= htmlWebpackPlugin.files.chunks[chunk].entry %>"></script>
|
||||||
<% } %>
|
<% } %>
|
||||||
|
|
||||||
<% if (htmlWebpackPlugin.options.ga) {
|
|
||||||
if (!htmlWebpackPlugin.options.ga.id) {
|
|
||||||
throw new Error('ga.id is required to enable google analytics');
|
|
||||||
}
|
|
||||||
%>
|
|
||||||
<!-- Google Analytics -->
|
|
||||||
<script>
|
|
||||||
window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new Date;
|
|
||||||
ga('create', '<%- htmlWebpackPlugin.options.ga.id %>', 'auto');
|
|
||||||
</script>
|
|
||||||
<script async src='https://www.google-analytics.com/analytics.js'></script>
|
|
||||||
<!-- End Google Analytics -->
|
|
||||||
<% } %>
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
30
src/index.js
30
src/index.js
@ -17,7 +17,7 @@ import loader from 'services/loader';
|
|||||||
import logger from 'services/logger';
|
import logger from 'services/logger';
|
||||||
|
|
||||||
logger.init({
|
logger.init({
|
||||||
sentryCdn: window.sentryCdn
|
sentryCdn: window.SENTRY_CDN
|
||||||
});
|
});
|
||||||
|
|
||||||
const store = storeFactory();
|
const store = storeFactory();
|
||||||
@ -54,6 +54,8 @@ Promise.all([
|
|||||||
</ReduxProvider>,
|
</ReduxProvider>,
|
||||||
document.getElementById('app')
|
document.getElementById('app')
|
||||||
);
|
);
|
||||||
|
|
||||||
|
initAnalytics();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
@ -92,14 +94,30 @@ function restoreScroll() {
|
|||||||
}, 200);
|
}, 200);
|
||||||
}
|
}
|
||||||
|
|
||||||
browserHistory.listen(trackPageView);
|
import { loadScript, debounce } from 'functions';
|
||||||
|
const trackPageView = debounce(_trackPageView);
|
||||||
|
function initAnalytics() {
|
||||||
|
if (!window.ga) {
|
||||||
|
const ga = window.ga = function() {
|
||||||
|
(ga.q = ga.q || []).push(arguments); // eslint-disable-line
|
||||||
|
};
|
||||||
|
ga.l = Date.now(); // eslint-disable-line
|
||||||
|
|
||||||
function trackPageView(location) {
|
if (window.GA_ID) {
|
||||||
const ga = window.ga;
|
// when GA is not available, we will continue to push into array
|
||||||
|
// for debug purposes
|
||||||
|
loadScript('https://www.google-analytics.com/analytics.js');
|
||||||
|
}
|
||||||
|
|
||||||
if (!ga) {
|
ga('create', window.GA_ID, 'auto');
|
||||||
return;
|
trackPageView(location);
|
||||||
|
|
||||||
|
browserHistory.listen(trackPageView);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function _trackPageView(location) {
|
||||||
|
const ga = window.ga;
|
||||||
|
|
||||||
ga('set', 'page', location.pathname + location.search);
|
ga('set', 'page', location.pathname + location.search);
|
||||||
ga('send', 'pageview');
|
ga('send', 'pageview');
|
||||||
|
@ -107,7 +107,8 @@ const webpackConfig = {
|
|||||||
|
|
||||||
plugins: [
|
plugins: [
|
||||||
new webpack.DefinePlugin({
|
new webpack.DefinePlugin({
|
||||||
'window.sentryCdn': config.sentryCdn ? JSON.stringify(config.sentryCdn) : undefined,
|
'window.SENTRY_CDN': config.sentryCdn ? JSON.stringify(config.sentryCdn) : undefined,
|
||||||
|
'window.GA_ID': config.ga && config.ga.id ? JSON.stringify(config.ga.id) : undefined,
|
||||||
'process.env': {
|
'process.env': {
|
||||||
NODE_ENV: JSON.stringify(process.env.NODE_ENV),
|
NODE_ENV: JSON.stringify(process.env.NODE_ENV),
|
||||||
APP_ENV: JSON.stringify(config.environment || process.env.NODE_ENV),
|
APP_ENV: JSON.stringify(config.environment || process.env.NODE_ENV),
|
||||||
@ -126,8 +127,7 @@ const webpackConfig = {
|
|||||||
inject: false,
|
inject: false,
|
||||||
minify: {
|
minify: {
|
||||||
collapseWhitespace: isProduction
|
collapseWhitespace: isProduction
|
||||||
},
|
}
|
||||||
ga: config.ga
|
|
||||||
}),
|
}),
|
||||||
new webpack.ProvidePlugin({
|
new webpack.ProvidePlugin({
|
||||||
React: 'react'
|
React: 'react'
|
||||||
|
Reference in New Issue
Block a user