/* eslint-disable react-hooks/exhaustive-deps */ 'use client' import stateStrukturPPID from '@/app/admin/(dashboard)/_state/ppid/struktur_ppid/struktur_PPID'; import colors from '@/con/colors'; import ApiFetch from '@/lib/api-fetch'; import { Box, Button, Group, Image, 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 CreatePegawaiPPID() { const router = useRouter(); const [previewImage, setPreviewImage] = useState<{ preview: string; file: File } | null>(null); const stateOrganisasi = useProxy(stateStrukturPPID.pegawai) useEffect(() => { stateStrukturPPID.posisiOrganisasi.findMany.load(); resetForm(); }, []); const resetForm = () => { stateOrganisasi.create.form = { namaLengkap: "", gelarAkademik: "", imageId: "", tanggalMasuk: "", email: "", telepon: "", alamat: "", posisiId: "", isActive: true, }; }; const handleSubmit = async () => { if (!previewImage) { return toast.warn("Pilih file gambar terlebih dahulu"); } try { // Upload gambar dulu const res = await ApiFetch.api.fileStorage.create.post({ file: previewImage.file, name: previewImage.file.name, }); const uploaded = res.data?.data; if (!uploaded?.id) { return toast.error("Gagal upload gambar"); } // 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/ppid/struktur-ppid/pegawai"); } catch (error) { console.error("Error creating pegawai:", error); toast.error("Terjadi kesalahan saat menambahkan pegawai"); } }; return ( Create Pegawai (stateOrganisasi.create.form.namaLengkap = e.currentTarget.value)} /> (stateOrganisasi.create.form.gelarAkademik = e.currentTarget.value)} /> Gambar { const file = files[0]; // Hanya ambil file pertama if (file) { setPreviewImage({ file, preview: URL.createObjectURL(file) }); } }} maxSize={5 * 1024 ** 2} // 5MB accept={{ 'image/*': ['.jpeg', '.jpg', '.png', '.webp'] }} >
Drag images here or click to select files Attach as many files as you like, each file should not exceed 5mb
{previewImage && ( Preview )}
(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)} />