SplitSignal

com.raquo.airstream.split.SplitSignal
class SplitSignal[M[_], Input, Output, Key](val parent: Signal[M[Input]], key: Input => Key, distinctCompose: Signal[Input] => Signal[Input], project: (Key, Input, Signal[Input]) => Output, splittable: Splittable[M], duplicateKeysConfig: DuplicateKeysConfig) extends SingleParentSignal[M[Input], M[Output]]

Broadly similar to parent.map(_.map(project)), but the project part gets access to more data and is memoized by key.

See docs.

Value parameters

distinctCompose

Transformation to apply to each key's input stream before providing it to project - Usually you want _.distinct here, so that each of the streams is only triggered when the input for its key actually changes (otherwise they would get an update every time that the parent stream emitted)

key

A sort of grouping / memoization key for inputs in parent

project

(key, initialInput, inputChangesForThisKey) => output - Will only be called ONCE for a given key as long as parent contains an Input for this Key - Updates to Input with this Key will be published in inputChangesForThisKey - After parent stops containing an Input for this Key, we forget we ever called project for this key

Attributes

Graph
Supertypes
trait SingleParentSignal[M[Input], M[Output]]
trait InternalTryObserver[M[Input]]
trait InternalObserver[M[Input]]
trait WritableSignal[M[Output]]
trait WritableObservable[M[Output]]
trait Signal[M[Output]]
trait SignalSource[M[Output]]
trait Observable[M[Output]]
trait BaseObservable[Signal, M[Output]]
trait Named
trait Source[M[Output]]
class Object
trait Matchable
class Any
Show all

Members list

Value members

Inherited methods

override def addObserver(observer: Observer[M[Output]])(implicit owner: Owner): Subscription

Subscribe an external observer to this observable

Subscribe an external observer to this observable

Attributes

Definition Classes
Inherited from:
WritableObservable
def changes[AA >: M[Output]](compose: EventStream[M[Output]] => EventStream[AA]): Signal[AA]

Modify the Signal's changes, e.g. signal.changes(_.delay(ms = 100))

Modify the Signal's changes, e.g. signal.changes(_.delay(ms = 100))

Alias to composeChanges. See also: composeAll

Value parameters

compose

Note: Must not throw!

Attributes

Inherited from:
Signal

A stream of all values in this signal, excluding the initial value.

A stream of all values in this signal, excluding the initial value.

When re-starting this stream, it emits the signal's new current value if and only if something has caused the signal's value to be updated or re-evaluated while the changes stream was stopped. This way the changes stream stays in sync with the signal even after restarting.

Attributes

Inherited from:
Signal
def compose[B](operator: Signal[M[Output]] => Signal[B]): Signal[B]

Value parameters

operator

Note: Must not throw!

Attributes

Inherited from:
Signal
def composeAll[B](changesOperator: EventStream[M[Output]] => EventStream[B], initialOperator: Try[M[Output]] => Try[B], cacheInitialValue: Boolean): Signal[B]

Modify both the Signal's changes stream, and its initial. Similar to composeChanges, but lets you output a type unrelated to A.

Modify both the Signal's changes stream, and its initial. Similar to composeChanges, but lets you output a type unrelated to A.

Value parameters

changesOperator

Note: Must not throw!

initialOperator

Note: Must not throw!

Attributes

Inherited from:
Signal
def composeChanges[AA >: M[Output]](operator: EventStream[M[Output]] => EventStream[AA]): Signal[AA]

Modify the Signal's changes stream, e.g. signal.composeChanges(_.delay(ms = 100))

Modify the Signal's changes stream, e.g. signal.composeChanges(_.delay(ms = 100))

Alias to changes(operator). See also: composeAll

Value parameters

operator

Note: Must not throw!

Attributes

Inherited from:
Signal
override def debugWith(debugger: Debugger[M[Output]]): Signal[A]

Attributes

Definition Classes
Inherited from:
Signal
protected def defaultDisplayName: String

This is the method that subclasses override to preserve the user's ability to set custom display names.

This is the method that subclasses override to preserve the user's ability to set custom display names.

Attributes

Inherited from:
Named
final def displayName: String

Attributes

Inherited from:
Named
def distinct: Self[A]

Distinct events (but keep all errors) by == (equals) comparison

Distinct events (but keep all errors) by == (equals) comparison

