aboutsummaryrefslogtreecommitdiffstats
path: root/node_modules/rxjs/src/internal/observable/iif.ts
diff options
context:
space:
mode:
authorPinapelz <yukais@pinapelz.com>2025-06-28 17:26:46 -0700
committerPinapelz <yukais@pinapelz.com>2025-06-28 17:43:56 -0700
commite4fa1e69e7ebfb627c7198fd1a9881e9327ec4d4 (patch)
tree06284a538a6008eca75051399e47db4e5d50301c /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.ts85
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));
+}
send patches to the email below
yukais@pinapelz.com
include the subject [PATCH repo_name]
pinapelz.com
homepage