From 8d03da50b3cd2f7cf831334e1ffb8f076f22794a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Loi=CC=88c=20Correnson?= <loic.correnson@cea.fr>
Date: Fri, 17 Jul 2020 15:13:19 +0200
Subject: [PATCH] [dome] link & lint

---
 ivette/.eslintrc.js                           |  2 +-
 ivette/src/dome/src/renderer/data/json.ts     |  2 +-
 ivette/src/dome/src/renderer/data/settings.ts | 31 +++++++++++--------
 ivette/src/dome/src/renderer/data/states.ts   | 21 +++++++------
 ivette/src/dome/template/webpack.renderer.js  |  2 +-
 ivette/webpack.renderer.js                    |  2 +-
 6 files changed, 34 insertions(+), 26 deletions(-)

diff --git a/ivette/.eslintrc.js b/ivette/.eslintrc.js
index 616c6cfcd37..7c42af4153f 100644
--- a/ivette/.eslintrc.js
+++ b/ivette/.eslintrc.js
@@ -17,7 +17,7 @@ module.exports = {
   },
   settings: {
     // Electron is in devDependencies because of its special build system
-    "import/core-modules": [ "electron" ]
+    "import/core-modules": [ 'electron', 'react-hot-loader' ]
   },
   rules: {
     "react/display-name": "off",
diff --git a/ivette/src/dome/src/renderer/data/json.ts b/ivette/src/dome/src/renderer/data/json.ts
index c9e6752c925..f6ce22153b9 100644
--- a/ivette/src/dome/src/renderer/data/json.ts
+++ b/ivette/src/dome/src/renderer/data/json.ts
@@ -445,7 +445,7 @@ export function jKey<K>(kd: K): Loose<key<K>> {
 
 /** Decoder for `index<K>` numbers. */
 export function jIndex<K>(kd: K): Loose<index<K>> {
-  return (js: json) => typeof js === 'number' ? forge(kd, js) : undefined;
+  return (js: json) => (typeof js === 'number' ? forge(kd, js) : undefined);
 }
 
 export type dict<A> = { [key: string]: A };
diff --git a/ivette/src/dome/src/renderer/data/settings.ts b/ivette/src/dome/src/renderer/data/settings.ts
index 3cf6d7cd231..51ef3fcd73e 100644
--- a/ivette/src/dome/src/renderer/data/settings.ts
+++ b/ivette/src/dome/src/renderer/data/settings.ts
@@ -62,26 +62,30 @@ export class GlobalSettings<A> {
 
 /** Boolean settings with `true` default. */
 export class GTrue extends GlobalSettings<boolean> {
-  constructor(name: string) { super(name, JSON.jBoolean, JSON.identity, true); }
+  constructor(name: string) {
+    super(name, JSON.jBoolean, JSON.identity, true);
+  }
 }
 
 /** Boolean settings with `false` default. */
 export class GFalse extends GlobalSettings<boolean> {
-  constructor(name: string) { super(name, JSON.jBoolean, JSON.identity, false); }
+  constructor(name: string) {
+    super(name, JSON.jBoolean, JSON.identity, false);
+  }
 }
 
 /** Numeric settings (default is zero unless specified). */
 export class GNumber extends GlobalSettings<number> {
-  constructor(name: string, defaultValue: number = 0) {
+  constructor(name: string, defaultValue = 0) {
     super(name, JSON.jNumber, JSON.identity, defaultValue);
-  };
+  }
 }
 
 /** String settings (default is `""` unless specified). */
 export class GString extends GlobalSettings<string> {
-  constructor(name: string, defaultValue: string = '') {
+  constructor(name: string, defaultValue = '') {
     super(name, JSON.jString, JSON.identity, defaultValue);
-  };
+  }
 }
 
 /** Smart constructor for optional (JSON serializable) data. */
@@ -111,8 +115,8 @@ export class GObject<A extends JSON.json> extends GlobalSettings<A> {
 // --- Generic Settings (private)
 // --------------------------------------------------------------------------
 
-type patch = { key: string, value: JSON.json };
-type driver = { evt: string, ipc: string, broadcast: boolean };
+type patch = { key: string; value: JSON.json };
+type driver = { evt: string; ipc: string; broadcast: boolean };
 
 class Driver {
 
@@ -161,7 +165,8 @@ class Driver {
             }
           });
           SysEmitter.emit(this.evt);
-        });
+        },
+      );
     }
     // --- Closing Events
     ipcRenderer.on('dome.ipc.closing', () => {
@@ -241,7 +246,7 @@ function useSettings<A>(
       const event = D.evt;
       const callback = () => setValue(loader());
       SysEmitter.on(event, callback);
-      return () => { SysEmitter.off(event, callback); }
+      return () => { SysEmitter.off(event, callback); };
     }
     return undefined;
   });
