File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -21,6 +21,9 @@ export const env = createEnv({
2121
2222 VITE_ENABLE_DEVTOOLS : z . string ( ) . optional ( ) ,
2323 VITE_ENABLE_REACT_SCAN : z . string ( ) . optional ( ) ,
24+
25+ VITE_POSTHOG_API_KEY : z . string ( ) ,
26+ VITE_POSTHOG_HOST : z . string ( ) ,
2427 } ,
2528
2629 /**
Original file line number Diff line number Diff line change @@ -16,6 +16,7 @@ import "@/styles.css";
1616import { env } from "./config/env" ;
1717import { TooltipProvider } from "./components/ui/tooltip" ;
1818
19+ import { PostHogProvider } from "./post-hog" ;
1920initializeSentry ( ) ;
2021initializeIcons ( ) ;
2122scan ( { enabled : Boolean ( env . VITE_APP_ENV === "local" && env . VITE_ENABLE_REACT_SCAN ) } ) ;
@@ -27,14 +28,16 @@ if (!rootElement.innerHTML) {
2728
2829 root . render (
2930 < StrictMode >
30- < I18nextProvider >
31- < QueryClientProvider client = { queryClient } >
32- < TooltipProvider >
33- < RouterProvider router = { router } />
34- < Toaster />
35- </ TooltipProvider >
36- </ QueryClientProvider >
37- </ I18nextProvider >
31+ < PostHogProvider >
32+ < I18nextProvider >
33+ < QueryClientProvider client = { queryClient } >
34+ < TooltipProvider >
35+ < RouterProvider router = { router } />
36+ < Toaster />
37+ </ TooltipProvider >
38+ </ QueryClientProvider >
39+ </ I18nextProvider >
40+ </ PostHogProvider >
3841 </ StrictMode > ,
3942 ) ;
4043}
Original file line number Diff line number Diff line change 1+ import type { PropsWithChildren } from "react" ;
2+ import posthog from "posthog-js" ;
3+ import { PostHogProvider as ReactPostHogProvider } from "posthog-js/react" ;
4+
5+ import { env } from "@/config/env" ;
6+
7+ posthog . init ( env . VITE_POSTHOG_API_KEY , {
8+ api_host : env . VITE_POSTHOG_HOST ,
9+ } ) ;
10+
11+ export const PostHogProvider = ( { children } : PropsWithChildren ) => {
12+ return < ReactPostHogProvider client = { posthog } > { children } </ ReactPostHogProvider > ;
13+ } ;
Original file line number Diff line number Diff line change 1+ declare module "posthog-js/react" {
2+ import type { ComponentType , ReactNode } from "react" ;
3+ import type { PostHog } from "posthog-js" ;
4+
5+ export type PostHogProviderProps = {
6+ client : PostHog ;
7+ children ?: ReactNode ;
8+ } ;
9+
10+ export const PostHogProvider : ComponentType < PostHogProviderProps > ;
11+ export function usePostHog ( ) : PostHog | undefined ;
12+
13+ export function useFeatureFlagEnabled ( flag : string , distinctId ?: string ) : boolean ;
14+ }
Original file line number Diff line number Diff line change 1+ import { Icons } from "@/components/ui" ;
2+
3+ export const FeatureNotAvailable = ( ) => {
4+ return (
5+ < div className = "flex min-h-screen w-full flex-col items-center justify-center text-center" >
6+ < Icons . Ban className = "text-muted-foreground h-14 w-14" />
7+
8+ < h2 className = "mb-2 text-xl font-semibold" > Feature not available</ h2 >
9+ </ div >
10+ ) ;
11+ } ;
Original file line number Diff line number Diff line change 1+ export const WelcomeMessage = ( ) => {
2+ return (
3+ < div className = "flex min-h-screen w-full flex-col items-center justify-center text-center" >
4+ < h2 className = "mb-2 text-2xl font-semibold" > Welcome to the app, beta tester!</ h2 >
5+ </ div >
6+ ) ;
7+ } ;
Original file line number Diff line number Diff line change 11import { createFileRoute } from "@tanstack/react-router" ;
2+ import { useFeatureFlagEnabled , usePostHog } from "posthog-js/react" ;
23
3- import { useTranslation } from "@/i18n" ;
4+ import { FeatureNotAvailable } from "./-components/feature-not-available" ;
5+ import { WelcomeMessage } from "./-components/welcome-message" ;
46
57const HomePage = ( ) => {
6- const { t } = useTranslation ( ) ;
8+ const posthog = usePostHog ( ) ;
9+ const showWelcomeMessage = useFeatureFlagEnabled ( "feature-a" ) ;
710
8- return (
9- < div className = "flex flex-col gap-4" >
10- < h3 > { t ( "greetings.home" ) } </ h3 >
11- </ div >
12- ) ;
11+ posthog ?. identify ( "daniela@test.com" , {
12+ is_beta_tester : true ,
13+ } ) ;
14+
15+ if ( ! showWelcomeMessage ) {
16+ return < FeatureNotAvailable /> ;
17+ }
18+
19+ return < WelcomeMessage /> ;
1320} ;
1421
15- export const Route = createFileRoute ( "/_private/" ) ( { component : HomePage } ) ;
22+ export const Route = createFileRoute ( "/_private/" ) ( {
23+ component : HomePage ,
24+ } ) ;
You can’t perform that action at this time.
0 commit comments