From c1ac38d5ca19d2bf6b4c375bd23b98f28b07759e Mon Sep 17 00:00:00 2001 From: igor_nadein Date: Wed, 25 Feb 2026 00:52:49 +0300 Subject: [PATCH] =?UTF-8?q?feat(calendar):=20=D0=B4=D0=BE=D0=B1=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=BE=D0=BF=D1=86=D0=B8=D1=8F?= =?UTF-8?q?=20"=D0=92=D1=81=D0=B5=20=D1=81=D0=BE=D0=B1=D1=8B=D1=82=D0=B8?= =?UTF-8?q?=D1=8F"=20=D0=BF=D0=BE=20=D1=83=D0=BC=D0=BE=D0=BB=D1=87=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D1=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Frontend: - Добавлена опция "� Все события" в выбор календаря (BigCalendar и AppShell) - selectedCalendarId === null теперь показывает все события пользователя - Изменена логика loadEvents: при null используется apiClient.getMyEvents() - CalendarContext: по умолчанию selectedCalendarId === null (не выбирается первый календарь) - UX улучшение: пользователь видит все свои события сразу при загрузке страницы --- frontend/src/components/AppShell.tsx | 28 ++++++++++++++---- frontend/src/components/BigCalendar.tsx | 36 ++++++++++++++++++----- frontend/src/contexts/CalendarContext.tsx | 6 ++-- 3 files changed, 53 insertions(+), 17 deletions(-) diff --git a/frontend/src/components/AppShell.tsx b/frontend/src/components/AppShell.tsx index 521d7cf2..d34bf95a 100644 --- a/frontend/src/components/AppShell.tsx +++ b/frontend/src/components/AppShell.tsx @@ -343,17 +343,31 @@ function CalendarCard({ setLoading(true); setError(null); - // Загружаем обычные события и occurrences параллельно + // Если календарь не выбран (null) - загружаем все события пользователя + if (selectedCalendarId === null) { + const myEventsResult = await apiClient.getMyEvents({ + start: formatDateKey(fetchStart), + end: formatDateKey(fetchEnd), + }); + + if (!cancelled) { + const eventsList = Array.isArray(myEventsResult) ? myEventsResult : (myEventsResult?.results || []); + setEvents(eventsList); + } + return; + } + + // Загружаем обычные события и occurrences параллельно для конкретного календаря const [eventsResult, occurrencesResult] = await Promise.all([ apiClient.getCalendarEvents({ start: formatDateKey(fetchStart), end: formatDateKey(fetchEnd), - calendar: selectedCalendarId ?? undefined, + calendar: selectedCalendarId, }), apiClient.getOccurrences({ start: formatDateKey(fetchStart), end: formatDateKey(fetchEnd), - calendar: selectedCalendarId ?? undefined, + calendar: selectedCalendarId, }), ]); @@ -555,10 +569,14 @@ function CalendarCard({ ) : (
setSelectedCalendarId(Number(e.target.value))} + value={selectedCalendarId === null ? "" : selectedCalendarId} + onChange={(e) => { + const value = e.target.value; + setSelectedCalendarId(value === "" ? null : Number(value)); + }} className="flex-1 max-w-xs rounded-lg border border-gray-300 bg-white px-3 py-2 text-sm text-gray-800 outline-none transition focus:border-sky-500 focus:ring-2 focus:ring-sky-100" > + {calendars.map((cal) => (