Attributes

Inherited from:
BaseObservable
def distinctBy(key: M[Output] => Any): Self[A]

Distinct events (but keep all errors) by matching key Note: key(event) might be evaluated more than once for each event

Distinct events (but keep all errors) by matching key Note: key(event) might be evaluated more than once for each event

Attributes

Inherited from:
BaseObservable
def distinctByFn(isSame: (M[Output], M[Output]) => Boolean): Self[A]

Distinct events (but keep all errors) using a comparison function

Distinct events (but keep all errors) using a comparison function

Attributes

Inherited from:
BaseObservable
def distinctByRef(implicit ev: M[Output] <:< AnyRef): Self[A]

Distinct events (but keep all errors) by reference equality (eq)

Distinct events (but keep all errors) by reference equality (eq)

Attributes

Inherited from:
BaseObservable
def distinctErrors(isSame: (Throwable, Throwable) => Boolean): Self[A]

Distinct errors only (but keep all events) using a comparison function

Distinct errors only (but keep all events) using a comparison function

Attributes

Inherited from:
BaseObservable
override def distinctTry(isSame: (Try[M[Output]], Try[M[Output]]) => Boolean): Signal[A]

Distinct all values (both events and errors) using a comparison function

Distinct all values (both events and errors) using a comparison function

Attributes

Definition Classes
Inherited from:
Signal
final override def equals(obj: Any): Boolean

Airstream may internally use Scala library functions which use == or hashCode for equality, for example List.contains. Comparing observables by structural equality pretty much never makes sense, yet it's not that hard to run into that, all you need is to create a case class subclass, and the Scala compiler will generate a structural-equality equals and hashCode methods for you behind the scenes.

Airstream may internally use Scala library functions which use == or hashCode for equality, for example List.contains. Comparing observables by structural equality pretty much never makes sense, yet it's not that hard to run into that, all you need is to create a case class subclass, and the Scala compiler will generate a structural-equality equals and hashCode methods for you behind the scenes.

To prevent that, we make equals and hashCode methods final, using the default implementation (which is reference equality).

Attributes

Definition Classes
Inherited from:
BaseObservable
final override protected def fireError(nextError: Throwable, transaction: Transaction): Unit

Attributes

Definition Classes
Inherited from:
WritableSignal
override protected def fireTry(nextValue: Try[M[Output]], transaction: Transaction): Unit

Signal propagates only if its value has changed

Signal propagates only if its value has changed

Attributes

Definition Classes
Inherited from:
WritableSignal
final override protected def fireValue(nextValue: M[Output], transaction: Transaction): Unit

Attributes

Definition Classes
Inherited from:
WritableSignal
def flatMap[B, Inner[_], Output <: (Observable)](project: M[Output] => Inner[B])(implicit strategy: SwitchingStrategy[Signal, Inner, Output], allowFlatMap: AllowFlatMap): Output[B]

#WARNING: DO NOT USE THIS METHOD. See https://github.com/raquo/Airstream/#flattening-observables

#WARNING: DO NOT USE THIS METHOD. See https://github.com/raquo/Airstream/#flattening-observables

Attributes

Inherited from:
BaseObservable
def flatMapCustom[B, Inner[_], Output <: (Observable)](project: M[Output] => Inner[B])(strategy: FlattenStrategy[Signal, Inner, Output]): Output[B]

Value parameters

project

Note: guarded against exceptions

Attributes

Inherited from:
BaseObservable
def flatMapMerge[B, Inner[_], Output <: (Observable)](project: M[Output] => Inner[B])(implicit strategy: MergingStrategy[Signal, Inner, Output]): Output[B]

Value parameters

project

Note: guarded against exceptions

Attributes

Inherited from:
BaseObservable
def flatMapSwitch[B, Inner[_], Output <: (Observable)](project: M[Output] => Inner[B])(implicit strategy: SwitchingStrategy[Signal, Inner, Output]): Output[B]

Value parameters

project

Note: guarded against exceptions

Attributes

Inherited from:
BaseObservable
def flatMapTo[B, Inner[_], Output <: (Observable)](s: => Inner[B])(implicit strategy: SwitchingStrategy[Signal, Inner, Output]): Output[B]

Alias to flatMapSwitch(_ => s)

Alias to flatMapSwitch(_ => s)

