All Downloads are FREE. Search and download functionalities are using the official Maven repository.

outwatch.dom.ManagedSubscriptions.scala Maven / Gradle / Ivy

The newest version!
package outwatch.dom

import cats.effect.IO
import monix.execution.Ack.Continue
import monix.execution.cancelables.CompositeCancelable
import monix.execution.{Cancelable, Scheduler}
import outwatch.dom.dsl.attributes.lifecycle

trait ManagedSubscriptions {

  def managed(subscription: IO[Cancelable])(implicit s: Scheduler): VDomModifier = {
    subscription.flatMap { sub: Cancelable =>
      lifecycle.onDestroy --> Sink.create(_ => IO {
        sub.cancel()
        Continue
      })
    }
  }

  def managed(sub1: IO[Cancelable], sub2: IO[Cancelable], subscriptions: IO[Cancelable]*)(implicit s: Scheduler): VDomModifier = {

    (sub1 :: sub2 :: subscriptions.toList).sequence.flatMap { subs: Seq[Cancelable] =>
      val composite = CompositeCancelable(subs: _*)
      lifecycle.onDestroy --> Sink.create(_ => IO {
        composite.cancel()
        Continue
      })
    }
  }

}

object ManagedSubscriptions extends ManagedSubscriptions




© 2015 - 2025 Weber Informatics LLC | Privacy Policy