From 690c18e6011f58ca853a03e230f287904c6e1de8 Mon Sep 17 00:00:00 2001 From: degradin Date: Wed, 7 May 2025 13:38:46 +0300 Subject: [PATCH] =?UTF-8?q?=D0=90=D0=B4=D0=BC=D0=B8=D0=BD=20=D0=BF=D0=B0?= =?UTF-8?q?=D0=BD=D0=B5=D0=BB=D1=8C=20=D1=81=D0=BE=D0=B7=D0=B4=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F=20=D0=BC=D0=B5=D0=B4=D0=B8=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Пользователи с ролью "editor" и "admin" могут создавать и в дальнейшем редактировать медиа --- src/pages/AdminMediaPage.jsx | 200 ++++++++++++++++++----------------- 1 file changed, 104 insertions(+), 96 deletions(-) diff --git a/src/pages/AdminMediaPage.jsx b/src/pages/AdminMediaPage.jsx index dabfa4a..d760274 100644 --- a/src/pages/AdminMediaPage.jsx +++ b/src/pages/AdminMediaPage.jsx @@ -1,13 +1,19 @@ -import { useState } from "react"; +import React, { useEffect, useState } from 'react'; +import { useMedia } from '../contexts/MediaContext'; +import { listMedia } from '../services/supabase'; +import { mediaTypes } from '../services/mediaService'; +import { useAuth } from "../contexts/AuthContext"; import { useNavigate } from "react-router-dom"; import { createMedia } from "../services/supabase"; -import { useAuth } from "../contexts/AuthContext"; -function AdminMediaPage() { +const AdminMediaPage = () => { + const [media, setMedia] = useState([]); + const [loading, setLoading] = useState(true); + const [error, setError] = useState(null); const navigate = useNavigate(); const { currentUser, userProfile } = useAuth(); - const [loading, setLoading] = useState(false); - const [error, setError] = useState(""); + const [page, setPage] = useState(1); + const [hasMore, setHasMore] = useState(true); const [mediaData, setMediaData] = useState({ title: "", @@ -19,21 +25,36 @@ function AdminMediaPage() { is_published: false, }); - // Check if user has admin/moderator privileges - if ( - !userProfile?.role || - !["admin", "moderator"].includes(userProfile.role) - ) { + // Проверка прав доступа + if (!userProfile?.role || !["admin", "editor"].includes(userProfile.role)) { return (
-

Access Denied

-

You don't have permission to access this page.

+

Доступ запрещен

+

У вас нет прав для доступа к этой странице.

); } + useEffect(() => { + const fetchMedia = async () => { + try { + setLoading(true); + setError(null); + const data = await listMedia(null, 1, 100); // Получаем все медиа + setMedia(data || []); + } catch (err) { + console.error('Error fetching media:', err); + setError('Не удалось загрузить медиа'); + } finally { + setLoading(false); + } + }; + + fetchMedia(); + }, []); // Запускаем только при монтировании компонента + const handleInputChange = (e) => { const { name, value, type, checked } = e.target; setMediaData((prev) => ({ @@ -53,161 +74,148 @@ function AdminMediaPage() { created_by: currentUser.id, }); - navigate(`/media/${newMedia.id}`); + setMedia(prev => [newMedia, ...prev]); + setMediaData({ + title: "", + type: "movie", + poster_url: "", + backdrop_url: "", + overview: "", + release_date: "", + is_published: false, + }); } catch (err) { - setError("Failed to create media. Please try again."); + setError("Ошибка при создании медиа. Пожалуйста, попробуйте снова."); console.error("Error creating media:", err); } finally { setLoading(false); } }; + if (loading) { + return
Загрузка...
; + } + + if (error) { + return
{error}
; + } + return ( -
-

Create New Media

+
+

Управление медиа

+ +
+ {media.map((item) => ( +
+

{item.title}

+

Тип: {item.type}

+ {item.rating && ( +

Рейтинг: {item.rating}

+ )} +
+ ))} +
- {error && ( -
- {error} -
- )} - -
-
+ {/* Форма создания медиа */} +
+

Создать новое медиа

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