@mic-rexjs/usecases-react
Version:
React-based solution for use usecases of Clean Architecture
27 lines • 1.17 kB
JavaScript
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));
});
};