Improve register page

This commit is contained in:
Adrian Woźniak 2022-07-26 16:12:37 +02:00
parent 7b167698ac
commit 4a463272ee
No known key found for this signature in database
GPG Key ID: 0012845A89C7352B
3 changed files with 63 additions and 8 deletions

View File

@ -93,10 +93,6 @@ customElements.define('register-form', class extends Component {
this.step = 0;
}
attributeChangedCallback(name, oldV, newV) {
super.attributeChangedCallback(name, oldV, newV);
}
get step() {
const step = parseInt(this.getAttribute('step'));
return isNaN(step) ? 1 : step;

View File

@ -17,6 +17,9 @@
{% when None %}
<ow-account
mode="form"
></ow-account>
page="{{register_page.as_str()}}"
>
</ow-account>
{% endmatch %}
{% endblock %}

View File

@ -1,9 +1,9 @@
use std::collections::HashMap;
use actix_web::web::{Data, ServiceConfig};
use actix_web::web::{Data, Path, ServiceConfig};
use actix_web::{get, post, web, HttpResponse};
use askama::*;
use serde::Deserialize;
use serde::{Deserialize, Serialize};
use sqlx::PgPool;
use tracing::error;
@ -21,6 +21,7 @@ struct AccountTemplate {
error: Option<String>,
page: Page,
h: Helper,
register_page: RegisterPage,
}
impl AccountTemplate {
@ -331,6 +332,60 @@ async fn account_page(id: Identity, db: Data<PgPool>) -> Result<HttpResponse> {
))
}
#[derive(Debug, Default, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
enum RegisterPage {
#[default]
UserType = 0,
Basic = 1,
Business = 2,
Items = 3,
Submit = 4,
User = 40,
}
impl RegisterPage {
pub fn as_str(&self) -> &str {
match self {
RegisterPage::UserType => "user-type",
RegisterPage::Basic => "basic",
RegisterPage::Business => "business",
RegisterPage::Items => "items",
RegisterPage::Submit => "submit",
RegisterPage::User => "user",
}
}
}
#[get("/register/{step}")]
#[tracing::instrument]
async fn register_page(
id: Identity,
db: Data<PgPool>,
path: Path<(RegisterPage,)>,
) -> Result<HttpResponse> {
let pool = db.into_inner();
let mut t = crate::ok_or_internal!(pool.begin().await);
let account = match id.identity() {
Some(id) => queries::account_by_id(&mut t, id).await,
_ => {
id.forget();
None
}
};
let page = path.into_inner().0;
t.commit().await.ok();
Ok(HttpResponse::Ok().content_type("text/html").body(
AccountTemplate {
account,
page: Page::Account,
register_page: page,
..Default::default()
}
.render()
.unwrap(),
))
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "snake_case")]
struct RegisterForm {
@ -398,7 +453,8 @@ pub fn configure(config: &mut ServiceConfig) {
.service(logout)
.service(login)
.service(upload)
.service(account_page);
.service(account_page)
.service(register_page);
}
#[cfg(test)]