diff --git a/src/app/(application)/member/[id]/page.tsx b/src/app/(application)/member/[id]/page.tsx index c05ea29..045f0a0 100644 --- a/src/app/(application)/member/[id]/page.tsx +++ b/src/app/(application)/member/[id]/page.tsx @@ -1,10 +1,12 @@ -import { ViewDetailMember } from "@/module/user/member"; +import { NavbarDetailMember } from "@/module/user/member"; +import { Box } from "@mantine/core"; function Page({ params }: { params: { id: string } }) { - return ( - - ) + return ( + + + + ); } export default Page; - diff --git a/src/app/(application)/member/create/page.tsx b/src/app/(application)/member/create/page.tsx index 1afa674..19f74ff 100644 --- a/src/app/(application)/member/create/page.tsx +++ b/src/app/(application)/member/create/page.tsx @@ -1,9 +1,14 @@ -import { ViewCreateMember } from "@/module/user/member"; +import { LayoutNavbarNew } from "@/module/_global"; +import { CreateMember } from "@/module/user/member"; +import { Box } from "@mantine/core"; function Page() { - return ( - - ); + return ( + + } /> + + + ); } -export default Page; \ No newline at end of file +export default Page; diff --git a/src/app/(application)/member/edit/[id]/page.tsx b/src/app/(application)/member/edit/[id]/page.tsx index 47a2523..adaef5b 100644 --- a/src/app/(application)/member/edit/[id]/page.tsx +++ b/src/app/(application)/member/edit/[id]/page.tsx @@ -1,9 +1,14 @@ -import { ViewEditMember } from "@/module/user/member"; +import { LayoutNavbarNew } from "@/module/_global"; +import { EditMember } from "@/module/user/member"; +import { Box } from "@mantine/core"; function Page({ params }: { params: { id: string } }) { - return ( - - ) + return ( + + } /> + + + ); } -export default Page; \ No newline at end of file +export default Page; diff --git a/src/app/(application)/member/page.tsx b/src/app/(application)/member/page.tsx index 9343340..9191ff4 100644 --- a/src/app/(application)/member/page.tsx +++ b/src/app/(application)/member/page.tsx @@ -1,13 +1,16 @@ import { ViewFilter } from "@/module/_global"; -import { ViewListMember } from "@/module/user/member"; +import { ListMember, NavbarListMember } from "@/module/user/member"; +import { Box } from "@mantine/core"; function Page({ searchParams }: { searchParams: { page: string } }) { - if (searchParams.page == "filter") - return - - return ( - - ) + if (searchParams.page == "filter") return ; + + return ( + + + + + ); } -export default Page; \ No newline at end of file +export default Page; diff --git a/src/app/api/role-user/route.ts b/src/app/api/role-user/route.ts new file mode 100644 index 0000000..b79a52f --- /dev/null +++ b/src/app/api/role-user/route.ts @@ -0,0 +1,23 @@ +import { prisma } from "@/module/_global"; +import { funGetUserByCookies } from "@/module/auth"; +import { NextResponse } from "next/server"; + +export async function GET(request: Request) { + try { + const user = await funGetUserByCookies() + if (user.id == undefined) { + return NextResponse.json({ success: false, message: "Anda harus login untuk mengakses ini" }, { status: 401 }); + } + const res = await prisma.userRole.findMany({ + select: { + id: true, + name: true, + }, + }); + + return NextResponse.json({ success: true, message: "Berhasil role user", data: res, }, { status: 200 }); + } catch (error) { + console.error(error); + return NextResponse.json({ success: false, message: "Gagal mendapatkan role user, coba lagi nanti", reason: (error as Error).message, }, { status: 500 }); + } +} \ No newline at end of file diff --git a/src/app/api/user/[id]/route.ts b/src/app/api/user/[id]/route.ts index 7bc2fbd..e9fa97d 100644 --- a/src/app/api/user/[id]/route.ts +++ b/src/app/api/user/[id]/route.ts @@ -61,7 +61,7 @@ export async function GET(request: Request, context: { params: { id: string } }) { success: true, message: "Berhasil mendapatkan anggota", - omitData, + data: omitData, }, { status: 200 } ); diff --git a/src/app/api/user/route.ts b/src/app/api/user/route.ts index bbc03e5..32285f2 100644 --- a/src/app/api/user/route.ts +++ b/src/app/api/user/route.ts @@ -54,8 +54,9 @@ export async function GET(request: Request) { }); const allData = users.map((v: any) => ({ - ..._.omit(v, ["Group"]), - group: v.Group.name + ..._.omit(v, ["Group", "Position" ]), + group: v.Group.name, + position: v.Position.name })) return NextResponse.json({ success: true, message: "Berhasil member", data: allData, }, { status: 200 }); diff --git a/src/module/announcement/api/get/getOneAnnouncement.ts b/src/module/announcement/api/get/getOneAnnouncement.ts index 98ea66c..2d9e164 100644 --- a/src/module/announcement/api/get/getOneAnnouncement.ts +++ b/src/module/announcement/api/get/getOneAnnouncement.ts @@ -37,7 +37,6 @@ export async function getOneAnnouncement(req: NextRequest) { group: v.Group.name, })) - console.log(allAnnouncementMember) return Response.json({ announcement, allAnnouncementMember }); } catch (error) { diff --git a/src/module/announcement/api/post/createAnnouncement.ts b/src/module/announcement/api/post/createAnnouncement.ts index 222ec31..039986b 100644 --- a/src/module/announcement/api/post/createAnnouncement.ts +++ b/src/module/announcement/api/post/createAnnouncement.ts @@ -29,7 +29,6 @@ export async function createAnnouncement(req: NextRequest) { const announcementMember = await prisma.announcementMember.createMany({ data: dataMember, }); - console.log(announcementMember) return Response.json({ announcement: announcement, diff --git a/src/module/user/api/get/getOneUser.ts b/src/module/user/api/get/getOneUser.ts index 03abcfb..7b73b9c 100644 --- a/src/module/user/api/get/getOneUser.ts +++ b/src/module/user/api/get/getOneUser.ts @@ -50,7 +50,6 @@ export async function getOneUser(req: NextRequest) { 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); diff --git a/src/module/user/member/index.ts b/src/module/user/member/index.ts index 2eb952b..a72c02b 100644 --- a/src/module/user/member/index.ts +++ b/src/module/user/member/index.ts @@ -1,9 +1,11 @@ -import ViewCreateMember from "./ui/view_create_member"; -import ViewDetailMember from "./ui/view_detail_member"; -import ViewEditMember from "./ui/view_edit_member"; -import ViewListMember from "./ui/view_list_member"; +import CreateMember from "./ui/create_member"; +import EditMember from "./ui/edit_member"; +import ListMember from "./ui/list_member"; +import NavbarDetailMember from "./ui/navbar_detail_member"; +import NavbarListMember from "./ui/navbar_list_member"; -export { ViewListMember } -export { ViewCreateMember } -export { ViewDetailMember } -export { ViewEditMember } \ No newline at end of file +export { NavbarListMember } +export { ListMember } +export { CreateMember } +export { NavbarDetailMember } +export {EditMember} \ No newline at end of file diff --git a/src/module/user/member/lib/api_member.ts b/src/module/user/member/lib/api_member.ts index 2e2ff84..847234f 100644 --- a/src/module/user/member/lib/api_member.ts +++ b/src/module/user/member/lib/api_member.ts @@ -1,30 +1,34 @@ import { IEditDataMember, IFormMember, IStatusmember } from "./type_member"; export const funGetAllmember = async (path?: string) => { - const response = await fetch(`/api/member${(path) ? path : ''}`, { next: { tags: ['member'] } }); + const response = await fetch(`/api/user${(path) ? path : ''}`, { next: { tags: ['member'] } }); return await response.json().catch(() => null); } +export const funGetRoleUser= async (path?: string) => { + const response = await fetch(`/api/role-user${(path) ? path : ''}`, { next: { tags: ['member'] } }); + return await response.json().catch(() => null); +} export const funGetOneMember = async (path: string) => { - const response = await fetch(`/api/member/${path}`); + const response = await fetch(`/api/user/${path}`); return await response.json().catch(() => null); } export const funCreateMember = async (data: IFormMember) => { if (data.name.length < 3) - return { success: false, message: 'Minimal 3 karakter' } + return { success: false, message: 'Name minimal 3 karakter' } if (data.email.length < 3) - return { success: false, message: 'Minimal 3 karakter' } + return { success: false, message: 'Email minimal 3 karakter' } if (data.phone.length < 10) - return { success: false, message: 'Minimal 10 karakter' } + return { success: false, message: 'Phone minimal 10 karakter' } - if (data.nik.length == 16) + if (data.nik.length < 16) return { success: false, message: 'NIK harus 16 karakter' } - const response = await fetch("/api/member", { + const response = await fetch("/api/user", { method: "POST", headers: { "Content-Type": "application/json", @@ -37,7 +41,7 @@ export const funCreateMember = async (data: IFormMember) => { export const funEditStatusMember = async (path: string, data: IStatusmember) => { - const response = await fetch(`/api/member/${path}`, { + const response = await fetch(`/api/user/${path}`, { method: "DELETE", headers: { "Content-Type": "application/json", @@ -53,7 +57,7 @@ export const funEditMember = async (path: string, data: IEditDataMember) => { if (data.name.length < 3) return { success: false, message: 'Minimal 3 karakter' } - const response = await fetch(`/api/member/${path}`, { + const response = await fetch(`/api/user/${path}`, { method: "PUT", headers: { "Content-Type": "application/json", diff --git a/src/module/user/member/lib/type_member.ts b/src/module/user/member/lib/type_member.ts index 9128a22..7258a49 100644 --- a/src/module/user/member/lib/type_member.ts +++ b/src/module/user/member/lib/type_member.ts @@ -1,13 +1,13 @@ export interface IListMember { id: string, - isActive: boolean - nik: string, name: string, - phone: string, + nik: string, email: string, + phone: string, gender: string, - group: string, position: string, + group: string, + isActive: boolean } export interface IFormMember { @@ -46,4 +46,8 @@ export interface IEditDataMember { export interface IDataROleMember { id: string; name: string; + } + +export interface IMember{ + id: string } \ No newline at end of file diff --git a/src/module/user/member/ui/create_member.tsx b/src/module/user/member/ui/create_member.tsx index b096067..1424e18 100644 --- a/src/module/user/member/ui/create_member.tsx +++ b/src/module/user/member/ui/create_member.tsx @@ -1,4 +1,4 @@ -'use client' +"use client"; import { API_ADDRESS, WARNA } from "@/module/_global"; import LayoutModal from "@/module/_global/layout/layout_modal"; import { funGetAllGroup, IDataGroup } from "@/module/group"; @@ -7,301 +7,346 @@ import { useRouter } from "next/navigation"; import { useEffect, useState } from "react"; import toast from "react-hot-toast"; import { HiUser } from "react-icons/hi2"; - - -type dataPosition = { - id: string; - name: string; -}; - -type dataROleUser = { - id: string; - name: string; -} +import { IDataPositionMember, IDataROleMember } from "../lib/type_member"; +import { funGetAllPosition } from "@/module/position/lib/api_position"; +import { funCreateMember, funGetRoleUser } from "../lib/api_member"; export default function CreateMember() { - const router = useRouter() - const [isModal, setModal] = useState(false) - const [listGroup, setListGorup] = useState([]) - const [listPosition, setListPosition] = useState([]) - const [listUserRole, setListUserRole] = useState([]) + const router = useRouter(); + const [isModal, setModal] = useState(false); + const [listGroup, setListGorup] = useState([]); + const [listPosition, setListPosition] = useState([]); + const [listUserRole, setListUserRole] = useState([]); - const [listData, setListData] = useState({ - nik: "", - name: "", - phone: "", - email: "", - gender: "", - idGroup: "", + const [listData, setListData] = useState({ + nik: "", + name: "", + phone: "", + email: "", + gender: "", + idGroup: "", + idPosition: "", + idUserRole: "", + }); + + async function getAllGroup() { + try { + const response = await funGetAllGroup("?active=true"); + if (response.success) { + setListGorup(response.data); + } else { + toast.error(response.message); + } + } catch (error) { + console.error(error); + toast.error("Gagal mendapatkan grup, coba lagi nanti"); + } + } + + async function getAllPosition(val: any) { + try { + if (val != null) { + const res = await funGetAllPosition( + "?active=true" + "&group=" + `${val}` + ); + setListPosition(res.data); + } else { + setListPosition([]); + } + } catch (error) { + console.error(error); + } + } + + async function getAllUserRole() { + try { + const res = await funGetRoleUser(); + setListUserRole(res.data); + } catch (error) { + console.error(error); + } + } + + async function changeGrup(val: any) { + setListPosition([]); + setListData({ + ...listData, + idGroup: val, idPosition: "", - idUserRole: "", - }) + }); + getAllPosition(val); + } - async function getAllGroup() { - try { - const response = await funGetAllGroup('?active=true') - if (response.success) { - setListGorup(response.data); - } else { - toast.error(response.message); - } - } catch (error) { - console.error(error) - toast.error("Gagal mendapatkan grup, coba lagi nanti"); + async function onSubmit(val: boolean) { + try { + const res = await funCreateMember({ + nik: listData.nik, + name: listData.name, + phone: listData.phone, + email: listData.email, + gender: listData.gender, + idGroup: listData.idGroup, + idPosition: listData.idPosition, + idUserRole: listData.idUserRole, + }); + + if (res.success) { + toast.success(res.message); + setModal(false); + router.push("/member?active=true"); + } else { + toast.error(res.message); } - } + } catch (error) { + toast.error("Error"); + } finally { + setModal(false); + } + } - async function getAllPosition(val: any) { - try { - if (val != null) { - const res = await fetch(`${API_ADDRESS.apiGetAllPosition}&groupId=${val}&active=true`) - const data = await res.json() - setListPosition(data) - } else { - setListPosition([]) - } - - } 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) - } - } + useEffect(() => { + getAllGroup(); + getAllUserRole(); + }, []); - async function changeGrup(val: any) { - setListPosition([]) - setListData({ - ...listData, - idGroup: val, - idPosition: "" - }) - - getAllPosition(val) - - } - - - async function onSubmit(val: boolean) { - try { - const res = await fetch(API_ADDRESS.apiCreateUser, { - method: 'POST', - headers: { - 'Content-Type': 'application/json' + return ( + + + + + + ({ + value: data.id, + label: data.name, + })) + : [] + } + onChange={(val: any) => + setListData({ + ...listData, + idPosition: val, }) - }) - toast.success("Sukses! Data tersimpan"); - setModal(false) - router.push('/member') - } catch (error) { - toast.error('Error') - toast.error("Sukses! Data tersimpan"); - } - } - - - useEffect(() => { - getAllGroup() - getAllUserRole() - }, []) - - function onTrue(val: boolean) { - if (val) { - toast.success("Sukses! Data tersimpan"); - } - setModal(false) - } - - return ( - - - - - - ({ - value: data.id, - label: data.name, - })) - : [] - } - onChange={(val: any) => setListData({ - ...listData, - idPosition: val - })} - value={(listData.idPosition == "") ? null : listData.idPosition} - /> - setListData({ - ...listData, - gender: val - })} - /> - - - - - setModal(false)} - description="Apakah Anda yakin ingin menambahkan data?" - onYes={(val) => { onSubmit(val) }} /> + } + value={listData.idPosition == "" ? null : listData.idPosition} + /> + + setListData({ + ...listData, + gender: val, + }) + } + /> + + + - ) -} \ No newline at end of file + setModal(false)} + description="Apakah Anda yakin ingin menambahkan data?" + onYes={(val) => { + onSubmit(val); + }} + /> + + ); +} diff --git a/src/module/user/member/ui/drawer_detail_member.tsx b/src/module/user/member/ui/drawer_detail_member.tsx index 7f035b2..cbfa1ba 100644 --- a/src/module/user/member/ui/drawer_detail_member.tsx +++ b/src/module/user/member/ui/drawer_detail_member.tsx @@ -1,4 +1,4 @@ -'use client' +"use client"; import { API_ADDRESS, WARNA } from "@/module/_global"; import LayoutModal from "@/module/_global/layout/layout_modal"; import { Box, Flex, SimpleGrid, Stack, Text } from "@mantine/core"; @@ -8,76 +8,93 @@ import { useState } from "react"; import toast from "react-hot-toast"; import { FaPencil, FaToggleOff } from "react-icons/fa6"; import { ImUserCheck } from "react-icons/im"; +import { funEditStatusMember } from "../lib/api_member"; -export default function DrawerDetailMember({ onDeleted, id, status }: { onDeleted: (val: boolean) => void, id: string | undefined, status: boolean |undefined }) { - const router = useRouter() - const [isModal, setModal] = useState(false) +export default function DrawerDetailMember({ + onDeleted, + id, + status, +}: { + onDeleted: (val: boolean) => void; + id: string; + status: boolean; +}) { + const router = useRouter(); + const [isModal, setModal] = useState(false); + async function nonActive(val: boolean) { + try { + const res = await funEditStatusMember(id, { + isActive: status, + }); - async function nonActive(val: boolean) { - try { - const res = await fetch(API_ADDRESS.apiDeleteUser, { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - body: JSON.stringify({ - id, - isActive: status - }), - }) - if (res.status == 200) { - onDeleted(true); - } else { - onDeleted(false); - } - router.push('/member') - setModal(false) - } catch (error) { - console.error(error) - setModal(false); - toast.error("Terjadi kesalahan"); + if (res.success) { + toast.success(res.message); + onDeleted(true); + } else { + onDeleted(false); } - } + router.push("/member?active=true"); + setModal(false); + } catch (error) { + console.error(error); + setModal(false); + toast.error("Terjadi kesalahan"); + } + } - return ( - - - - { - setModal(true) - }} - > - - - - - {status === false ? "Aktifkan" : "Non Aktifkan"} - - + return ( + + + + { + setModal(true); + }} + > + + + + + + {" "} + {status === false ? "Aktifkan" : "Non Aktifkan"} + + + - { - router.push(`/member/edit/${id}`) - }} - > - - - - - Edit - - - - - setModal(false)} - description="Apakah Anda yakin ingin mengubah status aktifasi anggota?" - onYes={(val) => { nonActive(val) }} /> - - ) -} \ No newline at end of file + { + router.push(`/member/edit/${id}`); + }} + > + + + + + + Edit + + + + + + setModal(false)} + description="Apakah Anda yakin ingin mengubah status aktifasi anggota?" + onYes={(val) => { + nonActive(val); + }} + /> + + ); +} diff --git a/src/module/user/member/ui/edit_member.tsx b/src/module/user/member/ui/edit_member.tsx index 6993b44..bda6df3 100644 --- a/src/module/user/member/ui/edit_member.tsx +++ b/src/module/user/member/ui/edit_member.tsx @@ -2,43 +2,24 @@ import { API_ADDRESS, WARNA } from "@/module/_global"; import LayoutModal from "@/module/_global/layout/layout_modal"; import { funGetAllGroup, IDataGroup } from "@/module/group"; +import { funGetAllPosition } from "@/module/position/lib/api_position"; 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"; - -type dataMember = { - id: string; - nik: string; - name: string; - phone: string; - email: string; - gender: string; - idGroup: string; - idPosition: string; - idUserRole: string; -} +import { IDataPositionMember, IDataROleMember, IEditDataMember, IFormMember } from "../lib/type_member"; +import { funEditMember, funGetOneMember, funGetRoleUser } from "../lib/api_member"; -type dataPosition = { - id: string; - name: string; -}; - -type dataROleUser = { - id: string; - name: string; -} - -export default function EditMember({ id }: { id: string | undefined }) { +export default function EditMember({ id }: { id: string}) { const [isModal, setModal] = useState(false) const router = useRouter() const [listGroup, setListGorup] = useState([]) - const [listPosition, setListPosition] = useState([]) - const [listUserRole, setListUserRole] = useState([]) - const [data, setData] = useState({ + const [listPosition, setListPosition] = useState([]) + const [listUserRole, setListUserRole] = useState([]) + const [data, setData] = useState({ id: "", nik: "", name: "", @@ -49,7 +30,6 @@ export default function EditMember({ id }: { id: string | undefined }) { idPosition: "", idUserRole: "", }) - const [listData, setListData] = useState() async function getAllGroup() { try { @@ -67,10 +47,9 @@ export default function EditMember({ id }: { id: string | undefined }) { async function getOneData() { try { - const res = await fetch(`${API_ADDRESS.apiGetOneUser}&userID=${id}`) - const data = await res.json() - setData(data) - getAllPosition(data?.idGroup) + const res = await funGetOneMember(id) + setData(res.data) + getAllPosition(res.data?.idGroup) } catch (error) { console.error(error) } @@ -78,9 +57,10 @@ export default function EditMember({ id }: { id: string | undefined }) { async function getAllPosition(val: any) { try { - const res = await fetch(`${API_ADDRESS.apiGetAllPosition}&groupId=${val}&active=true`) - const data = await res.json() - setListPosition(data) + const res = await funGetAllPosition( + "?active=true" + "&group=" + `${val}` + ); + setListPosition(res.data); } catch (error) { console.error(error) @@ -89,9 +69,8 @@ export default function EditMember({ id }: { id: string | undefined }) { async function getAllUserRole() { try { - const res = await fetch(`${API_ADDRESS.apiGetRoleUser}`) - const data = await res.json() - setListUserRole(data) + const res = await funGetRoleUser(); + setListUserRole(res.data) } catch (error) { console.error(error) } @@ -116,32 +95,22 @@ export default function EditMember({ id }: { id: string | undefined }) { 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 res = await funEditMember(id,{ + 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() + toast.success(res.message) + router.push(`/member?active=true`) - if (res.status == 200) { - toast.success(respon.message) - } else { - toast.error(respon.message) - } - router.push('/member') } catch (error) { toast.error('Error'); } diff --git a/src/module/user/member/ui/list_member.tsx b/src/module/user/member/ui/list_member.tsx index 04076e9..f0e1b48 100644 --- a/src/module/user/member/ui/list_member.tsx +++ b/src/module/user/member/ui/list_member.tsx @@ -1,40 +1,58 @@ -'use client' -import { WARNA } from '@/module/_global'; -import { Box, rem, Tabs, TextInput } from '@mantine/core'; -import React from 'react'; -import { HiMagnifyingGlass, HiMiniUser } from 'react-icons/hi2'; -import { IoMdCheckmarkCircleOutline } from 'react-icons/io'; -import { IoCloseCircleOutline } from 'react-icons/io5'; -import TabListMember from './tab_list_member'; +"use client"; +import { WARNA } from "@/module/_global"; +import { Box, rem, Tabs, TextInput } from "@mantine/core"; +import React from "react"; +import { HiMagnifyingGlass, HiMiniUser } from "react-icons/hi2"; +import { IoMdCheckmarkCircleOutline } from "react-icons/io"; +import { IoCloseCircleOutline } from "react-icons/io5"; +import TabListMember from "./tab_list_member"; +import { useRouter, useSearchParams } from "next/navigation"; export default function ListMember() { - const iconStyle = { width: rem(20), height: rem(20) }; + const iconStyle = { width: rem(20), height: rem(20) }; + const router = useRouter(); + const searchParams = useSearchParams(); + const status = searchParams.get("active"); - return ( - - - - }> - Aktif - - }> - Tidak Aktif - - - - - - - - - - {/* */} - - - - ); + return ( + + + + } + onClick={() => { + router.push("/member?active=true"); + }} + > + Aktif + + } + onClick={() => { + router.push("/member?active=false"); + }} + > + Tidak Aktif + + + + + + ); } diff --git a/src/module/user/member/ui/navbar_detail_member.tsx b/src/module/user/member/ui/navbar_detail_member.tsx index 324bab2..d1ac836 100644 --- a/src/module/user/member/ui/navbar_detail_member.tsx +++ b/src/module/user/member/ui/navbar_detail_member.tsx @@ -11,26 +11,16 @@ import { MdEmail } from "react-icons/md"; import { IoMaleFemale } from "react-icons/io5"; import { useShallowEffect } from "@mantine/hooks"; import Link from "next/link"; +import { funGetOneMember } from "../lib/api_member"; +import toast from "react-hot-toast"; +import { IListMember, IMember } from "../lib/type_member"; -interface IdMember { - id: string -} -interface DataMember { - id: string - name: string - nik: string - email: string - phone: string - gender: string - position: string - group: string - isActive: boolean | undefined -} - -export default function NavbarDetailMember({ id }: IdMember) { +export default function NavbarDetailMember({ id }: IMember) { const [isOpen, setOpen] = useState(false) - const [dataOne, setDataOne] = useState() + const [dataOne, setDataOne] = useState() + const [selectId, setSelectId] = useState(''); + const [active, setActive] = useState(false) useShallowEffect(() => { featchGetOne() @@ -39,11 +29,17 @@ export default function NavbarDetailMember({ id }: IdMember) { async function featchGetOne() { try { - const response = await fetch(API_ADDRESS.apiGetOneUser + `&userID=${id}`) - const data = await response.json() - setDataOne(data) + const respose = await funGetOneMember(id) + if (respose.success) { + setDataOne(respose.data) + setActive(respose.data?.isActive) + setSelectId(respose.data?.id) + } else { + toast.error(respose.message) + } } catch (error) { console.error(error) + toast.error("Gagal mendapatkan detail user, coba lagi nanti"); } } @@ -103,7 +99,7 @@ export default function NavbarDetailMember({ id }: IdMember) { setOpen(false)}> - setOpen(false)} /> + setOpen(false)} /> diff --git a/src/module/user/member/ui/tab_list_member.tsx b/src/module/user/member/ui/tab_list_member.tsx index 50cce9d..60cca68 100644 --- a/src/module/user/member/ui/tab_list_member.tsx +++ b/src/module/user/member/ui/tab_list_member.tsx @@ -5,35 +5,25 @@ import { useShallowEffect } from "@mantine/hooks" import { useRouter, useSearchParams } from "next/navigation" import { useEffect, useState } from "react" import { HiMagnifyingGlass, HiMiniUser } from "react-icons/hi2" +import { IListMember } from "../lib/type_member" +import { funGetAllmember } from "../lib/api_member" -type dataMember = { - id: string, - isActive: boolean - nik: string, - name: string, - phone: string, - email: string, - gender: string, - group: string, - position: string, -} -export default function TabListMember({ status }: { status: boolean }) { +export default function TabListMember() { const router = useRouter() const [loading, setLoading] = useState(true); - const [dataMember, setDataMember] = useState([]) + const [dataMember, setDataMember] = useState([]) const searchParams = useSearchParams() const [searchQuery, setSearchQuery] = useState('') const group = searchParams.get('group') + const status = searchParams.get('active') async function getAllUser() { try { setLoading(true) - const res = await fetch(`${API_ADDRESS.apiGetAllUser}&active=${status}&groupId=${group}&name=${searchQuery}`) - const data = await res.json() - - setDataMember(data) + const res = await funGetAllmember('?active=' + status + '&group=' + group + '&search=' + searchQuery) + setDataMember(res.data) } catch (error) { console.error(error) throw new Error("Error") diff --git a/src/module/user/member/ui/view_create_member.tsx b/src/module/user/member/ui/view_create_member.tsx deleted file mode 100644 index 6d938c9..0000000 --- a/src/module/user/member/ui/view_create_member.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import { Box } from "@mantine/core"; -import NavbarCreateMember from "./navbar_create_member"; -import { LayoutNavbarNew, WARNA } from "@/module/_global"; -import CreateMember from "./create_member"; - -export default function ViewCreateMember() { - return ( - - {/* */} - } /> - - - ) -} \ No newline at end of file diff --git a/src/module/user/member/ui/view_detail_member.tsx b/src/module/user/member/ui/view_detail_member.tsx deleted file mode 100644 index 0e4b70e..0000000 --- a/src/module/user/member/ui/view_detail_member.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import { Box, Group, Text } from "@mantine/core"; -import { FaSquarePhone } from "react-icons/fa6"; -import { MdEmail } from "react-icons/md"; -import { RiIdCardFill } from "react-icons/ri"; -import NavbarDetailMember from "./navbar_detail_member"; -import { IoMaleFemale } from "react-icons/io5"; - -export default function ViewDetailMember({ data }: { data: string }) { - return ( - - - - ) -} \ No newline at end of file diff --git a/src/module/user/member/ui/view_edit_member.tsx b/src/module/user/member/ui/view_edit_member.tsx deleted file mode 100644 index 82d8edd..0000000 --- a/src/module/user/member/ui/view_edit_member.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import { LayoutNavbarHome, LayoutNavbarNew, WARNA } from "@/module/_global"; -import { Box, Stack, TextInput, Button } from "@mantine/core"; -import { HiUser } from "react-icons/hi2"; -import NavbarEditMember from "./navbar_edit_member"; -import EditMember from "./edit_member"; - -export default function ViewEditMember({ data }: { data: string }) { - return ( - - } /> - - - ) -} \ No newline at end of file diff --git a/src/module/user/member/ui/view_list_member.tsx b/src/module/user/member/ui/view_list_member.tsx deleted file mode 100644 index bab8f16..0000000 --- a/src/module/user/member/ui/view_list_member.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import { Box } from "@mantine/core"; -import NavbarListMember from "./navbar_list_member"; -import ListMember from "./list_member"; - -export default function ViewListMember() { - return ( - - - - - ) -} \ No newline at end of file