From 42864ebcb788575d07e42d6abd938e2830145729 Mon Sep 17 00:00:00 2001 From: Elijah Date: Sat, 23 May 2026 09:21:41 -0700 Subject: [PATCH] Fix list view alignment, modal sizing, folder icons, and add bitrate metadata --- frontend/src/components/FileExplorer.tsx | 28 +++++++++++++++-------- frontend/src/components/FileInfoModal.tsx | 8 +++++++ frontend/src/components/FilePreview.tsx | 2 +- 3 files changed, 27 insertions(+), 11 deletions(-) diff --git a/frontend/src/components/FileExplorer.tsx b/frontend/src/components/FileExplorer.tsx index 4da18e5..82a0f68 100644 --- a/frontend/src/components/FileExplorer.tsx +++ b/frontend/src/components/FileExplorer.tsx @@ -1,15 +1,25 @@ 'use client'; import { useState, useEffect, useCallback, useRef, useMemo } from 'react'; +import { formatDistanceToNow } from 'date-fns'; import { motion, AnimatePresence } from 'framer-motion'; import { - Folder, File, Search, Pin, Trash2, HardDrive, Settings, + Folder as LucideFolder, File, Search, Pin, Trash2, HardDrive, Settings, ChevronRight, Grid3X3, List, Plus, Upload, LogOut, MoreVertical, Star, Download, Pencil, Copy, Move, FolderPlus, ArrowUp, X, Check, RefreshCw, Info, Link as LinkIcon, Image as ImageIcon, Film as FilmIcon, Sun, Moon, Music as MusicIcon, Code as CodeIcon, Archive as ArchiveIcon, CornerDownRight } from 'lucide-react'; import api from '@/lib/api'; + +const Folder = ({ className, style }: { className?: string, style?: React.CSSProperties }) => ( + + + +); + +const API_BASE = process.env.NEXT_PUBLIC_API_URL || 'http://localhost:8080'; +import api from '@/lib/api'; import FilePreview from './FilePreview'; import SettingsPage from './SettingsPage'; import StorageDashboard from './StorageDashboard'; @@ -128,7 +138,7 @@ function Tooltip({ children, text }: { children: React.ReactNode; text: string } return (
setHovered(true)} onMouseLeave={() => setHovered(false)} > @@ -733,14 +743,12 @@ export default function FileExplorer({ onLogout }: FileExplorerProps) { function getFileIcon(file: FileItem, large = false) { if (file.is_dir) { - if (large) { - return ( - - - - ); - } - return ; + return ( + + ); } const sizeClass = large ? "w-20 h-20" : "w-5 h-5"; diff --git a/frontend/src/components/FileInfoModal.tsx b/frontend/src/components/FileInfoModal.tsx index 1259765..7cb54ec 100644 --- a/frontend/src/components/FileInfoModal.tsx +++ b/frontend/src/components/FileInfoModal.tsx @@ -158,6 +158,14 @@ export default function FileInfoModal({ filePath, onClose }: FileInfoModalProps) {data.info.metadata.VideoFrameRate} fps
)} + {(data.info.metadata.AvgBitrate || data.info.metadata.AudioBitrate || data.info.metadata.VideoBitrate || data.info.metadata.Bitrate) && ( +
+ Bitrate + + {data.info.metadata.AvgBitrate || data.info.metadata.AudioBitrate || data.info.metadata.VideoBitrate || data.info.metadata.Bitrate} + +
+ )} {data.info.metadata.CompressorID && (
Codec diff --git a/frontend/src/components/FilePreview.tsx b/frontend/src/components/FilePreview.tsx index 915dbd5..f1447aa 100644 --- a/frontend/src/components/FilePreview.tsx +++ b/frontend/src/components/FilePreview.tsx @@ -145,7 +145,7 @@ export default function FilePreview({ file, onClose }: FilePreviewProps) { )} {previewType === 'audio' && ( -
+

{getFileDisplayName(file.name)}