diff --git a/.env b/.env index 6469fa2c..40c9b7f1 100644 --- a/.env +++ b/.env @@ -1,4 +1,4 @@ -# NEXT_PUBLIC_API=http://192.168.1.250:3003/ +# NEXT_PUBLIC_API=http://192.168.1.224:3003/ NEXT_PUBLIC_API=https://graff.estate/api/ NEXT_PUBLIC_S3_BUCKET=https://storage.yandexcloud.net/dult-faib-knac-fint/ NEXT_PUBLIC_TINYMCE_API_KEY=2vf68779upg45y46o6g5gaxldy9gzr399eyaaqa0ki3mj2h2 \ No newline at end of file diff --git a/src/components/Layout/Feedback.tsx b/src/components/Layout/Feedback.tsx index 0ee6810c..de7d10a4 100644 --- a/src/components/Layout/Feedback.tsx +++ b/src/components/Layout/Feedback.tsx @@ -1,5 +1,4 @@ "use client"; - import { api } from "@/api"; import { projectsTags } from "@/consts/projectsTags"; import { Product } from "@/types/Product"; @@ -9,15 +8,19 @@ import { getExampleNumber } from "libphonenumber-js"; import examples from "libphonenumber-js/mobile/examples"; import Link from "next/link"; import { usePathname } from "next/navigation"; -import { ChangeEvent, useMemo, useState } from "react"; +import { useMemo, useState } from "react"; import { FormProvider, useForm } from "react-hook-form"; import ReactInputMask from "react-input-mask"; import { Country } from "react-phone-number-input"; import CheckIcon from "../../../public/icons/check.svg"; +import useAddReferer from "@/hooks/useAddReferer"; +import { useRefererStore } from "@/stores/useRefererStore"; export function Feedback() { const pathname = usePathname(); + useAddReferer(); + return (
(["+7", "RU"]); + const { referer } = useRefererStore(); + const placeholder = useMemo( () => getExampleNumber(country, examples) @@ -64,7 +70,7 @@ export function FeedbackForm() { const { register, handleSubmit, formState } = form; async function onSubmit(data: IInput) { - await api.post("mail", { json: data }).json(); + await api.post("mail", { json: { ...data, referer } }).json(); } return ( @@ -77,7 +83,7 @@ export function FeedbackForm() { onSubmit={handleSubmit(onSubmit)} >
-

Нам нужно

+

Нам нужно

@@ -155,10 +161,10 @@ export function FeedbackForm() { ) : (
-
+
-

+

Мы получили заявку
и скоро свяжемся с вами!

diff --git a/src/components/Layout/Footer.tsx b/src/components/Layout/Footer.tsx index f22b6044..e0399842 100644 --- a/src/components/Layout/Footer.tsx +++ b/src/components/Layout/Footer.tsx @@ -1,17 +1,19 @@ -import Link from 'next/link'; -import { PropsWithChildren } from 'react'; -import ArrowMoreIcon from '../../../public/icons/arrow_more.svg'; -import RutubeIcon from '../../../public/icons/rutube.svg'; -import TelegramIcon from '../../../public/icons/tg.svg'; -import VkIcon from '../../../public/icons/vk.svg'; -import YoutubeIcon from '../../../public/icons/youtube.svg'; +/* eslint-disable react-hooks/exhaustive-deps */ +"use client"; +import Link from "next/link"; +import { PropsWithChildren, useEffect } from "react"; +import ArrowMoreIcon from "../../../public/icons/arrow_more.svg"; +import RutubeIcon from "../../../public/icons/rutube.svg"; +import TelegramIcon from "../../../public/icons/tg.svg"; +import VkIcon from "../../../public/icons/vk.svg"; +import YoutubeIcon from "../../../public/icons/youtube.svg"; export function Footer() { return (

Позвонить

@@ -21,7 +23,7 @@ export function Footer() {

Написать

@@ -47,7 +49,7 @@ export function Footer() {
Политика конфиденциальности и обработки персональных данных @@ -56,7 +58,7 @@ export function Footer() { © 2025 GRAFF interactive. Все права защищены

graff.tech @@ -69,7 +71,7 @@ export function Footer() { export function ContactLink({ children, href, - className = '', + className = "", }: PropsWithChildren<{ href: string; className?: string }>) { return ( { + const referer = new URLSearchParams(window.location.search).get("ref"); + + if (!referer) return; + setReferer(referer); + }, []); + + return null; +} + +export default useAddReferer; diff --git a/src/stores/useRefererStore.ts b/src/stores/useRefererStore.ts new file mode 100644 index 00000000..b0d32134 --- /dev/null +++ b/src/stores/useRefererStore.ts @@ -0,0 +1,17 @@ +import { create } from "zustand"; +import { persist } from "zustand/middleware"; + +export const useRefererStore = create<{ + referer: string | null; + setReferer: (referer: string | null) => void; +}>()( + persist( + (set) => ({ + referer: null, + setReferer: (referer) => set({ referer }), + }), + { + name: "referer", + } + ) +);