diff --git a/src/app/darmasaba/(tambahan)/prestasi-desa/page.tsx b/src/app/darmasaba/(tambahan)/prestasi-desa/page.tsx index e519d722..c25ba552 100644 --- a/src/app/darmasaba/(tambahan)/prestasi-desa/page.tsx +++ b/src/app/darmasaba/(tambahan)/prestasi-desa/page.tsx @@ -1,47 +1,58 @@ -/* eslint-disable @typescript-eslint/no-explicit-any */ -/* eslint-disable react-hooks/exhaustive-deps */ 'use client' -import colors from '@/con/colors'; -import { BackgroundImage, Box, Button, Center, Container, Group, Paper, SimpleGrid, Stack, Text } from '@mantine/core'; -import BackButton from '../../(pages)/desa/layanan/_com/BackButto'; -import { useRouter } from 'next/navigation'; import prestasiState from '@/app/admin/(dashboard)/_state/landing-page/prestasi-desa'; +import colors from '@/con/colors'; +import { BackgroundImage, Box, Button, Center, Group, Pagination, Paper, SimpleGrid, Skeleton, Stack, Text, TextInput } from '@mantine/core'; +import { useDebouncedValue, useShallowEffect } from '@mantine/hooks'; +import { useRouter } from 'next/navigation'; import { useProxy } from 'valtio/utils'; -import { useEffect, useState } from 'react'; +import BackButton from '../../(pages)/desa/layanan/_com/BackButto'; +import { IconSearch } from '@tabler/icons-react'; +import { useState } from 'react'; function Page() { const state = useProxy(prestasiState.prestasiDesa); - const [loading, setLoading] = useState(true); - const [prestasiData, setPrestasiData] = useState([]); const router = useRouter(); + const [search, setSearch] = useState(""); + const [debouncedSearch] = useDebouncedValue(search, 500); // 500ms delay + + const { data, page, totalPages, loading, load } = state.findMany; + + useShallowEffect(() => { + load(page, 3, debouncedSearch) + }, [page, debouncedSearch]) + + if (loading || !data) { + return ( + + + + ) + } - useEffect(() => { - const loadData = async () => { - try { - setLoading(true); - await prestasiState.kategoriPrestasi.findMany.load(); - await state.findMany.load(); - setPrestasiData(state.findMany.data || []); - } catch (error) { - console.error('Error loading data:', error); - } finally { - setLoading(false); - } - }; - - loadData(); - }, []); return ( - - - Prestasi Desa - - - Temukan berbagai prestasi dan keunggulan yang dimiliki Desa Darmasaba. - - + + + + Prestasi Desa + + + Temukan berbagai prestasi dan keunggulan yang dimiliki Desa Darmasaba. + + + + setSearch(e.target.value)} + leftSection={} + w={300} + size="md" + /> + + - {loading ? ( -
- Memuat Data... -
+ {data.length === 0 ? ( + Tidak ada prestasi yang ditemukan ) : ( - prestasiData.map((v, k) => { + data.map((v, k) => { return ( - - - - - {v.kategori?.name} - - - - - - - - - - - ) - }) - )} + src={v.image?.link || ''} + + radius={16} + pos={"relative"} + > + + + + + {v.kategori?.name} + + + + + + + + + + + ) + }) + )}
+
+ { + load(newPage, 10) + window.scrollTo({ top: 0, behavior: 'smooth' }) + }} + total={totalPages} + mt="md" + mb="md" + color="blue" + radius="md" + /> +
); } diff --git a/src/app/darmasaba/_com/main-page/landing-page/ModuleView.tsx b/src/app/darmasaba/_com/main-page/landing-page/ModuleView.tsx index 605d2be5..d8269302 100644 --- a/src/app/darmasaba/_com/main-page/landing-page/ModuleView.tsx +++ b/src/app/darmasaba/_com/main-page/landing-page/ModuleView.tsx @@ -107,9 +107,8 @@ function ModuleView() { return (