diff --git a/src/app/admin/(dashboard)/ekonomi/lowongan-kerja-lokal/[id]/edit/page.tsx b/src/app/admin/(dashboard)/ekonomi/lowongan-kerja-lokal/[id]/edit/page.tsx index 66e3f16d..e6dbe6b1 100644 --- a/src/app/admin/(dashboard)/ekonomi/lowongan-kerja-lokal/[id]/edit/page.tsx +++ b/src/app/admin/(dashboard)/ekonomi/lowongan-kerja-lokal/[id]/edit/page.tsx @@ -55,17 +55,17 @@ function EditLowonganKerja() { const handleSubmit = async () => { try { - lowonganKerjaState.update.form = { - ...lowonganKerjaState.update.form, - posisi: formData.posisi, - namaPerusahaan: formData.namaPerusahaan, - lokasi: formData.lokasi, - tipePekerjaan: formData.tipePekerjaan, - gaji: formData.gaji, - deskripsi: formData.deskripsi, - kualifikasi: formData.kualifikasi, - } - await lowonganState.update.update() + // Set the ID for the update + lowonganState.update.id = params?.id as string; + + // Update the form state + lowonganState.update.form = { + ...lowonganState.update.form, + ...formData + }; + + // Call the update function + await lowonganState.update.update(); toast.success("Lowongan kerja berhasil diperbarui!"); router.push("/admin/ekonomi/lowongan-kerja-lokal"); } catch (error) { @@ -88,7 +88,7 @@ function EditLowonganKerja() { { - formData.posisi = val.target.value; + setFormData(prev => ({ ...prev, posisi: val.target.value })); }} label={Posisi} placeholder='Masukkan posisi' @@ -96,7 +96,7 @@ function EditLowonganKerja() { { - formData.namaPerusahaan = val.target.value; + setFormData(prev => ({ ...prev, namaPerusahaan: val.target.value })); }} label={Nama Perusahaan} placeholder='Masukkan nama perusahaan' @@ -104,7 +104,7 @@ function EditLowonganKerja() { { - formData.lokasi = val.target.value; + setFormData(prev => ({ ...prev, lokasi: val.target.value })); }} label={Lokasi} placeholder='Masukkan lokasi' @@ -112,7 +112,7 @@ function EditLowonganKerja() { { - formData.tipePekerjaan = val.target.value; + setFormData(prev => ({ ...prev, tipePekerjaan: val.target.value })); }} label={Tipe Pekerjaan} placeholder='Masukkan tipe pekerjaan' @@ -120,7 +120,7 @@ function EditLowonganKerja() { { - formData.gaji = val.target.value; + setFormData(prev => ({ ...prev, gaji: val.target.value })); }} label={Gaji selama 1 bulan} placeholder='Masukkan gaji' @@ -130,7 +130,7 @@ function EditLowonganKerja() { { - formData.deskripsi = val; + setFormData(prev => ({ ...prev, deskripsi: val })); }} /> @@ -139,7 +139,7 @@ function EditLowonganKerja() { { - formData.kualifikasi = val; + setFormData(prev => ({ ...prev, kualifikasi: val })); }} /> diff --git a/src/app/darmasaba/(pages)/ekonomi/lowongan-kerja-lokal/page.tsx b/src/app/darmasaba/(pages)/ekonomi/lowongan-kerja-lokal/page.tsx index ad537350..ad4d3b04 100644 --- a/src/app/darmasaba/(pages)/ekonomi/lowongan-kerja-lokal/page.tsx +++ b/src/app/darmasaba/(pages)/ekonomi/lowongan-kerja-lokal/page.tsx @@ -1,19 +1,32 @@ 'use client' +import lowonganKerjaState from '@/app/admin/(dashboard)/_state/ekonomi/lowongan-kerja'; import colors from '@/con/colors'; -import { Stack, Box, Text, TextInput, Group, SimpleGrid, Paper, Flex, Button, Skeleton, Center, Pagination } from '@mantine/core'; -import React from 'react'; -import BackButton from '../../desa/layanan/_com/BackButto'; +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 lowonganKerjaState from '@/app/admin/(dashboard)/_state/ekonomi/lowongan-kerja'; -import { useShallowEffect } from '@mantine/hooks'; -import { useState } from 'react'; +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, @@ -23,9 +36,9 @@ function Page() { load, } = state.findMany - useShallowEffect(() => { - load(page, 6, search) - }, [page, search]) + useEffect(() => { + load(page, 6, debouncedSearch) + }, [page, debouncedSearch, load]) if (loading || !data) { return ( @@ -86,7 +99,7 @@ function Page() { Full Time - {v.gaji} + {formatCurrency(v.gaji)}