import { Action } from 'redux'; import { UPDATE_SCROLL_TOP, START_CONSECUTIVE_TOGGLE, LogMonitorAction, } from './actions'; import { LogMonitorProps } from './LogMonitor'; function initialScrollTop>( props: LogMonitorProps, state = 0, action: LogMonitorAction, ) { if (!props.preserveScrollTop) { return 0; } return action.type === UPDATE_SCROLL_TOP ? action.scrollTop : state; } function startConsecutiveToggle>( props: LogMonitorProps, state: number | null | undefined, action: LogMonitorAction, ) { return action.type === START_CONSECUTIVE_TOGGLE ? action.id : state; } export interface LogMonitorState { initialScrollTop: number; consecutiveToggleStartId: number | null | undefined; } export default function reducer>( props: LogMonitorProps, state: Partial = {}, action: LogMonitorAction, ): LogMonitorState { return { initialScrollTop: initialScrollTop(props, state.initialScrollTop, action), consecutiveToggleStartId: startConsecutiveToggle( props, state.consecutiveToggleStartId, action, ), }; }