122 Commits

Author SHA1 Message Date
lizerk
9e15001f2f feat(frontend): добавлен standalone output для production сборки 2026-03-06 19:57:45 +03:00
lizerk
ebe42a4d40 Merge branch 'frontend/Kostya' into develop
# Conflicts:
#	frontend/src/app/page.tsx
#	frontend/src/app/requests/page.tsx
#	frontend/src/lib/api.ts
2026-03-06 13:37:23 +03:00
lizerk
2794661dc0 chore(frontend): добавление media/ в .gitignore 2026-03-06 12:36:30 +03:00
lizerk
e689ee7e5a feat(frontend): добавление новых компонентов управления документами
- Добавлен DocumentMetadataEditor для редактирования метаданных
- Добавлен TagColorPicker для выбора цветов тегов
- Добавлен TagForm для создания/редактирования тегов
- Добавлен TagManagementModal для управления тегами
2026-03-06 12:31:33 +03:00
lizerk
0879da3bc1 build(frontend): обновление зависимостей
- Обновлен package-lock.json с новыми версиями зависимостей
- Добавлены недостающие пакеты в package.json
- Обновлен next-env.d.ts
2026-03-06 12:28:53 +03:00
lizerk
bf493ba9d2 refactor(frontend): обновление компонентов документов
- Удалены ссылки на document_type из DocumentUploadForm
- Удалены фильтры по статусам из DocumentRelated
- Удалены статистика статусов из DocumentsDashboard
- Обновлены экспорты компонентов (удалены устаревшие)
- Добавлены экспорты для новых компонентов тегов
2026-03-06 12:26:43 +03:00
lizerk
8c6753c188 refactor(frontend): удаление устаревших компонентов документов
- Удален DocumentStatusBadge (больше нет статусов)
- Удален DocumentWorkflowButtons (нет FSM workflow)
- Удален DocumentVersionHistory (дубль, есть другая реализация)
- Удален AdvancedSearch (заменен на фильтры)
- Удалена папка versions/ с компонентами истории версий
2026-03-06 12:23:11 +03:00
lizerk
f2bff36f3c feat(documents): рефакторинг модального окна с предпросмотром
Доработан DocumentDetailModal:
- Добавлен встроенный предпросмотр PDF и изображений
- Добавлен полноэкранный режим для предпросмотра (desktop)
- Добавлены вкладки: Предпросмотр, Информация, Активность, Ознакомления, Комментарии, Связанные
- Добавлены пропсы: onEditMetadata, onViewReport, onNavigateToRelated
- Интегрированы DocumentComments и DocumentRelated
- Улучшена шапка с полной информацией о документе на мобильных

Desktop layout:
- Split-view: предпросмотр слева (60%), вкладки справа
- Кнопка полноэкранного режима

Mobile layout:
- Вкладочная навигация
- Все метаданные видны в шапке (имя файла, размер, дата, автор)

Оптимизация page.tsx:
- Заменен встроенный модал (270 строк) на компонент DocumentDetailModal
- Удалены ненужные импорты DocumentAcknowledgement, DocumentComments, DocumentRelated
- Уменьшен размер с 1199 до 952 строк (-247 строк, -21%)
2026-03-06 12:09:23 +03:00
lizerk
6d9e6655b5 refactor(documents): удаление функционала комментариев при ознакомлении
- Удалено текстовое поле для комментариев в DocumentAcknowledgement
- Удален параметр notes из acknowledgeDocument API метода
- Удалено поле notes из интерфейса DocumentAcknowledgement
- Упрощена форма подтверждения прочтения до простой кнопки
2026-03-06 12:08:44 +03:00
lizerk
ee94bb434f fix(documents): исправление API полей для комментариев
- Изменено поле document → document_id для соответствия backend
- Изменено поле parent → parent_id для соответствия backend
- Исправлена ошибка 400 при создании комментариев к документам
2026-03-06 12:08:05 +03:00
95a0ad8293 + 2026-03-05 16:47:08 +03:00
41e4238a84 feat: add document related, comments, tags, versions components and notifications integration 2026-03-02 12:37:55 +03:00
243fffc126 refactor: Restructure document card layout for better visual hierarchy
PROBLEM:
- Document cards had unstructured layout with all elements mixed together
- No clear visual separation between sections
- Poor readability and cluttered appearance
- Actions scattered without logical grouping

