@sigi/react
Version:
React bindings for sigi framework
54 lines (48 loc) • 2.1 kB
JavaScript
;
var jsxRuntime = require('react/jsx-runtime');
var di = require('@sigi/di');
var react = require('react');
const _InjectableContext = react.createContext(di.rootInjector);
const InjectionProvidersContext = react.memo(({ providers = [], children }) => {
const parentInjector = react.useContext(_InjectableContext);
const childInjectableFactory = react.useMemo(() => parentInjector.createChild(providers), [parentInjector, ...providers]);
return jsxRuntime.jsx(_InjectableContext.Provider, { value: childInjectableFactory, children: children });
});
function useInstance(provider) {
const childInjector = react.useContext(_InjectableContext);
return childInjector.getInstance(provider);
}
function useServerInstance(provider) {
const childInjector = react.useContext(_InjectableContext);
return childInjector.serverCache?.get(provider) || childInjector.getInstance(provider);
}
const SSRContext = _InjectableContext.Provider;
const SERVER_DISPATCHERS = new Proxy(Object.create(null), {
apply() {
if (process.env.NODE_ENV !== 'production') {
console.warn(new Error('Dispatch while calling react-dom/server functions is forbidden'));
}
},
});
function useDispatchers(_A) {
return SERVER_DISPATCHERS;
}
function useModuleState(A, config) {
const { store } = useServerInstance(A);
return typeof config?.selector === 'function' ? config.selector(store.state) : store.state;
}
function useModule(A, config) {
const effectModule = useServerInstance(A);
const { store } = effectModule;
const appState = typeof config?.selector === 'function' ? config.selector(store.state) : store.state;
return [appState, SERVER_DISPATCHERS];
}
exports.InjectionProvidersContext = InjectionProvidersContext;
exports.SSRContext = SSRContext;
exports._InjectableContext = _InjectableContext;
exports.useDispatchers = useDispatchers;
exports.useInstance = useInstance;
exports.useModule = useModule;
exports.useModuleState = useModuleState;
exports.useServerInstance = useServerInstance;
//# sourceMappingURL=index.js.map