From 2c59660566fdf801d107b31e72b5ec0b681ac71a Mon Sep 17 00:00:00 2001 From: Damien Ostler Date: Sun, 2 Jun 2024 03:48:21 -0400 Subject: [PATCH] feat: create page --- app/gallery/admin/create/page.tsx | 88 +++++++++++++++++++++++ app/gallery/admin/page.tsx | 63 ++++++++++------ app/gallery/admin/view/page.tsx | 88 +++++++++++++++++++++++ app/gallery/page.tsx | 3 + components/neroshitron/navigation_bar.tsx | 11 ++- components/neroshitron/search_input.tsx | 2 +- 6 files changed, 230 insertions(+), 25 deletions(-) create mode 100644 app/gallery/admin/create/page.tsx create mode 100644 app/gallery/admin/view/page.tsx diff --git a/app/gallery/admin/create/page.tsx b/app/gallery/admin/create/page.tsx new file mode 100644 index 0000000..e0ae082 --- /dev/null +++ b/app/gallery/admin/create/page.tsx @@ -0,0 +1,88 @@ +"use client"; +import { createClient } from "@/utils/supabase/client"; +import React, { useState, useEffect } from 'react'; +import Search from "@/components/neroshitron/search"; +import Gallery from "@/components/neroshitron/gallery"; +import Masonry from "react-masonry-css"; +import SearchInput from "@/components/neroshitron/search_input"; + +function PageComponent() { + + const [selectedGallery, setSelectedGallery] = useState(null); + const [filePreviews, setFilePreviews] = useState([]); + const supabase = createClient(); + const user = supabase.auth.getUser(); + const getData = async () => { + } + useEffect(() => { + getData(); + }, [selectedGallery]); + + const closeGallery = () => { + setSelectedGallery(null); + } + + const handleFileChange = (event: React.ChangeEvent) => { + const files = event.target.files; + if (files) { + const previews: string[] = []; + for (let i = 0; i < files.length; i++) { + const file = files[i]; + const reader = new FileReader(); + reader.onload = (e) => { + if (e.target && e.target.result) { + previews.push(e.target.result.toString()); + if (previews.length === files.length) { + setFilePreviews(previews); + } + } + }; + reader.readAsDataURL(file); + } + } + }; + + return ( +
+
+
+ +
+ +
+
+
+
+ {}} + nsfwChanged={(nsfw) => {}} + tagsChanged={(tags) => {}} + /> +
+
+ + + {filePreviews.map((preview, index) => ( + {`Preview + ))} + +
+
+
+
+ ); +} +export default PageComponent; \ No newline at end of file diff --git a/app/gallery/admin/page.tsx b/app/gallery/admin/page.tsx index 2257dd6..9b9ab32 100644 --- a/app/gallery/admin/page.tsx +++ b/app/gallery/admin/page.tsx @@ -42,30 +42,47 @@ function PageComponent() { } }; - return (
-
- { }} nsfwChanged={(nsfw) => { }} tagsChanged={(tags) => { }} /> - - - - {filePreviews.map((preview, index) => ( - {`Preview - ))} - -
- + return ( +
+
+
+ +
+ +
+
+
+
+ {}} + nsfwChanged={(nsfw) => {}} + tagsChanged={(tags) => {}} + /> +
+
+ + + {filePreviews.map((preview, index) => ( + {`Preview + ))} + +
+
+
-
-
); } export default PageComponent; \ No newline at end of file diff --git a/app/gallery/admin/view/page.tsx b/app/gallery/admin/view/page.tsx new file mode 100644 index 0000000..f37b398 --- /dev/null +++ b/app/gallery/admin/view/page.tsx @@ -0,0 +1,88 @@ +"use client"; +import { createClient } from "@/utils/supabase/client"; +import React, { useState, useEffect } from 'react'; +import Search from "@/components/neroshitron/search"; +import Gallery from "@/components/neroshitron/gallery"; +import Masonry from "react-masonry-css"; +import SearchInput from "@/components/neroshitron/search_input"; + +function PageComponent() { + + const [selectedGallery, setSelectedGallery] = useState(null); + const [filePreviews, setFilePreviews] = useState([]); + const supabase = createClient(); + const user = supabase.auth.getUser(); + const getData = async () => { + } + useEffect(() => { + getData(); + }, [selectedGallery]); + + const closeGallery = () => { + setSelectedGallery(null); + } + + const handleFileChange = (event: React.ChangeEvent) => { + const files = event.target.files; + if (files) { + const previews: string[] = []; + for (let i = 0; i < files.length; i++) { + const file = files[i]; + const reader = new FileReader(); + reader.onload = (e) => { + if (e.target && e.target.result) { + previews.push(e.target.result.toString()); + if (previews.length === files.length) { + setFilePreviews(previews); + } + } + }; + reader.readAsDataURL(file); + } + } + }; + + return ( +
+
+
+ +
+ +
+
+
+
+ {}} + nsfwChanged={(nsfw) => {}} + tagsChanged={(tags) => {}} + /> +
+
+ + + {filePreviews.map((preview, index) => ( + {`Preview + ))} + +
+
+
+
+ ); +} +export default PageComponent; \ No newline at end of file diff --git a/app/gallery/page.tsx b/app/gallery/page.tsx index a5d95ae..26c4ba8 100644 --- a/app/gallery/page.tsx +++ b/app/gallery/page.tsx @@ -3,6 +3,7 @@ import { createClient } from "@/utils/supabase/client"; import React, { useState, useEffect } from 'react'; import Search from "@/components/neroshitron/search"; import Gallery from "@/components/neroshitron/gallery"; +import Link from "next/link"; function PageComponent() { @@ -30,7 +31,9 @@ function PageComponent() { alt="Background" />
+
{setSelectedGallery(gallery)}}/> +
{selectedGallery!=null ? ( <> diff --git a/components/neroshitron/navigation_bar.tsx b/components/neroshitron/navigation_bar.tsx index 34cf47d..cc293ee 100644 --- a/components/neroshitron/navigation_bar.tsx +++ b/components/neroshitron/navigation_bar.tsx @@ -38,8 +38,17 @@ console.log(currentPage) return (