diff --git a/packages/frontend/core/src/components/affine/setting-modal/general-setting/about/index.tsx b/packages/frontend/core/src/components/affine/setting-modal/general-setting/about/index.tsx
index 5774d0ff8a33..ae50fcee1654 100644
--- a/packages/frontend/core/src/components/affine/setting-modal/general-setting/about/index.tsx
+++ b/packages/frontend/core/src/components/affine/setting-modal/general-setting/about/index.tsx
@@ -111,7 +111,7 @@ export const AboutAffine = () => {
desc={t['com.affine.telemetry.enable.desc']()}
>
diff --git a/packages/frontend/core/src/telemetry.tsx b/packages/frontend/core/src/telemetry.tsx
new file mode 100644
index 000000000000..d3830c641361
--- /dev/null
+++ b/packages/frontend/core/src/telemetry.tsx
@@ -0,0 +1,20 @@
+import { appSettingAtom } from '@toeverything/infra';
+import { useAtomValue } from 'jotai/react';
+import mixpanel from 'mixpanel-browser';
+import { useLayoutEffect } from 'react';
+
+export function Telemetry() {
+ const settings = useAtomValue(appSettingAtom);
+ useLayoutEffect(() => {
+ if (process.env.MIXPANEL_TOKEN) {
+ mixpanel.init(process.env.MIXPANEL_TOKEN || '', {
+ track_pageview: true,
+ persistence: 'localStorage',
+ });
+ }
+ if (settings.enableTelemetry !== false) {
+ mixpanel.opt_out_tracking();
+ }
+ }, [settings.enableTelemetry]);
+ return null;
+}
diff --git a/packages/frontend/electron/package.json b/packages/frontend/electron/package.json
index ca19e81f42f7..ed1930fac782 100644
--- a/packages/frontend/electron/package.json
+++ b/packages/frontend/electron/package.json
@@ -44,7 +44,6 @@
"@emotion/react": "^11.11.4",
"@pengx17/electron-forge-maker-appimage": "^1.1.1",
"@toeverything/infra": "workspace:*",
- "@types/mixpanel-browser": "^2.49.0",
"@types/uuid": "^9.0.8",
"@vitejs/plugin-react-swc": "^3.6.0",
"builder-util-runtime": "^9.2.4",
@@ -60,7 +59,6 @@
"jotai": "^2.6.5",
"jotai-devtools": "^0.8.0",
"lodash-es": "^4.17.21",
- "mixpanel-browser": "^2.49.0",
"nanoid": "^5.0.6",
"react": "^18.2.0",
"react-dom": "^18.2.0",
diff --git a/packages/frontend/electron/renderer/app.tsx b/packages/frontend/electron/renderer/app.tsx
index 67bab60ea291..a4076efbc4bb 100644
--- a/packages/frontend/electron/renderer/app.tsx
+++ b/packages/frontend/electron/renderer/app.tsx
@@ -12,12 +12,12 @@ import {
performanceLogger,
performanceRenderLogger,
} from '@affine/core/shared';
+import { Telemetry } from '@affine/core/telemetry';
import createEmotionCache from '@affine/core/utils/create-emotion-cache';
import { configureWebServices } from '@affine/core/web';
import { createI18n, setUpLanguage } from '@affine/i18n';
import { CacheProvider } from '@emotion/react';
import { getCurrentStore, ServiceCollection } from '@toeverything/infra';
-import mixpanel from 'mixpanel-browser';
import type { PropsWithChildren, ReactElement } from 'react';
import { lazy, Suspense } from 'react';
import { RouterProvider } from 'react-router-dom';
@@ -62,13 +62,6 @@ const serviceProvider = services.provider();
export function App() {
performanceRenderLogger.info('App');
- if (process.env.MIXPANEL_TOKEN) {
- mixpanel.init(process.env.MIXPANEL_TOKEN || '', {
- track_pageview: true,
- persistence: 'localStorage',
- });
- }
-
if (!languageLoadingPromise) {
languageLoadingPromise = loadLanguage().catch(console.error);
}
@@ -79,6 +72,7 @@ export function App() {
+
diff --git a/packages/frontend/web/package.json b/packages/frontend/web/package.json
index aa9503fa7b03..4e3dc1ff218b 100644
--- a/packages/frontend/web/package.json
+++ b/packages/frontend/web/package.json
@@ -16,13 +16,12 @@
"@juggle/resize-observer": "^3.4.0",
"core-js": "^3.36.1",
"intl-segmenter-polyfill-rs": "^0.1.7",
- "mixpanel-browser": "^2.49.0",
+ "jotai": "^2.7.1",
"react": "^18.2.0",
"react-dom": "^18.2.0"
},
"devDependencies": {
"@affine/cli": "workspace:*",
- "@types/mixpanel-browser": "^2.49.0",
"@types/react": "^18.2.60",
"@types/react-dom": "^18.2.19",
"typescript": "^5.3.3"
diff --git a/packages/frontend/web/src/app.tsx b/packages/frontend/web/src/app.tsx
index 67bab60ea291..a4076efbc4bb 100644
--- a/packages/frontend/web/src/app.tsx
+++ b/packages/frontend/web/src/app.tsx
@@ -12,12 +12,12 @@ import {
performanceLogger,
performanceRenderLogger,
} from '@affine/core/shared';
+import { Telemetry } from '@affine/core/telemetry';
import createEmotionCache from '@affine/core/utils/create-emotion-cache';
import { configureWebServices } from '@affine/core/web';
import { createI18n, setUpLanguage } from '@affine/i18n';
import { CacheProvider } from '@emotion/react';
import { getCurrentStore, ServiceCollection } from '@toeverything/infra';
-import mixpanel from 'mixpanel-browser';
import type { PropsWithChildren, ReactElement } from 'react';
import { lazy, Suspense } from 'react';
import { RouterProvider } from 'react-router-dom';
@@ -62,13 +62,6 @@ const serviceProvider = services.provider();
export function App() {
performanceRenderLogger.info('App');
- if (process.env.MIXPANEL_TOKEN) {
- mixpanel.init(process.env.MIXPANEL_TOKEN || '', {
- track_pageview: true,
- persistence: 'localStorage',
- });
- }
-
if (!languageLoadingPromise) {
languageLoadingPromise = loadLanguage().catch(console.error);
}
@@ -79,6 +72,7 @@ export function App() {
+
diff --git a/yarn.lock b/yarn.lock
index 4139fd031163..d7abd3e1103a 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -466,7 +466,6 @@ __metadata:
"@emotion/react": "npm:^11.11.4"
"@pengx17/electron-forge-maker-appimage": "npm:^1.1.1"
"@toeverything/infra": "workspace:*"
- "@types/mixpanel-browser": "npm:^2.49.0"
"@types/uuid": "npm:^9.0.8"
"@vitejs/plugin-react-swc": "npm:^3.6.0"
async-call-rpc: "npm:^6.4.0"
@@ -485,7 +484,6 @@ __metadata:
jotai-devtools: "npm:^0.8.0"
link-preview-js: "npm:^3.0.5"
lodash-es: "npm:^4.17.21"
- mixpanel-browser: "npm:^2.49.0"
nanoid: "npm:^5.0.6"
react: "npm:^18.2.0"
react-dom: "npm:^18.2.0"
@@ -827,12 +825,11 @@ __metadata:
"@affine/core": "workspace:*"
"@affine/env": "workspace:*"
"@juggle/resize-observer": "npm:^3.4.0"
- "@types/mixpanel-browser": "npm:^2.49.0"
"@types/react": "npm:^18.2.60"
"@types/react-dom": "npm:^18.2.19"
core-js: "npm:^3.36.1"
intl-segmenter-polyfill-rs: "npm:^0.1.7"
- mixpanel-browser: "npm:^2.49.0"
+ jotai: "npm:^2.7.1"
react: "npm:^18.2.0"
react-dom: "npm:^18.2.0"
typescript: "npm:^5.3.3"
@@ -25242,9 +25239,9 @@ __metadata:
languageName: node
linkType: hard
-"jotai@npm:^2.6.5":
- version: 2.6.5
- resolution: "jotai@npm:2.6.5"
+"jotai@npm:^2.6.5, jotai@npm:^2.7.1":
+ version: 2.7.1
+ resolution: "jotai@npm:2.7.1"
peerDependencies:
"@types/react": ">=17.0.0"
react: ">=17.0.0"
@@ -25253,7 +25250,7 @@ __metadata:
optional: true
react:
optional: true
- checksum: 10/21461f2d97158607a72848c09ac6a46142f28b1cc6b1c9c026d9b48129627ca581307789670232e4ff3bede678ccc57f937edd5c40efaa9bce4a2daed43dcd26
+ checksum: 10/7f735bb771885bee5dcd7e807458281d5422526837bbc52d9bcca9a093117245880794a868ff4e19fcd016064353d64e8d6f7b7485c081d678c51ac7fc459da8
languageName: node
linkType: hard