Deploy
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
'use client'
|
||||
import { ArrowUpDown } from 'lucide-react'
|
||||
|
||||
export type SortOption = 'featured' | 'price-asc' | 'price-desc' | 'newest' | 'name-asc'
|
||||
|
||||
interface ProductSortProps {
|
||||
value: SortOption
|
||||
onChange: (v: SortOption) => void
|
||||
count: number
|
||||
}
|
||||
|
||||
const SORT_LABELS: Record<SortOption, string> = {
|
||||
featured: 'Featured',
|
||||
'price-asc': 'Price: Low to High',
|
||||
'price-desc': 'Price: High to Low',
|
||||
newest: 'Newest',
|
||||
'name-asc': 'Name: A–Z',
|
||||
}
|
||||
|
||||
export default function ProductSort({ value, onChange, count }: ProductSortProps) {
|
||||
return (
|
||||
<div className="flex items-center justify-between gap-4 py-3 border-b border-border">
|
||||
<p className="text-sm text-muted-foreground">
|
||||
{count} product{count !== 1 ? 's' : ''}
|
||||
</p>
|
||||
<div className="flex items-center gap-2">
|
||||
<ArrowUpDown className="h-4 w-4 text-muted-foreground" />
|
||||
<select
|
||||
value={value}
|
||||
onChange={e => onChange(e.target.value as SortOption)}
|
||||
className="text-sm bg-background border border-border rounded-lg px-3 py-1.5 text-foreground focus:outline-none focus:ring-2 focus:ring-primary/50 cursor-pointer"
|
||||
>
|
||||
{(Object.keys(SORT_LABELS) as SortOption[]).map(opt => (
|
||||
<option key={opt} value={opt}>{SORT_LABELS[opt]}</option>
|
||||
))}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
Reference in New Issue
Block a user