upd
This commit is contained in:
@@ -23,6 +23,7 @@
|
||||
"react-player": "^2.12.0",
|
||||
"react-rangeslider": "^2.2.0",
|
||||
"react-responsive-carousel": "^3.2.23",
|
||||
"react-router-dom": "^6.15.0",
|
||||
"react-scroll": "^1.8.9",
|
||||
"react-yandex-metrika": "^2.6.0",
|
||||
"swiper": "^9.2.0",
|
||||
|
||||
+20
-66
@@ -14,13 +14,13 @@ import Slider from "./components/Slider/Slider";
|
||||
import FeatureSlider from "./components/FeatureSlider";
|
||||
import useModalStore from "./store/modal";
|
||||
import FeedbackForm from "./components/FeedbackForm";
|
||||
import { YMInitializer } from "react-yandex-metrika";
|
||||
import Map from "./components/Map";
|
||||
import FeedbackFormSuccess from "./components/FeedbackFormSuccess";
|
||||
import StreamCard2 from "./components/StreamCard2";
|
||||
import ReactPlayer from "react-player";
|
||||
import { useParams } from "react-router-dom";
|
||||
|
||||
function App() {
|
||||
const params = useParams();
|
||||
const [fullname, setFullname] = useState<string>("");
|
||||
const [email, setEmail] = useState<string>("");
|
||||
const [phone, setPhone] = useState<string>("");
|
||||
@@ -90,8 +90,14 @@ function App() {
|
||||
document.title = t("title");
|
||||
}, [changeLanguage]);
|
||||
|
||||
useEffect(() => {
|
||||
if (window.location.hash === "#feedback") {
|
||||
setModalComponent(<FeedbackForm />);
|
||||
}
|
||||
}, []);
|
||||
|
||||
return (
|
||||
<div className="bg-[#131317] text-[#F2F2F2]">
|
||||
<div>
|
||||
<div className="relative lg:container mx-auto px-4 lg:py-8 py-4 xl:max-w-screen-2xl overflow-hidden">
|
||||
<div className="absolute top-0 right-0 sm:translate-x-0 sm:translate-y-0 translate-x-[40%] translate-y-[40%]">
|
||||
<img src="/images/shapes/1.svg" alt="" />
|
||||
@@ -226,7 +232,7 @@ function App() {
|
||||
r="49"
|
||||
transform="matrix(-1 0 0 1 100 0)"
|
||||
stroke="url(#paint1_linear_1936_29973)"
|
||||
stroke-width="2"
|
||||
strokeWidth="2"
|
||||
/>
|
||||
</g>
|
||||
<defs>
|
||||
@@ -237,10 +243,10 @@ function App() {
|
||||
width="148"
|
||||
height="148"
|
||||
filterUnits="userSpaceOnUse"
|
||||
color-interpolation-filters="sRGB"
|
||||
colorInterpolationFilters="sRGB"
|
||||
>
|
||||
<feFlood
|
||||
flood-opacity="0"
|
||||
floodOpacity="0"
|
||||
result="BackgroundImageFix"
|
||||
/>
|
||||
<feGaussianBlur
|
||||
@@ -267,8 +273,8 @@ function App() {
|
||||
y2="100"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
>
|
||||
<stop offset="0.21875" stop-color="#BC75FF" />
|
||||
<stop offset="0.695817" stop-color="#798FFF" />
|
||||
<stop offset="0.21875" stopColor="#BC75FF" />
|
||||
<stop offset="0.695817" stopColor="#798FFF" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="paint1_linear_1936_29973"
|
||||
@@ -278,8 +284,8 @@ function App() {
|
||||
y2="100"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
>
|
||||
<stop offset="0.21875" stop-color="#BC75FF" />
|
||||
<stop offset="0.695817" stop-color="#798FFF" />
|
||||
<stop offset="0.21875" stopColor="#BC75FF" />
|
||||
<stop offset="0.695817" stopColor="#798FFF" />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
</svg>
|
||||
@@ -900,49 +906,6 @@ function App() {
|
||||
|
||||
<div className="flex flex-col items-center lg:translate-x-0 lg:translate-y-0 -translate-x-[7%] translate-y-[10%]"></div>
|
||||
</div>
|
||||
|
||||
{/* <div className="xl:space-y-10 lg:space-y-8 sm:space-y-6 space-y-4 mt-16">
|
||||
<p className="xl:text-5xl lg:text-4xl sm:text-3xl text-2xl lg:font-normal font-medium font-gilroy text-gradient w-fit">
|
||||
<Trans i18nKey="availableDemonstrationsHeading"></Trans>
|
||||
</p>
|
||||
<div className="grid xl:grid-cols-3 lg:grid-cols-2 grid-cols-1 lg:gap-4 gap-4">
|
||||
<StreamCard
|
||||
icon="/images/icons/stream/Revolution.svg"
|
||||
image="/images/stream/nksJukovaDev.jpg"
|
||||
title={
|
||||
<Trans i18nKey="residentialСomplex1">
|
||||
МФК «Re:volution towers»
|
||||
</Trans>
|
||||
}
|
||||
location={<Trans i18nKey="city1">Россия, Екатеринбург</Trans>}
|
||||
href="https://stream.graff.tech/?build=nksJukovaDev"
|
||||
/>
|
||||
|
||||
<StreamCard
|
||||
icon="/images/icons/stream/Aivaz.svg"
|
||||
image="/images/stream/Ivazowsky.jpg"
|
||||
title={
|
||||
<Trans i18nKey="residentialСomplex2">
|
||||
ЖК «Айвазовский»
|
||||
</Trans>
|
||||
}
|
||||
location={<Trans i18nKey="city2">Россия, Тюмень</Trans>}
|
||||
href="https://stream.graff.tech/?build=Ivazowsky"
|
||||
/>
|
||||
|
||||
<StreamCard
|
||||
icon="/images/icons/stream/Residence.svg"
|
||||
image="/images/stream/lifeResidence.jpg"
|
||||
title={
|
||||
<Trans i18nKey="residentialСomplex3">
|
||||
ЖК «Life Резиденция»
|
||||
</Trans>
|
||||
}
|
||||
location={<Trans i18nKey="city2">Россия, Тюмень</Trans>}
|
||||
href="https://stream.graff.tech/?build=lifeResidence"
|
||||
/>
|
||||
</div>
|
||||
</div> */}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -1338,7 +1301,10 @@ function App() {
|
||||
>
|
||||
YouTube
|
||||
</a>
|
||||
<a href="https://vk.com/graff.interactive" target="_blank">
|
||||
<a
|
||||
href="https://vk.com/graff.interactive"
|
||||
target="_blank"
|
||||
>
|
||||
VK
|
||||
</a>
|
||||
</p>
|
||||
@@ -1368,18 +1334,6 @@ function App() {
|
||||
</div>
|
||||
|
||||
<Modal />
|
||||
|
||||
<YMInitializer
|
||||
accounts={[93606080]}
|
||||
options={{
|
||||
// defer: true,
|
||||
webvisor: true,
|
||||
clickmap: true,
|
||||
trackLinks: true,
|
||||
accurateTrackBounce: true,
|
||||
}}
|
||||
version="2"
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
import ReactPlayer from "react-player";
|
||||
|
||||
function MainVideoPage() {
|
||||
return (
|
||||
<div className="container mx-auto max-w-screen-2xl overflow-hidden 2xl:p-16 xl:p-12 lg:p-8 p-4 flex-1 flex flex-col justify-center">
|
||||
<div className="flex flex-col gap-8">
|
||||
<div>
|
||||
<a href="/">
|
||||
<img src="/logo.svg" alt="" />
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div className="aspect-video">
|
||||
<ReactPlayer
|
||||
url={"https://www.youtube.com/watch?v=xXgPV0P6U0U&t=90s"}
|
||||
width={"100%"}
|
||||
height={"100%"}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export default MainVideoPage;
|
||||
@@ -0,0 +1,108 @@
|
||||
import { Trans } from "react-i18next";
|
||||
import ReactPlayer from "react-player";
|
||||
import StreamCard2 from "./components/StreamCard2";
|
||||
import Title from "./components/Title";
|
||||
import Map from "./components/Map";
|
||||
|
||||
function StreamPage() {
|
||||
return (
|
||||
<div className="container mx-auto max-w-screen-2xl overflow-hidden 2xl:p-16 xl:p-12 lg:p-8 p-4 flex-1 flex flex-col justify-center">
|
||||
<div className="flex flex-col gap-16">
|
||||
<div className="flex flex-col gap-8">
|
||||
<div>
|
||||
<a href="/">
|
||||
<img src="/logo.svg" alt="" />
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div className="aspect-video">
|
||||
<ReactPlayer
|
||||
url={"https://www.youtube.com/watch?v=FTmRhGUFP30&t=26s"}
|
||||
width={"100%"}
|
||||
height={"100%"}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="lg:grid grid-cols-2 2xl:-mb-24 xl:-mb-0 lg:-mb-16 -mb-0">
|
||||
<div className="space-y-14">
|
||||
<Title>
|
||||
{/* <Trans i18nKey="showAllAdvantagesHeading"> */}
|
||||
Graff.estate stream
|
||||
<br />—{" "}
|
||||
<Trans i18nKey="remoteDemoHeading">
|
||||
удаленная демонстрация жилого комплекса
|
||||
</Trans>
|
||||
{/* </Trans> */}
|
||||
</Title>
|
||||
|
||||
<div className="w-3/4 space-y-4">
|
||||
<p className="2xl:text-2xl sm:text-xl text-lg">
|
||||
<Trans i18nKey="showAllAdvantagesText">
|
||||
Высокий уровень графики и полное погружение покупателя в
|
||||
процесс выбора квартиры.
|
||||
</Trans>
|
||||
</p>
|
||||
<p className="2xl:text-2xl sm:text-xl text-lg">
|
||||
<Trans i18nKey="showAllAdvantagesText2">
|
||||
Местоположение и устройство значения не имеют. Нужен только
|
||||
интернет.
|
||||
</Trans>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div className="relative w-[150%] lg:-translate-x-[27%] -translate-x-[21%] -translate-y-[5%]">
|
||||
<Map />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="relative h-fit bg-[#131317] lg:border-l-2 lg:border-t-0 border-t-2 border-[#2E3038] lg:pl-8 lg:space-y-8 space-y-4 lg:pt-0 pt-8">
|
||||
<p className="uppercase tracking-wider lg:text-2xl sm:text-xl">
|
||||
<Trans i18nKey="availableDemonstrationsHeading">
|
||||
Демонстрация технологии
|
||||
</Trans>
|
||||
</p>
|
||||
|
||||
<div className="lg:space-y-8 space-y-4">
|
||||
<StreamCard2
|
||||
image={"/images/stream/nksJukovaDev.jpg"}
|
||||
icon={"/images/icons/stream/nksJukovaDev.svg"}
|
||||
name={
|
||||
<Trans i18nKey={"residentialСomplex1"}>
|
||||
МФК «Revolution towers»
|
||||
</Trans>
|
||||
}
|
||||
location={<Trans i18nKey={"city1"}>Россия, Екатеринбург</Trans>}
|
||||
build={"nksJukovaDev"}
|
||||
/>
|
||||
<StreamCard2
|
||||
image={"/images/stream/Ivazowsky.jpg"}
|
||||
icon={"/images/icons/stream/Ivazowsky.svg"}
|
||||
name={
|
||||
<Trans i18nKey={"residentialСomplex2"}>
|
||||
ЖК «Айвазовский City»
|
||||
</Trans>
|
||||
}
|
||||
location={<Trans i18nKey={"city2"}>Россия, Тюмень</Trans>}
|
||||
build={"Ivazowsky"}
|
||||
/>
|
||||
<StreamCard2
|
||||
image={"/images/stream/lifeResidence.jpg"}
|
||||
icon={"/images/icons/stream/lifeResidence.svg"}
|
||||
name={
|
||||
<Trans i18nKey={"residentialСomplex3"}>
|
||||
ЖК «Life Резиденция»
|
||||
</Trans>
|
||||
}
|
||||
location={<Trans i18nKey={"city2"}>Россия, Тюмень</Trans>}
|
||||
build={"lifeResidence"}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export default StreamPage;
|
||||
@@ -4,7 +4,6 @@ import InputMask from "react-input-mask";
|
||||
import useModalStore from "../store/modal";
|
||||
import FeedbackFormSuccess from "./FeedbackFormSuccess";
|
||||
import { Trans } from "react-i18next";
|
||||
import i18n from "../i18n";
|
||||
import Title from "./Title";
|
||||
|
||||
function FeedbackForm() {
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
import { Outlet } from "react-router-dom";
|
||||
import { YMInitializer } from "react-yandex-metrika";
|
||||
|
||||
function DefaultLayout() {
|
||||
return (
|
||||
<div className="min-h-screen bg-[#131317] text-[#F2F2F2] flex flex-col">
|
||||
<Outlet />
|
||||
|
||||
<YMInitializer
|
||||
accounts={[93606080]}
|
||||
options={{
|
||||
// defer: true,
|
||||
webvisor: true,
|
||||
clickmap: true,
|
||||
trackLinks: true,
|
||||
accurateTrackBounce: true,
|
||||
}}
|
||||
version="2"
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export default DefaultLayout;
|
||||
+33
-8
@@ -1,11 +1,36 @@
|
||||
import React from 'react'
|
||||
import ReactDOM from 'react-dom/client'
|
||||
import App from './App'
|
||||
import React from "react";
|
||||
import ReactDOM from "react-dom/client";
|
||||
import App from "./App";
|
||||
import "./i18n";
|
||||
import './index.css'
|
||||
import { createBrowserRouter, RouterProvider } from "react-router-dom";
|
||||
import "./index.css";
|
||||
import DefaultLayout from "./layouts/DefaultLayout";
|
||||
import StreamPage from "./StreamPage";
|
||||
import MainVideoPage from "./MainVideoPage";
|
||||
|
||||
ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render(
|
||||
const router = createBrowserRouter([
|
||||
{
|
||||
path: "",
|
||||
element: <DefaultLayout />,
|
||||
children: [
|
||||
{
|
||||
index: true,
|
||||
element: <App />,
|
||||
},
|
||||
{
|
||||
path: "/main_video",
|
||||
element: <MainVideoPage />,
|
||||
},
|
||||
{
|
||||
path: "/stream",
|
||||
element: <StreamPage />,
|
||||
},
|
||||
],
|
||||
},
|
||||
]);
|
||||
|
||||
ReactDOM.createRoot(document.getElementById("root") as HTMLElement).render(
|
||||
// <React.StrictMode>
|
||||
<App />
|
||||
// </React.StrictMode>,
|
||||
)
|
||||
<RouterProvider router={router} />
|
||||
// </React.StrictMode>
|
||||
);
|
||||
|
||||
@@ -282,6 +282,11 @@
|
||||
screen-space-reflections "2.5.0"
|
||||
three-stdlib "^2.8.11"
|
||||
|
||||
"@remix-run/router@1.8.0":
|
||||
version "1.8.0"
|
||||
resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.8.0.tgz#e848d2f669f601544df15ce2a313955e4bf0bafc"
|
||||
integrity sha512-mrfKqIHnSZRyIzBcanNJmVQELTnX+qagEDlcKO90RgRBVOZGSGvZKeDihTRfWcqoDn5N/NkUcwWTccnpN18Tfg==
|
||||
|
||||
"@swc/core-darwin-arm64@1.3.44":
|
||||
version "1.3.44"
|
||||
resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.44.tgz#e0f5eb9d962c4e6192531c2e3b8c11f55faf1b89"
|
||||
@@ -1215,6 +1220,21 @@ react-responsive-carousel@^3.2.23:
|
||||
prop-types "^15.5.8"
|
||||
react-easy-swipe "^0.0.21"
|
||||
|
||||
react-router-dom@^6.15.0:
|
||||
version "6.15.0"
|
||||
resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.15.0.tgz#6da7db61e56797266fbbef0d5e324d6ac443ee40"
|
||||
integrity sha512-aR42t0fs7brintwBGAv2+mGlCtgtFQeOzK0BM1/OiqEzRejOZtpMZepvgkscpMUnKb8YO84G7s3LsHnnDNonbQ==
|
||||
dependencies:
|
||||
"@remix-run/router" "1.8.0"
|
||||
react-router "6.15.0"
|
||||
|
||||
react-router@6.15.0:
|
||||
version "6.15.0"
|
||||
resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.15.0.tgz#bf2cb5a4a7ed57f074d4ea88db0d95033f39cac8"
|
||||
integrity sha512-NIytlzvzLwJkCQj2HLefmeakxxWHWAP+02EGqWEZy+DgfHHKQMUoBBjUQLOtFInBMhWtb3hiUy6MfFgwLjXhqg==
|
||||
dependencies:
|
||||
"@remix-run/router" "1.8.0"
|
||||
|
||||
react-scroll@^1.8.9:
|
||||
version "1.8.9"
|
||||
resolved "https://registry.npmjs.org/react-scroll/-/react-scroll-1.8.9.tgz"
|
||||
|
||||
+1
-17
@@ -1,6 +1,5 @@
|
||||
import express, { json } from "express";
|
||||
import cors from "cors";
|
||||
import ky from "ky";
|
||||
import mongoose from "mongoose";
|
||||
import nodemailer from "nodemailer";
|
||||
import Mail from "./models/Mail.js";
|
||||
@@ -9,7 +8,7 @@ const app = express();
|
||||
const port = 3000;
|
||||
|
||||
app.use(cors());
|
||||
app.use(express.json());
|
||||
app.use(json());
|
||||
|
||||
app.get("/", (req, res) => {
|
||||
res.json({ ok: 1 });
|
||||
@@ -144,10 +143,6 @@ app.get("/regions", async (req, res) => {
|
||||
},
|
||||
];
|
||||
|
||||
// const result = await ky
|
||||
// .get("https://наш.дом.рф/аналитика/квартирография/api/dictionaries/regions")
|
||||
// .json();
|
||||
|
||||
regions = regions
|
||||
.map((item) => item.regions)
|
||||
.flat()
|
||||
@@ -829,17 +824,6 @@ app.get("/region/:id", async (req, res) => {
|
||||
},
|
||||
];
|
||||
|
||||
// const result2 = await ky
|
||||
// .get(
|
||||
// `https://наш.дом.рф/аналитика/api/rpp/?regionCode=${req.params.id}&repMonth=3&repYear=2023`
|
||||
// )
|
||||
// .json();
|
||||
// const result3 = await ky
|
||||
// .get(
|
||||
// `https://наш.дом.рф/аналитика/api/developers/dashboard?sort=objSquareLivingAmt:desc&subjectTypes=region®ion=${req.params.id}&date=01-07-2023&limit=0`
|
||||
// )
|
||||
// .json();
|
||||
|
||||
try {
|
||||
const { totalArea, flatCount, priceAvg, objSquareLivingAmt, objCnt } =
|
||||
regionsData.find((item) => item.id == req.params.id);
|
||||
|
||||
Reference in New Issue
Block a user