Skip to content

Recipes

Practical solutions for common filtering scenarios

Quick, copy-paste-ready code examples for solving real-world filtering problems.


Available Recipes

UI & Components

Specialized Filtering

Performance

Advanced


Quick Examples

Search Bar with Autocomplete

typescript
import { useDebouncedFilter } from '@mcabreradev/filter';

function SearchBar({ data }: { data: Product[] }) {
  const [search, setSearch] = useState('');
  const { filtered, isPending } = useDebouncedFilter(
    data,
    { name: { $contains: search } },
    { delay: 300 }
  );

  return (
    <>
      <input 
        value={search}
        onChange={(e) => setSearch(e.target.value)}
        placeholder="Search products..."
      />
      {isPending && <Spinner />}
      <Results items={filtered} />
    </>
  );
}

Multi-Select Filter

typescript
function ProductFilter({ products }: { products: Product[] }) {
  const [selectedCategories, setSelectedCategories] = useState<string[]>([]);
  const [priceRange, setPriceRange] = useState({ min: 0, max: 1000 });

  const filtered = filter(products, {
    category: { $in: selectedCategories },
    price: { $gte: priceRange.min, $lte: priceRange.max },
    inStock: true
  });

  return <ProductGrid products={filtered} />;
}
typescript
function NearbyLocations({ locations, userLocation }) {
  const nearby = filter(locations, {
    location: {
      $near: {
        center: userLocation,
        maxDistanceMeters: 5000 // 5km radius
      }
    },
    isOpen: true
  });

  return <MapView locations={nearby} />;
}

Recipe Categories

By Use Case

RecipeUse CaseDifficulty
Search FilteringSearch bars, autocomplete🟢 Easy
Table FilteringData tables, grids🟢 Easy
Form ValidationValidation logic🟡 Medium
Geospatial SearchMaps, location-based🟡 Medium
DateTime FilteringCalendars, schedules🟡 Medium
PerformanceLarge datasets🟡 Medium
Custom OperatorsDomain-specific logic🔴 Advanced
Real-TimeLive updates🔴 Advanced

Contributing Recipes

Have a useful recipe to share? We welcome contributions!

  1. Fork the repository
  2. Create your recipe in docs/recipes/
  3. Follow the recipe template
  4. Submit a pull request

See Contributing Guide for details.


See Also

Released under the MIT License.