From f83fae160c2266fc8af22bc883516482deb5c89e Mon Sep 17 00:00:00 2001 From: amel Date: Thu, 8 Aug 2024 17:20:08 +0800 Subject: [PATCH] upd: api group Deskripsi: - pengaplikasian api group metode terbaru pada beberapa fitur No Issues --- src/app/api/group/get/route.ts | 6 -- src/module/_global/view/view_filter.tsx | 49 +++++++------ .../components/create_division.tsx | 11 +-- src/module/group/api/api_group.ts | 14 ---- src/module/group/api/api_index.ts | 15 ---- src/module/group/api/get/getOneGroup.ts | 33 --------- src/module/group/api/get/listGroup.ts | 33 --------- src/module/group/index.ts | 2 - src/module/group/ui/edit_drawer_group.tsx | 14 ++-- .../component/ui/drawer_detail_position.tsx | 19 +++-- .../component/ui/drawer_list_position.tsx | 69 ++++++++++--------- .../user/member/component/create_member.tsx | 18 ++--- .../user/member/component/edit_member.tsx | 18 ++--- 13 files changed, 105 insertions(+), 196 deletions(-) delete mode 100644 src/app/api/group/get/route.ts delete mode 100644 src/module/group/api/api_group.ts delete mode 100644 src/module/group/api/api_index.ts delete mode 100644 src/module/group/api/get/getOneGroup.ts delete mode 100644 src/module/group/api/get/listGroup.ts diff --git a/src/app/api/group/get/route.ts b/src/app/api/group/get/route.ts deleted file mode 100644 index d491dc6..0000000 --- a/src/app/api/group/get/route.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { apiGroup } from "@/module/group"; -import { NextRequest } from "next/server"; - -export async function GET(req: NextRequest) { - return apiGroup(req, "GET") -} \ No newline at end of file diff --git a/src/module/_global/view/view_filter.tsx b/src/module/_global/view/view_filter.tsx index ad1392e..566d41d 100644 --- a/src/module/_global/view/view_filter.tsx +++ b/src/module/_global/view/view_filter.tsx @@ -5,42 +5,41 @@ import { FaCheck } from "react-icons/fa6"; import { WARNA } from "../fun/WARNA"; import LayoutNavbarNew from "../layout/layout_navbar_new"; import { useRouter } from "next/navigation"; -import { API_ADDRESS } from "../bin/api_address"; +import { funGetAllGroup, IDataGroup } from "@/module/group"; import { useShallowEffect } from "@mantine/hooks"; +import toast from "react-hot-toast"; -interface dataGroup { - id: string; - name: string; -} - -export default function ViewFilter({linkFilter}: {linkFilter: string}) { +export default function ViewFilter({ linkFilter }: { linkFilter: string }) { const [selectedFilter, setSelectedFilter] = useState(null); - const [checked, setChecked] = useState([]); + const [checked, setChecked] = useState([]); const [searchParams, setSearchParams] = useState({ groupId: '' }); const handleFilterClick = (id: string) => { - setSelectedFilter(id); + setSelectedFilter(id); }; - + async function getAllGroupFilter() { - try { - const response = await fetch(`${API_ADDRESS.apiGetAllGroup}&active=true&groupId=${searchParams.groupId}`); - const data = await response.json(); - console.log("mana data", response); - setChecked(data); - } catch (error) { - console.error(error); - } + try { + const response = await funGetAllGroup('?active=true') + if (response.success) { + setChecked(response.data); + } else { + toast.error(response.message); + } + } catch (error) { + console.error(error); + toast.error("Gagal mendapatkan grup, coba lagi nanti"); + } } - + useEffect(() => { - if (selectedFilter) { - setSearchParams({ groupId: selectedFilter }); - } + if (selectedFilter) { + setSearchParams({ groupId: selectedFilter }); + } }, [selectedFilter]); - - useEffect(() => { - getAllGroupFilter(); + + useShallowEffect(() => { + getAllGroupFilter(); }, [searchParams.groupId]); const router = useRouter() diff --git a/src/module/division_new/components/create_division.tsx b/src/module/division_new/components/create_division.tsx index 2d89705..865b31a 100644 --- a/src/module/division_new/components/create_division.tsx +++ b/src/module/division_new/components/create_division.tsx @@ -24,7 +24,7 @@ import CreateAdminDivision from "./create_admin_division"; import CreateUsers from "./create_users"; import NavbarCreateUsers from "./ui/navbar_create_users"; import NavbarAdminDivision from "./ui/navbar_admin_division"; -import { IDataGroup } from "@/module/group"; +import { funGetAllGroup, IDataGroup } from "@/module/group"; export default function CreateDivision() { const router = useRouter(); @@ -40,9 +40,12 @@ export default function CreateDivision() { }); async function loadData() { - const loadGroup = await fetch(API_ADDRESS.apiGetAllGroup + '&active=true'); - const dataGroup = await loadGroup.json(); - setDataGroup(dataGroup); + const loadGroup = await funGetAllGroup('?active=true') + if (loadGroup.success) { + setDataGroup(loadGroup.data); + } else { + toast.error(loadGroup.message); + } const loadUser = await funGetUserByCookies(); setRoleUser(loadUser.idUserRole) diff --git a/src/module/group/api/api_group.ts b/src/module/group/api/api_group.ts deleted file mode 100644 index 4693ccf..0000000 --- a/src/module/group/api/api_group.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { NextRequest } from "next/server"; -import { API_INDEX_GROUP } from "./api_index"; - -type Method = "GET" | "POST"; -export async function apiGroup(req: NextRequest, method: Method) { - const { searchParams } = new URL(req.url); - const path = searchParams.get("path"); - const act = API_INDEX_GROUP.find((v) => v.path === path && v.method === method); - if (!path) - return Response.json({ success: false, message: "page not found" }, { status: 404 }); - if (act) return act.bin(req); - - return Response.json({ success: false, message: "404" }); -} \ No newline at end of file diff --git a/src/module/group/api/api_index.ts b/src/module/group/api/api_index.ts deleted file mode 100644 index bfe2cf1..0000000 --- a/src/module/group/api/api_index.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { getOneGroup } from "./get/getOneGroup"; -import { listGroups } from "./get/listGroup"; - -export const API_INDEX_GROUP = [ - { - path: "get-all-group", - method: "GET", - bin: listGroups, - }, - { - path: "get-one-group", - method: "GET", - bin: getOneGroup, - }, -]; diff --git a/src/module/group/api/get/getOneGroup.ts b/src/module/group/api/get/getOneGroup.ts deleted file mode 100644 index 1a4aca9..0000000 --- a/src/module/group/api/get/getOneGroup.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { prisma } from "@/module/_global"; -import { NextRequest } from "next/server"; - -export async function getOneGroup(req: NextRequest): Promise { - try { - const searchParams = req.nextUrl.searchParams - const groupId = searchParams.get('groupId'); - const getOne = await prisma.group.findUnique({ - where: { - id: String(groupId), - }, - select: { - id: true, - name: true, - }, - }); - - if (!getOne) { - return Response.json( - { message: "Grup tidak ditemukan", success: false }, - { status: 404 } - ); - } - - return Response.json(getOne); - } catch (error) { - console.error(error); - return Response.json( - { message: "Internal Server Error", success: false }, - { status: 500 } - ); - } -} diff --git a/src/module/group/api/get/listGroup.ts b/src/module/group/api/get/listGroup.ts deleted file mode 100644 index 29fa3ca..0000000 --- a/src/module/group/api/get/listGroup.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { prisma } from "@/module/_global"; -import { funGetUserByCookies } from "@/module/auth"; -import { NextRequest } from "next/server"; - -export async function listGroups(req: NextRequest): Promise { - try { - const user = await funGetUserByCookies() - const searchParams = req.nextUrl.searchParams - const villaId = user.idVillage - const active = searchParams.get('active'); - const name = searchParams.get('name'); - const groups = await prisma.group.findMany({ - where: { - isActive: (active == "true" ? true : false), - idVillage: String(villaId), - name: { - contains: (name == undefined || name == null) ? "" : name, - mode: "insensitive" - } - }, - select: { - id: true, - name: true, - isActive: true - }, - }); - - return Response.json(groups); - } catch (error) { - console.error(error); - return Response.json({ success: false, message: "Internal Server Error" }, { status: 500 }); - } -} diff --git a/src/module/group/index.ts b/src/module/group/index.ts index a2aee44..5cb2606 100644 --- a/src/module/group/index.ts +++ b/src/module/group/index.ts @@ -1,10 +1,8 @@ import { IDataGroup, IFormGroup, IStatusGroup } from './lib/type_group'; -import { apiGroup } from "./api/api_group"; import { funCreateGroup, funEditGroup, funEditStatusGroup, funGetAllGroup, funGetGroupById } from './lib/api_group'; import NavbarGroup from './ui/navbar_group'; import TabListGroup from './ui/tab_list_group'; -export { apiGroup }; export type { IDataGroup, IFormGroup, IStatusGroup } export { funGetAllGroup, funGetGroupById, funCreateGroup, funEditStatusGroup, funEditGroup } export { NavbarGroup } diff --git a/src/module/group/ui/edit_drawer_group.tsx b/src/module/group/ui/edit_drawer_group.tsx index a68870f..a0cd013 100644 --- a/src/module/group/ui/edit_drawer_group.tsx +++ b/src/module/group/ui/edit_drawer_group.tsx @@ -17,7 +17,7 @@ import React, { useEffect, useState } from "react"; import toast from "react-hot-toast"; import { FaPencil, FaToggleOff } from "react-icons/fa6"; import { IoAddCircle, IoCloseCircleOutline } from "react-icons/io5"; -import { funEditGroup, funEditStatusGroup } from "../lib/api_group"; +import { funEditGroup, funEditStatusGroup, funGetGroupById } from "../lib/api_group"; export default function EditDrawerGroup({ onUpdated, id, isActive, }: { onUpdated: (val: boolean) => void; id: string; isActive: boolean; }) { const [openDrawerGroup, setOpenDrawerGroup] = useState(false); @@ -27,11 +27,17 @@ export default function EditDrawerGroup({ onUpdated, id, isActive, }: { onUpdate async function getOneGroup() { try { - const res = await fetch(`${API_ADDRESS.apiGetOneGroup}&groupId=${id}`); - const data = await res.json(); - setName(data.name); + const res = await funGetGroupById(id); + console.log("amalia", res) + if (res.success) { + setName(res.data.name); + } else { + toast.error(res.message); + } + } catch (error) { console.error(error); + toast.error("Gagal mendapatkan grup, coba lagi nanti"); } } diff --git a/src/module/position/component/ui/drawer_detail_position.tsx b/src/module/position/component/ui/drawer_detail_position.tsx index fb4d0d9..f8331a9 100644 --- a/src/module/position/component/ui/drawer_detail_position.tsx +++ b/src/module/position/component/ui/drawer_detail_position.tsx @@ -1,17 +1,12 @@ import { API_ADDRESS, LayoutDrawer, WARNA } from "@/module/_global" import LayoutModal from "@/module/_global/layout/layout_modal" +import { funGetAllGroup, IDataGroup } from "@/module/group" import { Box, Stack, SimpleGrid, Flex, Text, Select, TextInput, Button } from "@mantine/core" import { useShallowEffect } from "@mantine/hooks" import { useEffect, useState } from "react" import toast from "react-hot-toast" import { FaPencil, FaToggleOff } from "react-icons/fa6" -type dataGroup = { - id: string; - name: string; - idGroup: string -}; - export default function DrawerDetailPosition({ onUpdated, id, isActive }: { onUpdated: (val: boolean) => void, id: string | null, isActive: boolean | null; }) { @@ -22,7 +17,7 @@ export default function DrawerDetailPosition({ onUpdated, id, isActive }: { name: "", idGroup: "" }) - const [listGroup, setListGorup] = useState([]) + const [listGroup, setListGorup] = useState([]) function onCLose() { onUpdated(true) @@ -31,11 +26,15 @@ export default function DrawerDetailPosition({ onUpdated, id, isActive }: { async function getAllGroup() { try { - const res = await fetch(`${API_ADDRESS.apiGetAllGroup}&villageId=121212&active=true`) - const data = await res.json() - setListGorup(data) + 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"); } } diff --git a/src/module/position/component/ui/drawer_list_position.tsx b/src/module/position/component/ui/drawer_list_position.tsx index c0f7549..55972d9 100644 --- a/src/module/position/component/ui/drawer_list_position.tsx +++ b/src/module/position/component/ui/drawer_list_position.tsx @@ -1,4 +1,5 @@ import { WARNA, LayoutDrawer, API_ADDRESS } from "@/module/_global"; +import { funGetAllGroup, IDataGroup } from "@/module/group"; import { Box, Stack, SimpleGrid, Flex, TextInput, Button, Text, Select } from "@mantine/core"; import { useShallowEffect } from "@mantine/hooks"; import { useRouter } from "next/navigation"; @@ -7,15 +8,11 @@ import toast from "react-hot-toast"; import { IoAddCircle } from "react-icons/io5"; import { RiFilter2Line } from "react-icons/ri"; -type dataGroup = { - id: string; - name: string; -}; export default function DrawerListPosition({ onCreated }: { onCreated: (val: boolean) => void }) { const [openDrawerGroup, setOpenDrawerGroup] = useState(false) const router = useRouter() - const [listGroup, setListGorup] = useState([]) + const [listGroup, setListGorup] = useState([]) const [listData, setListData] = useState({ name: "", @@ -24,11 +21,15 @@ export default function DrawerListPosition({ onCreated }: { onCreated: (val: boo async function getAllGroup() { try { - const res = await fetch(`${API_ADDRESS.apiGetAllGroup}&villageId=121212&active=true`) - const data = await res.json() - setListGorup(data) + 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"); } } @@ -39,33 +40,33 @@ export default function DrawerListPosition({ onCreated }: { onCreated: (val: boo async function onSubmit() { try { - const res = await fetch(API_ADDRESS.apiCreatePosition, { - method: 'POST', - headers: { - 'Content-Type': 'application/json' - }, - body: JSON.stringify({ - name: listData.name, - idGroup: listData.idGroup - }) - }) - - if (!res.ok) { - const errorData = await res.json(); - if (errorData.message === "Position sudah ada") { - toast.error('Gagal! Position sudah ada'); - } else { - toast.error('Error'); - } - } else { - setOpenDrawerGroup(false) - toast.success('Sukses! data tersimpan') - } - onCreated(true) + const res = await fetch(API_ADDRESS.apiCreatePosition, { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ + name: listData.name, + idGroup: listData.idGroup + }) + }) + + if (!res.ok) { + const errorData = await res.json(); + if (errorData.message === "Position sudah ada") { + toast.error('Gagal! Position sudah ada'); + } else { + toast.error('Error'); + } + } else { + setOpenDrawerGroup(false) + toast.success('Sukses! data tersimpan') + } + onCreated(true) } catch (error) { - toast.error('Error') + toast.error('Error') } - } + } return ( @@ -135,7 +136,7 @@ export default function DrawerListPosition({ onCreated }: { onCreated: (val: boo onChange={(event: any) => setListData({ ...listData, name: event.target.value - })} + })} radius={10} placeholder="Nama Jabatan" /> diff --git a/src/module/user/member/component/create_member.tsx b/src/module/user/member/component/create_member.tsx index 148eda3..b096067 100644 --- a/src/module/user/member/component/create_member.tsx +++ b/src/module/user/member/component/create_member.tsx @@ -1,16 +1,14 @@ 'use client' import { API_ADDRESS, WARNA } from "@/module/_global"; import LayoutModal from "@/module/_global/layout/layout_modal"; +import { funGetAllGroup, IDataGroup } from "@/module/group"; import { Box, Button, Select, Stack, TextInput } from "@mantine/core"; import { useRouter } from "next/navigation"; import { useEffect, useState } from "react"; import toast from "react-hot-toast"; import { HiUser } from "react-icons/hi2"; -type dataGroup = { - id: string; - name: string; -}; + type dataPosition = { id: string; name: string; @@ -24,7 +22,7 @@ type dataROleUser = { export default function CreateMember() { const router = useRouter() const [isModal, setModal] = useState(false) - const [listGroup, setListGorup] = useState([]) + const [listGroup, setListGorup] = useState([]) const [listPosition, setListPosition] = useState([]) const [listUserRole, setListUserRole] = useState([]) @@ -42,11 +40,15 @@ export default function CreateMember() { async function getAllGroup() { try { - const res = await fetch(`${API_ADDRESS.apiGetAllGroup}&villageId=desa1&active=true`) - const data = await res.json() - setListGorup(data) + 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"); } } diff --git a/src/module/user/member/component/edit_member.tsx b/src/module/user/member/component/edit_member.tsx index f899959..6993b44 100644 --- a/src/module/user/member/component/edit_member.tsx +++ b/src/module/user/member/component/edit_member.tsx @@ -1,6 +1,7 @@ 'use client' import { API_ADDRESS, WARNA } from "@/module/_global"; import LayoutModal from "@/module/_global/layout/layout_modal"; +import { funGetAllGroup, IDataGroup } from "@/module/group"; import { Box, Button, Select, Stack, TextInput } from "@mantine/core"; import { useShallowEffect } from "@mantine/hooks"; import { useRouter } from "next/navigation"; @@ -20,10 +21,7 @@ type dataMember = { idUserRole: string; } -type dataGroup = { - id: string; - name: string; -}; + type dataPosition = { id: string; name: string; @@ -37,7 +35,7 @@ type dataROleUser = { export default function EditMember({ id }: { id: string | undefined }) { const [isModal, setModal] = useState(false) const router = useRouter() - const [listGroup, setListGorup] = useState([]) + const [listGroup, setListGorup] = useState([]) const [listPosition, setListPosition] = useState([]) const [listUserRole, setListUserRole] = useState([]) const [data, setData] = useState({ @@ -55,11 +53,15 @@ export default function EditMember({ id }: { id: string | undefined }) { async function getAllGroup() { try { - const res = await fetch(`${API_ADDRESS.apiGetAllGroup}&villageId=desa1&active=true`) - const data = await res.json() - setListGorup(data) + 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"); } }