UNPKG

@sigi/react

Version:

React bindings for sigi framework

54 lines (48 loc) 2.1 kB
'use strict'; 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