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 (
+
+
+
+
+
+
+
+
- )
-}
\ 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