mirror of
https://github.com/openmhz/trunk-server.git
synced 2026-11-13 17:27:37 -05:00
add google analytics
This commit is contained in:
@@ -18,6 +18,7 @@
|
|||||||
"react-audio-player": "0.14.0",
|
"react-audio-player": "0.14.0",
|
||||||
"react-datepicker": "3.3.0",
|
"react-datepicker": "3.3.0",
|
||||||
"react-dom": "^17.0.1",
|
"react-dom": "^17.0.1",
|
||||||
|
"react-ga": "^3.3.0",
|
||||||
"react-redux": "^7.1.3",
|
"react-redux": "^7.1.3",
|
||||||
"react-router-dom": "5.2.0",
|
"react-router-dom": "5.2.0",
|
||||||
"react-scripts": "4.0.1",
|
"react-scripts": "4.0.1",
|
||||||
|
|||||||
@@ -4,8 +4,14 @@ import { Provider } from 'react-redux'
|
|||||||
import { Route, Switch } from 'react-router' // react-router v4/v5
|
import { Route, Switch } from 'react-router' // react-router v4/v5
|
||||||
import { ConnectedRouter } from 'connected-react-router'
|
import { ConnectedRouter } from 'connected-react-router'
|
||||||
import configureStore, { history } from './redux-router/configureStore'
|
import configureStore, { history } from './redux-router/configureStore'
|
||||||
|
import ReactGA from 'react-ga';
|
||||||
|
|
||||||
|
|
||||||
import 'semantic-ui-css/semantic.min.css'
|
import 'semantic-ui-css/semantic.min.css'
|
||||||
|
|
||||||
|
// withTracker
|
||||||
|
import withTracker from './withTracker';
|
||||||
|
|
||||||
// Main
|
// Main
|
||||||
import MainContainer from "./Main/MainContainer"
|
import MainContainer from "./Main/MainContainer"
|
||||||
|
|
||||||
@@ -15,6 +21,8 @@ import ListSystemsContainer from "./System/ListSystemsContainer"
|
|||||||
// Call
|
// Call
|
||||||
import CallPlayerContainer from "./Call/CallPlayerContainer"
|
import CallPlayerContainer from "./Call/CallPlayerContainer"
|
||||||
|
|
||||||
|
ReactGA.initialize(process.env.GOOGLE_ANALYTICS);
|
||||||
|
|
||||||
const store = configureStore(/* provide initial state if any */)
|
const store = configureStore(/* provide initial state if any */)
|
||||||
|
|
||||||
ReactDOM.render(
|
ReactDOM.render(
|
||||||
@@ -22,9 +30,9 @@ ReactDOM.render(
|
|||||||
<ConnectedRouter history={history}> { /* place ConnectedRouter under Provider */ }
|
<ConnectedRouter history={history}> { /* place ConnectedRouter under Provider */ }
|
||||||
<> { /* your usual react-router v4/v5 routing */ }
|
<> { /* your usual react-router v4/v5 routing */ }
|
||||||
<Switch>
|
<Switch>
|
||||||
<Route exact path="/" component={MainContainer} />
|
<Route exact path="/" component={withTracker(MainContainer)} />
|
||||||
<Route exact path="/systems" component={ListSystemsContainer} />
|
<Route exact path="/systems" component={withTracker(ListSystemsContainer)} />
|
||||||
<Route exact path="/system/:shortName" component={CallPlayerContainer} />
|
<Route exact path="/system/:shortName" component={withTracker(CallPlayerContainer)} />
|
||||||
<Route render={() => (<div>Miss</div>)} />
|
<Route render={() => (<div>Miss</div>)} />
|
||||||
</Switch>
|
</Switch>
|
||||||
</>
|
</>
|
||||||
|
|||||||
39
frontend/src/withTracker.js
Normal file
39
frontend/src/withTracker.js
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
import React, { Component } from 'react';
|
||||||
|
import ReactGA from 'react-ga';
|
||||||
|
|
||||||
|
export default function withTracker(WrappedComponent, options = {}) {
|
||||||
|
const trackPage = (page) => {
|
||||||
|
ReactGA.set({
|
||||||
|
page,
|
||||||
|
...options
|
||||||
|
});
|
||||||
|
ReactGA.pageview(page);
|
||||||
|
};
|
||||||
|
|
||||||
|
const HOC = class extends Component {
|
||||||
|
componentDidMount() {
|
||||||
|
const {
|
||||||
|
location: { pathname: page }
|
||||||
|
} = this.props;
|
||||||
|
trackPage(page);
|
||||||
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line camelcase
|
||||||
|
UNSAFE_componentWillReceiveProps(nextProps) {
|
||||||
|
const {
|
||||||
|
location: { pathname: currentPage }
|
||||||
|
} = this.props;
|
||||||
|
const nextPage = nextProps.location.pathname;
|
||||||
|
|
||||||
|
if (currentPage !== nextPage) {
|
||||||
|
trackPage(nextPage);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
render() {
|
||||||
|
return <WrappedComponent {...this.props} />;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
return HOC;
|
||||||
|
}
|
||||||
@@ -8179,6 +8179,11 @@ react-fast-compare@^3.0.1:
|
|||||||
version "3.2.0"
|
version "3.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-3.2.0.tgz#641a9da81b6a6320f270e89724fb45a0b39e43bb"
|
resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-3.2.0.tgz#641a9da81b6a6320f270e89724fb45a0b39e43bb"
|
||||||
|
|
||||||
|
react-ga@^3.3.0:
|
||||||
|
version "3.3.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/react-ga/-/react-ga-3.3.0.tgz#c91f407198adcb3b49e2bc5c12b3fe460039b3ca"
|
||||||
|
integrity sha512-o8RScHj6Lb8cwy3GMrVH6NJvL+y0zpJvKtc0+wmH7Bt23rszJmnqEQxRbyrqUzk9DTJIHoP42bfO5rswC9SWBQ==
|
||||||
|
|
||||||
react-is@^16.12.0, react-is@^16.13.1, react-is@^16.6.0, react-is@^16.6.3, react-is@^16.7.0, react-is@^16.8.1, react-is@^16.8.4, react-is@^16.8.6:
|
react-is@^16.12.0, react-is@^16.13.1, react-is@^16.6.0, react-is@^16.6.3, react-is@^16.7.0, react-is@^16.8.1, react-is@^16.8.4, react-is@^16.8.6:
|
||||||
version "16.13.1"
|
version "16.13.1"
|
||||||
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
|
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
|
||||||
|
|||||||
12
node_modules/.yarn-integrity
generated
vendored
12
node_modules/.yarn-integrity
generated
vendored
@@ -1,12 +0,0 @@
|
|||||||
{
|
|
||||||
"nodeVersion": "v10.15.3",
|
|
||||||
"modulesFolders": [
|
|
||||||
"node_modules"
|
|
||||||
],
|
|
||||||
"flags": [],
|
|
||||||
"linkedModules": [],
|
|
||||||
"topLevelPatterns": [],
|
|
||||||
"lockfileEntries": {},
|
|
||||||
"files": [],
|
|
||||||
"artifacts": {}
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user