SOLUTION:
Completely restructured document cards into 3 distinct sections:

1. HEADER (with light background and border-bottom)
   - Checkbox + Title (h3 with semibold)
   - Status badges (primary + acknowledgement)
   - Quick action buttons (Preview/PDF + Details) on the right
   - Improved: Buttons now have solid backgrounds (bg-sky-100, bg-gray-100) for better visibility

2. BODY (main content area)
   - Description (only if exists, with better line-height)
   - Metadata grid (3 columns on large screens):
     • Folder location (sky background with FolderOpen icon)
     • Author (gray background with User icon)
     • Created date (gray background with Calendar icon)
   - Workflow actions (only for draft/review/approved/rejected states)
   - Better spacing and visual hierarchy

3. FOOTER (conditional, only when needed)
   - Shows only if document has acknowledgement requirement OR is published/archived
   - Acknowledgement actions (Ознакомиться + Ведомость buttons)
   - Workflow for published/archived states (aligned right)
   - Light background matching header

IMPROVEMENTS:
- Clear visual sections with borders and backgrounds
- Metadata in colored pill-shaped cards instead of plain text
- Icons for all metadata fields (folder, user, calendar)
- Removed redundant 'Updated' field (not essential)
- Removed empty description text ('Описание не заполнено')
- Better button hierarchy: primary actions in header, secondary in footer
- Larger, more clickable buttons (px-3 py-1.5 instead of px-2.5 py-1)
- Consistent rounded-lg instead of mix of rounded-full/rounded-lg
- Better hover states (bg-sky-200 instead of bg-sky-100)
- Conditional rendering: footer only appears when necessary

VISUAL DESIGN:
- Header: bg-gray-50/50 with border-bottom
- Body: white background, clean content area
- Footer: bg-gray-50/50 with border-top
- Metadata cards: colored backgrounds (sky-50 for folder, gray-50 for others)
- Better border colors: border-gray-200 instead of border-gray-100

This matches the structure of modern DMS systems like Notion, Confluence, and Google Drive where cards have clear header/body/footer separation.
2026-02-28 14:15:28 +03:00
11acea9ad0 feat: Extend DocumentUploadForm with full enterprise features
PROBLEM:
- Upload form was minimal, not using full backend capabilities
- Missing: recipients, departments, acknowledgement requirement
- No folder indication when uploading to specific folder

SOLUTION - BACKEND:
- Added 'acknowledgement_required' field to DocumentWriteSerializer
- Now accepts: sent_to_all, department_ids, recipient_ids, acknowledgement_required

SOLUTION - FRONTEND:
Extended DocumentUploadForm with enterprise-grade features:

NEW FIELDS:
1. Sent to All Toggle
   - Checkbox to send document to all employees
   - When checked, hides recipients/departments selection

2. Recipients Section (when sent_to_all = false)
   - Multi-select for departments (with Building2 icon)
   - Multi-select for specific employees (with Users icon)
   - Live loading from API
   - Validation: requires at least one department OR recipient
   - Helper text for Ctrl/Cmd multi-select

3. Acknowledgement Required
   - Checkbox to require recipients to acknowledge reading
   - Clear explanation of what it means

UX IMPROVEMENTS:
- Folder indicator: shows when uploading to specific folder
- Visual sections with dividers and headers
- Icons for each field type
- Warning when no recipients selected (amber alert)
- Better validation messages
- Reset all new fields on successful upload

API CLIENT:
- Updated createDocument signature to include acknowledgement_required
- Properly serializes checkbox values as strings

DATA LOADING:
- useEffect loads departments and employees on mount
- Loading states during fetch
- Handles empty lists gracefully

VALIDATION:
- Requires file and title (unchanged)
- NEW: When sent_to_all=false, requires departments OR recipients
- Shows user-friendly error messages

BENEFITS:
- Full feature parity with backend capabilities
- Professional document management workflow
- Granular control over document distribution
- Acknowledgement tracking from upload stage
- Better UX with progressive disclosure
2026-02-28 14:04:27 +03:00
5b040f663c fix: Replace nested button with span in folder filter
Fixed React hydration error caused by button nested inside button.

