import {Dispatch, SetStateAction, useMemo, useState} from "react"; export function useDependentState( factory: (prevState?: S) => S, inputs: ReadonlyArray, ): [S, Dispatch>] { let skipCalculation = false; let [state, setState] = useState(() => { skipCalculation = true; return factory(undefined); }); useMemo(() => { if(skipCalculation) { return; } const newState = factory(state); if (newState !== state) { setState(state = newState); } }, inputs); return [state, setState]; } export function joinClassList(...classes: any[]) : string { return classes.filter(value => typeof value === "string" && value.length > 0).join(" "); }