managarten/apps/picture/apps/mobile/hooks/useExploreSearch.ts
Wuesteon d36b321d9d style: auto-format codebase with Prettier
Applied formatting to 1487+ files using pnpm format:write
  - TypeScript/JavaScript files
  - Svelte components
  - Astro pages
  - JSON configs
  - Markdown docs

  13 files still need manual review (Astro JSX comments)
2025-11-27 18:33:16 +01:00

41 lines
1 KiB
TypeScript

import { useMemo } from 'react';
import { ExploreImageItem } from '~/types/explore';
type UseExploreSearchProps = {
items: ExploreImageItem[];
searchQuery: string;
selectedTags: string[];
};
export function useExploreSearch({ items, searchQuery, selectedTags }: UseExploreSearchProps) {
const filteredImages = useMemo(() => {
let filtered = items;
// Apply search filter
if (searchQuery.trim()) {
const query = searchQuery.toLowerCase();
filtered = filtered.filter(
(image) =>
image.prompt.toLowerCase().includes(query) ||
image.tags?.some((tag) => tag.name.toLowerCase().includes(query)) ||
image.creator?.username?.toLowerCase().includes(query)
);
}
// Apply tag filter
if (selectedTags.length > 0) {
filtered = filtered.filter((image) => {
const imageTags = image.tags || [];
return selectedTags.some((selectedTagId) =>
imageTags.some((tag) => tag.id === selectedTagId)
);
});
}
return filtered;
}, [items, selectedTags, searchQuery]);
return {
filteredImages,
};
}