diff --git a/client/src/register-form.js b/client/src/register-form.js
index ee40c40..460ff21 100644
--- a/client/src/register-form.js
+++ b/client/src/register-form.js
@@ -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;
diff --git a/server/assets/templates/account.html b/server/assets/templates/account.html
index 7221e3c..8d05450 100644
--- a/server/assets/templates/account.html
+++ b/server/assets/templates/account.html
@@ -17,6 +17,9 @@
{% when None %}
+ page="{{register_page.as_str()}}"
+>
+
+
{% endmatch %}
{% endblock %}
diff --git a/server/src/routes/unrestricted/account.rs b/server/src/routes/unrestricted/account.rs
index 5a5522f..cfcd5d3 100644
--- a/server/src/routes/unrestricted/account.rs
+++ b/server/src/routes/unrestricted/account.rs
@@ -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,
page: Page,
h: Helper,
+ register_page: RegisterPage,
}
impl AccountTemplate {
@@ -331,6 +332,60 @@ async fn account_page(id: Identity, db: Data) -> Result {
))
}
+#[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,
+ path: Path<(RegisterPage,)>,
+) -> Result {
+ 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)]