diff options
| author | Pinapelz <yukais@pinapelz.com> | 2025-06-28 17:26:46 -0700 |
|---|---|---|
| committer | Pinapelz <yukais@pinapelz.com> | 2025-06-28 17:43:56 -0700 |
| commit | e4fa1e69e7ebfb627c7198fd1a9881e9327ec4d4 (patch) | |
| tree | 06284a538a6008eca75051399e47db4e5d50301c /node_modules/rxjs/src/internal/observable/iif.ts | |
initial commit: scaffolding
Diffstat (limited to 'node_modules/rxjs/src/internal/observable/iif.ts')
| -rw-r--r-- | node_modules/rxjs/src/internal/observable/iif.ts | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/node_modules/rxjs/src/internal/observable/iif.ts b/node_modules/rxjs/src/internal/observable/iif.ts new file mode 100644 index 0000000..d9ea9f1 --- /dev/null +++ b/node_modules/rxjs/src/internal/observable/iif.ts @@ -0,0 +1,85 @@ +import { Observable } from '../Observable'; +import { defer } from './defer'; +import { ObservableInput } from '../types'; + +/** + * Checks a boolean at subscription time, and chooses between one of two observable sources + * + * `iif` expects a function that returns a boolean (the `condition` function), and two sources, + * the `trueResult` and the `falseResult`, and returns an Observable. + * + * At the moment of subscription, the `condition` function is called. If the result is `true`, the + * subscription will be to the source passed as the `trueResult`, otherwise, the subscription will be + * to the source passed as the `falseResult`. + * + * If you need to check more than two options to choose between more than one observable, have a look at the {@link defer} creation method. + * + * ## Examples + * + * Change at runtime which Observable will be subscribed + * + * ```ts + * import { iif, of } from 'rxjs'; + * + * let subscribeToFirst; + * const firstOrSecond = iif( + * () => subscribeToFirst, + * of('first'), + * of('second') + * ); + * + * subscribeToFirst = true; + * firstOrSecond.subscribe(value => console.log(value)); + * + * // Logs: + * // 'first' + * + * subscribeToFirst = false; + * firstOrSecond.subscribe(value => console.log(value)); + * + * // Logs: + * // 'second' + * ``` + * + * Control access to an Observable + * + * ```ts + * import { iif, of, EMPTY } from 'rxjs'; + * + * let accessGranted; + * const observableIfYouHaveAccess = iif( + * () => accessGranted, + * of('It seems you have an access...'), + * EMPTY + * ); + * + * accessGranted = true; + * observableIfYouHaveAccess.subscribe({ + * next: value => console.log(value), + * complete: () => console.log('The end') + * }); + * + * // Logs: + * // 'It seems you have an access...' + * // 'The end' + * + * accessGranted = false; + * observableIfYouHaveAccess.subscribe({ + * next: value => console.log(value), + * complete: () => console.log('The end') + * }); + * + * // Logs: + * // 'The end' + * ``` + * + * @see {@link defer} + * + * @param condition Condition which Observable should be chosen. + * @param trueResult An Observable that will be subscribed if condition is true. + * @param falseResult An Observable that will be subscribed if condition is false. + * @return An observable that proxies to `trueResult` or `falseResult`, depending on the result of the `condition` function. + */ +export function iif<T, F>(condition: () => boolean, trueResult: ObservableInput<T>, falseResult: ObservableInput<F>): Observable<T | F> { + return defer(() => (condition() ? trueResult : falseResult)); +} |
