import { useTranslation } from "react-i18next" import { MediaFile } from "@/features/media/types/media" import { getAspectRatio, getFps } from "@/features/media/utils/video" import { formatDuration, formatTimeWithMilliseconds } from "@/lib/date" import { formatBitrate, formatFileSize } from "@/lib/utils" interface FileMetadataProps { file: MediaFile size?: number } /** * Компонент для отображения метаданных файла * * @param file - Объект файла с метаданными * @param size - Размер контейнера в пикселях */ export const FileMetadata = function FileMetadata({ file, size = 100 }: FileMetadataProps) { const { i18n } = useTranslation() const videoStream = file.probeData?.streams.find((s) => s.codec_type === "video") return (

{file.name}

{!file.isImage && file.probeData?.format.duration && (

100 ? "13px" : "12px" }}> {formatDuration(file.probeData.format.duration, 3, true)}

)} {file.isImage && file.createdAt && ( {new Date(file.createdAt).toLocaleDateString(i18n.language === "en" ? "en-US" : "ru-RU", { year: "numeric", month: "long", day: "numeric", })} )}
{file.isVideo ? (
{formatTimeWithMilliseconds(file.startTime ?? 0, true, true, false)}

{videoStream && ( {videoStream.width}x{videoStream.height} {(((videoStream.width ?? 0) * (videoStream.height ?? 0)) / 1000000).toFixed(1)} MP {getAspectRatio(videoStream)} {formatBitrate(Number(videoStream.bit_rate))} {getFps(videoStream) && ( {getFps(videoStream)} fps )} )}

{file.probeData?.format.size && (

{formatFileSize(file.probeData.format.size)}

)}
) : (
{file.probeData?.format.size && (

{formatFileSize(file.probeData.format.size)}

)}
)}
) }