ISSUE:
- Console error: 'In HTML, <button> cannot be a descendant of <button>'
- Folder dropdown button contained a reset filter button inside it
- This is invalid HTML and causes hydration mismatch

SOLUTION:
- Changed inner button to span element
- Added cursor-pointer for visual feedback
- Added role="button" for accessibility
- Added tabIndex={0} for keyboard navigation
- Added onKeyDown handler for Enter/Space key support
- Maintains full functionality and accessibility

LOCATION:
- frontend/src/app/documents/page.tsx:255-267
- Folder filter reset button

The fix ensures proper HTML structure while preserving all interactive functionality and accessibility features.
2026-02-28 14:00:03 +03:00
4025eb2b19 feat: Create modern DocumentDetailModal with tabs based on market analysis
Analyzed leading DMS solutions (Google Drive, Notion, Confluence, SharePoint, ClickUp)
and implemented enterprise-grade document modal with progressive disclosure.

NEW COMPONENT:
- DocumentDetailModal.tsx - modern tabbed interface for document details

STRUCTURE:
- Fixed header with title, metadata, quick actions, status badge
- Tab navigation: Overview | Activity | Acknowledgements | Versions
- Full-screen modal with optimized layout

TAB: OVERVIEW
- 2-column layout (66% main content, 33% sidebar)
- Document preview (images, PDF iframe, file icon fallback)
- Description section
- Workflow actions
- Sidebar with:
  • Author & dates (created, modified)
  • Folder location (breadcrumbs)
  • Tags (color badges)
  • Recipients (departments + individuals)

TAB: ACTIVITY
- Timeline placeholder for workflow events
- Ready for integration with django-reversion API
- Shows created/published events

TAB: ACKNOWLEDGEMENTS
- Reuses existing DocumentAcknowledgement component
- Progress visualization
- User list with status

TAB: VERSIONS
- Placeholder for version history
- Ready for integration with django-reversion API

IMPROVEMENTS:
- Progressive disclosure - info organized in tabs, not overwhelming
- Visual hierarchy - preview is focal point, actions always visible
- Quick actions - Open, Download, Share in header
- Rich metadata - type, size, dates, location, tags, recipients
- Scalable structure - easy to add new tabs (comments, related docs)

TYPES:
- Added document_type field (id, name, description) to Document interface
- Added tags field (id, name, color) to Document interface

DOCUMENTATION:
- docs/guides/MODERN_DOCUMENT_UI.md - comprehensive guide
- Market analysis of 5+ leading DMS solutions
- Architecture decisions and UX improvements
- Integration roadmap with django-reversion
- Future features: comments, related documents, @mentions

BENEFITS:
- Enterprise-level UX matching Confluence/SharePoint standards
- All document info accessible without context switching
- Transparent workflow and history (after backend integration)
- Modular and extensible architecture
2026-02-28 13:46:58 +03:00
8ab14d79a1 feat: Make thumbnail conditional on fullscreen mode
- Changed Modal component to support render prop pattern (children as function)
- Modal children can now receive isFullscreen state as parameter
- Changed modal size from 'xl' to 'lg' for compact default view
- Thumbnail now only shows when modal is in fullscreen mode
- In normal mode: single column with metadata and 'Open file' button
- In fullscreen mode: two columns with metadata (left) and thumbnail (right)
- Provides progressive disclosure: compact view first, expanded view on demand
2026-02-28 13:41:21 +03:00
640584be30 feat: Add two-column layout to document details modal
- Left column: metadata and information (2/3 width)
- Right column: document thumbnail preview (1/3 width)
- Thumbnail supports: images (direct display), PDFs (iframe), other files (icon placeholder)
- Added 'Open in full size' button in thumbnail section
- Removed separate file open button from main content
- Sticky positioning for thumbnail on scroll
- Responsive: single column on mobile, two columns on large screens
- Changed modal size from 'lg' to 'xl' for better layout
2026-02-28 13:37:38 +03:00
cea3db4203 feat: Enhance document details modal with comprehensive metadata
- Added metadata grid with author, creation date, file info, and file size
- Added folder location section with FolderOpen icon
- Enhanced recipients section with departments and individual recipients
- Added visual indicators with colored icon badges
- Improved layout with better spacing and visual hierarchy
- File open button now full-width for better visibility
- Shows up to 10 individual recipients with overflow indicator
2026-02-28 13:36:25 +03:00
23e122e2b5 fix: Remove duplicate max-h-[90vh] in Modal container
The max-h-[90vh] class was duplicated:
- Once in the hard-coded className
- Once in modalSizeClass variable

