import { useState, useCallback, useRef } from '../lib/teact/teact'; export type ReducerAction = { type: Actions; payload?: any }; export type StateReducer = (state: State, action: ReducerAction) => State; export type Dispatch = (action: ReducerAction) => void; export default function useReducer( reducer: StateReducer, initialState: State, ) { const reducerRef = useRef(reducer); const [state, setState] = useState(initialState); const dispatch = useCallback((action: ReducerAction) => { setState((currentState) => reducerRef.current(currentState, action)); }, []); return [ state, dispatch, ] as [State, Dispatch]; }