Allow prefilling add forms
This commit is contained in:
parent
6d1fa56759
commit
06a1137377
|
@ -173,7 +173,7 @@ async fn list_items(pool: web::Data<PgPool>) -> actix_web::Result<impl Responder
|
|||
}
|
||||
|
||||
#[get("/items/add")]
|
||||
async fn add_item() -> actix_web::Result<impl Responder> {
|
||||
async fn add_item(form: web::Query<NewItemForm>) -> actix_web::Result<impl Responder> {
|
||||
Ok(templates::base(
|
||||
TemplateConfig {
|
||||
path: "/items/add",
|
||||
|
@ -187,6 +187,7 @@ async fn add_item() -> actix_web::Result<impl Responder> {
|
|||
r#type: forms::InputType::Text,
|
||||
name: "name",
|
||||
title: "Name",
|
||||
value: form.name.clone(),
|
||||
..Default::default()
|
||||
})
|
||||
(forms::InputGroup {
|
||||
|
@ -194,12 +195,14 @@ async fn add_item() -> actix_web::Result<impl Responder> {
|
|||
name: "class",
|
||||
title: "Class",
|
||||
required: true,
|
||||
value: form.class.map(|id| id.to_string()),
|
||||
..Default::default()
|
||||
})
|
||||
(forms::InputGroup {
|
||||
r#type: forms::InputType::Text,
|
||||
name: "parent",
|
||||
title: "Parent",
|
||||
value: form.parent.map(|id| id.to_string()),
|
||||
..Default::default()
|
||||
})
|
||||
|
||||
|
|
|
@ -147,7 +147,7 @@ async fn list_item_classes(pool: web::Data<PgPool>) -> actix_web::Result<impl Re
|
|||
}
|
||||
|
||||
#[get("/item-classes/add")]
|
||||
async fn add_item_class() -> actix_web::Result<impl Responder> {
|
||||
async fn add_item_class(form: web::Query<NewItemClassForm>) -> actix_web::Result<impl Responder> {
|
||||
Ok(templates::base(
|
||||
TemplateConfig {
|
||||
path: "/items-classes/add",
|
||||
|
@ -162,13 +162,15 @@ async fn add_item_class() -> actix_web::Result<impl Responder> {
|
|||
name: "name",
|
||||
title: "Name",
|
||||
required: true,
|
||||
value: form.name.clone(),
|
||||
..Default::default()
|
||||
})
|
||||
(forms::InputGroup {
|
||||
r#type: forms::InputType::Text,
|
||||
name: "parent",
|
||||
title: "Parent",
|
||||
disabled: true,
|
||||
disabled: form.parent.is_none(),
|
||||
value: form.parent.map(|id| id.to_string()),
|
||||
..Default::default()
|
||||
})
|
||||
|
||||
|
|
|
@ -25,6 +25,19 @@ pub struct NewItem {
|
|||
pub class: Uuid,
|
||||
}
|
||||
|
||||
// Its structure is not how it could ideally be
|
||||
// (doubly nested Options where the original struct already has an Option>)
|
||||
// because the intended usage (in a GET request parameter) does not allow such fine-grained types.
|
||||
// TODO: this can be automated from NewItem with derive macro
|
||||
#[derive(Debug, Deserialize)]
|
||||
pub struct NewItemForm {
|
||||
#[serde(default)]
|
||||
pub name: Option<String>,
|
||||
#[serde(default)]
|
||||
pub parent: Option<Uuid>,
|
||||
pub class: Option<Uuid>,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, Serialize)]
|
||||
pub struct ItemClass {
|
||||
pub id: Uuid,
|
||||
|
@ -41,3 +54,11 @@ pub struct NewItemClass {
|
|||
#[serde(default)]
|
||||
pub parent: Option<Uuid>,
|
||||
}
|
||||
|
||||
// see NewItemForm
|
||||
#[derive(Debug, Deserialize)]
|
||||
pub struct NewItemClassForm {
|
||||
pub name: Option<String>,
|
||||
#[serde(default)]
|
||||
pub parent: Option<Uuid>,
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue