From 6a4788aa899e4deae7d0c72f4424733b9e71110f Mon Sep 17 00:00:00 2001 From: nflnkr Date: Sun, 2 Jun 2024 12:55:23 +0300 Subject: [PATCH 1/6] update url for answers --- lib/api/quizRelase.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/api/quizRelase.ts b/lib/api/quizRelase.ts index eab13fe..2f241bb 100644 --- a/lib/api/quizRelase.ts +++ b/lib/api/quizRelase.ts @@ -160,7 +160,7 @@ export function sendAnswer({ questionId, body, qid, preview }: SendAnswerProps) formData.append("qid", qid); return publicationMakeRequest({ - url: domain + `/answer/answer`, + url: domain + `/answer/v1.0.0/answer`, body: formData, method: "POST", }); @@ -199,7 +199,7 @@ export function sendFile({ questionId, body, qid }: SendFileParams) { formData.append("qid", qid); return publicationMakeRequest({ - url: domain + `/answer/answer`, + url: domain + `/answer/v1.0.0/answer`, body: formData, method: "POST", }); @@ -242,7 +242,7 @@ export function sendFC({ questionId, body, qid, preview }: SendFCParams) { formData.append("qid", qid); return publicationMakeRequest({ - url: domain + `/answer/answer`, + url: domain + `/answer/v1.0.0/answer`, body: formData, method: "POST", }); From 430d4f1a4b3d2304006dfb2736f933d24b1a836a Mon Sep 17 00:00:00 2001 From: nflnkr Date: Sun, 2 Jun 2024 13:12:08 +0300 Subject: [PATCH 2/6] send search params when fetching quiz settings --- lib/api/quizRelase.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/api/quizRelase.ts b/lib/api/quizRelase.ts index 2f241bb..c576894 100644 --- a/lib/api/quizRelase.ts +++ b/lib/api/quizRelase.ts @@ -78,7 +78,7 @@ export async function getData(quizId: string): Promise<{ error?: AxiosError; }> { try { - const { data, headers } = await axios(domain + `/answer/settings`, { + const { data, headers } = await axios(domain + `/answer/settings${window.location.search}`, { method: "POST", headers: { "X-Sessionkey": SESSIONS, From 3eb3966fcab960fb981d23f45ec04e94a0c85043 Mon Sep 17 00:00:00 2001 From: nflnkr Date: Sun, 2 Jun 2024 13:23:54 +0300 Subject: [PATCH 3/6] memoize metrics hooks & fix hook dependencies --- lib/utils/hooks/metrics/useVkMetricsGoals.ts | 52 ++++++++++--------- .../hooks/metrics/useYandexMetricsGoals.ts | 52 ++++++++++--------- lib/utils/hooks/useQuestionFlowControl.ts | 3 +- 3 files changed, 57 insertions(+), 50 deletions(-) diff --git a/lib/utils/hooks/metrics/useVkMetricsGoals.ts b/lib/utils/hooks/metrics/useVkMetricsGoals.ts index 1e50a39..f9389d1 100644 --- a/lib/utils/hooks/metrics/useVkMetricsGoals.ts +++ b/lib/utils/hooks/metrics/useVkMetricsGoals.ts @@ -1,4 +1,5 @@ import type { MetricsMessengers } from "@model/metrics"; +import { useMemo } from "react"; type MetricsGoal = { type: "reachGoal"; @@ -19,28 +20,31 @@ const sendMetrics = (vkPixelId: number | undefined, goal: string) => { }; export const useVkMetricsGoals = (vkId: number | undefined) => { - return { - // Посетитель открыл квиз - quizOpened: () => sendMetrics(vkId, "penaquiz-start"), - // Посетитель нажал на кнопку стартовой страницы - firstPageOpened: () => sendMetrics(vkId, "penaquiz-startquiz"), - // Посетитель кликнул по номеру телефона на стартовой странице - phoneNumberOpened: () => sendMetrics(vkId, "penaquiz-phone"), - // Посетитель кликнул по email на стартовой странице - emailOpened: () => sendMetrics(vkId, "penaquiz-email"), - // Посетитель увидел определенный результат (id - айдишник вопроса с типом result) - resultIdShown: (resultId: string) => sendMetrics(vkId, `penaquiz-result-${resultId}`), - // Посетитель нажал на ссылку в результате - resultLink: () => sendMetrics(vkId, `penaquiz-resultlink`), - // Посетитель дошёл до формы контактов - contactsFormOpened: () => sendMetrics(vkId, "penaquiz-form"), - // Посетитель заполнил форму контактов - contactsFormFilled: () => sendMetrics(vkId, "penaquiz-contacts"), - // Посетитель заполнил поле формы контактов - contactsFormField: (field: string) => sendMetrics(vkId, `penaquiz-formfield-${field}`), - // Посетитель отправил заявку с мессенджером - messengerRequestSended: (messenger: MetricsMessengers) => sendMetrics(vkId, `penaquiz-messengers-${messenger}`), - // Посетитель прошёл вопрос - questionPassed: (questionId: string) => sendMetrics(vkId, `penaquiz-step${questionId}`), - }; + return useMemo( + () => ({ + // Посетитель открыл квиз + quizOpened: () => sendMetrics(vkId, "penaquiz-start"), + // Посетитель нажал на кнопку стартовой страницы + firstPageOpened: () => sendMetrics(vkId, "penaquiz-startquiz"), + // Посетитель кликнул по номеру телефона на стартовой странице + phoneNumberOpened: () => sendMetrics(vkId, "penaquiz-phone"), + // Посетитель кликнул по email на стартовой странице + emailOpened: () => sendMetrics(vkId, "penaquiz-email"), + // Посетитель увидел определенный результат (id - айдишник вопроса с типом result) + resultIdShown: (resultId: string) => sendMetrics(vkId, `penaquiz-result-${resultId}`), + // Посетитель нажал на ссылку в результате + resultLink: () => sendMetrics(vkId, `penaquiz-resultlink`), + // Посетитель дошёл до формы контактов + contactsFormOpened: () => sendMetrics(vkId, "penaquiz-form"), + // Посетитель заполнил форму контактов + contactsFormFilled: () => sendMetrics(vkId, "penaquiz-contacts"), + // Посетитель заполнил поле формы контактов + contactsFormField: (field: string) => sendMetrics(vkId, `penaquiz-formfield-${field}`), + // Посетитель отправил заявку с мессенджером + messengerRequestSended: (messenger: MetricsMessengers) => sendMetrics(vkId, `penaquiz-messengers-${messenger}`), + // Посетитель прошёл вопрос + questionPassed: (questionId: string) => sendMetrics(vkId, `penaquiz-step${questionId}`), + }), + [vkId] + ); }; diff --git a/lib/utils/hooks/metrics/useYandexMetricsGoals.ts b/lib/utils/hooks/metrics/useYandexMetricsGoals.ts index c8d1582..e11be75 100644 --- a/lib/utils/hooks/metrics/useYandexMetricsGoals.ts +++ b/lib/utils/hooks/metrics/useYandexMetricsGoals.ts @@ -1,4 +1,5 @@ import type { MetricsMessengers } from "@model/metrics"; +import { useMemo } from "react"; type ExtendedWindow = Window & { ym?: (id: number, type: string, goal: string) => void; @@ -11,28 +12,31 @@ const sendMetrics = (yandexMetricsId: number | undefined, goal: string) => { }; export const useYandexMetricsGoals = (id: number | undefined) => { - return { - // Посетитель открыл квиз - 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}`), - }; + 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] + ); }; diff --git a/lib/utils/hooks/useQuestionFlowControl.ts b/lib/utils/hooks/useQuestionFlowControl.ts index a928059..e538738 100644 --- a/lib/utils/hooks/useQuestionFlowControl.ts +++ b/lib/utils/hooks/useQuestionFlowControl.ts @@ -23,7 +23,6 @@ export function useQuestionFlowControl() { const yandexMetrics = useYandexMetricsGoals(settings.cfg.yandexMetricsNumber); const currentQuestion = sortedQuestions.find((question) => question.id === currentQuestionId) ?? sortedQuestions[0]; - console.log("currentQuestion", currentQuestion); const linearQuestionIndex = currentQuestion && sortedQuestions.every(({ content }) => content.rule.parentId !== "root") // null when branching enabled @@ -161,7 +160,7 @@ export function useQuestionFlowControl() { if (nextQuestion.type === "result") return showResult(); setCurrentQuestionId(nextQuestion.id); - }, [currentQuestion, nextQuestion, showResult]); + }, [currentQuestion.id, nextQuestion, showResult, vkMetrics, yandexMetrics]); const setQuestion = useCallback( (questionId: string) => { From dc0e15ebbbd6fa06d69caf625f2293b2217025a5 Mon Sep 17 00:00:00 2001 From: nflnkr Date: Sun, 2 Jun 2024 13:34:14 +0300 Subject: [PATCH 4/6] fix effect deps --- lib/components/ViewPublicationPage/ResultForm.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/components/ViewPublicationPage/ResultForm.tsx b/lib/components/ViewPublicationPage/ResultForm.tsx index 4d32bf9..f6d8b4e 100644 --- a/lib/components/ViewPublicationPage/ResultForm.tsx +++ b/lib/components/ViewPublicationPage/ResultForm.tsx @@ -34,7 +34,7 @@ export const ResultForm = ({ resultQuestion }: ResultFormProps) => { useEffect(() => { vkMetrics.resultIdShown(resultQuestion.id); yandexMetrics.resultIdShown(resultQuestion.id); - }, []); + }, [resultQuestion.id, vkMetrics, yandexMetrics]); return ( Date: Sun, 2 Jun 2024 14:08:09 +0300 Subject: [PATCH 5/6] use showfc flag from quiz config --- .../ViewPublicationPage/ResultForm.tsx | 28 ++++++++++--------- lib/model/settingsData.ts | 8 +++--- lib/utils/hooks/useQuestionFlowControl.ts | 7 +++-- 3 files changed, 24 insertions(+), 19 deletions(-) diff --git a/lib/components/ViewPublicationPage/ResultForm.tsx b/lib/components/ViewPublicationPage/ResultForm.tsx index f6d8b4e..24ca994 100644 --- a/lib/components/ViewPublicationPage/ResultForm.tsx +++ b/lib/components/ViewPublicationPage/ResultForm.tsx @@ -229,19 +229,21 @@ export const ResultForm = ({ resultQuestion }: ResultFormProps) => { bottom: 0, }} > - {settings.cfg.resultInfo.showResultForm === "before" && !settings.cfg.score && ( - - )} + {settings.cfg.resultInfo.showResultForm === "before" && + settings.cfg.showfc !== false && + !settings.cfg.score && ( + + )} {settings.cfg.resultInfo.showResultForm === "after" && resultQuestion.content.redirect && (