import VisibilityBadge from "../badges/visibility-badge" import FadeIn from "@components/fade-in" import ExpirationBadge from "@components/badges/expiration-badge" import CreatedAgoBadge from "@components/badges/created-ago-badge" import { useRouter } from "next/navigation" import styles from "./list-item.module.css" import Link from "@components/link" import type { PostWithFiles } from "@lib/server/prisma" import { Badge } from "@components/badges/badge" import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@components/card" import { ArrowUpCircle, Code, Database, Edit, FileText, MoreVertical, Terminal, Trash } from "react-feather" import { codeFileExtensions } from "@lib/constants" import { DropdownMenu, DropdownMenuItem, DropdownMenuTrigger } from "@components/dropdown-menu" import { DropdownMenuContent } from "@radix-ui/react-dropdown-menu" // TODO: isOwner should default to false so this can be used generically const ListItem = ({ post, isOwner, deletePost, hideActions }: { post: PostWithFiles isOwner?: boolean deletePost: () => void hideActions?: boolean }) => { const router = useRouter() const editACopy = () => { router.push(`/new/from/${post.id}`) } const viewParentClick = () => { router.push(`/post/${post.parentId}`) } const getIconFromFilename = (filename: string) => { const extension = filename.split(".").pop() switch (extension) { case "sql": return case "sh": case "fish": case "bash": case "zsh": case ".zshrc": case ".bashrc": case ".bash_profile": return default: if (codeFileExtensions.includes(extension || "")) { return } else { return } } } return ( {post.title} {post.files?.length === 1 ? "1 file" : `${post.files?.length || 0} files`} {!hideActions ? ( { editACopy() }} className="cursor-pointer bg-background" > Edit a copy {isOwner && ( { deletePost() }} className="cursor-pointer bg-background" > Delete )} {post.parentId && ( { viewParentClick() }} > View parent )} ) : null} {post.description && ( {post.description} )} {post?.files?.map( (file: Pick["files"][0]) => { return ( {getIconFromFilename(file.title)} {file.title || "Untitled file"} ) } )} ) } export default ListItem
{post.description}