This commit is contained in:
2023-09-15 13:37:12 +05:00
parent f0b183e83c
commit 388f4e2a7b
9 changed files with 232 additions and 92 deletions
+1
View File
@@ -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
View File
@@ -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>
);
}
+25
View File
@@ -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;
+108
View File
@@ -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;
-1
View File
@@ -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() {
+24
View File
@@ -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
View File
@@ -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>
);
+20
View File
@@ -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
View File
@@ -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&region=${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);