| import { ObservableInputTuple, OperatorFunction, Cons } from '../types'; |
| import { combineLatest } from './combineLatest'; |
| |
| /** |
| * Create an observable that combines the latest values from all passed observables and the source |
| * into arrays and emits them. |
| * |
| * Returns an observable, that when subscribed to, will subscribe to the source observable and all |
| * sources provided as arguments. Once all sources emit at least one value, all of the latest values |
| * will be emitted as an array. After that, every time any source emits a value, all of the latest values |
| * will be emitted as an array. |
| * |
| * This is a useful operator for eagerly calculating values based off of changed inputs. |
| * |
| * ## Example |
| * |
| * Simple concatenation of values from two inputs |
| * |
| * ```ts |
| * import { fromEvent, combineLatestWith, map } from 'rxjs'; |
| * |
| * // Setup: Add two inputs to the page |
| * const input1 = document.createElement('input'); |
| * document.body.appendChild(input1); |
| * const input2 = document.createElement('input'); |
| * document.body.appendChild(input2); |
| * |
| * // Get streams of changes |
| * const input1Changes$ = fromEvent(input1, 'change'); |
| * const input2Changes$ = fromEvent(input2, 'change'); |
| * |
| * // Combine the changes by adding them together |
| * input1Changes$.pipe( |
| * combineLatestWith(input2Changes$), |
| * map(([e1, e2]) => (<HTMLInputElement>e1.target).value + ' - ' + (<HTMLInputElement>e2.target).value) |
| * ) |
| * .subscribe(x => console.log(x)); |
| * ``` |
| * |
| * @param otherSources the other sources to subscribe to. |
| * @return A function that returns an Observable that emits the latest |
| * emissions from both source and provided Observables. |
| */ |
| export function combineLatestWith<T, A extends readonly unknown[]>( |
| ...otherSources: [...ObservableInputTuple<A>] |
| ): OperatorFunction<T, Cons<T, A>> { |
| return combineLatest(...otherSources); |
| } |