import { Observable, empty } from 'rxjs'; import { distinctUntilChanged, filter, map, mergeMapTo, tap } from 'rxjs/operators'; import { RootState } from 'wdk-client/Core/State/Types'; // Perform a side effect based on state changes export function stateEffect(state$: Observable, getValue: (state: RootState) => K, effect: (value: NonNullable) => void) { return state$.pipe( map(getValue), filter((value): value is NonNullable => value != null), distinctUntilChanged(), tap(effect), mergeMapTo(empty()) ); }