Sha256: dcaa305ac0fbfac1c73f71efddf080bc77b1b253279e5e3eb11735bed4a80acb

Contents?: true

Size: 857 Bytes

Versions: 2

Compression:

Stored size: 857 Bytes

Contents

import { Controller } from "@hotwired/stimulus";

interface DataEvent {
  event: string;
}

declare global {
  interface Window {
    dataLayer?: DataEvent[];
    gtag(...arg): void;
  }
}

const dataLayer = (window.dataLayer = window.dataLayer ?? []);

window.gtag = (...arg) => {
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
  dataLayer.push(arg as any);
};
window.gtag("js", new Date());

export default class extends Controller {
  connect(): void {
    this.recordPage();
  }

  recordAction(event: MouseEvent): void {
    const data = JSON.parse(
      (event.target as HTMLElement).dataset.analytics ?? "{}"
    );
    dataLayer.push(data);
  }

  recordPage(): void {
    const event = {
      event: "Pageview",
      path: location.pathname + location.search,
      host: location.host,
    };
    dataLayer.push(event);
  }
}

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
shimmer-0.0.21 src/controllers/analytics.ts
shimmer-0.0.20 src/controllers/analytics.ts