From a129194aa4e9aa6c58143688c32ebc49bbf5c66c Mon Sep 17 00:00:00 2001 From: lukman Date: Fri, 6 Sep 2024 15:10:52 +0800 Subject: [PATCH] style : update style kegiatan Deskripsi: - update project atau kegiatan No Issue --- src/app/api/project/[id]/member/route.ts | 37 +--- src/module/project/lib/api_project.ts | 4 +- .../project/ui/add_member_detail_project.tsx | 137 +++++++++--- .../project/ui/create_users_project.tsx | 195 ++++++++++++------ 4 files changed, 251 insertions(+), 122 deletions(-) diff --git a/src/app/api/project/[id]/member/route.ts b/src/app/api/project/[id]/member/route.ts index 9d20104..a99aad7 100644 --- a/src/app/api/project/[id]/member/route.ts +++ b/src/app/api/project/[id]/member/route.ts @@ -33,7 +33,7 @@ export async function POST(request: Request, context: { params: { id: string } } if (member.length > 0) { const dataMember = member.map((v: any) => ({ - ..._.omit(v, ["idUser", "name"]), + ..._.omit(v, ["idUser", "name", "img"]), idProject: id, idUser: v.idUser })) @@ -110,6 +110,8 @@ export async function GET(request: Request, context: { params: { id: string } }) const { id } = context.params const groupId = user.idGroup const userId = user.id + const { searchParams } = new URL(request.url); + const name = searchParams.get('search'); const data = await prisma.project.findUnique({ where: { @@ -128,39 +130,18 @@ export async function GET(request: Request, context: { params: { id: string } }) ); } - - // const member = await prisma.projectMember.findMany({ - // where: { - // idProject: String(id), - // isActive: true - // }, - // select: { - // id: true, - // isLeader: true, - // idUser: true, - // User: { - // select: { - // name: true - // } - // } - // }, - // orderBy: { - // isLeader: 'desc', - // } - // }) - - // const fixMember = member.map((v: any) => ({ - // ..._.omit(v, ["User"]), - // name: v.User.name - // })) - const member = await prisma.user.findMany({ where: { idGroup: String(groupId), id: { not: String(userId) }, - isActive: true + isActive: true, + name: { + contains: (name == undefined || name == "null") ? "" : name, + mode: 'insensitive' + } + }, select: { id: true, diff --git a/src/module/project/lib/api_project.ts b/src/module/project/lib/api_project.ts index 2c18ad4..ef953c3 100644 --- a/src/module/project/lib/api_project.ts +++ b/src/module/project/lib/api_project.ts @@ -19,8 +19,8 @@ export const funGetOneProjectById = async (path: string, kategori: string) => { return await response.json().catch(() => null); } -export const funGetAllMemberById = async (path?: string) => { - const response = await fetch(`/api/project/${path}/member`); +export const funGetAllMemberById = async (path?: string, id?:string) => { + const response = await fetch(`/api/project/${id}/member/${path}`); return await response.json().catch(() => null); } diff --git a/src/module/project/ui/add_member_detail_project.tsx b/src/module/project/ui/add_member_detail_project.tsx index 415cedd..15ddde5 100644 --- a/src/module/project/ui/add_member_detail_project.tsx +++ b/src/module/project/ui/add_member_detail_project.tsx @@ -5,10 +5,13 @@ import { IDataMemberProject, IDataMemberProjectDetail } from '../lib/type_projec import toast from 'react-hot-toast'; import { funAddMemberProject, funGetAllMemberById, funGetOneProjectById } from '../lib/api_project'; import { useShallowEffect } from '@mantine/hooks'; -import { Avatar, Box, Button, Divider, Flex, Grid, Group, rem, Skeleton, Stack, Text } from '@mantine/core'; +import { ActionIcon, Avatar, Box, Button, Center, Divider, Flex, Grid, Group, Indicator, rem, Skeleton, Stack, Text, TextInput } from '@mantine/core'; import { LayoutNavbarNew, SkeletonSingle, WARNA } from '@/module/_global'; import { FaCheck } from 'react-icons/fa6'; import LayoutModal from '@/module/_global/layout/layout_modal'; +import { HiMagnifyingGlass } from 'react-icons/hi2'; +import { IoArrowBackOutline, IoClose } from 'react-icons/io5'; +import { Carousel } from '@mantine/carousel'; export default function AddMemberDetailProject() { const router = useRouter() @@ -19,12 +22,14 @@ export default function AddMemberDetailProject() { const [selectAll, setSelectAll] = useState(false) const [loading, setLoading] = useState(true) const [openModal, setOpenModal] = useState(false) + const [onClickSearch, setOnClickSearch] = useState(false) + const [searchQuery, setSearchQuery] = useState('') async function getData() { try { setLoading(true) - const response = await funGetAllMemberById(param.id) + const response = await funGetAllMemberById('?search=' + searchQuery, param.id ) if (response.success) { setData(response.data.member) } else { @@ -49,7 +54,7 @@ export default function AddMemberDetailProject() { if (selectedFiles.some((i: any) => i.idUser == isData[index].idUser)) { setSelectedFiles(selectedFiles.filter((i: any) => i.idUser != isData[index].idUser)) } else { - setSelectedFiles([...selectedFiles, { idUser: isData[index].idUser, name: isData[index].name }]) + setSelectedFiles([...selectedFiles, { idUser: isData[index].idUser, name: isData[index].name, img: isData[index].img }]) } }; @@ -62,7 +67,7 @@ export default function AddMemberDetailProject() { if (!isDataMember.some((i: any) => i.idUser == isData[index].idUser)) { if (!selectedFiles.some((i: any) => i.idUser == isData[index].idUser)) { const newArr = { - idUser: isData[index].idUser, name: isData[index].name + idUser: isData[index].idUser, name: isData[index].name, img: isData[index].img } setSelectedFiles((selectedFiles: any) => [...selectedFiles, newArr]) } @@ -85,7 +90,7 @@ export default function AddMemberDetailProject() { useShallowEffect(() => { getData() - }, []); + }, [searchQuery]); async function onSubmit() { try { @@ -102,15 +107,107 @@ export default function AddMemberDetailProject() { } } + const handleSearchClick = () => { + setOnClickSearch(true); + }; + + const handleClose = () => { + setOnClickSearch(false); + }; + + function handleXMember(id: number) { + setSelectedFiles(selectedFiles.filter((i: any) => i.idUser != id)) + } + return ( + + } /> + {/* SEARCH */} + {onClickSearch + ? ( + + + + + + + + + setSearchQuery(e.target.value)} + /> + + + + ) + : null + } + {/* Close User */} + + {selectedFiles.length > 0 ? ( + + {selectedFiles.map((v: any, i: any) => { + return ( + + { handleXMember(v.idUser) }} + > +
+ }> + + +
+ {v.name} +
+
+ ) + })} +
+ ) : ( + + + Tidak ada anggota yang dipilih + + + )} +
+ - + Pilih Semua Anggota @@ -131,32 +228,6 @@ export default function AddMemberDetailProject() { const found = isDataMember.some((i: any) => i.idUser == v.idUser) return ( (!found) ? handleFileClick(i) : null}> - {/* - - - - - {v.name} - - {(found) ? "sudah menjadi anggota" : ""} - - - - {isSelected ? : ""} - - - */} void }) { @@ -19,6 +22,7 @@ export default function CreateUsersProject({ grup, onClose }: { grup?: string, o const [dataMember, setDataMember] = useState([]) const [loading, setLoading] = useState(true) const [openTugas, setOpenTugas] = useState(false) + const [onClickSearch, setOnClickSearch] = useState(false) const handleFileClick = (index: number) => { if (selectedFiles.some((i: any) => i.idUser == dataMember[index].id)) { @@ -60,6 +64,18 @@ export default function CreateUsersProject({ grup, onClose }: { grup?: string, o loadData("") }, []); + const handleSearchClick = () => { + setOnClickSearch(true); + }; + + const handleClose = () => { + setOnClickSearch(false); + }; + + function handleXMember(id: number) { + setSelectedFiles(selectedFiles.filter((i: any) => i.idUser != id)) + } + return ( - } title="Pilih Anggota" menu /> + } title="Pilih Anggota" + menu={ + + } + /> + {/* SEARCH */} + {onClickSearch + ? ( + + + + + + + + + loadData(e.target.value)} + /> + + + + ) + : null + } + {/* Close User */} + + {selectedFiles.length > 0 ? ( + + {selectedFiles.map((v: any, i: any) => { + return ( + + { handleXMember(v.idUser) }} + > +
+ }> + + +
+ {v.name} +
+
+ ) + })} +
+ ) : ( + + + Tidak ada anggota yang dipilih + + + )} +
- } - placeholder="Pencarian" - onChange={(e) => loadData(e.target.value)} - /> - + {loading ? - - {Array(6) - .fill(null) - .map((_, i) => ( - - - - ))} - + Array(6) + .fill(null) + .map((_, i) => ( + + + + )) : - - {dataMember.map((v, index) => { - const isSelected = selectedFiles.some((i: any) => i.idUser == dataMember[index].id); - return ( - - handleFileClick(index)} - > -
- -
- - {v.name} - -
+ dataMember.map((v, index) => { + const isSelected = selectedFiles.some((i: any) => i.idUser == dataMember[index].id); + return ( + handleFileClick(index)}> + + + + + + + + {v.name} + + {isSelected ? : null} + + + + + - ); - })} -
+
+ ); + }) }