import React, { useState, useEffect } from 'react'; import { FeedSackColumnConfig, FEED_SACK_COLUMN_COLORS } from '../../types/counting.ts'; interface ColumnConfigModalProps { isOpen: boolean; onClose: () => void; onSave: (columns: FeedSackColumnConfig[]) => void; columns: FeedSackColumnConfig[]; availableCameras: string[]; } const ColumnConfigModal: React.FC = ({ isOpen, onClose, onSave, columns, availableCameras, }) => { const [editColumns, setEditColumns] = useState(columns); useEffect(() => { if (isOpen) { setEditColumns(columns); } }, [columns, isOpen]); if (!isOpen) return null; const handleAddColumn = () => { const usageCount = editColumns.filter((column) => column.type === 'usage').length; const nextColor = usageCount % 2 === 0 ? '#eab308' : '#a855f7'; const usedCameras = new Set(editColumns.map((c) => c.cameraName)); const availableCamera = availableCameras.find((c) => !usedCameras.has(c)) || availableCameras[0] || ''; const newColumn: FeedSackColumnConfig = { id: `col-${Date.now()}`, label: '', cameraName: availableCamera, color: nextColor, type: 'usage', kandangId: null, }; setEditColumns([...editColumns, newColumn]); }; const handleRemoveColumn = (id: string) => { setEditColumns(editColumns.filter((c) => c.id !== id)); }; const handleUpdateColumn = (id: string, field: keyof FeedSackColumnConfig, value: string) => { setEditColumns(editColumns.map((c) => (c.id === id ? { ...c, [field]: value } : c))); }; const handleSave = () => { const validColumns = editColumns.filter((c) => c.cameraName && c.label.trim() && c.type); const hasInbound = validColumns.some((c) => c.type === 'inbound'); if (!hasInbound) { alert('Minimal harus ada satu kolom "Karung Masuk"'); return; } onSave(validColumns); onClose(); }; return (
e.stopPropagation()} >

Konfigurasi Kolom

{editColumns.map((col, index) => (
Kolom {index + 1} {col.type === 'inbound' ? 'Masuk' : col.type === 'usage' ? 'Dituang' : 'Keluar'}
handleUpdateColumn(col.id, 'label', e.target.value)} placeholder="e.g., Karung Masuk" className="w-full px-3 py-2 border border-gray-300 rounded-md text-sm focus:ring-2 focus:ring-blue-500 focus:border-blue-500" />
{FEED_SACK_COLUMN_COLORS.map((color) => (
))}
); }; export default ColumnConfigModal;