diff --git a/src/app/(application)/project/page.tsx b/src/app/(application)/project/page.tsx index f4bccb4..7eabf7c 100644 --- a/src/app/(application)/project/page.tsx +++ b/src/app/(application)/project/page.tsx @@ -1,10 +1,14 @@ -import { ViewFilter } from '@/module/_global'; +import { ViewFilter, ViewFilterData } from '@/module/_global'; import { TabProject } from '@/module/project'; import React from 'react'; function Page({ searchParams }: { searchParams: { page: string } }) { if (searchParams.page == 'filter') return + + if (searchParams.page == 'filter-data') + return + return ( ); diff --git a/src/app/api/division/route.ts b/src/app/api/division/route.ts index 9e4e5d6..5bee3c3 100644 --- a/src/app/api/division/route.ts +++ b/src/app/api/division/route.ts @@ -43,7 +43,7 @@ export async function GET(request: Request) { } - // JIKA ROLE = USER ATAU COADMIN DAN KATEGORI = MINE (DIVISI SAYA) + // JIKA ROLE = USER ATAU COADMIN DAN KATEGORI != SEMUA (DIVISI SAYA) if (roleUser != "supadmin" && roleUser != "cosupadmin" && roleUser != "admin") { if (kategori != "semua") { kondisi = { diff --git a/src/app/api/project/route.ts b/src/app/api/project/route.ts index a0632ed..1c7a7dd 100644 --- a/src/app/api/project/route.ts +++ b/src/app/api/project/route.ts @@ -20,6 +20,7 @@ export async function GET(request: Request) { const status = searchParams.get('status'); const idGroup = searchParams.get("group"); const page = searchParams.get('page'); + const kategori = searchParams.get('cat'); const dataSkip = Number(page) * 10 - 10; const villageId = user.idVillage const userId = user.id @@ -41,6 +42,8 @@ export async function GET(request: Request) { return NextResponse.json({ success: false, message: "Gagal mendapatkan data kegiatan, data tidak ditemukan", }, { status: 404 }); } + + // JIKA (ROLE BUKAN USER DAN COADMIN) ATAU SEMUA ROLE DG KATEGORI == SEMUA let kondisi: any = { isActive: true, idVillage: String(villageId), @@ -52,19 +55,23 @@ export async function GET(request: Request) { status: (status == "0" || status == "1" || status == "2" || status == "3") ? Number(status) : 0 } + + // JIKA ROLE = USER ATAU COADMIN DAN KATEGORI != SEMUA (KEGIATAN SAYA) if (roleUser != "supadmin" && roleUser != "cosupadmin" && roleUser != "admin") { - kondisi = { - isActive: true, - idVillage: String(villageId), - idGroup: grup, - title: { - contains: (name == undefined || name == "null") ? "" : name, - mode: "insensitive" - }, - status: (status == "0" || status == "1" || status == "2" || status == "3") ? Number(status) : 0, - ProjectMember: { - some: { - idUser: String(userId) + if (kategori != "semua") { + kondisi = { + isActive: true, + idVillage: String(villageId), + idGroup: grup, + title: { + contains: (name == undefined || name == "null") ? "" : name, + mode: "insensitive" + }, + status: (status == "0" || status == "1" || status == "2" || status == "3") ? Number(status) : 0, + ProjectMember: { + some: { + idUser: String(userId) + } } } } diff --git a/src/module/_global/index.ts b/src/module/_global/index.ts index bedf570..a592424 100644 --- a/src/module/_global/index.ts +++ b/src/module/_global/index.ts @@ -27,6 +27,7 @@ import SkeletonUser from "./components/skeleton_user"; import SkeletonList from "./components/skeleton_list"; import { funViewDir } from "./fun/view_dir"; import { funSendWebPush } from "./fun/send_web_push"; +import ViewFilterData from "./view/view_filter_kategori_data"; export { WARNA }; export { LayoutLogin }; @@ -63,3 +64,4 @@ export { SkeletonList } export { keyWibu } export { funViewDir } export { funSendWebPush } +export { ViewFilterData } diff --git a/src/module/_global/view/view_filter_kategori_data.tsx b/src/module/_global/view/view_filter_kategori_data.tsx new file mode 100644 index 0000000..57923b6 --- /dev/null +++ b/src/module/_global/view/view_filter_kategori_data.tsx @@ -0,0 +1,84 @@ +'use client' +import { useHookstate } from "@hookstate/core"; +import { Box, Button, Divider, Group, rem, Text } from "@mantine/core"; +import { useShallowEffect } from "@mantine/hooks"; +import { useRouter, useSearchParams } from "next/navigation"; +import { useState } from "react"; +import { FaCheck } from "react-icons/fa6"; +import { TEMA } from "../bin/val_global"; +import LayoutNavbarNew from "../layout/layout_navbar_new"; + +export default function ViewFilterData({ linkFilter }: { linkFilter: string }) { + const [selectedFilter, setSelectedFilter] = useState(''); + const data = [ + { + id: 1, + data: "data-saya", + name: "Kegiatan Saya", + }, + { + id: 2, + data: "semua", + name: "Semua Kegiatan", + }, + ] + const searchParams = useSearchParams() + const kategori = searchParams.get('cat') + const tema = useHookstate(TEMA) + + + + useShallowEffect(() => { + if (kategori == "null" || kategori == "undefined" || kategori == '') { + setSelectedFilter("data-saya") + } else { + setSelectedFilter(kategori) + } + }, [kategori]); + + const router = useRouter() + + return ( + + + + { + data.map((filter) => ( + + setSelectedFilter(filter.data)} + > + + {filter.name} + + {selectedFilter === filter.data && } + + + + )) + + } + + + + + + ); +} \ No newline at end of file diff --git a/src/module/division_new/ui/list_division.tsx b/src/module/division_new/ui/list_division.tsx index 67001df..2aa4113 100644 --- a/src/module/division_new/ui/list_division.tsx +++ b/src/module/division_new/ui/list_division.tsx @@ -157,7 +157,7 @@ export default function ListDivision() { - {roleLogin.get() == 'supadmin' && Filter by: {nameGroup}} + {roleLogin.get() == 'supadmin' && Filter : {nameGroup}} Total Divisi diff --git a/src/module/position/ui/list_position_active.tsx b/src/module/position/ui/list_position_active.tsx index cfd2929..7a2523f 100644 --- a/src/module/position/ui/list_position_active.tsx +++ b/src/module/position/ui/list_position_active.tsx @@ -78,7 +78,7 @@ export default function ListPositionActive() { placeholder="Pencarian" onChange={(e) => setSearchQuery(e.target.value)} /> - {roleLogin.get() == 'supadmin' && Filter by: {nameGroup}} + {roleLogin.get() == 'supadmin' && Filter : {nameGroup}} {loading ? Array(6).fill(null).map((_, i) => ( Filter by: {nameGroup}} + {roleLogin.get() == 'supadmin' && Filter : {nameGroup}} + {(roleLogin.get() == 'user' || roleLogin.get() == 'coadmin') && Filter : {(kategori == null || kategori == undefined || kategori == '') ? 'Kegiatan Saya' : 'Semua Kegiatan'}} Total Kegiatan diff --git a/src/module/project/ui/menu_drawer_project.tsx b/src/module/project/ui/menu_drawer_project.tsx index 11c3aaf..f91436e 100644 --- a/src/module/project/ui/menu_drawer_project.tsx +++ b/src/module/project/ui/menu_drawer_project.tsx @@ -1,8 +1,7 @@ -import { globalRole, TEMA, WARNA } from '@/module/_global'; +import { globalRole, TEMA } from '@/module/_global'; import { useHookstate } from '@hookstate/core'; import { Box, Flex, SimpleGrid, Stack, Text } from '@mantine/core'; import { useSearchParams } from 'next/navigation'; -import React, { useState } from 'react'; import { HiOutlineFilter } from 'react-icons/hi'; import { IoAddCircle } from 'react-icons/io5'; @@ -10,6 +9,7 @@ export default function MenuDrawerProject() { const roleLogin = useHookstate(globalRole) const searchParams = useSearchParams() const group = searchParams.get('group') + const kategori = searchParams.get('cat') const tema = useHookstate(TEMA) return ( @@ -37,6 +37,18 @@ export default function MenuDrawerProject() { } + + { + (roleLogin.get() == "user" || roleLogin.get() == "coadmin") && + window.location.href = "/project?page=filter-data&cat=" + kategori} justify={'center'} align={'center'} direction={'column'} > + + + + + Filter + + + } diff --git a/src/module/project/ui/tab_project.tsx b/src/module/project/ui/tab_project.tsx index 503109a..a5b0114 100644 --- a/src/module/project/ui/tab_project.tsx +++ b/src/module/project/ui/tab_project.tsx @@ -1,16 +1,16 @@ "use client" -import { globalRole, LayoutDrawer, LayoutNavbarNew, TEMA } from '@/module/_global'; +import { LayoutDrawer, LayoutNavbarNew, TEMA } from '@/module/_global'; +import { useHookstate } from '@hookstate/core'; import { ActionIcon, Box, Button, Flex, rem } from '@mantine/core'; -import React, { useState } from 'react'; -import { HiMenu } from 'react-icons/hi'; -import { RiProgress3Line } from "react-icons/ri"; import { useRouter, useSearchParams } from 'next/navigation'; -import { TbClockPause } from 'react-icons/tb'; +import { useState } from 'react'; +import { HiMenu } from 'react-icons/hi'; import { IoIosCheckmarkCircleOutline } from 'react-icons/io'; import { IoCloseCircleOutline } from 'react-icons/io5'; +import { RiProgress3Line } from "react-icons/ri"; +import { TbClockPause } from 'react-icons/tb'; import ListProject from './list_project'; import MenuDrawerProject from './menu_drawer_project'; -import { useHookstate } from '@hookstate/core'; export default function TabProject() { const [openDrawer, setOpenDrawer] = useState(false) @@ -18,8 +18,8 @@ export default function TabProject() { const searchParams = useSearchParams() const status = searchParams.get('status') const group = searchParams.get("group"); + const kategori = searchParams.get("cat"); const iconStyle = { width: rem(20), height: rem(20) }; - const roleLogin = useHookstate(globalRole) const tema = useHookstate(TEMA) const dataStatus = [ @@ -48,11 +48,10 @@ export default function TabProject() { return ( setOpenDrawer(true)} bg={tema.get().bgIcon} size="lg" radius="lg" aria-label="Settings"> - : <> } /> @@ -76,7 +75,7 @@ export default function TabProject() { : (status == null && item.id == "0") ? "white" : tema.get().utama } key={index} - onClick={() => { router.push("?status=" + item.id + "&group=" + group) }} + onClick={() => { router.push("?status=" + item.id + "&group=" + group+"&cat="+kategori) }} defaultValue={(status == "1" || status == "2" || status == "3") ? status : "0"} radius={"xl"} bg={ @@ -92,7 +91,6 @@ export default function TabProject() { - setOpenDrawer(false)}> diff --git a/src/module/user/member/ui/tab_list_member.tsx b/src/module/user/member/ui/tab_list_member.tsx index a6b0c47..8d7517b 100644 --- a/src/module/user/member/ui/tab_list_member.tsx +++ b/src/module/user/member/ui/tab_list_member.tsx @@ -128,7 +128,7 @@ export default function TabListMember() { onChange={(e) => setSearchQuery(e.target.value)} my={20} /> - {roleLogin.get() == 'supadmin' && Filter by: {nameGroup}} + {roleLogin.get() == 'supadmin' && Filter : {nameGroup}} {loading ? Array(6)