chore: drop duplicate selected count + Discard button from TopBar
Both were redundant: - "N selected" is already shown by the contextual KeyboardHints pill below the FilterBar - The Discard action is in the RightSidebar Flag section and bound to X (and exists as a per-photo button on the thumbnail when is_discarded) Also removes the no-longer-used discardPhotosMutation, the photos api import, the toast import, the useMutation/useQueryClient imports, and the usePhotoStore selectedPhotos read — TopBar is leaner now. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -8,16 +8,11 @@ import {
|
||||
Upload,
|
||||
Settings,
|
||||
Menu,
|
||||
Trash2,
|
||||
X,
|
||||
ShoppingBasket,
|
||||
} from 'lucide-react'
|
||||
import clsx from 'clsx'
|
||||
import { usePhotoStore } from '../../store/photoStore'
|
||||
import { useFilterStore, hasActiveFilters } from '../../store/filterStore'
|
||||
import { photos } from '../../services/api'
|
||||
import { toast } from '../ToastContainer'
|
||||
import { useMutation, useQueryClient } from '@tanstack/react-query'
|
||||
import { useHeapsQuery } from '../../hooks/useHeapsQuery'
|
||||
import muliLogo from '../../assets/muli-logo.png'
|
||||
|
||||
@@ -55,31 +50,12 @@ export function TopBar() {
|
||||
}, [searchQuery, storeQ, setStoreQ])
|
||||
|
||||
const [viewMode, setViewMode] = useState<'grid' | 'list'>('grid')
|
||||
const selectedPhotos = usePhotoStore((state) => state.selectedPhotos)
|
||||
const clearSelection = usePhotoStore((state) => state.clearSelection)
|
||||
const selectedCount = selectedPhotos.length
|
||||
const queryClient = useQueryClient()
|
||||
|
||||
// Currently active heap (for the T shortcut). Shown as a pill so the user
|
||||
// always knows where their next T-press will land.
|
||||
// Currently active heap. Shown as a pill so the user always knows where
|
||||
// their next P-press will land.
|
||||
const { data: heapsList = [] } = useHeapsQuery()
|
||||
const activeHeap = heapsList.find((h) => h.is_active)
|
||||
|
||||
// Mutation for discarding selected photos
|
||||
const discardPhotosMutation = useMutation({
|
||||
mutationFn: async () => {
|
||||
await photos.bulkUpdate(selectedPhotos, { discard: true })
|
||||
},
|
||||
onSuccess: () => {
|
||||
toast.success('Discarded', `${selectedCount} photo${selectedCount > 1 ? 's' : ''} discarded`)
|
||||
clearSelection()
|
||||
queryClient.invalidateQueries({ queryKey: ['photos'] })
|
||||
},
|
||||
onError: (error: any) => {
|
||||
toast.error('Failed to discard', error.message || 'An error occurred')
|
||||
},
|
||||
})
|
||||
|
||||
|
||||
return (
|
||||
<header className="flex h-12 items-center justify-between border-b border-border bg-surface px-4">
|
||||
{/* Left Section - Menu and App Name */}
|
||||
@@ -100,28 +76,12 @@ export function TopBar() {
|
||||
{activeHeap && (
|
||||
<span
|
||||
className="flex items-center gap-1 rounded bg-primary/20 px-2 py-0.5 text-xs text-primary"
|
||||
title="Active heap — press T to add the selected photos here"
|
||||
title="Active heap — press P to add selected photos here"
|
||||
>
|
||||
<ShoppingBasket className="h-3 w-3" />
|
||||
{activeHeap.name}
|
||||
</span>
|
||||
)}
|
||||
{selectedCount > 0 && (
|
||||
<>
|
||||
<span className="rounded bg-primary/20 px-2 py-0.5 text-sm text-primary">
|
||||
{selectedCount} selected
|
||||
</span>
|
||||
<button
|
||||
onClick={() => discardPhotosMutation.mutate()}
|
||||
disabled={discardPhotosMutation.isPending}
|
||||
className="flex items-center gap-1 rounded bg-reject/20 px-2 py-0.5 text-sm text-reject hover:bg-reject/30 disabled:opacity-50"
|
||||
title="Discard"
|
||||
>
|
||||
<Trash2 className="h-3.5 w-3.5" />
|
||||
Discard
|
||||
</button>
|
||||
</>
|
||||
)}
|
||||
</div>
|
||||
|
||||
{/* Center Section - Search */}
|
||||
|
||||
Reference in New Issue
Block a user