From cb59549ab50b42537233bbc7d6a6486b3bd7e7af Mon Sep 17 00:00:00 2001 From: Anton Reshetov Date: Sat, 9 Apr 2022 18:31:43 +0300 Subject: [PATCH 1/2] feat: add analytics --- package.json | 2 + src/main/preload.ts | 14 + src/main/services/analytics/index.ts | 4 + src/renderer/components/editor/TheEditor.vue | 2 + .../components/preferences/Storage.vue | 5 +- .../components/sidebar/SidebarListItem.vue | 10 +- .../components/sidebar/TheSidebar.vue | 3 +- .../components/snippets/SnippetHeader.vue | 4 +- .../components/snippets/SnippetListHeader.vue | 3 + .../components/snippets/SnippetListItem.vue | 14 +- .../snippets/SnippetsFragmentsInput.vue | 3 +- .../components/snippets/SnippetsTags.vue | 4 + src/renderer/electron.ts | 4 +- src/renderer/index.html | 2 +- src/renderer/store/app.ts | 4 +- src/renderer/views/Main.vue | 3 +- src/renderer/views/Preferences.vue | 3 + src/shared/types/main/analytics.d.ts | 36 +++ src/shared/types/main/index.d.ts | 5 +- src/shared/types/renderer/store/app.d.ts | 1 + yarn.lock | 301 ++++++++---------- 21 files changed, 239 insertions(+), 188 deletions(-) create mode 100644 src/main/services/analytics/index.ts create mode 100644 src/shared/types/main/analytics.d.ts diff --git a/package.json b/package.json index a697ef03..081c9919 100644 --- a/package.json +++ b/package.json @@ -33,6 +33,7 @@ "@iconscout/unicons": "^4.0.1", "@masscode/json-server": "^0.18.0", "@sipec/vue3-tags-input": "^3.0.4", + "@types/universal-analytics": "^0.4.5", "@vueuse/core": "^8.1.2", "ace-builds": "^1.4.14", "electron-store": "^8.0.1", @@ -41,6 +42,7 @@ "mitt": "^3.0.0", "nanoid": "^3.3.1", "pinia": "^2.0.12", + "universal-analytics": "^0.5.3", "vue": "^3.2.26", "vue-router": "^4.0.12", "vue3-perfect-scrollbar": "^1.6.0" diff --git a/src/main/preload.ts b/src/main/preload.ts index d4dec540..c57cc1f1 100644 --- a/src/main/preload.ts +++ b/src/main/preload.ts @@ -2,6 +2,11 @@ import { contextBridge, ipcRenderer } from 'electron' import { isDbExist, migrate, move } from './services/db' import { store } from './store' import type { ElectronBridge } from '@shared/types/main' +import { version } from '../../package.json' +import type { TrackEvents } from '@shared/types/main/analytics' +import { analytics } from './services/analytics' + +const isDev = process.env.NODE_ENV === 'development' contextBridge.exposeInMainWorld('electron', { ipc: { @@ -25,5 +30,14 @@ contextBridge.exposeInMainWorld('electron', { migrate: path => migrate(path), move: (from, to) => move(from, to), isExist: path => isDbExist(path) + }, + track: (event: TrackEvents, payload?: string) => { + if (isDev) return + + const path = payload + ? `${version}/${event}/${payload}` + : `${version}/${event}` + + analytics.pageview(path).send() } } as ElectronBridge) diff --git a/src/main/services/analytics/index.ts b/src/main/services/analytics/index.ts new file mode 100644 index 00000000..8a767ed5 --- /dev/null +++ b/src/main/services/analytics/index.ts @@ -0,0 +1,4 @@ +import ua from 'universal-analytics' +const analytics = ua('UA-56182454-3') + +export { analytics } diff --git a/src/renderer/components/editor/TheEditor.vue b/src/renderer/components/editor/TheEditor.vue index 1e304532..51aac0a1 100644 --- a/src/renderer/components/editor/TheEditor.vue +++ b/src/renderer/components/editor/TheEditor.vue @@ -36,6 +36,7 @@ import type { Language } from '@shared/types/renderer/editor' import { languages } from './languages' import { useAppStore } from '@/store/app' import { useSnippetStore } from '@/store/snippets' +import { track } from '@/electron' interface Props { lang: Language @@ -143,6 +144,7 @@ const setValue = () => { const setLang = () => { editor.session.setMode(`ace/mode/${localLang.value}`) + track('snippets/set-language', localLang.value) } const setTheme = () => { diff --git a/src/renderer/components/preferences/Storage.vue b/src/renderer/components/preferences/Storage.vue index 0a0003df..f3c1ff2d 100644 --- a/src/renderer/components/preferences/Storage.vue +++ b/src/renderer/components/preferences/Storage.vue @@ -33,7 +33,7 @@