Attributes

Inherited from:
BaseObservable
def flatMapWithStatus[B](innerStream: => EventStream[B]): Self[Status[A, B]]

Shorthand for flatMapWithStatus(_ => innerStream).

Shorthand for flatMapWithStatus(_ => innerStream).

Attributes

Inherited from:
BaseObservable
def flatMapWithStatus[B](project: M[Output] => EventStream[B]): Self[Status[A, B]]

Based on flatMapSwitch, but tracks the status of input and output to flatMap. See Status.

Based on flatMapSwitch, but tracks the status of input and output to flatMap. See Status.

Attributes

Inherited from:
BaseObservable
def foreach(onNext: M[Output] => Unit)(implicit owner: Owner): Subscription

Create an external observer from a function and subscribe it to this observable.

Create an external observer from a function and subscribe it to this observable.

Note: since you won't have a reference to the observer, you will need to call Subscription.kill() to unsubscribe

Attributes

Inherited from:
BaseObservable
final override def hashCode(): Int

Force reference equality checks. See comment for equals.

Force reference equality checks. See comment for equals.

Attributes

Definition Classes
Inherited from:
BaseObservable
override def map[B](project: M[Output] => B): Signal[B]

Value parameters

project

Note: guarded against exceptions

Attributes

Definition Classes
Inherited from:
Signal
def mapTo[B](value: => B): Self[B]

value is passed by name, so it will be evaluated whenever the Observable fires. Use it to sample mutable values (e.g. myInput.ref.value in Laminar).

value is passed by name, so it will be evaluated whenever the Observable fires. Use it to sample mutable values (e.g. myInput.ref.value in Laminar).

See also: mapToStrict

Value parameters

value

Note: guarded against exceptions

Attributes

Inherited from:
BaseObservable
def mapToStrict[B](value: B): Self[B]

value is evaluated strictly, only once, when this method is called.

value is evaluated strictly, only once, when this method is called.

See also: mapTo

Attributes

Inherited from:
BaseObservable
def mapToUnit: Self[Unit]

Attributes

Inherited from:
BaseObservable
def matchStreamOrSignal[B](ifStream: EventStream[M[Output]] => B, ifSignal: Signal[M[Output]] => B): B

Attributes

Inherited from:
BaseObservable
override protected def maybeWillStart(): Unit

Attributes

Definition Classes
Inherited from:
WritableObservable
override protected def numAllObservers: Int

Total number of internal and external observers

Total number of internal and external observers

Attributes

Definition Classes
Inherited from:
WritableObservable
def observe(implicit owner: Owner): OwnedSignal[A]

Add a noop observer to this signal to ensure that it's started. This lets you access .now and .tryNow on the resulting StrictSignal.

Add a noop observer to this signal to ensure that it's started. This lets you access .now and .tryNow on the resulting StrictSignal.

You can use myStream.toWeakSignal.observe.tryNow() to read the last emitted value from event streams just as well.

Attributes

Inherited from:
Signal
final override protected def onError(nextError: Throwable, transaction: Transaction): Unit

Must not throw

Must not throw

Attributes

Definition Classes
Inherited from:
InternalTryObserver
final override protected def onNext(nextValue: M[Input], transaction: Transaction): Unit

Must not throw

Must not throw

Attributes

Definition Classes
Inherited from:
InternalTryObserver
override protected def onWillStart(): Unit

Note: this is overriden in:

Note: this is overriden in:

Attributes

Definition Classes
Inherited from:
SingleParentSignal
override def recover[B >: M[Output]](pf: PartialFunction[Throwable, Option[B]]): Signal[B]

Value parameters

pf

Note: guarded against exceptions

Attributes

Definition Classes
Inherited from:
Signal
def recoverIgnoreErrors: Self[A]

Attributes

Inherited from:
BaseObservable
override def recoverToEither: Signal[Either[Throwable, A]]

Convert this to an observable that emits Left(err) instead of erroring

Convert this to an observable that emits Left(err) instead of erroring

Attributes

Definition Classes
Inherited from:
Signal
override def recoverToTry: Signal[Try[A]]

Convert this to an observable that emits Failure(err) instead of erroring

Convert this to an observable that emits Failure(err) instead of erroring

Attributes

Definition Classes
Inherited from:
Signal
def scanLeft[B](makeInitial: M[Output] => B)(fn: (B, M[Output]) => B): Signal[B]

