review-09-block
stackzero/review-09-blockFreeBlock
stackzero publishes no description for this item.
Install it
npx shadcn@latest add https://ui.stackzero.co/r/review-09-block.jsonSource
1"use client";23import StarRating from "@/components/commerce-ui/star-rating-fractions";4import { Badge } from "@/components/ui/badge";5import { Button } from "@/components/ui/button";6import {7 DropdownMenu,8 DropdownMenuContent,9 DropdownMenuItem,10 DropdownMenuTrigger,11} from "@/components/ui/dropdown-menu";12import { Input } from "@/components/ui/input";13import { Check, Search, SlidersHorizontal, X } from "lucide-react";14import { useState } from "react";1516interface Review_09Props {17 onFilterChange?: (filters: ReviewFilters) => void;18 totalReviews?: number;19 averageRating?: number;20 commonKeywords?: string[];21}2223interface ReviewFilters {24 ratings: number[];25 sortBy: string;26 keywords: string[];27 searchTerm: string;28}2930function Review_09({31 averageRating = 4.8,32 commonKeywords = [33 "Clean",34 "Comfortable",35 "Great location",36 "Spacious",37 "Value for money",38 "Friendly host",39 "Quiet",40 "Well equipped",41 ],42 onFilterChange,43 totalReviews = 214,44}: Review_09Props) {45 const [filters, setFilters] = useState<ReviewFilters>({46 keywords: ["Clean", "Comfortable"],47 ratings: [4, 5],48 searchTerm: "",49 sortBy: "Most recent",50 });5152 const [showMobileFilters, setShowMobileFilters] = useState(false);5354 const sortOptions = [55 "Most recent",56 "Highest rated",57 "Lowest rated",58 "Most helpful",59 ];6061 const handleFilterChange = (updatedFilters: Partial<ReviewFilters>) => {62 const newFilters = { ...filters, ...updatedFilters };63 setFilters(newFilters);64 onFilterChange?.(newFilters);65 };6667 const toggleKeyword = (keyword: string) => {68 const newKeywords = filters.keywords.includes(keyword)69 ? filters.keywords.filter((k) => k !== keyword)70 : [...filters.keywords, keyword];7172 handleFilterChange({ keywords: newKeywords });73 };7475 const toggleRating = (rating: number) => {76 const newRatings = filters.ratings.includes(rating)77 ? filters.ratings.filter((r) => r !== rating)78 : [...filters.ratings, rating];7980 handleFilterChange({ ratings: newRatings });81 };8283 return (84 <div className="space-y-4 rounded-md border p-4">85 <div className="flex flex-col justify-between gap-4 border-b border-gray-200 pb-4 sm:flex-row sm:items-center dark:border-gray-800">86 <div className="space-y-1">87 <h3 className="text-xl font-semibold text-gray-900 dark:text-white">88 Reviews ({totalReviews})89 </h3>90// … truncated
What it pulls in
npm packages
Other registry items
Files it writes
More from stackzero
All 112 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| address-01-blockaddress-01-block | stackzero | Blocks | Free | 4 deps | |
| address-02-blockaddress-02-block | stackzero | Blocks | Free | 4 deps | |
| address-03-blockaddress-03-block | stackzero | Blocks | Free | 4 deps | |
| banner-01-blockbanner-01-block | stackzero | Blocks | Free | no deps | |
| banner-02-blockbanner-02-block | stackzero | Blocks | Free | no deps | |
| banner-03-blockbanner-03-block | stackzero | Blocks | Free | no deps | |
| banner-04-blockbanner-04-block | stackzero | Blocks | Free | no deps | |
| banner-05-blockbanner-05-block | stackzero | Blocks | Free | no deps |
