/** * Mock activity-events для DealDetailDrawer timeline. * * На API будет `GET /api/deals/{id}/events` — выборка из `activity_log` по * tenant_id (RLS) + deal_id. По схеме v8.7 §10.2 (activity_log table). * * Типы событий — соответствуют ActivityLog event-константам: * `deal.created`, `deal.status_changed`, `deal.viewed`, `deal.commented`, * `deal.assigned`, `deal.balance_charged` и т.п. */ export interface DealEvent { id: number; type: | 'deal.created' | 'deal.status_changed' | 'deal.viewed' | 'deal.commented' | 'deal.assigned' | 'deal.balance_charged'; actor: { initials: string; name: string } | null; // null = system minutesAgo: number; detail: string; } export const MOCK_EVENTS: DealEvent[] = [ { id: 1, type: 'deal.created', actor: null, minutesAgo: 28, detail: 'Лид принят с источника Я.Директ → landing-1', }, { id: 2, type: 'deal.balance_charged', actor: null, minutesAgo: 28, detail: 'Списано 1 лид с баланса (стоимость 1 850 ₽)', }, { id: 3, type: 'deal.assigned', actor: { initials: 'СА', name: 'Система автораспределения' }, minutesAgo: 27, detail: 'Назначен менеджер: Иван П.', }, { id: 4, type: 'deal.viewed', actor: { initials: 'ИП', name: 'Иван П.' }, minutesAgo: 18, detail: 'Менеджер открыл карточку', }, { id: 5, type: 'deal.status_changed', actor: { initials: 'ИП', name: 'Иван П.' }, minutesAgo: 12, detail: 'Новые → Просмотрено', }, { id: 6, type: 'deal.commented', actor: { initials: 'ИП', name: 'Иван П.' }, minutesAgo: 8, detail: 'Дозвонился, заинтересована — перезвоню после 14:00', }, ]; export function eventTypeLabel(type: DealEvent['type']): string { const map: Record = { 'deal.created': 'Создана', 'deal.status_changed': 'Смена статуса', 'deal.viewed': 'Просмотр', 'deal.commented': 'Комментарий', 'deal.assigned': 'Назначение', 'deal.balance_charged': 'Списание', }; return map[type]; } export function eventTypeIcon(type: DealEvent['type']): string { const map: Record = { 'deal.created': 'mdi-plus-circle-outline', 'deal.status_changed': 'mdi-swap-horizontal', 'deal.viewed': 'mdi-eye-outline', 'deal.commented': 'mdi-comment-outline', 'deal.assigned': 'mdi-account-arrow-right-outline', 'deal.balance_charged': 'mdi-currency-rub', }; return map[type]; }