A signal that emits the accumulated value every time that the parent signal emits.

A signal that emits the accumulated value every time that the parent signal emits.

Value parameters

fn

Note: guarded against exceptions

makeInitial

Note: guarded against exceptions

Attributes

Inherited from:
Signal
def scanLeftRecover[B](makeInitial: Try[M[Output]] => Try[B])(fn: (Try[B], Try[M[Output]]) => Try[B]): Signal[B]

A signal that emits the accumulated value every time that the parent signal emits.

A signal that emits the accumulated value every time that the parent signal emits.

Value parameters

fn

(currentValue, nextParentValue) => nextValue

makeInitial

currentParentValue => initialValue Note: must not throw

Attributes

Inherited from:
Signal
protected def setCurrentValue(newValue: Try[M[Output]]): Unit

Attributes

Inherited from:
WritableSignal
def setDisplayName(name: String): Named.this.type

Set the display name for this instance (observable or observer).

Set the display name for this instance (observable or observer).

  • This method modifies the instance and returns this. It does not create a new instance.
  • New name you set will override the previous name, if any. This might change in the future. For the sake of sanity, don't call this more than once for the same instance.
  • If display name is set, toString will output it instead of the standard type@hashcode string

Attributes

Inherited from:
Named
def tapEach[U](f: M[Output] => U): Self[A]

Execute a side effecting callback every time the observable emits. If it's a signal, it also runs when its initial value is evaluated.

Execute a side effecting callback every time the observable emits. If it's a signal, it also runs when its initial value is evaluated.

See https://github.com/raquo/Airstream/#tapEach for more details.

Attributes

Inherited from:
BaseObservable
override def toObservable: Signal[A]

Attributes

Definition Classes
Inherited from:
Signal
def toSignalIfStream[B >: M[Output]](ifStream: EventStream[M[Output]] => Signal[B]): Signal[B]

Attributes

Inherited from:
BaseObservable
def toStreamIfSignal[B >: M[Output]](ifSignal: Signal[M[Output]] => EventStream[B]): EventStream[B]

Attributes

Inherited from:
BaseObservable
final override def toString: String

Override defaultDisplayName instead of this, if you need to.

Override defaultDisplayName instead of this, if you need to.

Attributes

Definition Classes
Named -> Any
Inherited from:
Named
def toWeakSignal: Signal[Option[A]]

Convert this observable to a signal of Option[A]. If it is a stream, set initial value to None.

Convert this observable to a signal of Option[A]. If it is a stream, set initial value to None.

Attributes

Inherited from:
BaseObservable
protected def updateCurrentValueFromParent(): Unit

Note: this is overridden in:

Note: this is overridden in:

Attributes

Inherited from:
SingleParentSignal

Deprecated and Inherited methods

def foldLeft[B](makeInitial: M[Output] => B)(fn: (B, M[Output]) => B): Signal[B]

Attributes

Deprecated
true
Inherited from:
Signal
def foldLeftRecover[B](makeInitial: Try[M[Output]] => Try[B])(fn: (Try[B], Try[M[Output]]) => Try[B]): Signal[B]

Attributes

Deprecated
true
Inherited from:
Signal

Inherited fields

protected val externalObservers: ObserverList[Observer[M[Output]]]

Note: Observer can be added more than once to an Observable. If so, it will observe each event as many times as it was added.

Note: Observer can be added more than once to an Observable. If so, it will observe each event as many times as it was added.

Attributes

Inherited from:
WritableObservable
protected val internalObservers: ObserverList[InternalObserver[M[Output]]]

Note: This is enforced to be a Set outside of the type system #performance

Note: This is enforced to be a Set outside of the type system #performance

Attributes

Inherited from:
WritableObservable
protected var maybeLastSeenCurrentValue: UndefOr[Try[M[Output]]]

Attributes

Inherited from:
WritableSignal
protected var willStartDone: Boolean

Set to true after onWillStart finishes, and until onStop finishes. It's set to false all other times. We need this to prevent onWillStart from running twice in weird cases (we have a test for that).

Set to true after onWillStart finishes, and until onStop finishes. It's set to false all other times. We need this to prevent onWillStart from running twice in weird cases (we have a test for that).

Attributes

Inherited from:
WritableObservable