UNPKG

@sigi/react

Version:

React bindings for sigi framework

31 lines 1.31 kB
import { useDebugValue } from 'react'; import { identity, skip } from 'rxjs'; import { useSyncExternalStoreWithSelector } from 'use-sync-external-store/with-selector'; import { useInstance } from './injectable-context'; import { shallowEqual } from './shallow-equal'; export function useDispatchers(A) { const effectModule = useInstance(A); return effectModule.dispatchers; } function _useModuleState(store, selector = identity, equalFn = shallowEqual) { const state = useSyncExternalStoreWithSelector((onStoreChange) => { const sub = store.state$.pipe(skip(1)).subscribe(onStoreChange); return () => sub.unsubscribe(); }, () => store.state, () => store.state, selector, equalFn); useDebugValue(state); return state; } export function useModuleState(A, config) { const { store } = useInstance(A); return _useModuleState(store, config?.selector, config?.equalFn); } export function useModule(A, config) { const effectModule = useInstance(A); const { store } = effectModule; const appState = _useModuleState(store, config?.selector); const appDispatcher = effectModule.dispatchers; return [appState, appDispatcher]; } export { SSRContext } from './ssr-context'; export * from './injectable-context'; //# sourceMappingURL=index.browser.js.map