diff --git a/ivette/.eslintrc.js b/ivette/.eslintrc.js index 616c6cfcd375dff57f7bb757cec10f553d5b19a9..7c42af4153fd5aab1724dafbb91c50ee1613214c 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 c9e6752c9251fad51513131ef2a3a2fb8b9b914e..f6ce22153b9d82e50ce33869e4e741573f6549dc 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 3cf6d7cd231d0554031d60b11f9e239fdc42329e..51ef3fcd73e7d3c48ea19f45cf4e2fca3213aa9d 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 22da71e13988dcad55bc25d67cd3e50882eae19d..030a2180b9095f35002e52801dd965da59a3e0d2 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 5cba35d887a82293a2c5ee5c482eda406729fdd4..10183ca75614a75697b5faf8bcf74f11a418f06c 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 e35b929d4766762beef45a01ecd3b55126716021..b58016474673ba099755a7fc001ff0c593efde98 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' }