From fb5b23a30d5492c7b5a16e6bd19588a84e5160d4 Mon Sep 17 00:00:00 2001 From: amel Date: Thu, 29 Aug 2024 17:22:29 +0800 Subject: [PATCH] upd: search deskripsi: - cek search - img profile - link sesuai fitur - pembatasan sesuai role No Issues --- src/app/api/home/search/route.ts | 52 +++++++-- src/module/home/lib/type_search.ts | 17 ++- src/module/home/ui/view_detail_feature.tsx | 2 +- src/module/home/ui/view_search.tsx | 123 ++++++++++++--------- 4 files changed, 126 insertions(+), 68 deletions(-) diff --git a/src/app/api/home/search/route.ts b/src/app/api/home/search/route.ts index fd9c017..103220d 100644 --- a/src/app/api/home/search/route.ts +++ b/src/app/api/home/search/route.ts @@ -4,12 +4,13 @@ import { prisma } from "@/module/_global"; import { funGetUserByCookies } from "@/module/auth"; +import _ from "lodash"; import { NextResponse } from "next/server"; export async function GET(request: Request) { try { - const { searchParams } = new URL(request.url); - const search = searchParams.get("search"); + const { searchParams } = new URL(request.url) + const search = searchParams.get("search") const userId = await funGetUserByCookies() if (userId.id == undefined) { return NextResponse.json({ success: false, message: "Anda harus login untuk mengakses ini" }, { status: 401 }); @@ -69,31 +70,68 @@ export async function GET(request: Request) { select: { id: true, name: true, - email: true + email: true, + img: true, + Position: { + select: { + name: true + } + }, + Group: { + select: { + name: true + } + } } }) + const userOmit = user.map((v: any) => ({ + ..._.omit(v, ["Position", "Group"]), + position: v.Position.name, + group: v.Group.name + })) + const divisions = await prisma.division.findMany({ where: kondisi, select: { id: true, name: true, - desc: true + desc: true, + Group: { + select: { + name: true + } + } } }) + const divisionOmit = divisions.map((v: any) => ({ + ..._.omit(v, ["Group"]), + group: v.Group.name + })) + const projects = await prisma.project.findMany({ where: kondisiProject, select: { id: true, title: true, + Group: { + select: { + name: true + } + } } }) + const projectOmit = projects.map((v: any) => ({ + ..._.omit(v, ["Group"]), + group: v.Group.name + })) + const allDataSearch = { - user: user, - division: divisions, - project: projects + user: userOmit, + division: divisionOmit, + project: projectOmit } return NextResponse.json({ success: true, data: allDataSearch }, { status: 200 }); diff --git a/src/module/home/lib/type_search.ts b/src/module/home/lib/type_search.ts index d2100d7..22bbc1a 100644 --- a/src/module/home/lib/type_search.ts +++ b/src/module/home/lib/type_search.ts @@ -2,15 +2,20 @@ export interface IDataUserSearch { id: string name: string email: string + position: string + group: string + img: string +} + +export interface IDataProjectSearch { + id: string + title: string + group: string } export interface IDataDivisionSearch { - id: string - title: string -} - -export interface IDataProjectSearch { id: string name: string desc: string - } + group: string +} diff --git a/src/module/home/ui/view_detail_feature.tsx b/src/module/home/ui/view_detail_feature.tsx index 3e88820..6c46c01 100644 --- a/src/module/home/ui/view_detail_feature.tsx +++ b/src/module/home/ui/view_detail_feature.tsx @@ -98,7 +98,7 @@ export default function ViewDetailFeature() {
- Group + Grup
diff --git a/src/module/home/ui/view_search.tsx b/src/module/home/ui/view_search.tsx index 93a6fd2..5d40560 100644 --- a/src/module/home/ui/view_search.tsx +++ b/src/module/home/ui/view_search.tsx @@ -1,17 +1,19 @@ "use client" import { LayoutNavbarNew, WARNA } from '@/module/_global'; -import { ActionIcon, Box, Divider, Grid, Group, Text, TextInput } from '@mantine/core'; +import { ActionIcon, Avatar, Box, Divider, Grid, Group, Text, TextInput } from '@mantine/core'; import React, { useState } from 'react'; -import { HiMagnifyingGlass, HiMiniUser } from 'react-icons/hi2'; +import { HiMagnifyingGlass, HiMiniPresentationChartBar, HiMiniUserGroup } from 'react-icons/hi2'; import { funGetSearchAll } from '../lib/api_search'; import { useShallowEffect } from '@mantine/hooks'; import { IDataDivisionSearch, IDataProjectSearch, IDataUserSearch } from '../lib/type_search'; +import { useRouter } from 'next/navigation'; export default function ViewSearch() { const [search, setSearch] = useState(''); const [dataUser, setDataUser] = useState([]); - const [dataProject, setDataProject] = useState([]); - const [dataDivision, setDataDivision] = useState([]); + const [dataProject, setDataProject] = useState([]); + const [dataDivision, setDataDivision] = useState([]); + const router = useRouter() async function featchSearch() { try { @@ -26,8 +28,12 @@ export default function ViewSearch() { } useShallowEffect(() => { - if (search !== '') { + if (search != '') { featchSearch() + } else { + setDataUser([]); + setDataProject([]); + setDataDivision([]); } }, [search]) @@ -58,32 +64,39 @@ export default function ViewSearch() { borderRadius: 10, }}> ANGGOTA - {dataUser.length > 0 ? ( - - {dataUser.map((v, i) => { - return ( - - - - - - - - - {v.name} - {v.email} - - - - - ) - })} - - ) : - Tidak Ada Anggota - } + + {dataUser.length > 0 ? ( + + {dataUser.map((v, i) => { + return ( + router.push(`/member/${v.id}`)}> + + + + {v.name} + {v.group + ' - ' + v.position} + + + + + ) + })} + + ) : + Tidak Ada Anggota + } + + DIVISI {dataDivision.map((v, i) => { return ( - + router.push(`/division/${v.id}`)}> - + {v.name.toUpperCase()} + {v.group} {v.desc} @@ -131,28 +145,29 @@ export default function ViewSearch() { borderRadius: 5 }}> {dataProject.length > 0 ? ( - - {dataProject.map((v, i) => { - return ( - - - - - - - - - {v.title.toUpperCase()} - - - - - ) - })} - + + {dataProject.map((v, i) => { + return ( + router.push(`/project/${v.id}`)}> + + + + + + + + {v.title.toUpperCase()} + {v.group} + + + + + ) + })} + ) - : Tidak Ada Kegiatan - } + : Tidak Ada Kegiatan + }