Better custom dimension tracking

This commit is contained in:
Misode
2022-05-09 03:50:29 +02:00
parent 15dc9bd4ab
commit af31f5cfbd
6 changed files with 51 additions and 26 deletions

View File

@@ -7,7 +7,12 @@
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-S982VZS08T');
gtag('config', 'G-S982VZS08T', {
theme: localStorage.getItem('theme') || 'default',
version: localStorage.getItem('schema_version') || '1.18.2',
locale: localStorage.getItem('language') || 'en',
prefers_color_scheme: matchMedia('(prefers-color-scheme: light)').matches ? 'light' : matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'none',
});
</script>
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){

View File

@@ -41,40 +41,60 @@ export namespace Analytics {
export function setLocale(locale: string) {
dimension(DIM_LANGUAGE, locale)
event(ID_SITE, 'set-language', locale)
gtag('event', 'use_locale', {
locale,
})
}
export function changeLocale(prev_locale: string, locale: string) {
setLocale(locale)
event(ID_SITE, 'set-language', locale)
gtag('event', 'change_locale', {
prev_locale,
})
}
export function setTheme(theme: string) {
dimension(DIM_THEME, theme)
event(ID_SITE, 'set-theme', theme)
gtag('event', 'use_theme', {
gtag('set', {
theme,
})
}
export function changeTheme(prev_theme: string, theme: string) {
setTheme(theme)
event(ID_SITE, 'set-theme', theme)
gtag('event', 'change_theme', {
prev_theme,
})
}
export function setVersion(version: string) {
dimension(DIM_VERSION, version)
event(ID_GENERATOR, 'set-version', version)
gtag('event', 'use_version', {
gtag('set', {
version,
})
}
export function setGenerator(file_type: string, version: string) {
export function changeVersion(prev_version: string, version: string) {
setVersion(version)
event(ID_GENERATOR, 'set-version', version)
gtag('event', 'change_version', {
prev_version,
})
}
export function setGenerator(file_type: string) {
dimension(DIM_GENERATOR, file_type)
gtag('event', 'use_generator', {
file_type,
version,
})
}
export function setPrefersColorScheme(color_scheme: string) {
dimension(DIM_PREFERS_COLOR_SCHEME, color_scheme)
gtag('event', 'prefers_color_scheme', {
color_scheme,
export function setPrefersColorScheme(prefers_color_scheme: string) {
dimension(DIM_PREFERS_COLOR_SCHEME, prefers_color_scheme)
gtag('set', {
prefers_color_scheme,
})
}

View File

@@ -59,12 +59,12 @@ export function LocaleProvider({ children }: { children: ComponentChildren }) {
return localize(lang, key, ...params)
}, [lang])
const changeLocale = useCallback(async (lang: string) => {
await loadLocale(lang)
Analytics.setLocale(lang)
Store.setLanguage(lang)
setLanguage(lang)
}, [])
const changeLocale = useCallback(async (newLang: string) => {
await loadLocale(newLang)
Analytics.changeLocale(lang, newLang)
Store.setLanguage(newLang)
setLanguage(newLang)
}, [lang])
useEffect(() => {
(async () => {

View File

@@ -29,11 +29,11 @@ export function ThemeProvider({ children }: { children: ComponentChildren }) {
document.documentElement.setAttribute('data-theme', theme)
}, [theme])
const changeTheme = useCallback((theme: string) => {
Analytics.setTheme(theme)
Store.setTheme(theme)
setTheme(theme)
}, [])
const changeTheme = useCallback((newTheme: string) => {
Analytics.changeTheme(theme, newTheme)
Store.setTheme(newTheme)
setTheme(newTheme)
}, [theme])
useEffect(() => {
Analytics.setPrefersColorScheme(prefersLight ? 'light' : prefersDark ? 'dark' : 'none')

View File

@@ -41,11 +41,11 @@ export function VersionProvider({ children }: { children: ComponentChildren }) {
changeTargetVersion(newVersion, true)
}
if (store) {
Analytics.setVersion(newVersion)
Analytics.changeVersion(version, newVersion)
Store.setVersion(newVersion)
}
setVersion(newVersion)
}, [targetVersion])
}, [version, targetVersion])
useEffect(() => {
Analytics.setVersion(version)

View File

@@ -100,7 +100,7 @@ export function Generator({}: Props) {
ignoreChange.current = true
model.reset(DataModel.wrapLists(data), false)
}
Analytics.setGenerator(gen.id, version)
Analytics.setGenerator(gen.id)
return { model, blockStates }
}, [gen.id, version, sharedSnippetId, currentPreset])