| | import { useState, useCallback } from 'react'; |
| | import { useDispatch } from 'react-redux'; |
| | import { analyzeKeyword as analyzeKeywordThunk } from '../store/reducers/sourcesSlice'; |
| | import sourceService from '../services/sourceService'; |
| |
|
| | const useKeywordAnalysis = () => { |
| | const [keyword, setKeyword] = useState(''); |
| | const [analysisData, setAnalysisData] = useState(null); |
| | const [patternAnalysis, setPatternAnalysis] = useState(null); |
| | const [loading, setLoading] = useState(false); |
| | const [patternLoading, setPatternLoading] = useState(false); |
| | const [error, setError] = useState(null); |
| | |
| | const dispatch = useDispatch(); |
| |
|
| | |
| | const analyzeKeyword = async () => { |
| | if (!keyword.trim()) { |
| | setError('Please enter a keyword'); |
| | return; |
| | } |
| |
|
| | setLoading(true); |
| | setError(null); |
| |
|
| | try { |
| | |
| | const result = await dispatch(analyzeKeywordThunk({ keyword: keyword, date_range: 'monthly' })); |
| | |
| | if (analyzeKeywordThunk.fulfilled.match(result)) { |
| | setAnalysisData(result.payload.data); |
| | } else { |
| | setError('Failed to analyze keyword. Please try again.'); |
| | } |
| | } catch (err) { |
| | setError('Failed to analyze keyword. Please try again.'); |
| | console.error('Keyword analysis error:', err); |
| | } finally { |
| | setLoading(false); |
| | } |
| | }; |
| |
|
| | |
| | const analyzeKeywordPattern = async () => { |
| | if (!keyword.trim()) { |
| | setError('Please enter a keyword'); |
| | return; |
| | } |
| |
|
| | setPatternLoading(true); |
| | setError(null); |
| |
|
| | try { |
| | |
| | const response = await sourceService.analyzeKeywordPattern({ keyword }); |
| | setPatternAnalysis(response.data.data); |
| | return response.data; |
| | } catch (err) { |
| | setError('Failed to analyze keyword frequency pattern. Please try again.'); |
| | console.error('Keyword frequency pattern analysis error:', err); |
| | throw err; |
| | } finally { |
| | setPatternLoading(false); |
| | } |
| | }; |
| |
|
| | return { |
| | keyword, |
| | setKeyword, |
| | analysisData, |
| | setAnalysisData, |
| | patternAnalysis, |
| | setPatternAnalysis, |
| | loading, |
| | setLoading, |
| | patternLoading, |
| | setPatternLoading, |
| | error, |
| | setError, |
| | analyzeKeyword, |
| | analyzeKeywordPattern |
| | }; |
| | }; |
| |
|
| | export default useKeywordAnalysis; |