Filter detected sellers from conversations

This commit is contained in:
jjbrunton committed 2026-08-09 14:38:03 +01:00
1 parent d5ebdec076
commit 92c54feedc
14 files changed
+97 -7

No files matched your search

@@ -15,6 +15,7 @@ export type ConversationFilter = 'all' | 'unread' | 'awaiting-reply' | 'received
export interface ConversationFilters {
search: string;
filter: ConversationFilter;
showSellers: boolean;
}
export interface ConversationsPageProps {
@@ -41,7 +42,7 @@ function ConversationListItem({ conversation, isSelected, now, onSelect }: {
return (
<li className={isSelected ? 'conversation-list-item is-selected' : 'conversation-list-item'}>
<button
aria-label={`${redditUsernameLabel(conversation.username)}, ${state}${conversation.hasReceivedImages ? ', Image received' : ''}`}
aria-label={`${redditUsernameLabel(conversation.username)}, ${state}${conversation.sellerDetected ? ', Seller' : ''}${conversation.hasReceivedImages ? ', Image received' : ''}`}
aria-pressed={isSelected}
className="conversation-list-target"
onClick={onSelect}
@@ -57,6 +58,7 @@ function ConversationListItem({ conversation, isSelected, now, onSelect }: {
</span>
</span>
<AccountOwnerBadge owner={conversation.owner} />
{conversation.sellerDetected ? <span className="conversation-seller-marker">Seller</span> : null}
{conversation.hasReceivedImages ? <span className="conversation-image-marker">Image received</span> : null}
<span>{conversation.lastMessageSnippet || 'No message preview'}</span>
</li>
@@ -66,7 +68,7 @@ function ConversationListItem({ conversation, isSelected, now, onSelect }: {
export function ConversationsPage({ selectedConversationId, onSelectedConversationChange, filters, onFiltersChange }: ConversationsPageProps) {
const conversationsQuery = useConversationsQuery();
const [internalSelectedId, setInternalSelectedId] = useState<string | null>(null);
const [localFilters, setLocalFilters] = useState<ConversationFilters>({ search: '', filter: 'all' });
const [localFilters, setLocalFilters] = useState<ConversationFilters>({ search: '', filter: 'all', showSellers: false });
const [isStartingConversation, setIsStartingConversation] = useState(false);
const [now, setNow] = useState(() => Date.now());
const activeConversationId = selectedConversationId !== undefined ? selectedConversationId : internalSelectedId;
@@ -89,7 +91,9 @@ export function ConversationsPage({ selectedConversationId, onSelectedConversati
const matchesSearch = normalizedSearch.length === 0
|| conversation.username.toLowerCase().includes(normalizedSearch)
|| conversation.lastMessageSnippet.toLowerCase().includes(normalizedSearch);
return matchesSearch && matchesFilter(conversation, activeFilters.filter);
return matchesSearch
&& matchesFilter(conversation, activeFilters.filter)
&& (activeFilters.showSellers || conversation.sellerDetected !== true);
})
.sort((left, right) => right.lastMessageTime - left.lastMessageTime);
}, [activeFilters, conversationsQuery.data]);
@@ -142,6 +146,14 @@ export function ConversationsPage({ selectedConversationId, onSelectedConversati
<option value="awaiting-reply">Awaiting reply</option>
<option value="received-images">Received images</option>
</select>
<label className="conversation-seller-toggle">
<input
checked={activeFilters.showSellers}
onChange={(event) => updateFilters({ ...activeFilters, showSellers: event.target.checked })}
type="checkbox"
/>
Show sellers
</label>
</div>
{conversationsQuery.isPending ? (
<div aria-label="Loading conversations" className="conversation-list-state" role="status">Loading conversations…</div>