diff --git a/app/api/galleries/admin/route.ts b/app/api/galleries/admin/route.ts index 9048310..4ffad44 100644 --- a/app/api/galleries/admin/route.ts +++ b/app/api/galleries/admin/route.ts @@ -11,16 +11,27 @@ export async function GET(request: Request) { return NextResponse.json(galleries); } + export async function POST(request: Request) { const supabase = createClient(); - const { files, tags, name, nsfw, tier }: { files: File[], tags: string[], name: string, nsfw:boolean, tier:string } = await request.json(); + const formData = await request.formData(); + const files = formData.getAll('files'); + const tags = formData.getAll('tags'); + const name = formData.get('name'); + const nsfw = formData.get('nsfw'); + const tier = formData.get('tier'); + for (let i = 0; i < files.length; i++) { - const file = files[i]; + const file = files[i] as File; // Cast 'file' to 'File' type supabase.storage.from('galleries').upload(`${name}/${file.name}`, file); } - const { data: gallery, error } = await supabase.from('galleries').insert({ name, tags, nsfw, tier, column_number:3 }).single(); - let { data: galleries, error:galleriesError } = await supabase - .from('galleries') - .select('*'); + + const { data: gallery, error } = await supabase.from('galleries').insert({ name, tags, nsfw, tier, column_number: 3 }).single(); + + let { data: galleries, error: galleriesError } = await supabase + .from('galleries') + .select('*'); + return NextResponse.json({ success: true, galleries }); } + diff --git a/app/gallery/admin/create/page.tsx b/app/gallery/admin/create/page.tsx index 8205fd5..5b05bd3 100644 --- a/app/gallery/admin/create/page.tsx +++ b/app/gallery/admin/create/page.tsx @@ -10,6 +10,12 @@ function PageComponent() { const [selectedGallery, setSelectedGallery] = useState(null); const [filePreviews, setFilePreviews] = useState([]); + const [name, setName] = useState(''); + const [nsfw, setNsfw] = useState(false); + const [tags, setTags] = useState([]); + const [tier, setTier] = useState('Free'); + const [files, setFiles] = useState(); + const supabase = createClient(); const user = supabase.auth.getUser(); const getData = async () => { @@ -22,6 +28,29 @@ function PageComponent() { setSelectedGallery(null); } + const createGallery = async () => { + const formData = new FormData(); + formData.append('name', name); + if (files) { + Array.from(files).forEach((file: File) => { + formData.append('files', file); + }); + } + formData.append('tags', JSON.stringify(tags)); + formData.append('nsfw', nsfw.toString()); + formData.append('tier', tier); + const response = await fetch('/api/galleries/admin', { + method: 'POST', + body: formData, + }); + + if (response.ok) { + const data = await response.json(); + } else { + console.log(response) + } + } + const handleFileChange = (event: React.ChangeEvent) => { const files = event.target.files; if (files) { @@ -33,6 +62,7 @@ function PageComponent() { if (e.target && e.target.result) { previews.push(e.target.result.toString()); if (previews.length === files.length) { + setFiles(files); setFilePreviews(previews); } } @@ -48,16 +78,18 @@ function PageComponent() {
setName(e.target.value)} className="mb-8 mr-2 rounded-md bg-secondary p-2 w-1/2 text-white shadow-lg" placeholder="Gallery Name" />
-
-
@@ -69,12 +101,29 @@ function PageComponent() { { value: "tags", label: "❗️ click here to add tags" }, ]} nsfwButtonEnabled={true} - searchChanged={(search) => {}} - nsfwChanged={(nsfw) => {}} - tagsChanged={(tags) => {}} + searchChanged={(search) => { }} + nsfwChanged={(nsfw) => { }} + tagsChanged={(tags) => { setTags(tags) }} />
+ + + { closeMenu(); } }; + const back_page = () => { + if (selectedImage != null) { + setSelectedImage(null); + setImages([]); + } + }; const renderButtons = () => { return ( @@ -108,7 +114,7 @@ const Gallery = ({ id, columns, closeMenu }: GalleryProps) => {