diff --git a/src/components/moderation/ModerationQueue.tsx b/src/components/moderation/ModerationQueue.tsx index ea765112..2802a8a9 100644 --- a/src/components/moderation/ModerationQueue.tsx +++ b/src/components/moderation/ModerationQueue.tsx @@ -165,7 +165,7 @@ export const ModerationQueue = forwardRef((props, ref) => { item={item} isMobile={isMobile} actionLoading={queueManager.actionLoading} - isLockedByMe={queueManager.queue.isLockedByMe(item.id)} + isLockedByMe={queueManager.queue.isLockedByMe(item.id, item.assigned_to, item.locked_until)} isLockedByOther={queueManager.queue.isLockedByOther(item.id, item.assigned_to, item.locked_until)} lockStatus={getLockStatus({ assigned_to: item.assigned_to, locked_until: item.locked_until }, user?.id || '')} currentLockSubmissionId={queueManager.queue.currentLock?.submissionId} diff --git a/src/hooks/useModerationQueue.ts b/src/hooks/useModerationQueue.ts index b9a852ba..30d72972 100644 --- a/src/hooks/useModerationQueue.ts +++ b/src/hooks/useModerationQueue.ts @@ -414,9 +414,19 @@ export const useModerationQueue = (config?: UseModerationQueueConfig) => { }, [user, currentLock, toast, fetchStats]); // Check if submission is locked by current user - const isLockedByMe = useCallback((submissionId: string): boolean => { - return currentLock?.submissionId === submissionId; - }, [currentLock]); + const isLockedByMe = useCallback((submissionId: string, assignedTo?: string | null, lockedUntil?: string | null): boolean => { + // Check local state first (optimistic UI - immediate feedback) + if (currentLock?.submissionId === submissionId) return true; + + // Also check database state (source of truth) + if (assignedTo && lockedUntil && user?.id) { + const isAssignedToMe = assignedTo === user.id; + const isLockActive = new Date(lockedUntil) > new Date(); + return isAssignedToMe && isLockActive; + } + + return false; + }, [currentLock, user]); // Check if submission is locked by another moderator const isLockedByOther = useCallback((submissionId: string, assignedTo: string | null, lockedUntil: string | null): boolean => {