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') }) })