From d58bf80c469ba06a9872447e56eca6c5e143cb3b Mon Sep 17 00:00:00 2001 From: eikek Date: Sat, 4 Jun 2022 18:57:42 +0200 Subject: [PATCH 1/2] Fix select e-mail from suggestions The blur event messed up when clicking on a suggestion. Now it only is used when the user has typed in an e-mail not in the suggestion list. Fixes: #1565 --- modules/webapp/src/main/elm/Comp/EmailInput.elm | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) 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" ] From 6063ccef3a205b01dbb063b355f0a41c79a35581 Mon Sep 17 00:00:00 2001 From: eikek Date: Sat, 4 Jun 2022 19:08:29 +0200 Subject: [PATCH 2/2] Return 400 when input is invalid instead of server error --- .../routes/NotificationRoutes.scala | 26 ++++++++++++++----- 1 file changed, 19 insertions(+), 7 deletions(-) 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 } }