|
|
|
@ -3,7 +3,8 @@ use leptos::*;
|
|
|
|
|
use leptos_captcha::{Captcha, pow_dispatch};
|
|
|
|
|
use leptos_router::*;
|
|
|
|
|
use rust_decimal::Decimal;
|
|
|
|
|
use crate::backend::data::{ApiResponse, DayHour, Reservation, ResProperty, SlotType, TmCheck};
|
|
|
|
|
use crate::backend::customer::get_remembered;
|
|
|
|
|
use crate::backend::data::{ApiResponse, Customer, DayHour, Reservation, ResProperty, SlotType, TmCheck};
|
|
|
|
|
use crate::backend::reservation::{CreateReservation, get_public_form_data, is_reserved};
|
|
|
|
|
use crate::backend::user::get_pow;
|
|
|
|
|
use crate::components::data_form::ForValidation;
|
|
|
|
@ -100,6 +101,9 @@ pub fn Public() -> impl IntoView {
|
|
|
|
|
let result_dlg = DialogOpener::new();
|
|
|
|
|
let result = cr_reservation.value();
|
|
|
|
|
let is_pending = create_rw_signal(None);
|
|
|
|
|
let active_str = create_rw_signal("true".to_string());
|
|
|
|
|
let get_customer = create_blocking_resource(||(), move |_| get_remembered());
|
|
|
|
|
let customer = create_rw_signal(Customer::default());
|
|
|
|
|
|
|
|
|
|
create_effect(move |_| {
|
|
|
|
|
day.set(Local::now().date_naive());
|
|
|
|
@ -157,6 +161,14 @@ pub fn Public() -> impl IntoView {
|
|
|
|
|
</div>
|
|
|
|
|
<Transition fallback=|| view! {<p>{trl("Loading...")}</p> }>
|
|
|
|
|
{move || {
|
|
|
|
|
get_customer.get().map(|c| match c {
|
|
|
|
|
Err(_) => {},
|
|
|
|
|
Ok(c) => {
|
|
|
|
|
if let Some(c) = c {
|
|
|
|
|
customer.set(c);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
form_data.get().map(|u| match u {
|
|
|
|
|
Err(e) => {
|
|
|
|
|
view! {<div>{e.to_string()}</div>}}
|
|
|
|
@ -216,7 +228,7 @@ pub fn Public() -> impl IntoView {
|
|
|
|
|
id="full_name"
|
|
|
|
|
class="form-control"
|
|
|
|
|
placeholder={trl("Enter full name")}
|
|
|
|
|
//prop:value={move || opener.empty()}
|
|
|
|
|
prop:value={move || customer.get().full_name}
|
|
|
|
|
name="reservation[full_name]"
|
|
|
|
|
/>
|
|
|
|
|
</div>
|
|
|
|
@ -229,7 +241,7 @@ pub fn Public() -> impl IntoView {
|
|
|
|
|
id="email"
|
|
|
|
|
class="form-control"
|
|
|
|
|
placeholder={trl("Enter e-mail address")}
|
|
|
|
|
//prop:value={move || opener.empty()}
|
|
|
|
|
prop:value={move || customer.get().email}
|
|
|
|
|
name="reservation[email]"
|
|
|
|
|
/>
|
|
|
|
|
</div>
|
|
|
|
@ -242,7 +254,7 @@ pub fn Public() -> impl IntoView {
|
|
|
|
|
id="phone"
|
|
|
|
|
class="form-control"
|
|
|
|
|
placeholder={trl("Enter phone number")}
|
|
|
|
|
//prop:value={move || opener.empty()}
|
|
|
|
|
prop:value={move || customer.get().phone}
|
|
|
|
|
name="reservation[phone]"
|
|
|
|
|
/>
|
|
|
|
|
</div>
|
|
|
|
@ -260,6 +272,15 @@ pub fn Public() -> impl IntoView {
|
|
|
|
|
/>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<input
|
|
|
|
|
type="checkbox"
|
|
|
|
|
id="remember"
|
|
|
|
|
class="form-check-input"
|
|
|
|
|
checked="true"
|
|
|
|
|
on:change=move |ev| active_str.set(if event_target_checked(&ev)
|
|
|
|
|
{ "true".to_string() } else { "false".to_string() }) />
|
|
|
|
|
<label for="remember" class="form-label">{trl("Remember for next time")}</label>
|
|
|
|
|
<input type="hidden" prop:value=active_str name="reservation[remember]"/>
|
|
|
|
|
<Captcha is_pending />
|
|
|
|
|
<div class="modal-footer">
|
|
|
|
|
<button type="submit" class="btn btn-primary">
|
|
|
|
|