Fix eror edit admin lowongan kerja

This commit is contained in:
2025-08-20 17:52:10 +08:00
parent 1c01397c0d
commit b580978f8e
2 changed files with 41 additions and 28 deletions

View File

@@ -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() {
<TextInput
value={formData.posisi}
onChange={(val) => {
formData.posisi = val.target.value;
setFormData(prev => ({ ...prev, posisi: val.target.value }));
}}
label={<Text fw={"bold"} fz={"sm"}>Posisi</Text>}
placeholder='Masukkan posisi'
@@ -96,7 +96,7 @@ function EditLowonganKerja() {
<TextInput
value={formData.namaPerusahaan}
onChange={(val) => {
formData.namaPerusahaan = val.target.value;
setFormData(prev => ({ ...prev, namaPerusahaan: val.target.value }));
}}
label={<Text fw={"bold"} fz={"sm"}>Nama Perusahaan</Text>}
placeholder='Masukkan nama perusahaan'
@@ -104,7 +104,7 @@ function EditLowonganKerja() {
<TextInput
value={formData.lokasi}
onChange={(val) => {
formData.lokasi = val.target.value;
setFormData(prev => ({ ...prev, lokasi: val.target.value }));
}}
label={<Text fw={"bold"} fz={"sm"}>Lokasi</Text>}
placeholder='Masukkan lokasi'
@@ -112,7 +112,7 @@ function EditLowonganKerja() {
<TextInput
value={formData.tipePekerjaan}
onChange={(val) => {
formData.tipePekerjaan = val.target.value;
setFormData(prev => ({ ...prev, tipePekerjaan: val.target.value }));
}}
label={<Text fw={"bold"} fz={"sm"}>Tipe Pekerjaan</Text>}
placeholder='Masukkan tipe pekerjaan'
@@ -120,7 +120,7 @@ function EditLowonganKerja() {
<TextInput
value={formData.gaji}
onChange={(val) => {
formData.gaji = val.target.value;
setFormData(prev => ({ ...prev, gaji: val.target.value }));
}}
label={<Text fw={"bold"} fz={"sm"}>Gaji selama 1 bulan</Text>}
placeholder='Masukkan gaji'
@@ -130,7 +130,7 @@ function EditLowonganKerja() {
<EditEditor
value={formData.deskripsi}
onChange={(val) => {
formData.deskripsi = val;
setFormData(prev => ({ ...prev, deskripsi: val }));
}}
/>
</Box>
@@ -139,7 +139,7 @@ function EditLowonganKerja() {
<EditEditor
value={formData.kualifikasi}
onChange={(val) => {
formData.kualifikasi = val;
setFormData(prev => ({ ...prev, kualifikasi: val }));
}}
/>
</Box>

View File

@@ -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() {
<IconClock color={colors['blue-button']} size={50} />
<Box>
<Text fw={'bold'} fz={'h4'} c={colors['blue-button']}>Full Time</Text>
<Text fz={'h4'}>{v.gaji}</Text>
<Text fz={'h4'}>{formatCurrency(v.gaji)}</Text>
</Box>
</Flex>
</Box>