UNPKG

@mic-rexjs/usecases-react

Version:

React-based solution for use usecases of Clean Architecture

21 lines (20 loc) 1 kB
import React, { useMemo } from 'react'; import { useLatest } from 'ahooks'; import { useConstantFn } from '../useConstantFn'; import { useContextUseCase } from '../useContextUseCase'; export const useProvider = (statuses, context, store, reducers) => { const { value: entity } = store; const { createContextValue } = useContextUseCase(); const contextValue = useMemo(() => { void entity; return createContextValue(store, reducers, statuses); }, [statuses, entity, store, reducers, createContextValue]); const contextValueRef = useLatest(contextValue); return useConstantFn(({ children, with: withProviders = [] }) => { const { Provider: ContextProvider } = context; const { current: value } = contextValueRef; return React.createElement(ContextProvider, { value }, withProviders.reduceRight((currentChildren, withProvider) => { return React.createElement(withProvider, {}, currentChildren); }, children)); }); };