/* @flow */ import { debounce } from './utils' import type { BrowserHistory } from 'history/createBrowserHistory' type PushType = ( | ['trackPageView'] | ['trackEvent', string, string] | ['trackEvent', string, string, string] | ['trackEvent', string, string, string, number] ) => void export default class Tracker { push: PushType unlistenFromHistory: () => void previousPath: string constructor(pushFunction: PushType = args => window._paq.push(args)) { window._paq = window._paq || [] this.push = debounce(200, pushFunction) } connectToHistory(history: BrowserHistory) { this.unlistenFromHistory = history.listen(loc => { this.track(loc) }) return history } disconnectFromHistory() { if (this.unlistenFromHistory) { this.unlistenFromHistory() return true } return false } track(loc: Location) { const currentPath = loc.pathname + loc.search if (this.previousPath === currentPath) { return } this.push(['trackPageView']) this.previousPath = currentPath } } export const devTracker = new Tracker( (console && console.log && console.log.bind(console)) || (() => {}) // eslint-disable-line no-console )