Improve create offer

This commit is contained in:
eraden 2022-07-30 18:53:47 +02:00
parent d703ddffdf
commit 1efb7df848
6 changed files with 42 additions and 75 deletions

View File

@ -62,7 +62,7 @@ customElements.define('marketplace-offers', class extends Component {
this.shadowRoot.querySelector('#publish').addEventListener('click', ev => { this.shadowRoot.querySelector('#publish').addEventListener('click', ev => {
ev.stopPropagation(); ev.stopPropagation();
ev.preventDefault(); ev.preventDefault();
location.href = '/account/offers'; location.href = '/offers/new';
}); });
} }

View File

@ -11,11 +11,16 @@ customElements.define('offer-form', class extends Component {
:host { display: block; } :host { display: block; }
#description { #description {
height: 200px; height: 200px;
width: 100%;
} }
@media only screen and (min-device-width: 1200px) { section {
padding: 8px;
}
@media only screen and (min-device-width: 1000px) {
section > form { section > form {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
justify-items: stretch;
} }
#imageSection { #imageSection {
margin-right: 16px; margin-right: 16px;

View File

@ -1,7 +1,5 @@
{% extends "../base.html" %} {% extends "../base.html" %}
{% block content %} {% block content %}
<marketplace-offers {{h.account_id_tag(account)}}> <h2>Tworzenie oferty</h2>
<h2>Tworzenie oferty</h2> <offer-form {{h.account_id_tag(account)}}></offer-form>
<offer-form></offer-form>
</marketplace-offers>
{% endblock %} {% endblock %}

View File

@ -1,8 +0,0 @@
{% extends "../base.html" %}
{% block content %}
<marketplace-offers {{h.account_id_tag(account)}}>
<h2>Sprzedaż niepotrzebnych rzeczy</h2>
<offer-form></offer-form>
</marketplace-offers>
{% endblock %}

View File

@ -12,29 +12,48 @@ use crate::routes::{HttpResult, Identity};
use crate::view::Helper; use crate::view::Helper;
use crate::{authorize, not_xss, ok_or_internal, queries}; use crate::{authorize, not_xss, ok_or_internal, queries};
#[derive(Default, Debug, Template, Serialize)] #[derive(Default, Serialize, Template)]
#[template(path = "./offers/index.html")] #[template(path = "./marketplace/new.html")]
struct AccountOffersTemplate { struct NewOfferTemplate {
account: Option<db::Account>, account: Option<db::Account>,
error: Option<String>, error: Option<String>,
page: Page, page: Page,
#[serde(skip)]
h: Helper, h: Helper,
} }
#[get("/account/offers")] #[get("/new")]
pub async fn account_offers(req: HttpRequest, id: Identity, db: Data<PgPool>) -> HttpResult { async fn new_offer(req: HttpRequest, db: Data<PgPool>, id: Identity) -> HttpResult {
let pool = db.into_inner(); let pool = db.into_inner();
let mut t = ok_or_internal!(&req, pool.begin().await); let mut t = crate::ok_or_internal!(&req, pool.begin().await);
let account = authorize!(&req, &mut t, id); let account = match id.identity() {
Some(id) => queries::account_by_id(&mut t, id).await,
_ => None,
};
let account = match account {
Some(a) => a,
_ => {
return HttpResult::res(
&req,
StatusCode::NOT_FOUND,
NewOfferTemplate {
page: Page::Marketplace,
account,
error: Some("Musisz być zalogowany żeby to zrobić".into()),
..Default::default()
},
)
}
};
t.commit().await.ok(); t.commit().await.ok();
HttpResult::res( HttpResult::res(
&req, &req,
StatusCode::OK, StatusCode::OK,
AccountOffersTemplate { NewOfferTemplate {
page: Page::Marketplace,
account: Some(account), account: Some(account),
page: Page::AccountOffers,
..Default::default() ..Default::default()
}, },
) )
@ -80,7 +99,7 @@ async fn create_offer(
HttpResult::res( HttpResult::res(
&req, &req,
StatusCode::BAD_REQUEST, StatusCode::BAD_REQUEST,
AccountOffersTemplate { NewOfferTemplate {
account: Some(account), account: Some(account),
page: Page::AccountOffers, page: Page::AccountOffers,
error: Some("Problem z utworzeniem wpisu".into()), error: Some("Problem z utworzeniem wpisu".into()),
@ -130,7 +149,7 @@ async fn update_offer(
HttpResult::res( HttpResult::res(
&req, &req,
StatusCode::BAD_REQUEST, StatusCode::BAD_REQUEST,
AccountOffersTemplate { NewOfferTemplate {
account: Some(account), account: Some(account),
page: Page::AccountOffers, page: Page::AccountOffers,
error: Some("Problem z utworzeniem wpisu".into()), error: Some("Problem z utworzeniem wpisu".into()),
@ -170,7 +189,7 @@ async fn user_finish_offer(
HttpResult::res( HttpResult::res(
&req, &req,
StatusCode::BAD_REQUEST, StatusCode::BAD_REQUEST,
AccountOffersTemplate { NewOfferTemplate {
account: Some(account), account: Some(account),
page: Page::AccountOffers, page: Page::AccountOffers,
error: Some("Problem z utworzeniem wpisu".into()), error: Some("Problem z utworzeniem wpisu".into()),
@ -182,8 +201,9 @@ async fn user_finish_offer(
} }
pub fn configure(config: &mut ServiceConfig) { pub fn configure(config: &mut ServiceConfig) {
config.service(account_offers).service( config.service(
web::scope("/offers") web::scope("/offers")
.service(new_offer)
.service(create_offer) .service(create_offer)
.service(update_offer) .service(update_offer)
.service(user_finish_offer), .service(user_finish_offer),

View File

@ -73,53 +73,6 @@ async fn marketplace(req: HttpRequest, db: Data<PgPool>, id: Identity) -> HttpRe
) )
} }
#[derive(Default, Serialize, Template)]
#[template(path = "./marketplace/new.html")]
struct NewOfferTemplate {
account: Option<db::Account>,
error: Option<String>,
page: Page,
#[serde(skip)]
h: Helper,
}
#[get("/new")]
async fn new_marketplace(req: HttpRequest, db: Data<PgPool>, id: Identity) -> HttpResult {
let pool = db.into_inner();
let mut t = crate::ok_or_internal!(&req, pool.begin().await);
let account = match id.identity() {
Some(id) => queries::account_by_id(&mut t, id).await,
_ => None,
};
let account = match account {
Some(a) => a,
_ => {
return HttpResult::res(
&req,
StatusCode::NOT_FOUND,
NewOfferTemplate {
page: Page::Marketplace,
account,
error: Some("Musisz być zalogowany żeby to zrobić".into()),
..Default::default()
},
)
}
};
t.commit().await.ok();
HttpResult::res(
&req,
StatusCode::OK,
NewOfferTemplate {
page: Page::Marketplace,
account: Some(account),
..Default::default()
},
)
}
#[derive(Default, Serialize, Template)] #[derive(Default, Serialize, Template)]
#[template(path = "./marketplace/edit.html")] #[template(path = "./marketplace/edit.html")]
struct EditOfferTemplate { struct EditOfferTemplate {
@ -195,7 +148,6 @@ async fn edit_marketplace(
pub fn configure(config: &mut ServiceConfig) { pub fn configure(config: &mut ServiceConfig) {
config.service( config.service(
web::scope("/marketplace") web::scope("/marketplace")
.service(new_marketplace)
.service(edit_marketplace) .service(edit_marketplace)
.service(marketplace), .service(marketplace),
); );