import React from 'react'; import { Button, Divider, Flex, Popconfirm, Typography, Space } from '@/shared/antd-imports'; import { colors } from '@/styles/colors'; import { ITaskLogViewModel } from '@/types/tasks/task-log-view.types'; import SingleAvatar from '@/components/common/single-avatar/single-avatar'; import { formatDateTimeWithUserTimezone } from '@/utils/format-date-time-with-user-timezone'; import { calculateTimeGap } from '@/utils/calculate-time-gap'; import './time-log-item.css'; import { taskTimeLogsApiService } from '@/api/tasks/task-time-logs.api.service'; import { useAppSelector } from '@/hooks/useAppSelector'; import { useAppDispatch } from '@/hooks/useAppDispatch'; import { setTimeLogEditing } from '@/features/task-drawer/task-drawer.slice'; import TimeLogForm from './time-log-form'; import { useAuthService } from '@/hooks/useAuth'; type TimeLogItemProps = { log: ITaskLogViewModel; onDelete?: () => void; }; const TimeLogItem = ({ log, onDelete }: TimeLogItemProps) => { const { user_name, avatar_url, time_spent_text, logged_by_timer, created_at, user_id, description, } = log; const { selectedTaskId } = useAppSelector(state => state.taskDrawerReducer); const dispatch = useAppDispatch(); const currentSession = useAuthService().getCurrentSession(); const renderLoggedByTimer = () => { if (!logged_by_timer) return null; return ( <> via Timer about{' '} {logged_by_timer} ); }; const canDelete = user_id === currentSession?.id; const handleDeleteTimeLog = async (logId: string | undefined) => { if (!logId || !selectedTaskId) return; const res = await taskTimeLogsApiService.delete(logId, selectedTaskId); if (res.done) { if (onDelete) onDelete(); } }; const handleEdit = () => { dispatch( setTimeLogEditing({ isEditing: true, logBeingEdited: log, }) ); }; const renderActionButtons = () => { if (!canDelete) return null; return ( handleDeleteTimeLog(log.id)} > ); }; return (
{user_name} logged{' '} {time_spent_text}{' '} {renderLoggedByTimer()} {calculateTimeGap(created_at || '')} {formatDateTimeWithUserTimezone(created_at || '', currentSession?.timezone_name)} {renderActionButtons()} {description && ( {description} )}
); }; export default TimeLogItem;