diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala new file mode 100644 index 0000000..460bd9f --- /dev/null +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/ZIOOwner.scala @@ -0,0 +1,14 @@ +package works.iterative.ui.components.laminar + +import zio.* +import com.raquo.airstream.ownership.Owner + +object ZIOOwner: + def acquire: UIO[ZIOOwner] = ZIO.succeed(new ZIOOwner) + + val layer: ULayer[ZIOOwner] = + ZLayer.scoped(ZIO.acquireRelease(ZIOOwner.acquire)(_.release)) + +class ZIOOwner extends Owner: + def release: UIO[Unit] = + ZIO.attempt(this.killSubscriptions()).ignore