diff --git a/src/app/(application)/member/edit/[id]/page.tsx b/src/app/(application)/member/edit/[id]/page.tsx index 70f69d9..47a2523 100644 --- a/src/app/(application)/member/edit/[id]/page.tsx +++ b/src/app/(application)/member/edit/[id]/page.tsx @@ -1,8 +1,8 @@ import { ViewEditMember } from "@/module/user/member"; -function Page() { +function Page({ params }: { params: { id: string } }) { return ( - + ) } diff --git a/src/module/group/components/list_group_active.tsx b/src/module/group/components/list_group_active.tsx index 7ca8949..53046e2 100644 --- a/src/module/group/components/list_group_active.tsx +++ b/src/module/group/components/list_group_active.tsx @@ -71,53 +71,53 @@ export default function ListGroupActive({ status }: { status: boolean }) { /> {loading ? Array(6) - .fill(null) - .map((_, i) => ( - + .fill(null) + .map((_, i) => ( + - )) + )) : isData.map((v, i) => { - return ( - - { - setValChoose(v.name); - setOpenDrawer(true); - setSelectId(v.id); - setActive(v.isActive); - }} - > - - - - - - - - {v.name} - - - - - ); - })} + return ( + + { + setValChoose(v.name); + setOpenDrawer(true); + setSelectId(v.id); + setActive(v.isActive); + }} + > + + + + + + + + {v.name} + + + + + ); + })} setOpenDrawer(false)} diff --git a/src/module/user/api/get/getOneUser.ts b/src/module/user/api/get/getOneUser.ts index a292d2f..2ab5788 100644 --- a/src/module/user/api/get/getOneUser.ts +++ b/src/module/user/api/get/getOneUser.ts @@ -1,4 +1,5 @@ import { prisma } from "@/module/_global"; +import _ from "lodash"; import { NextRequest } from "next/server"; export async function getOneUser(req: NextRequest) { @@ -17,10 +18,39 @@ export async function getOneUser(req: NextRequest) { phone: true, email: true, gender: true, + idGroup: true, + idPosition: true, + UserRole: { + select: { + name: true, + id: true + } + }, + Position: { + select: { + name: true, + id: true + }, + }, + Group: { + select: { + name: true, + id: true + }, + }, }, }); - return Response.json(users); + const { ...userData } = users; + const group = users?.Group.name + const position = users?.Position.name + const idUserRole = users?.UserRole.id + + const result = { ...userData, group, position, idUserRole }; + + const omitData = _.omit(result, ["Group", "Position", "UserRole"]) + console.log(omitData) + return Response.json(omitData); } catch (error) { console.error(error); return Response.json({ message: "Internal Server Errorr", success: false }, { status: 500 }); diff --git a/src/module/user/api/post/deleteUser.ts b/src/module/user/api/post/deleteUser.ts index 5ea84d3..461aeda 100644 --- a/src/module/user/api/post/deleteUser.ts +++ b/src/module/user/api/post/deleteUser.ts @@ -1,19 +1,23 @@ import { createLogUser } from '@/module/user'; import { prisma } from "@/module/_global"; import { NextRequest } from "next/server"; +import { revalidatePath } from 'next/cache'; export async function deleteUser(req: NextRequest) { try { const data = await req.json(); + const active = data.isActive; const update = await prisma.user.update({ where: { id: data.id, }, data: { - isActive: false, + isActive: !active, }, }); + revalidatePath("/member"); + // create log user const log = await createLogUser({ act: 'DELETE', desc: 'User menghapus data user', table: 'user', data: update.id }) diff --git a/src/module/user/api/post/updateUser.ts b/src/module/user/api/post/updateUser.ts index 4463f0e..626302f 100644 --- a/src/module/user/api/post/updateUser.ts +++ b/src/module/user/api/post/updateUser.ts @@ -1,6 +1,7 @@ import { createLogUser } from '@/module/user'; import { prisma } from "@/module/_global"; import { NextRequest } from "next/server"; +import { funGetUserByCookies } from '@/module/auth'; export async function updateUser(req: NextRequest) { try { @@ -17,7 +18,6 @@ export async function updateUser(req: NextRequest) { email: data.email, gender: data.gender, idGroup: data.idGroup, - idVillage: data.idVillage, idPosition: data.idPosition, idUserRole: data.idUserRole, }, diff --git a/src/module/user/member/component/edit_member.tsx b/src/module/user/member/component/edit_member.tsx index bd583d6..f899959 100644 --- a/src/module/user/member/component/edit_member.tsx +++ b/src/module/user/member/component/edit_member.tsx @@ -1,20 +1,150 @@ 'use client' -import { WARNA } from "@/module/_global"; +import { API_ADDRESS, WARNA } from "@/module/_global"; import LayoutModal from "@/module/_global/layout/layout_modal"; import { Box, Button, Select, Stack, TextInput } from "@mantine/core"; +import { useShallowEffect } from "@mantine/hooks"; +import { useRouter } from "next/navigation"; import { useState } from "react"; import toast from "react-hot-toast"; import { HiUser } from "react-icons/hi2"; -export default function EditMember() { - const [isModal, setModal] = useState(false) +type dataMember = { + id: string; + nik: string; + name: string; + phone: string; + email: string; + gender: string; + idGroup: string; + idPosition: string; + idUserRole: string; +} - function onTrue(val: boolean) { - if (val) { - toast.success("Sukses! Data tersimpan"); +type dataGroup = { + id: string; + name: string; +}; +type dataPosition = { + id: string; + name: string; +}; + +type dataROleUser = { + id: string; + name: string; +} + +export default function EditMember({ id }: { id: string | undefined }) { + const [isModal, setModal] = useState(false) + const router = useRouter() + const [listGroup, setListGorup] = useState([]) + const [listPosition, setListPosition] = useState([]) + const [listUserRole, setListUserRole] = useState([]) + const [data, setData] = useState({ + id: "", + nik: "", + name: "", + phone: "", + email: "", + gender: "", + idGroup: "", + idPosition: "", + idUserRole: "", + }) + const [listData, setListData] = useState() + + async function getAllGroup() { + try { + const res = await fetch(`${API_ADDRESS.apiGetAllGroup}&villageId=desa1&active=true`) + const data = await res.json() + setListGorup(data) + } catch (error) { + console.error(error) } - setModal(false) } + + async function getOneData() { + try { + const res = await fetch(`${API_ADDRESS.apiGetOneUser}&userID=${id}`) + const data = await res.json() + setData(data) + getAllPosition(data?.idGroup) + } catch (error) { + console.error(error) + } + } + + async function getAllPosition(val: any) { + try { + const res = await fetch(`${API_ADDRESS.apiGetAllPosition}&groupId=${val}&active=true`) + const data = await res.json() + setListPosition(data) + + } catch (error) { + console.error(error) + } + } + + async function getAllUserRole() { + try { + const res = await fetch(`${API_ADDRESS.apiGetRoleUser}`) + const data = await res.json() + setListUserRole(data) + } catch (error) { + console.error(error) + } + } + + async function changeGrup(val: any) { + setListPosition([]) + setData({ + ...data, + idGroup: val, + idPosition: "" + }) + getAllPosition(val) + } + + useShallowEffect(() => { + getAllGroup() + getOneData() + getAllUserRole() + }, []) + + + async function onSubmit(val: boolean) { + try { + const res = await fetch(API_ADDRESS.apiUpdateUser, { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify({ + id: data.id, + nik: data.nik, + name: data.name, + phone: data.phone, + email: data.email, + gender: data.gender, + idGroup: data.idGroup, + idPosition: data.idPosition, + idUserRole: data.idUserRole + }), + }) + + const respon = await res.json() + + if (res.status == 200) { + toast.success(respon.message) + } else { + toast.error(respon.message) + } + router.push('/member') + } catch (error) { + toast.error('Error'); + } + } + return ( ({ + value: data.id, + label: data.name, + })) + : [] + } + onChange={(val: any) => { + changeGrup(val) + }} + value={data?.idGroup} /> ({ + value: data.id, + label: data.name, + })) + : [] + } + onChange={(val: any) => setData({ ...data, idUserRole: val })} + value={data?.idUserRole} /> setData({ ...data, nik: e.target.value })} + value={data.nik} /> setData({ ...data, name: e.target.value })} + value={data.name} /> setData({ ...data, email: e.target.value })} + value={data.email} /> setData({ ...data, phone: e.target.value })} + value={data.phone} />