Skip to content

Commit 3fba7fd

Browse files
fix: use components
1 parent 1e61ca2 commit 3fba7fd

7 files changed

Lines changed: 76 additions & 16 deletions

File tree

src/config/env.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff 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
/**

src/main.tsx

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import "@/styles.css";
1616
import { env } from "./config/env";
1717
import { TooltipProvider } from "./components/ui/tooltip";
1818

19+
import { PostHogProvider } from "./post-hog";
1920
initializeSentry();
2021
initializeIcons();
2122
scan({ 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
}

src/post-hog/index.tsx

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
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+
};

src/post-hog/post-hog.d.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
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+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
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+
};
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
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+
};

src/routes/_private/page.tsx

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,24 @@
11
import { 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

57
const 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+
});

0 commit comments

Comments
 (0)