From 27ee5d59c3dd5b947b1249d7d02d7599531db8aa Mon Sep 17 00:00:00 2001 From: tylen Date: Sun, 2 Nov 2025 21:45:12 +0200 Subject: [PATCH] frontend: table addition elements refactor --- frontend/src/NotificationContext.tsx | 2 +- frontend/src/components/Hosting.tsx | 94 +++++++++++++--------------- frontend/src/utils/fetchHosting.tsx | 5 +- 3 files changed, 46 insertions(+), 55 deletions(-) diff --git a/frontend/src/NotificationContext.tsx b/frontend/src/NotificationContext.tsx index baeb8ac..bf69eb4 100644 --- a/frontend/src/NotificationContext.tsx +++ b/frontend/src/NotificationContext.tsx @@ -2,7 +2,7 @@ import React, { createContext, useContext, useState } from 'react'; -type NotificationType = 'success' | 'error'; +export type NotificationType = 'success' | 'error'; interface NotificationContextType { notify: (message: string, type: NotificationType) => void; diff --git a/frontend/src/components/Hosting.tsx b/frontend/src/components/Hosting.tsx index 4cab4f1..7dffd59 100644 --- a/frontend/src/components/Hosting.tsx +++ b/frontend/src/components/Hosting.tsx @@ -1,5 +1,5 @@ import useFetchHosting from "../utils/fetchHosting"; -import { useNotification } from "../NotificationContext"; +import { useNotification, type NotificationType } from "../NotificationContext"; import { useCookies } from "react-cookie"; import CenteredContainer from "./ChildrenContainer"; import { useState } from "react"; @@ -9,16 +9,16 @@ interface ReserveButtonProps { update: (name: string, id: number) => void, unreserve: (token: string, id: number) => void, reservedBy: string, + notify: (message: string, type: NotificationType) => void, id: number, } const ReserveButton: React.FC = (props) => { - const { reservedBy, update, id, unreserve } = props; + const { reservedBy, update, id, unreserve, notify } = props; const [cookie] = useCookies(['userName']) const [tokenCookie] = useCookies(['apiToken']) const userName = cookie.userName; const isReserved = reservedBy !== ''; - const notify = useNotification(); const handleReserve = async (name: string) => { try { @@ -50,68 +50,33 @@ const ReserveButton: React.FC = (props) => { ); }; -interface CreateHostingFormProps { - createHosting: (token: string, name: string, capacity: number) => void, -} -const CreateHostingForm: React.FC = (props) => { - const { createHosting } = props; +const Hosting = () => { + const { data, error, loading, update, unreserveHosting, createHosting } = useFetchHosting(); const [name, setName] = useState(''); const [capacity, setCapacity] = useState(''); const [tokenCookie] = useCookies(['apiToken']) const notify = useNotification(); - const handleSubmit = async () => { + const handleSubmit = async (event: React.FormEvent) => { + event.preventDefault(); // Prevent the default form submission + if (!name || !capacity) { - notify('Надо заполнить все поля', 'error') - return + notify('Надо заполнить все поля', 'error'); + return; } try { - await createHosting(tokenCookie.apiToken, name, Number(capacity)); // Call the existing hook + await createHosting(tokenCookie.apiToken, name, Number(capacity)); // Reset form fields setName(''); setCapacity(''); - notify('Удалось создать!', 'success') + notify('Удалось создать!', 'success'); } catch (error) { - notify(`Не удалось создать: ${error instanceof Error ? error.message : 'Unknown error'}`, 'error'); // Capture any error message + notify(`Не удалось создать: ${error instanceof Error ? error.message : 'Unknown error'}`, 'error'); } - } + }; - return ( -
-
- -
-
- -
- -
- ); -}; - - -const Hosting = () => { - const { data, error, loading, update, unreserveHosting, createHosting } = useFetchHosting(); return ( <> @@ -142,7 +107,7 @@ const Hosting = () => { {item.name} {item.capacity} - + ))} @@ -152,7 +117,34 @@ const Hosting = () => { )} Если вы хотите организовать себе свои спальные места и хотите, чтобы остальные это видели, вы можете добавить свое месо в таблицу. - +
+
+ +
+
+ +
+ +
+

diff --git a/frontend/src/utils/fetchHosting.tsx b/frontend/src/utils/fetchHosting.tsx index 1616b99..6de55b6 100644 --- a/frontend/src/utils/fetchHosting.tsx +++ b/frontend/src/utils/fetchHosting.tsx @@ -71,7 +71,6 @@ const useFetchHosting = () => { }; const createHosting = async (token: string, name: string, capacity: number) => { - setLoading(true); setError(null); try { const response = await fetch(`${API_URL}/hosting/create`, { @@ -84,13 +83,13 @@ const useFetchHosting = () => { if (!response.ok) { // Check for non-200 responses const errorText = await response.text(); // Capture the response text for further insights + console.log(`Error ${response.status}: ${errorText}`) throw new Error(`Error ${response.status}: ${errorText}`); } // Optional: Fetch the updated data after reservation - //await fetchData(); + await fetchData(); } finally { - setLoading(false); } };