import { AppDispatch } from "@/app/store"; import { emptyEventsCal } from "@/features/Calendars/CalendarSlice"; import { Calendar } from "@/features/Calendars/CalendarTypes"; import { getCalendarDetailAsync, getCalendarsListAsync, refreshCalendarWithSyncToken, } from "@/features/Calendars/services"; import { userAttendee } from "@/features/User/models/attendee"; import { getInitials, stringToGradient } from "@/utils/avatarUtils"; import { formatDateToYYYYMMDDTHHMMSS } from "@/utils/dateUtils"; import { Avatar, Badge, Box, Typography } from "@linagora/twake-mui"; import CancelIcon from "@mui/icons-material/Cancel"; import CheckCircleIcon from "@mui/icons-material/CheckCircle"; export function renderAttendeeBadge( a: userAttendee, key: string, t: (key: string) => string, isFull?: boolean, isOrganizer?: boolean ) { const classIcon = a.partstat === "ACCEPTED" ? ( ) : a.partstat === "DECLINED" ? ( ) : null; if (!isFull) { return ; } else { return ( {classIcon} ) } > {a.cn || a.cal_address} {isOrganizer && ( {t("event.organizer")} )} ); } } export function stringToColor(string: string) { let hash = 0; for (let i = 0; i < string.length; i++) { hash = string.charCodeAt(i) + ((hash << 5) - hash); } let color = "#"; for (let i = 0; i < 3; i++) { const value = (hash >> (i * 8)) & 0xff; color += `00${value.toString(16)}`.slice(-2); } return color; } export function stringAvatar(name: string) { return { color: stringToGradient(name), children: getInitials(name), }; } export async function refreshCalendars( dispatch: AppDispatch, calendars: Calendar[], calendarRange: { start: Date; end: Date; }, calType?: "temp" ) { if (process.env.NODE_ENV === "test") return; if (!calType) { await dispatch(getCalendarsListAsync()); } const results = await Promise.allSettled( calendars.map((calendar) => dispatch( refreshCalendarWithSyncToken({ calendar, calType, calendarRange }) ).unwrap() ) ); results.forEach((result, index) => { if (result.status === "rejected") { console.error( `Failed to refresh calendar ${calendars[index].id}:`, result.reason ); } }); } export async function refreshSingularCalendar( dispatch: AppDispatch, calendar: Calendar, calendarRange: { start: Date; end: Date }, calType?: "temp" ) { const isTestEnv = process.env.NODE_ENV === "test"; dispatch(emptyEventsCal({ calId: calendar.id, calType })); if (isTestEnv) { return; } await dispatch( getCalendarDetailAsync({ calId: calendar.id, match: { start: formatDateToYYYYMMDDTHHMMSS(calendarRange.start), end: formatDateToYYYYMMDDTHHMMSS(calendarRange.end), }, calType, }) ); }