frontAnswerer/lib/utils/hooks/useVkMetricGoals.ts

62 lines
2.2 KiB
TypeScript
Raw Normal View History

2024-04-22 14:13:43 +00:00
import { useEffect, useState } from "react";
type VkMetric = {
type: "reachGoal";
id: number;
goal: string;
};
type ExtendedWindow = Window & { _tmp?: VkMetric[] };
type Messenger =
| "telegram"
| "viber"
| "whatsapp"
| "vkontakte"
| "messenger"
| "skype"
| "instagram";
const sendMetrics = (vkPixelId: number | undefined, goal: string) => {
if (vkPixelId) {
(window as ExtendedWindow)._tmp?.push({
type: "reachGoal",
id: vkPixelId,
goal,
});
}
};
export const useVkMetricGoals = (vkPixelId: number | undefined) => {
const [vkId, setVkId] = useState<number | undefined>(undefined);
useEffect(() => {
if (vkPixelId) {
setVkId(vkPixelId);
}
}, [vkPixelId]);
return {
// Посетитель открыл квиз
quizOpened: () => sendMetrics(vkId, "penaquiz-start"),
// Посетитель нажал на кнопку стартовой страницы
firstPageOpened: () => sendMetrics(vkId, "penaquiz-startquiz"),
// Посетитель кликнул по номеру телефона на стартовой странице
phoneNumberOpened: () => sendMetrics(vkId, "penaquiz-phone"),
// Посетитель кликнул по email на стартовой странице
emailOpened: () => sendMetrics(vkId, "penaquiz-email"),
// Посетитель увидел определенный результат (id - айдишник вопроса с типом result)
resultShown: (resultId: string) => sendMetrics(vkId, `penaquiz-result-${resultId}`),
// Посетитель дошёл до формы контактов
contactsFormOpened: () => sendMetrics(vkId, "penaquiz-form"),
// Посетитель заполнил форму контактов
contactsFormFilled: () => sendMetrics(vkId, "penaquiz-contacts"),
// Посетитель отправил заявку с мессенджером
messengerRequestSended: (messenger: Messenger) =>
sendMetrics(vkId, `marquiz-messengers-${messenger}`),
// Посетитель прошёл вопрос
questionPassed: (questionId: string) =>
sendMetrics(vkId, `marquiz-step${questionId}`),
};
};