import { Button } from '@/components/ui/button'; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from '@/components/ui/dialog'; import { Label } from '@/components/ui/label'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '@/components/ui/select'; import { Textarea } from '@/components/ui/textarea'; import { SakipNode } from '@/types'; import { useEffect, useState } from 'react'; import { toast } from 'sonner'; import { Input } from '../ui/input'; type SaveData = { id?: number; uraian: string; satuan?: string | null; target?: string | null; kategori: string; parent_id?: number | null; }; type SelectOption = { value: string; label: string; }; type SakipNodeModalProps = { isOpen: boolean; onOpenChange: (open: boolean) => void; selectedItem: SakipNode | null; onSave: (data: SaveData) => void; resourceName: string; title: string; parentOptions?: SelectOption[]; // Optional parent selection parentLabel?: string; // Label for the parent select }; export default function SakipNodeModal({ isOpen, onOpenChange, selectedItem, onSave, resourceName, title, parentOptions, parentLabel, }: SakipNodeModalProps) { const [uraian, setUraian] = useState(''); const [satuan, setSatuan] = useState(''); const [target, setTarget] = useState(''); const [parentId, setParentId] = useState(null); // Effect to populate form when an item is selected for editing useEffect(() => { if (selectedItem) { console.log('selectedItem', selectedItem); console.log('parent_id dari item:', selectedItem.parent_id); console.log('parentOptions:', parentOptions); setUraian(selectedItem.uraian); setSatuan(selectedItem.satuan); setTarget(selectedItem.target); setParentId( selectedItem.parent_id != null ? String(selectedItem.parent_id) // pastikan string : '', ); } else { setUraian(''); setSatuan(''); setTarget(''); setParentId(''); } }, [selectedItem, isOpen]); const isEditMode = Boolean(selectedItem); const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); if (!uraian.trim()) { toast.error('Uraian tidak boleh kosong!', { style: { background: '#dc2626', // merah color: 'white', }, }); return; } const data: SaveData = { uraian: uraian.trim(), satuan: satuan.trim() ? satuan.trim() : null, target: target.trim() ? target.trim() : null, kategori: resourceName, parent_id: parentId ? Number(parentId) : null, }; if (isEditMode && selectedItem?.id) { data.id = selectedItem.id; } onSave(data); }; return ( {isEditMode ? 'Ubah' : 'Tambah'} {title} Periksa data sebelum diinput
{/* Parent Select Input (if options are provided) */} {parentOptions && parentLabel && (
)} {/* Uraian Textarea */}