This commit is contained in:
imeepos
2026-02-02 18:57:05 +08:00
parent 95dd556ded
commit f6f28a4cb4
3 changed files with 128 additions and 46 deletions

View File

@@ -68,50 +68,83 @@ export function useWorksSearch(params: UseWorksSearchParams) {
const { keyword, category, page = 1, limit = 20 } = params
const execute = useCallback(async () => {
// Only execute query when keyword has content
const trimmedKeyword = keyword?.trim() || ''
if (!trimmedKeyword) {
setData(undefined)
setError(null)
return { data: undefined, error: null }
}
setLoading(true)
setError(null)
// Build API params - only include category if it's not "全部"
const apiParams = {
keyword: trimmedKeyword,
...(category && category !== '全部' && { category }),
page,
limit,
}
const templateGeneration = root.get(TemplateGenerationController)
const { data: result, error: err } = await handleError(async () =>
await templateGeneration.list(apiParams)
)
if (err) {
setError(err)
setLoading(false)
return { data: undefined, error: err }
}
setData(result as WorksSearchResponse)
setLoading(false)
return { data: result as WorksSearchResponse, error: null }
}, [keyword, category, page, limit])
// Auto-execute search when params change
useEffect(() => {
const execute = async () => {
// Only execute query when keyword has content
const trimmedKeyword = keyword?.trim() || ''
if (!trimmedKeyword) {
setData(undefined)
setError(null)
return
}
setLoading(true)
setError(null)
// Build API params - only include category if it's not "全部"
const apiParams = {
keyword: trimmedKeyword,
...(category && category !== '全部' && { category }),
page,
limit,
}
const templateGeneration = root.get(TemplateGenerationController)
const { data: result, error: err } = await handleError(async () =>
await templateGeneration.list(apiParams)
)
if (err) {
setError(err)
setLoading(false)
return
}
setData(result as WorksSearchResponse)
setLoading(false)
}
execute()
}, [execute])
}, [keyword, category, page, limit])
const refetch = useCallback(() => {
const execute = async () => {
const trimmedKeyword = keyword?.trim() || ''
if (!trimmedKeyword) {
setData(undefined)
setError(null)
return { data: undefined, error: null }
}
setLoading(true)
setError(null)
const apiParams = {
keyword: trimmedKeyword,
...(category && category !== '全部' && { category }),
page,
limit,
}
const templateGeneration = root.get(TemplateGenerationController)
const { data: result, error: err } = await handleError(async () =>
await templateGeneration.list(apiParams)
)
if (err) {
setError(err)
setLoading(false)
return { data: undefined, error: err }
}
setData(result as WorksSearchResponse)
setLoading(false)
return { data: result as WorksSearchResponse, error: null }
}
return execute()
}, [execute])
}, [keyword, category, page, limit])
return {
data,