diff --git a/app/src/main/scala/mdr/pdb/app/Api.scala b/app/src/main/scala/mdr/pdb/app/Api.scala
new file mode 100644
index 0000000..fedcd48
--- /dev/null
+++ b/app/src/main/scala/mdr/pdb/app/Api.scala
@@ -0,0 +1,18 @@
+package mdr.pdb.app
+
+import mdr.pdb.api.Endpoints
+import sttp.client3.*
+import sttp.tapir.DecodeResult
+import org.scalajs.dom
+import scala.concurrent.Future
+
+class Api(base: Option[String]) extends CustomTapir:
+ private val backend = FetchBackend(
+ FetchOptions(
+ Some(dom.RequestCredentials.`same-origin`),
+ Some(dom.RequestMode.`same-origin`)
+ )
+ )
+ private val baseUri = base.map(b => uri"${b}")
+ val alive: Unit => Future[DecodeResult[Either[Unit, String]]] =
+ toClient(Endpoints.alive, baseUri, backend)
diff --git a/app/src/main/scala/mdr/pdb/app/Api.scala b/app/src/main/scala/mdr/pdb/app/Api.scala
new file mode 100644
index 0000000..fedcd48
--- /dev/null
+++ b/app/src/main/scala/mdr/pdb/app/Api.scala
@@ -0,0 +1,18 @@
+package mdr.pdb.app
+
+import mdr.pdb.api.Endpoints
+import sttp.client3.*
+import sttp.tapir.DecodeResult
+import org.scalajs.dom
+import scala.concurrent.Future
+
+class Api(base: Option[String]) extends CustomTapir:
+ private val backend = FetchBackend(
+ FetchOptions(
+ Some(dom.RequestCredentials.`same-origin`),
+ Some(dom.RequestMode.`same-origin`)
+ )
+ )
+ private val baseUri = base.map(b => uri"${b}")
+ val alive: Unit => Future[DecodeResult[Either[Unit, String]]] =
+ toClient(Endpoints.alive, baseUri, backend)
diff --git a/app/src/main/scala/mdr/pdb/app/CustomTapir.scala b/app/src/main/scala/mdr/pdb/app/CustomTapir.scala
new file mode 100644
index 0000000..9dc2de1
--- /dev/null
+++ b/app/src/main/scala/mdr/pdb/app/CustomTapir.scala
@@ -0,0 +1,7 @@
+package mdr.pdb.app
+
+import sttp.tapir.client.sttp.SttpClientInterpreter
+
+trait CustomTapir extends mdr.pdb.api.CustomTapir with SttpClientInterpreter
+
+object CustomTapir extends CustomTapir
diff --git a/app/src/main/scala/mdr/pdb/app/Api.scala b/app/src/main/scala/mdr/pdb/app/Api.scala
new file mode 100644
index 0000000..fedcd48
--- /dev/null
+++ b/app/src/main/scala/mdr/pdb/app/Api.scala
@@ -0,0 +1,18 @@
+package mdr.pdb.app
+
+import mdr.pdb.api.Endpoints
+import sttp.client3.*
+import sttp.tapir.DecodeResult
+import org.scalajs.dom
+import scala.concurrent.Future
+
+class Api(base: Option[String]) extends CustomTapir:
+ private val backend = FetchBackend(
+ FetchOptions(
+ Some(dom.RequestCredentials.`same-origin`),
+ Some(dom.RequestMode.`same-origin`)
+ )
+ )
+ private val baseUri = base.map(b => uri"${b}")
+ val alive: Unit => Future[DecodeResult[Either[Unit, String]]] =
+ toClient(Endpoints.alive, baseUri, backend)
diff --git a/app/src/main/scala/mdr/pdb/app/CustomTapir.scala b/app/src/main/scala/mdr/pdb/app/CustomTapir.scala
new file mode 100644
index 0000000..9dc2de1
--- /dev/null
+++ b/app/src/main/scala/mdr/pdb/app/CustomTapir.scala
@@ -0,0 +1,7 @@
+package mdr.pdb.app
+
+import sttp.tapir.client.sttp.SttpClientInterpreter
+
+trait CustomTapir extends mdr.pdb.api.CustomTapir with SttpClientInterpreter
+
+object CustomTapir extends CustomTapir
diff --git a/app/src/main/scala/mdr/pdb/app/Main.scala b/app/src/main/scala/mdr/pdb/app/Main.scala
index b9f4fe1..8c9960c 100644
--- a/app/src/main/scala/mdr/pdb/app/Main.scala
+++ b/app/src/main/scala/mdr/pdb/app/Main.scala
@@ -34,6 +34,11 @@
def main(args: Array[String]): Unit =
import Routes.given
onLoad {
+ Api(Some("/mdr/pdb/api"))
+ .alive(())
+ .foreach(org.scalajs.dom.console.log(_))(using
+ scala.concurrent.ExecutionContext.global
+ )
setupAirstream()
val appContainer = dom.document.querySelector("#app")
val _ =
diff --git a/app/src/main/scala/mdr/pdb/app/Api.scala b/app/src/main/scala/mdr/pdb/app/Api.scala
new file mode 100644
index 0000000..fedcd48
--- /dev/null
+++ b/app/src/main/scala/mdr/pdb/app/Api.scala
@@ -0,0 +1,18 @@
+package mdr.pdb.app
+
+import mdr.pdb.api.Endpoints
+import sttp.client3.*
+import sttp.tapir.DecodeResult
+import org.scalajs.dom
+import scala.concurrent.Future
+
+class Api(base: Option[String]) extends CustomTapir:
+ private val backend = FetchBackend(
+ FetchOptions(
+ Some(dom.RequestCredentials.`same-origin`),
+ Some(dom.RequestMode.`same-origin`)
+ )
+ )
+ private val baseUri = base.map(b => uri"${b}")
+ val alive: Unit => Future[DecodeResult[Either[Unit, String]]] =
+ toClient(Endpoints.alive, baseUri, backend)
diff --git a/app/src/main/scala/mdr/pdb/app/CustomTapir.scala b/app/src/main/scala/mdr/pdb/app/CustomTapir.scala
new file mode 100644
index 0000000..9dc2de1
--- /dev/null
+++ b/app/src/main/scala/mdr/pdb/app/CustomTapir.scala
@@ -0,0 +1,7 @@
+package mdr.pdb.app
+
+import sttp.tapir.client.sttp.SttpClientInterpreter
+
+trait CustomTapir extends mdr.pdb.api.CustomTapir with SttpClientInterpreter
+
+object CustomTapir extends CustomTapir
diff --git a/app/src/main/scala/mdr/pdb/app/Main.scala b/app/src/main/scala/mdr/pdb/app/Main.scala
index b9f4fe1..8c9960c 100644
--- a/app/src/main/scala/mdr/pdb/app/Main.scala
+++ b/app/src/main/scala/mdr/pdb/app/Main.scala
@@ -34,6 +34,11 @@
def main(args: Array[String]): Unit =
import Routes.given
onLoad {
+ Api(Some("/mdr/pdb/api"))
+ .alive(())
+ .foreach(org.scalajs.dom.console.log(_))(using
+ scala.concurrent.ExecutionContext.global
+ )
setupAirstream()
val appContainer = dom.document.querySelector("#app")
val _ =
diff --git a/app/src/main/scala/mdr/pdb/app/state/AppState.scala b/app/src/main/scala/mdr/pdb/app/state/AppState.scala
index fee56f4..945a313 100644
--- a/app/src/main/scala/mdr/pdb/app/state/AppState.scala
+++ b/app/src/main/scala/mdr/pdb/app/state/AppState.scala
@@ -55,11 +55,7 @@
.asInstanceOf[js.Dictionary[js.Object]]
.values
// TODO: is there a more efficient way to parse from JS object directly?
- .map { o =>
- val parsed = JSON.stringify(o).fromJson[UserInfo]
- parsed.left.foreach(org.scalajs.dom.console.log(_))
- parsed
- }
+ .map(JSON.stringify(_).fromJson[UserInfo])
.collect { case Right(u) =>
u
}
diff --git a/app/src/main/scala/mdr/pdb/app/Api.scala b/app/src/main/scala/mdr/pdb/app/Api.scala
new file mode 100644
index 0000000..fedcd48
--- /dev/null
+++ b/app/src/main/scala/mdr/pdb/app/Api.scala
@@ -0,0 +1,18 @@
+package mdr.pdb.app
+
+import mdr.pdb.api.Endpoints
+import sttp.client3.*
+import sttp.tapir.DecodeResult
+import org.scalajs.dom
+import scala.concurrent.Future
+
+class Api(base: Option[String]) extends CustomTapir:
+ private val backend = FetchBackend(
+ FetchOptions(
+ Some(dom.RequestCredentials.`same-origin`),
+ Some(dom.RequestMode.`same-origin`)
+ )
+ )
+ private val baseUri = base.map(b => uri"${b}")
+ val alive: Unit => Future[DecodeResult[Either[Unit, String]]] =
+ toClient(Endpoints.alive, baseUri, backend)
diff --git a/app/src/main/scala/mdr/pdb/app/CustomTapir.scala b/app/src/main/scala/mdr/pdb/app/CustomTapir.scala
new file mode 100644
index 0000000..9dc2de1
--- /dev/null
+++ b/app/src/main/scala/mdr/pdb/app/CustomTapir.scala
@@ -0,0 +1,7 @@
+package mdr.pdb.app
+
+import sttp.tapir.client.sttp.SttpClientInterpreter
+
+trait CustomTapir extends mdr.pdb.api.CustomTapir with SttpClientInterpreter
+
+object CustomTapir extends CustomTapir
diff --git a/app/src/main/scala/mdr/pdb/app/Main.scala b/app/src/main/scala/mdr/pdb/app/Main.scala
index b9f4fe1..8c9960c 100644
--- a/app/src/main/scala/mdr/pdb/app/Main.scala
+++ b/app/src/main/scala/mdr/pdb/app/Main.scala
@@ -34,6 +34,11 @@
def main(args: Array[String]): Unit =
import Routes.given
onLoad {
+ Api(Some("/mdr/pdb/api"))
+ .alive(())
+ .foreach(org.scalajs.dom.console.log(_))(using
+ scala.concurrent.ExecutionContext.global
+ )
setupAirstream()
val appContainer = dom.document.querySelector("#app")
val _ =
diff --git a/app/src/main/scala/mdr/pdb/app/state/AppState.scala b/app/src/main/scala/mdr/pdb/app/state/AppState.scala
index fee56f4..945a313 100644
--- a/app/src/main/scala/mdr/pdb/app/state/AppState.scala
+++ b/app/src/main/scala/mdr/pdb/app/state/AppState.scala
@@ -55,11 +55,7 @@
.asInstanceOf[js.Dictionary[js.Object]]
.values
// TODO: is there a more efficient way to parse from JS object directly?
- .map { o =>
- val parsed = JSON.stringify(o).fromJson[UserInfo]
- parsed.left.foreach(org.scalajs.dom.console.log(_))
- parsed
- }
+ .map(JSON.stringify(_).fromJson[UserInfo])
.collect { case Right(u) =>
u
}
diff --git a/app/vite.config.js b/app/vite.config.js
index 3dc484b..aa57b89 100644
--- a/app/vite.config.js
+++ b/app/vite.config.js
@@ -6,7 +6,7 @@
//const __dirname = path.dirname(moduleUrl.pathname)
// https://vitejs.dev/config/
-export default ({mode}) => {
+export default ({ mode }) => {
const mainJS = `./${appInfo.bundleMain(mode)}`
console.log('mainJS', mainJS)
const script = ``
@@ -37,6 +37,11 @@
}
},
base: '/mdr/pdb/',
+ server: {
+ proxy: {
+ '/mdr/pdb/api': 'http://localhost:8080'
+ }
+ },
build: {
outDir: 'target/vite'
}
diff --git a/app/src/main/scala/mdr/pdb/app/Api.scala b/app/src/main/scala/mdr/pdb/app/Api.scala
new file mode 100644
index 0000000..fedcd48
--- /dev/null
+++ b/app/src/main/scala/mdr/pdb/app/Api.scala
@@ -0,0 +1,18 @@
+package mdr.pdb.app
+
+import mdr.pdb.api.Endpoints
+import sttp.client3.*
+import sttp.tapir.DecodeResult
+import org.scalajs.dom
+import scala.concurrent.Future
+
+class Api(base: Option[String]) extends CustomTapir:
+ private val backend = FetchBackend(
+ FetchOptions(
+ Some(dom.RequestCredentials.`same-origin`),
+ Some(dom.RequestMode.`same-origin`)
+ )
+ )
+ private val baseUri = base.map(b => uri"${b}")
+ val alive: Unit => Future[DecodeResult[Either[Unit, String]]] =
+ toClient(Endpoints.alive, baseUri, backend)
diff --git a/app/src/main/scala/mdr/pdb/app/CustomTapir.scala b/app/src/main/scala/mdr/pdb/app/CustomTapir.scala
new file mode 100644
index 0000000..9dc2de1
--- /dev/null
+++ b/app/src/main/scala/mdr/pdb/app/CustomTapir.scala
@@ -0,0 +1,7 @@
+package mdr.pdb.app
+
+import sttp.tapir.client.sttp.SttpClientInterpreter
+
+trait CustomTapir extends mdr.pdb.api.CustomTapir with SttpClientInterpreter
+
+object CustomTapir extends CustomTapir
diff --git a/app/src/main/scala/mdr/pdb/app/Main.scala b/app/src/main/scala/mdr/pdb/app/Main.scala
index b9f4fe1..8c9960c 100644
--- a/app/src/main/scala/mdr/pdb/app/Main.scala
+++ b/app/src/main/scala/mdr/pdb/app/Main.scala
@@ -34,6 +34,11 @@
def main(args: Array[String]): Unit =
import Routes.given
onLoad {
+ Api(Some("/mdr/pdb/api"))
+ .alive(())
+ .foreach(org.scalajs.dom.console.log(_))(using
+ scala.concurrent.ExecutionContext.global
+ )
setupAirstream()
val appContainer = dom.document.querySelector("#app")
val _ =
diff --git a/app/src/main/scala/mdr/pdb/app/state/AppState.scala b/app/src/main/scala/mdr/pdb/app/state/AppState.scala
index fee56f4..945a313 100644
--- a/app/src/main/scala/mdr/pdb/app/state/AppState.scala
+++ b/app/src/main/scala/mdr/pdb/app/state/AppState.scala
@@ -55,11 +55,7 @@
.asInstanceOf[js.Dictionary[js.Object]]
.values
// TODO: is there a more efficient way to parse from JS object directly?
- .map { o =>
- val parsed = JSON.stringify(o).fromJson[UserInfo]
- parsed.left.foreach(org.scalajs.dom.console.log(_))
- parsed
- }
+ .map(JSON.stringify(_).fromJson[UserInfo])
.collect { case Right(u) =>
u
}
diff --git a/app/vite.config.js b/app/vite.config.js
index 3dc484b..aa57b89 100644
--- a/app/vite.config.js
+++ b/app/vite.config.js
@@ -6,7 +6,7 @@
//const __dirname = path.dirname(moduleUrl.pathname)
// https://vitejs.dev/config/
-export default ({mode}) => {
+export default ({ mode }) => {
const mainJS = `./${appInfo.bundleMain(mode)}`
console.log('mainJS', mainJS)
const script = ``
@@ -37,6 +37,11 @@
}
},
base: '/mdr/pdb/',
+ server: {
+ proxy: {
+ '/mdr/pdb/api': 'http://localhost:8080'
+ }
+ },
build: {
outDir: 'target/vite'
}
diff --git a/build.sbt b/build.sbt
index 7f91099..c9cb595 100644
--- a/build.sbt
+++ b/build.sbt
@@ -43,7 +43,8 @@
IWDeps.laminextUI,
IWDeps.laminextTailwind,
IWDeps.laminextValidationCore,
- IWDeps.tapirSttpClient
+ IWDeps.tapirSttpClient,
+ IWDeps.sttpClientCore
)
.settings(
scalaJSLinkerConfig ~= { _.withModuleKind(ModuleKind.ESModule) },