import { useMemo, } from 'react'; import createCTAHistory from './createCTAHistory'; import createDispatchInterface from './createDispatchInterface'; import type { UseCTAParameterCreateFunc, UseCTAParameterCreateFuncReturnRecord, } from '../types/UseCTAParameterCreateFunc'; import type { CTAState, } from '../types/CTAState'; import type { UseCTAParameter, } from '../types/UseCTAParameter'; import type { UseCTAReturnType, } from '../types/UseCTAReturnType'; import type { UsePrivateCTAReturnType, } from './usePrivateCTA'; export default function usePublicCTA< Initial extends CTAState, Actions, FR extends UseCTAParameterCreateFuncReturnRecord, >( params: { actions?: UseCTAParameter['actions'] stateDispatcher: UsePrivateCTAReturnType createFunc: UseCTAParameterCreateFunc }, ): UseCTAReturnType { const { actions, createFunc, } = params; const [ ctaState, ctaDispatch, ] = params.stateDispatcher; const dispatch = useMemo( () => createDispatchInterface( ( ...args ) => { ctaDispatch( ...args, ); }, ctaState, createFunc, actions, ), // eslint-disable-next-line react-hooks/exhaustive-deps [ ], ); return useMemo( () => { const history = createCTAHistory( ctaState, ); dispatch.history = history; return [ history, dispatch, ]; }, [ ctaState, dispatch, ], ); }