feat(builder): add page view tracking

This commit is contained in:
Nicholas Tindle
2024-09-10 21:23:21 -05:00
parent 612ceeea62
commit ae95bad6fb
5 changed files with 47 additions and 1 deletions

View File

@@ -5,12 +5,15 @@ import { ThemeProvider as NextThemesProvider } from "next-themes";
import { ThemeProviderProps } from "next-themes/dist/types";
import { TooltipProvider } from "@/components/ui/tooltip";
import SupabaseProvider from "@/components/SupabaseProvider";
import { PageViewProvider } from "@/components/providers/PageViewProvider";
export function Providers({ children, ...props }: ThemeProviderProps) {
return (
<NextThemesProvider {...props}>
<SupabaseProvider>
<TooltipProvider>{children}</TooltipProvider>
<PageViewProvider>
<TooltipProvider>{children}</TooltipProvider>
</PageViewProvider>
</SupabaseProvider>
</NextThemesProvider>
);

View File

@@ -0,0 +1,25 @@
import React, { createContext, useContext, useEffect } from 'react';
import logPageViewAction from './actions';
const PageViewContext = createContext<null>(null);
export const PageViewProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => {
useEffect(() => {
const logPageView = async () => {
const pageViewData = { page: window.location.pathname, data: {} };
await logPageViewAction(pageViewData.page, pageViewData.data);
};
logPageView().catch(console.error);
}, []);
return (
<PageViewContext.Provider value={null}>
{children}
</PageViewContext.Provider>
);
};
export const usePageViews = () => useContext(PageViewContext);

View File

@@ -0,0 +1,6 @@
import AutoGPTServerAPI from "@/lib/autogpt-server-api/client";
export default function logPageViewAction(page: string, data: any) {
const apiClient = new AutoGPTServerAPI();
apiClient.logPageView({ page, data });
}

View File

@@ -10,6 +10,7 @@ import {
User,
UserData,
TutorialStepData,
PageViewData,
} from "./types";
export default class AutoGPTServerAPI {
@@ -43,6 +44,12 @@ export default class AutoGPTServerAPI {
return this._request("POST", "/analytics/log_tutorial_step", data);
}
async logPageView(pageViewData: PageViewData): Promise<string> {
return this._request("POST", "/analytics/log_page_view", {
page_view_data: pageViewData,
});
}
async getBlocks(): Promise<Block[]> {
return await this._get("/blocks");
}

View File

@@ -194,3 +194,8 @@ export type TutorialStepData = {
step: string;
data: { [key: string]: any };
};
export type PageViewData = {
page: string;
data: { [key: string]: any };
};