diff --git a/modules/restserver/src/main/scala/docspell/restserver/routes/NotificationRoutes.scala b/modules/restserver/src/main/scala/docspell/restserver/routes/NotificationRoutes.scala index fd244fc2cb..e0c9f0bde9 100644 --- a/modules/restserver/src/main/scala/docspell/restserver/routes/NotificationRoutes.scala +++ b/modules/restserver/src/main/scala/docspell/restserver/routes/NotificationRoutes.scala @@ -6,7 +6,7 @@ package docspell.restserver.routes -import cats.data.NonEmptyList +import cats.data.{EitherT, NonEmptyList} import cats.effect._ import cats.implicits._ @@ -64,17 +64,29 @@ object NotificationRoutes extends NonEmptyListSupport { case req @ POST -> Root => for { input <- req.as[NotificationChannel] - ch <- Sync[F].pure(NotificationChannel.convert(input)).rethrow - res <- backend.notification.createChannel(ch, user.account) - resp <- Ok(Conversions.basicResult(res, "Channel created")) + ch <- Sync[F].pure(NotificationChannel.convert(input)) + resp <- EitherT + .fromEither[F](ch) + .semiflatMap { c => + backend.notification + .createChannel(c, user.account) + .map(res => Conversions.basicResult(res, "Channel created")) + } + .foldF(ex => BadRequest(BasicResult(false, ex.getMessage)), Ok(_)) } yield resp case req @ PUT -> Root => for { input <- req.as[NotificationChannel] - ch <- Sync[F].pure(NotificationChannel.convert(input)).rethrow - res <- backend.notification.updateChannel(ch, user.account) - resp <- Ok(Conversions.basicResult(res, "Channel created")) + ch <- Sync[F].pure(NotificationChannel.convert(input)) + resp <- EitherT + .fromEither[F](ch) + .semiflatMap { c => + backend.notification + .updateChannel(c, user.account) + .map(res => Conversions.basicResult(res, "Channel created")) + } + .foldF(ex => BadRequest(BasicResult(false, ex.getMessage)), Ok(_)) } yield resp } } diff --git a/modules/webapp/src/main/elm/Comp/EmailInput.elm b/modules/webapp/src/main/elm/Comp/EmailInput.elm index 7094981785..7da29aa950 100644 --- a/modules/webapp/src/main/elm/Comp/EmailInput.elm +++ b/modules/webapp/src/main/elm/Comp/EmailInput.elm @@ -185,7 +185,11 @@ view2 cfg values model = , placeholder cfg.placeholder , onKeyUp KeyPress , onInput SetInput - , onBlur (KeyPress 13) + , if List.isEmpty model.candidates then + onBlur (KeyPress 13) + + else + class "" , class "inline-flex w-24 border-0 px-0 focus:ring-0 h-6 text-sm" , class "placeholder-gray-400 dark:text-slate-200 dark:bg-slate-800 dark:border-slate-500" ]