mirror of
https://github.com/Unleash/unleash.git
synced 2025-08-04 13:48:56 +02:00
refactor: add Plausible tracker on SaaS domain (#956)
* feat: add Plausible tracker on SaaS domain * refactor: check uiFlags.T instead of the domain
This commit is contained in:
parent
badc65ddf0
commit
ae51e979cd
@ -76,6 +76,7 @@
|
|||||||
"lodash.clonedeep": "4.5.0",
|
"lodash.clonedeep": "4.5.0",
|
||||||
"msw": "^0.39.2",
|
"msw": "^0.39.2",
|
||||||
"pkginfo": "^0.4.1",
|
"pkginfo": "^0.4.1",
|
||||||
|
"plausible-tracker": "^0.3.5",
|
||||||
"prettier": "2.6.2",
|
"prettier": "2.6.2",
|
||||||
"prop-types": "15.8.1",
|
"prop-types": "15.8.1",
|
||||||
"react": "17.0.2",
|
"react": "17.0.2",
|
||||||
|
@ -12,12 +12,14 @@ import { useAuthDetails } from 'hooks/api/getters/useAuth/useAuthDetails';
|
|||||||
import { useAuthUser } from 'hooks/api/getters/useAuth/useAuthUser';
|
import { useAuthUser } from 'hooks/api/getters/useAuth/useAuthUser';
|
||||||
import { SplashPageRedirect } from 'component/splash/SplashPageRedirect/SplashPageRedirect';
|
import { SplashPageRedirect } from 'component/splash/SplashPageRedirect/SplashPageRedirect';
|
||||||
import styles from 'component/styles.module.scss';
|
import styles from 'component/styles.module.scss';
|
||||||
|
import { usePlausibleTracker } from 'hooks/usePlausibleTracker';
|
||||||
|
|
||||||
export const App = () => {
|
export const App = () => {
|
||||||
const { authDetails } = useAuthDetails();
|
const { authDetails } = useAuthDetails();
|
||||||
const { user } = useAuthUser();
|
const { user } = useAuthUser();
|
||||||
const isLoggedIn = Boolean(user?.id);
|
const isLoggedIn = Boolean(user?.id);
|
||||||
const hasFetchedAuth = Boolean(authDetails || user);
|
const hasFetchedAuth = Boolean(authDetails || user);
|
||||||
|
usePlausibleTracker();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<SWRProvider isUnauthorized={!isLoggedIn}>
|
<SWRProvider isUnauthorized={!isLoggedIn}>
|
||||||
|
@ -13,6 +13,7 @@ export const defaultValue = {
|
|||||||
EEA: false,
|
EEA: false,
|
||||||
CO: false,
|
CO: false,
|
||||||
SE: false,
|
SE: false,
|
||||||
|
T: false,
|
||||||
},
|
},
|
||||||
links: [
|
links: [
|
||||||
{
|
{
|
||||||
|
17
frontend/src/hooks/usePlausibleTracker.test.ts
Normal file
17
frontend/src/hooks/usePlausibleTracker.test.ts
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
import { renderHook } from '@testing-library/react-hooks';
|
||||||
|
import {
|
||||||
|
usePlausibleTracker,
|
||||||
|
enablePlausibleTracker,
|
||||||
|
} from 'hooks/usePlausibleTracker';
|
||||||
|
|
||||||
|
test('usePlausibleTracker', async () => {
|
||||||
|
const { result } = renderHook(() => usePlausibleTracker());
|
||||||
|
expect(result.current).toBeUndefined();
|
||||||
|
});
|
||||||
|
|
||||||
|
test('enablePlausibleTracker', async () => {
|
||||||
|
expect(enablePlausibleTracker({})).toEqual(false);
|
||||||
|
expect(enablePlausibleTracker({ SE: true })).toEqual(false);
|
||||||
|
expect(enablePlausibleTracker({ T: false })).toEqual(false);
|
||||||
|
expect(enablePlausibleTracker({ T: true })).toEqual(true);
|
||||||
|
});
|
37
frontend/src/hooks/usePlausibleTracker.ts
Normal file
37
frontend/src/hooks/usePlausibleTracker.ts
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
import Plausible from 'plausible-tracker';
|
||||||
|
import { useEffect } from 'react';
|
||||||
|
import useUiConfig from 'hooks/api/getters/useUiConfig/useUiConfig';
|
||||||
|
import { IFlags } from 'interfaces/uiConfig';
|
||||||
|
|
||||||
|
const PLAUSIBLE_UNLEASH_API_HOST = 'https://plausible.getunleash.io';
|
||||||
|
const PLAUSIBLE_UNLEASH_DOMAIN = 'app.unleash-hosted.com';
|
||||||
|
|
||||||
|
export const usePlausibleTracker = () => {
|
||||||
|
const { uiConfig } = useUiConfig();
|
||||||
|
const enabled = enablePlausibleTracker(uiConfig.flags);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (enabled) {
|
||||||
|
try {
|
||||||
|
return initPlausibleTracker();
|
||||||
|
} catch (error) {
|
||||||
|
console.warn(error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, [enabled]);
|
||||||
|
};
|
||||||
|
|
||||||
|
const initPlausibleTracker = (): (() => void) => {
|
||||||
|
const plausible = Plausible({
|
||||||
|
domain: PLAUSIBLE_UNLEASH_DOMAIN,
|
||||||
|
apiHost: PLAUSIBLE_UNLEASH_API_HOST,
|
||||||
|
trackLocalhost: true,
|
||||||
|
});
|
||||||
|
|
||||||
|
return plausible.enableAutoPageviews();
|
||||||
|
};
|
||||||
|
|
||||||
|
// Enable Plausible if we're on the Unleash SaaS domain.
|
||||||
|
export const enablePlausibleTracker = (flags: Partial<IFlags>): boolean => {
|
||||||
|
return Boolean(flags.T);
|
||||||
|
};
|
@ -28,6 +28,7 @@ export interface IFlags {
|
|||||||
OIDC?: boolean;
|
OIDC?: boolean;
|
||||||
CO?: boolean;
|
CO?: boolean;
|
||||||
SE?: boolean;
|
SE?: boolean;
|
||||||
|
T?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface IVersionInfo {
|
export interface IVersionInfo {
|
||||||
|
@ -3169,6 +3169,11 @@ pkginfo@^0.4.1:
|
|||||||
resolved "https://registry.yarnpkg.com/pkginfo/-/pkginfo-0.4.1.tgz#b5418ef0439de5425fc4995042dced14fb2a84ff"
|
resolved "https://registry.yarnpkg.com/pkginfo/-/pkginfo-0.4.1.tgz#b5418ef0439de5425fc4995042dced14fb2a84ff"
|
||||||
integrity sha1-tUGO8EOd5UJfxJlQQtztFPsqhP8=
|
integrity sha1-tUGO8EOd5UJfxJlQQtztFPsqhP8=
|
||||||
|
|
||||||
|
plausible-tracker@^0.3.5:
|
||||||
|
version "0.3.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/plausible-tracker/-/plausible-tracker-0.3.5.tgz#49c09a7eb727f1d5c859c3fc8072837b13ee9b85"
|
||||||
|
integrity sha512-6c6VPdPtI9KmIsfr8zLBViIDMt369eeaNA1J8JrAmAtrpSkeJWvjwcJ+cLn7gVJn5AtQWC8NgSEee2d/5RNytA==
|
||||||
|
|
||||||
postcss@^8.4.13:
|
postcss@^8.4.13:
|
||||||
version "8.4.13"
|
version "8.4.13"
|
||||||
resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.13.tgz#7c87bc268e79f7f86524235821dfdf9f73e5d575"
|
resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.13.tgz#7c87bc268e79f7f86524235821dfdf9f73e5d575"
|
||||||
|
Loading…
Reference in New Issue
Block a user