diff --git a/package.json b/package.json
index 43fcb6e..13cda88 100644
--- a/package.json
+++ b/package.json
@@ -4,7 +4,7 @@
"private": true,
"scripts": {
"dev": "next dev",
- "build": "set NODE_OPTIONS=--max-old-space-size=4096 && next build",
+ "build": "next build",
"start": "next start -p 8080 -H 0.0.0.0",
"lint": "next lint"
},
diff --git a/public/image 3.png b/public/image 3.png
deleted file mode 100644
index 28839fe..0000000
Binary files a/public/image 3.png and /dev/null differ
diff --git a/public/image 4.png b/public/image 4.png
deleted file mode 100644
index ce09c09..0000000
Binary files a/public/image 4.png and /dev/null differ
diff --git a/public/image 6.png b/public/image/about_us_image.png
similarity index 100%
rename from public/image 6.png
rename to public/image/about_us_image.png
diff --git a/public/image 12.jpg b/public/image/admin_login_bg.jpg
similarity index 100%
rename from public/image 12.jpg
rename to public/image/admin_login_bg.jpg
diff --git a/public/agreement.svg b/public/image/agreement.svg
similarity index 100%
rename from public/agreement.svg
rename to public/image/agreement.svg
diff --git a/public/ambulance.svg b/public/image/ambulance.svg
similarity index 100%
rename from public/ambulance.svg
rename to public/image/ambulance.svg
diff --git a/public/applications.svg b/public/image/applications.svg
similarity index 100%
rename from public/applications.svg
rename to public/image/applications.svg
diff --git a/public/burger-menu.svg b/public/image/burger-menu.svg
similarity index 100%
rename from public/burger-menu.svg
rename to public/image/burger-menu.svg
diff --git a/public/cemetery.svg b/public/image/cemetery.svg
similarity index 100%
rename from public/cemetery.svg
rename to public/image/cemetery.svg
diff --git a/public/close-black.svg b/public/image/close-black.svg
similarity index 100%
rename from public/close-black.svg
rename to public/image/close-black.svg
diff --git a/public/close-menu.svg b/public/image/close-menu.svg
similarity index 100%
rename from public/close-menu.svg
rename to public/image/close-menu.svg
diff --git a/public/deal.svg b/public/image/deal.svg
similarity index 100%
rename from public/deal.svg
rename to public/image/deal.svg
diff --git a/public/grave.svg b/public/image/grave.svg
similarity index 100%
rename from public/grave.svg
rename to public/image/grave.svg
diff --git a/public/hospital.svg b/public/image/hospital.svg
similarity index 100%
rename from public/hospital.svg
rename to public/image/hospital.svg
diff --git a/public/left arrow.svg b/public/image/left arrow.svg
similarity index 100%
rename from public/left arrow.svg
rename to public/image/left arrow.svg
diff --git a/public/left-arrow.svg b/public/image/left-arrow.svg
similarity index 100%
rename from public/left-arrow.svg
rename to public/image/left-arrow.svg
diff --git a/public/loader_1.svg b/public/image/loader_1.svg
similarity index 100%
rename from public/loader_1.svg
rename to public/image/loader_1.svg
diff --git a/public/loader_2.svg b/public/image/loader_2.svg
similarity index 100%
rename from public/loader_2.svg
rename to public/image/loader_2.svg
diff --git a/public/log-out.svg b/public/image/log-out.svg
similarity index 100%
rename from public/log-out.svg
rename to public/image/log-out.svg
diff --git a/public/logo.svg b/public/image/logo.svg
similarity index 100%
rename from public/logo.svg
rename to public/image/logo.svg
diff --git a/public/no.svg b/public/image/no.svg
similarity index 100%
rename from public/no.svg
rename to public/image/no.svg
diff --git a/public/ok.svg b/public/image/ok.svg
similarity index 100%
rename from public/ok.svg
rename to public/image/ok.svg
diff --git a/public/operator.svg b/public/image/operator.svg
similarity index 100%
rename from public/operator.svg
rename to public/image/operator.svg
diff --git a/public/phone.svg b/public/image/phone.svg
similarity index 100%
rename from public/phone.svg
rename to public/image/phone.svg
diff --git a/public/search.svg b/public/image/search.svg
similarity index 100%
rename from public/search.svg
rename to public/image/search.svg
diff --git a/public/services.svg b/public/image/services.svg
similarity index 100%
rename from public/services.svg
rename to public/image/services.svg
diff --git a/public/telephone.svg b/public/image/telephone.svg
similarity index 100%
rename from public/telephone.svg
rename to public/image/telephone.svg
diff --git a/public/trash.svg b/public/image/trash.svg
similarity index 100%
rename from public/trash.svg
rename to public/image/trash.svg
diff --git a/public/white close.svg b/public/image/white close.svg
similarity index 100%
rename from public/white close.svg
rename to public/image/white close.svg
diff --git a/public/old men.png b/public/old men.png
deleted file mode 100644
index 36630a0..0000000
Binary files a/public/old men.png and /dev/null differ
diff --git a/public/review/person_2.jpg b/public/review/person_2.jpg
index e192087..6643ea1 100644
Binary files a/public/review/person_2.jpg and b/public/review/person_2.jpg differ
diff --git a/public/review/person_3.jpg b/public/review/person_3.jpg
index 388d173..7187889 100644
Binary files a/public/review/person_3.jpg and b/public/review/person_3.jpg differ
diff --git a/public/review/person_4.jpg b/public/review/person_4.jpg
index 5e28fa8..030a3af 100644
Binary files a/public/review/person_4.jpg and b/public/review/person_4.jpg differ
diff --git a/src/app/admin/auth/page.tsx b/src/app/admin/auth/page.tsx
index 8ddd6d3..0a69f77 100644
--- a/src/app/admin/auth/page.tsx
+++ b/src/app/admin/auth/page.tsx
@@ -1,10 +1,8 @@
-import Auth from '@/components/screens/admin/auth/Auth'
-import React from 'react'
+import Auth from "@/components/screens/admin/auth/Auth";
+import React from "react";
-type Props = {}
+type Props = {};
export default function page({}: Props) {
- return (
-
- )
-}
\ No newline at end of file
+ return ;
+}
diff --git a/src/app/admin/page.tsx b/src/app/admin/page.tsx
index 5db4ca6..e0373fa 100644
--- a/src/app/admin/page.tsx
+++ b/src/app/admin/page.tsx
@@ -1,23 +1,24 @@
-'use client'
+"use client";
-import { useRouter } from 'next/navigation'
-import { useEffect } from 'react'
+import Auth from "@/components/screens/admin/auth/Auth";
+import { useRouter } from "next/navigation";
+import { useEffect } from "react";
-type Props = {}
+type Props = {};
export default function page({}: Props) {
- const router = useRouter()
+ const router = useRouter();
- useEffect(() => {
- const hasCookie = document.cookie.includes('_identid')
- if (!hasCookie) {
- router.push('/admin/auth')
- return
- }
- else {
- router.push('/admin/applications')
- }
- }, [])
+ // useEffect(() => {
+ // const hasCookie = document.cookie.includes('_identid')
+ // if (!hasCookie) {
+ // router.push('/admin/auth')
+ // return
+ // }
+ // else {
+ // router.push('/admin/applications')
+ // }
+ // }, [])
- return <>>
+ return ;
}
diff --git a/src/components/UI/loader/Loader.tsx b/src/components/UI/loader/Loader.tsx
index a49b2b6..5674609 100644
--- a/src/components/UI/loader/Loader.tsx
+++ b/src/components/UI/loader/Loader.tsx
@@ -31,9 +31,9 @@ export const LoadingSpinner = styled.div`
export default function Loader({}: Props) {
return (
-
-
-
-
- )
+
+
+
+
+ );
}
diff --git a/src/components/blocks/AddApplicationForm.tsx b/src/components/blocks/AddApplicationForm.tsx
index fe7aede..afdfc93 100644
--- a/src/components/blocks/AddApplicationForm.tsx
+++ b/src/components/blocks/AddApplicationForm.tsx
@@ -1,185 +1,189 @@
-import MainButton from '@/components/UI/button/MainButton'
-import FormInput from '@/components/UI/input/FormInput'
-import OrdersService from '@/services/order/ordersServices'
-import { T_Product } from '@/services/product/type'
-import { ChangeEvent, FormEvent, useEffect, useState } from 'react'
-import styled from 'styled-components'
-import PhoneInput from '../UI/input/PhoneInput'
-import Loader from '../UI/loader/Loader'
+import MainButton from "@/components/UI/button/MainButton";
+import FormInput from "@/components/UI/input/FormInput";
+import OrdersService from "@/services/order/ordersServices";
+import { T_Product } from "@/services/product/type";
+import { ChangeEvent, FormEvent, useEffect, useState } from "react";
+import styled from "styled-components";
+import PhoneInput from "../UI/input/PhoneInput";
+import Loader from "../UI/loader/Loader";
const Container = styled.form`
- display: flex;
- flex-direction: column;
- gap: 20px;
- width: 500px;
+ display: flex;
+ flex-direction: column;
+ gap: 20px;
+ width: 500px;
- ${(props) => props.theme.mediaQueries.mobile} {
- width: 100%;
- }
-`
+ ${(props) => props.theme.mediaQueries.mobile} {
+ width: 100%;
+ }
+`;
const Notification = styled.div`
- z-index: 5;
- position: absolute;
- top: 0;
- left: 0;
- height: 100%;
- width: 100%;
- border-radius: 12px;
- background: rgba(0, 0, 0, 0.5);
- display: flex;
- align-items: center;
- justify-content: center;
+ z-index: 5;
+ position: absolute;
+ top: 0;
+ left: 0;
+ height: 100%;
+ width: 100%;
+ border-radius: 12px;
+ background: rgba(0, 0, 0, 0.5);
+ display: flex;
+ align-items: center;
+ justify-content: center;
- .container {
- padding: 20px;
- display: flex;
- flex-direction: column;
- justify-content: center;
- align-items: center;
- gap: 15px;
- min-height: 100px;
- min-width: 100px;
- border-radius: 12px;
- background: ${(props) => props.theme.colors.white};
- }
-`
+ .container {
+ padding: 20px;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ gap: 15px;
+ min-height: 100px;
+ min-width: 100px;
+ border-radius: 12px;
+ background: ${(props) => props.theme.colors.white};
+ }
+`;
type Props = {
- setModal: (param: boolean) => void
- item?: T_Product
- modal?: boolean
-}
+ setModal: (param: boolean) => void;
+ item?: T_Product;
+ modal?: boolean;
+};
export default function AddApplicationForm({ setModal, item, modal }: Props) {
- const [errorMessage, setErrorMessage] = useState('')
- const [errorState, setErrorState] = useState(false)
- const [notificationModalState, setNotificationModalState] = useState(false)
- const [loadingState, setLoadingState] = useState(false)
+ const [errorMessage, setErrorMessage] = useState("");
+ const [errorState, setErrorState] = useState(false);
+ const [notificationModalState, setNotificationModalState] = useState(false);
+ const [loadingState, setLoadingState] = useState(false);
- const [buttonDisabledState, setButtonDisabledState] = useState(true)
+ const [buttonDisabledState, setButtonDisabledState] = useState(true);
- const [newApp, setNewApp] = useState({
- email: '',
- phone: ''
- })
+ const [newApp, setNewApp] = useState({
+ email: "",
+ phone: "",
+ });
- useEffect(() => {
- setNewApp({
- email: '',
- phone: ''
- })
- }, [modal])
+ useEffect(() => {
+ setNewApp({
+ email: "",
+ phone: "",
+ });
+ }, [modal]);
- useEffect(() => {
- if (newApp.email === '' || newApp.phone === '') {
- setButtonDisabledState(true)
- } else {
- setButtonDisabledState(false)
- }
- }, [newApp])
+ useEffect(() => {
+ if (newApp.email === "" || newApp.phone === "") {
+ setButtonDisabledState(true);
+ } else {
+ setButtonDisabledState(false);
+ }
+ }, [newApp]);
- const createCallApp = async (e: FormEvent) => {
- e.preventDefault()
- if (errorState) return
- try {
- const newAppData = {
- Phone: newApp.phone,
- Email: newApp.email
- }
- const response = await OrdersService.createCall(newAppData)
+ const createCallApp = async (e: FormEvent) => {
+ e.preventDefault();
+ if (errorState) return;
+ try {
+ const newAppData = {
+ Phone: newApp.phone,
+ Email: newApp.email,
+ };
+ const response = await OrdersService.createCall(newAppData);
- if (response.status === 200) {
- setNotificationModalState(true)
- } else {
- setErrorMessage(response.data)
- setErrorState(true)
- }
- } catch (error) {
- console.log(error)
- }
- }
+ if (response.status === 200) {
+ setNotificationModalState(true);
+ } else {
+ setErrorMessage(response.data);
+ setErrorState(true);
+ }
+ } catch (error) {
+ console.log(error);
+ }
+ };
- const createApp = async (e: FormEvent) => {
- e.preventDefault()
- if (errorState) return
- setLoadingState(true)
- try {
- const newAppData = {
- Phone: newApp.phone,
- Email: newApp.email,
- Positions: item ? [{ Id: item.Id, Count: 1 }] : []
- }
+ const createApp = async (e: FormEvent) => {
+ e.preventDefault();
+ if (errorState) return;
+ setLoadingState(true);
+ try {
+ const newAppData = {
+ Phone: newApp.phone,
+ Email: newApp.email,
+ Positions: item ? [{ Id: item.Id, Count: 1 }] : [],
+ };
- const response = await (item
- ? OrdersService.create(newAppData)
- : OrdersService.createCall(newAppData))
+ const response = await (item
+ ? OrdersService.create(newAppData)
+ : OrdersService.createCall(newAppData));
- if (response.status === 200) {
- setNotificationModalState(true)
- } else {
- setErrorMessage(response.data)
- setErrorState(true)
- }
- } catch (error) {
- console.log(error)
- }
- setLoadingState(false)
- }
+ if (response.status === 200) {
+ setNotificationModalState(true);
+ } else if (response.status === 404) {
+ setErrorMessage("Сервер не доступен, повторите попытку позже.");
+ setErrorState(true);
+ } else {
+ setErrorMessage(response.data);
+ setErrorState(true);
+ }
+ } catch (error) {
+ setErrorMessage("Сервер не доступен, повторите попытку позже.");
+ setErrorState(true);
+ }
+ setLoadingState(false);
+ };
- const handlePhoneChange = (value: string) => {
- setNewApp({ ...newApp, phone: value })
- }
+ const handlePhoneChange = (value: string) => {
+ setNewApp({ ...newApp, phone: value });
+ };
- const closeModal = () => {
- setModal(false)
- setNotificationModalState(false)
- }
+ const closeModal = () => {
+ setModal(false);
+ setNotificationModalState(false);
+ };
- return (
- <>
-
- Новая заявка
- ) =>
- setNewApp({ ...newApp, email: e.target.value })
- }
- placeholder='Ваш email'
- />
-
- {item && Услуга: {item.Name}
}
-
- Оставить заявку
-
-
- {loadingState && (
-
-
-
-
-
- )}
- {errorState && (
-
-
-
{errorMessage}
- setErrorState(false)}>
- Закрыть
-
-
-
- )}
- {notificationModalState && (
-
-
-
Заявка успешно отправлена
-
- Закрыть
-
-
-
- )}
- >
- )
+ return (
+ <>
+
+ Новая заявка
+ ) =>
+ setNewApp({ ...newApp, email: e.target.value })
+ }
+ placeholder="Ваш email"
+ />
+
+ {item && Услуга: {item.Name}
}
+
+ Оставить заявку
+
+
+ {loadingState && (
+
+
+
+
+
+ )}
+ {errorState && (
+
+
+
{errorMessage}
+ setErrorState(false)}>
+ Закрыть
+
+
+
+ )}
+ {notificationModalState && (
+
+
+
Заявка успешно отправлена
+
+ Закрыть
+
+
+
+ )}
+ >
+ );
}
diff --git a/src/components/layout/AdminSideBar.tsx b/src/components/layout/AdminSideBar.tsx
index 1d5b023..d61282f 100644
--- a/src/components/layout/AdminSideBar.tsx
+++ b/src/components/layout/AdminSideBar.tsx
@@ -1,95 +1,89 @@
-'use client'
+"use client";
-import UserService from '@/services/user/userServices'
-import Link from 'next/link'
-import { usePathname, useRouter } from 'next/navigation'
-import { useEffect } from 'react'
-import styled from 'styled-components'
+import UserService from "@/services/user/userServices";
+import Link from "next/link";
+import { usePathname, useRouter } from "next/navigation";
+import { useEffect } from "react";
+import styled from "styled-components";
-type Props = {}
+type Props = {};
const Container = styled.div`
- background: ${(props) => props.theme.colors.green};
- display: flex;
- flex-direction: column;
- width: 260px;
- padding: 30px 40px;
- gap: 20px;
- height: 100vh;
- position: fixed;
- top: 0;
- left: 0;
+ background: ${(props) => props.theme.colors.green};
+ display: flex;
+ flex-direction: column;
+ width: 260px;
+ padding: 30px 40px;
+ gap: 20px;
+ height: 100vh;
+ position: fixed;
+ top: 0;
+ left: 0;
- .menu {
- display: flex;
- flex-direction: column;
- gap: 25px;
+ .menu {
+ display: flex;
+ flex-direction: column;
+ gap: 25px;
- .item {
- display: flex;
- align-items: center;
- gap: 15px;
- cursor: pointer;
- padding: 5px;
- color: ${(props) => props.theme.colors.white};
- }
- }
-`
+ .item {
+ display: flex;
+ align-items: center;
+ gap: 15px;
+ cursor: pointer;
+ padding: 5px;
+ color: ${(props) => props.theme.colors.white};
+ }
+ }
+`;
export default function AdminSideBar({}: Props) {
- const pathname = usePathname()
- const router = useRouter()
+ const pathname = usePathname();
+ const router = useRouter();
- useEffect(() => {
- const hasCookie = document.cookie.includes('_identid')
- if (!hasCookie && pathname.startsWith('/admin')) {
- router.push('/admin/auth')
- return
- }
- }, [])
+ // useEffect(() => {
+ // const hasCookie = document.cookie.includes("_identid");
+ // if (!hasCookie && pathname.startsWith("/admin")) {
+ // router.push("/admin/auth");
+ // return;
+ // }
+ // }, []);
- const logout = async () => {
- try {
- const response = await UserService.exit()
- if (response.status === 200) {
- router.push('/admin/auth')
- document.cookie =
- '_identid=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;'
- }
- } catch (error) {
- console.log(error);
- }
- }
+ const logout = async () => {
+ try {
+ const response = await UserService.exit();
+ if (response.status === 200) {
+ router.push("/admin");
+ document.cookie =
+ "_identid=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;";
+ }
+ } catch (error) {
+ console.log(error);
+ }
+ };
- return pathname.startsWith('/admin') &&
- pathname !== '/admin/auth' &&
- pathname !== '/admin' ? (
-
-
-
-
-
-
-
Заявки
-
-
-
-
-
-
Услуги
-
-
- {/*
-
-
-
Вечная память
-
- */}
-
-
-
Выйти
-
-
-
- ) : null
+ return pathname.startsWith("/admin") &&
+ pathname !== "/admin/auth" &&
+ pathname !== "/admin" ? (
+
+
+
+
+
+
+
Заявки
+
+
+
+
+
+
Услуги
+
+
+
+
+
Выйти
+
+
+
+ ) : null;
}
diff --git a/src/components/layout/Header/Header.tsx b/src/components/layout/Header/Header.tsx
index ae748c8..43404ed 100644
--- a/src/components/layout/Header/Header.tsx
+++ b/src/components/layout/Header/Header.tsx
@@ -1,126 +1,143 @@
-'use client'
+"use client";
-import { Container } from '@/app/GlobalStyles'
-import Image from 'next/image'
-import Link from 'next/link'
-import { usePathname } from 'next/navigation'
-import { useEffect, useState } from 'react'
+import { Container } from "@/app/GlobalStyles";
+import Image from "next/image";
+import Link from "next/link";
+import { usePathname } from "next/navigation";
+import { useEffect, useState } from "react";
-import LandingButton from '../../UI/button/LandingButton'
-import Modal from '../../UI/modal/Modal'
-import { BurgerMenu, HeaderContainer } from './styles'
-import AddApplicationForm from '@/components/blocks/AddApplicationForm'
+import LandingButton from "../../UI/button/LandingButton";
+import Modal from "../../UI/modal/Modal";
+import { BurgerMenu, HeaderContainer } from "./styles";
+import AddApplicationForm from "@/components/blocks/AddApplicationForm";
-type Props = {}
+type Props = {};
export default function Header({}: Props) {
- const [modal, setModal] = useState(false)
+ const [modal, setModal] = useState(false);
- const [menuState, setMenuState] = useState(false)
+ const [menuState, setMenuState] = useState(false);
- const pathname = usePathname()
+ const pathname = usePathname();
- useEffect(() => {
- setMenuState(false)
- }, [pathname])
+ useEffect(() => {
+ setMenuState(false);
+ }, [pathname]);
- return !pathname.startsWith('/admin') ? (
- <>
-
-
-
-
-
-
Городская похоронная служба
-
-
-
- ул. Курчатова, д. 4
- ул. Героев Танкограда, д.61а
-
-
-
-
setModal(true)}>
- Заказать звонок
-
-
-
- Главная
- Услуги
- О нас
- Наши кладбища
- {/* Вечная память */}
-
-
-
-
-
-
-
-
-
setMenuState(true)}
- />
-
-
-
-
-
-
-
ул. Курчатова, д. 4
-
ул. Героев Танкограда, д.61а
-
-
-
+7 (951) 773-34-53
-
+7 (932) 307-94-54
-
-
-
setMenuState(false)}
- />
-
-
- {
- setModal(true), setMenuState(false)
- }}
- >
- Заказать звонок
-
- Главная
- Услуги
- О нас
- Наши кладбища
- {/* Вечная память */}
-
-
-
-
+ return !pathname.startsWith("/admin") ? (
+ <>
+
+
+
+
+
+
Городская похоронная служба
+
+
+
setModal(true)}>
+ Заказать звонок
+
+
+
+ Главная
+ Услуги
+ О нас
+ Наши кладбища
+ {/* Вечная память */}
+
+
+
+
+
+
+
+
+
setMenuState(true)}
+ />
+
+
+
+
+
+
+
ул. Курчатова, д. 4
+
ул. Героев Танкограда, д.61а
+
+
+
+7 (951) 773-34-53
+
+7 (932) 307-94-54
+
+
+
setMenuState(false)}
+ />
+
+
+ {
+ setModal(true), setMenuState(false);
+ }}
+ >
+ Заказать звонок
+
+ Главная
+ Услуги
+ О нас
+ Наши кладбища
+ {/* Вечная память */}
+
+
+
+
-
-
-
- >
- ) : null
+
+
+
+ >
+ ) : null;
}
diff --git a/src/components/layout/Header/styles.ts b/src/components/layout/Header/styles.ts
index 06b140d..c5b681c 100644
--- a/src/components/layout/Header/styles.ts
+++ b/src/components/layout/Header/styles.ts
@@ -1,207 +1,211 @@
import styled, { css } from 'styled-components'
export const HeaderContainer = styled.div`
- background: ${(props) => props.theme.colors.green};
+ background: ${(props) => props.theme.colors.green};
- color: ${(props) => props.theme.colors.white};
+ color: ${(props) => props.theme.colors.white};
- .content {
- width: 100%;
- display: flex;
- align-items: center;
- justify-content: space-between;
- }
+ .content {
+ width: 100%;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ }
- .contact-block {
- display: flex;
- align-items: start;
- gap: 30px;
- }
+ .contact-block {
+ display: flex;
+ align-items: start;
+ gap: 30px;
- .logo {
- display: flex;
- flex-direction: column;
- gap: 10px;
- align-items: center;
- padding: 15px;
+ a {
+ font-size: 18px;
+ }
+ }
- span {
- font-size: 16px;
- font-weight: 300;
- }
- }
+ .logo {
+ display: flex;
+ flex-direction: column;
+ gap: 10px;
+ align-items: center;
+ padding: 15px;
- .addresses {
- display: flex;
- flex-direction: column;
- gap: 10px;
- }
+ span {
+ font-size: 16px;
+ font-weight: 300;
+ }
+ }
- .phones {
- display: flex;
- align-items: start;
- gap: 20px;
- }
+ .addresses {
+ display: flex;
+ flex-direction: column;
+ gap: 10px;
+ }
- .phone {
- display: flex;
- align-items: center;
- gap: 5px;
- }
+ .phones {
+ display: flex;
+ align-items: start;
+ gap: 20px;
+ }
- .phone-all-time {
- display: flex;
- flex-direction: column;
- align-items: center;
- gap: 5px;
+ .phone {
+ display: flex;
+ align-items: center;
+ gap: 5px;
+ }
- span {
- font-size: 12px;
- }
+ .phone-all-time {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ gap: 5px;
- .top {
- display: flex;
- align-items: center;
- gap: 5px;
- }
- }
+ span {
+ font-size: 12px;
+ }
- .navbar {
- display: flex;
- align-items: start;
- justify-content: space-around;
- padding: 20px 0;
- }
+ .top {
+ display: flex;
+ align-items: center;
+ gap: 5px;
+ }
+ }
- a {
- color: ${(props) => props.theme.colors.white};
- width: 190px;
- text-align: center;
- font-size: 24px;
- }
+ .navbar {
+ display: flex;
+ align-items: start;
+ justify-content: space-around;
+ padding: 20px 0;
+ }
- ${(props) => props.theme.mediaQueries.tabletLandscape} {
- .contact-block {
- flex-direction: column;
- gap: 10px;
+ a {
+ color: ${(props) => props.theme.colors.white};
+ width: 190px;
+ text-align: center;
+ font-size: 24px;
+ }
- .addresses {
- flex-direction: row;
- width: 100%;
- justify-content: space-between;
- }
- }
+ ${(props) => props.theme.mediaQueries.tabletLandscape} {
+ .contact-block {
+ flex-direction: column;
+ gap: 10px;
- .logo {
- width: 250px;
+ .addresses {
+ flex-direction: row;
+ width: 100%;
+ justify-content: space-between;
+ }
+ }
- img {
- }
+ .logo {
+ width: 250px;
- span {
- font-size: 12px;
- }
- }
+ img {
+ }
- .navbar {
- a {
- font-size: 18px;
- }
- }
+ span {
+ font-size: 12px;
+ }
+ }
- .phones {
- width: 100%;
- justify-content: space-between;
- }
+ .navbar {
+ a {
+ font-size: 18px;
+ }
+ }
- .phone {
- display: flex;
- align-items: center;
- gap: 5px;
- font-size: 14px;
+ .phones {
+ width: 100%;
+ justify-content: space-between;
+ }
- p {
- font-size: 14px;
- }
- }
+ .phone {
+ display: flex;
+ align-items: center;
+ gap: 5px;
+ font-size: 14px;
- .phone-all-time {
- display: flex;
- flex-direction: column;
- align-items: center;
- gap: 5px;
+ p {
+ font-size: 14px;
+ }
+ }
- p {
- font-size: 14px;
- }
+ .phone-all-time {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ gap: 5px;
- span {
- font-size: 10px;
- }
+ p {
+ font-size: 14px;
+ }
- .top {
- font-size: 14px;
- display: flex;
- align-items: center;
- gap: 5px;
- }
- }
- }
+ span {
+ font-size: 10px;
+ }
- ${(props) => props.theme.mediaQueries.tabletPortrait} {
- .content {
- align-items: center;
- padding-top: 10px;
- }
+ .top {
+ font-size: 14px;
+ display: flex;
+ align-items: center;
+ gap: 5px;
+ }
+ }
+ }
- .contact-block {
- flex-direction: row;
+ ${(props) => props.theme.mediaQueries.tabletPortrait} {
+ .content {
+ align-items: center;
+ padding-top: 10px;
+ }
- .addresses {
- width: 100%;
- justify-content: space-between;
- flex-direction: column;
+ .contact-block {
+ flex-direction: row;
- span {
- font-size: 14px;
- }
- }
- }
+ .addresses {
+ width: 100%;
+ justify-content: space-between;
+ flex-direction: column;
- .logo {
- span {
- display: none;
- }
- }
+ span {
+ font-size: 14px;
+ }
+ }
+ }
- .phones {
- flex-direction: column;
+ .logo {
+ span {
+ display: none;
+ }
+ }
- img {
- display: none;
- }
- }
+ .phones {
+ flex-direction: column;
- .navbar {
- a {
- font-size: 16px;
- }
- }
- }
+ img {
+ display: none;
+ }
+ }
- ${(props) => props.theme.mediaQueries.mobile} {
- .content {
- display: none;
- }
+ .navbar {
+ a {
+ font-size: 16px;
+ }
+ }
+ }
- .navbar {
- display: none;
- }
+ ${(props) => props.theme.mediaQueries.mobile} {
+ .content {
+ display: none;
+ }
- .menu-container {
- display: none;
- }
- }
-`
+ .navbar {
+ display: none;
+ }
+
+ .menu-container {
+ display: none;
+ }
+ }
+`;
interface I_Menu {
state: boolean
diff --git a/src/components/layout/footer/Footer.tsx b/src/components/layout/footer/Footer.tsx
index 426dbf4..05d363c 100644
--- a/src/components/layout/footer/Footer.tsx
+++ b/src/components/layout/footer/Footer.tsx
@@ -1,69 +1,77 @@
-'use client'
+"use client";
-import { Container } from '@/app/GlobalStyles'
-import AddApplicationForm from '@/components/blocks/AddApplicationForm'
-import Link from 'next/link'
-import { usePathname } from 'next/navigation'
-import { useState } from 'react'
-import LandingButton from '../../UI/button/LandingButton'
-import Modal from '../../UI/modal/Modal'
+import { Container } from "@/app/GlobalStyles";
+import AddApplicationForm from "@/components/blocks/AddApplicationForm";
+import Link from "next/link";
+import { usePathname } from "next/navigation";
+import { useState } from "react";
+import LandingButton from "../../UI/button/LandingButton";
+import Modal from "../../UI/modal/Modal";
import {
- ContentContainer,
- ContentSection,
- FooterContainer,
- FooterContent,
- LogoSection
-} from './styels'
+ ContentContainer,
+ ContentSection,
+ FooterContainer,
+ FooterContent,
+ LogoSection,
+} from "./styels";
-type Props = {}
+type Props = {};
export default function Footer({}: Props) {
- const [modal, setModal] = useState(false)
+ const [modal, setModal] = useState(false);
- const pathname = usePathname()
+ const pathname = usePathname();
- return !pathname.startsWith('/admin') ? (
- <>
-
-
-
-
-
-
- Городская похоронная служба
- setModal(true)}>
- Заказать звонок
-
-
-
- Наши контакты
- ул. Курчатова, д. 4
- ул. Героев Танкограда, д.61а
- +7 (951) 773-34-53
- +7 (932) 307-94-54
-
-
- Навигация
-
- На главную
-
-
- О нас
-
-
- Услуги
-
-
- Наши кладбища
-
-
-
-
-
-
-
-
-
- >
- ) : null
+ return !pathname.startsWith("/admin") ? (
+ <>
+
+
+
+
+
+
+ Городская похоронная служба
+ setModal(true)}>
+ Заказать звонок
+
+
+
+ Наши контакты
+
+ ул. Курчатова, д. 4
+
+
+ ул. Героев Танкограда, д.61а
+
+
+ +7 (951) 773-34-53
+
+
+ +7 (932) 307-94-54
+
+
+
+ Навигация
+
+ На главную
+
+
+ О нас
+
+
+ Услуги
+
+
+ Наши кладбища
+
+
+
+
+
+
+
+
+
+ >
+ ) : null;
}
diff --git a/src/components/screens/about-us/AboutUs.tsx b/src/components/screens/about-us/AboutUs.tsx
index 7913d28..edc7782 100644
--- a/src/components/screens/about-us/AboutUs.tsx
+++ b/src/components/screens/about-us/AboutUs.tsx
@@ -105,7 +105,7 @@ export default function AboutUs({}: Props) {
потребностям и возможностям клиента.
-
Принципы прозрачности и заботы о клиентах
diff --git a/src/components/screens/admin/auth/Auth.tsx b/src/components/screens/admin/auth/Auth.tsx
index b93501b..3dbd3c3 100644
--- a/src/components/screens/admin/auth/Auth.tsx
+++ b/src/components/screens/admin/auth/Auth.tsx
@@ -11,33 +11,33 @@ import styled from 'styled-components'
type Props = {}
const Container = styled.div`
- width: 100%;
- height: 100vh;
- background-image: url('/image 12.jpg');
- background-position: center;
- background-size: cover;
+ width: 100%;
+ height: 100vh;
+ background-image: url("/image/admin_login_bg.jpg");
+ background-position: center;
+ background-size: cover;
- display: flex;
- align-items: center;
- justify-content: center;
- position: absolute;
- top: 0;
- left: 0;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ position: absolute;
+ top: 0;
+ left: 0;
- .form {
- width: 440px;
- padding: 20px;
- text-align: center;
- display: flex;
- justify-content: center;
- flex-direction: column;
- gap: 20px;
- backdrop-filter: blur(4px);
- background: rgba(129, 129, 129, 0.4);
- color: ${(props) => props.theme.colors.white};
- border-radius: 12px;
- }
-`
+ .form {
+ width: 440px;
+ padding: 20px;
+ text-align: center;
+ display: flex;
+ justify-content: center;
+ flex-direction: column;
+ gap: 20px;
+ backdrop-filter: blur(4px);
+ background: rgba(129, 129, 129, 0.4);
+ color: ${(props) => props.theme.colors.white};
+ border-radius: 12px;
+ }
+`;
const NotificationContainer = styled.div`
position: absolute;
diff --git a/src/components/screens/admin/service/Services.tsx b/src/components/screens/admin/service/Services.tsx
index 4eaeb36..696a9d5 100644
--- a/src/components/screens/admin/service/Services.tsx
+++ b/src/components/screens/admin/service/Services.tsx
@@ -100,88 +100,88 @@ export default function Services({}: Props) {
}, [])
return (
- <>
- {firstLoadingState ? (
-
-
-
- ) : (
- <>
- {ConnectServerError ? (
-
- Сервер не доступен...
-
- ) : (
- <>
-
-
- {!(services.length === 0 && searchQuery === '') ? (
- <>
- Услуги
-
-
-
) =>
- setSearchQuery(e.target.value)
- }
- placeholder='Введите название услуги'
- />
-
-
-
setModal(true)}
- >
- Добавить
-
-
- {loadingState ? (
-
-
-
- ) : services.length !== 0 ? (
-
- {services.map((item: T_Product, index) => (
-
- ))}
-
- ) : (
-
- Ничего не найдено
-
- )}
- >
- ) : (
-
- Список товаров пуст
- setModal(true)}
- >
- Добавить
-
-
- )}
-
-
-
- >
- )}
- >
- )}
-
- {errorMessage}
- Закрыть
-
- >
- )
+ <>
+ {firstLoadingState ? (
+
+
+
+ ) : (
+ <>
+ {ConnectServerError ? (
+
+ Сервер не доступен...
+
+ ) : (
+ <>
+
+
+ {!(services.length === 0 && searchQuery === "") ? (
+ <>
+ Услуги
+
+
+
) =>
+ setSearchQuery(e.target.value)
+ }
+ placeholder="Введите название услуги"
+ />
+
+
+
setModal(true)}
+ >
+ Добавить
+
+
+ {loadingState ? (
+
+
+
+ ) : services.length !== 0 ? (
+
+ {services.map((item: T_Product, index) => (
+
+ ))}
+
+ ) : (
+
+ Ничего не найдено
+
+ )}
+ >
+ ) : (
+
+ Список товаров пуст
+ setModal(true)}
+ >
+ Добавить
+
+
+ )}
+
+
+
+ >
+ )}
+ >
+ )}
+
+ {errorMessage}
+ Закрыть
+
+ >
+ );
}
diff --git a/src/components/screens/admin/service/blocks/ServiceItem.tsx b/src/components/screens/admin/service/blocks/ServiceItem.tsx
index 83d88f0..81c027a 100644
--- a/src/components/screens/admin/service/blocks/ServiceItem.tsx
+++ b/src/components/screens/admin/service/blocks/ServiceItem.tsx
@@ -1,88 +1,87 @@
-import MainButton from '@/components/UI/button/MainButton'
-import ProductService from '@/services/product/productServeces'
-import { useState } from 'react'
-import styled from 'styled-components'
-import { T_Product } from '../../../../../services/product/type'
-import UpdateServiceForm from './UpdateServiceForm'
-import { hostName } from '../../../../../../config'
+import MainButton from "@/components/UI/button/MainButton";
+import ProductService from "@/services/product/productServeces";
+import { useState } from "react";
+import styled from "styled-components";
+import { T_Product } from "../../../../../services/product/type";
+import UpdateServiceForm from "./UpdateServiceForm";
const Cart = styled.div`
- display: flex;
- flex-direction: column;
- align-items: start;
- width: 280px;
- gap: 10px;
- position: relative;
- justify-content: space-between;
- border-radius: 12px 12px 0 0;
- overflow: hidden;
+ display: flex;
+ flex-direction: column;
+ align-items: start;
+ width: 280px;
+ gap: 10px;
+ position: relative;
+ justify-content: space-between;
+ border-radius: 12px 12px 0 0;
+ overflow: hidden;
- text-align: justify;
+ text-align: justify;
- .delete-button {
- position: absolute;
- top: 10px;
- right: 10px;
- background: ${(props) => props.theme.colors.white};
- width: 30px;
- height: 30px;
- display: flex;
- align-items: center;
- justify-content: center;
- border-radius: 50px;
- cursor: pointer;
- }
+ .delete-button {
+ position: absolute;
+ top: 10px;
+ right: 10px;
+ background: ${(props) => props.theme.colors.white};
+ width: 30px;
+ height: 30px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ border-radius: 50px;
+ cursor: pointer;
+ }
- .block {
- display: flex;
- flex-direction: column;
- align-items: start;
- width: 280px;
- gap: 10px;
+ .block {
+ display: flex;
+ flex-direction: column;
+ align-items: start;
+ width: 280px;
+ gap: 10px;
- img {
- width: 280px;
- height: 200px;
- object-fit: cover;
- }
- }
-`
+ img {
+ width: 280px;
+ height: 200px;
+ object-fit: cover;
+ }
+ }
+`;
type Props = {
- item: T_Product
- getServices: () => void
-}
+ item: T_Product;
+ getServices: () => void;
+};
export default function ServiceItem({ item, getServices }: Props) {
- const [modal, setModal] = useState(false)
+ const [modal, setModal] = useState(false);
- const deleteService = async () => {
- await ProductService.delete(item.Id)
- getServices()
- }
+ const deleteService = async () => {
+ await ProductService.delete(item.Id);
+ getServices();
+ };
- return (
- <>
-
-
-
-
{item.Name}
-
{item.FullDesc}
-
-
-
От {item.OldPrice} руб.
- setModal(true)}>Редактировать
-
-
-
-
-
-
- >
- )
+ return (
+ <>
+
+
+
+
{item.Name}
+
{item.FullDesc}
+
+
+
От {item.OldPrice} руб.
+ setModal(true)}>Редактировать
+
+
+
+
+
+
+ >
+ );
}
diff --git a/src/components/screens/home/blocks/AboutUs.tsx b/src/components/screens/home/blocks/AboutUs.tsx
index ed5a513..952b491 100644
--- a/src/components/screens/home/blocks/AboutUs.tsx
+++ b/src/components/screens/home/blocks/AboutUs.tsx
@@ -34,25 +34,25 @@ type Props = {}
export default function AboutUs({}: Props) {
return (
-
-
-
-
-
Разнообразные похоронные услуги для всех
-
-
-
-
Четкие цены на все услуги
-
-
-
-
Круглосуточная поддержка специалистов
-
-
-
-
Договор без скрытых платежей
-
-
-
- )
+
+
+
+
+
Разнообразные похоронные услуги для всех
+
+
+
+
Четкие цены на все услуги
+
+
+
+
Круглосуточная поддержка специалистов
+
+
+
+
Договор без скрытых платежей
+
+
+
+ );
}
diff --git a/src/components/screens/home/blocks/CreateOrder.tsx b/src/components/screens/home/blocks/CreateOrder.tsx
index ac7d1d0..e8b394d 100644
--- a/src/components/screens/home/blocks/CreateOrder.tsx
+++ b/src/components/screens/home/blocks/CreateOrder.tsx
@@ -1,47 +1,57 @@
-import { Container } from '@/app/GlobalStyles'
-import React from 'react'
-import styled from 'styled-components'
+import { Container } from "@/app/GlobalStyles";
+import Modal from "@/components/UI/modal/Modal";
+import AddApplicationForm from "@/components/blocks/AddApplicationForm";
+import React, { useState } from "react";
+import styled from "styled-components";
const OrderContainer = styled.div`
- display: flex;
- align-items: center;
- flex-direction: column;
- gap: 30px;
- margin-top: 50px;
+ display: flex;
+ align-items: center;
+ flex-direction: column;
+ gap: 30px;
+ margin-top: 50px;
- .button {
- padding: 10px;
- border-radius: 12px;
- border: 3px solid ${(props) => props.theme.colors.green};
+ .button {
+ padding: 10px;
+ border-radius: 12px;
+ border: 3px solid ${(props) => props.theme.colors.green};
- button {
- background: ${(props) => props.theme.colors.green};
- color: ${(props) => props.theme.colors.white};
- padding: 30px 70px;
- border-radius: 12px;
- border: none;
- }
- }
+ button {
+ background: ${(props) => props.theme.colors.green};
+ color: ${(props) => props.theme.colors.white};
+ padding: 30px 70px;
+ border-radius: 12px;
+ border: none;
+ cursor: pointer;
+ }
+ }
- h3 {
- text-align: center;
- }
-`
+ h3 {
+ text-align: center;
+ }
+`;
-type Props = {}
+type Props = {};
export default function CreateOrder({}: Props) {
+ const [modal, setModal] = useState(false);
+
return (
-
-
- Закажи обратный звонок
- Круглосуточно принимаем заказы любой сложности
-
-
-
-
-
- )
-}
\ No newline at end of file
+ <>
+
+
+ Закажи обратный звонок
+ Круглосуточно принимаем заказы любой сложности
+
+
+
+
+
+
+
+
+ >
+ );
+}
diff --git a/src/components/screens/home/blocks/Instructions.tsx b/src/components/screens/home/blocks/Instructions.tsx
index 13ff421..efaebf2 100644
--- a/src/components/screens/home/blocks/Instructions.tsx
+++ b/src/components/screens/home/blocks/Instructions.tsx
@@ -45,32 +45,32 @@ type Props = {}
export default function Instructions({}: Props) {
return (
-
-
- Порядок действий в случае смерти человека
-
-
-
-
Шаг 1: Обратитесь в нашу службу
-
- Позвоните по номеру +7 (932) 307-94-54.
-
-
-
-
-
Шаг 2: Дождитесь полицию и скорую помощь
-
Дождитесь получения необходимого направления от полиции.
-
-
-
-
Шаг 3: Дождитесь эвакуацию
-
- Дождитесь прибытия службы эвакуации для транспортировки тела в
- морг.
-
-
-
-
-
- )
+
+
+ Порядок действий в случае смерти человека
+
+
+
+
Шаг 1: Обратитесь в нашу службу
+
+ Позвоните по номеру +7 (932) 307-94-54.
+
+
+
+
+
Шаг 2: Дождитесь полицию и скорую помощь
+
Дождитесь получения необходимого направления от полиции.
+
+
+
+
Шаг 3: Дождитесь эвакуацию
+
+ Дождитесь прибытия службы эвакуации для транспортировки тела в
+ морг.
+
+
+
+
+
+ );
}
diff --git a/src/components/screens/home/blocks/MapSection.tsx b/src/components/screens/home/blocks/MapSection.tsx
index a4071c7..bbe791e 100644
--- a/src/components/screens/home/blocks/MapSection.tsx
+++ b/src/components/screens/home/blocks/MapSection.tsx
@@ -1,97 +1,105 @@
-import React from 'react'
-import { Map, Placemark, YMaps } from '@pbe/react-yandex-maps'
-import styled from 'styled-components'
+import React from "react";
+import { Map, Placemark, YMaps } from "@pbe/react-yandex-maps";
+import styled from "styled-components";
const MapContainer = styled.div`
- margin: 50px 0;
- position: relative;
+ margin: 50px 0;
+ position: relative;
- .content {
- padding: 15px;
- display: flex;
- flex-direction: column;
- gap: 10px;
- background: ${(props) => props.theme.colors.white};
- border-radius: 12px;
- position: absolute;
- top: 50%;
- left: 10%;
- transform: translateY(-50%);
- z-index: 1;
- }
+ .content {
+ padding: 15px;
+ display: flex;
+ flex-direction: column;
+ gap: 10px;
+ background: ${(props) => props.theme.colors.white};
+ border-radius: 12px;
+ position: absolute;
+ top: 50%;
+ left: 10%;
+ transform: translateY(-50%);
+ z-index: 1;
+ }
- .map {
- width: 100%;
- height: 450px;
- }
+ .map {
+ width: 100%;
+ height: 450px;
+ }
- ${(props) => props.theme.mediaQueries.tabletLandscape} {
- .content {
- gap: 5px;
- left: 5%;
+ ${(props) => props.theme.mediaQueries.tabletLandscape} {
+ .content {
+ gap: 5px;
+ left: 5%;
- h3 {
- font-size: 16px;
- }
+ h3 {
+ font-size: 16px;
+ }
- p {
- font-size: 14px;
- }
- }
- }
+ p {
+ font-size: 14px;
+ }
+ }
+ }
- ${(props) => props.theme.mediaQueries.tabletPortrait} {
- h3 {
- display: none;
- }
+ ${(props) => props.theme.mediaQueries.tabletPortrait} {
+ h3 {
+ display: none;
+ }
- .content {
- left: 0;
- right: 0;
- border-radius: 0;
- position: relative;
- transform: translateY(0);
- display: grid;
- grid-template-columns: 1fr 1fr;
+ .content {
+ left: 0;
+ right: 0;
+ border-radius: 0;
+ position: relative;
+ transform: translateY(0);
+ display: grid;
+ grid-template-columns: 1fr 1fr;
- p{
- max-width: 200px;
- width: 100%;
- }
- }
- }
-`
+ p {
+ max-width: 200px;
+ width: 100%;
+ }
+ }
+ }
+`;
-type Props = {}
+type Props = {};
export default function MapSection({}: Props) {
return (
-
-
-
-
-
-
Наши контакты
-
ул. Курчатова, д. 4
-
ул. Героев Танкограда, д.61а
-
+7 (951) 773-34-53
-
+7 (932) 307-94-54 (Круглосуточно)
-
-
- )
-}
\ No newline at end of file
+
+
+
+
+
+
+ );
+}
diff --git a/src/components/screens/home/blocks/Review.tsx b/src/components/screens/home/blocks/Review.tsx
index dfb0d4f..509ef8c 100644
--- a/src/components/screens/home/blocks/Review.tsx
+++ b/src/components/screens/home/blocks/Review.tsx
@@ -1,289 +1,274 @@
-import { useState } from 'react'
-import Slider from 'react-slick'
-import styled from 'styled-components'
+import { useState } from "react";
+import Slider from "react-slick";
+import styled from "styled-components";
export const ReviewsContainer = styled.div`
- gap: 50px;
- width: 100%;
+ gap: 50px;
+ width: 100%;
- h2 {
- margin: 50px 0;
- text-align: center;
- }
+ h2 {
+ margin: 50px 0;
+ text-align: center;
+ }
- .item {
- padding: 25px;
- gap: 30px;
- background: ${(props) => props.theme.colors.black};
- max-width: 580px;
- height: 190px;
- border-radius: 12px;
- color: ${(props) => props.theme.colors.white};
- display: flex;
+ .item {
+ padding: 25px;
+ gap: 30px;
+ background: ${(props) => props.theme.colors.black};
+ max-width: 580px;
+ height: 190px;
+ border-radius: 12px;
+ color: ${(props) => props.theme.colors.white};
+ display: flex;
- img {
- border-radius: 100px;
- height: 120px;
- max-height: 120px;
- width: 120px;
- min-width: 120px;
- object-fit: cover;
- }
- }
+ img {
+ border-radius: 100px;
+ height: 120px;
+ max-height: 120px;
+ width: 120px;
+ min-width: 120px;
+ object-fit: cover;
+ }
+ }
- .slick-slide {
- display: flex;
- justify-content: center;
- padding: 0 10px;
- }
+ .slick-slide {
+ display: flex;
+ justify-content: center;
+ padding: 0 10px;
+ }
- ${(props) => props.theme.mediaQueries.tabletLandscape} {
- display: none;
- .item {
- h3 {
- font-style: 14px;
- }
+ ${(props) => props.theme.mediaQueries.tabletLandscape} {
+ display: none;
+ .item {
+ h3 {
+ font-style: 14px;
+ }
- p {
- font-size: 12px;
- }
+ p {
+ font-size: 12px;
+ }
- img {
- border-radius: 100px;
- height: 90px;
- width: 90px;
- }
- }
- }
-`
+ img {
+ border-radius: 100px;
+ height: 90px;
+ width: 90px;
+ }
+ }
+ }
+`;
export const MobileReviewsContainer = styled.div`
- display: none;
- gap: 50px;
+ display: none;
+ gap: 50px;
- h2 {
- margin: 50px 0;
- text-align: center;
- }
+ h2 {
+ margin: 50px 0;
+ text-align: center;
+ }
- .item {
- padding: 25px;
- gap: 30px;
- background: ${(props) => props.theme.colors.black};
- max-width: 580px;
- border-radius: 12px;
- color: ${(props) => props.theme.colors.white};
- display: flex;
+ .item {
+ padding: 25px;
+ gap: 30px;
+ background: ${(props) => props.theme.colors.black};
+ max-width: 580px;
+ border-radius: 12px;
+ color: ${(props) => props.theme.colors.white};
+ display: flex;
- img {
- border-radius: 100px;
- }
- }
+ img {
+ border-radius: 100px;
+ }
+ }
- .slick-slide {
- display: flex;
- justify-content: center;
- padding: 0 10px;
- }
+ .slick-slide {
+ display: flex;
+ justify-content: center;
+ padding: 0 10px;
+ }
- .mobile-item {
- display: none;
- }
+ .mobile-item {
+ display: none;
+ }
- ${(props) => props.theme.mediaQueries.tabletLandscape} {
- display: block;
- .item {
- h3 {
- font-style: 14px;
- }
+ ${(props) => props.theme.mediaQueries.tabletLandscape} {
+ display: block;
+ .item {
+ h3 {
+ font-style: 14px;
+ }
- p {
- font-size: 12px;
- }
+ p {
+ font-size: 12px;
+ }
- img {
- border-radius: 100px;
- height: 90px;
- width: 90px;
- }
- }
- }
+ img {
+ border-radius: 100px;
+ height: 90px;
+ width: 90px;
+ }
+ }
+ }
- ${(props) => props.theme.mediaQueries.mobile} {
- .item {
- display: none;
- }
+ ${(props) => props.theme.mediaQueries.mobile} {
+ .item {
+ display: none;
+ }
- .mobile-item {
- display: flex;
- flex-direction: column;
- padding: 15px;
- gap: 20px;
- background: ${(props) => props.theme.colors.black};
- border-radius: 12px;
- color: ${(props) => props.theme.colors.white};
+ .mobile-item {
+ display: flex;
+ flex-direction: column;
+ padding: 15px;
+ gap: 20px;
+ background: ${(props) => props.theme.colors.black};
+ border-radius: 12px;
+ color: ${(props) => props.theme.colors.white};
- .content {
- display: flex;
- gap: 20px;
- align-items: center;
+ .content {
+ display: flex;
+ gap: 20px;
+ align-items: center;
- img {
- border-radius: 100px;
- height: 80px;
- width: 80px;
- }
+ img {
+ border-radius: 100px;
+ height: 80px;
+ width: 80px;
+ }
- h3 {
- font-style: 14px;
- }
+ h3 {
+ font-style: 14px;
+ }
- p {
- font-size: 12px;
- }
- }
- }
- }
+ p {
+ font-size: 12px;
+ }
+ }
+ }
+ }
- ${(props) => props.theme.mediaQueries.slimMobile} {
- .mobile-item {
- .content {
- gap: 10px;
+ ${(props) => props.theme.mediaQueries.slimMobile} {
+ .mobile-item {
+ .content {
+ gap: 10px;
- img {
- height: 60px;
- width: 60px;
- }
+ img {
+ height: 60px;
+ width: 60px;
+ }
- h3 {
- font-style: 10px;
- }
+ h3 {
+ font-style: 10px;
+ }
- p {
- font-size: 8px;
- }
- }
- }
- }
-`
+ p {
+ font-size: 8px;
+ }
+ }
+ }
+ }
+`;
-type Props = {}
+type Props = {};
export default function Review({}: Props) {
- const settings = {
- autoplay: true,
- dots: true,
- autoplaySpeed: 4000,
- infinite: true,
- slidesToShow: 3,
- speed: 500,
- arrows: false,
- centerMode: true,
- centerPadding: '60px',
- responsive: [
- {
- breakpoint: 1024,
- settings: {
- slidesToShow: 1,
- slidesToScroll: 1,
- infinite: true,
- dots: true,
- centerMode: true
- }
- },
- {
- breakpoint: 1550,
- settings: {
- slidesToShow: 2,
- slidesToScroll: 1,
- infinite: true,
- dots: true,
- centerMode: true
- }
- }
- ]
- }
+ const settings = {
+ autoplay: true,
+ dots: true,
+ autoplaySpeed: 4000,
+ infinite: true,
+ slidesToShow: 3,
+ speed: 500,
+ arrows: false,
+ centerMode: true,
+ centerPadding: "60px",
+ responsive: [
+ {
+ breakpoint: 1024,
+ settings: {
+ slidesToShow: 1,
+ slidesToScroll: 1,
+ infinite: true,
+ dots: true,
+ centerMode: true,
+ },
+ },
+ {
+ breakpoint: 1550,
+ settings: {
+ slidesToShow: 2,
+ slidesToScroll: 1,
+ infinite: true,
+ dots: true,
+ centerMode: true,
+ },
+ },
+ ],
+ };
- const [users, setUsers] = useState([
- {
- name: 'Анна Иванова',
- image: '/review/person_1.jpg',
- review:
- 'Профессиональное и сочувственное обслуживание. Помогли организовать похороны без лишних хлопот. Благодарна за их поддержку в трудный момент.'
- },
- {
- name: 'Сергей Петров',
- image: '/review/person_2.jpg',
- review:
- 'Отличное соотношение цены и качества услуг. Все выполнено аккуратно и в срок. Рекомендую это агентство в сложные времена.'
- },
- {
- name: 'Елена Козлова',
- image: '/review/person_3.jpg',
- review:
- 'Искренне признательна за заботу и профессионализм. Организация похорон прошла гладко, учли все наши пожелания. Спасибо за поддержку.'
- },
- {
- name: 'Александр Смирнов',
- image: '/review/person_4.jpg',
- review:
- 'Эмпатичные сотрудники, готовые помочь в любое время суток. Сделали все возможное, чтобы облегчить бремя нашей утраты. Благодарим за помощь.'
- }
- ])
+ const [users, setUsers] = useState([
+ {
+ name: "Анна Иванова",
+ image: "/review/person_2.jpg",
+ review:
+ "Профессиональное и сочувственное обслуживание. Помогли организовать похороны без лишних хлопот. Благодарна за их поддержку в трудный момент.",
+ },
+ {
+ name: "Сергей Петров",
+ image: "/review/person_1.jpg",
+ review:
+ "Отличное соотношение цены и качества услуг. Все выполнено аккуратно и в срок. Рекомендую это агентство в сложные времена.",
+ },
+ {
+ name: "Елена Козлова",
+ image: "/review/person_3.jpg",
+ review:
+ "Искренне признательна за заботу и профессионализм. Организация похорон прошла гладко, учли все наши пожелания. Спасибо за поддержку.",
+ },
+ {
+ name: "Александр Смирнов",
+ image: "/review/person_4.jpg",
+ review:
+ "Эмпатичные сотрудники, готовые помочь в любое время суток. Сделали все возможное, чтобы облегчить бремя нашей утраты. Благодарим за помощь.",
+ },
+ ]);
- return (
- <>
-
- Отзывы о проведенных церемониях
-
-
- {users.map((user, index) => (
-
-
-
-
-
{user.name}
-
{user.review}
-
-
-
- ))}
-
-
-
-
- Отзывы о проведенных церемониях
-
-
- {[...Array(4)].map((_, index) => (
-
-
-
-
-
Виктор Иванов
-
- Lorem ipsum dolor sit amet, consectetur adipiscing elit,
- sed do eiusmod tempor incididunt ut labore et dolore magna
- aliqua.
-
-
-
-
-
-
-
Виктор Иванов
-
-
- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed
- do eiusmod tempor incididunt ut labore et dolore magna
- aliqua.
-
-
-
- ))}
-
-
-
- >
- )
+ return (
+ <>
+
+ Отзывы о проведенных церемониях
+
+
+ {users.map((user, index) => (
+
+
+
+
+
{user.name}
+
{user.review}
+
+
+
+ ))}
+
+
+
+
+ Отзывы о проведенных церемониях
+
+
+ {users.map((user, index) => (
+
+
+
+
+
{user.name}
+
{user.review}
+
+
+
+ ))}
+
+
+
+ >
+ );
}
diff --git a/src/components/screens/home/blocks/SliderSection.tsx b/src/components/screens/home/blocks/SliderSection.tsx
index 75d11d1..adbd6a9 100644
--- a/src/components/screens/home/blocks/SliderSection.tsx
+++ b/src/components/screens/home/blocks/SliderSection.tsx
@@ -1,264 +1,285 @@
-'use client'
+"use client";
-import { Container } from '@/app/GlobalStyles'
-import LandingButton from '@/components/UI/button/LandingButton'
-import { useState } from 'react'
-import Slider from 'react-slick'
-import 'slick-carousel/slick/slick-theme.css'
-import 'slick-carousel/slick/slick.css'
-import styled from 'styled-components'
+import { Container } from "@/app/GlobalStyles";
+import LandingButton from "@/components/UI/button/LandingButton";
+import Modal from "@/components/UI/modal/Modal";
+import AddApplicationForm from "@/components/blocks/AddApplicationForm";
+import Link from "next/link";
+import { useState } from "react";
+import Slider from "react-slick";
+import "slick-carousel/slick/slick-theme.css";
+import "slick-carousel/slick/slick.css";
+import styled from "styled-components";
const Item = styled.div`
- position: relative;
+ position: relative;
- img {
- width: 100%;
- height: 400px;
- object-fit: cover;
- }
+ img {
+ width: 100%;
+ height: 400px;
+ object-fit: cover;
+ }
- .content {
- position: absolute;
- top: 0;
- left: 0;
- display: flex;
- flex-direction: column;
- width: 400px;
- height: 400px;
- align-items: start;
- padding: 30px 40px;
- color: ${(props) => props.theme.colors.white};
- z-index: 2;
- background: rgba(53, 53, 53, 0.5);
- box-sizing: border-box;
+ .content {
+ position: absolute;
+ top: 0;
+ left: 0;
+ display: flex;
+ flex-direction: column;
+ width: 400px;
+ height: 400px;
+ align-items: start;
+ padding: 30px 40px;
+ color: ${(props) => props.theme.colors.white};
+ z-index: 2;
+ background: rgba(53, 53, 53, 0.5);
+ box-sizing: border-box;
- h3 {
- text-align: start;
- display: none;
- }
+ h3 {
+ text-align: start;
+ display: none;
+ }
- h2 {
- text-align: start;
- margin-bottom: 20px;
- }
+ h2 {
+ text-align: start;
+ margin-bottom: 20px;
+ }
- h4 {
- margin-bottom: 50px;
- }
- }
+ h4 {
+ margin-bottom: 50px;
+ }
+ }
- ${(props) => props.theme.mediaQueries.tabletLandscape} {
- .content {
- width: 400px;
- height: 400px;
- padding: 30px 40px;
+ ${(props) => props.theme.mediaQueries.tabletLandscape} {
+ .content {
+ width: 400px;
+ height: 400px;
+ padding: 30px 40px;
- h3 {
- display: block;
- margin-bottom: 20px;
- }
+ h3 {
+ display: block;
+ margin-bottom: 20px;
+ }
- h2 {
- display: none;
- }
+ h2 {
+ display: none;
+ }
- h4 {
- margin-bottom: auto;
- }
- }
- }
+ h4 {
+ margin-bottom: auto;
+ }
+ }
+ }
- ${(props) => props.theme.mediaQueries.tabletPortrait} {
- height: 300px;
+ ${(props) => props.theme.mediaQueries.tabletPortrait} {
+ height: 300px;
- img {
- width: 100%;
- height: 100%;
- object-fit: cover;
- }
+ img {
+ width: 100%;
+ height: 100%;
+ object-fit: cover;
+ }
- .content {
- height: 100%;
- }
- }
+ .content {
+ height: 100%;
+ }
+ }
- ${(props) => props.theme.mediaQueries.mobile} {
- .content {
- width: 100%;
- h3 {
- font-size: 18px;
- }
+ ${(props) => props.theme.mediaQueries.mobile} {
+ .content {
+ width: 100%;
+ h3 {
+ font-size: 18px;
+ }
- h4 {
- font-size: 14px;
- }
- }
- }
-`
+ h4 {
+ font-size: 14px;
+ }
+ }
+ }
+`;
const RightArrow = styled.img`
- position: absolute;
- right: 0;
- top: 50%;
- z-index: 1;
- transform: rotate(180deg) translateY(50%);
- padding: 10px 5px;
- background: ${(props) => props.theme.colors.black};
- border-radius: 0 12px 12px 0;
- height: 45px;
- width: 35px;
+ position: absolute;
+ right: 0;
+ top: 50%;
+ z-index: 1;
+ transform: rotate(180deg) translateY(50%);
+ padding: 10px 5px;
+ background: ${(props) => props.theme.colors.black};
+ border-radius: 0 12px 12px 0;
+ height: 45px;
+ width: 35px;
- &:hover {
- background: ${(props) => props.theme.colors.black};
- }
-`
+ &:hover {
+ background: ${(props) => props.theme.colors.black};
+ }
+`;
const LeftArrow = styled.img`
- position: absolute;
- left: 0;
- z-index: 1;
- top: 50%;
- transform: translateY(-50%);
- padding: 10px 5px;
- background: ${(props) => props.theme.colors.black};
- border-radius: 0 12px 12px 0;
- height: 45px;
- width: 35px;
+ position: absolute;
+ left: 0;
+ z-index: 1;
+ top: 50%;
+ transform: translateY(-50%);
+ padding: 10px 5px;
+ background: ${(props) => props.theme.colors.black};
+ border-radius: 0 12px 12px 0;
+ height: 45px;
+ width: 35px;
- &:hover {
- background: ${(props) => props.theme.colors.black};
- }
+ &:hover {
+ background: ${(props) => props.theme.colors.black};
+ }
- ${(props) => props.theme.mediaQueries.mobile} {
- display: none;
- }
-`
+ ${(props) => props.theme.mediaQueries.mobile} {
+ display: none;
+ }
+`;
const SliderContainer = styled.div`
- margin-top: 50px;
- overflow: hidden;
- border-radius: 12px;
- height: 400px;
+ margin-top: 50px;
+ overflow: hidden;
+ border-radius: 12px;
+ height: 400px;
- ${(props) => props.theme.mediaQueries.tabletPortrait} {
- height: 300px;
- }
+ ${(props) => props.theme.mediaQueries.tabletPortrait} {
+ height: 300px;
+ }
- ${(props) => props.theme.mediaQueries.mobile} {
- display: none;
- }
-`
+ ${(props) => props.theme.mediaQueries.mobile} {
+ display: none;
+ }
+`;
const MobileSliderContainer = styled.div`
- display: none;
+ display: none;
- ${(props) => props.theme.mediaQueries.mobile} {
- overflow: hidden;
- display: block;
- height: 300px;
- }
+ ${(props) => props.theme.mediaQueries.mobile} {
+ overflow: hidden;
+ display: block;
+ height: 300px;
+ }
- .slick-arrow {
- ${(props) => props.theme.mediaQueries.mobile} {
- display: none !important;
- }
- }
-`
+ .slick-arrow {
+ ${(props) => props.theme.mediaQueries.mobile} {
+ display: none !important;
+ }
+ }
+`;
-type Props = {}
+type Props = {};
export default function SliderSection({}: Props) {
- const settings = {
- infinite: true,
- slidesToShow: 1,
- slidesToScroll: 1,
- nextArrow:
,
- prevArrow:
,
- autoplay: true,
- speed: 2000,
- autoplaySpeed: 4000,
- responsive: [
- {
- breakpoint: 640,
- settings: {
- dots: true
- }
- }
- ]
- }
+ const settings = {
+ infinite: true,
+ slidesToShow: 1,
+ slidesToScroll: 1,
+ nextArrow:
,
+ prevArrow:
,
+ autoplay: true,
+ speed: 2000,
+ autoplaySpeed: 4000,
+ responsive: [
+ {
+ breakpoint: 640,
+ settings: {
+ dots: true,
+ },
+ },
+ ],
+ };
- const [slides, setSlides] = useState([
- {
- title: 'Мы принимаем заявки прямо сейчас',
- content:
- 'Просто оставьте заявку, и мы свяжемся с вами для уточнения деталей и предоставления всей необходимой информации.',
- image: '/home_slider/slide_4.jpg',
- link: '',
- button: 'Оставить заявку'
- },
- {
- title: 'Мы предлагаем разнообразные услуги',
- content:
- 'Широкий спектр услуг для достойного прощания и помощи в трудный момент. У нас вы найдете все необходимое для организации похоронных церемоний.',
- image: '/home_slider/slide_1.jpg',
- link: '',
- button: 'Узнать больше'
- },
- {
- title: 'Мы работаем со всеми кладбищами в области',
- content:
- 'Наши услуги доступны на всех кладбищах в этой области для вашего удобства. Мы готовы помочь вам в любом месте и в любое время.',
- image: '/home_slider/slide_2.png',
- link: '',
- button: 'Смотреть кладбища'
- },
- {
- title: 'Мы работаем давно и многое можем предложить',
- content:
- 'Наша команда специалистов - залог профессионализма и заботы. Мы основываемся на принципах честности, сочувствия и уважения.',
- image: '/home_slider/slide_3.jpg',
- link: '',
- button: 'Подробнее о нас'
- }
- ])
+ const [slides, setSlides] = useState([
+ {
+ title: "Мы принимаем заявки прямо сейчас",
+ content:
+ "Просто оставьте заявку, и мы свяжемся с вами для уточнения деталей и предоставления всей необходимой информации.",
+ image: "/home_slider/slide_4.jpg",
+ link: "",
+ button: "Заказать звонок",
+ },
+ {
+ title: "Мы предлагаем разнообразные услуги",
+ content:
+ "Широкий спектр услуг для достойного прощания и помощи в трудный момент. У нас вы найдете все необходимое для организации похоронных церемоний.",
+ image: "/home_slider/slide_1.jpg",
+ link: "/services",
+ button: "Узнать больше",
+ },
+ {
+ title: "Мы работаем со всеми кладбищами в области",
+ content:
+ "Наши услуги доступны на всех кладбищах в этой области для вашего удобства. Мы готовы помочь вам в любом месте и в любое время.",
+ image: "/home_slider/slide_2.png",
+ link: "/ourCemeteries",
+ button: "Смотреть кладбища",
+ },
+ {
+ title: "Мы работаем давно и многое можем предложить",
+ content:
+ "Наша команда специалистов - залог профессионализма и заботы. Мы основываемся на принципах честности, сочувствия и уважения.",
+ image: "/home_slider/slide_3.jpg",
+ link: "/aboutUs",
+ button: "Подробнее о нас",
+ },
+ ]);
- return (
- <>
-
-
-
- {slides.map((item, index) => (
- -
-
-
-
{item.title}
- {item.title}
- {item.content}
- {item.button}
-
-
- ))}
-
-
-
-
-
- {[...Array(2)].map((_, index) => (
- -
-
-
-
Предоставление похоронных услуг в Челябинске.
- Предоставление похоронных услуг в Челябинске.
-
- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed
- do eiusmod tempor incididunt ut labore et dolore magna aliqua.
-
- Подробнее о нас
-
-
- ))}
-
-
- >
- )
+ const [modal, setModal] = useState(false)
+
+ return (
+ <>
+
+
+
+ {slides.map((item, index) => (
+ -
+
+
+
{item.title}
+ {item.title}
+ {item.content}
+ {item.link !== "" ? (
+
+ {item.button}
+
+ ) : (
+ setModal(true)}>
+ {item.button}
+
+ )}
+
+
+ ))}
+
+
+
+
+
+ {slides.map((item, index) => (
+ -
+
+
+
{item.title}
+ {item.title}
+ {item.content}
+ {item.link !== "" ? (
+
+ {item.button}
+
+ ) : (
+ setModal(true)}>
+ {item.button}
+
+ )}
+
+
+ ))}
+
+
+
+
+
+ >
+ );
}
diff --git a/src/components/screens/our-cemeteries/OurCemetery.tsx b/src/components/screens/our-cemeteries/OurCemetery.tsx
index 4ed201d..61d3764 100644
--- a/src/components/screens/our-cemeteries/OurCemetery.tsx
+++ b/src/components/screens/our-cemeteries/OurCemetery.tsx
@@ -70,37 +70,17 @@ const MapContainer = styled.div`
export default function OurCemetery({}: Props) {
return (
-
- Наши кладбища
- {/*
-
- */}
-
-
-
Наши Кладбища
-
Мы работаем по всей облачти
-
-
- )
+
+ Наши кладбища
+
+
+
Наши Кладбища
+
Мы работаем по всей области
+
+
+ );
}
diff --git a/src/components/screens/services/Services.tsx b/src/components/screens/services/Services.tsx
index 57a4e78..61418f8 100644
--- a/src/components/screens/services/Services.tsx
+++ b/src/components/screens/services/Services.tsx
@@ -1,102 +1,106 @@
-'use client'
+"use client";
-import { Container } from '@/app/GlobalStyles'
-import MainButton from '@/components/UI/button/MainButton'
-import ProductService from '@/services/product/productServeces'
-import { useEffect, useState } from 'react'
-import styled from 'styled-components'
-import ServiceItem from './ServiceItem'
-import Loader from '@/components/UI/loader/Loader'
+import { Container } from "@/app/GlobalStyles";
+import MainButton from "@/components/UI/button/MainButton";
+import ProductService from "@/services/product/productServeces";
+import { useEffect, useState } from "react";
+import styled from "styled-components";
+import ServiceItem from "./ServiceItem";
+import Loader from "@/components/UI/loader/Loader";
-type Props = {}
+type Props = {};
const ServicesContainer = styled.div`
- display: flex;
- align-items: center;
- flex-direction: column;
- margin: 50px 0;
- gap: 50px;
-`
+ display: flex;
+ align-items: center;
+ flex-direction: column;
+ margin: 50px 0;
+ gap: 50px;
+`;
const List = styled.div`
- display: grid;
- grid-template-columns: 1fr 1fr 1fr 1fr;
- justify-items: center;
- gap: 30px;
+ display: grid;
+ grid-template-columns: 1fr 1fr 1fr 1fr;
+ justify-items: center;
+ gap: 30px;
- ${(props) => props.theme.mediaQueries.tabletLandscape} {
- grid-template-columns: 1fr 1fr 1fr;
- }
+ ${(props) => props.theme.mediaQueries.tabletLandscape} {
+ grid-template-columns: 1fr 1fr 1fr;
+ }
- ${(props) => props.theme.mediaQueries.tabletPortrait} {
- grid-template-columns: 1fr 1fr;
- }
+ ${(props) => props.theme.mediaQueries.tabletPortrait} {
+ grid-template-columns: 1fr 1fr;
+ }
- ${(props) => props.theme.mediaQueries.mobile} {
- grid-template-columns: 1fr;
- }
-`
+ ${(props) => props.theme.mediaQueries.mobile} {
+ grid-template-columns: 1fr;
+ }
+`;
const MessageContainer = styled.div`
- position: absolute;
- top: 50%;
- left: 50%;
- transform: translate(-50%, -50%);
- padding: 20px;
- text-align: center;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ padding: 20px;
+ text-align: center;
- ${(props) => props.theme.mediaQueries.tabletPortrait} {
- position: relative;
- padding: 20px;
- margin-top: 30px;
- }
-`
+ ${(props) => props.theme.mediaQueries.tabletPortrait} {
+ position: relative;
+ padding: 20px;
+ margin-top: 30px;
+ }
+`;
export default function Services({}: Props) {
- const [services, setServices] = useState([])
- const [loadingState, setLoadingState] = useState(true)
- const [errorState, setErrorState] = useState(false)
+ const [services, setServices] = useState([]);
+ const [loadingState, setLoadingState] = useState(true);
+ const [errorState, setErrorState] = useState(false);
- const getServices = async () => {
- try {
- const response = await ProductService.get('')
- setServices(response.data.Data)
- } catch (error) {
- setErrorState(true)
- }
- setLoadingState(false)
- }
+ const getServices = async () => {
+ try {
+ const response = await ProductService.get("");
+ if (response.status === 200) {
+ setServices(response.data.Data);
+ } else {
+ setErrorState(false);
+ }
+ } catch (error) {
+ setErrorState(true);
+ }
+ setLoadingState(false);
+ };
- useEffect(() => {
- getServices()
- }, [])
+ useEffect(() => {
+ getServices();
+ }, []);
- return (
-
-
- Наши услуги
- {loadingState ? (
- <>
-
-
-
- >
- ) : errorState ? (
-
- Ошибка, не удалось получить услуги, сервер не доступен.
-
- ) : services.length === 0 ? (
-
- Услуг пока нет
-
- ) : (
-
- {services.map((item, index) => (
-
- ))}
-
- )}
-
-
- )
+ return (
+
+
+ Наши услуги
+ {loadingState ? (
+ <>
+
+
+
+ >
+ ) : errorState ? (
+
+ Ошибка, не удалось получить услуги, сервер не доступен.
+
+ ) : services.length === 0 ? (
+
+ Услуг пока нет
+
+ ) : (
+
+ {services.map((item, index) => (
+
+ ))}
+
+ )}
+
+
+ );
}