From b3278bff62b9da1b7d7e3d147cf1981c3c395331 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabor=20K=C3=B6rber?= Date: Wed, 14 Feb 2024 13:23:10 +0100 Subject: [PATCH] refactor: update --- src/admin/mod.rs | 5 ++++- src/admin/views.rs | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/src/admin/mod.rs b/src/admin/mod.rs index 4e36cb4..75d3cec 100644 --- a/src/admin/mod.rs +++ b/src/admin/mod.rs @@ -15,7 +15,10 @@ pub fn routes() -> Router { "/app/:app/model/:model/add", get(views::new_item).post(views::create_item), ) - .route("/app/:app/model/:model/change/:id", get(views::change_item)) + .route( + "/app/:app/model/:model/change/:id", + get(views::change_item).patch(views::update_item), + ) .route( "/app/:app/model/:model/detail/:id", get(views::view_item_details), diff --git a/src/admin/views.rs b/src/admin/views.rs index e9e9a94..2f441d2 100644 --- a/src/admin/views.rs +++ b/src/admin/views.rs @@ -239,6 +239,7 @@ pub async fn create_item( templates.render_html("admin/items/item_create.jinja", context) } +/// Change is the GET version. pub async fn change_item( templates: State, registry: State>, @@ -270,6 +271,41 @@ pub async fn change_item( templates.render_html("admin/items/item_change.jinja", context) } +pub async fn update_item( + templates: State, + registry: State>, + headers: HeaderMap, + Path((app_key, model_key, id)): Path<(String, String, String)>, + Form(form): Form, +) -> impl IntoResponse { + let context = if let Ok(repo) = registry.get_repository(&app_key, &model_key) { + let mut repo = repo.lock().await; + let admin_model = registry + .get_model(&app_key, &model_key) + .expect("Admin Model not found?"); + let key: LookupKey = id.into(); + + let result = repo.update(&admin_model, key, form).await; + + AdminContext { + base: base_template(&headers), + available_apps: registry.get_apps(), + item_info: Some(repo.info(&admin_model).await), + item_list: repo.list(&admin_model).await, + item: result, + item_model: Some(admin_model), + ..Default::default() + } + } else { + AdminContext { + base: base_template(&headers), + available_apps: registry.get_apps(), + ..Default::default() + } + }; + templates.render_html("admin/items/item_change.jinja", context) +} + // Item Action allows running an action on one single dataset. pub async fn item_action( Path((app_key, model_key, model_id)): Path<(String, String, String)>,