mirror of
https://github.com/Memo-2023/mana-monorepo.git
synced 2026-05-19 03:01:24 +02:00
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)
41 lines
1 KiB
TypeScript
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,
|
|
};
|
|
}
|