11/**
2- * PendingReviewsBanner - Self-contained pending reviews UI
2+ * ReviewsBanner - Self-contained reviews UI
33 *
44 * Features:
55 * - Collapsible banner above chat input
@@ -25,8 +25,8 @@ import {
2525import { cn } from "@/common/lib/utils" ;
2626import { Button } from "./ui/button" ;
2727import { Tooltip , TooltipTrigger , TooltipContent } from "./ui/tooltip" ;
28- import type { PendingReview } from "@/common/types/review" ;
29- import { usePendingReviews } from "@/browser/hooks/usePendingReviews " ;
28+ import type { Review } from "@/common/types/review" ;
29+ import { useReviews } from "@/browser/hooks/useReviews " ;
3030import { formatRelativeTime } from "@/browser/utils/ui/dateTime" ;
3131import { DiffRenderer } from "./shared/DiffRenderer" ;
3232import { matchesKeybind , KEYBINDS } from "@/browser/utils/ui/keybinds" ;
@@ -79,7 +79,7 @@ class BannerErrorBoundary extends Component<
7979// ═══════════════════════════════════════════════════════════════════════════════
8080
8181interface ReviewItemProps {
82- review : PendingReview ;
82+ review : Review ;
8383 onCheck : ( ) => void ;
8484 onUncheck : ( ) => void ;
8585 onSendToChat : ( ) => void ;
@@ -309,12 +309,12 @@ const ReviewItem: React.FC<ReviewItemProps> = ({
309309// MAIN BANNER COMPONENT
310310// ═══════════════════════════════════════════════════════════════════════════════
311311
312- interface PendingReviewsBannerInnerProps {
312+ interface ReviewsBannerInnerProps {
313313 workspaceId : string ;
314314}
315315
316- const PendingReviewsBannerInner : React . FC < PendingReviewsBannerInnerProps > = ( { workspaceId } ) => {
317- const pendingReviews = usePendingReviews ( workspaceId ) ;
316+ const ReviewsBannerInner : React . FC < ReviewsBannerInnerProps > = ( { workspaceId } ) => {
317+ const reviewsHook = useReviews ( workspaceId ) ;
318318 const [ isExpanded , setIsExpanded ] = useState ( false ) ;
319319 const [ showAllCompleted , setShowAllCompleted ] = useState ( false ) ;
320320
@@ -323,10 +323,10 @@ const PendingReviewsBannerInner: React.FC<PendingReviewsBannerInnerProps> = ({ w
323323 // Separate pending and completed reviews
324324 // "attached" reviews are shown in ChatInput, so we only show "pending" and "checked" here
325325 const { pendingList, completedList } = useMemo ( ( ) => {
326- const pending = pendingReviews . reviews . filter ( ( r ) => r . status === "pending" ) ;
327- const completed = pendingReviews . reviews . filter ( ( r ) => r . status === "checked" ) ;
326+ const pending = reviewsHook . reviews . filter ( ( r ) => r . status === "pending" ) ;
327+ const completed = reviewsHook . reviews . filter ( ( r ) => r . status === "checked" ) ;
328328 return { pendingList : pending , completedList : completed } ;
329- } , [ pendingReviews . reviews ] ) ;
329+ } , [ reviewsHook . reviews ] ) ;
330330
331331 // Completed reviews to display (limited unless expanded)
332332 const displayedCompleted = useMemo ( ( ) => {
@@ -342,20 +342,20 @@ const PendingReviewsBannerInner: React.FC<PendingReviewsBannerInnerProps> = ({ w
342342
343343 const handleSendToChat = useCallback (
344344 ( reviewId : string ) => {
345- pendingReviews . attachReview ( reviewId ) ;
345+ reviewsHook . attachReview ( reviewId ) ;
346346 } ,
347- [ pendingReviews ]
347+ [ reviewsHook ]
348348 ) ;
349349
350350 const handleUpdateNote = useCallback (
351351 ( reviewId : string , newNote : string ) => {
352- pendingReviews . updateReviewNote ( reviewId , newNote ) ;
352+ reviewsHook . updateReviewNote ( reviewId , newNote ) ;
353353 } ,
354- [ pendingReviews ]
354+ [ reviewsHook ]
355355 ) ;
356356
357357 // Don't show anything if no reviews
358- if ( pendingReviews . reviews . length === 0 ) {
358+ if ( reviewsHook . reviews . length === 0 ) {
359359 return null ;
360360 }
361361
@@ -370,23 +370,23 @@ const PendingReviewsBannerInner: React.FC<PendingReviewsBannerInnerProps> = ({ w
370370 < MessageSquare
371371 className = { cn (
372372 "size-3.5" ,
373- pendingReviews . pendingCount > 0 ? "text-[var(--color-review-accent)]" : "text-muted"
373+ reviewsHook . pendingCount > 0 ? "text-[var(--color-review-accent)]" : "text-muted"
374374 ) }
375375 />
376376 < span className = "text-secondary" >
377- { pendingReviews . pendingCount > 0 ? (
377+ { reviewsHook . pendingCount > 0 ? (
378378 < >
379379 < span className = "font-medium text-[var(--color-review-accent)]" >
380- { pendingReviews . pendingCount }
380+ { reviewsHook . pendingCount }
381381 </ span >
382382 { " pending review" }
383- { pendingReviews . pendingCount !== 1 && "s" }
383+ { reviewsHook . pendingCount !== 1 && "s" }
384384 </ >
385385 ) : (
386386 < span className = "text-muted" > No pending reviews</ span >
387387 ) }
388- { pendingReviews . checkedCount > 0 && (
389- < span className = "text-muted" > · { pendingReviews . checkedCount } completed</ span >
388+ { reviewsHook . checkedCount > 0 && (
389+ < span className = "text-muted" > · { reviewsHook . checkedCount } completed</ span >
390390 ) }
391391 </ span >
392392 < div className = "ml-auto" >
@@ -411,10 +411,10 @@ const PendingReviewsBannerInner: React.FC<PendingReviewsBannerInnerProps> = ({ w
411411 < ReviewItem
412412 key = { review . id }
413413 review = { review }
414- onCheck = { ( ) => pendingReviews . checkReview ( review . id ) }
415- onUncheck = { ( ) => pendingReviews . uncheckReview ( review . id ) }
414+ onCheck = { ( ) => reviewsHook . checkReview ( review . id ) }
415+ onUncheck = { ( ) => reviewsHook . uncheckReview ( review . id ) }
416416 onSendToChat = { ( ) => handleSendToChat ( review . id ) }
417- onRemove = { ( ) => pendingReviews . removeReview ( review . id ) }
417+ onRemove = { ( ) => reviewsHook . removeReview ( review . id ) }
418418 onUpdateNote = { ( note ) => handleUpdateNote ( review . id , note ) }
419419 />
420420 ) ) }
@@ -431,7 +431,7 @@ const PendingReviewsBannerInner: React.FC<PendingReviewsBannerInnerProps> = ({ w
431431 { completedList . length > 0 && (
432432 < button
433433 type = "button"
434- onClick = { pendingReviews . clearChecked }
434+ onClick = { reviewsHook . clearChecked }
435435 className = "text-muted hover:text-error text-[10px] transition-colors"
436436 >
437437 Clear
@@ -442,10 +442,10 @@ const PendingReviewsBannerInner: React.FC<PendingReviewsBannerInnerProps> = ({ w
442442 < ReviewItem
443443 key = { review . id }
444444 review = { review }
445- onCheck = { ( ) => pendingReviews . checkReview ( review . id ) }
446- onUncheck = { ( ) => pendingReviews . uncheckReview ( review . id ) }
445+ onCheck = { ( ) => reviewsHook . checkReview ( review . id ) }
446+ onUncheck = { ( ) => reviewsHook . uncheckReview ( review . id ) }
447447 onSendToChat = { ( ) => handleSendToChat ( review . id ) }
448- onRemove = { ( ) => pendingReviews . removeReview ( review . id ) }
448+ onRemove = { ( ) => reviewsHook . removeReview ( review . id ) }
449449 onUpdateNote = { ( note ) => handleUpdateNote ( review . id , note ) }
450450 />
451451 ) ) }
@@ -476,21 +476,21 @@ const PendingReviewsBannerInner: React.FC<PendingReviewsBannerInnerProps> = ({ w
476476// EXPORTED COMPONENT
477477// ═══════════════════════════════════════════════════════════════════════════════
478478
479- interface PendingReviewsBannerProps {
479+ interface ReviewsBannerProps {
480480 workspaceId : string ;
481481}
482482
483483/**
484- * Self-contained pending reviews banner.
485- * Uses usePendingReviews hook internally - only needs workspaceId.
484+ * Self-contained reviews banner.
485+ * Uses useReviews hook internally - only needs workspaceId.
486486 * Shows only "pending" and "checked" reviews (not "attached" which are in ChatInput).
487487 */
488- export const PendingReviewsBanner : React . FC < PendingReviewsBannerProps > = ( { workspaceId } ) => {
489- const pendingReviews = usePendingReviews ( workspaceId ) ;
488+ export const ReviewsBanner : React . FC < ReviewsBannerProps > = ( { workspaceId } ) => {
489+ const reviewsHook = useReviews ( workspaceId ) ;
490490
491491 return (
492- < BannerErrorBoundary onClear = { pendingReviews . clearAll } >
493- < PendingReviewsBannerInner workspaceId = { workspaceId } />
492+ < BannerErrorBoundary onClear = { reviewsHook . clearAll } >
493+ < ReviewsBannerInner workspaceId = { workspaceId } />
494494 </ BannerErrorBoundary >
495495 ) ;
496496} ;
0 commit comments