{ "$schema": "https://ui.shadcn.com/schema/registry-item.json", "name": "review-overview", "type": "registry:component", "title": "Review Overview", "description": "Displays an overview of review statistics including average rating, rating distribution bars, and review counts", "dependencies": [ "react", "@registry/react" ], "registryDependencies": [ "https://components.thgaltitude.com/r/react/ratings", "https://components.thgaltitude.com/r/react/progress-bar", "https://components.thgaltitude.com/r/react/button" ], "files": [ { "path": "registry/react/component/review-overview.tsx", "content": "import React from \"react\";\nimport Ratings from \"@registry/react/ui/ratings\";\nimport ProgressBar from \"@registry/react/ui/progress-bar\";\nimport { Button } from \"@registry/react/ui/button\";\n\ninterface RatingScore {\n [key: number]: number;\n}\n\ntype CreateAction = \"CREATE\";\n\ninterface ReviewOverviewProps {\n averageRating?: number;\n reviewCount?: number;\n maxRating?: number;\n minRating?: number;\n ratings?: RatingScore;\n onCreate?: (action: CreateAction) => void;\n}\n\nexport const ReviewOverview: React.FC = ({\n averageRating = 2.5,\n reviewCount = 1,\n maxRating = 5,\n minRating = 1,\n ratings = {},\n onCreate,\n}) => {\n const getTotalRatings = () => {\n return Object.values(ratings).reduce((total, count) => total + count, 0);\n };\n\n const totalRatings = getTotalRatings();\n\n const ratingValues = Array.from(\n { length: maxRating - minRating + 1 },\n (_, i) => maxRating - i\n );\n\n return (\n
\n

Customer Reviews

\n
\n \n ({averageRating})\n
\n {totalRatings} Reviews\n
\n {Object.keys(ratings).length > 0 && (\n <>\n {ratingValues.map((ratingValue) => {\n const ratingCount = ratings[ratingValue] || 0;\n return (\n \n
\n {ratingValue}\n \n \n
\n
\n \n {ratings[ratingValue] || 0}\n \n
\n
\n );\n })}\n \n )}\n
\n {onCreate && (\n onCreate(\"CREATE\")}\n >\n Create Review\n \n )}\n
\n );\n};\n\nexport default ReviewOverview;\n", "type": "registry:component", "target": "react/component/review-overview.tsx" } ] }