Display errors on invalid forms

It will probably need a bit of styling…
This commit is contained in:
Bat
2018-07-06 19:29:36 +02:00
parent 153400959c
commit 5f3afe900f
12 changed files with 68 additions and 39 deletions
+6 -3
View File
@@ -41,7 +41,9 @@ fn activity_details(name: String, conn: DbConn) -> ActivityStream<CustomGroup> {
#[get("/blogs/new")]
fn new(user: User) -> Template {
Template::render("blogs/new", json!({
"account": user
"account": user,
"errors": null,
"form": null
}))
}
@@ -50,7 +52,7 @@ fn new_auth() -> Flash<Redirect>{
utils::requires_login("You need to be logged in order to create a new blog", uri!(new))
}
#[derive(FromForm, Validate)]
#[derive(FromForm, Validate, Serialize)]
struct NewBlogForm {
#[validate(custom = "valid_slug")]
pub title: String
@@ -98,7 +100,8 @@ fn create(conn: DbConn, data: LenientForm<NewBlogForm>, user: User) -> Result<Re
} else {
Err(Template::render("blogs/new", json!({
"account": user,
"errors": errors.inner()
"errors": errors.inner(),
"form": form
})))
}
}
+7 -4
View File
@@ -77,12 +77,14 @@ fn new(blog: String, user: User, conn: DbConn) -> Template {
}))
} else {
Template::render("posts/new", json!({
"account": user
"account": user,
"errors": null,
"form": null
}))
}
}
#[derive(FromForm, Validate)]
#[derive(FromForm, Validate, Serialize)]
struct NewPostForm {
#[validate(custom = "valid_slug")]
pub title: String,
@@ -113,7 +115,7 @@ fn create(blog_name: String, data: LenientForm<NewPostForm>, user: User, conn: D
Err(e) => e
};
if let Err(e) = slug_taken_err {
errors.add("title", e)
errors.add("title", e);
}
if errors.is_empty() {
@@ -150,7 +152,8 @@ fn create(blog_name: String, data: LenientForm<NewPostForm>, user: User, conn: D
} else {
Err(Template::render("posts/new", json!({
"account": user,
"errors": errors.inner()
"errors": errors.inner(),
"form": form
})))
}
}
+8 -3
View File
@@ -14,7 +14,9 @@ use plume_models::{
#[get("/login")]
fn new(user: Option<User>) -> Template {
Template::render("session/login", json!({
"account": user
"account": user,
"errors": null,
"form": null
}))
}
@@ -27,7 +29,9 @@ struct Message {
fn new_message(user: Option<User>, message: Message) -> Template {
Template::render("session/login", json!({
"account": user,
"message": message.m
"message": message.m,
"errors": null,
"form": null
}))
}
@@ -66,7 +70,8 @@ fn create(conn: DbConn, data: LenientForm<LoginForm>, flash: Option<FlashMessage
} else {
Err(Template::render("session/login", json!({
"account": user,
"errors": errors.inner()
"errors": errors.inner(),
"form": form
})))
}
}
+10 -7
View File
@@ -121,7 +121,9 @@ fn activity_details(name: String, conn: DbConn) -> ActivityStream<CustomPerson>
#[get("/users/new")]
fn new(user: Option<User>) -> Template {
Template::render("users/new", json!({
"account": user
"account": user,
"errors": null,
"form": null
}))
}
@@ -158,16 +160,16 @@ fn update(_name: String, conn: DbConn, user: User, data: LenientForm<UpdateUserF
Redirect::to(uri!(me))
}
#[derive(FromForm, Validate)]
#[derive(FromForm, Serialize, Validate)]
#[validate(schema(function = "passwords_match", skip_on_field_errors = "false"))]
struct NewUserForm {
#[validate(length(min = "1"))]
#[validate(length(min = "1", message = "Username can't be empty"))]
username: String,
#[validate(email)]
#[validate(email(message = "Invalid email"))]
email: String,
#[validate(length(min = "8"))]
#[validate(length(min = "8", message = "Password should be at least 8 characters long"))]
password: String,
#[validate(length(min = "8"))]
#[validate(length(min = "8", message = "Password should be at least 8 characters long"))]
password_confirmation: String
}
@@ -196,7 +198,8 @@ fn create(conn: DbConn, data: LenientForm<NewUserForm>) -> Result<Redirect, Temp
Redirect::to(uri!(super::session::new))
})
.map_err(|e| Template::render("users/new", json!({
"errors": e.inner()
"errors": e.inner(),
"form": form
})))
}