Update Clusters.tsx
This commit is contained in:
@@ -71,6 +71,7 @@ export default function Clusters() {
|
||||
|
||||
// Progress modal for AI functions
|
||||
const progressModal = useProgressModal();
|
||||
const hasReloadedRef = useRef(false);
|
||||
|
||||
// Load clusters - wrapped in useCallback to prevent infinite loops
|
||||
const loadClusters = useCallback(async () => {
|
||||
@@ -231,24 +232,49 @@ export default function Clusters() {
|
||||
toast.error('Maximum 5 clusters allowed for idea generation');
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
const numIds = ids.map(id => parseInt(id));
|
||||
const result = await autoGenerateIdeas(numIds);
|
||||
if (result.success) {
|
||||
|
||||
// Check if result has success field - if false, it's an error response
|
||||
if (result && result.success === false) {
|
||||
// Error response from API
|
||||
const errorMsg = result.error || 'Failed to generate ideas';
|
||||
toast.error(errorMsg);
|
||||
return;
|
||||
}
|
||||
|
||||
if (result && result.success) {
|
||||
if (result.task_id) {
|
||||
// Async task - show progress modal
|
||||
// Async task - open progress modal
|
||||
hasReloadedRef.current = false;
|
||||
progressModal.openModal(result.task_id, 'Generating Content Ideas');
|
||||
// Don't show toast - progress modal will show status
|
||||
} else {
|
||||
// Synchronous completion
|
||||
toast.success(`Ideas generation complete: ${result.ideas_created || 0} ideas created`);
|
||||
await loadClusters();
|
||||
if (!hasReloadedRef.current) {
|
||||
hasReloadedRef.current = true;
|
||||
loadClusters();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
toast.error(result.error || 'Failed to generate ideas');
|
||||
// Unexpected response format - show error
|
||||
const errorMsg = result?.error || 'Unexpected response format';
|
||||
toast.error(errorMsg);
|
||||
}
|
||||
} catch (error: any) {
|
||||
toast.error(`Failed to generate ideas: ${error.message}`);
|
||||
// API error (network error, parse error, etc.)
|
||||
let errorMsg = 'Failed to generate ideas';
|
||||
if (error.message) {
|
||||
// Extract clean error message from API error format
|
||||
errorMsg = error.message.replace(/^API Error \(\d+\): [^-]+ - /, '').trim();
|
||||
if (!errorMsg || errorMsg === error.message) {
|
||||
errorMsg = error.message;
|
||||
}
|
||||
}
|
||||
toast.error(errorMsg);
|
||||
}
|
||||
} else {
|
||||
toast.info(`Bulk action "${action}" for ${ids.length} items`);
|
||||
@@ -456,10 +482,10 @@ export default function Clusters() {
|
||||
details={progressModal.progress.details}
|
||||
taskId={progressModal.taskId || undefined}
|
||||
onClose={() => {
|
||||
const wasCompleted = progressModal.progress.status === 'completed';
|
||||
progressModal.closeModal();
|
||||
// Reload data after modal closes (if completed)
|
||||
if (wasCompleted) {
|
||||
// Reload once when modal closes if task was completed
|
||||
if (progressModal.progress.status === 'completed' && !hasReloadedRef.current) {
|
||||
hasReloadedRef.current = true;
|
||||
loadClusters();
|
||||
}
|
||||
}}
|
||||
|
||||
Reference in New Issue
Block a user