/* eslint-disable react-hooks/exhaustive-deps */ 'use client' import stateStrukturBumDes from '@/app/admin/(dashboard)/_state/ekonomi/struktur-organisasi/struktur-organisasi'; import colors from '@/con/colors'; import ApiFetch from '@/lib/api-fetch'; import { ActionIcon, Box, Button, Group, Image, Loader, Paper, Select, Stack, Text, TextInput, Title } from '@mantine/core'; import { Dropzone } from '@mantine/dropzone'; import { IconArrowBack, IconPhoto, IconUpload, IconX } from '@tabler/icons-react'; import { useRouter } from 'next/navigation'; import { useEffect, useState } from 'react'; import { toast } from 'react-toastify'; import { useProxy } from 'valtio/utils'; function CreatePegawaiBumDes() { const router = useRouter(); const [previewImage, setPreviewImage] = useState<{ preview: string; file: File } | null>(null); const stateOrganisasi = useProxy(stateStrukturBumDes.pegawai) useEffect(() => { stateStrukturBumDes.posisiOrganisasi.findManyAll.load(); resetForm(); }, []); const [file, setFile] = useState(null); const [isSubmitting, setIsSubmitting] = useState(false); // Check if form is valid const isFormValid = () => { return ( stateOrganisasi.create.form.namaLengkap?.trim() !== '' && stateOrganisasi.create.form.posisiId?.trim() !== '' && file !== null ); }; const resetForm = () => { stateOrganisasi.create.form = { namaLengkap: "", gelarAkademik: "", imageId: "", tanggalMasuk: "", email: "", telepon: "", alamat: "", posisiId: "", isActive: true, }; setPreviewImage(null); setFile(null); }; const handleSubmit = async () => { if (!previewImage) { return toast.warn("Pilih file gambar terlebih dahulu"); } try { setIsSubmitting(true); // Upload gambar dulu if (!file) { return toast.warn('Silakan pilih file gambar terlebih dahulu'); } const res = await ApiFetch.api.fileStorage.create.post({ file, name: file.name, }); const uploaded = res.data?.data; if (!uploaded?.id) { return toast.error('Gagal mengunggah gambar, silakan coba lagi'); } // Set status aktif secara otomatis stateOrganisasi.create.form.isActive = true; // Simpan ID gambar ke form stateOrganisasi.create.form.imageId = uploaded.id; // Submit form await stateOrganisasi.create.submit(); // Reset form dan redirect resetForm(); toast.success("Data pegawai berhasil ditambahkan"); router.push("/admin/ekonomi/Struktur-Organisasi-Dan-Sk-Pengurus-BumDes/pegawai"); } catch (error) { console.error("Error creating pegawai:", error); toast.error("Terjadi kesalahan saat menambahkan pegawai"); } finally { setIsSubmitting(false); } }; return ( Tambah Pegawai BUMDes (stateOrganisasi.create.form.namaLengkap = e.currentTarget.value)} required /> (stateOrganisasi.create.form.gelarAkademik = e.currentTarget.value)} /> Foto Profil { const file = files[0]; if (file) { setPreviewImage({ file, preview: URL.createObjectURL(file) }); } }} maxSize={5 * 1024 ** 2} // 5MB accept={{ 'image/*': ['.jpeg', '.jpg', '.png', '.webp'] }} styles={{ root: { border: '2px dashed #ced4da', borderRadius: '8px', padding: '20px', textAlign: 'center', cursor: 'pointer', '&:hover': { borderColor: '#228be6', }, }, }} >
Seret gambar ke sini atau klik untuk memilih file Format yang didukung: JPG, PNG, WebP. Maksimal 5MB
{previewImage && ( Preview Gambar Preview { setPreviewImage(null); setFile(null); }} style={{ boxShadow: '0 2px 6px rgba(0,0,0,0.15)', }} > )}
(stateOrganisasi.create.form.tanggalMasuk = e.currentTarget.value)} /> (stateOrganisasi.create.form.email = e.currentTarget.value)} /> (stateOrganisasi.create.form.telepon = e.currentTarget.value)} /> (stateOrganisasi.create.form.alamat = e.currentTarget.value)} /> Posisi