diff --git a/frontend/src/components/calendar/ConferenceOccurrenceDialog.tsx b/frontend/src/components/calendar/ConferenceOccurrenceDialog.tsx index ff01426..6468c72 100644 --- a/frontend/src/components/calendar/ConferenceOccurrenceDialog.tsx +++ b/frontend/src/components/calendar/ConferenceOccurrenceDialog.tsx @@ -1,10 +1,15 @@ import { Link, useNavigate } from 'react-router-dom' -import { Calendar, Lock, Play, Repeat, X } from 'lucide-react' -import type { OccurrenceOut } from '@/api/conferences' +import { Calendar, Hash, Lock, Pencil, Play, Repeat, X } from 'lucide-react' +import type { ConferenceOut, OccurrenceOut } from '@/api/conferences' +import { occurrenceBadge, OCCURRENCE_BADGE_ICON } from '@/lib/occurrenceStatus' +import { useModalDismiss } from '@/hooks/useModalDismiss' interface ConferenceOccurrenceDialogProps { occurrence: OccurrenceOut + /** Присутствует только когда текущий пользователь — организатор этого вхождения (`is_owner`) — показывает кнопку «Редактировать». */ + ownedConference?: ConferenceOut onClose: () => void + onEdit?: (conference: ConferenceOut) => void } function formatRange(startsAt: string, endsAt: string): string { @@ -18,14 +23,19 @@ function formatRange(startsAt: string, endsAt: string): string { /** * Быстрый просмотр вхождения конференции по клику на чип в календаре — для - * конференций, которые пользователь не организует (не владелец — - * `is_owner`): свои конференции CalendarPage открывает сразу в форме - * редактирования (`ConferenceFormCard`). Здесь — минимум: когда, статус, вход - * и ссылка на управление; подробности состава участников/организатора — в - * ховер-карточке при наведении/фокусе на чип (`ConferenceHoverCard`). + * всех конференций, включая свои: редактирование теперь отдельное действие + * (карандашик на чипе или кнопка «Редактировать» здесь, у владельца), сам + * клик по чипу всегда открывает это окно. Показывает статус, время, номер и, + * для владельца, вход в редактирование; подробности состава + * участников/организатора — в ховер-карточке при наведении/фокусе на чип + * (`ConferenceHoverCard`). */ -export function ConferenceOccurrenceDialog({ occurrence, onClose }: ConferenceOccurrenceDialogProps) { +export function ConferenceOccurrenceDialog({ occurrence, ownedConference, onClose, onEdit }: ConferenceOccurrenceDialogProps) { const navigate = useNavigate() + useModalDismiss(onClose) + + const badge = occurrenceBadge(occurrence, new Date(occurrence.starts_at), new Date(occurrence.ends_at)) + const BadgeIcon = OCCURRENCE_BADGE_ICON[badge.kind] return (
@@ -40,13 +50,18 @@ export function ConferenceOccurrenceDialog({ occurrence, onClose }: ConferenceOc
+ + +
-
@@ -63,10 +78,18 @@ export function ConferenceOccurrenceDialog({ occurrence, onClose }: ConferenceOc