UNPKG

@mic-rexjs/usecases-react

Version:

React-based solution for use usecases of Clean Architecture

27 lines 1.17 kB
import { useConstantFn } from '../useConstantFn'; import { useCreation, useLatest } from 'ahooks'; import React from 'react'; import { contextUseCase } from '../../usecases/contextUseCase'; export const useProvider = (statuses, context, store, reducers) => { const entity = store.value; const contextValue = useCreation(() => { const _contextUseCase = contextUseCase(), createContextValue = _contextUseCase.createContextValue; void entity; return createContextValue(store, reducers, statuses); }, [statuses, entity, store, reducers]); const contextValueRef = useLatest(contextValue); return useConstantFn(_ref => { let children = _ref.children, _ref$with = _ref.with, withProviders = _ref$with === void 0 ? [] : _ref$with; const ContextProvider = context.Provider; const value = contextValueRef.current; const providers = Array.isArray(withProviders) ? withProviders : [withProviders]; return React.createElement(ContextProvider, { value }, providers.reduceRight((currentChildren, withProvider) => { return React.createElement(withProvider, {}, currentChildren); }, children)); }); };