From 74ef1bd0e77797598e2d5429ff45aaceebe10f53 Mon Sep 17 00:00:00 2001 From: jmill-16 Date: Fri, 22 Nov 2024 14:53:12 -0500 Subject: [PATCH 1/6] put search bar and table on page --- src/app/private/volunteers/page.tsx | 7 +++++-- src/components/SearchBar.tsx | 25 +++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 2 deletions(-) create mode 100644 src/components/SearchBar.tsx diff --git a/src/app/private/volunteers/page.tsx b/src/app/private/volunteers/page.tsx index d98342a..3a84140 100644 --- a/src/app/private/volunteers/page.tsx +++ b/src/app/private/volunteers/page.tsx @@ -1,9 +1,12 @@ -import React from "react"; +import VolunteerTable from "@components/VolunteerTable/VolunteerTable"; +import SearchBar from "@components/SearchBar"; export default function VolunteersPage() { return (
-

Volunteers Page

+

Volunteer Home

+ +
); } diff --git a/src/components/SearchBar.tsx b/src/components/SearchBar.tsx new file mode 100644 index 0000000..1e60230 --- /dev/null +++ b/src/components/SearchBar.tsx @@ -0,0 +1,25 @@ +import React from "react"; +import { Icon } from "@iconify/react/dist/iconify.js"; + +interface SearchBarProps { + Title: string; + Subtext: number | string; +} + +const SearchBar = ({ Title, Subtext }: SearchBarProps) => { + return ( +
+ {/* Main Content Box */} +
+ {/* Close Icon positioned in the top-right corner */} +
+ +
+
+
+ ); +}; + +export default SearchBar; + + From 10e6e81798bfbdbf75847d6346efd7a47a5820af Mon Sep 17 00:00:00 2001 From: jmill-16 Date: Thu, 28 Nov 2024 18:22:26 -0500 Subject: [PATCH 2/6] updates --- src/components/SearchBar.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/SearchBar.tsx b/src/components/SearchBar.tsx index 1e60230..31c18d7 100644 --- a/src/components/SearchBar.tsx +++ b/src/components/SearchBar.tsx @@ -10,9 +10,9 @@ const SearchBar = ({ Title, Subtext }: SearchBarProps) => { return (
{/* Main Content Box */} -
+
{/* Close Icon positioned in the top-right corner */} -
+
From f5dd5de3cbf13db24b3123bd6a7b157619a86099 Mon Sep 17 00:00:00 2001 From: jmill-16 Date: Fri, 6 Dec 2024 14:48:34 -0500 Subject: [PATCH 3/6] added pagination feature --- src/app/private/volunteers/page.tsx | 2 +- .../VolunteerTable/VolunteerTable.tsx | 45 ++++++++++++++++++- 2 files changed, 44 insertions(+), 3 deletions(-) diff --git a/src/app/private/volunteers/page.tsx b/src/app/private/volunteers/page.tsx index 3a84140..f927e0f 100644 --- a/src/app/private/volunteers/page.tsx +++ b/src/app/private/volunteers/page.tsx @@ -6,7 +6,7 @@ export default function VolunteersPage() {

Volunteer Home

- +
); } diff --git a/src/components/VolunteerTable/VolunteerTable.tsx b/src/components/VolunteerTable/VolunteerTable.tsx index 8ad3352..85c1268 100644 --- a/src/components/VolunteerTable/VolunteerTable.tsx +++ b/src/components/VolunteerTable/VolunteerTable.tsx @@ -1,16 +1,25 @@ +'use client'; + import Table from "@mui/material/Table"; import TableBody from "@mui/material/TableBody"; import TableCell from "@mui/material/TableCell"; import TableContainer from "@mui/material/TableContainer"; import TableHead from "@mui/material/TableHead"; import TableRow from "@mui/material/TableRow"; +import TablePagination from "@mui/material/TablePagination"; import Avatar from "@mui/material/Avatar"; import DeleteOutlineIcon from "@mui/icons-material/DeleteOutline"; import ArrowRightAltIcon from "@mui/icons-material/ArrowRightAlt"; import IconButton from "@mui/material/IconButton"; +import Checkbox from "@mui/material/Checkbox"; +import React, { useState } from "react"; import profilePic from "../../../public/profile.png"; +interface VolunteerTableProps { + showPagination: boolean; +} + function createData( name: string, type: number, @@ -37,9 +46,31 @@ const rows = [ createData("Name1", 0, "email1", "location1"), createData("Name2", 1, "email2", "location2"), createData("Name3", 2, "email3", "location2"), + createData("Name4", 0, "email1", "location1"), + createData("Name5", 1, "email2", "location2"), + createData("Name6", 2, "email3", "location2"), + createData("Name7", 0, "email1", "location1"), + createData("Name8", 1, "email2", "location2"), + createData("Name9", 2, "email3", "location2"), + createData("Name10", 0, "email1", "location1"), + createData("Name11", 1, "email2", "location2"), + createData("Name12", 2, "email3", "location2"), + createData("Name13", 0, "email1", "location1"), + createData("Name14", 1, "email2", "location2"), + createData("Name15", 2, "email3", "location2"), ]; -export default function VolunteerTable() { +export default function VolunteerTable({ showPagination }: VolunteerTableProps) { + const [page, setPage] = useState(0); // Current page + const [rowsPerPage] = useState(8); // Set rows per page to 8 + + const handleChangePage = (event: unknown, newPage: number) => { + setPage(newPage); + }; + + // Pagination Logic + const paginatedRows = rows.slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage); + return ( - {rows.map((row) => ( + {paginatedRows.map((row) => ( + {showPagination && ( + + )} ); } From 6a50cf93755eaf534af251936075e99c33d7502c Mon Sep 17 00:00:00 2001 From: wkim10 Date: Wed, 11 Dec 2024 01:29:23 -0500 Subject: [PATCH 4/6] finish first draft --- public/empty_list.png | Bin 0 -> 48954 bytes src/app/api/user/route.client.ts | 9 +- src/app/api/user/route.ts | 47 ++- src/app/private/volunteers/page.tsx | 127 ++++++- src/components/SearchBar.tsx | 55 +++- .../VolunteerTable/VolunteerTable.tsx | 310 +++++++++++++----- 6 files changed, 438 insertions(+), 110 deletions(-) create mode 100644 public/empty_list.png diff --git a/public/empty_list.png b/public/empty_list.png new file mode 100644 index 0000000000000000000000000000000000000000..51cc9f0bea3ea8a144709470ab95c99b8f3a8063 GIT binary patch literal 48954 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 AAOHXW literal 0 HcmV?d00001 diff --git a/src/app/api/user/route.client.ts b/src/app/api/user/route.client.ts index 602aa2d..4b248d7 100644 --- a/src/app/api/user/route.client.ts +++ b/src/app/api/user/route.client.ts @@ -1,4 +1,4 @@ -import { User, VolunteerDetails } from "@prisma/client"; +import { Role, User, VolunteerDetails } from "@prisma/client"; type CreateUserInput = Omit; type CreateVolunteerDetailsInput = Omit< @@ -47,8 +47,13 @@ export const getUser = async (userID: string) => { export const getUserByEmail = async (email: string) => { const url = `/api/user?email=${email}`; return fetchApi(url, "GET"); +}; + +export const getUsersByRole = async (role: Role) => { + const url = `/api/user?role=${role}`; + return fetchApi(url, "GET"); +}; -} export const deleteUser = async (userID: string) => { const url = `/api/user?id=${userID}`; return fetchApi(url, "DELETE"); diff --git a/src/app/api/user/route.ts b/src/app/api/user/route.ts index 81e664f..7ad9c9d 100644 --- a/src/app/api/user/route.ts +++ b/src/app/api/user/route.ts @@ -33,6 +33,14 @@ export const POST = async (request: NextRequest) => { }, }); + await prisma.code.create({ + data: { + codeString: "", + expire: new Date(), + userId: savedUser.id, + }, + }); + return NextResponse.json({ code: "SUCCESS", message: `User created with email: ${savedUser.email}`, @@ -68,6 +76,10 @@ export const DELETE = async (request: NextRequest) => { } try { + await prisma.code.delete({ + where: { userId: id }, + }); + await prisma.volunteerDetails.delete({ where: { userId: id }, }); @@ -99,9 +111,9 @@ export const GET = async (request: NextRequest) => { const { searchParams } = new URL(request.url); const id: string | undefined = searchParams.get("id") || undefined; const email: string | undefined = searchParams.get("email") || undefined; + const role: string | undefined = searchParams.get("role") || undefined; - // Check if id and email is null - if (!id && !email) { + if (!id && !email && !role) { return NextResponse.json( { code: "BAD_REQUEST", @@ -110,6 +122,37 @@ export const GET = async (request: NextRequest) => { { status: 400 } ); } + + if (role) { + try { + const users = await prisma.user.findMany({ + where: { role: role === "ADMIN" ? "ADMIN" : "VOLUNTEER" }, + include: { volunteerDetails: true }, + }); + + if (!users || users.length === 0) { + return NextResponse.json( + { + code: "NOT_FOUND", + message: "No users found", + }, + { status: 404 } + ); + } + + return NextResponse.json({ + code: "SUCCESS", + data: users, + }); + } catch (error) { + console.error("Error:", error); + return NextResponse.json({ + code: "ERROR", + message: error, + }); + } + } + try { const fetchedUser = await prisma.user.findUnique({ where: id ? { id } : { email }, diff --git a/src/app/private/volunteers/page.tsx b/src/app/private/volunteers/page.tsx index f927e0f..12beced 100644 --- a/src/app/private/volunteers/page.tsx +++ b/src/app/private/volunteers/page.tsx @@ -1,12 +1,131 @@ +"use client"; + import VolunteerTable from "@components/VolunteerTable/VolunteerTable"; import SearchBar from "@components/SearchBar"; +import DeleteOutlineIcon from "@mui/icons-material/DeleteOutline"; +import { Icon } from "@iconify/react/dist/iconify.js"; +import { Button } from "@mui/material"; +import React from "react"; +import { Role, User } from "@prisma/client"; +import { deleteUser, getUsersByRole } from "@api/user/route.client"; +import Image from "next/image"; export default function VolunteersPage() { + const [users, setUsers] = React.useState(); + const [selected, setSelected] = React.useState([]); + const [searchText, setSearchText] = React.useState(""); + + React.useEffect(() => { + const fetchUsers = async () => { + try { + const response = await getUsersByRole(Role.VOLUNTEER); + setUsers(response.data); + } catch (error) { + console.error("Error fetching volunteers:", error); + } + }; + + fetchUsers(); + }, []); + + // Filter users based on the search text + const filteredUsers = users?.filter( + (user) => + user.firstName.toLowerCase().includes(searchText.toLowerCase()) || + user.lastName.toLowerCase().includes(searchText.toLowerCase()) || + user.email.toLowerCase().includes(searchText.toLowerCase()) + ); + + const deleteUsers = async (selectedIds: string[]) => { + try { + const deletePromises = selectedIds.map((id) => deleteUser(id)); + const responses = await Promise.all(deletePromises); + const allDeleted = responses.every( + (response) => response.code === "SUCCESS" + ); + + if (allDeleted) { + setUsers((prevUsers) => + prevUsers + ? prevUsers.filter((user) => !selectedIds.includes(user.id)) + : [] + ); + setSelected([]); + console.log("All users deleted successfully", responses); + } else { + console.error("Not all deletions succeeded"); + } + } catch (error) { + console.error("Error deleting users:", error); + } + }; + return ( -
-

Volunteer Home

- - +
+
+
+ +
+ Volunteer List ({users ? users.length : 0}) +
+
+ {selected.length > 0 ? ( +
+
{selected.length} Selected
+ +
+ ) : ( +
+ )} +
+ { + setSearchText(value); + setSelected([]); + }} + /> + {filteredUsers && filteredUsers.length > 0 ? ( + + ) : ( +
+
+ Empty List +
+
+ No volunteers found! +
+
+ )}
); } diff --git a/src/components/SearchBar.tsx b/src/components/SearchBar.tsx index 31c18d7..d6581f0 100644 --- a/src/components/SearchBar.tsx +++ b/src/components/SearchBar.tsx @@ -1,25 +1,46 @@ import React from "react"; -import { Icon } from "@iconify/react/dist/iconify.js"; +import { Box, InputBase } from "@mui/material"; +import SearchIcon from "@mui/icons-material/Search"; interface SearchBarProps { - Title: string; - Subtext: number | string; + onSearchChange: (searchText: string) => void; } -const SearchBar = ({ Title, Subtext }: SearchBarProps) => { - return ( -
- {/* Main Content Box */} -
- {/* Close Icon positioned in the top-right corner */} -
- -
-
-
- ); +const SearchBar = ({ onSearchChange }: SearchBarProps) => { + return ( + + + onSearchChange(e.target.value)} + sx={{ + width: "100%", + fontSize: "14px", + color: "var(--Grey-700, #344054)", + "& input::placeholder": { + color: "var(--Grey-500, #667085)", + fontFamily: "Inter, sans-serif", + fontSize: "16px", + fontWeight: 400, + lineHeight: "24px", + }, + }} + /> + + ); }; export default SearchBar; - - diff --git a/src/components/VolunteerTable/VolunteerTable.tsx b/src/components/VolunteerTable/VolunteerTable.tsx index 85c1268..8e86270 100644 --- a/src/components/VolunteerTable/VolunteerTable.tsx +++ b/src/components/VolunteerTable/VolunteerTable.tsx @@ -1,4 +1,4 @@ -'use client'; +"use client"; import Table from "@mui/material/Table"; import TableBody from "@mui/material/TableBody"; @@ -6,73 +6,66 @@ import TableCell from "@mui/material/TableCell"; import TableContainer from "@mui/material/TableContainer"; import TableHead from "@mui/material/TableHead"; import TableRow from "@mui/material/TableRow"; -import TablePagination from "@mui/material/TablePagination"; import Avatar from "@mui/material/Avatar"; import DeleteOutlineIcon from "@mui/icons-material/DeleteOutline"; import ArrowRightAltIcon from "@mui/icons-material/ArrowRightAlt"; import IconButton from "@mui/material/IconButton"; import Checkbox from "@mui/material/Checkbox"; -import React, { useState } from "react"; +import React, { useEffect, useRef, useState } from "react"; import profilePic from "../../../public/profile.png"; +import { Icon } from "@iconify/react/dist/iconify.js"; +import { User } from "@prisma/client"; +import { Box, Button, Typography } from "@mui/material"; interface VolunteerTableProps { - showPagination: boolean; + showPagination: boolean; + fromVolunteerPage: boolean; + users: User[] | undefined; + selected: string[]; + setSelected: React.Dispatch>; } -function createData( - name: string, - type: number, - email: string, - location: string -) { - return { name, type, email, location }; -} +export default function VolunteerTable({ + showPagination, + fromVolunteerPage, + users, + selected, + setSelected, +}: VolunteerTableProps) { + const [page, setPage] = useState(0); + const [rowsPerPage, setRowsPerPage] = useState(5); + const tableContainerRef = useRef(null); -function getUserRole(userType: number): string { - switch (userType) { - case 0: - return "Corporate Team"; - case 1: - return "Community Group"; - case 2: - return "Individual Volunteer"; - default: - return "undefined user role"; - } -} + const handleCheckboxChange = (name: string) => { + setSelected((prevSelected) => + prevSelected.includes(name) + ? prevSelected.filter((item) => item !== name) + : [...prevSelected, name] + ); + }; -const rows = [ - createData("Name1", 0, "email1", "location1"), - createData("Name2", 1, "email2", "location2"), - createData("Name3", 2, "email3", "location2"), - createData("Name4", 0, "email1", "location1"), - createData("Name5", 1, "email2", "location2"), - createData("Name6", 2, "email3", "location2"), - createData("Name7", 0, "email1", "location1"), - createData("Name8", 1, "email2", "location2"), - createData("Name9", 2, "email3", "location2"), - createData("Name10", 0, "email1", "location1"), - createData("Name11", 1, "email2", "location2"), - createData("Name12", 2, "email3", "location2"), - createData("Name13", 0, "email1", "location1"), - createData("Name14", 1, "email2", "location2"), - createData("Name15", 2, "email3", "location2"), -]; + const isRowSelected = (name: string) => selected.includes(name); -export default function VolunteerTable({ showPagination }: VolunteerTableProps) { - const [page, setPage] = useState(0); // Current page - const [rowsPerPage] = useState(8); // Set rows per page to 8 + const paginatedRows = + users?.slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage) || []; - const handleChangePage = (event: unknown, newPage: number) => { - setPage(newPage); + useEffect(() => { + const updateRowsPerPage = () => { + if (tableContainerRef.current) { + const containerHeight = tableContainerRef.current.clientHeight; + const rowHeight = 73; + const calculatedRows = Math.floor(containerHeight / rowHeight); + setRowsPerPage(calculatedRows > 0 ? calculatedRows : 1); + } }; - // Pagination Logic - const paginatedRows = rows.slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage); + updateRowsPerPage(); + }, []); return ( + {fromVolunteerPage ? ( + + + selected.includes(row.id) + )} + onChange={() => { + const currentPageIds = paginatedRows.map((row) => row.id); + if ( + paginatedRows.every((row) => selected.includes(row.id)) + ) { + setSelected((prevSelected) => + prevSelected.filter( + (id) => !currentPageIds.includes(id) + ) + ); + } else { + setSelected((prevSelected) => [ + ...prevSelected, + ...currentPageIds.filter( + (id) => !prevSelected.includes(id) + ), + ]); + } + }} + sx={{ + "& .MuiTouchRipple-root": { + color: "var(--Rose-50, #FFF0F1)", + }, + }} + icon={ + + } + checkedIcon={ + + + + } + /> + + ) : null} Name - - Type - + {paginatedRows.map((row) => ( + {fromVolunteerPage ? ( + + handleCheckboxChange(row.id)} + sx={{ + "& .MuiTouchRipple-root": { + color: "var(--Rose-50, #FFF0F1)", + }, + }} + icon={ + + } + checkedIcon={ + + + + } + /> + + ) : null}
- - {row.name} + + {row.firstName + " " + row.lastName}
- - {getUserRole(row.type)} - + - {row.location} + [location here] - - - + {fromVolunteerPage ? ( + "View" + ) : ( + + + + )} @@ -214,14 +303,65 @@ export default function VolunteerTable({ showPagination }: VolunteerTableProps) {showPagination && ( - + + + Page {page + 1} of {Math.ceil((users?.length || 0) / rowsPerPage)} + + + + + + + )}
); From 2b55a2a94e3814b9109002f9ce0e32c9156e20a6 Mon Sep 17 00:00:00 2001 From: wkim10 Date: Wed, 11 Dec 2024 14:01:04 -0500 Subject: [PATCH 5/6] add delete modal --- src/app/private/volunteers/page.tsx | 58 +++++++++++++++++++++++++++-- src/components/createUserForm.tsx | 2 +- 2 files changed, 55 insertions(+), 5 deletions(-) diff --git a/src/app/private/volunteers/page.tsx b/src/app/private/volunteers/page.tsx index 12beced..66c5385 100644 --- a/src/app/private/volunteers/page.tsx +++ b/src/app/private/volunteers/page.tsx @@ -14,6 +14,7 @@ export default function VolunteersPage() { const [users, setUsers] = React.useState(); const [selected, setSelected] = React.useState([]); const [searchText, setSearchText] = React.useState(""); + const [isModalOpen, setIsModalOpen] = React.useState(false); React.useEffect(() => { const fetchUsers = async () => { @@ -36,9 +37,9 @@ export default function VolunteersPage() { user.email.toLowerCase().includes(searchText.toLowerCase()) ); - const deleteUsers = async (selectedIds: string[]) => { + const deleteUsers = async () => { try { - const deletePromises = selectedIds.map((id) => deleteUser(id)); + const deletePromises = selected.map((id) => deleteUser(id)); const responses = await Promise.all(deletePromises); const allDeleted = responses.every( (response) => response.code === "SUCCESS" @@ -47,7 +48,7 @@ export default function VolunteersPage() { if (allDeleted) { setUsers((prevUsers) => prevUsers - ? prevUsers.filter((user) => !selectedIds.includes(user.id)) + ? prevUsers.filter((user) => !selected.includes(user.id)) : [] ); setSelected([]); @@ -55,6 +56,7 @@ export default function VolunteersPage() { } else { console.error("Not all deletions succeeded"); } + setIsModalOpen(false); } catch (error) { console.error("Error deleting users:", error); } @@ -87,7 +89,7 @@ export default function VolunteersPage() { backgroundColor: "var(--Rose-700, #C11429)", }, }} - onClick={() => deleteUsers(selected)} + onClick={() => setIsModalOpen(true)} >
Delete
@@ -126,6 +128,54 @@ export default function VolunteersPage() {
)} + {isModalOpen && ( +
+
+
+
+ Are you sure you want to delete {selected.length}{" "} + {selected.length === 1 ? "user" : "users"}? +
+
+ You will not be able to recover {selected.length === 1 ? "a" : ""}{" "} + deleted {selected.length === 1 ? "profile" : "profiles"}. +
+
+ + +
+
+
+ )}
); } diff --git a/src/components/createUserForm.tsx b/src/components/createUserForm.tsx index 31957b2..b63aa7a 100644 --- a/src/components/createUserForm.tsx +++ b/src/components/createUserForm.tsx @@ -61,7 +61,7 @@ const CreateUserForm = ({ setUserID }: CreateUserForm) => { address: formData.address, city: formData.city, state: formData.state, - zipCode: formData.zipCode ? parseInt(formData.zipCode) : null, + zipCode: formData.zipCode, hasLicense: formData.hasLicense, speaksEsp: formData.speaksEsp, volunteerType: formData.volunteerType, From 54f0890d2994686c013e6de1f6ba10456cf0b1b1 Mon Sep 17 00:00:00 2001 From: wkim10 Date: Wed, 11 Dec 2024 14:05:48 -0500 Subject: [PATCH 6/6] fix zipcode build issue --- src/components/createUserForm.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/createUserForm.tsx b/src/components/createUserForm.tsx index b63aa7a..31957b2 100644 --- a/src/components/createUserForm.tsx +++ b/src/components/createUserForm.tsx @@ -61,7 +61,7 @@ const CreateUserForm = ({ setUserID }: CreateUserForm) => { address: formData.address, city: formData.city, state: formData.state, - zipCode: formData.zipCode, + zipCode: formData.zipCode ? parseInt(formData.zipCode) : null, hasLicense: formData.hasLicense, speaksEsp: formData.speaksEsp, volunteerType: formData.volunteerType,