Update Clusters.tsx
This commit is contained in:
@@ -71,6 +71,7 @@ export default function Clusters() {
|
|||||||
|
|
||||||
// Progress modal for AI functions
|
// Progress modal for AI functions
|
||||||
const progressModal = useProgressModal();
|
const progressModal = useProgressModal();
|
||||||
|
const hasReloadedRef = useRef(false);
|
||||||
|
|
||||||
// Load clusters - wrapped in useCallback to prevent infinite loops
|
// Load clusters - wrapped in useCallback to prevent infinite loops
|
||||||
const loadClusters = useCallback(async () => {
|
const loadClusters = useCallback(async () => {
|
||||||
@@ -231,24 +232,49 @@ export default function Clusters() {
|
|||||||
toast.error('Maximum 5 clusters allowed for idea generation');
|
toast.error('Maximum 5 clusters allowed for idea generation');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const numIds = ids.map(id => parseInt(id));
|
const numIds = ids.map(id => parseInt(id));
|
||||||
const result = await autoGenerateIdeas(numIds);
|
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) {
|
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');
|
progressModal.openModal(result.task_id, 'Generating Content Ideas');
|
||||||
// Don't show toast - progress modal will show status
|
// Don't show toast - progress modal will show status
|
||||||
} else {
|
} else {
|
||||||
// Synchronous completion
|
// Synchronous completion
|
||||||
toast.success(`Ideas generation complete: ${result.ideas_created || 0} ideas created`);
|
toast.success(`Ideas generation complete: ${result.ideas_created || 0} ideas created`);
|
||||||
await loadClusters();
|
if (!hasReloadedRef.current) {
|
||||||
|
hasReloadedRef.current = true;
|
||||||
|
loadClusters();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} 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) {
|
} 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 {
|
} else {
|
||||||
toast.info(`Bulk action "${action}" for ${ids.length} items`);
|
toast.info(`Bulk action "${action}" for ${ids.length} items`);
|
||||||
@@ -456,10 +482,10 @@ export default function Clusters() {
|
|||||||
details={progressModal.progress.details}
|
details={progressModal.progress.details}
|
||||||
taskId={progressModal.taskId || undefined}
|
taskId={progressModal.taskId || undefined}
|
||||||
onClose={() => {
|
onClose={() => {
|
||||||
const wasCompleted = progressModal.progress.status === 'completed';
|
|
||||||
progressModal.closeModal();
|
progressModal.closeModal();
|
||||||
// Reload data after modal closes (if completed)
|
// Reload once when modal closes if task was completed
|
||||||
if (wasCompleted) {
|
if (progressModal.progress.status === 'completed' && !hasReloadedRef.current) {
|
||||||
|
hasReloadedRef.current = true;
|
||||||
loadClusters();
|
loadClusters();
|
||||||
}
|
}
|
||||||
}}
|
}}
|
||||||
|
|||||||
Reference in New Issue
Block a user