Fix QC Kak Inno Admin, Fix QC Keano UI User, Fix QC Pak jun tabel apbdes

This commit is contained in:
2025-11-12 17:42:31 +08:00
parent 417a8937f5
commit 9622eb5a9a
354 changed files with 11444 additions and 4012 deletions

View File

@@ -7,6 +7,7 @@ import {
Box,
Button,
Group,
Loader,
Paper,
Select,
Stack,
@@ -24,12 +25,18 @@ export default function EditLembaga() {
const { id } = useParams<{ id: string }>();
const state = useProxy(infoSekolahPaud.lembagaPendidikan);
const jenjangPendidikanList = infoSekolahPaud.jenjangPendidikan.findMany.data;
const [isSubmitting, setIsSubmitting] = useState(false);
const [form, setForm] = useState({
nama: '',
jenjangId: '',
});
const [originalData, setOriginalData] = useState({
nama: '',
jenjangId: '',
});
// Load jenjang pendidikan dan data lembaga
useEffect(() => {
infoSekolahPaud.jenjangPendidikan.findMany.load();
@@ -41,6 +48,10 @@ export default function EditLembaga() {
nama: data.nama,
jenjangId: data.jenjangId,
});
setOriginalData({
nama: data.nama,
jenjangId: data.jenjangId,
});
}
});
}
@@ -50,21 +61,37 @@ export default function EditLembaga() {
setForm((prev) => ({ ...prev, [field]: value }));
};
const handleResetForm = () => {
setForm({
nama: originalData.nama,
jenjangId: originalData.jenjangId,
});
toast.info('Form dikembalikan ke data awal');
};
const handleSubmit = async () => {
if (!form.nama || !form.jenjangId) {
toast.warn('Nama dan jenjang pendidikan harus diisi');
return;
}
try {
setIsSubmitting(true);
if (!form.nama || !form.jenjangId) {
toast.warn('Nama dan jenjang pendidikan harus diisi');
return;
}
// Update global state hanya saat submit
state.edit.id = id;
state.edit.form = form;
// Update global state hanya saat submit
state.edit.id = id;
state.edit.form = form;
const result = await state.edit.update();
const result = await state.edit.update();
if (result) {
toast.success('Data berhasil diperbarui');
router.push('/admin/pendidikan/info-sekolah/lembaga');
if (result) {
toast.success('Data berhasil diperbarui');
router.push('/admin/pendidikan/info-sekolah/lembaga');
}
} catch (error) {
console.error('Error updating lembaga:', error);
toast.error('Gagal memperbarui lembaga');
} finally {
setIsSubmitting(false);
}
};
@@ -119,6 +146,17 @@ export default function EditLembaga() {
/>
<Group justify="right">
<Button
variant="outline"
color="gray"
radius="md"
size="md"
onClick={handleResetForm}
>
Batal
</Button>
{/* Tombol Simpan */}
<Button
onClick={handleSubmit}
radius="md"
@@ -129,7 +167,7 @@ export default function EditLembaga() {
boxShadow: '0 4px 15px rgba(79, 172, 254, 0.4)',
}}
>
Simpan
{isSubmitting ? <Loader size="sm" color="white" /> : 'Simpan'}
</Button>
</Group>
</Stack>

View File

@@ -5,6 +5,7 @@ import {
Box,
Button,
Group,
Loader,
Paper,
Select,
Stack,
@@ -14,13 +15,15 @@ import {
} from '@mantine/core';
import { IconArrowBack } from '@tabler/icons-react';
import { useRouter } from 'next/navigation';
import { useEffect } from 'react';
import { useEffect, useState } from 'react';
import { useProxy } from 'valtio/utils';
import infoSekolahPaud from '../../../../_state/pendidikan/info-sekolah-paud';
import { toast } from 'react-toastify';
function CreateLembaga() {
const router = useRouter();
const stateLembaga = useProxy(infoSekolahPaud.lembagaPendidikan);
const [isSubmitting, setIsSubmitting] = useState(false);
useEffect(() => {
stateLembaga.findMany.load();
@@ -35,9 +38,17 @@ function CreateLembaga() {
};
const handleSubmit = async () => {
await stateLembaga.create.create();
resetForm();
router.push('/admin/pendidikan/info-sekolah/lembaga');
try {
setIsSubmitting(true);
await stateLembaga.create.create();
resetForm();
router.push('/admin/pendidikan/info-sekolah/lembaga');
} catch (error) {
console.error('Error creating lembaga:', error);
toast.error('Gagal menambahkan lembaga');
} finally {
setIsSubmitting(false);
}
};
return (
@@ -63,7 +74,7 @@ function CreateLembaga() {
>
<Stack gap="md">
<TextInput
defaultValue={stateLembaga.create.form.nama}
value={stateLembaga.create.form.nama}
onChange={(val) => {
stateLembaga.create.form.nama = val.target.value;
}}
@@ -90,6 +101,17 @@ function CreateLembaga() {
/>
<Group justify="right">
<Button
variant="outline"
color="gray"
radius="md"
size="md"
onClick={resetForm}
>
Reset
</Button>
{/* Tombol Simpan */}
<Button
onClick={handleSubmit}
radius="md"
@@ -100,7 +122,7 @@ function CreateLembaga() {
boxShadow: '0 4px 15px rgba(79, 172, 254, 0.4)',
}}
>
Simpan
{isSubmitting ? <Loader size="sm" color="white" /> : 'Simpan'}
</Button>
</Group>
</Stack>