rxdeep
Version:
RxJS deep state management
21 lines • 869 B
JavaScript
import { merge } from 'rxjs';
import { tap, filter } from 'rxjs/operators';
import { State } from './state';
export class PersistentState extends State {
constructor(state, storage, transform) {
super(state.value, merge(state.downstream, state.downstream.pipe(filter(change => this._received !== change.value), transform || (_ => _), tap(change => {
this._received = change.value;
storage.save(change.value);
}), filter(() => false)), storage.load().pipe(tap(value => {
this._received = value;
this.next(value);
}), filter(() => false))), state.upstream);
this.state = state;
this.storage = storage;
this.transform = transform;
}
}
export function persistent(state, storage) {
return new PersistentState(state, storage);
}
//# sourceMappingURL=persistent.js.map