4 Commits

Author SHA1 Message Date
89d471f525 refactor: полная унификация всех модальных окон
Проведен аудит всех 6 модальных окон календаря и унифицированы стили.

Проблемы до рефакторинга:
- CalendarModal: z-[200] вместо z-[100], нет backdrop-blur-sm, нет max-h/overflow
- CalendarParticipantsModal: нет backdrop-blur-sm, нет max-h/overflow
- Другие модалы: лишние transition классы

Стандартный стиль для ВСЕХ модалов:

Overlay:
  fixed inset-0 z-[100] flex items-center justify-center
  bg-black/50 backdrop-blur-sm p-4

Контейнер:
  w-full max-w-[md/2xl] rounded-2xl bg-white p-6
  shadow-xl max-h-[90vh] overflow-y-auto

Унифицированные модалы:
✅ EventModal
✅ ViewEventDetailsModal
✅ ViewDayEventsModal
✅ CalendarModal
✅ CalendarParticipantsModal
✅ CalendarSubscriptionsModal

Результат:
- Единообразный внешний вид всех модалов
- Правильная иерархия z-index (все z-[100])
- Размытие фона везде одинаковое
- Прокрутка контента при переполнении
- Простой и понятный код без излишеств
2026-02-25 02:06:00 +03:00
1bc1883d94 style: унифицировать стили модальных окон календаря
Проблема: модальные окна имели разные стили overlay и z-index:
- EventModal: без backdrop-blur-sm, z-[100]
- ViewEventDetailsModal/ViewDayEventsModal: с backdrop-blur-sm, z-50
- CalendarSubscriptionsModal: без backdrop-blur-sm, z-[100]

Изменения:
- Все модальные окна теперь используют единый стиль overlay:
  * bg-black/50 backdrop-blur-sm (затемнение + размытие фона)
  * z-[100] (одинаковый z-index для всех)
  * p-4 (отступы для мобильных устройств)

- Добавлены плавные transitions:
  * Overlay: transition-all duration-200
  * Модальное окно: transition-all duration-300 ease-out

- Улучшен UX:
  * Единообразное визуальное оформление
  * Плавные переходы при открытии/закрытии
  * Красивый эффект размытия фона

Затронутые компоненты:
- EventModal.tsx
- ViewEventDetailsModal.tsx
- ViewDayEventsModal.tsx
- CalendarSubscriptionsModal.tsx
2026-02-25 02:01:34 +03:00
544b7f3e89 fix: исправлена работа повторяющихся событий с django-scheduler
- Исправлен RuleSerializer для корректной конвертации params между форматами:
  * Frontend отправляет dict/JSON: {"byweekday": [0, 4], "interval": 1}
  * Backend сохраняет в формате django-scheduler: "byweekday:0,4;interval:1"
  * Добавлен универсальный парсер _parse_params_input() для всех форматов

- Добавлен UX в стиле Apple Calendar для еженедельных событий:
  * Авто-выбор дня начала при включении WEEKLY
  * Информационный баннер с датой первого события если начальный день не выбран
  * Защита от перезаписи выбора пользователя через useRef

- Рефакторинг и очистка кода:
  * Удалены все отладочные console.log() и print()
  * Улучшены docstrings с примерами
  * Добавлена константа VALID_FREQUENCIES

- Исправлена загрузка событий в режиме "Все события":
  * Убрана блокировка для selectedCalendarId === null
  * События и occurrences загружаются корректно для всех календарей

Closes: повторяющиеся события теперь генерируются только в выбранные дни недели
2026-02-25 01:55:51 +03:00
93308b3267 feat(calendar): улучшенный UX - модалы просмотра перед действиями
Новые компоненты:
- ViewDayEventsModal: показывает все события в выбранный день
  - Список событий с временем и описанием
  - Кнопка "Создать событие на этот день"
  - Клик на событие → ViewEventDetailsModal

- ViewEventDetailsModal: детали события (read-only)
  - Все поля события (время, описание, участники)
  - Индикаторы повторяющихся событий �
  - Кнопки "Редактировать" и "Удалить"

Изменения в BigCalendar:
- handleSelectSlot: клик на дату → открывает ViewDayEventsModal вместо прямого создания
- handleSelectEvent: клик на событие → открывает ViewEventDetailsModal вместо прямого редактирования
- Добавлены обработчики переходов между модалами

Изменения в AppShell:
- handleOpenEventModal: логика маршрутизации модалов (дата/событие/создание)
- Добавлены обработчики для новых модалов
- sidebarEvents: состояние для передачи событий в ViewDayEventsModal
- Интеграция в CalendarCard для обоих календарей (desktop + mobile)

Преимущества UX:
- Пользователь видит контекст перед действием
- Предотвращение случайных дубликатов событий
- Логичный flow: Просмотр → Действие (create/edit/delete)
- Особенно полезно для повторяющихся событий
2026-02-25 01:04:23 +03:00