From 89ee45a7eb110f43fa67a5bbfcec14c0b744a295 Mon Sep 17 00:00:00 2001 From: Frontend Developer Date: Tue, 10 Mar 2026 09:38:00 +0000 Subject: [PATCH] =?UTF-8?q?=E5=89=8D=E7=AB=AF:=20=E6=B7=BB=E5=8A=A0useSear?= =?UTF-8?q?ch=E6=90=9C=E7=B4=A2=E9=92=A9=E5=AD=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/renderer/hooks/useSearch.js | 34 ++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 frontend/src/renderer/hooks/useSearch.js diff --git a/frontend/src/renderer/hooks/useSearch.js b/frontend/src/renderer/hooks/useSearch.js new file mode 100644 index 0000000..37fbe64 --- /dev/null +++ b/frontend/src/renderer/hooks/useSearch.js @@ -0,0 +1,34 @@ +import { useState, useCallback } from 'react'; +import api from '../utils/api'; + +export const useSearch = () => { + const [results, setResults] = useState([]); + const [loading, setLoading] = useState(false); + const [keyword, setKeyword] = useState(''); + + const search = useCallback(async (q, type) => { + if (!q || q.length < 2) { + setResults([]); + return; + } + setLoading(true); + try { + const url = `/api/search?q=${encodeURIComponent(q)}${type ? `&type=${type}` : ''}`; + const data = await api.get(url); + setResults(data.files || []); + } catch (error) { + console.error('Search failed:', error); + } finally { + setLoading(false); + } + }, []); + + const clear = useCallback(() => { + setResults([]); + setKeyword(''); + }, []); + + return { results, loading, keyword, setKeyword, search, clear }; +}; + +export default useSearch;