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