From 18afe9c214f53cce7787210f3c878df740a74b13 Mon Sep 17 00:00:00 2001 From: degradin Date: Wed, 7 May 2025 15:21:06 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9A=D0=BE=D0=BC=D0=BF=D0=BE=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D1=82=20=D1=81=D0=BE=D0=B7=D0=B4=D0=B0=D0=BD=D0=B8=D1=8F?= =?UTF-8?q?=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 Компонент выведен в отдельный модуль --- src/components/admin/MediaForm.jsx | 191 +++++++++++++++++++++++++++++ 1 file changed, 191 insertions(+) create mode 100644 src/components/admin/MediaForm.jsx diff --git a/src/components/admin/MediaForm.jsx b/src/components/admin/MediaForm.jsx new file mode 100644 index 0000000..c2e58a3 --- /dev/null +++ b/src/components/admin/MediaForm.jsx @@ -0,0 +1,191 @@ +import React, { useState } from 'react'; +import { supabase } from '../../services/supabase'; + +const MediaForm = ({ onSuccess, onCancel }) => { + const [formData, setFormData] = useState({ + title: '', + type: 'movie', + overview: '', + release_date: '', + poster_url: '', + backdrop_url: '', + is_published: true + }); + const [loading, setLoading] = useState(false); + const [error, setError] = useState(null); + + const handleSubmit = async (e) => { + e.preventDefault(); + setLoading(true); + setError(null); + + try { + const { data, error } = await supabase + .from('media') + .insert([{ + ...formData, + created_by: (await supabase.auth.getUser()).data.user.id + }]) + .select() + .single(); + + if (error) throw error; + + onSuccess(data); + } catch (error) { + console.error('Error creating media:', error); + setError(error.message); + } finally { + setLoading(false); + } + }; + + const handleChange = (e) => { + const { name, value, type, checked } = e.target; + setFormData(prev => ({ + ...prev, + [name]: type === 'checkbox' ? checked : value + })); + }; + + return ( +
+
+
+

+ Добавить новый контент +

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