From 9cd61030d2e303fd32f03fb18052f50a9f96829e Mon Sep 17 00:00:00 2001 From: amel Date: Wed, 4 Sep 2024 15:11:08 +0800 Subject: [PATCH] upd: member Deskripsi: - mulai pembatasan sesuai user role - nb : blm selesai No Issues --- src/app/api/user/route.ts | 29 +++-- src/module/user/member/ui/create_member.tsx | 100 +++++++++++------- .../user/member/ui/drawer_list_member.tsx | 40 ++++--- src/module/user/member/ui/tab_list_member.tsx | 47 +++----- 4 files changed, 118 insertions(+), 98 deletions(-) diff --git a/src/app/api/user/route.ts b/src/app/api/user/route.ts index 3faba9d..bf6ac85 100644 --- a/src/app/api/user/route.ts +++ b/src/app/api/user/route.ts @@ -22,6 +22,16 @@ export async function GET(request: Request) { fixGroup = idGroup } + const filter = await prisma.group.findUnique({ + where: { + id: fixGroup + }, + select: { + id: true, + name: true + } + }) + const users = await prisma.user.findMany({ where: { @@ -60,7 +70,7 @@ export async function GET(request: Request) { position: v.Position.name })) - return NextResponse.json({ success: true, message: "Berhasil member", data: allData, }, { status: 200 }); + return NextResponse.json({ success: true, message: "Berhasil member", data: allData, filter }, { status: 200 }); } catch (error) { console.error(error); return NextResponse.json({ success: false, message: "Gagal mendapatkan member, coba lagi nanti", reason: (error as Error).message, }, { status: 500 }); @@ -77,7 +87,13 @@ export async function POST(request: Request) { return NextResponse.json({ success: false, message: "Anda harus login untuk mengakses ini" }, { status: 401 }); } const data = await request.json(); - const village = "desa1" + const village = String(user.idVillage) + + let groupFix = data.idGroup + + if (groupFix == null || groupFix == undefined || groupFix == "") { + groupFix = user.idGroup + } const cek = await prisma.user.count({ where: { @@ -95,18 +111,13 @@ export async function POST(request: Request) { phone: data.phone, email: data.email, gender: data.gender, - idGroup: data.idGroup, + idGroup: groupFix, idVillage: village, idPosition: data.idPosition, idUserRole: data.idUserRole, }, select: { - id: true, - nik: true, - name: true, - phone: true, - email: true, - gender: true, + id: true }, }); diff --git a/src/module/user/member/ui/create_member.tsx b/src/module/user/member/ui/create_member.tsx index cc92b3c..72c35dd 100644 --- a/src/module/user/member/ui/create_member.tsx +++ b/src/module/user/member/ui/create_member.tsx @@ -1,5 +1,5 @@ "use client"; -import { WARNA } from "@/module/_global"; +import { globalRole, WARNA } from "@/module/_global"; import LayoutModal from "@/module/_global/layout/layout_modal"; import { funGetAllGroup, IDataGroup } from "@/module/group"; import { Box, Button, rem, Select, Stack, Text, TextInput } from "@mantine/core"; @@ -11,6 +11,9 @@ import { IDataPositionMember, IDataROleMember } from "../lib/type_member"; import { funGetAllPosition } from "@/module/position/lib/api_position"; import { funCreateMember, funGetRoleUser } from "../lib/api_member"; import _ from "lodash"; +import { useHookstate } from "@hookstate/core"; +import { useShallowEffect } from "@mantine/hooks"; +import { funGetUserByCookies } from "@/module/auth"; export default function CreateMember() { const router = useRouter(); @@ -18,6 +21,8 @@ export default function CreateMember() { const [listGroup, setListGorup] = useState([]); const [listPosition, setListPosition] = useState([]); const [listUserRole, setListUserRole] = useState([]); + const roleLogin = useHookstate(globalRole) + const [groupLogin, setGroupLogin] = useState(""); const [touched, setTouched] = useState({ nik: false, name: false, @@ -54,12 +59,20 @@ export default function CreateMember() { } } + async function getLogin() { + try { + const res = await funGetUserByCookies(); + setGroupLogin(String(res.idGroup)); + getAllPosition(res.idGroup); + } catch (error) { + console.error(error); + } + } + async function getAllPosition(val: any) { try { if (val != null) { - const res = await funGetAllPosition( - "?active=true" + "&group=" + `${val}` - ); + const res = await funGetAllPosition("?active=true" + "&group=" + `${val}`); setListPosition(res.data); } else { setListPosition([]); @@ -121,9 +134,13 @@ export default function CreateMember() { } } - useEffect(() => { + useShallowEffect(() => { getAllGroup(); getAllUserRole(); + + if (roleLogin.get() != "supadmin") { + getLogin() + } }, []); @@ -140,40 +157,43 @@ export default function CreateMember() { > - ({ + value: data.id, + label: data.name, + })) + : [] + } + onChange={(val: any) => { + changeGrup(val); + setTouched({ ...touched, idGroup: false }) + }} + onBlur={() => setTouched({ ...touched, idGroup: true })} + error={ + touched.idGroup && ( + listData.idGroup == "" ? "Grup Tidak Boleh Kosong" : null + ) + } + /> + }