Now it only comes from modalSizeClass, avoiding CSS duplication
2026-02-28 13:32:50 +03:00
ba8cee22d3 refactor: Align Modal component with project-wide style
Changes to match existing modal patterns:
- Update z-index from z-50 to z-[100] for consistency
- Add backdrop-blur-sm to backdrop for modern glass effect
- Change shadow-2xl to shadow-xl (project standard)
- Move max-h-[90vh] to container level (not content div)
- Move overflow-y-auto to container for proper scrolling
- Update close button from rounded-lg to rounded-full
- Change button padding from p-2 to p-1 for tighter look
- Remove border-b from header, use mb-4 instead
- Change h2 to h3 for header title (semantic hierarchy)
- Add bottom padding div for proper spacing

Style now matches CalendarModal, EventModal, and ViewEventDetailsModal patterns
2026-02-28 13:29:08 +03:00
a92a7dcdcd feat: Improve modal functionality with advanced UX features
New features:
- Create reusable Modal component with animations
- Add useModal hook for common modal behaviors
- Add useClickOutside hook for backdrop clicks
- Implement ESC key handling for all modals
- Add focus trap to prevent focus escaping modals
- Add body scroll locking when modals are open
- Add fullscreen toggle option for modals
- Add fade-in/scale animations for smooth transitions

Modal improvements:
- Upload modal: converted to use new Modal component
- Document details modal: converted to use new Modal component
- Create folder modal: converted to use new Modal component
- Acknowledgements report: enhanced with modal hooks

Technical details:
- Modal sizes: sm, md, lg, xl, full
- Configurable close behavior (ESC, click outside, close button)
- Automatic scrollbar width compensation
- Focus restoration after modal close
- Accessible with ARIA attributes and keyboard navigation
2026-02-28 13:22:42 +03:00
6def6d2d43 feat: Improve folders UI with breadcrumbs and document counts
Backend improvements:
- Add document_count annotation to FolderViewSet queryset
- Add document_count field to FolderSerializer

Frontend improvements:
- Add folder_path display in document cards with folder icon
- Add document count badges in folder tree
- Add breadcrumbs navigation showing current folder path
- Improve folder selector button to show selected folder name
- Add clear filter button (X) to folder selector
- Add highlighted style for selected folder in selector
- Update Document interface to include folder and folder_path fields

UI enhancements:
- Folder path shown in sky-blue color with FolderOpen icon in cards
- Document count displayed in gray badge next to folder names
- Breadcrumbs allow quick navigation back to root
- Selected folder highlighted with sky-blue background
- Visual feedback for folder selection state
2026-02-28 13:15:06 +03:00
f4b5b75c01 feat: Implement folder-document integration and acknowledgements UI
Backend changes:
- Add acknowledgement_required field to Document model (migration 0009)
- Add FolderViewSet with CRUD endpoints for folder management
- Add folder_id filtering support in DocumentViewSet.get_queryset()
- Register folders endpoint in API router

Frontend changes:
- Add DocumentAcknowledgementsReport component for viewing acknowledgement status
- Add folder_id parameter to getDocuments API method
- Add currentFolderId prop to DocumentUploadForm
- Update document creation to save to selected folder
- Add folder filtering in documents list view
- Fix PDF worker loading (use local worker instead of CDN)
- Lock pdfjs-dist version to 5.4.296 to prevent conflicts
- Add postinstall script to copy PDF worker to public/

Features:
- Hierarchical folder structure with parent-child relationships
- Filter documents by selected folder
- Upload documents to specific folders
- View acknowledgement statistics with search and export
- Local PDF worker for reliable document preview
2026-02-28 13:06:41 +03:00
8e872b3593 feat(documents): Full integration - Folder Tree + All Phase 4 components
MAJOR UPDATE: Complete documents page overhaul with all advanced features!

