diff --git a/pgml-dashboard/Cargo.lock b/pgml-dashboard/Cargo.lock index 59e710ba5..e14050a5b 100644 --- a/pgml-dashboard/Cargo.lock +++ b/pgml-dashboard/Cargo.lock @@ -1924,16 +1924,6 @@ version = "0.2.147" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3" -[[package]] -name = "libloading" -version = "0.6.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "351a32417a12d5f7e82c368a66781e307834dae04c6ce0cd4456d52989229883" -dependencies = [ - "cfg-if", - "winapi", -] - [[package]] name = "libm" version = "0.2.8" @@ -2223,47 +2213,6 @@ dependencies = [ "tempfile", ] -[[package]] -name = "neon" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28e15415261d880aed48122e917a45e87bb82cf0260bb6db48bbab44b7464373" -dependencies = [ - "neon-build", - "neon-macros", - "neon-runtime", - "semver 0.9.0", - "smallvec", -] - -[[package]] -name = "neon-build" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bac98a702e71804af3dacfde41edde4a16076a7bbe889ae61e56e18c5b1c811" - -[[package]] -name = "neon-macros" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7288eac8b54af7913c60e0eb0e2a7683020dffa342ab3fd15e28f035ba897cf" -dependencies = [ - "quote", - "syn 1.0.109", - "syn-mid", -] - -[[package]] -name = "neon-runtime" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4676720fa8bb32c64c3d9f49c47a47289239ec46b4bdb66d0913cc512cb0daca" -dependencies = [ - "cfg-if", - "libloading", - "smallvec", -] - [[package]] name = "new_debug_unreachable" version = "1.0.4" @@ -2586,7 +2535,7 @@ checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "pgml" -version = "1.0.4" +version = "1.1.0" dependencies = [ "anyhow", "async-trait", @@ -2605,7 +2554,6 @@ dependencies = [ "parking_lot", "regex", "reqwest", - "rust_bridge", "sea-query", "sea-query-binder", "serde", @@ -3308,31 +3256,6 @@ dependencies = [ "serde_derive", ] -[[package]] -name = "rust_bridge" -version = "0.1.0" -dependencies = [ - "rust_bridge_macros", - "rust_bridge_traits", -] - -[[package]] -name = "rust_bridge_macros" -version = "0.1.0" -dependencies = [ - "anyhow", - "proc-macro2", - "quote", - "syn 2.0.32", -] - -[[package]] -name = "rust_bridge_traits" -version = "0.1.0" -dependencies = [ - "neon", -] - [[package]] name = "rustc-demangle" version = "0.1.23" @@ -3351,7 +3274,7 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" dependencies = [ - "semver 1.0.18", + "semver", ] [[package]] @@ -3616,27 +3539,12 @@ dependencies = [ "smallvec", ] -[[package]] -name = "semver" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" -dependencies = [ - "semver-parser", -] - [[package]] name = "semver" version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b0293b4b29daaf487284529cc2f5675b8e57c61f70167ba415a463651fd6a918" -[[package]] -name = "semver-parser" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" - [[package]] name = "sentry" version = "0.31.5" @@ -4332,17 +4240,6 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "syn-mid" -version = "0.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fea305d57546cc8cd04feb14b62ec84bf17f50e3f7b12560d7bfa9265f39d9ed" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "sync_wrapper" version = "0.1.2" diff --git a/pgml-dashboard/src/api/deployment/deployment_models.rs b/pgml-dashboard/src/api/deployment/deployment_models.rs index 35e832b26..3fe66c8a7 100644 --- a/pgml-dashboard/src/api/deployment/deployment_models.rs +++ b/pgml-dashboard/src/api/deployment/deployment_models.rs @@ -2,6 +2,7 @@ use rocket::route::Route; use sailfish::TemplateOnce; use crate::{ + guards::Cluster, guards::ConnectedCluster, responses::{Error, ResponseOk}, }; @@ -17,8 +18,8 @@ use std::collections::HashMap; // Returns models page #[get("/models")] -pub async fn deployment_models(cluster: ConnectedCluster<'_>) -> Result { - let mut layout = crate::templates::WebAppBase::new("Dashboard", &cluster.inner.context); +pub async fn deployment_models(cluster: &Cluster, _connected: ConnectedCluster<'_>) -> Result { + let mut layout = crate::templates::WebAppBase::new("Dashboard", &cluster); layout.breadcrumbs(vec![NavLink::new("Models", &urls::deployment_models()).active()]); let tabs = vec![tabs::Tab { @@ -28,16 +29,16 @@ pub async fn deployment_models(cluster: ConnectedCluster<'_>) -> Result")] -pub async fn model(cluster: ConnectedCluster<'_>, model_id: i64) -> Result { +pub async fn model(cluster: &Cluster, model_id: i64, _connected: ConnectedCluster<'_>) -> Result { let model = models::Model::get_by_id(cluster.pool(), model_id).await?; let project = models::Project::get_by_id(cluster.pool(), model.project_id).await?; - let mut layout = crate::templates::WebAppBase::new("Dashboard", &cluster.inner.context); + let mut layout = crate::templates::WebAppBase::new("Dashboard", &cluster); layout.breadcrumbs(vec![ NavLink::new("Models", &urls::deployment_models()), NavLink::new(&project.name, &urls::deployment_project_by_id(project.id)), @@ -51,7 +52,7 @@ pub async fn model(cluster: ConnectedCluster<'_>, model_id: i64) -> Result) -> Result { - let mut layout = crate::templates::WebAppBase::new("Dashboard", &cluster.inner.context); +pub async fn notebooks(cluster: &Cluster, _connected: ConnectedCluster<'_>) -> Result { + let mut layout = crate::templates::WebAppBase::new("Dashboard", &cluster); layout.breadcrumbs(vec![NavLink::new("Notebooks", &urls::deployment_notebooks()).active()]); let tabs = vec![tabs::Tab { @@ -31,15 +31,19 @@ pub async fn notebooks(cluster: ConnectedCluster<'_>) -> Result")] -pub async fn notebook(cluster: ConnectedCluster<'_>, notebook_id: i64) -> Result { +pub async fn notebook( + cluster: &Cluster, + notebook_id: i64, + _connected: ConnectedCluster<'_>, +) -> Result { let notebook = models::Notebook::get_by_id(cluster.pool(), notebook_id).await?; - let mut layout = crate::templates::WebAppBase::new("Dashboard", &cluster.inner.context); + let mut layout = crate::templates::WebAppBase::new("Dashboard", &cluster); layout.breadcrumbs(vec![ NavLink::new("Notebooks", &urls::deployment_notebooks()), NavLink::new(notebook.name.as_str(), &urls::deployment_notebook_by_id(notebook_id)).active(), @@ -52,7 +56,7 @@ pub async fn notebook(cluster: ConnectedCluster<'_>, notebook_id: i64) -> Result let nav_tabs = tabs::Tabs::new(tabs, Some("Notebooks"), Some("Notebooks"))?; - Ok(ResponseOk(layout.render(templates::Dashboard { tabs: nav_tabs }))) + Ok(ResponseOk(layout.render(templates::Dashboard::new(nav_tabs)))) } // Returns all the notebooks for a deployment in a turbo frame. diff --git a/pgml-dashboard/src/api/deployment/projects.rs b/pgml-dashboard/src/api/deployment/projects.rs index 83b598005..3a1e060e0 100644 --- a/pgml-dashboard/src/api/deployment/projects.rs +++ b/pgml-dashboard/src/api/deployment/projects.rs @@ -2,6 +2,7 @@ use rocket::route::Route; use sailfish::TemplateOnce; use crate::{ + guards::Cluster, guards::ConnectedCluster, responses::{Error, ResponseOk}, }; @@ -15,8 +16,8 @@ use crate::utils::urls; // Returns the deployments projects page. #[get("/projects")] -pub async fn projects(cluster: ConnectedCluster<'_>) -> Result { - let mut layout = crate::templates::WebAppBase::new("Dashboard", &cluster.inner.context); +pub async fn projects(cluster: &Cluster, _connected: ConnectedCluster<'_>) -> Result { + let mut layout = crate::templates::WebAppBase::new("Dashboard", &cluster); layout.breadcrumbs(vec![NavLink::new("Projects", &urls::deployment_projects()).active()]); let tabs = vec![tabs::Tab { @@ -26,15 +27,19 @@ pub async fn projects(cluster: ConnectedCluster<'_>) -> Result")] -pub async fn project(cluster: ConnectedCluster<'_>, project_id: i64) -> Result { +pub async fn project( + cluster: &Cluster, + project_id: i64, + _connected: ConnectedCluster<'_>, +) -> Result { let project = models::Project::get_by_id(cluster.pool(), project_id).await?; - let mut layout = crate::templates::WebAppBase::new("Dashboard", &cluster.inner.context); + let mut layout = crate::templates::WebAppBase::new("Dashboard", &cluster); layout.breadcrumbs(vec![ NavLink::new("Projects", &urls::deployment_projects()), NavLink::new(project.name.as_str(), &urls::deployment_project_by_id(project_id)).active(), @@ -47,7 +52,7 @@ pub async fn project(cluster: ConnectedCluster<'_>, project_id: i64) -> Result) -> Result { - let mut layout = crate::templates::WebAppBase::new("Dashboard", &cluster.inner.context); +pub async fn snapshots(cluster: &Cluster, _connected: ConnectedCluster<'_>) -> Result { + let mut layout = crate::templates::WebAppBase::new("Dashboard", &cluster); layout.breadcrumbs(vec![NavLink::new("Snapshots", &urls::deployment_snapshots()).active()]); let tabs = vec![tabs::Tab { @@ -27,15 +28,19 @@ pub async fn snapshots(cluster: ConnectedCluster<'_>) -> Result")] -pub async fn snapshot(cluster: ConnectedCluster<'_>, snapshot_id: i64) -> Result { +pub async fn snapshot( + cluster: &Cluster, + snapshot_id: i64, + _connected: ConnectedCluster<'_>, +) -> Result { let snapshot = models::Snapshot::get_by_id(cluster.pool(), snapshot_id).await?; - let mut layout = crate::templates::WebAppBase::new("Dashboard", &cluster.inner.context); + let mut layout = crate::templates::WebAppBase::new("Dashboard", &cluster); layout.breadcrumbs(vec![ NavLink::new("Snapshots", &urls::deployment_snapshots()), NavLink::new(&snapshot.relation_name, &urls::deployment_snapshot_by_id(snapshot.id)).active(), @@ -48,7 +53,7 @@ pub async fn snapshot(cluster: ConnectedCluster<'_>, snapshot_id: i64) -> Result let nav_tabs = tabs::Tabs::new(tabs, Some("Snapshots"), Some("Snapshots"))?; - Ok(ResponseOk(layout.render(templates::Dashboard { tabs: nav_tabs }))) + Ok(ResponseOk(layout.render(templates::Dashboard::new(nav_tabs)))) } // Returns all snapshots for the deployment in a turboframe. diff --git a/pgml-dashboard/src/api/deployment/uploader.rs b/pgml-dashboard/src/api/deployment/uploader.rs index ef1347b04..41f148007 100644 --- a/pgml-dashboard/src/api/deployment/uploader.rs +++ b/pgml-dashboard/src/api/deployment/uploader.rs @@ -5,6 +5,7 @@ use rocket::route::Route; use sailfish::TemplateOnce; use crate::{ + guards::Cluster, guards::ConnectedCluster, responses::{BadRequest, Error, ResponseOk}, }; @@ -18,8 +19,8 @@ use crate::utils::urls; // Returns the uploader page. #[get("/uploader")] -pub async fn uploader(cluster: ConnectedCluster<'_>) -> Result { - let mut layout = crate::templates::WebAppBase::new("Dashboard", &cluster.inner.context); +pub async fn uploader(cluster: &Cluster, _connected: ConnectedCluster<'_>) -> Result { + let mut layout = crate::templates::WebAppBase::new("Dashboard", &cluster); layout.breadcrumbs(vec![NavLink::new("Upload Data", &urls::deployment_uploader()).active()]); let tabs = vec![tabs::Tab { @@ -29,7 +30,7 @@ pub async fn uploader(cluster: ConnectedCluster<'_>) -> Result, pub body: Component, pub default_style: bool, + static_backdrop: String, } component!(Modal); @@ -63,6 +64,15 @@ impl Modal { self.default_style = false; self } + + pub fn set_static_backdrop(mut self, set_static: bool) -> Modal { + if set_static { + self.static_backdrop = r#"data-bs-backdrop="static""#.into(); + } else { + self.static_backdrop = String::new(); + } + self + } } #[cfg(test)] diff --git a/pgml-dashboard/src/components/modal/template.html b/pgml-dashboard/src/components/modal/template.html index f54a0ebf3..208e7b92f 100644 --- a/pgml-dashboard/src/components/modal/template.html +++ b/pgml-dashboard/src/components/modal/template.html @@ -1,4 +1,10 @@ -