| 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; |