From 6541bd94fe8f1a0a0de0f78117c62699cf792996 Mon Sep 17 00:00:00 2001 From: Damien Ostler Date: Sun, 2 Jun 2024 22:52:44 -0400 Subject: [PATCH] 23 replace recenter with back (#36) * fix:23 * fix * fix: girl bg * Update search_input.tsx --- app/api/galleries/[id]/thumbnail/route.ts | 8 +- app/api/galleries/admin/[id]/route.ts | 68 ++++++++++++++ app/api/galleries/admin/route.ts | 26 ++++++ app/api/galleries/tags/route.ts | 1 - app/api/tiers/route.ts | 19 ++++ app/gallery/admin/create/page.tsx | 2 +- app/gallery/admin/page.tsx | 6 +- app/gallery/admin/view/page.tsx | 89 ++++++++++++++----- components/neroshitron/navigation_bar.tsx | 1 - .../neroshitron/right_hand_layout_image.tsx | 2 +- components/neroshitron/search_input.tsx | 9 +- 11 files changed, 195 insertions(+), 36 deletions(-) create mode 100644 app/api/galleries/admin/[id]/route.ts create mode 100644 app/api/galleries/admin/route.ts create mode 100644 app/api/tiers/route.ts diff --git a/app/api/galleries/[id]/thumbnail/route.ts b/app/api/galleries/[id]/thumbnail/route.ts index ffc181c..b466a96 100644 --- a/app/api/galleries/[id]/thumbnail/route.ts +++ b/app/api/galleries/[id]/thumbnail/route.ts @@ -17,7 +17,6 @@ export async function GET( request: Request, { params }: { params: { id: string } } ) { - const galleryId = params.id.toLowerCase().replace(/\s+/g, '_'); const supabase = createClient(); const user = await supabase.auth.getUser(); const url = new URL(request.url); @@ -29,16 +28,13 @@ export async function GET( .select('*') .eq('name', params.id) .single(); - - let { data: files, error } = await supabase.storage.from('galleries').list(galleryId); + let { data: files, error } = await supabase.storage.from('galleries').list(params.id); if (files == null || files?.length == 0) { - return NextResponse.error(); } // Loop through each file, download it, convert it to base64, and add the data URL to the array - let { data: blobdata, error: fileError } = await supabase.storage.from('galleries').download(galleryId + "/" + files[0].name); - + let { data: blobdata, error: fileError } = await supabase.storage.from('galleries').download(params.id + "/" + files[0].name); if (fileError || blobdata == null) { //console.error('Error downloading file:', error); return NextResponse.error(); diff --git a/app/api/galleries/admin/[id]/route.ts b/app/api/galleries/admin/[id]/route.ts new file mode 100644 index 0000000..351fc05 --- /dev/null +++ b/app/api/galleries/admin/[id]/route.ts @@ -0,0 +1,68 @@ +import { NextResponse } from "next/server"; +import { createClient } from "@/utils/supabase/server"; +import path from 'path'; + +export async function GET( + request: Request, + { params }: { params: { id: string } } + ) { + const id = params.id; + const supabase = createClient(); + const { data: gallery, error } = await supabase.from('galleries').select("*").eq('name', id).single(); + return NextResponse.json({ gallery }); +} + + +export async function PUT( + request: Request, + { params }: { params: { id: string } } + ) { + const id = params.id; + const supabase = createClient(); + const { files, tags, name, nsfw, tier}: { files: File[], tags: string[], name: string, nsfw:boolean, tier:string } = await request.json(); + const { data: gallery, error } = await supabase.from('galleries').update({ name, tags, nsfw, tier }).eq('name', id).single(); + let { data: galleries, error:galleriesError } = await supabase + .from('galleries') + .select('*'); + return NextResponse.json({ success: true, galleries }); +} + +export async function DELETE( + request: Request, + { params }: { params: { id: string } } + ) { + const id =params.id; + const supabase = createClient(); + const { data: gallery, error } = await supabase.from('galleries').delete().eq('name', id).single(); + let { data: galleries, error:galleriesError } = await supabase + .from('galleries') + .select('*'); + return NextResponse.json({ success: true, galleries }); +} + +// const tagsResponse = await fetch(`/api/galleries/tags?search=${search}`); +// const tagsData = await tagsResponse.json(); +// const galleriesWithTagData = galleriesData.map((gallery: any) => { +// const tags = tagsData.filter((tag: any) => gallery.tags.includes(tag.name)); +// return { ...gallery, tags }; +// }); + + + // const formData = new FormData(); + // formData.append('name', name); + // formData.append('tags', JSON.stringify(tags)); + // files.forEach((file: File) => { + // formData.append('files', file); + // }); + + // const response = await fetch('/api/galleries', { + // method: 'POST', + // body: formData, + // }); + + // if (response.ok) { + // const data = await response.json(); + // // Handle success + // } else { + // // Handle error + // } \ No newline at end of file diff --git a/app/api/galleries/admin/route.ts b/app/api/galleries/admin/route.ts new file mode 100644 index 0000000..9048310 --- /dev/null +++ b/app/api/galleries/admin/route.ts @@ -0,0 +1,26 @@ +import { NextResponse } from "next/server"; +import { createClient } from "@/utils/supabase/server"; +import path from 'path'; + + +export async function GET(request: Request) { + const supabase = createClient(); + let { data: galleries, error } = await supabase + .from('galleries') + .select('*'); + 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(); + for (let i = 0; i < files.length; i++) { + const file = files[i]; + 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('*'); + return NextResponse.json({ success: true, galleries }); +} diff --git a/app/api/galleries/tags/route.ts b/app/api/galleries/tags/route.ts index f9db89e..033a29b 100644 --- a/app/api/galleries/tags/route.ts +++ b/app/api/galleries/tags/route.ts @@ -15,7 +15,6 @@ export async function POST(request: Request) { const supabase = createClient(); const data = await request.json(); const { data: tag, error } = await supabase.from('tags').insert({ name: data.tag }).single(); - console.log(error) if (error) { return NextResponse.error(); } diff --git a/app/api/tiers/route.ts b/app/api/tiers/route.ts new file mode 100644 index 0000000..4a45f77 --- /dev/null +++ b/app/api/tiers/route.ts @@ -0,0 +1,19 @@ +import { NextResponse } from "next/server"; +import { createClient } from "@/utils/supabase/server"; + + +enum customTypeOptions +{ + Free, + Tier1, + Tier2, + Tier3 +} + +export async function GET(request: Request) { + const supabase = createClient(); + + return NextResponse.json(customTypeOptions); +} + + \ No newline at end of file diff --git a/app/gallery/admin/create/page.tsx b/app/gallery/admin/create/page.tsx index d981235..8205fd5 100644 --- a/app/gallery/admin/create/page.tsx +++ b/app/gallery/admin/create/page.tsx @@ -68,7 +68,7 @@ function PageComponent() { placeholderTags={[ { value: "tags", label: "❗️ click here to add tags" }, ]} - nsfwButtonEnabled={false} + nsfwButtonEnabled={true} searchChanged={(search) => {}} nsfwChanged={(nsfw) => {}} tagsChanged={(tags) => {}} diff --git a/app/gallery/admin/page.tsx b/app/gallery/admin/page.tsx index fddd9d0..22f6485 100644 --- a/app/gallery/admin/page.tsx +++ b/app/gallery/admin/page.tsx @@ -100,7 +100,7 @@ function PageComponent() { -
+
-
+
{/* Replace this with your data mapping logic */} @@ -120,7 +120,7 @@ function PageComponent() {
{item.imageCount} {item.tier} -
-
@@ -41,42 +88,42 @@ function PageComponent() { -
+
{}} nsfwChanged={(nsfw) => {}} tagsChanged={(tags) => {}} />
- { + setNsfw(e.target.value === "NSFW"); + }}> + + {filePreviews.map((preview, index) => ( {`Preview ))} + + )}
diff --git a/components/neroshitron/navigation_bar.tsx b/components/neroshitron/navigation_bar.tsx index a6b6c9a..819c629 100644 --- a/components/neroshitron/navigation_bar.tsx +++ b/components/neroshitron/navigation_bar.tsx @@ -22,7 +22,6 @@ export default async function AuthButton() { const heads = headers() const currentPage = heads.get('x-path') -console.log(currentPage) const getGravatarUrl = () => { if (user == null) { return; diff --git a/components/neroshitron/right_hand_layout_image.tsx b/components/neroshitron/right_hand_layout_image.tsx index 525709a..4a7516a 100644 --- a/components/neroshitron/right_hand_layout_image.tsx +++ b/components/neroshitron/right_hand_layout_image.tsx @@ -5,7 +5,7 @@ const RightHandLayoutImage: React.FC = () => { return (
Background diff --git a/components/neroshitron/search_input.tsx b/components/neroshitron/search_input.tsx index 422fb7d..69247b3 100644 --- a/components/neroshitron/search_input.tsx +++ b/components/neroshitron/search_input.tsx @@ -63,7 +63,6 @@ const SearchInput = ({ tagsChanged, searchChanged, nsfwChanged, nsfwButtonEnable useEffect(() => { const handleKeyDown = (event: KeyboardEvent) => { - console.log("TEST") if (event.key === 'ArrowUp') { const currentIndex = tags.findIndex(tag => tag.name === currentTag); const newIndex = currentIndex === 0 ? tags.length - 1 : currentIndex - 1; @@ -73,6 +72,13 @@ const SearchInput = ({ tagsChanged, searchChanged, nsfwChanged, nsfwButtonEnable const newIndex = currentIndex === tags.length - 1 ? 0 : currentIndex + 1; setCurrentTag(tags[newIndex].name); } + else if(event.key === 'Enter'){ + const currentIndex = tags.findIndex(tag => tag.name === currentTag); + setSelectedTags([...selectedTags, tags[currentIndex].name]); + const tagsInput = selectedTagsInput; + tagsInput.push({value: tags[currentIndex].name, label: tags[currentIndex].name}); + setSelectedTagsInput(tagsInput); + } }; window.addEventListener('keydown', handleKeyDown); @@ -82,7 +88,6 @@ const SearchInput = ({ tagsChanged, searchChanged, nsfwChanged, nsfwButtonEnable }; }, [currentTag, tags]); - console.log(currentTag) const tagOptions = tags.map((tag: { name: string; }) => ({ value: tag.name, label: tag.name })); return (