import React, { useEffect, useState, useMemo } from 'react'; import { useTranslation } from 'react-i18next'; import { getFirstDayOfWeek } from '../../../utils/profileService'; interface WeekdaySelectorProps { selectedDays: number[]; onChange: (days: number[]) => void; disabled?: boolean; } const WeekdaySelector: React.FC = ({ selectedDays = [], onChange, disabled = false, }) => { const { t } = useTranslation(); const [firstDayOfWeek, setFirstDayOfWeek] = useState(null); useEffect(() => { const loadFirstDayOfWeek = async () => { try { const day = await getFirstDayOfWeek(); console.log('Loaded first day of week from profile:', day); setFirstDayOfWeek(day); } catch (error) { console.error('Error loading first day of week:', error); setFirstDayOfWeek(1); // Default to Monday on error } }; loadFirstDayOfWeek(); }, []); // All weekdays with their short names - use useMemo to recalculate when translations change const allWeekdays = useMemo( () => [ { value: 0, short: t('weekdays.sunday', 'Sun'), full: t('weekdaysFull.sunday', 'Sunday'), }, { value: 1, short: t('weekdays.monday', 'Mon'), full: t('weekdaysFull.monday', 'Monday'), }, { value: 2, short: t('weekdays.tuesday', 'Tue'), full: t('weekdaysFull.tuesday', 'Tuesday'), }, { value: 3, short: t('weekdays.wednesday', 'Wed'), full: t('weekdaysFull.wednesday', 'Wednesday'), }, { value: 4, short: t('weekdays.thursday', 'Thu'), full: t('weekdaysFull.thursday', 'Thursday'), }, { value: 5, short: t('weekdays.friday', 'Fri'), full: t('weekdaysFull.friday', 'Friday'), }, { value: 6, short: t('weekdays.saturday', 'Sat'), full: t('weekdaysFull.saturday', 'Saturday'), }, ], [t] ); // Reorder weekdays based on first day of week - use useMemo to recalculate when firstDayOfWeek changes const orderedWeekdays = useMemo(() => { if (firstDayOfWeek === null) return allWeekdays; // Return default order while loading console.log('Reordering weekdays with firstDayOfWeek:', firstDayOfWeek); const ordered = [ ...allWeekdays.slice(firstDayOfWeek), ...allWeekdays.slice(0, firstDayOfWeek), ]; console.log( 'Ordered weekdays:', ordered.map((w) => w.short).join(', ') ); return ordered; }, [allWeekdays, firstDayOfWeek]); const toggleDay = (day: number) => { if (disabled) return; const newSelectedDays = selectedDays.includes(day) ? selectedDays.filter((d) => d !== day) : [...selectedDays, day].sort((a, b) => a - b); onChange(newSelectedDays); }; return (
{orderedWeekdays.map((weekday) => { const isSelected = selectedDays.includes(weekday.value); return ( ); })}
{selectedDays.length === 0 && !disabled && (

{t( 'forms.task.selectAtLeastOneDay', 'Please select at least one day' )}

)}
); }; export default WeekdaySelector;