diff --git a/pgml-dashboard/src/api/deployment/deployment_models.rs b/pgml-dashboard/src/api/deployment/deployment_models.rs index 35e832b26..8f88a3f91 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) -> 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) -> 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) -> 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,15 @@ 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) -> 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 +52,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..9204d52e4 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) -> 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,15 @@ 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) -> 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 +48,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) -> 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,15 @@ 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) -> 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 +49,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..fdad1665d 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) -> 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 @@ -