diff --git a/frontend/src/App.jsx b/frontend/src/App.jsx index 3a5dca1..e7dfb88 100644 --- a/frontend/src/App.jsx +++ b/frontend/src/App.jsx @@ -169,7 +169,7 @@ export default function App() { wonders why a conversation is public can reach the answer in two clicks. Anonymous viewers see it too. */} - About + Philosophy Docs @@ -188,9 +188,17 @@ export default function App() {
- {loading &&

Loading…

} + {loading &&

Loading your inbox…

} {!loading && items.length === 0 && ( -

No notifications match. Try a different filter, or come back later.

+
+

You're all caught up.

+

+ {filters.unread || filters.rfcSlug || filters.category + ? 'Nothing matches the current filters. Clear them to see everything.' + : 'New activity on RFCs you follow will show up here.'} +

+
)}
@@ -145,16 +164,24 @@ export default function Inbox({ onClose, lastChangeTick }) { ) } -function InboxRow({ item, onClick, onClose }) { +function InboxRow({ item, onClick, onMarkRead, onClose }) { const unread = !item.read_at const target = deepLink(item) const handle = async () => { await onClick(item) if (target) onClose?.() } + const handleMarkRead = async (e) => { + // Don't let the row's Link fire — this affordance only marks read, + // it never navigates. + e.preventDefault() + e.stopPropagation() + await onMarkRead(item) + } return ( -
  • +
  • + {item.category || '·'} {item.summary} {item.bundled_count > 1 && ( @@ -162,6 +189,24 @@ function InboxRow({ item, onClick, onClose }) { )} {formatWhen(item.created_at)} + {unread && ( + + )}
  • ) }