mirror of
https://github.com/pacnpal/thrilltrack-explorer.git
synced 2025-12-20 15:31:13 -05:00
Refactor: Remove item_edit_history_view
This commit is contained in:
@@ -11,6 +11,7 @@ import { getErrorMessage } from '@/lib/errorHandler';
|
||||
import { PhotoModal } from './PhotoModal';
|
||||
import { SubmissionReviewManager } from './SubmissionReviewManager';
|
||||
import { ItemEditDialog } from './ItemEditDialog';
|
||||
import { ItemSelectorDialog } from './ItemSelectorDialog';
|
||||
import { useIsMobile } from '@/hooks/use-mobile';
|
||||
import { useAdminSettings } from '@/hooks/useAdminSettings';
|
||||
import { useModerationQueueManager } from '@/hooks/moderation';
|
||||
@@ -80,6 +81,10 @@ export const ModerationQueue = forwardRef<ModerationQueueRef, ModerationQueuePro
|
||||
const [selectedSubmissionId, setSelectedSubmissionId] = useState<string | null>(null);
|
||||
const [showItemEditDialog, setShowItemEditDialog] = useState(false);
|
||||
const [editingItem, setEditingItem] = useState<SubmissionItemWithDeps | null>(null);
|
||||
const [showItemSelector, setShowItemSelector] = useState(false);
|
||||
const [availableItems, setAvailableItems] = useState<SubmissionItemWithDeps[]>([]);
|
||||
const [bulkEditMode, setBulkEditMode] = useState(false);
|
||||
const [bulkEditItems, setBulkEditItems] = useState<SubmissionItemWithDeps[]>([]);
|
||||
|
||||
// Confirmation dialog state
|
||||
const [confirmDialog, setConfirmDialog] = useState<{
|
||||
@@ -176,6 +181,19 @@ export const ModerationQueue = forwardRef<ModerationQueueRef, ModerationQueuePro
|
||||
},
|
||||
description: 'Focus filters',
|
||||
},
|
||||
{
|
||||
key: 'e',
|
||||
handler: () => {
|
||||
// Edit first claimed submission
|
||||
const claimedItem = queueManager.items.find(item =>
|
||||
queueManager.queue.isLockedByMe(item.id, item.assigned_to, item.locked_until)
|
||||
);
|
||||
if (claimedItem) {
|
||||
handleOpenItemEditor(claimedItem.id);
|
||||
}
|
||||
},
|
||||
description: 'Edit claimed submission',
|
||||
},
|
||||
],
|
||||
enabled: true,
|
||||
});
|
||||
@@ -195,22 +213,55 @@ export const ModerationQueue = forwardRef<ModerationQueueRef, ModerationQueuePro
|
||||
try {
|
||||
const items = await fetchSubmissionItems(submissionId);
|
||||
|
||||
// Find first pending item, fallback to first available
|
||||
let itemToEdit = items.find(item => item.status === 'pending');
|
||||
if (!itemToEdit && items.length > 0) {
|
||||
itemToEdit = items[0];
|
||||
}
|
||||
|
||||
if (itemToEdit) {
|
||||
setEditingItem(itemToEdit);
|
||||
setShowItemEditDialog(true);
|
||||
} else {
|
||||
if (!items || items.length === 0) {
|
||||
toast({
|
||||
title: 'No Items Found',
|
||||
description: 'This submission has no items to edit',
|
||||
variant: 'destructive',
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
// Phase 3: Multi-item selector for submissions with multiple items
|
||||
if (items.length > 1) {
|
||||
setAvailableItems(items);
|
||||
setShowItemSelector(true);
|
||||
} else {
|
||||
// Single item - edit directly
|
||||
setEditingItem(items[0]);
|
||||
setShowItemEditDialog(true);
|
||||
}
|
||||
} catch (error: unknown) {
|
||||
toast({
|
||||
title: 'Error',
|
||||
description: getErrorMessage(error),
|
||||
variant: 'destructive',
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
const handleSelectItem = (item: SubmissionItemWithDeps) => {
|
||||
setEditingItem(item);
|
||||
setShowItemSelector(false);
|
||||
setShowItemEditDialog(true);
|
||||
};
|
||||
|
||||
const handleBulkEdit = async (submissionId: string) => {
|
||||
try {
|
||||
const items = await fetchSubmissionItems(submissionId);
|
||||
|
||||
if (!items || items.length === 0) {
|
||||
toast({
|
||||
title: 'No Items Found',
|
||||
description: 'This submission has no items to edit',
|
||||
variant: 'destructive',
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
setBulkEditItems(items);
|
||||
setBulkEditMode(true);
|
||||
setShowItemEditDialog(true);
|
||||
} catch (error: unknown) {
|
||||
toast({
|
||||
title: 'Error',
|
||||
@@ -435,23 +486,48 @@ export const ModerationQueue = forwardRef<ModerationQueueRef, ModerationQueuePro
|
||||
submissionId={selectedSubmissionId}
|
||||
open={reviewManagerOpen}
|
||||
onOpenChange={setReviewManagerOpen}
|
||||
onComplete={() => setReviewManagerOpen(false)}
|
||||
/>
|
||||
)}
|
||||
|
||||
{editingItem && (
|
||||
<ItemEditDialog
|
||||
item={editingItem}
|
||||
open={showItemEditDialog}
|
||||
onOpenChange={setShowItemEditDialog}
|
||||
onComplete={async () => {
|
||||
setShowItemEditDialog(false);
|
||||
setEditingItem(null);
|
||||
await queueManager.refresh();
|
||||
onComplete={() => {
|
||||
queueManager.refresh();
|
||||
setSelectedSubmissionId(null);
|
||||
}}
|
||||
/>
|
||||
)}
|
||||
|
||||
{/* Phase 3: Item Selector Dialog */}
|
||||
<ItemSelectorDialog
|
||||
items={availableItems}
|
||||
open={showItemSelector}
|
||||
onOpenChange={setShowItemSelector}
|
||||
onSelectItem={handleSelectItem}
|
||||
onBulkEdit={() => {
|
||||
setShowItemSelector(false);
|
||||
setBulkEditItems(availableItems);
|
||||
setBulkEditMode(true);
|
||||
setShowItemEditDialog(true);
|
||||
}}
|
||||
/>
|
||||
|
||||
{/* Phase 4 & 5: Enhanced Item Edit Dialog */}
|
||||
<ItemEditDialog
|
||||
item={bulkEditMode ? null : editingItem}
|
||||
items={bulkEditMode ? bulkEditItems : undefined}
|
||||
open={showItemEditDialog}
|
||||
onOpenChange={(open) => {
|
||||
setShowItemEditDialog(open);
|
||||
if (!open) {
|
||||
setEditingItem(null);
|
||||
setBulkEditMode(false);
|
||||
setBulkEditItems([]);
|
||||
}
|
||||
}}
|
||||
onComplete={() => {
|
||||
queueManager.refresh();
|
||||
setEditingItem(null);
|
||||
setBulkEditMode(false);
|
||||
setBulkEditItems([]);
|
||||
}}
|
||||
/>
|
||||
|
||||
{/* Confirmation Dialog */}
|
||||
<ConfirmationDialog
|
||||
open={confirmDialog.open}
|
||||
|
||||
Reference in New Issue
Block a user