@docusaurus/plugin-google-gtag
Version:
Global Site Tag (gtag.js) plugin for Docusaurus.
38 lines (34 loc) • 1.23 kB
text/typescript
/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
import type {ClientModule} from '@docusaurus/types';
const clientModule: ClientModule = {
onRouteDidUpdate({location, previousLocation}) {
if (
previousLocation &&
(location.pathname !== previousLocation.pathname ||
location.search !== previousLocation.search ||
location.hash !== previousLocation.hash)
) {
// Normally, the document title is updated in the next tick due to how
// `react-helmet-async` updates it. We want to send the current document's
// title to gtag instead of the old one's, so we use `setTimeout` to defer
// execution to the next tick.
// See: https://github.com/facebook/docusaurus/issues/7420
setTimeout(() => {
// Always refer to the variable on window in case it gets overridden
// elsewhere.
window.gtag(
'set',
'page_path',
location.pathname + location.search + location.hash,
);
window.gtag('event', 'page_view');
});
}
},
};
export default clientModule;