From 7094114c36c861c8feba52f8c8ff99d2c2cc04b1 Mon Sep 17 00:00:00 2001 From: AI Assistant Date: Wed, 11 Mar 2026 00:30:38 +0200 Subject: [PATCH] fix: hooks order violation in DeadlineResolveDialog causing crash useMemo was called after early return (when deadline=null), violating React Rules of Hooks. Moved all hooks before the conditional return. Co-Authored-By: Claude Opus 4.6 --- .../registratura/components/deadline-resolve-dialog.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/modules/registratura/components/deadline-resolve-dialog.tsx b/src/modules/registratura/components/deadline-resolve-dialog.tsx index bf93dd6..0208a4b 100644 --- a/src/modules/registratura/components/deadline-resolve-dialog.tsx +++ b/src/modules/registratura/components/deadline-resolve-dialog.tsx @@ -30,9 +30,7 @@ export function DeadlineResolveDialog({ open, deadline, onOpenChange, onResolve const [resolution, setResolution] = useState('completed'); const [note, setNote] = useState(''); - if (!deadline) return null; - - const def = getDeadlineType(deadline.typeId); + const def = deadline ? getDeadlineType(deadline.typeId) : undefined; // "intrerupt" option only for avize deadlines that have a chain (interruption mechanism) const filteredOptions = useMemo(() => { @@ -45,6 +43,8 @@ export function DeadlineResolveDialog({ open, deadline, onOpenChange, onResolve // eslint-disable-next-line react-hooks/exhaustive-deps }, [def?.chainNextTypeId, def?.category]); + if (!deadline) return null; + // Chain fires on completed, aprobat-tacit, or intrerupt (for avize interruption) const hasChain = def?.chainNextTypeId && ( resolution === 'completed' || resolution === 'aprobat-tacit' || resolution === 'intrerupt'