"use client"; import { type Dispatch, type SetStateAction } from "react"; import { Table2 } from "lucide-react"; import { RowActions } from "@/app/components/shared/RowActions"; import type { MikeDocument, TabularReview } from "@/app/components/shared/types"; import { CHECK_W, formatDate, NAME_COL_W } from "./ProjectPageParts"; export function ProjectReviewsTab({ docs, reviews, filteredReviews, selectedReviewIds, allReviewsSelected, someReviewsSelected, renamingReviewId, renameReviewValue, creatingReview, currentUserId, onCreateReview, onOpenReview, onDeleteReview, onOwnerOnlyAction, submitReviewRename, setSelectedReviewIds, setRenamingReviewId, setRenameReviewValue, }: { docs: MikeDocument[]; reviews: TabularReview[]; filteredReviews: TabularReview[]; selectedReviewIds: string[]; allReviewsSelected: boolean; someReviewsSelected: boolean; renamingReviewId: string | null; renameReviewValue: string; creatingReview: boolean; currentUserId?: string | null; onCreateReview: () => void; onOpenReview: (reviewId: string) => void; onDeleteReview: (review: TabularReview) => Promise | void; onOwnerOnlyAction: (action: string) => void; submitReviewRename: (reviewId: string) => Promise | void; setSelectedReviewIds: Dispatch>; setRenamingReviewId: Dispatch>; setRenameReviewValue: Dispatch>; }) { return ( <>
{ if (el) el.indeterminate = someReviewsSelected; }} onChange={() => { if (allReviewsSelected) setSelectedReviewIds([]); else setSelectedReviewIds( filteredReviews.map((r) => r.id), ); }} className="h-2.5 w-2.5 rounded border-gray-200 cursor-pointer accent-black" />
Name
Columns
Documents
Created
{reviews.length === 0 ? (

Tabular Reviews

Extract data from project documents into tables using AI.

) : (
{filteredReviews.map((review) => (
{ if (renamingReviewId === review.id) return; onOpenReview(review.id); }} className="group flex items-center h-10 pr-8 border-b border-gray-50 hover:bg-gray-50 cursor-pointer transition-colors" >
e.stopPropagation()} > setSelectedReviewIds((prev) => prev.includes(review.id) ? prev.filter( (x) => x !== review.id, ) : [...prev, review.id], ) } className="h-2.5 w-2.5 rounded border-gray-200 cursor-pointer accent-black" />
{renamingReviewId === review.id ? ( setRenameReviewValue(e.target.value) } onKeyDown={(e) => { if (e.key === "Enter") void submitReviewRename(review.id); if (e.key === "Escape") setRenamingReviewId(null); }} onBlur={() => void submitReviewRename(review.id) } onClick={(e) => e.stopPropagation()} className="w-full text-sm text-gray-800 bg-transparent outline-none" /> ) : ( {review.title ?? "Untitled Review"} )}
{review.columns_config?.length ?? 0}
{review.document_count ?? 0}
{review.created_at ? ( formatDate(review.created_at) ) : ( )}
e.stopPropagation()} > { if ( currentUserId && review.user_id !== currentUserId ) { onOwnerOnlyAction( "rename this tabular review", ); return; } setRenameReviewValue( review.title ?? "Untitled Review", ); setRenamingReviewId(review.id); }} onDelete={() => onDeleteReview(review)} />
))}
)} ); }