frontAnswerer/lib/utils/hooks/metrics/useYandexMetricsGoals.ts

43 lines
2.3 KiB
TypeScript
Raw Normal View History

2024-05-06 13:47:19 +00:00
import type { MetricsMessengers } from "@model/metrics";
import { useMemo } from "react";
2024-05-06 13:47:19 +00:00
type ExtendedWindow = Window & {
ym?: (id: number, type: string, goal: string) => void;
};
const sendMetrics = (yandexMetricsId: number | undefined, goal: string) => {
if (yandexMetricsId) {
(window as ExtendedWindow).ym?.(yandexMetricsId, "reachGoal", goal);
}
};
2024-05-10 12:48:47 +00:00
export const useYandexMetricsGoals = (id: number | undefined) => {
return useMemo(
() => ({
// Посетитель открыл квиз
quizOpened: () => sendMetrics(id, "penaquiz-start"),
// Посетитель нажал на кнопку стартовой страницы
firstPageOpened: () => sendMetrics(id, "penaquiz-startquiz"),
// Посетитель кликнул по номеру телефона на стартовой странице
phoneNumberOpened: () => sendMetrics(id, "penaquiz-phone"),
// Посетитель кликнул по email на стартовой странице
emailOpened: () => sendMetrics(id, "penaquiz-email"),
// Посетитель увидел определенный результат (id - айдишник вопроса с типом result)
resultIdShown: (resultId: string) => sendMetrics(id, `penaquiz-result-${resultId}`),
// Посетитель нажал на ссылку в результате
resultLink: () => sendMetrics(id, `penaquiz-resultlink`),
// Посетитель дошёл до формы контактов
contactsFormOpened: () => sendMetrics(id, "penaquiz-form"),
// Посетитель заполнил форму контактов
contactsFormFilled: () => sendMetrics(id, "penaquiz-contacts"),
// Посетитель заполнил поле формы контактов
contactsFormField: (field: string) => sendMetrics(id, `penaquiz-formfield-${field}`),
// Посетитель отправил заявку с мессенджером
messengerRequestSended: (messenger: MetricsMessengers) => sendMetrics(id, `penaquiz-messengers-${messenger}`),
// Посетитель прошёл вопрос
questionPassed: (questionId: string) => sendMetrics(id, `penaquiz-step${questionId}`),
}),
[id]
);
2024-05-06 13:47:19 +00:00
};