import React from 'react'; import { useTranslation } from 'react-i18next'; import { ClockIcon } from '@heroicons/react/24/outline'; import RecurrenceDisplay from '../RecurrenceDisplay'; import TaskRecurrenceSection from '../TaskForm/TaskRecurrenceSection'; import TaskRecurringInstanceInfo from './TaskRecurringInstanceInfo'; import { Task } from '../../../entities/Task'; import { TaskIteration } from '../../../utils/tasksService'; interface TaskRecurrenceCardProps { task: Task; parentTask: Task | null; loadingParent: boolean; isEditing: boolean; recurrenceForm: { recurrence_type: string; recurrence_interval: number; recurrence_end_date: string | null; recurrence_weekday: number | null; recurrence_weekdays: number[] | null; recurrence_month_day: number | null; recurrence_week_of_month: number | null; completion_based: boolean; }; onStartEdit: () => void; onChange: (field: string, value: any) => void; onSave: () => void; onCancel: () => void; loadingIterations: boolean; nextIterations: TaskIteration[]; canEdit: boolean; } const TaskRecurrenceCard: React.FC = ({ task, parentTask, loadingParent, isEditing, recurrenceForm, onStartEdit, onChange, onSave, onCancel, loadingIterations, nextIterations, canEdit, }) => { const { t, i18n } = useTranslation(); const formatDateWithDayName = (dateString: string) => { const date = new Date(dateString); const today = new Date().toISOString().split('T')[0]; const isToday = dateString === today; const dayName = date.toLocaleDateString(i18n.language, { weekday: 'long', }); const formattedDate = date.toLocaleDateString(i18n.language, { day: 'numeric', month: 'long', }); return { dayName, formattedDate, fullText: `${dayName}, ${formattedDate}`, isToday, }; }; const renderNextIterations = () => { if (loadingIterations) { return (
{t('common.loading', 'Loading...')}
); } if (nextIterations.length === 0) { return (
{t( 'task.noUpcomingOccurrences', 'No upcoming occurrences.' )}
); } return (
{nextIterations.map((iteration, index) => { const dateInfo = formatDateWithDayName(iteration.date); return (
{dateInfo.formattedDate}
{dateInfo.dayName}
); })}
); }; return (

{t('task.recurringSetup', 'Recurring Setup')}

{ if (canEdit && !isEditing && e.key === 'Enter') { e.preventDefault(); onStartEdit(); } }} > {isEditing && canEdit ? (
) : ( <> {(task.recurrence_type && task.recurrence_type !== 'none') || (parentTask?.recurrence_type && parentTask.recurrence_type !== 'none') ? (
) : (
{t( 'task.notRecurring', 'This task is not recurring yet.' )}
)} {((task.recurrence_type && task.recurrence_type !== 'none') || (task.recurring_parent_id && parentTask?.recurrence_type && parentTask.recurrence_type !== 'none')) && (
{task.recurring_parent_id ? t( 'task.nextOccurrencesAfterThis', 'Next Occurrences After This' ) : t( 'task.nextOccurrences', 'Next Occurrences' )} {!loadingIterations && nextIterations.length > 0 && nextIterations.some( (iter) => formatDateWithDayName( iter.date ).isToday ) && ( ( {t( 'task.includingToday', 'including today' )} ) )}
{renderNextIterations()}
)} )}
); }; export default TaskRecurrenceCard;