Frontend Integration:
- Created FolderTree component (hierarchical folder navigation)
- Added sidebar with folders and quick navigation
- Integrated Dashboard view (toggle between Documents/Dashboard)
- Added Advanced Search toggle (simple/advanced modes)
- Integrated BulkActionsToolbar with multi-select checkboxes
- Added EnhancedPDFViewer for PDF files
- Select All checkbox for bulk operations
- Folder filtering support

New Components:
- FolderTree: Expandable tree with CRUD actions
- Sidebar: Folders + Quick navigation menu
- View Modes: Documents | Dashboard tabs

Updated documents/page.tsx:
- 2-column layout: Sidebar + Main content
- Bulk selection with useDocumentSelection hook
- Enhanced PDF preview for .pdf files
- Regular preview for other files
- Folder-based filtering
- Toggle sidebar visibility
- All Phase 4 components integrated

Features Now Available:
✅ Hierarchical folder navigation
✅ Bulk operations (select all, multi-select)
✅ Enhanced PDF viewer with zoom/rotate/search
✅ Advanced search with filters
✅ Dashboard with analytics
✅ Document acknowledgements (already present)
✅ Workflow buttons
✅ Status filtering

What Users Can Now See:
1. Folder tree in sidebar
2. Documents with checkboxes
3. Bulk actions toolbar when items selected
4. Advanced search option
5. Dashboard tab
6. Enhanced PDF viewer for PDFs
7. Select all functionality

Branch: feature/django-filer-documents
2026-02-28 09:51:37 +03:00
d3abf1ad67 feat(documents): Add Batch Operations and Dashboard
Phase 4 Advanced Features complete!

- Created BulkActionsToolbar component with features:
  * Multi-select documents with checkboxes
  * Batch actions: move to folder, add tags, change status, delete
  * Real-time progress tracking for batch operations
  * Undo notification with 5-second timeout
  * useDocumentSelection hook for state management

- Created DocumentsDashboard component with features:
  * Statistics cards: total docs, my docs, approved, activity
  * Line chart: uploads over last 30 days (recharts)
  * Pie chart: document type distribution
  * Bar chart: document status distribution
  * Activity feed: recent uploads, edits, status changes
  * Quick access sections: Recent, Favorites, My Documents
  * Responsive grid layout

Total Phase 4 Deliverables:
  1. ✅ Client-side processing integration into upload form
  2. ✅ Enhanced PDF Viewer with zoom, rotate, page navigation
  3. ✅ Advanced Search with filters and saved searches
  4. ✅ Batch Operations with progress tracking
  5. ✅ Dashboard & Analytics with charts
2026-02-28 09:42:08 +03:00
9e1a1d4138 feat(documents): Add Enhanced PDF Viewer and Advanced Search
- Created EnhancedPDFViewer component with features:
  * Page navigation with keyboard shortcuts
  * Zoom in/out (0.5x - 3.0x)
  * Rotate pages clockwise
  * Fit to width / Fit to page modes
  * Thumbnail sidebar for quick navigation
  * Search functionality (Ctrl+F)
  * Print support (Ctrl+P)
  * Fullscreen modal overlay

- Created AdvancedSearch component with features:
  * Full-text search with fuzzy matching (fuse.js)
  * Multiple filters: document type, status, tags, date range, author
  * Sort options: relevance, date, title, author
  * Saved searches (localStorage)
  * Results with highlighted matches
  * Active filter badges
  * Mobile-responsive grid layout
2026-02-28 09:38:57 +03:00
a315ce4f33 feat(documents): Integrate client-side processing into upload form
- Updated DocumentUploadForm to use processDocument utility
- Added real-time progress tracking with visual feedback
- Display extracted text in editable textarea
- Support compressed file upload
- Added extracted_text field to API client and backend serializer
- Auto-process PDFs, DOCX, and images on file selection
2026-02-28 09:36:17 +03:00
047e1c1763 feat(frontend): Phase 2 & 3 - Client-side document processing utilities
Created comprehensive document processing library:

