From a33b0615fd21335f8453b0b8c08f21a8561ca817 Mon Sep 17 00:00:00 2001 From: andrei Date: Sat, 5 Oct 2024 13:18:36 +0500 Subject: [PATCH] ._. --- src/AppRouter.jsx | 2 + src/api.jsx | 52 +++++++++++ src/components/Header.jsx | 5 + src/pages/FederalDistricts.jsx | 162 +++++++++++++++++++++++++++++++++ 4 files changed, 221 insertions(+) create mode 100644 src/pages/FederalDistricts.jsx diff --git a/src/AppRouter.jsx b/src/AppRouter.jsx index c4eb65e..2339d5b 100755 --- a/src/AppRouter.jsx +++ b/src/AppRouter.jsx @@ -4,6 +4,7 @@ import Home from "./pages/Home.jsx"; import Accessories from "./pages/Accessories.jsx"; import PrivateRoute from "./components/PrivateRoute"; import Cities from "./pages/Cities.jsx"; +import FederalDistricts from "./pages/FederalDistricts.jsx"; const RoutesComponent = () => ( @@ -12,6 +13,7 @@ const RoutesComponent = () => ( } /> } /> } /> + } /> ); diff --git a/src/api.jsx b/src/api.jsx index a19295a..995696e 100755 --- a/src/api.jsx +++ b/src/api.jsx @@ -170,3 +170,55 @@ export const getFederalDistricts = async () => { throw error; } }; + +export const createFederalDistrict = async (districtData) => { + try { + const response = await axios.post( + `${API_URL}/federal-districts`, + districtData, + { + headers: { + Authorization: `Bearer ${getAuthToken()}`, + "Content-Type": "application/json", + }, + } + ); + return response.data; + } catch (error) { + console.log("Ошибка при создании федерального округа:", error); + throw error; + } +}; + +export const updateFederalDistrict = async (id, districtData) => { + try { + const response = await axios.put( + `${API_URL}/federal-districts/${id}`, + districtData, + { + headers: { + Authorization: `Bearer ${getAuthToken()}`, + "Content-Type": "application/json", + }, + } + ); + return response.data; + } catch (error) { + console.log("Ошибка при обновлении федерального округа:", error); + throw error; + } +}; + +export const deleteFederalDistrict = async (id) => { + try { + await axios.delete(`${API_URL}/federal-districts/${id}`, { + headers: { + Authorization: `Bearer ${getAuthToken()}`, + Accept: "application/json", + }, + }); + } catch (error) { + console.log("Ошибка при удалении федерального округа:", error); + throw error; + } +}; diff --git a/src/components/Header.jsx b/src/components/Header.jsx index 0f9b0e1..881ca7c 100644 --- a/src/components/Header.jsx +++ b/src/components/Header.jsx @@ -35,6 +35,11 @@ const Header = () => { Города +
  • + + Федеральные округа + +
  • {isAuthenticated ? ( diff --git a/src/pages/FederalDistricts.jsx b/src/pages/FederalDistricts.jsx new file mode 100644 index 0000000..8455e7c --- /dev/null +++ b/src/pages/FederalDistricts.jsx @@ -0,0 +1,162 @@ +import React, { useState, useEffect } from "react"; +import { useNavigate } from "react-router-dom"; +import { getAuthToken } from "../api.jsx"; +import { + getFederalDistricts, + createFederalDistrict, + updateFederalDistrict, + deleteFederalDistrict, +} from "../api.jsx"; + +const FederalDistricts = () => { + const [districts, setDistricts] = useState([]); + const [newDistrict, setNewDistrict] = useState({ + name: "", + }); + const [editingDistrictId, setEditingDistrictId] = useState(null); + const [error, setError] = useState(null); + const navigate = useNavigate(); + + useEffect(() => { + fetchFederalDistricts(); + }, []); + + const fetchFederalDistricts = async () => { + try { + const data = await getFederalDistricts(); + setDistricts(data); + } catch (error) { + console.error("Ошибка при загрузке федеральных округов:", error); + } + }; + + const handleInputChange = (e) => { + const { name, value } = e.target; + setNewDistrict({ ...newDistrict, [name]: value }); + }; + + const handleSubmit = async (e) => { + e.preventDefault(); + + if (!newDistrict.name) { + setError("Пожалуйста, заполните все поля."); + return; + } + + try { + if (editingDistrictId) { + await updateFederalDistrict(editingDistrictId, newDistrict); + } else { + await createFederalDistrict(newDistrict); + } + fetchFederalDistricts(); + resetForm(); + } catch (error) { + console.error( + "Ошибка при добавлении или обновлении федерального округа:", + error + ); + } + }; + + const handleEdit = (district) => { + setNewDistrict({ + name: district.name, + }); + setEditingDistrictId(district.id); + }; + + const handleDelete = async (districtId) => { + try { + await deleteFederalDistrict(districtId); + fetchFederalDistricts(); + } catch (error) { + console.error("Ошибка при удалении федерального округа:", error); + } + }; + + const resetForm = () => { + setNewDistrict({ + name: "", + }); + setEditingDistrictId(null); + }; + + if (getAuthToken() === null) { + navigate("/login"); + } + + return ( +
    +

    Федеральные округа

    +
    +
    + + +
    + +
    + + +
    + {error && ( +
    + {error} +
    + )} +
    +

    Список федеральных округов

    + + + + + + + + + + {districts.map((district) => ( + + + + + + ))} + +
    IDНазваниеДействия
    {district.id}{district.name} +
    + + +
    +
    +
    + ); +}; + +export default FederalDistricts;