69 lines
2.1 KiB
JavaScript
69 lines
2.1 KiB
JavaScript
import { useEffect, useRef } from 'react';
|
|
import { getAnalytics } from './AnalyticsManager';
|
|
|
|
/**
|
|
* Hook para rastrear uso de atividades de letramento
|
|
* @param {string} activityId - ID único da atividade de letramento (ex: 'mouse-basico')
|
|
* @param {string} categoryName - Nome da categoria (ex: 'Mouse', 'Teclado')
|
|
*/
|
|
export function useLetramentoTracking(activityId, categoryName) {
|
|
const analyticsRef = useRef(getAnalytics());
|
|
const sessionStartRef = useRef(Date.now());
|
|
const completionTrackedRef = useRef(false);
|
|
|
|
// Track activity start
|
|
useEffect(() => {
|
|
if (!activityId) return;
|
|
|
|
sessionStartRef.current = Date.now();
|
|
analyticsRef.current.trackEvent('letramento_atividade_iniciada', {
|
|
atividade_id: activityId,
|
|
categoria: categoryName || 'letramento',
|
|
});
|
|
|
|
return () => {
|
|
// Track abandonment on unmount if not completed
|
|
if (!completionTrackedRef.current) {
|
|
analyticsRef.current.trackEvent('letramento_atividade_abandonada', {
|
|
atividade_id: activityId,
|
|
categoria: categoryName || 'letramento',
|
|
tempo_sessao_segundos: Math.round((Date.now() - sessionStartRef.current) / 1000),
|
|
});
|
|
}
|
|
};
|
|
}, [activityId, categoryName]);
|
|
|
|
// Track activity completion
|
|
const trackCompletion = (success = true) => {
|
|
if (!activityId || completionTrackedRef.current) return;
|
|
completionTrackedRef.current = true;
|
|
|
|
const sessionDuration = Math.round((Date.now() - sessionStartRef.current) / 1000);
|
|
|
|
analyticsRef.current.trackEvent(
|
|
success ? 'letramento_atividade_completada' : 'letramento_atividade_falhou',
|
|
{
|
|
atividade_id: activityId,
|
|
categoria: categoryName || 'letramento',
|
|
tempo_sessao_segundos: sessionDuration,
|
|
}
|
|
);
|
|
};
|
|
|
|
// Track custom letramento event
|
|
const trackEvent = (eventName, eventData = {}) => {
|
|
if (!activityId) return;
|
|
|
|
analyticsRef.current.trackEvent(eventName, {
|
|
atividade_id: activityId,
|
|
categoria: categoryName || 'letramento',
|
|
...eventData,
|
|
});
|
|
};
|
|
|
|
return {
|
|
trackCompletion,
|
|
trackEvent,
|
|
};
|
|
}
|