import React, { useEffect, useState } from 'react'; import { Drawer, Typography, Spin } from 'antd'; import { useTranslation } from 'react-i18next'; import { useAppSelector } from '../../../hooks/useAppSelector'; import { useAppDispatch } from '../../../hooks/useAppDispatch'; import { themeWiseColor } from '../../../utils/themeWiseColor'; import { closeFinanceDrawer } from '../finance-slice'; import { projectFinanceApiService } from '../../../api/project-finance-ratecard/project-finance.api.service'; import { ITaskBreakdownResponse } from '../../../types/project/project-finance.types'; const FinanceDrawer = () => { const [taskBreakdown, setTaskBreakdown] = useState(null); const [loading, setLoading] = useState(false); // Get task and drawer state from Redux store const selectedTask = useAppSelector((state) => state.financeReducer.selectedTask); const isDrawerOpen = useAppSelector((state) => state.financeReducer.isFinanceDrawerOpen); useEffect(() => { if (selectedTask?.id && isDrawerOpen) { fetchTaskBreakdown(selectedTask.id); } else { setTaskBreakdown(null); } }, [selectedTask, isDrawerOpen]); const fetchTaskBreakdown = async (taskId: string) => { try { setLoading(true); const response = await projectFinanceApiService.getTaskBreakdown(taskId); setTaskBreakdown(response.body); } catch (error) { console.error('Error fetching task breakdown:', error); } finally { setLoading(false); } }; // localization const { t } = useTranslation('project-view-finance'); // get theme data from theme reducer const themeMode = useAppSelector((state) => state.themeReducer.mode); const dispatch = useAppDispatch(); const currency = useAppSelector( (state) => state.financeReducer.currency ).toUpperCase(); // function handle drawer close const handleClose = () => { setTaskBreakdown(null); dispatch(closeFinanceDrawer()); }; return ( {taskBreakdown?.task?.name || selectedTask?.name || t('noTaskSelected')} } open={isDrawerOpen} onClose={handleClose} destroyOnClose={true} width={480} >
{loading ? (
) : ( {taskBreakdown?.grouped_members?.map((group: any) => ( {/* Group Header */} {/* Member Rows */} {group.members?.map((member: any, index: number) => ( ))} ))}
{t('labourHoursColumn')} {t('costColumn')} ({currency})
{group.jobRole} {group.estimated_hours?.toFixed(2) || '0.00'} {group.estimated_cost?.toFixed(2) || '0.00'}
{member.name} {member.estimated_hours?.toFixed(2) || '0.00'} {member.estimated_cost?.toFixed(2) || '0.00'}
)}
); }; export default FinanceDrawer;