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;