import * as React from "react" // function componentDidMount(f: () => any) { // React.useEffect(() => { // f() // return // }, []) // } function useEffectVoid(fn: Function, args: any[]) { React.useEffect(() => void fn(), args) } const useRef: ( initialValue?: T, ) => React.MutableRefObject = React.useRef as any type VoidFunction = () => void type VoidFunctionFunction = () => () => void const max: number = 9007199254740990 // Number.MAX_SAFE_INTEGER - 1; export const useForceUpdate: VoidFunctionFunction = (): VoidFunction => { const [, setState] = React.useState(0) const forceUpdate: VoidFunction = (): void => { setState((state: number) => (state + 1) % max) } return forceUpdate } //https://overreacted.io/making-setinterval-declarative-with-react-hooks/ function useInterval(callback: () => void, delay: number) { const savedCallback = React.useRef void)>(null) // Remember the latest callback. React.useEffect(() => { savedCallback.current = callback }) // Set up the interval. React.useEffect(() => { function tick() { savedCallback.current!() } if (delay !== null) { let id = setInterval(tick, delay) return () => clearInterval(id) } }, [delay]) } export const HHooks = { // forceUpdateOn, useInterval, useRef, useForceUpdate, useEffectVoid, } //useForceUpdate // MIT License // Copyright (c) 2018 Charles Stover // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // The above copyright notice and this permission notice shall be included in all // copies or substantial portions of the Software. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // SOFTWARE.