From 3f881857b68341a033666c5edc5021b79e01e3f5 Mon Sep 17 00:00:00 2001 From: Daniil Chemerkin Date: Fri, 12 Jul 2024 19:19:16 +0000 Subject: [PATCH] Page mentioned in --- index.html | 1 + package-lock.json | 18 +++- package.json | 3 +- public/new-york-times.png | Bin 0 -> 4121 bytes public/partnersWithoutNewYorkTime.png | Bin 0 -> 9085 bytes src/components/App/index.tsx | 1 + .../v1/components/Questionnaire/index.tsx | 6 +- .../pages/ABDesign/v1/pages/AboutUs/index.tsx | 6 +- .../pages/ABDesign/v1/pages/Both/index.tsx | 8 +- .../pages/ABDesign/v1/pages/Gender/index.tsx | 14 ++- .../ABDesign/v1/pages/MentionedIn/index.tsx | 100 ++++++++++++++++++ .../v1/pages/MentionedIn/styles.module.css | 100 ++++++++++++++++++ .../ABDesign/v1/pages/WithHead/index.tsx | 6 +- .../ABDesign/v1/pages/WithHeart/index.tsx | 6 +- src/components/pages/AboutUs/index.tsx | 2 +- src/data.tsx | 60 ++++++++++- src/init.tsx | 1 + src/routerComponents/ABDesign/v1/index.tsx | 5 + src/routes.ts | 35 +++--- src/services/metric/metricService.ts | 34 +++++- src/types.ts | 1 + 21 files changed, 377 insertions(+), 30 deletions(-) create mode 100644 public/new-york-times.png create mode 100644 public/partnersWithoutNewYorkTime.png create mode 100644 src/components/pages/ABDesign/v1/pages/MentionedIn/index.tsx create mode 100644 src/components/pages/ABDesign/v1/pages/MentionedIn/styles.module.css diff --git a/index.html b/index.html index 9d7ae8b..1dbec75 100755 --- a/index.html +++ b/index.html @@ -120,6 +120,7 @@ e[i]=e[i]||function(){(e[i].a=e[i].a||[]).push(arguments)}, me=x.createElement(pe),me.async=1,me.src=r,nt=x.getElementsByTagName(pe)[0],nt.parentNode.insertBefore(me,nt)}) (window, document, 'script', 'https://abt.s3.yandex.net/expjs/latest/exp.js', 'ymab'); + ymab('metrika.95799066', 'setConfig', { enableJS: true, enableWatch: true }); ymab('metrika.95799066', 'init'/*, {clientFeatures}, {callback}*/); diff --git a/package-lock.json b/package-lock.json index b4afd0a..f5caf0c 100755 --- a/package-lock.json +++ b/package-lock.json @@ -36,7 +36,8 @@ "react-slick": "^0.30.2", "sass": "^1.77.6", "slick-carousel": "^1.8.1", - "unique-names-generator": "^4.7.1" + "unique-names-generator": "^4.7.1", + "yandex-metrica-ab-react": "^1.6.1" }, "devDependencies": { "@types/core-js": "^2.5.8", @@ -4964,6 +4965,15 @@ "node": ">= 6" } }, + "node_modules/yandex-metrica-ab-react": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/yandex-metrica-ab-react/-/yandex-metrica-ab-react-1.6.1.tgz", + "integrity": "sha512-PES0h8lxE/4MgGkGjvaVyyf3axqiJ6/J857jI9N3GCK8+CA0QBLSwtWw4s7DKDUqYgJBPI0sBlhuplCFHWJRgQ==", + "peerDependencies": { + "react": ">=16", + "react-dom": ">16" + } + }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", @@ -8336,6 +8346,12 @@ "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" }, + "yandex-metrica-ab-react": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/yandex-metrica-ab-react/-/yandex-metrica-ab-react-1.6.1.tgz", + "integrity": "sha512-PES0h8lxE/4MgGkGjvaVyyf3axqiJ6/J857jI9N3GCK8+CA0QBLSwtWw4s7DKDUqYgJBPI0sBlhuplCFHWJRgQ==", + "requires": {} + }, "yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/package.json b/package.json index 15f562d..ff002c6 100755 --- a/package.json +++ b/package.json @@ -42,7 +42,8 @@ "react-slick": "^0.30.2", "sass": "^1.77.6", "slick-carousel": "^1.8.1", - "unique-names-generator": "^4.7.1" + "unique-names-generator": "^4.7.1", + "yandex-metrica-ab-react": "^1.6.1" }, "devDependencies": { "@types/core-js": "^2.5.8", diff --git a/public/new-york-times.png b/public/new-york-times.png new file mode 100644 index 0000000000000000000000000000000000000000..6f365220b64675c7b5b4bacb5912d3097649a482 GIT binary patch literal 4121 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 X7w{*k@Tg5i00000NkvXXu0mjf&TeO* literal 0 HcmV?d00001 diff --git a/public/partnersWithoutNewYorkTime.png b/public/partnersWithoutNewYorkTime.png new file mode 100644 index 0000000000000000000000000000000000000000..442c2978d402ea0469bb72bbf39c6b03500eb70f GIT binary patch literal 9085 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 literal 0 HcmV?d00001 diff --git a/src/components/App/index.tsx b/src/components/App/index.tsx index 2368625..66ecc94 100755 --- a/src/components/App/index.tsx +++ b/src/components/App/index.tsx @@ -169,6 +169,7 @@ function App(): JSX.Element { } else if (location.pathname.includes("v1/trial-payment")) { metricService.reachGoal(EGoals.AURA_TRIAL_PAYMENT_PAGE_VISIT, true) } + // metricService.initMetricAB() metricService.hit() }, [location]); diff --git a/src/components/pages/ABDesign/v1/components/Questionnaire/index.tsx b/src/components/pages/ABDesign/v1/components/Questionnaire/index.tsx index b6b9ce1..ceee7f6 100644 --- a/src/components/pages/ABDesign/v1/components/Questionnaire/index.tsx +++ b/src/components/pages/ABDesign/v1/components/Questionnaire/index.tsx @@ -14,6 +14,7 @@ import { stepsQuestionary } from "../../data/stepsQuestionary"; import Answer from "../../ui/Answer"; import Stepper from "../Stepper"; import { useLottie } from "@/hooks/lottie/useLottie"; +import {useMetricABFlags} from "@/services/metric/metricService.ts"; function QuestionnairePage(): JSX.Element { const { question, stepId } = useParams(); @@ -29,10 +30,13 @@ function QuestionnairePage(): JSX.Element { }); const { gender } = useSelector(selectors.selectQuestionnaire); const clickAnswerTimeOutRef = useRef(); + const { flags } = useMetricABFlags(); + const aboutUsAnswersKey = flags?.aboutUsAnswers?.[0] useLottie({ preloadKey: currentQuestion?.lottie?.preloadKey, }); + useEffect(() => { const currentStepIndex = steps.findIndex((item) => item.id === stepId); if (currentStepIndex === -1) return navigate(routes.client.notFound()); @@ -83,7 +87,7 @@ function QuestionnairePage(): JSX.Element { currentStepIndex >= steps.length - 1 && questionIndex >= questionsLength - 1 ) { - return navigate(routes.client.aboutUsV1()); + return navigate(routes.client.aboutUsV1(aboutUsAnswersKey)); } if (questionIndex < questionsLength - 1) { diff --git a/src/components/pages/ABDesign/v1/pages/AboutUs/index.tsx b/src/components/pages/ABDesign/v1/pages/AboutUs/index.tsx index 0bf141e..8d17dad 100644 --- a/src/components/pages/ABDesign/v1/pages/AboutUs/index.tsx +++ b/src/components/pages/ABDesign/v1/pages/AboutUs/index.tsx @@ -3,7 +3,7 @@ import styles from "./styles.module.css"; import Title from "@/components/Title"; import { useDispatch, useSelector } from "react-redux"; import { actions, selectors } from "@/store"; -import { useNavigate } from "react-router-dom"; +import {useNavigate, useSearchParams} from "react-router-dom"; import routes from "@/routes"; import Header from "../../components/Header"; import Answer from "../../ui/Answer"; @@ -15,6 +15,8 @@ function AboutUsPage() { const { gender } = useSelector(selectors.selectQuestionnaire); const [selectedAnswer, setSelectedAnswer] = useState(null); const clickAnswerTimeOutRef = useRef(); + const [searchParams] = useSearchParams() + const aboutUsAnswersKey = searchParams.get('key') ?? "aboutUsAnswersNormal" const handleClick = async (answer: IAnswer) => { setSelectedAnswer(answer); @@ -43,7 +45,7 @@ function AboutUsPage() {
- {aboutUsAnswers.map((answer, index) => ( + {aboutUsAnswers[aboutUsAnswersKey].map((answer, index) => ( { navigate(-1); }; const handleNext = () => { - navigate(routes.client.aboutUsV1()); + navigate(routes.client.aboutUsV1(aboutUsAnswersKey)); }; return ( diff --git a/src/components/pages/ABDesign/v1/pages/Gender/index.tsx b/src/components/pages/ABDesign/v1/pages/Gender/index.tsx index f46acf4..e7c1041 100644 --- a/src/components/pages/ABDesign/v1/pages/Gender/index.tsx +++ b/src/components/pages/ABDesign/v1/pages/Gender/index.tsx @@ -14,6 +14,7 @@ import { genders } from "../../data/genders"; import PrivacyPolicy from "../../components/PrivacyPolicy"; import Toast from "../../components/Toast"; import { DotLottieReact } from "@lottiefiles/dotlottie-react"; +import { useMetricABFlags } from "@/services/metric/metricService"; interface IGenderPageProps { productKey?: EProductKeys; @@ -29,12 +30,18 @@ function GenderPage({ productKey }: IGenderPageProps): JSX.Element { const { checked: privacyPolicyChecked } = useSelector( selectors.selectPrivacyPolicy ); + const { flags } = useMetricABFlags(); + const isNextPageMentioned = flags?.isNextPageMentioned?.[0] useEffect(() => { const feature = location.pathname.replace("/v1/gender/", ""); const isShowTryApp = targetId === "i"; dispatch(actions.userConfig.addIsShowTryApp(isShowTryApp)); - dispatch(actions.userConfig.setFeature(feature.includes("/v1/gender") ? "" : feature)); + dispatch( + actions.userConfig.setFeature( + feature.includes("/v1/gender") ? "" : feature + ) + ); }, [dispatch, location.pathname, targetId]); useEffect(() => { @@ -54,7 +61,10 @@ function GenderPage({ productKey }: IGenderPageProps): JSX.Element { if (productKey === EProductKeys["chat.aura"]) { return navigate(routes.client.advisorChatBirthdate()); } - navigate(`/v1/questionnaire/profile/flowChoice`); + if (isNextPageMentioned === "true") { + return navigate(routes.client.mentionedInV1()); + } + return navigate(`/v1/questionnaire/profile/flowChoice`); }; const selectGender = async (gender: Gender) => { diff --git a/src/components/pages/ABDesign/v1/pages/MentionedIn/index.tsx b/src/components/pages/ABDesign/v1/pages/MentionedIn/index.tsx new file mode 100644 index 0000000..96724c4 --- /dev/null +++ b/src/components/pages/ABDesign/v1/pages/MentionedIn/index.tsx @@ -0,0 +1,100 @@ +import Title from "@/components/Title"; +import styles from "./styles.module.css"; +import { useNavigate } from "react-router-dom"; +import { useSelector } from "react-redux"; +import { selectors } from "@/store"; +import Header from "../../components/Header"; +import { useDynamicSize } from "@/hooks/useDynamicSize"; +import BackgroundTopBlob from "../../ui/BackgroundTopBlob"; +import QuestionnaireGreenButton from "../../ui/GreenButton"; +import { useTranslation } from "react-i18next"; + +function MentionedInPage() { + const navigate = useNavigate(); + const { t } = useTranslation(); + const { width: pageWidth, elementRef } = useDynamicSize({ + defaultWidth: 393, + }); + const { gender } = useSelector(selectors.selectQuestionnaire); + + const handleNext = () => { + return navigate(`/v1/questionnaire/profile/flowChoice`); + }; + + const getBackgroundColor = () => { + return gender === "male" ? "#C1E5FF" : "#f7ebff"; + }; + + return ( +
+ +
+ + + 42+ million people + + + already use AURA + + +
+ + quotes + + + + +

+ AURA aims to illuminate interpersonal connections using astrological + signs +

+ +
+ + + MENTIONED IN + + +
+ + {t("next")} + +

1123 Rimer Dr Moraga, California 94556

+
+
+ ); +} + +export default MentionedInPage; diff --git a/src/components/pages/ABDesign/v1/pages/MentionedIn/styles.module.css b/src/components/pages/ABDesign/v1/pages/MentionedIn/styles.module.css new file mode 100644 index 0000000..fd898fe --- /dev/null +++ b/src/components/pages/ABDesign/v1/pages/MentionedIn/styles.module.css @@ -0,0 +1,100 @@ +.page { + display: flex; + flex-direction: column; + align-items: center; + width: 100%; + min-height: 100dvh; + max-width: 460px; + padding: 20px 24px; + color: #2c2c2c; + overflow: initial; +} + +.background-top-blob { + position: absolute; + top: -40px; + left: 0; +} + +.header { + z-index: 1; +} + +.title { + font-size: 28px; + font-weight: 600; + margin: 0; + margin-top: 40px; + z-index: 1; + line-height: 125%; + color: #0cc3ac; +} + +.sub-title { + font-size: 16px; + font-weight: 400; + line-height: 24px; + color: rgb(32, 31, 31); +} + +.quote-container { + display: flex; + flex-direction: column; + -webkit-box-align: center; + align-items: center; + background: rgb(251, 251, 255); + border-radius: 12px; + padding: 24px 21px 28px; + width: 100%; + margin-bottom: 24px; +} + +.quote { + color: #0cc3ac; +} + +.quote-container p { + width: 100%; + margin-top: 8px; + margin-bottom: 28px; + font-size: 16px; + font-weight: 600; + line-height: 24px; + text-align: center; + color: rgb(15, 15, 15); +} + +.quote-img { + max-width: 134px; + width: 100%; +} + +.text-h3 { + font-size: 12px; + font-weight: 600; + line-height: 18px; + color: rgb(32, 31, 31); + margin-bottom: 16px; +} + +.full { + width: 100%; +} + +.buttons-container { + position: sticky; + bottom: 0; + margin-top: 10px; + padding-top: 10px; + width: 100%; +} + +.address { + margin-top: 12px; + margin-bottom: 8px; + text-align: center; + color: gray; + font-size: 12px; + margin-bottom: 16px; + text-transform: uppercase; +} \ No newline at end of file diff --git a/src/components/pages/ABDesign/v1/pages/WithHead/index.tsx b/src/components/pages/ABDesign/v1/pages/WithHead/index.tsx index 6f070e7..44fcf97 100644 --- a/src/components/pages/ABDesign/v1/pages/WithHead/index.tsx +++ b/src/components/pages/ABDesign/v1/pages/WithHead/index.tsx @@ -11,13 +11,15 @@ import BackgroundTopBlob from "../../ui/BackgroundTopBlob"; import Header from "../../components/Header"; import { ELottieKeys, useLottie } from "@/hooks/lottie/useLottie"; import { DotLottieReact } from "@lottiefiles/dotlottie-react"; +import {useMetricABFlags} from "@/services/metric/metricService.ts"; function WithHeadPage() { const navigate = useNavigate(); const birthdate = useSelector(selectors.selectBirthdate); const zodiacSign = getZodiacSignByDate(birthdate); const { width: pageWidth, elementRef: pageRef } = useDynamicSize({}); - + const { flags } = useMetricABFlags(); + const aboutUsAnswersKey = flags?.aboutUsAnswers?.[0] const { animationData } = useLottie({ loadKey: ELottieKeys.scalesHead, }); @@ -27,7 +29,7 @@ function WithHeadPage() { }; const handleNext = () => { - navigate(routes.client.aboutUsV1()); + navigate(routes.client.aboutUsV1(aboutUsAnswersKey)); }; return ( diff --git a/src/components/pages/ABDesign/v1/pages/WithHeart/index.tsx b/src/components/pages/ABDesign/v1/pages/WithHeart/index.tsx index 250fb47..29c85e6 100644 --- a/src/components/pages/ABDesign/v1/pages/WithHeart/index.tsx +++ b/src/components/pages/ABDesign/v1/pages/WithHeart/index.tsx @@ -11,13 +11,15 @@ import BackgroundTopBlob from "../../ui/BackgroundTopBlob"; import Header from "../../components/Header"; import { ELottieKeys, useLottie } from "@/hooks/lottie/useLottie"; import { DotLottieReact } from "@lottiefiles/dotlottie-react"; +import {useMetricABFlags} from "@/services/metric/metricService.ts"; function WithHeartPage() { const navigate = useNavigate(); const birthdate = useSelector(selectors.selectBirthdate); const zodiacSign = getZodiacSignByDate(birthdate); const { width: pageWidth, elementRef: pageRef } = useDynamicSize({}); - + const { flags } = useMetricABFlags(); + const aboutUsAnswersKey = flags?.aboutUsAnswers?.[0] const { animationData } = useLottie({ loadKey: ELottieKeys.scalesHeart, }); @@ -27,7 +29,7 @@ function WithHeartPage() { }; const handleNext = () => { - navigate(routes.client.aboutUsV1()); + navigate(routes.client.aboutUsV1(aboutUsAnswersKey)); }; return ( diff --git a/src/components/pages/AboutUs/index.tsx b/src/components/pages/AboutUs/index.tsx index 0a4b069..85ea36c 100755 --- a/src/components/pages/AboutUs/index.tsx +++ b/src/components/pages/AboutUs/index.tsx @@ -27,7 +27,7 @@ function AboutUsPage() {
- {aboutUsAnswers.map((answer, index) => ( + {aboutUsAnswers['aboutUsAnswersNormal'].map((answer, index) => ( { }; metricService.initMetric(); + // metricService.initMetricAB(); if (isProduction) { smartLook(); diff --git a/src/routerComponents/ABDesign/v1/index.tsx b/src/routerComponents/ABDesign/v1/index.tsx index c3fb657..b940f70 100644 --- a/src/routerComponents/ABDesign/v1/index.tsx +++ b/src/routerComponents/ABDesign/v1/index.tsx @@ -32,6 +32,7 @@ import TrialChoicePage from "@/components/pages/ABDesign/v1/pages/TrialChoice"; import TrialPaymentPage from "@/components/pages/ABDesign/v1/pages/TrialPayment"; import TrialPaymentWithDiscount from "@/components/pages/ABDesign/v1/pages/TrialPaymentWithDiscount"; import AdditionalDiscount from "@/components/pages/ABDesign/v1/pages/AdditionalDiscount"; +import MentionedInPage from "@/components/pages/ABDesign/v1/pages/MentionedIn"; function ABDesignV1Routes() { return ( @@ -144,6 +145,10 @@ function ABDesignV1Routes() { path={routes.client.additionalDiscountV1()} element={} /> + } + /> ); diff --git a/src/routes.ts b/src/routes.ts index 5552350..fdd76ee 100755 --- a/src/routes.ts +++ b/src/routes.ts @@ -1,13 +1,13 @@ import { EPlacementKeys } from "./api/resources/Paywall"; import type { UserStatus } from "./types"; -const environments = import.meta.env +const environments = import.meta.env; const host = ""; export const apiHost = environments.AURA_API_HOST; -const dApiHost = environments.AURA_DAPI_HOST -const dApiPrefix = environments.AURA_DAPI_PREFIX -const siteHost = environments.AURA_SITE_HOST +const dApiHost = environments.AURA_DAPI_HOST; +const dApiPrefix = environments.AURA_DAPI_PREFIX; +const siteHost = environments.AURA_SITE_HOST; const prefix = environments.AURA_PREFIX; const openAIHost = environments.AURA_OPEN_AI_HOST; const openAiPrefix = environments.AURA_OPEN_AI_PREFIX; @@ -155,15 +155,23 @@ const routes = { genderV1: () => [host, "v1", "gender"].join("/"), questionnaireV1: () => [host, "v1", "questionnaire"].join("/"), goalSetupV1: () => [host, "v1", "goal-setup"].join("/"), - aboutUsV1: () => [host, "v1", "about-us"].join("/"), + aboutUsV1: (key?: string) => { + if (key === undefined) { + return [host, "v1", "about-us"].join("/") + } else { + return [host, "v1", "about-us"].join("/") + `?key=${key}` + } + }, hyperPersonalizedAstrologyV1: () => [host, "v1", "hyper-personalized-astrology"].join("/"), singleZodiacInfoV1: () => [host, "v1", "single-zodiac-info"].join("/"), - relationshipZodiacInfoV1: () => [host, "v1", "relationship-zodiac-info"].join("/"), + relationshipZodiacInfoV1: () => + [host, "v1", "relationship-zodiac-info"].join("/"), noTimeV1: () => [host, "v1", "no-time"].join("/"), relationshipAlmostThereV1: () => [host, "v1", "relationship-almost-there"].join("/"), - loadingInRelationshipV1: () => [host, "v1", "loading-in-relationship"].join("/"), + loadingInRelationshipV1: () => + [host, "v1", "loading-in-relationship"].join("/"), problemsV1: () => [host, "v1", "problems"].join("/"), worksRouterV1: () => [host, "v1", "works-router"].join("/"), worksForUsV1: () => [host, "v1", "works-for-us"].join("/"), @@ -173,7 +181,8 @@ const routes = { almostThereV1: () => [host, "v1", "almost-there"].join("/"), partnerRightPlaceV1: () => [host, "v1", "partner-right-place"].join("/"), partnerThingV1: () => [host, "v1", "partner-thing"].join("/"), - partnerTotallyNormalV1: () => [host, "v1", "partner-totally-normal"].join("/"), + partnerTotallyNormalV1: () => + [host, "v1", "partner-totally-normal"].join("/"), withHeartV1: () => [host, "v1", "with-heart"].join("/"), withHeadV1: () => [host, "v1", "with-head"].join("/"), bothV1: () => [host, "v1", "both"].join("/"), @@ -187,6 +196,7 @@ const routes = { trialPaymentWithDiscountV1: () => [host, "v1", "trial-payment-with-discount"].join("/"), additionalDiscountV1: () => [host, "v1", "additional-discount"].join("/"), + mentionedInV1: () => [host, "v1", "mentionedIn"].join("/"), loadingPage: () => [host, "loading-page"].join("/"), notFound: () => [host, "404"].join("/"), @@ -271,17 +281,14 @@ const routes = { [dApiHost, dApiPrefix, "placement", placementKey, "paywall"].join("/"), // Payment - makePayment: () => - [dApiHost, dApiPrefix, "payment", "checkout"].join("/"), + makePayment: () => [dApiHost, dApiPrefix, "payment", "checkout"].join("/"), // User videos - getUserVideos: () => - [dApiHost, "users", "videos", "combined"].join("/"), + getUserVideos: () => [dApiHost, "users", "videos", "combined"].join("/"), // User videos getUserPDFCompatibility: () => [dApiHost, "users", "pdf", "compatibility"].join("/"), - }, openAi: { createThread: () => [openAIHost, openAiPrefix, "threads"].join("/"), @@ -517,4 +524,4 @@ export const getRouteBy = (status: UserStatus): string => { } }; -export default routes; \ No newline at end of file +export default routes; diff --git a/src/services/metric/metricService.ts b/src/services/metric/metricService.ts index 729bb7a..e7e0420 100644 --- a/src/services/metric/metricService.ts +++ b/src/services/metric/metricService.ts @@ -1,3 +1,5 @@ +import { useExperiments } from "yandex-metrica-ab-react"; + export enum EGoals { ENTERED_EMAIL = "EnteredEmail", PAYMENT_SUCCESS = "PaymentSuccess", @@ -15,6 +17,11 @@ export enum EGoals { AURA_TRIAL_PAYMENT_PAGE_VISIT = "AuraTrialPaymentPageVisit" } +export enum EFlags { + isNextPageMentioned = 'Go to page mentionedIn', + aboutUsAnswers = 'Key for aboutUsAnswers' +} + interface IUserParams { UserID: number | string; genderFrom: string; @@ -33,6 +40,14 @@ const checkIsAvailableYandexMetric = () => { return true } +const checkIsAvailableYandexMetricAB = () => { + if (typeof window.ymab !== "function") { + console.error("Yandex.Metric not found") + return false + } + return true +} + const setUserID = (userId: string) => { if (!checkIsAvailableYandexMetric()) return; window.ym(metricCounterNumber, "setUserID", userId) @@ -94,4 +109,21 @@ const initMetric = () => { // eslint-disable-next-line react-hooks/exhaustive-deps } -export default { setUserID, userParams, reachGoal, hit, initMetric } \ No newline at end of file +const initMetricAB = () => { + if (!checkIsAvailableYandexMetricAB()) return; + + + window.ymab(`metrika.${metricCounterNumber}`, 'setConfig', { enableJS: true, enableWatch: true }); + window.ymab(`metrika.${metricCounterNumber}`, 'init'/*, {clientFeatures}, {callback}*/); + console.log("Metric initialized"); + + // eslint-disable-next-line react-hooks/exhaustive-deps +} + +export const useMetricABFlags = () => { + return useExperiments({ + clientId: `metrika.${metricCounterNumber}` + }) +} + +export default { setUserID, userParams, reachGoal, hit, initMetric, initMetricAB } \ No newline at end of file diff --git a/src/types.ts b/src/types.ts index fa1ecd6..fc4183c 100644 --- a/src/types.ts +++ b/src/types.ts @@ -27,6 +27,7 @@ declare global { interface Window { // eslint-disable-next-line @typescript-eslint/no-explicit-any ym: any; + ymab: any; // eslint-disable-next-line @typescript-eslint/no-explicit-any klaviyo: any; }