"use client"; import { createClient } from "@/utils/supabase/client"; import React, { useState, useEffect } from 'react'; import SearchInput from "@/components/neroshitron/search_input"; import { useRouter } from 'next/navigation'; function PageComponent() { const router = useRouter(); const supabase = createClient(); const user = supabase.auth.getUser(); const [tags, setTags] = useState([]); const [nsfwState, setNsfwState] = useState(false); const [tagsState, setTagsState] = useState([]); const [searchState, setSearchState] = useState(""); const [galleries, setGalleries] = useState([]); const [tagSearch, setTagSearch] = useState(''); const [newTagName, setNewTagName] = useState(''); const getData = async () => { const tagsResponse = await fetch(`/api/galleries/tags`); const tagsData = await tagsResponse.json(); setTags(tagsData); const galleriesResponse = await fetch(`/api/galleries?search=` + searchState + '&nsfw=' + nsfwState, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ tags: tagsState }) }); const galleriesData = await galleriesResponse.json(); setGalleries(galleriesData); } const createTag = async () => { let formattedTag = newTagName.toLowerCase().replace(" ", "_"); const tagsResponse = await fetch(`/api/galleries/tags`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ tag: formattedTag }) }); const tagsData = await tagsResponse.json(); setNewTagName(''); getData(); } const deleteTag = async (tagParam: string) => { const tagsResponse = await fetch(`/api/galleries/tags`, { method: 'PUT', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ tag:tagParam }) }); const tagsData = await tagsResponse.json(); getData(); } useEffect(() => { getData(); }, [tagsState, newTagName]); return (
Tags Management
{setNewTagName(e.target.value)}} className=" mb-8 mr-2 rounded-md bg-info-bright p-2 w-1/2 text-black shadow-lg" placeholder="Tag Name" />
{setTagSearch(e.target.value)}} className=" mb-8 shadow-lg mr-2 rounded-md bg-info-bright p-2 w-full text-black" placeholder="Search all tags by name" />
{tags.filter((value,index,array)=>{ return value.name.toLowerCase().includes(tagSearch.toLowerCase()); }).map((item:any) => ( ))}
{item.name}
Galleries Management
{ setSearchState(search) }} nsfwChanged={(nsfw) => { setNsfwState(nsfw) }} tagsChanged={(tags) => { setTagsState(tags) }} />
{/* Replace this with your data mapping logic */} {galleries.map((item: { name: string, imageCount: number, tier: string }) => ( ))}
{item.name} {item.imageCount} {item.tier}
); } export default PageComponent;