3 Commits

Author SHA1 Message Date
28e2f1615f feat: реализован drag & drop для перемещения событий между календарями
- Создан модуль calendarEventDragDrop.js с классами DragDropState и CalendarUtils
- Реализовано перетаскивание событий между календарями через модальное окно
- Добавлена кнопка 'Переместить все' для массового перемещения
- Модальное окно отображает источник и цель перемещения
- Поддержка legacy-календарей (company/department/personal)
- Добавлены стили для подсветки drop-target (папки и календари)
- Backend: исправлена обработка null значений в serializer
- Backend: добавлен endpoint list_raw для получения немодерируемых событий
- Использованы стандартные Bootstrap стили для модалов
- Исправлено всплытие событий dragover/drop (stopPropagation)
- Эмодзи иконки для типов календарей (����)
- Toast уведомления об успехе/ошибках перемещения
2026-02-12 15:59:53 +03:00
d867ed669c refactor: вынести weekListRenderer из calendarWidget.js
Проблемы:
- calendarWidget.js слишком большой (1571 строка)
- Логика рендеринга бокового списка смешана с основной логикой
- Сложно тестировать функции отдельно

Решение:

1. Создан модуль weekListRenderer.js (163 строки):
   - renderVertical() - рендеринг списка событий недели
   - updateWeekLists() - обновление десктоп и мобильной версий списка
   - Параметризованные функции для переиспользования

2. Обновлён calendarWidget.js:
   - Удалены функции renderVertical и updateWeekLists (88 строк)
   - Добавлен импорт из weekListRenderer
   - Создана обёртка updateWeekLists с передачей параметров

Результаты:
✅ calendarWidget.js: 1571 → 1483 строки (-88, -6%)
✅ Создан переиспользуемый модуль weekListRenderer (163 строки)
✅ Улучшена тестируемость рендеринга
✅ Разделение ответственности (SRP)
✅ Полная обратная совместимость

Изменения:
- 2 files changed, 175 insertions(+), 100 deletions(-)
- Нет breaking changes
- Нет ошибок компиляции
2026-02-11 13:26:49 +03:00
46030ccab9 refactor: вынести helpers и API client из calendarWidget.js
Проблемы:
- calendarWidget.js слишком большой (1730 строк)
- Утилиты и API клиент не переиспользуются
- Сложно тестировать и поддерживать

Решение:

1. Создан модуль helpers.js (176 строк):
   - Утилиты работы с датами (toDate, startOfWeek, endOfWeek, overlaps)
   - Утилиты работы с URL (eventsUrl, addRange)
   - Утилиты форматирования (fmtWhen, truncate)
   - Утилиты UI (setWeekdaysFromMask)
   - Константы (DIGITS_RE, dayMs, hourMs)

2. Создан модуль apiClient.js (77 строк):
   - fetchJSON - универсальный fetch с обработкой JSON
   - apiGet - GET запрос к API
   - apiDelete - DELETE запрос к API

3. Обновлён calendarWidget.js:
   - Удалены дублирующиеся функции (134 строки)
   - Добавлены импорты из новых модулей
   - Все вызовы функций остались идентичными

Результаты:
✅ calendarWidget.js: 1730 → 1596 строк (-134, -8%)
✅ Создано 2 переиспользуемых модуля (253 строки)
✅ Улучшена тестируемость (юнит-тесты для helpers/apiClient)
✅ Повышена модульность (7/10 → 8/10)
✅ Полная обратная совместимость

Изменения:
- 4 files changed, 579 insertions(+), 162 deletions(-)
- Нет breaking changes
- Нет ошибок компиляции
2026-02-11 13:22:58 +03:00