diff --git a/src/pages/IntegrationsPage/PartnersBoard/AnalyticsModal/AnalyticsModal.tsx b/src/pages/IntegrationsPage/PartnersBoard/AnalyticsModal/AnalyticsModal.tsx index 32461c20..677c117b 100644 --- a/src/pages/IntegrationsPage/PartnersBoard/AnalyticsModal/AnalyticsModal.tsx +++ b/src/pages/IntegrationsPage/PartnersBoard/AnalyticsModal/AnalyticsModal.tsx @@ -16,6 +16,8 @@ import { updateQuiz } from "@root/quizes/actions"; import { useCurrentQuiz } from "@root/quizes/hooks"; import { QuizMetricType } from "@model/quizSettings"; import { InstructionsBlock } from "./IntsructionsBlock/InstructionsBlock"; +import { YandexInstruction } from "./IntsructionsBlock/Instructions/YandexInstruction"; +import { VKPixelInstruction } from "./IntsructionsBlock/Instructions/VKInstruction"; interface Props { isModalOpen: boolean; @@ -46,8 +48,7 @@ export default function AnalyticsModal({ instructionTitle: "Как установить Яндекс Метрику в квиз?", instructionSubTitle: "Инструкция по настройке Яндекс Метрики", instructionHeader: "Настройка счётчика и интеграции", - instructionText: - "Повседневная практика показывает, что дальнейшее развитие различных форм деятельности требуют определения и уточнения соответствующий условий активизации.Повседневная практика показывает, что дальнейшее развитие различных форм деятельности требуют определения и уточнения соответствующий условий активизации.Повседневная практика показывает, что дальнейшее развитие различных форм деятельности требуют определения и уточнения соответствующий условий активизации.", + instructionText: , }, vk: { header: "VK Пиксель", @@ -55,8 +56,7 @@ export default function AnalyticsModal({ instructionTitle: "Как установить VK Пиксель в квиз?", instructionSubTitle: "Инструкция по настройке VK Пиксель", instructionHeader: "Настройка счётчика и интеграции", - instructionText: - "Повседневная практика показывает, что дальнейшее развитие различных форм деятельности требуют определения и уточнения соответствующий условий активизации.", + instructionText: , }, }; }, []); diff --git a/src/pages/IntegrationsPage/PartnersBoard/AnalyticsModal/IntsructionsBlock/Instructions/VKInstruction.tsx b/src/pages/IntegrationsPage/PartnersBoard/AnalyticsModal/IntsructionsBlock/Instructions/VKInstruction.tsx new file mode 100644 index 00000000..557560e7 --- /dev/null +++ b/src/pages/IntegrationsPage/PartnersBoard/AnalyticsModal/IntsructionsBlock/Instructions/VKInstruction.tsx @@ -0,0 +1,214 @@ +import * as React from "react"; +import { Box, List, ListItem, Typography } from "@mui/material"; + +export const VKPixelInstruction = () => { + return ( + + + + Чтобы настроить VK пиксель , нужно выполнить следующие шаги: + + + Перед тем, как создать пиксель, убедитесь, что корректно указали + электронную почту для получения уведомлений — это нужно, чтобы доступы + работали правильно. Сделать это можно в «Настройках» во вкладке + «Контакты», и затем приступать к созданию пикселя.{" "} + + + В VK Рекламе есть два способа создать пиксель: + + + + + 1) В момент создания рекламной кампании по продвижению сайта. + Чтобы сделать это, введите в поле «Рекламируемый сайт» ссылку, + после чего система предложит вам создать пиксель для этого домена. + + + + + 2) На вкладке «Сайты». Чтобы создать пиксель, перейдите в раздел + «Сайты» и нажмите на кнопку «Добавить пиксель». Введите домен + сайта, для которого хотите отслеживать конверсии, и нажмите + «Добавить». + + + + + + Если ранее вы рекламировали сайт, то возможно, на нем уже установлен + пиксель — в этом случае при запуске рекламы вы увидите подсказку + «Привязан пиксель ID 1234567». В таком случае вы можете добавить еще + один пиксель на сайт через кнопку «Создать новый пиксель» (например, + если у вас нет доступа к этому) или отправить{" "} + + запрос на доступ к уже имеющемуся пикселю. + + + + + отом Скопируйте номер пикселя и вставьте его в поле «Введите номер + пикселя» в личном кабинете PenaQuiz. Опубликуйте квиз. + + Как настроить события пикселя + + + Кампании по продвижению сайтов в VK Рекламе по умолчанию можно + оптимизировать на клики и показы. Если вы используете пиксель, то + сможете настроить оптимизацию на другие действия пользователей, + например: + + + + • Посетитель открыл квиз + + + • Посетитель увидел результат + + + • Посетитель увидел определенный результат + + + + В разделе «Сайты» в меню слева выберите пиксель и нажмите «Настройка». + Чтобы добавить событие, перейдите во вкладку «События» и нажмите + кнопку{" "} + + «Добавить событие». + + + + + + + • Посетитель открыл квиз: penaquiz-start + + + + + + • Посетитель нажал на кнопку стартовой страницы:{" "} + penaquiz-startquiz + + + + + + • Посетитель кликнул по номеру телефона на стартовой странице:{" "} + penaquiz-phone + + + + + + • Посетитель кликнул по email на стартовой странице:{" "} + penaquiz-email + + + + + + • Посетитель увидел результат: penaquiz-result (цель + прописывается, если подключены результаты) + + + + + + • Посетитель увидел определенный результат:{" "} + penaquiz-result-{"{id}"} + (где id — id результата. Например, marquiz-result-149495) + + + + + + • Посетитель дошёл до формы контактов: penaquiz-form + + + + + + • Посетитель заполнил форму контактов : penaquiz-contacts + + + + + + • Посетитель отправил заявку с мессенджером:{" "} + penaquiz-messengers-X, где X — один из мессенджеров. + Например, + + + + + + penaquiz-messengers-telegram + + + + + penaquiz-messengers-viber + + + + + penaquiz-messengers-whatsapp + + + + + penaquiz-messengers-vkontakte + + + + + penaquiz-messengers-messenger + + + + + penaquiz-messengers-skype + + + + + penaquiz-messengers-instagram + + + + + + + • Посетитель увидел страницу «Спасибо»: penaquiz-finish + + + + + • Посетитель прошёл вопрос N: penaquiz-stepN + (где N — порядковый номер вопроса. Например, penaquiz + -step2) + + + + + + 8. Кликните кнопку «Сохранить». Готово! + + + + + Если в консоли или в интерфейсе отсутствуют данные, значит цель не + фиксируется. Скорее всего вы не указали номер счётчика в настройках или + не опубликовали квиз после этого. + + + Если данные присутствуют (цели в квиз работают), но в пикселе они не + отображаются, то вам необходимо проверить последовательность целей в + настройках пикселя (если настроена составная цель). Затем нужно + дождаться срабатывания цели (возможны задержки со стороны VK) или + обратиться в техподдержку VK с выяснением возможных проблем. + + + ); +}; diff --git a/src/pages/IntegrationsPage/PartnersBoard/AnalyticsModal/IntsructionsBlock/Instructions/YandexInstruction.tsx b/src/pages/IntegrationsPage/PartnersBoard/AnalyticsModal/IntsructionsBlock/Instructions/YandexInstruction.tsx new file mode 100644 index 00000000..ae98bf7a --- /dev/null +++ b/src/pages/IntegrationsPage/PartnersBoard/AnalyticsModal/IntsructionsBlock/Instructions/YandexInstruction.tsx @@ -0,0 +1,211 @@ +import * as React from "react"; +import { Box, List, ListItem, Typography } from "@mui/material"; + +export const YandexInstruction = () => { + return ( + + + Важно! Счётчик метрики может показывать статус{" "} + «Не найден» и быть окрашен в красный, это связано с особенностями + интеграции Метрики и PenaQuiz. Однако, если вы получаете статистику + (видите посещения в отчётах), это означает, что счётчик работает и + собирает статистику по вашему сайту. + + + Чтобы настроить Яндекс Метрику, нужно выполнить следующие шаги: + + + + + 1. Перейдите на сайт Яндекс Метрики metrika.yandex.ru" + {" "} + + + а) Если у вас ещё нет счётчика: + + + Авторизуйтесь и нажмите «Добавить счётчик». + + + Придумайте имя счётчика. Укажите прямую ссылку на квиз в поле + «Адрес сайта». Для её получения откройте в PenaQuiz редактирование + квиза (Мои квизы {"=>"} Редактировать), откройте вкладку «Установка + квиза» {"=>"} «Ссылка на квиз», или же нажмите опубликовать и + перейдите по ссылке на публикацию квиза, скопируйте ссылку с адресной + строки и вставьте. + + + Можете оставить включенными автоматические цели. Это поможет + отправлять часть событий вашего квиза в качестве целей в Метрику без + дополнительных настроек. + + Нажмите «Создать счётчик»: + + На следующей странице подтвердите и нажмите «Начать пользоваться». + + + Введите номер счетчика в интеграции квиза “яндекс метрика” + + + б) Если у вас уже есть счётчик: + + Зайдите в созданный счетчик + + Перейдите в настройки счётчика и добавьте{" "} + прямую ссылку на ваш квиз в раздел «Дополнительные адреса». + + + + 2. Перейдите во вкладку «Интеграции» и выберите «Яндекс Метрика» в + редакторе квиза. + {" "} + + + + 3. Скопируйте номер счётчика и вставьте его в поле «Номер счётчика» + в личном кабинете PenaQuiz. Опубликуйте квиз. + + + + + 4. На сайте Яндекс Метрики в настройках счётчика перейдите во + вкладку «Цели». + + + + + 5. Если автоматических событий недостаточно, вы можете настроить + дополнительные цели вручную. Создайте новую цель с помощью кнопки + «Добавить цель».. + + + + В поле «Название» укажите любой текст, соответствующий текущей + цели (шагу квиза), выберите тип условия «JavaScript-событие» и в поле{" "} + «Идентификатор цели» укажите идентификатор «Содержит»: + + + + + • Посетитель открыл квиз: penaquiz-start + + + + + • Посетитель кликнул по номеру телефона на стартовой странице:{" "} + penaquiz-phone + + + + + • Посетитель кликнул по email на стартовой странице: + penaquiz-email + + + + + + • Посетитель увидел результат: penaquiz-result (цель + прописывается, если подключены результаты) + + + + + • Посетитель увидел определенный результат:{" "} + penaquiz-result- {"{id}"} + (где id — id результата. Например, marquiz-result-149495) + + + + + + • Посетитель дошёл до формы контактов: penaquiz-form + + + + + + • Посетитель заполнил форму контактов penaquiz-contacts + + + + + + • Посетитель отправил заявку с мессенджером:{" "} + penaquiz-messengers-X, где X — один из мессенджеров. + Например, + + + + + + penaquiz-messengers-telegram + + + + + penaquiz-messengers-viber + + + + + penaquiz-messengers-whatsapp + + + + + penaquiz-messengers-vkontakte + + + + + penaquiz-messengers-messenger + + + + + penaquiz-messengers-skype + + + + + penaquiz-messengers-instagram + + + + + + • Посетитель увидел страницу «Спасибо»: penaquiz-finish + + + + + • Посетитель прошёл вопрос N: penaquiz-stepN + (где N — порядковый номер вопроса. Например, penaquiz + -step2) + + + + + + 8. Кликните кнопку «Сохранить». Готово! + + + + + Если в консоли или в интерфейсе отсутствуют данные, значит цель не + фиксируется. Скорее всего вы не указали номер счётчика в настройках или + не опубликовали квиз после этого. + + + Если данные присутствуют (цели в квиз работают), но в Метрике они не + отображаются, то вам необходимо проверить последовательность целей в + настройках Метрики (если настроена составная цель). Затем нужно + дождаться срабатывания цели (возможны задержки со стороны Яндекс) или + обратиться в{" "} + техподдержку Яндекс с + выяснением возможных проблем. + + + ); +}; diff --git a/src/pages/IntegrationsPage/PartnersBoard/AnalyticsModal/IntsructionsBlock/InstructionsBlock.tsx b/src/pages/IntegrationsPage/PartnersBoard/AnalyticsModal/IntsructionsBlock/InstructionsBlock.tsx index afa87ee1..cf6cff13 100644 --- a/src/pages/IntegrationsPage/PartnersBoard/AnalyticsModal/IntsructionsBlock/InstructionsBlock.tsx +++ b/src/pages/IntegrationsPage/PartnersBoard/AnalyticsModal/IntsructionsBlock/InstructionsBlock.tsx @@ -7,7 +7,7 @@ type InstructionsBlockProps = { headerText: string; subHeaderText: string; instructionTitle: string; - instructionsText: string; + instructionsText: JSX.Element; }; export const InstructionsBlock: FC = ({ @@ -78,9 +78,7 @@ export const InstructionsBlock: FC = ({ > {instructionTitle} - - {instructionsText} - + {instructionsText} )} diff --git a/src/pages/Landing/FooterLanding.tsx b/src/pages/Landing/FooterLanding.tsx index fb9dc7d2..2836586f 100644 --- a/src/pages/Landing/FooterLanding.tsx +++ b/src/pages/Landing/FooterLanding.tsx @@ -101,7 +101,7 @@ export default function Component() { /> - ООО Пена © 2023 + ООО Пена © 2024 diff --git a/src/pages/Tariffs/tariffsUtils/createTariffElements.tsx b/src/pages/Tariffs/tariffsUtils/createTariffElements.tsx index a46e75dc..38922c57 100644 --- a/src/pages/Tariffs/tariffsUtils/createTariffElements.tsx +++ b/src/pages/Tariffs/tariffsUtils/createTariffElements.tsx @@ -31,7 +31,7 @@ export const createTariffElements = ( priceBeforeDiscounts - priceAfterDiscounts ? `${( (priceBeforeDiscounts - priceAfterDiscounts) / - (priceBeforeDiscounts / 100) + (Math.trunc(priceBeforeDiscounts) / 100) ).toFixed(0)}%` : "" } @@ -47,7 +47,7 @@ export const createTariffElements = ( onClick: () => onclick({ id: tariff._id, - price: priceAfterDiscounts / 100, + price: Math.trunc(priceAfterDiscounts) / 100, }), }} headerText={tariff.name} @@ -63,7 +63,7 @@ export const createTariffElements = ( lineHeight: "21px", }} > - {currencyFormatter.format(priceBeforeDiscounts / 100)} + {currencyFormatter.format(Math.trunc(priceBeforeDiscounts) / 100)} )} - {currencyFormatter.format(priceAfterDiscounts / 100)} + {currencyFormatter.format(Math.trunc(priceAfterDiscounts) / 100)} } diff --git a/src/stores/results/actions.ts b/src/stores/results/actions.ts index ccaf2be1..aa6eb4e4 100644 --- a/src/stores/results/actions.ts +++ b/src/stores/results/actions.ts @@ -96,10 +96,13 @@ export const ExportResults = async ( parseFilters(filterNew, filterDate), ); - const blob = new Blob([data as BlobPart], { type: "application/json" }); + console.log(typeof data) + + const blob = new Blob([data as BlobPart], { type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8" }); const link = document.createElement("a"); - link.href = window.URL.createObjectURL(blob as Blob); + link.href = window.URL.createObjectURL(data as Blob); + console.log(link) link.download = `report_${new Date().getTime()}.xlsx`; link.click(); } catch (nativeError) { diff --git a/src/utils/hooks/useAfterpay.ts b/src/utils/hooks/useAfterpay.ts index 0798345a..9f500764 100644 --- a/src/utils/hooks/useAfterpay.ts +++ b/src/utils/hooks/useAfterpay.ts @@ -58,8 +58,16 @@ export const useAfterpay = () => { "afterpay", ); - if (afterpay) { - checkPayment(); + const payCartPendingRequestDeadline = localStorage.getItem( + "payCartPendingRequestDeadline", + ); + const deadline = payCartPendingRequestDeadline + ? Number(payCartPendingRequestDeadline) + : Date.now() + 20 * MINUTE; + if (Date.now() <= deadline) { + if (afterpay) { + checkPayment(); + } } }; diff --git a/yarn.lock b/yarn.lock index 41e34cfd..9785f209 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4981,9 +4981,9 @@ ejs@^3.1.6: jake "^10.8.5" electron-to-chromium@^1.4.668: - version "1.4.737" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.737.tgz#3a774a58e04980741f65d440f5fdf57af18b6dde" - integrity sha512-QvLTxaLHKdy5YxvixAw/FfHq2eWLUL9KvsPjp0aHK1gI5d3EDuDgITkvj0nFO2c6zUY3ZqVAJQiBYyQP9tQpfw== + version "1.4.738" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.738.tgz#9a7fca98abaee61e20c9c25013d5ce60bb533436" + integrity sha512-lwKft2CLFztD+vEIpesrOtCrko/TFnEJlHFdRhazU7Y/jx5qc4cqsocfVrBg4So4gGe9lvxnbLIoev47WMpg+A== emittery@^0.10.2: version "0.10.2"