jeanma's picture
Omnilingual ASR transcription demo
ae238b3 verified
import { CONSENT_COOKIE_NAME } from "./Analytics";
// Declare gtag global function
declare global {
interface Window {
gtag: (...args: any[]) => void;
}
}
// Check if analytics are enabled and user has consented
const isAnalyticsEnabled = (): boolean => {
if (import.meta.env.VITE_ENABLE_ANALYTICS !== 'true') {
return false;
}
// Check localStorage first (works in iframes like HuggingFace), then cookies
try {
const localStorageValue = localStorage.getItem(CONSENT_COOKIE_NAME);
if (localStorageValue === "true") return true;
} catch (e) {}
return document.cookie.includes(`${CONSENT_COOKIE_NAME}=true`);
};
// Send GA4 event using gtag
export const sendGAEvent = (
eventCategory: string,
eventAction: string,
eventLabel?: string,
value?: number
) => {
if (!isAnalyticsEnabled() || !window.gtag) {
return;
}
try {
// Use gtag event format for GA4
const eventName = `${eventCategory.toLowerCase()}_${eventAction.toLowerCase()}`;
const eventParams: any = {
event_category: eventCategory,
event_label: eventLabel,
};
if (value !== undefined) {
eventParams.value = value;
}
window.gtag('event', eventName, eventParams);
} catch (error) {
console.error("GA Event Error:", error);
}
};
// Predefined event functions for common actions
export const trackTranscriptionStart = (languageCode: string) => {
sendGAEvent("Transcription", "start", languageCode);
};
export const trackTranscriptionComplete = (languageCode: string, duration?: number) => {
sendGAEvent("Transcription", "complete", languageCode, duration);
};
export const trackTranscriptionError = (languageCode: string, errorMessage?: string) => {
sendGAEvent("Transcription", "error", `${languageCode}${errorMessage ? ` - ${errorMessage}` : ''}`);
};
export const trackFileUpload = (fileType: string, fileSizeMB?: number) => {
sendGAEvent("File", "upload", fileType, fileSizeMB);
};
export const trackLanguageChange = (languageCode: string) => {
sendGAEvent("Language", "select", languageCode);
};
export const trackDownloadSRT = (languageCode: string) => {
sendGAEvent("Download", "srt", languageCode);
};
export const trackDownloadVideoWithSubtitles = (languageCode: string) => {
sendGAEvent("Download", "video_with_subtitles", languageCode);
};
export const trackReset = () => {
sendGAEvent("App", "reset");
};
export const trackWelcomeModalClose = () => {
sendGAEvent("Modal", "welcome_close");
};
export const trackSegmentEdit = (languageCode: string, editType: "text" | "timing") => {
sendGAEvent("Edit", editType, languageCode);
};
export const trackSegmentDelete = (languageCode: string) => {
sendGAEvent("Edit", "delete_segment", languageCode);
};