ConferenceOccurrenceDialog расширен под общий информационный диалог (клик по чипу — и для чужих, и для своих конференций): статус-бейдж (общая логика occurrenceBadge вынесена в lib/occurrenceStatus.ts, переиспользуется с ConferenceCalendar), кнопка «Редактировать», открывающая модалку формы — только когда передан ownedConference (текущий пользователь — организатор). Плюс Escape и возврат фокуса (useModalDismiss).
25 lines
1.0 KiB
TypeScript
25 lines
1.0 KiB
TypeScript
import { CheckCircle2, Clock, Play, Repeat } from 'lucide-react'
|
|
import type { OccurrenceOut } from '@/api/conferences'
|
|
|
|
export type OccurrenceBadgeKind = 'scheduled' | 'pinned' | 'live' | 'ended'
|
|
|
|
/** Общая логика статус-бейджа вхождения — используется чипом календаря и информационным окном (`ConferenceOccurrenceDialog`). */
|
|
export function occurrenceBadge(
|
|
occ: OccurrenceOut,
|
|
start: Date | null,
|
|
end: Date | null,
|
|
): { kind: OccurrenceBadgeKind; label: string } {
|
|
const now = new Date()
|
|
if (start && end && now >= start && now <= end) return { kind: 'live', label: 'Идёт сейчас' }
|
|
if (end && now > end) return { kind: 'ended', label: 'Завершена' }
|
|
if (occ.is_pinned) return { kind: 'pinned', label: 'Закреплена' }
|
|
return { kind: 'scheduled', label: 'Запланирована' }
|
|
}
|
|
|
|
export const OCCURRENCE_BADGE_ICON: Record<OccurrenceBadgeKind, typeof Clock> = {
|
|
scheduled: Clock,
|
|
pinned: Repeat,
|
|
live: Play,
|
|
ended: CheckCircle2,
|
|
}
|