diff --git a/src/app/(application)/member/page.tsx b/src/app/(application)/member/page.tsx index 3bdaf36..9343340 100644 --- a/src/app/(application)/member/page.tsx +++ b/src/app/(application)/member/page.tsx @@ -3,7 +3,7 @@ import { ViewListMember } from "@/module/user/member"; function Page({ searchParams }: { searchParams: { page: string } }) { if (searchParams.page == "filter") - return + return return ( diff --git a/src/app/(application)/position/page.tsx b/src/app/(application)/position/page.tsx index c377930..fc42b06 100644 --- a/src/app/(application)/position/page.tsx +++ b/src/app/(application)/position/page.tsx @@ -4,7 +4,7 @@ import React from 'react'; function Page({ searchParams }: { searchParams: { page: string } }) { if (searchParams.page == "filter") - return + return return ( diff --git a/src/module/_global/view/view_filter.tsx b/src/module/_global/view/view_filter.tsx index 9bf3048..ad1392e 100644 --- a/src/module/_global/view/view_filter.tsx +++ b/src/module/_global/view/view_filter.tsx @@ -1,43 +1,47 @@ 'use client' import { Box, Group, Divider, Button, Text } from "@mantine/core"; -import { useState } from "react"; +import { useEffect, useState } from "react"; 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 { useShallowEffect } from "@mantine/hooks"; -const dataFilter = [ - { - id: 1, - name: 'Dinas' - }, - { - id: 2, - name: 'Adat' - }, - { - id: 3, - name: 'LPD' - }, - { - id: 4, - name: 'Karang Taruna' - }, - { - id: 5, - name: 'BPD' - }, - { - id: 6, - name: 'LPM' - }, -] -export default function ViewFilter() { +interface dataGroup { + id: string; + name: string; +} + +export default function ViewFilter({linkFilter}: {linkFilter: string}) { const [selectedFilter, setSelectedFilter] = useState(null); + const [checked, setChecked] = useState([]); + const [searchParams, setSearchParams] = useState({ groupId: '' }); - const handleFilterClick = (filterName: string) => { - setSelectedFilter(filterName); + const handleFilterClick = (id: string) => { + 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); + } + } + + useEffect(() => { + if (selectedFilter) { + setSearchParams({ groupId: selectedFilter }); + } + }, [selectedFilter]); + + useEffect(() => { + getAllGroupFilter(); + }, [searchParams.groupId]); const router = useRouter() @@ -45,18 +49,18 @@ export default function ViewFilter() { - {dataFilter.map((filter) => ( + {checked.map((filter) => ( handleFilterClick(filter.name)} + onClick={() => handleFilterClick(filter.id)} > - + {filter.name} - {selectedFilter === filter.name && } + {selectedFilter === filter.id && } @@ -66,7 +70,9 @@ export default function ViewFilter() { radius={100} size="lg" color={WARNA.biruTua} - onClick={() => { router.back() }} + onClick={() => { + router.push(`/${linkFilter}?group=` + selectedFilter) + }} > Terapkan diff --git a/src/module/group/components/list_group_active.tsx b/src/module/group/components/list_group_active.tsx index 53046e2..01f053e 100644 --- a/src/module/group/components/list_group_active.tsx +++ b/src/module/group/components/list_group_active.tsx @@ -50,7 +50,7 @@ export default function ListGroupActive({ status }: { status: boolean }) { } }; - useEffect(() => { + useShallowEffect(() => { getData(); }, [status]); diff --git a/src/module/group/components/ui/edit_drawer_group.tsx b/src/module/group/components/ui/edit_drawer_group.tsx index 049ea01..104a0c8 100644 --- a/src/module/group/components/ui/edit_drawer_group.tsx +++ b/src/module/group/components/ui/edit_drawer_group.tsx @@ -12,6 +12,7 @@ import { Text, TextInput, } from "@mantine/core"; +import { useShallowEffect } from "@mantine/hooks"; import React, { useEffect, useState } from "react"; import toast from "react-hot-toast"; import { FaPencil, FaToggleOff } from "react-icons/fa6"; @@ -42,7 +43,7 @@ export default function EditDrawerGroup({ - useEffect(() => { + useShallowEffect(() => { getOneGroup(); }, []); @@ -109,7 +110,7 @@ export default function EditDrawerGroup({ - Non Aktifkan + {isActive == false ? "Aktifkan" : "Non Aktifkan"} void, id: string | null, +export default function DrawerDetailPosition({ onUpdated, id, isActive }: { + onUpdated: (val: boolean) => void, id: string | null, isActive: boolean | null; }) { const [openDrawerGroup, setOpenDrawerGroup] = useState(false) const [isModal, setModal] = useState(false) @@ -28,12 +29,6 @@ export default function DrawerDetailPosition({ onUpdated, id }: { setOpenDrawerGroup(false) } - function onTrue(val: boolean) { - if (val) { - onUpdated(true) - } - setModal(false) - } async function getAllGroup() { try { const res = await fetch(`${API_ADDRESS.apiGetAllGroup}&villageId=121212&active=true`) @@ -65,7 +60,7 @@ export default function DrawerDetailPosition({ onUpdated, id }: { body: JSON.stringify({ id: data.id, name: data.name, - idGroup: data.idGroup + idGroup: data.idGroup, }), }) @@ -84,7 +79,7 @@ export default function DrawerDetailPosition({ onUpdated, id }: { } } - useEffect(() => { + useShallowEffect(() => { getAllGroup() getOneData() }, []) @@ -98,7 +93,8 @@ export default function DrawerDetailPosition({ onUpdated, id }: { "Content-Type": "application/json", }, body: JSON.stringify({ - data + id, + isActive, }), }); @@ -132,7 +128,7 @@ export default function DrawerDetailPosition({ onUpdated, id }: { - Non Aktifkan + {isActive == false ? "Aktifkan" : "Non Aktifkan"} diff --git a/src/module/position/component/ui/drawer_list_position.tsx b/src/module/position/component/ui/drawer_list_position.tsx index 95ce035..c0f7549 100644 --- a/src/module/position/component/ui/drawer_list_position.tsx +++ b/src/module/position/component/ui/drawer_list_position.tsx @@ -1,5 +1,6 @@ import { WARNA, LayoutDrawer, API_ADDRESS } from "@/module/_global"; import { Box, Stack, SimpleGrid, Flex, TextInput, Button, Text, Select } from "@mantine/core"; +import { useShallowEffect } from "@mantine/hooks"; import { useRouter } from "next/navigation"; import { useEffect, useState } from "react"; import toast from "react-hot-toast"; @@ -31,7 +32,7 @@ export default function DrawerListPosition({ onCreated }: { onCreated: (val: boo } } - useEffect(() => { + useShallowEffect(() => { getAllGroup() }, []) diff --git a/src/module/position/component/ui/list_position_active.tsx b/src/module/position/component/ui/list_position_active.tsx index 4a657db..6bf07f7 100644 --- a/src/module/position/component/ui/list_position_active.tsx +++ b/src/module/position/component/ui/list_position_active.tsx @@ -7,6 +7,7 @@ import DrawerDetailPosition from "./drawer_detail_position"; import toast from "react-hot-toast"; import _ from "lodash"; import { useShallowEffect } from "@mantine/hooks"; +import { useSearchParams } from "next/navigation"; type dataPosition = { name: string; @@ -23,12 +24,14 @@ export default function ListPositionActive({ status }: { status: boolean }) { const [loading, setLoading] = useState(true); const [selectId, setSelectId] = useState(null); const [active, setActive] = useState(null) + const searchParams = useSearchParams() + const group = searchParams.get('group') async function getAllPosition() { try { setDataPosition([]); setLoading(true) - const res = await fetch(`${API_ADDRESS.apiGetAllPosition}&active=` + status); + const res = await fetch(`${API_ADDRESS.apiGetAllPosition}&active=${status}&groupId=${group}`); const data = await res.json(); setDataPosition(data); setLoading(false); @@ -41,7 +44,7 @@ export default function ListPositionActive({ status }: { status: boolean }) { useShallowEffect(() => { getAllPosition(); - }, [status]) + }, [status, group]) return ( @@ -111,6 +114,7 @@ export default function ListPositionActive({ status }: { status: boolean }) { > { setOpenDrawer(false); }} diff --git a/src/module/user/api/get/getAllUser.ts b/src/module/user/api/get/getAllUser.ts index 4d9a7c2..82733f7 100644 --- a/src/module/user/api/get/getAllUser.ts +++ b/src/module/user/api/get/getAllUser.ts @@ -7,11 +7,11 @@ export async function getAllUser(req: NextRequest) { try { let fixGroup const searchParams = req.nextUrl.searchParams; - const idGroup = searchParams.get("groupID"); + const idGroup = searchParams.get("groupId"); const active = searchParams.get("active"); const user = await funGetUserByCookies(); - if (idGroup == null || idGroup == undefined) { + if (idGroup == "null" || idGroup == undefined) { fixGroup = user.idGroup } else { fixGroup = idGroup diff --git a/src/module/user/api/get/getOneUser.ts b/src/module/user/api/get/getOneUser.ts index 2ab5788..03abcfb 100644 --- a/src/module/user/api/get/getOneUser.ts +++ b/src/module/user/api/get/getOneUser.ts @@ -19,6 +19,7 @@ export async function getOneUser(req: NextRequest) { email: true, gender: true, idGroup: true, + isActive: true, idPosition: true, UserRole: { select: { diff --git a/src/module/user/member/component/ui/drawer_detail_member.tsx b/src/module/user/member/component/ui/drawer_detail_member.tsx index 35cdb31..7f035b2 100644 --- a/src/module/user/member/component/ui/drawer_detail_member.tsx +++ b/src/module/user/member/component/ui/drawer_detail_member.tsx @@ -2,39 +2,42 @@ import { API_ADDRESS, WARNA } from "@/module/_global"; import LayoutModal from "@/module/_global/layout/layout_modal"; import { Box, Flex, SimpleGrid, Stack, Text } from "@mantine/core"; +import { useShallowEffect } from "@mantine/hooks"; import { useRouter } from "next/navigation"; import { useState } from "react"; import toast from "react-hot-toast"; import { FaPencil, FaToggleOff } from "react-icons/fa6"; import { ImUserCheck } from "react-icons/im"; -export default function DrawerDetailMember({ onDeleted, id }: { onDeleted: (val: boolean) => void, id: string | undefined }) { +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) + async function nonActive(val: boolean) { - // try { - // if (val) { - // const res = await fetch(API_ADDRESS.apiDeleteUser, { - // method: 'POST', - // headers: { - // 'Content-Type': 'application/json', - // }, - // body: JSON.stringify({ id: id}), - // }) - // 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"); - // } + 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"); + } } return ( @@ -53,7 +56,7 @@ export default function DrawerDetailMember({ onDeleted, id }: { onDeleted: (val: - Non Aktifkan + {status === false ? "Aktifkan" : "Non Aktifkan"} diff --git a/src/module/user/member/component/ui/navbar_detail_member.tsx b/src/module/user/member/component/ui/navbar_detail_member.tsx index 2222cc7..324bab2 100644 --- a/src/module/user/member/component/ui/navbar_detail_member.tsx +++ b/src/module/user/member/component/ui/navbar_detail_member.tsx @@ -25,6 +25,7 @@ interface DataMember { gender: string position: string group: string + isActive: boolean | undefined } export default function NavbarDetailMember({ id }: IdMember) { @@ -102,7 +103,7 @@ export default function NavbarDetailMember({ id }: IdMember) { setOpen(false)}> - setOpen(false)} /> + setOpen(false)} /> diff --git a/src/module/user/member/component/ui/tab_list_member.tsx b/src/module/user/member/component/ui/tab_list_member.tsx index e6f8687..e35d2bc 100644 --- a/src/module/user/member/component/ui/tab_list_member.tsx +++ b/src/module/user/member/component/ui/tab_list_member.tsx @@ -2,7 +2,7 @@ import { API_ADDRESS, WARNA } from "@/module/_global" import { Box, Group, ActionIcon, Text } from "@mantine/core" import { useShallowEffect } from "@mantine/hooks" -import { useRouter } from "next/navigation" +import { useRouter, useSearchParams } from "next/navigation" import { useEffect, useState } from "react" import { HiMiniUser } from "react-icons/hi2" @@ -22,12 +22,14 @@ export default function TabListMember({ status }: { status: boolean }) { const router = useRouter() const [loading, setLoading] = useState(true); const [dataMember, setDataMember] = useState([]) + const searchParams = useSearchParams() + const group = searchParams.get('group') async function getAllUser() { try { setLoading(true) - const res = await fetch(API_ADDRESS.apiGetAllUser + '&active=' + status ) + const res = await fetch(`${API_ADDRESS.apiGetAllUser}&active=${status}&groupId=${group}` ) const data = await res.json() setDataMember(data)