� src/lib/document-utils/
├── processor.ts - Главный процессор (интеллектуальная обработка)
├── ocr.ts - OCR через Tesseract.js (rus+eng)
├── pdf.ts - PDF операции (extract text, thumbnail, split, merge, rotate)
├── docx.ts - DOCX извлечение текста (mammoth.js)
├── image.ts - Image processing (compress, crop, rotate, thumbnail)
└── index.ts - Экспорты

Возможности:
✅ Автоматическое определение типа файла
✅ OCR для изображений (client-side, не нагружает сервер)
✅ Извлечение текста из PDF и DOCX
✅ Сжатие изображений перед загрузкой
✅ Генерация thumbnails
✅ Progress callbacks для UI
✅ Оценка времени обработки
✅ TypeScript типы для всех функций

Преимущества перед server-side:
- Моментальная обратная связь
- Не нагружает backend
- Приватность (файл не уходит на сервер до загрузки)
- Экономия трафика (сжатие до отправки)
- Можно показать preview extracted text ДО upload

Phase 2 & 3 Complete!
2026-02-28 09:29:47 +03:00
82762d3ce4 feat(frontend): Install DMS libraries for client-side processing
Added libraries:
- tesseract.js: Client-side OCR (rus+eng)
- pdf-lib: PDF operations (split, merge, rotate)
- mammoth: DOCX text extraction
- fuse.js: Client-side fuzzy search
- reactflow: Workflow visualization
- recharts: Dashboard charts
- react-signature-canvas: Digital signatures
- @dnd-kit: Advanced drag & drop

Phase 2: Frontend Foundation started
2026-02-28 09:27:38 +03:00
856e08db4a fix(documents): Исправлена кнопка открытия файла и удален document_type
- Добавлена закрывающая скобка } в onClick handler
- Добавлено содержимое кнопки с иконкой Eye
- Удален блок отображения document_type (поле не существует в модели)
2026-02-28 08:48:39 +03:00
15e1367042 fix(documents): Исправлена синтаксическая ошибка в page.tsx
- Добавлен пропущенный символ < в открывающем теге div
- Удалена проверка на несуществующее поле doc.tags
2026-02-28 08:47:48 +03:00
1a86e61341 fix(documents): Упрощение формы загрузки - удалены document_type и tags
- Убраны поля document_type и tags из DocumentUploadForm
- Обновлен API клиент: createDocument и updateDocument без этих полей
- Обновлены TypeScript типы в api.ts
- Убраны document_type и tags из отображения в documents/page.tsx
- Форма теперь принимает только: title, description, file
2026-02-28 08:45:47 +03:00
12f3b7b81b feat(frontend): Полная интеграция документов с django-filer и django-fsm
- Установлены библиотеки: react-dropzone, react-pdf, pdfjs-dist, react-file-icon, @tanstack/react-table
- Обновлены TypeScript типы для Document + FSM статусы
- Обновлен API клиент: CRUD операции, FSM переходы, подтверждение прочтения
- Создан DocumentUploadForm: drag&drop загрузка файлов
- Создан DocumentStatusBadge: цветные статусы (draft/in_review/approved/published/archived/rejected)
- Создан DocumentWorkflowButtons: динамические кнопки FSM переходов
- Создан DocumentPreview: встроенный просмотр PDF с навигацией
- Создан DocumentAcknowledgement: подтверждение прочтения с комментариями
- Обновлена страница documents: фильтры, модальные окна, workflow UI
- Добавлена документация в DOCUMENTS_IMPLEMENTATION.md
2026-02-28 08:30:11 +03:00
ef725e28fe style: обновлены стили NotificationCenter под дизайн AppShell
Изменения:
- Кнопка: rounded-full как в AppShell, размер h-10 w-10
- Иконка Bell: size={18}, text-gray-600
- Badge: компактный дизайн -top-0.5 -right-0.5, размер 16px
- Dropdown: rounded-xl, shadow-lg ring-1 ring-slate-100
- Цвета: sky вместо blue (sky-600, sky-50, sky-700)
- Фон: slate-50/slate-100 вместо gray-50/gray-100
- Границы: border-slate-100
- Размеры текста: уменьшены для компактности (text-xs, text-[10px])
- Padding: уменьшен для более плотного размещения (p-3 вместо p-4)
- Точка непрочитанных: w-1.5 h-1.5 вместо w-2 h-2

