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