+
+
+
+ {isLoading && (
+
+ )}
+
+
+
+
+ {!isLoading && events.length === 0 && (
+
+ No events yet
+
+ )}
+
+
+ {events.map((event) => (
+ markAsReadMutation.mutate(id)}
+ />
+ ))}
+
+
+
+ {isFetchingNextPage && (
+
+ )}
+
+
+ );
+}
+
+function JournalEventRow({
+ event,
+ isMarkingAsRead,
+ onMarkAsRead,
+}: {
+ event: EventJournalDto;
+ isMarkingAsRead: boolean;
+ onMarkAsRead: (id: number) => void;
+}) {
+ const isUnread = event.readAt === null;
+
+ const handleMarkAsRead = () => {
+ if (!isUnread || isMarkingAsRead || hasSelectedText()) return;
+ onMarkAsRead(event.id);
+ };
+
+ return (
+
+
+ {diff.oldParts.map((part, index) => (
+
+ ))}
+
+
+ {diff.newParts.map((part, index) => (
+
+ ))}
+
+
+ );
+}
+
+function DiffPart({
+ part,
+ variant,
+}: {
+ part: DiffPartValue;
+ variant: 'added' | 'removed';
+}) {
+ if (!part.changed) {
+ return