Files
web-temp/layers/plugins/global-tracking.client.ts
2025-09-22 19:17:34 +09:00

43 lines
1.3 KiB
TypeScript

import type { AnalyticsDetailType } from '../types/AnalyticsType'
export default defineNuxtPlugin((nuxtApp) => {
// 공통 함수 정의
const createEventHandler = (eventName: string, sendFunction: Function) => {
return (el: any, binding: any) => {
const eventHandler = (event: Event) => {
const bindingValue = binding.value
if (bindingValue) {
sendFunction(bindingValue)
}
// 기존의 @click 핸들러 호출
if (typeof binding.value === 'function') {
binding.value(event)
}
}
el.addEventListener(eventName, eventHandler)
el[`__${eventName}EventHandler__`] = eventHandler
}
}
const removeEventHandler = (eventName: string) => {
return (el: any) => {
if (el[`__${eventName}EventHandler__`]) {
el.removeEventListener(eventName, el[`__${eventName}EventHandler__`])
delete el[`__${eventName}EventHandler__`]
}
}
}
// analytics
nuxtApp.vueApp.directive('analytics', {
mounted: createEventHandler('click', (bindingValue: AnalyticsDetailType) => {
const { sendLog } = useAnalytics()
const i18n = nuxtApp.$i18n as { locale: { value: string } }
sendLog(i18n.locale.value, bindingValue)
}),
beforeUnmount: removeEventHandler('click')
})
})