mirror of
https://github.com/pacnpal/thrilltrack-explorer.git
synced 2025-12-21 13:51:12 -05:00
feat: Cascade moderation actions to submission items
This commit is contained in:
@@ -617,6 +617,67 @@ export const ModerationQueue = forwardRef<ModerationQueueRef>((props, ref) => {
|
||||
}
|
||||
}
|
||||
|
||||
// Check if this submission has submission_items that need processing
|
||||
if (item.type === 'content_submission') {
|
||||
const { data: submissionItems, error: itemsError } = await supabase
|
||||
.from('submission_items')
|
||||
.select('id, status')
|
||||
.eq('submission_id', item.id)
|
||||
.eq('status', 'pending');
|
||||
|
||||
if (!itemsError && submissionItems && submissionItems.length > 0) {
|
||||
console.log(`Found ${submissionItems.length} pending submission items for ${item.id}`);
|
||||
|
||||
if (action === 'approved') {
|
||||
// Call the edge function to process all items
|
||||
const { data: approvalData, error: approvalError } = await supabase.functions.invoke(
|
||||
'process-selective-approval',
|
||||
{
|
||||
body: {
|
||||
itemIds: submissionItems.map(i => i.id),
|
||||
userId: user?.id,
|
||||
submissionId: item.id
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
if (approvalError) {
|
||||
throw new Error(`Failed to process submission items: ${approvalError.message}`);
|
||||
}
|
||||
|
||||
console.log('Submission items processed successfully:', approvalData);
|
||||
|
||||
toast({
|
||||
title: "Submission Approved",
|
||||
description: `Successfully processed ${submissionItems.length} item(s)`,
|
||||
});
|
||||
|
||||
// Refresh and return early since edge function already updated parent
|
||||
fetchItems(activeEntityFilter, activeStatusFilter);
|
||||
return;
|
||||
} else if (action === 'rejected') {
|
||||
// Cascade rejection to all pending items
|
||||
console.log('Cascading rejection to submission items');
|
||||
const { error: rejectError } = await supabase
|
||||
.from('submission_items')
|
||||
.update({
|
||||
status: 'rejected',
|
||||
rejection_reason: moderatorNotes || 'Parent submission rejected',
|
||||
updated_at: new Date().toISOString()
|
||||
})
|
||||
.eq('submission_id', item.id)
|
||||
.eq('status', 'pending');
|
||||
|
||||
if (rejectError) {
|
||||
console.error('Failed to cascade rejection:', rejectError);
|
||||
// Don't fail the whole operation, just log it
|
||||
} else {
|
||||
console.log('Successfully cascaded rejection to submission items');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Standard moderation flow for other items
|
||||
const table = item.type === 'review' ? 'reviews' : 'content_submissions';
|
||||
const statusField = item.type === 'review' ? 'moderation_status' : 'status';
|
||||
|
||||
Reference in New Issue
Block a user