/* eslint-disable @typescript-eslint/no-explicit-any */ 'use client' import colors from '@/con/colors'; import { Box, Button, Group, Loader, Modal, Paper, Select, Stack, Text, TextInput, Title } from '@mantine/core'; import { IconArrowBack } from '@tabler/icons-react'; import { useRouter } from 'next/navigation'; import { useEffect, useState } from 'react'; import { toast } from 'react-toastify'; import { useProxy } from 'valtio/utils'; import polsekTerdekat from '../../../_state/keamanan/polsek-terdekat'; function CreatePolsekTerdekat() { const polsekState = useProxy(polsekTerdekat); const router = useRouter(); const [layananOptions, setLayananOptions] = useState<{ value: string; label: string }[]>([]); const [modalOpen, setModalOpen] = useState(false); const [namaLayananBaru, setNamaLayananBaru] = useState(""); const [isSubmitting, setIsSubmitting] = useState(false); const resetForm = () => { polsekState.create.form = { nama: "", jarakKeDesa: "", alamat: "", nomorTelepon: "", jamOperasional: "", embedMapUrl: "", namaTempatMaps: "", alamatMaps: "", linkPetunjukArah: "", layananPolsekId: "", }; }; const handleSubmit = async () => { try { setIsSubmitting(true); await polsekState.create.create(); resetForm(); router.push("/admin/keamanan/polsek-terdekat"); } catch (error) { console.error(error) toast.error("Gagal menambah polsek terdekat"); } finally { setIsSubmitting(false); } }; const fetchLayanan = async () => { try { const res = await fetch("/api/keamanan/layanan-polsek/find-many"); const data = await res.json(); if (data.success) { const options = data.data.map((item: any) => ({ value: item.id, label: item.nama, })); setLayananOptions(options); } } catch { toast.error("Gagal memuat layanan polsek"); } }; const handleTambahLayanan = async () => { if (!namaLayananBaru.trim()) return toast.warn("Nama layanan tidak boleh kosong"); try { const res = await fetch("/api/keamanan/layanan-polsek/create", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ nama: namaLayananBaru }), }); const data = await res.json(); if (data.success) { const newLayanan = { value: data.data.id, label: data.data.nama, }; setLayananOptions((prev) => [...prev, newLayanan]); await fetchLayanan(); polsekState.create.form.layananPolsekId = data.data.id; toast.success("Layanan baru ditambahkan!"); setModalOpen(false); setNamaLayananBaru(""); } else { toast.error(data.message || "Gagal menambah layanan"); } } catch { toast.error("Error menambah layanan"); } }; useEffect(() => { fetchLayanan(); }, []); return ( {/* Modal Tambah Layanan */} setModalOpen(false)} title="Tambah Layanan Polsek" centered > setNamaLayananBaru(e.currentTarget.value)} /> {/* Header */} Tambah Polsek Terdekat {/* Form */} (polsekState.create.form.nama = val.target.value)} label={Nama Polsek Terdekat} placeholder="Masukkan nama Polsek Terdekat" required /> (polsekState.create.form.jarakKeDesa = val.target.value)} label={Jarak Polsek Terdekat} placeholder="Masukkan jarak Polsek Terdekat" required /> (polsekState.create.form.alamat = val.target.value)} label={Alamat Polsek Terdekat} placeholder="Masukkan alamat Polsek Terdekat" required /> (polsekState.create.form.nomorTelepon = val.target.value)} label={Nomor Telepon Polsek Terdekat} placeholder="Masukkan nomor telepon Polsek Terdekat" required /> (polsekState.create.form.jamOperasional = val.target.value)} label={Jam Operasional Polsek Terdekat} placeholder="Masukkan jam operasional Polsek Terdekat" /> (polsekState.create.form.embedMapUrl = val.target.value)} label={Embed Map URL} placeholder="Masukkan embed map url" /> (polsekState.create.form.namaTempatMaps = val.target.value)} label={Nama Tempat Maps} placeholder="Masukkan nama tempat maps" /> (polsekState.create.form.alamatMaps = val.target.value)} label={Alamat Maps} placeholder="Masukkan alamat maps" /> (polsekState.create.form.linkPetunjukArah = val.target.value)} label={Link Petunjuk Arah} placeholder="Masukkan link petunjuk arah" />