Fix QC Kak Inno Admin, Fix QC Keano UI User, Fix QC Pak jun tabel apbdes
This commit is contained in:
@@ -2,18 +2,20 @@
|
||||
'use client'
|
||||
|
||||
import colors from '@/con/colors';
|
||||
import { Box, Button, Group, Paper, Stack, TextInput, Title } from '@mantine/core';
|
||||
import { Box, Button, Loader, Group, Paper, Stack, TextInput, Title } from '@mantine/core';
|
||||
import { IconArrowBack } from '@tabler/icons-react';
|
||||
import { useParams, useRouter } from 'next/navigation';
|
||||
import { useEffect, useState } from 'react';
|
||||
import { useProxy } from 'valtio/utils';
|
||||
import dataPendidikan from '../../../_state/pendidikan/data-pendidikan';
|
||||
import { toast } from 'react-toastify';
|
||||
|
||||
export default function EditDataPendidikan() {
|
||||
const router = useRouter();
|
||||
const params = useParams() as { id: string };
|
||||
const stateDPM = useProxy(dataPendidikan);
|
||||
const id = params.id;
|
||||
const [isSubmitting, setIsSubmitting] = useState(false);
|
||||
|
||||
// state lokal untuk form
|
||||
const [formData, setFormData] = useState({
|
||||
@@ -21,6 +23,11 @@ export default function EditDataPendidikan() {
|
||||
jumlah: '',
|
||||
});
|
||||
|
||||
const [originalData, setOriginalData] = useState({
|
||||
name: '',
|
||||
jumlah: '',
|
||||
});
|
||||
|
||||
// Load data saat mount
|
||||
useEffect(() => {
|
||||
if (id) {
|
||||
@@ -31,21 +38,41 @@ export default function EditDataPendidikan() {
|
||||
name: data.name || '',
|
||||
jumlah: data.jumlah || '',
|
||||
});
|
||||
setOriginalData({
|
||||
name: data.name || '',
|
||||
jumlah: data.jumlah || '',
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
}, [id]);
|
||||
|
||||
const handleResetForm = () => {
|
||||
setFormData({
|
||||
name: originalData.name,
|
||||
jumlah: originalData.jumlah,
|
||||
});
|
||||
toast.info("Form dikembalikan ke data awal");
|
||||
};
|
||||
|
||||
const handleChange = (field: 'name' | 'jumlah', value: string) => {
|
||||
setFormData((prev) => ({ ...prev, [field]: value }));
|
||||
};
|
||||
|
||||
const handleSubmit = async () => {
|
||||
// update global state hanya saat submit
|
||||
try {
|
||||
setIsSubmitting(true);
|
||||
// update global state hanya saat submit
|
||||
stateDPM.update.id = id;
|
||||
stateDPM.update.form = { ...formData };
|
||||
await stateDPM.update.submit();
|
||||
router.push('/admin/pendidikan/data-pendidikan');
|
||||
} catch (error) {
|
||||
console.error("Error updating data pendidikan:", error);
|
||||
toast.error("Terjadi kesalahan saat memperbarui data pendidikan");
|
||||
} finally {
|
||||
setIsSubmitting(false);
|
||||
}
|
||||
};
|
||||
|
||||
return (
|
||||
@@ -83,19 +110,30 @@ export default function EditDataPendidikan() {
|
||||
radius="md"
|
||||
required
|
||||
/>
|
||||
<Group justify="right" mt="sm">
|
||||
<Group justify="right">
|
||||
{/* Tombol Batal */}
|
||||
<Button
|
||||
onClick={handleSubmit}
|
||||
style={{
|
||||
background: `linear-gradient(135deg, ${colors['blue-button']}, ${colors['blue-button-trans']})`,
|
||||
color: 'white',
|
||||
boxShadow: '0 0 10px rgba(0,123,255,0.5)',
|
||||
'&:hover': { opacity: 0.9 },
|
||||
}}
|
||||
variant="outline"
|
||||
color="gray"
|
||||
radius="md"
|
||||
size="md"
|
||||
onClick={handleResetForm}
|
||||
>
|
||||
Simpan
|
||||
Batal
|
||||
</Button>
|
||||
|
||||
{/* Tombol Simpan */}
|
||||
<Button
|
||||
onClick={handleSubmit}
|
||||
radius="md"
|
||||
size="md"
|
||||
style={{
|
||||
background: `linear-gradient(135deg, ${colors['blue-button']}, #4facfe)`,
|
||||
color: '#fff',
|
||||
boxShadow: '0 4px 15px rgba(79, 172, 254, 0.4)',
|
||||
}}
|
||||
>
|
||||
{isSubmitting ? <Loader size="sm" color="white" /> : 'Simpan'}
|
||||
</Button>
|
||||
</Group>
|
||||
</Stack>
|
||||
|
||||
@@ -1,31 +1,41 @@
|
||||
/* eslint-disable @typescript-eslint/no-explicit-any */
|
||||
'use client'
|
||||
import colors from '@/con/colors';
|
||||
import { Box, Button, Group, Paper, Stack, Text, TextInput, Title } from '@mantine/core';
|
||||
import { Box, Button, Group, Loader, Paper, Stack, Text, TextInput, Title } from '@mantine/core';
|
||||
import { IconArrowBack } from '@tabler/icons-react';
|
||||
import { useRouter } from 'next/navigation';
|
||||
import { useState } from 'react';
|
||||
import { useProxy } from 'valtio/utils';
|
||||
import dataPendidikan from '../../../_state/pendidikan/data-pendidikan';
|
||||
import { toast } from 'react-toastify';
|
||||
|
||||
export default function CreateDataPendidikan() {
|
||||
const stateDPM = useProxy(dataPendidikan);
|
||||
const [chartData, setChartData] = useState<any[]>([]);
|
||||
const router = useRouter();
|
||||
const [isSubmitting, setIsSubmitting] = useState(false);
|
||||
|
||||
const resetForm = () => {
|
||||
stateDPM.create.form = { name: '', jumlah: '' };
|
||||
};
|
||||
|
||||
const handleSubmit = async () => {
|
||||
const id = await stateDPM.create.create();
|
||||
if (id) {
|
||||
const idStr = String(id);
|
||||
await stateDPM.findUnique.load(idStr);
|
||||
if (stateDPM.findUnique.data) setChartData([stateDPM.findUnique.data]);
|
||||
try {
|
||||
setIsSubmitting(true);
|
||||
const id = await stateDPM.create.create();
|
||||
if (id) {
|
||||
const idStr = String(id);
|
||||
await stateDPM.findUnique.load(idStr);
|
||||
if (stateDPM.findUnique.data) setChartData([stateDPM.findUnique.data]);
|
||||
}
|
||||
resetForm();
|
||||
router.push('/admin/pendidikan/data-pendidikan');
|
||||
} catch (error) {
|
||||
console.error("Error creating data pendidikan:", error);
|
||||
toast.error("Terjadi kesalahan saat menambahkan data pendidikan");
|
||||
} finally {
|
||||
setIsSubmitting(false);
|
||||
}
|
||||
resetForm();
|
||||
router.push('/admin/pendidikan/data-pendidikan');
|
||||
};
|
||||
|
||||
return (
|
||||
@@ -49,7 +59,7 @@ export default function CreateDataPendidikan() {
|
||||
<TextInput
|
||||
label="Nama Pendidikan"
|
||||
placeholder="Contoh: SD, SMP, SMA"
|
||||
defaultValue={stateDPM.create.form.name}
|
||||
value={stateDPM.create.form.name}
|
||||
onChange={(e) => (stateDPM.create.form.name = e.currentTarget.value)}
|
||||
radius="md"
|
||||
required
|
||||
@@ -57,25 +67,36 @@ export default function CreateDataPendidikan() {
|
||||
<TextInput
|
||||
label="Jumlah Peserta"
|
||||
placeholder="Masukkan jumlah peserta"
|
||||
defaultValue={stateDPM.create.form.jumlah}
|
||||
value={stateDPM.create.form.jumlah}
|
||||
onChange={(e) => (stateDPM.create.form.jumlah = e.currentTarget.value)}
|
||||
radius="md"
|
||||
type="number"
|
||||
required
|
||||
/>
|
||||
<Group justify="right" mt="sm">
|
||||
<Group justify="right">
|
||||
{/* Tombol Batal */}
|
||||
<Button
|
||||
onClick={handleSubmit}
|
||||
style={{
|
||||
background: `linear-gradient(135deg, ${colors['blue-button']}, ${colors['blue-button-trans']})`,
|
||||
color: 'white',
|
||||
boxShadow: '0 0 10px rgba(0,123,255,0.5)',
|
||||
'&:hover': { opacity: 0.9 },
|
||||
}}
|
||||
variant="outline"
|
||||
color="gray"
|
||||
radius="md"
|
||||
size="md"
|
||||
onClick={resetForm}
|
||||
>
|
||||
Simpan
|
||||
Reset
|
||||
</Button>
|
||||
|
||||
{/* Tombol Simpan */}
|
||||
<Button
|
||||
onClick={handleSubmit}
|
||||
radius="md"
|
||||
size="md"
|
||||
style={{
|
||||
background: `linear-gradient(135deg, ${colors['blue-button']}, #4facfe)`,
|
||||
color: '#fff',
|
||||
boxShadow: '0 4px 15px rgba(79, 172, 254, 0.4)',
|
||||
}}
|
||||
>
|
||||
{isSubmitting ? <Loader size="sm" color="white" /> : 'Simpan'}
|
||||
</Button>
|
||||
</Group>
|
||||
</Stack>
|
||||
|
||||
Reference in New Issue
Block a user