xylabs/sdk-react

View on GitHub
packages/pixel/src/lib/Tracking/Google/BaseEvent.ts

Summary

Maintainability
A
0 mins
Test Coverage
import { assertEx } from '@xylabs/assert'

import { Gtag } from './Gtag'
import { Gtm } from './Gtm'

export class GoogleBaseEvent<T extends Record<string, unknown>> {
  name: string
  protected adwordConversionId?: string
  constructor(name: string, adwordConversionId?: string) {
    this.name = name
    this.adwordConversionId = adwordConversionId
  }

  gtag() {
    return assertEx(Gtag.instance, () => 'Missing/uninitialized gtag')
  }

  gtm() {
    return assertEx(Gtm.instance, () => 'Missing/uninitialized gtm')
  }

  async send(data: T) {
    return await this.sendGtag(data)
  }

  async sendGtag(data: T) {
    await this.gtag().sendAnalytics(this.name, data)
    if (this.adwordConversionId) {
      await this.gtag().sendAdwords(this.adwordConversionId, data)
    }
  }

  async sendGtm(data: T) {
    await this.gtm().send(this.name, data)
  }
}