public static IObservable <Unit> ObserveReset(IHotObservable <Step> stepObservable) { return(stepObservable .Scan( new { IsReset = false, Step = Step.Start }, (previous, current) => new { IsReset = (current == Step.Start) && (previous.Step != Step.Start), Step = current }) .Where(pair => pair.IsReset) .SelectUnit()); }
public static IObservable <(Step Step, Result Result)> ObserveStepResult( IHotObservable <Step> stepObservable, IObservable <Unit> okObservable, IObservable <Unit> cancelObservable, IObservable <Unit> postponeObservable) { return(stepObservable .SelectManyCancelPrevious(step => Observable .Merge( okObservable.Select(_ => Result.Ok), cancelObservable.Select(_ => Result.Cancel), postponeObservable.Select(_ => Result.Postpone)) .Select(result => (step, result)))); }