From 559edd0bcbba2e14b91e032a085062844cf49ef5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Loi=CC=88c=20Correnson?= <loic.correnson@cea.fr>
Date: Thu, 2 Jun 2022 14:33:14 +0200
Subject: [PATCH] [dome] more features on timers

---
 ivette/src/dome/renderer/dome.tsx | 28 ++++++++++++++++++++++------
 1 file changed, 22 insertions(+), 6 deletions(-)

diff --git a/ivette/src/dome/renderer/dome.tsx b/ivette/src/dome/renderer/dome.tsx
index d04e21d20fc..7752ea709bd 100644
--- a/ivette/src/dome/renderer/dome.tsx
+++ b/ivette/src/dome/renderer/dome.tsx
@@ -672,14 +672,20 @@ const DEC_CLOCK = (period: number): void => {
 };
 
 export interface Timer {
-  /** Starts the timer, if not yet. */
+  /** Starts or re-start the timer. */
   start(): void;
   /** Stops the timer. Can be restarted after. */
   stop(): void;
-  /** Elapsed time (in milliseconds). */
-  time: number;
+  /** Stops and reset elapsed time. */
+  clear(): void;
   /** Running timer. */
   running: boolean;
+  /** Elapsed time (in milliseconds). */
+  time: number;
+  /** Number of periods (rounded). */
+  periods: number;
+  /** Blink state (odd number of periods). */
+  blink: boolean;
 }
 
 /**
@@ -695,16 +701,24 @@ export interface Timer {
    @param initStart - whether to initially start the timer (default is `false`)
 
  */
-export function useClock(period: number, initStart: boolean): Timer {
+export function useClock(period: number, initStart = false): Timer {
   const started = React.useRef(0);
   const [time, setTime] = React.useState(0);
   const [running, setRunning] = React.useState(initStart);
-  const start = React.useCallback(() => setRunning(false), []);
+  const start = React.useCallback(() => {
+    setRunning(true);
+    setTime(0);
+  }, []);
   const stop = React.useCallback(() => {
     setRunning(false);
     setTime(0);
     started.current = 0;
   }, []);
+  const clear = React.useCallback(() => {
+    setRunning(false);
+    started.current = time;
+    setTime(0);
+  }, [time]);
   React.useEffect(() => {
     if (running) {
       const event = INC_CLOCK(period);
@@ -719,7 +733,9 @@ export function useClock(period: number, initStart: boolean): Timer {
       };
     } return undefined;
   }, [period, running]);
-  return { time, running, start, stop };
+  const periods = Math.ceil(time / period);
+  const blink = !!(periods & 1);
+  return { running, time, periods, blink, start, stop, clear };
 }
 
 // --------------------------------------------------------------------------
-- 
GitLab