@@ -251,7 +256,7 @@ function useSettings<A>(
       setValue(newValue);
       if (K) D.save(K, S.encoder(newValue));
     }
-  }, [S, D, K]);
+  }, [S, D, K, value]);
   return [value, updateValue];
 }
 
@@ -304,7 +309,7 @@ export function useWindowSettings<A extends JSON.json>(
   return useSettings({
     decoder,
     encoder: JSON.identity,
-    defaultValue
+    defaultValue,
   }, WindowDriver, key);
 }
 
@@ -318,7 +323,7 @@ export function useWindowSettingsData<A>(
   return useSettings({
     decoder,
     encoder,
-    defaultValue
+    defaultValue,
   }, WindowDriver, key);
 }
 
diff --git a/ivette/src/dome/src/renderer/data/states.ts b/ivette/src/dome/src/renderer/data/states.ts
index 22da71e1398..030a2180b90 100644
--- a/ivette/src/dome/src/renderer/data/states.ts
+++ b/ivette/src/dome/src/renderer/data/states.ts
@@ -16,17 +16,17 @@ import isEqual from 'react-fast-compare';
 // --- State utilities
 // --------------------------------------------------------------------------
 
-/** Alias to `[state,setState]` returned values*/
+/** Alias to `[state,setState]` returned values */
 export type State<A> = [A, (newValue: A) => void];
 
 /** State field of an object state. */
-export function key<A, K extends keyof A>(
+export function keyOf<A, K extends keyof A>(
   state: State<A>,
   key: K,
 ): State<A[K]> {
   const [props, setProps] = state;
   return [props[key], (value: A[K]) => {
-    const newProps = Object.assign({}, props);
+    const newProps = { ...props };
     newProps[key] = value;
     setProps(newProps);
   }];
@@ -35,12 +35,12 @@ export function key<A, K extends keyof A>(
 /** State index of an array state. */
 export function index<A>(
   state: State<A[]>,
-  index: number,
+  idx: number,
 ): State<A> {
   const [array, setArray] = state;
-  return [array[index], (value: A) => {
+  return [array[idx], (value: A) => {
     const newArray = array.slice();
-    newArray[index] = value;
+    newArray[idx] = value;
     setArray(newArray);
   }];
 }
@@ -48,13 +48,16 @@ export function index<A>(
 /** Log state updates in the console. */
 export function debug<A>(msg: string, st: State<A>): State<A> {
   const [value, setValue] = st;
-  return [value, (v) => { console.log(msg, v); setValue(v); }];
+  return [value, (v) => {
+    setValue(v);
+    console.log(msg, v); // eslint-disable-line no-console
+  }];
 }
 
 /** Purely local value. No hook, no events, just a ref. */
 export function local<A>(init: A): State<A> {
   const ref = { current: init };
-  return [ref.current, (v) => ref.current = v];
+  return [ref.current, (v) => { ref.current = v; }];
 }
 
 // --------------------------------------------------------------------------
@@ -109,6 +112,6 @@ export function useGlobalState<A>(s: GlobalState<A>): State<A> {
     return () => s.off(setCurrent);
   }, [s]);
   return [current, s.setValue];
-};
+}
 
 // --------------------------------------------------------------------------
diff --git a/ivette/src/dome/template/webpack.renderer.js b/ivette/src/dome/template/webpack.renderer.js
index 5cba35d887a..10183ca7561 100644
--- a/ivette/src/dome/template/webpack.renderer.js
+++ b/ivette/src/dome/template/webpack.renderer.js
@@ -25,7 +25,7 @@ module.exports = {
       '@plugins':     path.resolve( __dirname , 'src/plugins' ),
       'dome/misc':    path.resolve( DOME , 'src/misc' ),
       'dome/system':  path.resolve( DOME , 'src/misc/system.js' ),
-      'dome$':        path.resolve( DOME , 'src/renderer/dome.js' ),
+      'dome$':        path.resolve( DOME , 'src/renderer/dome.ts' ),
       'dome':         path.resolve( DOME , 'src/renderer' ),
       'react-dom':    '@hot-loader/react-dom'
     }
diff --git a/ivette/webpack.renderer.js b/ivette/webpack.renderer.js
index e35b929d476..b5801647467 100644
--- a/ivette/webpack.renderer.js
+++ b/ivette/webpack.renderer.js
@@ -31,7 +31,7 @@ module.exports = {
       '@plugins':     path.resolve( __dirname , 'src/plugins' ),
       'dome/misc':    path.resolve( DOME , 'src/misc' ),
       'dome/system':  path.resolve( DOME , 'src/misc/system.js' ),
-      'dome$':        path.resolve( DOME , 'src/renderer/dome.js' ),
+      'dome$':        path.resolve( DOME , 'src/renderer/dome.ts' ),
       'dome':         path.resolve( DOME , 'src/renderer' ),
       'react-dom':    '@hot-loader/react-dom'
     }
-- 
GitLab