From 9436aa4c6bb565be55e306cf2a2fbd2a3734ba22 Mon Sep 17 00:00:00 2001 From: michael Date: Sat, 3 Jan 2026 19:22:29 -0600 Subject: [PATCH] fix: remove useMemo hook after early returns in QCList MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The useMemo hook was placed after early returns (isLoading, error), which violates React's rules of hooks. Hooks must be called unconditionally on every render. Replaced with simple inline computation since the operation is cheap. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- frontend/src/routes/admin/QCList.tsx | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/frontend/src/routes/admin/QCList.tsx b/frontend/src/routes/admin/QCList.tsx index 4d618a9..804fcf4 100644 --- a/frontend/src/routes/admin/QCList.tsx +++ b/frontend/src/routes/admin/QCList.tsx @@ -1,4 +1,4 @@ -import { useState, useMemo } from 'react'; +import { useState } from 'react'; import { Link } from 'react-router-dom'; import { useJobs, useApproveEnglish, useRejectJob, useBulkApproveJobs } from '../../hooks/useJob'; import { StatusBadge } from '../../components/StatusBadge'; @@ -49,11 +49,9 @@ export function QCList() { const jobs = jobsResponse?.jobs || []; // Check if any selected job has accessible_video_mp4 requested - const anySelectedHasAccessibleVideo = useMemo(() => { - return jobs.some(job => - selectedJobs.has(job.id) && job.requested_outputs.accessible_video_mp4 - ); - }, [jobs, selectedJobs]); + const anySelectedHasAccessibleVideo = jobs.some(job => + selectedJobs.has(job.id) && job.requested_outputs.accessible_video_mp4 + ); const toggleJobSelection = (jobId: string) => { const newSelected = new Set(selectedJobs);