fix: добавлена проверка выбранного календаря в мини-календаре и исправлено отображение многодневных событий
- Добавлена проверка selectedCalendarId при создании события из мини-календаря * Теперь при попытке создать событие без выбранного календаря появляется предупреждение * selectedCalendarId передается в новое событие вместо null * Добавлен useCalendar() хук в AppShell для доступа к selectedCalendarId - Исправлено отображение многодневных событий в ViewDayEventsModal * Изменена логика фильтрации событий: теперь проверяется диапазон [start, end] * Многодневные события отображаются для всех промежуточных дней, не только для начала/конца * Исправлена проблема, когда события не показывались в промежуточные дни Проблема: в большом календаре проверка была, в мини-календаре - нет. Решение: унификация логики создания события с проверкой выбранного календаря.
This commit is contained in:
parent
cd1d0f2a69
commit
1935d18482
@ -833,6 +833,7 @@ export function PageHeader({ title, subtitle, badge, eyebrow = "Раздел" }:
|
||||
|
||||
export function AppShell({ children }: AppShellProps) {
|
||||
const { user, loading } = useUser();
|
||||
const { selectedCalendarId } = useCalendar();
|
||||
const router = useRouter();
|
||||
const pathname = usePathname();
|
||||
const isMessageDialogPage = pathname.startsWith('/messages/') && pathname !== '/messages';
|
||||
@ -882,6 +883,11 @@ export function AppShell({ children }: AppShellProps) {
|
||||
|
||||
// Создание события из модала просмотра дня
|
||||
const handleCreateEventFromDay = useCallback(() => {
|
||||
if (!selectedCalendarId) {
|
||||
alert("Сначала выберите календарь");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!selectedDateForModal) return;
|
||||
|
||||
const startDate = new Date(selectedDateForModal);
|
||||
@ -894,13 +900,13 @@ export function AppShell({ children }: AppShellProps) {
|
||||
description: "",
|
||||
start: startDate.toISOString(),
|
||||
end: endDate.toISOString(),
|
||||
calendar: null,
|
||||
calendar: selectedCalendarId,
|
||||
color_event: "#3498db",
|
||||
});
|
||||
|
||||
setShowDayEventsModal(false);
|
||||
setShowEventModal(true);
|
||||
}, [selectedDateForModal]);
|
||||
}, [selectedCalendarId, selectedDateForModal]);
|
||||
|
||||
// Переход к редактированию из модала просмотра
|
||||
const handleEditFromDetails = useCallback(() => {
|
||||
|
||||
@ -27,8 +27,17 @@ export function ViewDayEventsModal({
|
||||
const capitalizedDate = formattedDate.charAt(0).toUpperCase() + formattedDate.slice(1);
|
||||
|
||||
const dayEvents = events.filter(event => {
|
||||
const eventDate = new Date(event.start);
|
||||
return eventDate.toDateString() === date.toDateString();
|
||||
const eventStart = new Date(event.start);
|
||||
const eventEnd = new Date(event.end);
|
||||
const selectedDay = new Date(date);
|
||||
|
||||
// Сбрасываем время для корректного сравнения дат
|
||||
eventStart.setHours(0, 0, 0, 0);
|
||||
eventEnd.setHours(0, 0, 0, 0);
|
||||
selectedDay.setHours(0, 0, 0, 0);
|
||||
|
||||
// Проверяем, попадает ли selectedDay в диапазон [eventStart, eventEnd]
|
||||
return selectedDay >= eventStart && selectedDay <= eventEnd;
|
||||
});
|
||||
|
||||
// Сортируем события по времени начала
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user