You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

119 lines
5.3 KiB
Rust

use chrono::{Local, NaiveDate};
use leptos::*;
use rust_decimal::Decimal;
use crate::backend::data::ApiResponse;
use crate::components::modal_box::{DialogOpener, ModalBody, ModalDialog, ModalFooter};
use crate::components::validation_err::ValidationErr;
use crate::locales::{loc_date, trl};
use crate::validator::Validator;
#[component]
pub fn res_error(opener: DialogOpener, validator: Validator) -> impl IntoView {
view! {
<ModalDialog opener=opener title="Can't create reservation">
<ModalBody>
<ValidationErr validator=validator/>
</ModalBody>
<ModalFooter>
<button type="button" class="btn btn-outline-secondary" data-bs-dismiss="modal"
on:click=move |_| {
validator.reset();
opener.hide();}>
{trl("Close")}
</button>
</ModalFooter>
</ModalDialog>
}
}
#[component]
pub fn res_saved(
opener: DialogOpener,
save_result: RwSignal<Option<Result<ApiResponse<NaiveDate>, ServerFnError>>>,
day: RwSignal<NaiveDate>,
price: WriteSignal<Decimal>,
slots: WriteSignal<Vec<String>>) -> impl IntoView {
view! {{move ||{
if let Some(r) = save_result.get() {
match r {
Ok(ar) => {
match ar {
ApiResponse::Data(d) => {
view! {
<div>
<ModalDialog opener=opener title="Reservation saved">
<ModalBody>
<p>
{trl("Your reservation has been successfully saved.")}
</p>
<p>
{trl("We look forward to seeing you on")}" "{loc_date(d)}
</p>
</ModalBody>
<ModalFooter>
<button type="button" class="btn btn-outline-secondary" data-bs-dismiss="modal"
on:click=move |_| {
opener.hide();
if day.get() == Local::now().date_naive() {
day.set(NaiveDate::parse_from_str("2024-01-01", "%Y-%m-%d").unwrap());
}
slots.set(vec![]);
price.set(Decimal::default());
day.set(Local::now().date_naive());}>
{trl("Ok")}
</button>
</ModalFooter>
</ModalDialog>
</div>
}
},
ApiResponse::Error(err) => {
view! {
<div>
<ModalDialog opener=opener title="Reservation not saved">
<ModalBody>
<div class="alert alert-danger">
{trl("Reservation cannot be saved.")}<br/>{trl(&err)}
</div>
</ModalBody>
<ModalFooter>
<button type="button" class="btn btn-outline-secondary" data-bs-dismiss="modal"
on:click=move |_| {
opener.hide();}>
{trl("Close")}
</button>
</ModalFooter>
</ModalDialog>
</div>
}
}
}
}
Err(err) => {
view! {
<div>
<ModalDialog opener=opener title="Save error">
<ModalBody>
<div class="alert alert-danger">
{trl("Error while saving reservation.")}<br/>{trl(&err.to_string())}
</div>
</ModalBody>
<ModalFooter>
<button type="button" class="btn btn-outline-secondary" data-bs-dismiss="modal"
on:click=move |_| {
opener.hide();}>
{trl("Close")}
</button>
</ModalFooter>
</ModalDialog>
</div>
}
}
}
} else {
view! {<div></div>}
}
}}
}
}