feat: surface active heap on photos + sidebar row, drop topbar pill
- PhotoThumbnail: the bottom-right basket badge now expands into a name chip when the active heap name is supplied. Truncated to a 120px max-width so it doesn't eat the thumbnail. - Timeline: read activeHeap.name from useActiveHeapMembersQuery and pipe it down to PhotoThumbnail. - TopBar: drop the leftover heap pill next to "Mulimago" — the active state now lives where the user navigates to it (the heaps row). - HeapsPanel: the active heap row gets a soft bg-pick/10 wash when not also filtered, the basket icon turns text-pick, and a small "ACTIVE" pill renders next to the name. Together they make it obvious which heap Pick / T target without needing the topbar pill. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -196,7 +196,8 @@ export function Timeline() {
|
||||
// Membership in the active heap (for the basket affordance). Subscribed
|
||||
// once at this level so we don't have hundreds of thumbnails each
|
||||
// subscribing to the same query.
|
||||
const { memberIds: activeHeapMembers } = useActiveHeapMembers()
|
||||
const { memberIds: activeHeapMembers, activeHeap } = useActiveHeapMembers()
|
||||
const activeHeapName = activeHeap?.name ?? null
|
||||
|
||||
// Build the flat virtualizer items: a mix of group headers and rows of
|
||||
// photos. Date headers appear when sorted by a date field; tag headers
|
||||
@@ -510,6 +511,7 @@ export function Timeline() {
|
||||
size={THUMBNAIL_SIZE}
|
||||
isSelected={selectedPhotos.includes(photo.id)}
|
||||
isInActiveHeap={activeHeapMembers.has(photo.id)}
|
||||
activeHeapName={activeHeapName}
|
||||
onClick={(e) => {
|
||||
if (e.shiftKey) {
|
||||
selectRange(photo.id)
|
||||
|
||||
Reference in New Issue
Block a user