Skip to content

Commit 054c35a

Browse files
Cameron AmerCameron Amer
authored andcommitted
Fix file grid selection
1 parent cd1ad10 commit 054c35a

4 files changed

Lines changed: 18 additions & 4 deletions

File tree

app/src-tauri/Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/src/components/Dashboard.tsx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,10 @@ export function Dashboard({ onLogout }: { onLogout: () => void }) {
193193
}
194194
}
195195

196+
const handleToggleSelection = useCallback((id: number) => {
197+
setSelectedIds(ids => ids.includes(id) ? ids.filter(i => i !== id) : [...ids, id]);
198+
}, []);
199+
196200
const handlePreview = (file: TelegramFile, orderedFiles?: TelegramFile[]) => {
197201
const contextFiles = (orderedFiles || displayedFiles).filter((f) => f.type !== 'folder');
198202
const contextIndex = contextFiles.findIndex((f) => f.id === file.id);
@@ -434,6 +438,7 @@ export function Dashboard({ onLogout }: { onLogout: () => void }) {
434438
onPreview={handlePreview}
435439
onManualUpload={handleManualUpload}
436440
onSelectionClear={() => setSelectedIds([])}
441+
onToggleSelection={handleToggleSelection}
437442
onDrop={handleDropOnFolder}
438443
onDragStart={(fileId) => setInternalDragFileId(fileId)}
439444
onDragEnd={() => setTimeout(() => setInternalDragFileId(null), 50)}

app/src/components/dashboard/FileCard.tsx

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ interface FileCardProps {
1818
onDragEnd?: () => void;
1919
activeFolderId?: number | null;
2020
height?: number;
21+
onToggleSelection?: () => void;
2122
}
2223

2324
// Check if file is an image type that can have a thumbnail
@@ -26,7 +27,7 @@ function isImageFile(filename: string): boolean {
2627
return ['jpg', 'jpeg', 'png', 'gif', 'webp', 'bmp'].includes(ext);
2728
}
2829

29-
export function FileCard({ file, onDelete, onDownload, onPreview, isSelected, onClick, onContextMenu, onDrop, onDragStart, onDragEnd, activeFolderId, height }: FileCardProps) {
30+
export function FileCard({ file, onDelete, onDownload, onPreview, isSelected, onClick, onContextMenu, onDrop, onDragStart, onDragEnd, activeFolderId, height, onToggleSelection }: FileCardProps) {
3031
const isFolder = file.type === 'folder';
3132
const [isDragOver, setIsDragOver] = useState(false);
3233
const [thumbnail, setThumbnail] = useState<string | null>(null);
@@ -124,7 +125,13 @@ export function FileCard({ file, onDelete, onDownload, onPreview, isSelected, on
124125
)}
125126

126127
{/* Selection Checkmark */}
127-
<div className={`absolute top-2 left-2 w-5 h-5 rounded-full border flex items-center justify-center transition-all z-10 ${isSelected ? 'bg-telegram-primary border-telegram-primary' : 'border-white/50 bg-black/30 opacity-0 group-hover:opacity-100'}`}>
128+
<div
129+
onClick={(e) => {
130+
e.stopPropagation();
131+
if (onToggleSelection) onToggleSelection();
132+
}}
133+
className={`absolute top-2 left-2 w-5 h-5 rounded-full border flex items-center justify-center transition-all z-10 cursor-pointer ${isSelected ? 'bg-telegram-primary border-telegram-primary' : 'border-white/50 bg-black/30 opacity-0 group-hover:opacity-100'}`}
134+
>
128135
{isSelected && <div className="w-1.5 h-1.5 bg-black rounded-full" />}
129136
</div>
130137

app/src/components/dashboard/FileExplorer.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ interface FileExplorerProps {
2323
onPreview: (file: TelegramFile, orderedFiles?: TelegramFile[]) => void;
2424
onManualUpload: () => void;
2525
onSelectionClear: () => void;
26+
onToggleSelection: (id: number) => void;
2627
onDrop?: (e: React.DragEvent, folderId: number) => void;
2728
onDragStart?: (fileId: number) => void;
2829
onDragEnd?: () => void;
@@ -57,7 +58,7 @@ function useGridColumns(containerRef: React.RefObject<HTMLDivElement | null>) {
5758

5859
export function FileExplorer({
5960
files, loading, error, viewMode, selectedIds, activeFolderId,
60-
onFileClick, onDelete, onDownload, onPreview, onManualUpload, onSelectionClear, onDrop, onDragStart, onDragEnd
61+
onFileClick, onDelete, onDownload, onPreview, onManualUpload, onSelectionClear, onToggleSelection, onDrop, onDragStart, onDragEnd
6162
}: FileExplorerProps) {
6263
const [sortField, setSortField] = useState<SortField>('name');
6364
const [sortDirection, setSortDirection] = useState<SortDirection>('asc');
@@ -253,6 +254,7 @@ export function FileExplorer({
253254
onDragEnd={onDragEnd}
254255
activeFolderId={activeFolderId}
255256
height={cardHeight}
257+
onToggleSelection={() => onToggleSelection(file.id)}
256258
/>
257259
);
258260
})}

0 commit comments

Comments
 (0)