import React, { useState, useEffect } from 'react'; import { useParams, useNavigate } from 'react-router-dom'; import { Box, Typography, Paper, CircularProgress, Alert, TextField, Button, Select, MenuItem, FormControl, InputLabel, Grid, Link } from '@mui/material'; import { getActionItemDetails, updateActionItem, uploadAttachment } from '../services/api'; const ActionItemPage = () => { const { actionId } = useParams(); const navigate = useNavigate(); const [actionItem, setActionItem] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(''); const [isEditing, setIsEditing] = useState(false); const [attachment, setAttachment] = useState(null); useEffect(() => { const fetchActionItem = async () => { setLoading(true); try { const data = await getActionItemDetails(actionId); setActionItem(data); } catch (err) { setError(err.message || 'Could not fetch action item details.'); } finally { setLoading(false); } }; fetchActionItem(); }, [actionId]); const handleUpdate = async () => { if (!actionItem) return; setLoading(true); try { // Only send fields that are meant to be updated const updateData = { item: actionItem.item, action: actionItem.action, status: actionItem.status, due_date: actionItem.due_date, // owner_id is typically not changed from this screen, but could be added if needed }; await updateActionItem(actionId, updateData); if (attachment) { // Note: The backend needs an endpoint to handle attachment uploads for an action item. // This is a placeholder for that functionality. // await uploadAttachment(actionId, attachment); console.warn("Attachment upload functionality is not yet implemented on the backend."); } setIsEditing(false); // Refresh data after update const data = await getActionItemDetails(actionId); setActionItem(data); } catch (err) { setError(err.response?.data?.error || 'Failed to update action item.'); } finally { setLoading(false); } }; const handleFileChange = (event) => { setAttachment(event.target.files[0]); }; if (loading) return ; if (error) return {error}; if (!actionItem) return No action item found.; return ( Action Item for: {actionItem.meeting?.topic || 'General Task'} setActionItem({ ...actionItem, item: e.target.value })} InputProps={{ readOnly: !isEditing }} variant={isEditing ? "outlined" : "filled"} /> setActionItem({ ...actionItem, action: e.target.value })} InputProps={{ readOnly: !isEditing }} variant={isEditing ? "outlined" : "filled"} /> Status setActionItem({ ...actionItem, due_date: e.target.value })} InputProps={{ readOnly: !isEditing }} variant={isEditing ? "outlined" : "filled"} InputLabelProps={{ shrink: true }} /> Owner: {actionItem.owner?.username || 'N/A'} {actionItem.attachment_path && ( Attachment: Download )} {isEditing && ( {attachment && {attachment.name}} )} {isEditing ? ( ) : ( )} ); }; export default ActionItemPage;