'use client' import lowonganKerjaState from '@/app/admin/(dashboard)/_state/ekonomi/lowongan-kerja'; import colors from '@/con/colors'; import { Box, Button, Center, Flex, Group, Pagination, Paper, SimpleGrid, Skeleton, Stack, Text, TextInput } from '@mantine/core'; import { useDebouncedValue } from '@mantine/hooks'; import { IconBriefcase, IconClock, IconMapPin, IconSearch } from '@tabler/icons-react'; import { useRouter } from 'next/navigation'; import { useEffect, useState } from 'react'; import { useProxy } from 'valtio/utils'; import BackButton from '../../desa/layanan/_com/BackButto'; const formatCurrency = (value: string | number) => { // Convert to string if it's a number const numStr = typeof value === 'number' ? value.toString() : value; // Remove all non-digit characters const digitsOnly = numStr.replace(/\D/g, ''); // Format with thousand separators const formatted = digitsOnly.replace(/\B(?=(\d{3})+(?!\d))/g, '.'); return `Rp.${formatted}`; }; function Page() { const state = useProxy(lowonganKerjaState) const router = useRouter() const [search, setSearch] = useState('') const [debouncedSearch] = useDebouncedValue(search, 500); // 500ms delay const { data, page, totalPages, loading, load, } = state.findMany useEffect(() => { load(page, 6, debouncedSearch) }, [page, debouncedSearch, load]) if (loading || !data) { return ( ) } return ( Lowongan Kerja Lokal } value={search} onChange={(e) => setSearch(e.currentTarget.value)} /> {data.map((v, k) => { return ( {v.posisi} {v.namaPerusahaan} {v.lokasi} Full Time {formatCurrency(v.gaji)} ) })}
load(newPage)} total={totalPages} my="md" />
); } export default Page;