Адаптивность:
- Добавлен variant prop ('default' | 'mobile')
- Мобильная версия: border + bg-gray-50 (как другие кнопки)
- Адаптивная ширина: w-80 sm:w-96
- AppShell: передан variant='mobile' для мобильной версии
2026-02-27 19:57:19 +03:00
38a027379d style: обновлены стили NotificationCenter под дизайн AppShell
Изменения:
- Кнопка: rounded-full как в AppShell, размер h-10 w-10
- Иконка Bell: size={18}, text-gray-600
- Badge: компактный дизайн -top-0.5 -right-0.5, размер 16px
- Dropdown: rounded-xl, shadow-lg ring-1 ring-slate-100
- Цвета: sky вместо blue (sky-600, sky-50, sky-700)
- Фон: slate-50/slate-100 вместо gray-50/gray-100
- Границы: border-slate-100
- Размеры текста: уменьшены для компактности (text-xs, text-[10px])
- Padding: уменьшен для более плотного размещения (p-3 вместо p-4)
- Точка непрочитанных: w-1.5 h-1.5 вместо w-2 h-2

Адаптивность:
- Добавлен variant prop ('default' | 'mobile')
- Мобильная версия: border + bg-gray-50 (как другие кнопки)
- Адаптивная ширина: w-80 sm:w-96
- AppShell: передан variant='mobile' для мобильной версии
2026-02-27 19:57:19 +03:00
7fc56c9ee1 fix: исправлена ошибка notifications.slice is not a function
- Добавлена проверка Array.isArray() в NotificationCenter
- Добавлена защита от non-array в useNotifications хук
- Исправлен импорт date-fns/locale для версии 4+
- В случае ошибки API устанавливается пустой массив []
2026-02-27 19:41:20 +03:00
acc511f4b8 fix: исправлена ошибка notifications.slice is not a function
- Добавлена проверка Array.isArray() в NotificationCenter
- Добавлена защита от non-array в useNotifications хук
- Исправлен импорт date-fns/locale для версии 4+
- В случае ошибки API устанавливается пустой массив []
2026-02-27 19:41:20 +03:00
f7ac5102de feat: реализована система уведомлений на фронтенде
Frontend:
- Установлен Sonner для toast уведомлений
- Создан Service Worker (public/sw.js) для Web Push
- Реализован хук useWebPush для управления подписками
- Добавлены утилиты Web Push (lib/push.ts)
- Создан компонент NotificationCenter с UI
- Интегрирован в AppShell (header desktop + mobile)
- Добавлен Toaster в Providers

API методы:
- getVapidPublicKey() - получение VAPID ключа
- subscribePush() - создание подписки
- unsubscribePush() - удаление подписки
- getPushSubscriptions() - список подписок

Возможности:
- � Web Push (работают даже когда вкладка закрыта)
- � NotificationCenter с badge и историей
- � Toast уведомления (Sonner)
- ⚙️ Настройки push подписок
- � Респонсивный дизайн

Документация: frontend/NOTIFICATIONS_IMPLEMENTATION.md
2026-02-27 19:39:13 +03:00
98a5095b0e feat: реализована система уведомлений на фронтенде
Frontend:
- Установлен Sonner для toast уведомлений
- Создан Service Worker (public/sw.js) для Web Push
- Реализован хук useWebPush для управления подписками
- Добавлены утилиты Web Push (lib/push.ts)
- Создан компонент NotificationCenter с UI
- Интегрирован в AppShell (header desktop + mobile)
- Добавлен Toaster в Providers

API методы:
- getVapidPublicKey() - получение VAPID ключа
- subscribePush() - создание подписки
- unsubscribePush() - удаление подписки
- getPushSubscriptions() - список подписок

Возможности:
- � Web Push (работают даже когда вкладка закрыта)
- � NotificationCenter с badge и историей
- � Toast уведомления (Sonner)
- ⚙️ Настройки push подписок
- � Респонсивный дизайн

