Merge pull request #95 from bipproduction/lukman/7-agustus-2024

feat : update search
This commit is contained in:
Amalia
2024-08-07 10:38:05 +08:00
committed by GitHub
7 changed files with 67 additions and 45 deletions

View File

@@ -8,10 +8,15 @@ export async function listGroups(req: NextRequest): Promise<Response> {
const searchParams = req.nextUrl.searchParams const searchParams = req.nextUrl.searchParams
const villaId = user.idVillage const villaId = user.idVillage
const active = searchParams.get('active'); const active = searchParams.get('active');
const name = searchParams.get('name');
const groups = await prisma.group.findMany({ const groups = await prisma.group.findMany({
where: { where: {
isActive: (active == "true" ? true : false), isActive: (active == "true" ? true : false),
idVillage: String(villaId), idVillage: String(villaId),
name: {
contains: String(name),
mode: "insensitive"
}
}, },
select: { select: {
id: true, id: true,

View File

@@ -26,6 +26,7 @@ export default function ListGroupActive({ status }: { status: boolean }) {
const [isData, setData] = useState<dataGroup[]>([]); const [isData, setData] = useState<dataGroup[]>([]);
const [selectId, setSelectId] = useState<string | null>(null); const [selectId, setSelectId] = useState<string | null>(null);
const [active, setActive] = useState<boolean | null>(null); const [active, setActive] = useState<boolean | null>(null);
const [searchQuery, setSearchQuery] = useState('')
const [loading, setLoading] = useState(true); const [loading, setLoading] = useState(true);
const getData = async () => { const getData = async () => {
@@ -33,7 +34,7 @@ export default function ListGroupActive({ status }: { status: boolean }) {
setData([]); setData([]);
setLoading(true); setLoading(true);
const res = await fetch( const res = await fetch(
`${API_ADDRESS.apiGetAllGroup}&villageId=121212&active=` + status `${API_ADDRESS.apiGetAllGroup}&villageId=121212&active=${status}&name=${searchQuery}`
); );
const data = await res.json(); const data = await res.json();
setData(data); setData(data);
@@ -52,7 +53,7 @@ export default function ListGroupActive({ status }: { status: boolean }) {
useShallowEffect(() => { useShallowEffect(() => {
getData(); getData();
}, [status]); }, [status, searchQuery]);
return ( return (
<Box pt={20}> <Box pt={20}>
@@ -68,6 +69,7 @@ export default function ListGroupActive({ status }: { status: boolean }) {
radius={30} radius={30}
leftSection={<HiMagnifyingGlass size={20} />} leftSection={<HiMagnifyingGlass size={20} />}
placeholder="Pencarian" placeholder="Pencarian"
onChange={(e) => setSearchQuery(e.target.value)}
/> />
{loading {loading
? Array(6) ? Array(6)

View File

@@ -10,6 +10,7 @@ export async function getAllPosition(req: NextRequest) {
const searchParams = req.nextUrl.searchParams const searchParams = req.nextUrl.searchParams
const groupID = searchParams.get('groupId'); const groupID = searchParams.get('groupId');
const active = searchParams.get('active'); const active = searchParams.get('active');
const name = searchParams.get('name')
const user = await funGetUserByCookies() const user = await funGetUserByCookies()
console.log(groupID) console.log(groupID)
@@ -23,6 +24,10 @@ export async function getAllPosition(req: NextRequest) {
where: { where: {
idGroup: String(grupFix), idGroup: String(grupFix),
isActive: (active == "true" ? true : false), isActive: (active == "true" ? true : false),
name: {
contains: String(name),
mode: "insensitive"
}
}, },
select: { select: {
id: true, id: true,

View File

@@ -24,6 +24,7 @@ export default function ListPositionActive({ status }: { status: boolean }) {
const [loading, setLoading] = useState(true); const [loading, setLoading] = useState(true);
const [selectId, setSelectId] = useState<string | null>(null); const [selectId, setSelectId] = useState<string | null>(null);
const [active, setActive] = useState<boolean | null>(null) const [active, setActive] = useState<boolean | null>(null)
const [searchQuery, setSearchQuery] = useState('')
const searchParams = useSearchParams() const searchParams = useSearchParams()
const group = searchParams.get('group') const group = searchParams.get('group')
@@ -31,7 +32,7 @@ export default function ListPositionActive({ status }: { status: boolean }) {
try { try {
setDataPosition([]); setDataPosition([]);
setLoading(true) setLoading(true)
const res = await fetch(`${API_ADDRESS.apiGetAllPosition}&active=${status}&groupId=${group}`); const res = await fetch(`${API_ADDRESS.apiGetAllPosition}&active=${status}&groupId=${group}&name=${searchQuery}`);
const data = await res.json(); const data = await res.json();
setDataPosition(data); setDataPosition(data);
setLoading(false); setLoading(false);
@@ -44,7 +45,7 @@ export default function ListPositionActive({ status }: { status: boolean }) {
useShallowEffect(() => { useShallowEffect(() => {
getAllPosition(); getAllPosition();
}, [status, group]) }, [status, group, searchQuery])
return ( return (
<Box pt={20}> <Box pt={20}>
@@ -60,6 +61,7 @@ export default function ListPositionActive({ status }: { status: boolean }) {
radius={30} radius={30}
leftSection={<HiMagnifyingGlass size={20} />} leftSection={<HiMagnifyingGlass size={20} />}
placeholder="Pencarian" placeholder="Pencarian"
onChange={(e) => setSearchQuery(e.target.value)}
/> />
{loading ? Array(6).fill(null).map((_, i) => ( {loading ? Array(6).fill(null).map((_, i) => (
<Box key={i}> <Box key={i}>

View File

@@ -10,6 +10,7 @@ export async function getAllUser(req: NextRequest) {
const idGroup = searchParams.get("groupId"); const idGroup = searchParams.get("groupId");
const active = searchParams.get("active"); const active = searchParams.get("active");
const user = await funGetUserByCookies(); const user = await funGetUserByCookies();
const name = searchParams.get("name")
if (idGroup == "null" || idGroup == undefined) { if (idGroup == "null" || idGroup == undefined) {
fixGroup = user.idGroup fixGroup = user.idGroup
@@ -21,6 +22,10 @@ export async function getAllUser(req: NextRequest) {
where: { where: {
isActive: active == "true" ? true : false, isActive: active == "true" ? true : false,
idGroup: String(fixGroup), idGroup: String(fixGroup),
name: {
contains: String(name),
mode: "insensitive",
}
}, },
select: { select: {
id: true, id: true,

View File

@@ -26,21 +26,6 @@ export default function ListMember() {
</Tabs.Tab> </Tabs.Tab>
</Tabs.List> </Tabs.List>
<TextInput
styles={{
input: {
color: WARNA.biruTua,
borderRadius: WARNA.biruTua,
borderColor: WARNA.biruTua,
},
}}
size="md"
radius={30}
leftSection={<HiMagnifyingGlass size={20} />}
placeholder="Pencarian"
my={10}
/>
<Tabs.Panel value="aktif"> <Tabs.Panel value="aktif">
<TabListMember status={true} /> <TabListMember status={true} />
</Tabs.Panel> </Tabs.Panel>

View File

@@ -1,10 +1,10 @@
import { API_ADDRESS, WARNA } from "@/module/_global" import { API_ADDRESS, WARNA } from "@/module/_global"
import { Box, Group, ActionIcon, Text } from "@mantine/core" import { Box, Group, ActionIcon, Text, TextInput } from "@mantine/core"
import { useShallowEffect } from "@mantine/hooks" import { useShallowEffect } from "@mantine/hooks"
import { useRouter, useSearchParams } from "next/navigation" import { useRouter, useSearchParams } from "next/navigation"
import { useEffect, useState } from "react" import { useEffect, useState } from "react"
import { HiMiniUser } from "react-icons/hi2" import { HiMagnifyingGlass, HiMiniUser } from "react-icons/hi2"
type dataMember = { type dataMember = {
id: string, id: string,
@@ -23,13 +23,14 @@ export default function TabListMember({ status }: { status: boolean }) {
const [loading, setLoading] = useState(true); const [loading, setLoading] = useState(true);
const [dataMember, setDataMember] = useState<dataMember[]>([]) const [dataMember, setDataMember] = useState<dataMember[]>([])
const searchParams = useSearchParams() const searchParams = useSearchParams()
const [searchQuery, setSearchQuery] = useState('')
const group = searchParams.get('group') const group = searchParams.get('group')
async function getAllUser() { async function getAllUser() {
try { try {
setLoading(true) setLoading(true)
const res = await fetch(`${API_ADDRESS.apiGetAllUser}&active=${status}&groupId=${group}` ) const res = await fetch(`${API_ADDRESS.apiGetAllUser}&active=${status}&groupId=${group}&name=${searchQuery}`)
const data = await res.json() const data = await res.json()
setDataMember(data) setDataMember(data)
@@ -43,32 +44,49 @@ export default function TabListMember({ status }: { status: boolean }) {
useShallowEffect(() => { useShallowEffect(() => {
getAllUser() getAllUser()
}, [status]) }, [status, searchQuery])
return ( return (
<> <>
{dataMember.map((v, i) => { <Box>
return ( <TextInput
<Box pt={20} key={i} onClick={() => { styles={{
router.push(`/member/${v.id}`) input: {
}}> color: WARNA.biruTua,
<Group align='center' style={{ borderRadius: WARNA.biruTua,
borderBottom: `1px solid #D9D9D9`, borderColor: WARNA.biruTua,
padding: 10, },
}} > }}
<Box> size="md"
<ActionIcon variant="light" bg={WARNA.biruTua} size={50} radius={100} aria-label="icon"> radius={30}
<HiMiniUser color={'white'} size={25} /> leftSection={<HiMagnifyingGlass size={20} />}
</ActionIcon> placeholder="Pencarian"
</Box> onChange={(e) => setSearchQuery(e.target.value)}
<Box> my={10}
<Text fw={'bold'} c={WARNA.biruTua}>{v.name}</Text> />
<Text fw={'lighter'} fz={12}>{v.group + ' - ' + v.position}</Text> {dataMember.map((v, i) => {
</Box> return (
</Group> <Box pt={20} key={i} onClick={() => {
</Box> router.push(`/member/${v.id}`)
) }}>
})} <Group align='center' style={{
borderBottom: `1px solid #D9D9D9`,
padding: 10,
}} >
<Box>
<ActionIcon variant="light" bg={WARNA.biruTua} size={50} radius={100} aria-label="icon">
<HiMiniUser color={'white'} size={25} />
</ActionIcon>
</Box>
<Box>
<Text fw={'bold'} c={WARNA.biruTua}>{v.name}</Text>
<Text fw={'lighter'} fz={12}>{v.group + ' - ' + v.position}</Text>
</Box>
</Group>
</Box>
)
})}
</Box>
</> </>
) )
} }