From b6af3579f31b797dea0ebb7ce8461b29d0f60deb Mon Sep 17 00:00:00 2001
From: rlazarini <remi.lazarini@cea.fr>
Date: Tue, 13 Feb 2024 14:04:43 +0100
Subject: [PATCH] [ivette] useServerField : rename state + remove unnecessary
 useEffect

---
 ivette/src/frama-c/states.ts | 18 +++++++-----------
 1 file changed, 7 insertions(+), 11 deletions(-)

diff --git a/ivette/src/frama-c/states.ts b/ivette/src/frama-c/states.ts
index 5f4634cbf58..5b1f79c9a49 100644
--- a/ivette/src/frama-c/states.ts
+++ b/ivette/src/frama-c/states.ts
@@ -36,8 +36,8 @@ import { Order } from 'dome/data/compare';
 import { GlobalState, useGlobalState } from 'dome/data/states';
 import { Client, useModel } from 'dome/table/models';
 import { CompactModel } from 'dome/table/arrays';
+import { FieldState, FieldError, isValid } from 'dome/layout/forms';
 import * as Ast from 'frama-c/kernel/api/ast';
-import { FieldState, FieldError } from 'dome/layout/forms';
 import * as Server from './server';
 
 // --------------------------------------------------------------------------
@@ -314,24 +314,20 @@ export function useServerField<A>(
   defaultValue: A,
 ): FieldState<A> {
   const [value, setState] = useSyncState(state);
-  const [localValue, setLocalValue] = React.useState(value);
-  const [localError, setLocalError] = React.useState<FieldError>(undefined);
-
-  React.useEffect(() => {
-    !localError && setLocalValue(value);
-  }, [value, localError]);
+  const [local, setLocal] = React.useState(value);
+  const [error, setError] = React.useState<FieldError>(undefined);
 
   const update = React.useCallback((newValue: A, newError: FieldError) => {
-    setLocalValue(newValue);
-    setLocalError(newError);
+    setLocal(newValue);
+    setError(newError);
     if (!newError) {
       setState(newValue);
     }
   }, [setState]);
 
   return {
-    value: localValue ?? defaultValue,
-    error: localError,
+    value: (isValid(error) ? value : local) || defaultValue,
+    error,
     reset: value,
     onChanged: update
   };
-- 
GitLab