diff --git a/core/shared/src/main/scala/works/iterative/core/UserId.scala b/core/shared/src/main/scala/works/iterative/core/UserId.scala index 2bffd60..e82c89f 100644 --- a/core/shared/src/main/scala/works/iterative/core/UserId.scala +++ b/core/shared/src/main/scala/works/iterative/core/UserId.scala @@ -9,3 +9,5 @@ Validated.nonEmptyString("user.id")(value) def unsafe(value: String): UserId = value + + extension (u: UserId) def value: String = u diff --git a/core/shared/src/main/scala/works/iterative/core/UserId.scala b/core/shared/src/main/scala/works/iterative/core/UserId.scala index 2bffd60..e82c89f 100644 --- a/core/shared/src/main/scala/works/iterative/core/UserId.scala +++ b/core/shared/src/main/scala/works/iterative/core/UserId.scala @@ -9,3 +9,5 @@ Validated.nonEmptyString("user.id")(value) def unsafe(value: String): UserId = value + + extension (u: UserId) def value: String = u diff --git a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala index 13f8891..f3e3392 100644 --- a/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala +++ b/ui/js/src/main/scala/works/iterative/ui/components/laminar/HtmlRenderable.scala @@ -5,6 +5,9 @@ import works.iterative.core.PlainMultiLine import java.time.Instant import works.iterative.ui.TimeUtils +import works.iterative.core.UserMessage +import works.iterative.ui.components.ComponentContext +import LaminarExtensions.* trait HtmlRenderable[A]: def toHtml(a: A): Modifier[HtmlElement] @@ -47,3 +50,20 @@ ): HtmlRenderable[Signal[A]] with def toHtml(v: Signal[A]): Modifier[HtmlElement] = child <-- v.map(a => div(r.toHtml(a))) + + given iterableRenderable[A, T[X] <: Iterable[X]](using + inner: HtmlRenderable[A] + ): HtmlRenderable[T[A]] with + def toHtml(iterable: T[A]): HtmlMod = + ul( + iterable + .map(inner.toHtml) + .toSeq + .map(i => li(cls("after:content-[',_'] last:after:content-none"), i))* + ) + + given userMessageRenderable(using + ComponentContext[?] + ): HtmlRenderable[UserMessage] with + def toHtml(msg: UserMessage): HtmlMod = + msg.asElement