42 lines
1.4 KiB
TypeScript
42 lines
1.4 KiB
TypeScript
'use client';
|
|
|
|
import { useMemo } from 'react';
|
|
|
|
import { useGallery } from '../store/context';
|
|
import { mediaForView } from '../store/selectors';
|
|
import type { GalleryState } from '../store/store';
|
|
import type { MediaItem } from '../types';
|
|
|
|
/** The media items for the active view (filters + search + object-focus applied). */
|
|
export function useViewMedia(): MediaItem[] {
|
|
const media = useGallery((s) => s.media);
|
|
const albums = useGallery((s) => s.albums);
|
|
const view = useGallery((s) => s.view);
|
|
const gridFilter = useGallery((s) => s.gridFilter);
|
|
const searchQuery = useGallery((s) => s.searchQuery);
|
|
const objectFocus = useGallery((s) => s.objectFocus);
|
|
const tagFocus = useGallery((s) => s.tagFocus);
|
|
const personFocus = useGallery((s) => s.personFocus);
|
|
const searchPreset = useGallery((s) => s.searchPreset);
|
|
const semanticResults = useGallery((s) => s.semanticResults);
|
|
const recentlyViewed = useGallery((s) => s.recentlyViewed);
|
|
|
|
return useMemo(
|
|
() =>
|
|
mediaForView({
|
|
media,
|
|
albums,
|
|
view,
|
|
gridFilter,
|
|
searchQuery,
|
|
objectFocus,
|
|
tagFocus,
|
|
personFocus,
|
|
searchPreset,
|
|
semanticResults,
|
|
recentlyViewed,
|
|
} as GalleryState),
|
|
[media, albums, view, gridFilter, searchQuery, objectFocus, tagFocus, personFocus, searchPreset, semanticResults, recentlyViewed],
|
|
);
|
|
}
|