TanStackIntermediate
Filtering — Category ও Status
Select-based filter, params-এ যোগ, ফিল্টার বদলালে reset — বাংলায়।
5টি অংশবাংলা ভাষায়
Pagination + search-এর সাথে filter যুক্ত করি — category ও status select-এর মাধ্যমে। সবগুলো state একসাথে query params-এ মেলে।
product-filters.tsxtsx
tsx
"use client";
import { Input } from "@/components/ui/input";
import {
Select,
SelectContent,
SelectItem,
SelectTrigger,
SelectValue,
} from "@/components/ui/select";
const CATEGORIES = ["electronics", "clothing", "books", "food"];
export function ProductFilters({
searchInput,
onSearchChange,
category,
onCategoryChange,
status,
onStatusChange,
}) {
return (
<div className="flex flex-wrap items-center gap-3">
<Input
value={searchInput}
onChange={(e) => onSearchChange(e.target.value)}
placeholder="খুঁজুন…"
className="w-56"
/>
<Select value={category === undefined ? "all" : category}
onValueChange={(v) => onCategoryChange(v === "all" ? undefined : v)}>
<SelectTrigger className="w-36">
<SelectValue placeholder="Category" />
</SelectTrigger>
<SelectContent>
<SelectItem value="all">সব category</SelectItem>
{CATEGORIES.map((c) => (
<SelectItem key={c} value={c}>{c}</SelectItem>
))}
</SelectContent>
</Select>
<Select value={status ?? "all"}
onValueChange={(v) => onStatusChange(v === "all" ? undefined : v)}>
<SelectTrigger className="w-36">
<SelectValue placeholder="Status" />
</SelectTrigger>
<SelectContent>
<SelectItem value="all">সব status</SelectItem>
<SelectItem value="active">Active</SelectItem>
<SelectItem value="inactive">Inactive</SelectItem>
</SelectContent>
</Select>
</div>
);
}Filter বদলালে reset
Page-এtsx
tsx
// একসাথে সব filter effect: filter বদলে ১ম পেজে
useEffect(() => {
setPage(1);
}, [search, category, status]);অর্থহীন request এড়ান
undefined params API-তে পাঠাবেন না: search: search || undefined নিলে queryParams থেকে undefined property বাদ পরে যায়, ফলে আঘাত /products — clean URL ও কম কাজ। Axios-এ { params }-এর ভেতরে undefined auto-skip হয়।
শেষ প্যারায় নিজে practice করুন — কোড কপি করে নিজের এডিটরে চালিয়ে দেখুন।