import React, { useState, useEffect } from 'react'; import { useParams, useNavigate } from 'react-router-dom'; import { Layout, Card, Row, Col, Typography, Space, Button, Spin, Result, Input, } from 'antd'; import { ArrowLeftOutlined, CloseCircleFilled, WarningFilled, CheckCircleFilled, InfoCircleFilled, CloseOutlined, BookOutlined, ToolOutlined, HistoryOutlined, FilePdfOutlined, PlusOutlined, UserOutlined, } from '@ant-design/icons'; // Path disesuaikan karena lokasi file berubah // import { getNotificationById } from '../../api/notification'; // Dihapus karena belum ada di file API import UserHistoryModal from '../notification/component/UserHistoryModal'; import LogHistoryModal from '../notification/component/LogHistoryModal'; const { Content } = Layout; const { Text, Paragraph, Link } = Typography; // Menggunakan kembali fungsi transform dari ListNotification untuk konsistensi data const transformNotificationData = (item) => ({ id: `notification-${item.notification_error_id || 'dummy'}-0`, type: item.is_read ? 'resolved' : item.is_delivered ? 'warning' : 'critical', title: item.device_name || 'Unknown Device', issue: item.error_code_name || 'Unknown Error', description: `${item.error_code} - ${item.error_code_name}`, timestamp: new Date(item.created_at || Date.now()).toLocaleString('id-ID'), location: item.device_location || 'Location not specified', details: item.message_error_issue || 'No details available', link: '#', subsection: item.solution_name || 'N/A', isRead: item.is_read || false, status: item.is_read ? 'Resolved' : item.is_delivered ? 'Delivered' : 'Pending', tag: item.error_code, plc: item.plc || 'N/A', }); const getDummyNotificationById = (id) => { console.log("Fetching dummy data for ID:", id); // Data mentah dummy, seolah-olah dari API const rawDummyData = { device_name: 'Compressor C-101', error_code_name: 'High Temperature', error_code: 'TEMP-H-303', device_location: 'Gudang Produksi A', message_error_issue: 'Suhu kompresor terdeteksi melebihi ambang batas aman.', is_delivered: true, plc: 'PLC-UTL-01' }; // Mengolah data mentah dummy menggunakan transform function return transformNotificationData(rawDummyData); }; const getIconAndColor = (type) => { switch (type) { case 'critical': return { IconComponent: CloseCircleFilled, color: '#ff4d4f', bgColor: '#fff1f0' }; case 'warning': return { IconComponent: WarningFilled, color: '#faad14', bgColor: '#fffbe6' }; case 'resolved': return { IconComponent: CheckCircleFilled, color: '#52c41a', bgColor: '#f6ffed' }; default: return { IconComponent: InfoCircleFilled, color: '#1890ff', bgColor: '#e6f7ff' }; } }; const IndexSparepartGudang = () => { const { notificationId } = useParams(); // Mungkin perlu disesuaikan jika route berbeda const navigate = useNavigate(); const [notification, setNotification] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const [modalContent, setModalContent] = useState(null); // 'user', 'log', atau null useEffect(() => { const fetchDetail = async () => { try { setLoading(true); // Ganti dengan fungsi API asli Anda // const response = await getNotificationById(notificationId); // setNotification(response.data); // Menggunakan data dummy untuk sekarang const dummyData = getDummyNotificationById(notificationId); if (dummyData) { setNotification(dummyData); } else { throw new Error('Notification not found'); } } catch (err) { setError(err.message); } finally { setLoading(false); } }; fetchDetail(); }, [notificationId]); if (loading) { return ( ); } if (error || !notification) { return ( navigate('/notification')}>Back to List} /> ); } const { color } = getIconAndColor(notification.type); return ( } onClick={() => navigate('/notification')} style={{ paddingLeft: 0 }} > Back to notification list } onClick={() => setModalContent('user')} > User History Error Notification Detail {/* Kolom Kiri: Data Kompresor */} {notification.title} {notification.issue} Plant Subsection {notification.subsection} Time {notification.timestamp} ValueN/A TresholdN/A {/* Kolom Kanan: Informasi Teknis */} PLC{notification.plc || 'N/A'} Status{notification.status} Tag{notification.tag} Handling Guideline Spare Part setModalContent('log')} style={{ cursor: 'pointer' }}>Log Activity Error 303.pdflihat disini SOP Kompresor.pdflihat disini AvailableAir FilterFilters incoming air to remove dust. setModalContent('log')}>View Logs}>Click 'View Logs' to see the full activity history. setModalContent(null)} notificationData={notification} /> setModalContent(null)} notificationData={notification} /> ); }; export default IndexSparepartGudang;