- Unify API: lib/api.ts uses /api/v1, inbox uses /api/inbox (rewrites) - Remove localhost refs: openapi, inbox page - Add rewrites: /api/inbox|tmc -> inbox-server, /api/v1 -> FastAPI - Add stub routes: knowledge/insights, recommendations, search, log-error - Transfer from PAPA: prompts (inspection, tmc), scripts, supabase, data/tmc-requests - Fix inbox-server: ORDER BY created_at, package.json - Remove redundant app/api/inbox/files route (rewrites handle it) - knowledge/ in gitignore (large PDFs) Co-authored-by: Cursor <cursoragent@cursor.com>
56 lines
1.2 KiB
TypeScript
56 lines
1.2 KiB
TypeScript
/**
|
|
* Хук для сохранения истории поисков
|
|
*/
|
|
'use client';
|
|
|
|
import { useLocalStorage } from './useLocalStorage';
|
|
|
|
export interface SearchHistoryItem {
|
|
query: string;
|
|
timestamp: number;
|
|
resultCount?: number;
|
|
}
|
|
|
|
const MAX_HISTORY_ITEMS = 20;
|
|
|
|
export function useSearchHistory() {
|
|
const [history, setHistory] = useLocalStorage<SearchHistoryItem[]>(
|
|
'searchHistory',
|
|
[]
|
|
);
|
|
|
|
const addToHistory = (query: string, resultCount?: number) => {
|
|
if (!query.trim()) {
|
|
return;
|
|
}
|
|
|
|
setHistory((prev) => {
|
|
// Удаляем дубликаты
|
|
const filtered = prev.filter((item) => item.query.toLowerCase() !== query.toLowerCase());
|
|
|
|
// Добавляем новый запрос в начало
|
|
const newHistory = [
|
|
{ query, timestamp: Date.now(), resultCount },
|
|
...filtered,
|
|
].slice(0, MAX_HISTORY_ITEMS);
|
|
|
|
return newHistory;
|
|
});
|
|
};
|
|
|
|
const clearHistory = () => {
|
|
setHistory([]);
|
|
};
|
|
|
|
const removeFromHistory = (query: string) => {
|
|
setHistory((prev) => prev.filter((item) => item.query !== query));
|
|
};
|
|
|
|
return {
|
|
history,
|
|
addToHistory,
|
|
clearHistory,
|
|
removeFromHistory,
|
|
};
|
|
}
|