import type { Article } from '@/types/nostr' export type SortOption = 'newest' | 'oldest' | 'price-low' | 'price-high' export interface ArticleFilters { authorPubkey: string | null minPrice: number | null maxPrice: number | null sortBy: SortOption } interface ArticleFiltersProps { filters: ArticleFilters onFiltersChange: (filters: ArticleFilters) => void articles: Article[] } export function ArticleFiltersComponent({ filters, onFiltersChange, articles, }: ArticleFiltersProps) { // Get unique authors from articles const authors = Array.from( new Map(articles.map((a) => [a.pubkey, a.pubkey])).values() ) // Get price range from articles const prices = articles.map((a) => a.zapAmount).sort((a, b) => a - b) const minAvailablePrice = prices[0] || 0 const maxAvailablePrice = prices[prices.length - 1] || 1000 const handleAuthorChange = (e: React.ChangeEvent) => { const value = e.target.value === '' ? null : e.target.value onFiltersChange({ ...filters, authorPubkey: value }) } const handleMinPriceChange = (e: React.ChangeEvent) => { const value = e.target.value === '' ? null : parseInt(e.target.value, 10) onFiltersChange({ ...filters, minPrice: value }) } const handleMaxPriceChange = (e: React.ChangeEvent) => { const value = e.target.value === '' ? null : parseInt(e.target.value, 10) onFiltersChange({ ...filters, maxPrice: value }) } const handleSortChange = (e: React.ChangeEvent) => { onFiltersChange({ ...filters, sortBy: e.target.value as SortOption }) } const handleClearFilters = () => { onFiltersChange({ authorPubkey: null, minPrice: null, maxPrice: null, sortBy: 'newest', }) } const hasActiveFilters = filters.authorPubkey !== null || filters.minPrice !== null || filters.maxPrice !== null || filters.sortBy !== 'newest' return (

Filters & Sort

{hasActiveFilters && ( )}
{/* Author filter */}
{/* Min price filter */}
{/* Max price filter */}
{/* Sort */}
) }