64 lines
2.2 KiB
JavaScript
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; |