diff --git a/web/src/ui/timeline/TimelineEvent.css b/web/src/ui/timeline/TimelineEvent.css index 1b3ae4b..141c9d3 100644 --- a/web/src/ui/timeline/TimelineEvent.css +++ b/web/src/ui/timeline/TimelineEvent.css @@ -9,6 +9,10 @@ div.timeline-event { "avatar gap content status" auto / 2.5rem .25rem 1fr 2rem; + &:hover { + background-color: #eee; + } + > div.sender-avatar { grid-area: avatar; @@ -111,6 +115,17 @@ div.timeline-event { } } +div.date-separator { + display: flex; + align-items: center; + gap: .5rem; + + > hr { + flex: 1; + opacity: .2; + } +} + div.html-body { overflow: hidden; img[data-mx-emoticon] { diff --git a/web/src/ui/timeline/TimelineEvent.tsx b/web/src/ui/timeline/TimelineEvent.tsx index 8b8e47a..35c8a40 100644 --- a/web/src/ui/timeline/TimelineEvent.tsx +++ b/web/src/ui/timeline/TimelineEvent.tsx @@ -54,6 +54,7 @@ function getBodyType(evt: MemDBEvent): React.FunctionComponent `${time.getHours().toString().padStart(2, "0")}:${time.getMinutes().toString().padStart(2, "0")}` @@ -67,11 +68,11 @@ const EventReactions = ({ reactions }: { reactions: Record }) => const EventSendStatus = ({ evt }: { evt: MemDBEvent }) => { if (evt.send_error && evt.send_error !== "not sent") { - return
+ return
} else if (evt.event_id.startsWith("~")) { - return
+ return
} else { - return
+ return
} } @@ -92,7 +93,7 @@ const TimelineEvent = ({ room, evt, prevEvt }: TimelineEventProps) => { const fullTime = fullTimeFormatter.format(eventTS) const shortTime = formatShortTime(eventTS) const editTime = editEventTS ? `Edited at ${fullTimeFormatter.format(editEventTS)}` : null - return
+ const mainEvent =
{
{evt.transaction_id ? : null}
+ let dateSeparator = null + const prevEvtDate = prevEvt ? new Date(prevEvt.timestamp) : null + if (prevEvtDate && ( + eventTS.getDay() !== prevEvtDate.getDay() || + eventTS.getMonth() !== prevEvtDate.getMonth() || + eventTS.getFullYear() !== prevEvtDate.getFullYear())) { + dateSeparator =
+
+ {dateFormatter.format(eventTS)} +
+
+ } + return <> + {dateSeparator} + {mainEvent} + } export default TimelineEvent