Документация: frontend/NOTIFICATIONS_IMPLEMENTATION.md
2026-02-27 19:39:13 +03:00
1bd470c6a8 feat: расширен поиск - добавлены модели procurement, documents, notifications, schedule
- Добавлены 5 новых моделей в watson search:
  * ProcurementRequest (заявки на закупку)
  * Equipment (оборудование)
  * Document (документы)
  * Notification (уведомления)
  * Event из django-scheduler (расписание)

- Backend API: форматтеры для новых типов моделей
- Frontend: добавлены иконки и названия для новых типов
- Тесты: исправлены фикстуры, все 13 тестов проходят
- Индексы: 3895 записей проиндексировано

Итого: 12 моделей доступны для полнотекстового поиска
2026-02-27 19:02:15 +03:00
6a76b231a6 feat: расширен поиск - добавлены модели procurement, documents, notifications, schedule
- Добавлены 5 новых моделей в watson search:
  * ProcurementRequest (заявки на закупку)
  * Equipment (оборудование)
  * Document (документы)
  * Notification (уведомления)
  * Event из django-scheduler (расписание)

- Backend API: форматтеры для новых типов моделей
- Frontend: добавлены иконки и названия для новых типов
- Тесты: исправлены фикстуры, все 13 тестов проходят
- Индексы: 3895 записей проиндексировано

Итого: 12 моделей доступны для полнотекстового поиска
2026-02-27 19:02:15 +03:00
735babbd46 feat: Add frontend integration for watson search API
Backend:
- Created REST API endpoint /api/v1/search/
- Added SearchResultSerializer and SearchResponseSerializer
- Implemented search_api_view with model formatters (employee, department, post, request, chat, message, event)
- Registered search endpoint in api/v1/urls.py
- Added permission check for requests (HR can see all, users only their own)

Frontend:
- Added SearchResponse, SearchResult, SearchModelType types
- Added apiClient.search() method in lib/api.ts
- Completely rewrote search/page.tsx:
  * Single API call instead of 6 parallel requests
  * Cleaner UI with icons for each result type
  * Real-time search with loading states
  * Meta information display (email, phone, status, etc.)
  * Better performance and UX

Benefits:
- Frontend: 220 lines → 178 lines (19% reduction)
- 1 API request instead of 6 (83% less network calls)
- Server-side full-text search via watson (better relevance)
- Unified search results with metadata

Testing:
- API endpoint verified at /api/v1/search/?q=test
- Returns JSON with query, results, counts, total
- Requires authentication (IsAuthenticated decorator)
2026-02-27 18:27:36 +03:00
8fd44448f4 feat: Add frontend integration for watson search API
Backend:
- Created REST API endpoint /api/v1/search/
- Added SearchResultSerializer and SearchResponseSerializer
- Implemented search_api_view with model formatters (employee, department, post, request, chat, message, event)
- Registered search endpoint in api/v1/urls.py
- Added permission check for requests (HR can see all, users only their own)

Frontend:
- Added SearchResponse, SearchResult, SearchModelType types
- Added apiClient.search() method in lib/api.ts
- Completely rewrote search/page.tsx:
  * Single API call instead of 6 parallel requests
  * Cleaner UI with icons for each result type
  * Real-time search with loading states
  * Meta information display (email, phone, status, etc.)
  * Better performance and UX

Benefits:
- Frontend: 220 lines → 178 lines (19% reduction)
- 1 API request instead of 6 (83% less network calls)
- Server-side full-text search via watson (better relevance)
- Unified search results with metadata

Testing:
- API endpoint verified at /api/v1/search/?q=test
- Returns JSON with query, results, counts, total
- Requires authentication (IsAuthenticated decorator)
2026-02-27 18:27:36 +03:00
8596b82726 feat: add auto token refresh and increase refresh token lifetime to 90 days 2026-02-27 16:35:36 +03:00
eb77ff9291 feat: add auto token refresh and increase refresh token lifetime to 90 days 2026-02-27 16:35:36 +03:00
23844dd879 пермишен 2026-02-27 12:06:40 +03:00
a9f435ae79 пермишен 2026-02-27 12:06:40 +03:00
8a7810431d Fix WebSocket URL handling and simplify .env.local setup 2026-02-26 20:18:37 +03:00
66e82fc18a Fix WebSocket URL handling and simplify .env.local setup 2026-02-26 20:18:37 +03:00