mirror of
https://github.com/Memo-2023/mana-monorepo.git
synced 2026-05-17 00:19:41 +02:00
- Add uload project with apps/web structure
- Reorganize from flat to monorepo structure
- Remove PocketBase binary and local data
- Update to pnpm and @uload/web namespace
- Add picture project to monorepo
- Remove embedded git repository
- Unify all package names to @{project}/{app} schema:
- @maerchenzauber/* (was @storyteller/*)
- @manacore/* (was manacore-*, manacore)
- @manadeck/* (was web, backend, manadeck)
- @memoro/* (was memoro-web, landing, memoro)
- @picture/* (already unified)
- @uload/web
- Add convenient dev scripts for all apps:
- pnpm dev:{project}:web
- pnpm dev:{project}:landing
- pnpm dev:{project}:mobile
- pnpm dev:{project}:backend
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
44 lines
1.1 KiB
TypeScript
44 lines
1.1 KiB
TypeScript
import { useMemo } from 'react';
|
|
import { ImageItem } from '~/types/gallery';
|
|
|
|
type SearchableImage = ImageItem & {
|
|
creator?: { username: string | null };
|
|
};
|
|
|
|
type UseImageSearchProps = {
|
|
items: SearchableImage[];
|
|
searchQuery: string;
|
|
selectedTags: string[];
|
|
};
|
|
|
|
export function useImageSearch({ items, searchQuery, selectedTags }: UseImageSearchProps) {
|
|
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.model?.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,
|
|
};
|
|
}
|