"use client" import type { IProjectCardProps } from "./ProjectCard.d" import type { JSX } from "react" import { Image as ImageIcon, MoreHorizontal } from "lucide-react" import { FunctionComponent } from "react" import cs from "classnames" import { formatRelativeTime } from "@shared/lib/dates" import { Card } from "@shared/ui/Card" import { CircularProgress } from "@shared/ui/CircularProgress" import { Dropdown, DropdownContent, DropdownItem, DropdownTrigger, } from "@shared/ui/Dropdown" import styles from "./ProjectCard.module.scss" export const ProjectCard: FunctionComponent = ({ project, className, progress = 0, currentAction, imageUrl, onClick, onEdit, onRename, onDelete, }): JSX.Element => { const { name, updated_at, status } = project const temporaryStatuses = new Set(["PROCESSING", "RENDERING", "UPLOADING"]) const isCompleted = status === "DONE" const isProcessing = temporaryStatuses.has(status) const isDraft = status === "DRAFT" const isFailed = status === "FAILED" const shouldShowProgress = isProcessing const getStatusClass = () => { if (isCompleted) return styles.statusGenerated if (isProcessing) return styles.statusProcessing if (isDraft) return styles.statusDraft if (isFailed) return styles.statusFailed return styles.statusDraft } const getStatusLabel = () => { if (isCompleted) return "Завершено" if (isProcessing) return "В процессе" if (isDraft) return "Черновик" if (isFailed) return "Ошибка" return status } const displayAction = currentAction || (isProcessing ? "В процессе" : "") return (
{imageUrl ? ( {name} ) : (
)}
{getStatusLabel()}
{shouldShowProgress && (
{Math.round(progress)}%
{displayAction && ( {displayAction} )}
)}

{name}

e.stopPropagation()} > onEdit?.()}> Изменить onRename?.()}> Переименовать onDelete?.()} > Удалить
Создано {formatRelativeTime(updated_at)}
) }