Files
StreamCore_IP/src/pages/CatalogPage.jsx
2025-10-23 01:54:53 +04:00

64 lines
2.2 KiB
JavaScript

// src/pages/CatalogPage.jsx
import React from 'react';
import EventList from '../components/EventList';
import EventForm from '../components/EventForm';
import useEvents from '../hooks/useEvents';
import useFormState from '../hooks/useFormState';
const CatalogPage = () => {
const { events, loading, error, addEvent, updateEvent, deleteEvent } = useEvents();
const { formData, currentEvent, isFormOpen, openForm, closeForm, handleFormChange } = useFormState();
// Функция для открытия формы для РЕДАКТИРОВАНИЯ
const handleEditClick = (event) => {
openForm(event); // Передаём конкретное событие
};
// Функция для открытия формы для ДОБАВЛЕНИЯ
const handleAddClick = () => {
openForm(null); // Явно передаём null
};
const handleFormSubmit = async (e) => {
e.preventDefault();
try {
if (currentEvent) {
await updateEvent(currentEvent.id, formData);
} else {
await addEvent(formData);
}
closeForm();
} catch (err) {
console.error('Ошибка сохранения:', err);
}
};
if (loading) return <p className="text-center">Загрузка событий...</p>;
if (error) return <p className="text-center text-danger">Ошибка: {error}</p>;
return (
<div className="container-fluid">
<h1>Каталог стримов и событий</h1>
<p>Выбирай из нашего ассортимента уникальных стримов, концертов и кибермероприятий.</p>
<EventList
events={events}
onEdit={handleEditClick} // Передаём новую функцию для редактирования
onDelete={deleteEvent}
onAddClick={handleAddClick} // Передаём новую функцию для добавления
/>
{isFormOpen && (
<EventForm
formData={formData}
currentEvent={currentEvent}
onChange={handleFormChange}
onSubmit={handleFormSubmit}
onClose={closeForm}
/>
)}
</div>
);
};
export default CatalogPage;