UNPKG

@sneko/vue-gtag

Version:

Global Site Tag (gtag.js) plugin for Vue

320 lines (285 loc) 9.09 kB
declare module "vue-gtag" { import VueRouter from "vue-router"; import _Vue from "vue"; /** * Types copied from @types/gtag.js. * * @see https://www.npmjs.com/package/@types/gtag.js */ namespace Gtag { interface Gtag { (command: 'config', targetId: string, config?: ControlParams | EventParams | CustomParams): void; (command: 'set', config: CustomParams): void; (command: 'js', config: Date): void; (command: 'event', eventName: EventNames | string, eventParams?: ControlParams | EventParams | CustomParams): void; } interface CustomParams { [key: string]: any; } interface ControlParams { groups?: string | string[]; send_to?: string | string[]; event_callback?: () => void; event_timeout?: number; } type EventNames = 'add_payment_info' | 'add_to_cart' | 'add_to_wishlist' | 'begin_checkout' | 'checkout_progress' | 'exception' | 'generate_lead' | 'login' | 'page_view' | 'purchase' | 'refund' | 'remove_from_cart' | 'screen_view' | 'search' | 'select_content' | 'set_checkout_option' | 'share' | 'sign_up' | 'timing_complete' | 'view_item' | 'view_item_list' | 'view_promotion' | 'view_search_results'; interface EventParams { checkout_option?: string; checkout_step?: number; content_id?: string; content_type?: string; coupon?: string; currency?: string; description?: string; fatal?: boolean; items?: Item[]; method?: string; number?: string; promotions?: Promotion[]; screen_name?: string; search_term?: string; shipping?: Currency; tax?: Currency; transaction_id?: string; value?: number; event_label?: string; event_category?: string; non_interaction?: boolean } type Currency = string | number; interface Item { brand?: string; category?: string; creative_name?: string; creative_slot?: string; id?: string; location_id?: string; name?: string; price?: Currency; quantity?: number; } interface Promotion { creative_name?: string; creative_slot?: string; id?: string; name?: string; } } export interface PageView { /** The page's title. */ page_title?: string; /** The page's URL. */ page_location?: string; /** The path portion of location. This value must start with a slash (/) character. */ page_path?: string; } export interface ScreenView { /** The name of the screen. */ screen_name: string; /** The name of the application. */ app_name: string; } /** * @see https://developers.google.com/analytics/devguides/collection/gtagjs/enhanced-ecommerce#action_data */ export interface EcommerceAction { /** Unique ID for the transaction. */ transaction_id: string; /** The store or affiliation from which this transaction occurred */ affiliation?: string; /** Value (i.e., revenue) associated with the event */ value?: number; /** Tax amount */ tax?: number; /** Shipping cost */ shipping?: number; /** The array containing the associated products */ items?: Gtag.Item[]; /** The step (a number) in the checkout process */ checkout_step?: number; /** Checkout option (i.e. selected payment method) */ checkout_option?: string; } export interface Linker { domains: string[]; decorate_forms?: boolean; accept_incoming?: boolean; url_position?: "fragment" | "query"; } export interface Exception { /** A description of the error. */ description?: string; /** true if the error was fatal. */ fatal?: boolean; } export interface Timing { /** A string to identify the variable being recorded (e.g. 'load'). */ name: string; /** The number of milliseconds in elapsed time to report to Google Analytics (e.g. 20). */ value: number; /** A string for categorizing all user timing variables into logical groups (e.g. 'JS Dependencies'). */ event_category?: string; /** A string that can be used to add flexibility in visualizing user timings in the reports (e.g. 'Google CDN'). */ event_label?: string; } export type GtagOptIO = () => void; /** * Send a Google Analytics Event. * * @see https://developers.google.com/analytics/devguides/collection/gtagjs/events * * @param action string that will appear as the event action in Google Analytics Event reports * @param eventParams */ export type GtagEvent = (action: Gtag.EventNames | string, eventParams?: Gtag.ControlParams | Gtag.EventParams | Gtag.CustomParams) => void; /** * Send an ad-hoc Google Analytics pageview. * * @see https://developers.google.com/analytics/devguides/collection/gtagjs/pages */ export type GtagPageView = (pageView: PageView) => void; /** * Send a Google Analytics screen view. * * @see https://developers.google.com/analytics/devguides/collection/gtagjs/screens */ export type GtagScreenView = (screenView: ScreenView) => void; /** * Configure a map of custom dimensions and metrics. * * @see https://developers.google.com/analytics/devguides/collection/gtagjs/custom-dims-mets */ export type GtagCustomMap = (map: Dictionary<string>) => void; /** * Measure a transaction. * * @see https://developers.google.com/analytics/devguides/collection/gtagjs/enhanced-ecommerce#measure_purchases */ export type GtagPurchase = (purchase: EcommerceAction) => void; /** * Send user timing information to Google Analytics. * * @see https://developers.google.com/analytics/devguides/collection/gtagjs/user-timings */ export type GtagTime = (timing: Timing) => void; /** * Measure an exception. * * @see https://developers.google.com/analytics/devguides/collection/gtagjs/exceptions */ export type GtagException = (ex: Exception) => void; /** * Automatically link domains. * * @see https://developers.google.com/analytics/devguides/collection/gtagjs/cross-domain#automatically_link_domains */ export type GtagLinker = (config: Linker) => void; /** * Set parameters that will be associated with every subsequent event on the page. * * @see https://developers.google.com/gtagjs/devguide/configure#send_data_on_every_event_with_set */ export type GtagSet = (config: Gtag.CustomParams) => void; /** * Initialize and configure settings for a particular product account. * * @see https://developers.google.com/gtagjs/devguide/configure */ export type GtagConfig = (config?: Gtag.ControlParams | Gtag.EventParams | Gtag.CustomParams) => void; /** * Measure a full refund of a transaction. * * @see https://developers.google.com/analytics/devguides/collection/gtagjs/enhanced-ecommerce#measure_refunds */ export type GtagRefund = (refund: EcommerceAction) => void; export type Dictionary<T> = { [key: string]: T }; export interface VueGtag { query: Gtag.Gtag; optIn: GtagOptIO; optOut: GtagOptIO; pageview: GtagPageView; event: GtagEvent; screenview: GtagScreenView; customMap: GtagCustomMap; purchase: GtagPurchase; refund: GtagRefund; linker: GtagLinker; exception: GtagException; set: GtagSet; config: GtagConfig; time: GtagTime; } export interface DomainConfig { id: string; params?: Gtag.ControlParams | Gtag.EventParams | Gtag.CustomParams; } export interface PluginOptions { appName?: string; pageTrackerTemplate?: () => PageView; onBeforeTrack?: () => void; onAfterTrack?: () => void; onReady?: () => void; enabled?: boolean; disableScriptLoad?: boolean; bootstrap?: boolean; trackInitialUtmParams?: boolean; hideInitialUtmParams?: boolean; globalObjectName?: string; pageTrackerEnabled?: boolean; pageTrackerScreenviewEnabled?: boolean; defaultGroupName?: string; includes?: DomainConfig[]; config?: DomainConfig; } export class VueGtagPlugin { static install( Vue: typeof _Vue, options: PluginOptions, router?: VueRouter ): void; } export function bootstrap(): Promise<Gtag.Gtag>; export function setOptions(options: PluginOptions): void; export default VueGtagPlugin; export const query: Gtag.Gtag; export const config: GtagConfig; export const event: GtagEvent; export const pageview: GtagPageView; export const screenview: GtagScreenView; export const customMap: GtagCustomMap; export const time: GtagTime; export const exception: GtagException; export const linker: GtagLinker; export const purchase: GtagPurchase; export const set: GtagSet; export const optIn: GtagOptIO; export const optOut: GtagOptIO; export const refund: GtagRefund; module "vue/types/vue" { interface Vue { $gtag: VueGtag; } } }