fix: umami analytics send app loaded event (#1928)
This commit is contained in:
parent
4f751338b7
commit
ee5a44a799
@ -1,65 +1,31 @@
|
||||
import { useEffect } from 'react'
|
||||
|
||||
import Script from 'next/script'
|
||||
|
||||
// Define the type for the umami data object
|
||||
interface UmamiData {
|
||||
version: string
|
||||
}
|
||||
|
||||
declare global {
|
||||
interface Window {
|
||||
umami:
|
||||
| {
|
||||
track: (event: string, data?: UmamiData) => void
|
||||
}
|
||||
| undefined
|
||||
}
|
||||
}
|
||||
|
||||
const Umami = () => {
|
||||
const appVersion = VERSION
|
||||
const analyticsHost = ANALYTICS_HOST
|
||||
const analyticsId = ANALYTICS_ID
|
||||
|
||||
useEffect(() => {
|
||||
if (!appVersion || !analyticsHost || !analyticsId) return
|
||||
const ping = () => {
|
||||
// Check if umami is defined before ping
|
||||
if (window.umami !== null && typeof window.umami !== 'undefined') {
|
||||
window.umami.track(appVersion, {
|
||||
version: appVersion,
|
||||
})
|
||||
}
|
||||
}
|
||||
if (!VERSION || !ANALYTICS_HOST || !ANALYTICS_ID) return
|
||||
fetch(ANALYTICS_HOST, {
|
||||
method: 'POST',
|
||||
// eslint-disable-next-line @typescript-eslint/naming-convention
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({
|
||||
payload: {
|
||||
website: ANALYTICS_ID,
|
||||
hostname: 'jan.ai',
|
||||
screen: `${screen.width}x${screen.height}`,
|
||||
language: navigator.language,
|
||||
referrer: 'index.html',
|
||||
data: { version: VERSION },
|
||||
type: 'event',
|
||||
title: document.title,
|
||||
url: 'index.html',
|
||||
name: VERSION,
|
||||
},
|
||||
type: 'event',
|
||||
}),
|
||||
})
|
||||
}, [])
|
||||
|
||||
// Wait for umami to be defined before ping
|
||||
if (window.umami !== null && typeof window.umami !== 'undefined') {
|
||||
ping()
|
||||
} else {
|
||||
// Listen for umami script load event
|
||||
document.addEventListener('umami:loaded', ping)
|
||||
}
|
||||
|
||||
// Cleanup function to remove event listener if the component unmounts
|
||||
return () => {
|
||||
document.removeEventListener('umami:loaded', ping)
|
||||
}
|
||||
}, [appVersion, analyticsHost, analyticsId])
|
||||
|
||||
return (
|
||||
<>
|
||||
{appVersion && analyticsHost && analyticsId && (
|
||||
<Script
|
||||
src={analyticsHost}
|
||||
data-website-id={analyticsId}
|
||||
data-cache="true"
|
||||
defer
|
||||
onLoad={() => document.dispatchEvent(new Event('umami:loaded'))}
|
||||
/>
|
||||
)}
|
||||
</>
|
||||
)
|
||||
return <></>
|
||||
}
|
||||
|
||||
export default Umami
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user