50 lines
2.1 KiB
Rust
50 lines
2.1 KiB
Rust
use leptos::prelude::*;
|
|
use crate::backend::company::get_company;
|
|
use crate::backend::data::{ApiResponse, Company};
|
|
use crate::components::modal_box::DialogOpener;
|
|
use crate::locales::trl;
|
|
use crate::pages::company_edit::CompanyEdit;
|
|
|
|
#[component]
|
|
pub fn CompanyInfo() -> impl IntoView {
|
|
let editor = DialogOpener::new();
|
|
let company = Resource::new_blocking(move|| editor.visible(), move |_| { get_company() });
|
|
let (cmp, set_cmp) = signal(Company::default());
|
|
|
|
view! {
|
|
<CompanyEdit company={cmp} opener=editor/>
|
|
<div class="card mb-3">
|
|
<div class="card-body">
|
|
<h5 class="card-title"><i class="bx bx-buildings"></i>" "{trl("Company info")}</h5>
|
|
<div class="card-text">
|
|
<Transition fallback=move || view! {<p>{trl("Loading...")}</p> }>
|
|
{move || {
|
|
company.get().map(|c| match c {
|
|
Err(e) => {view! {<div><p>{trl("Error loading data")}</p>
|
|
<p>{e.to_string()}</p></div>
|
|
}.into_any()}
|
|
Ok(c) => {
|
|
match c {
|
|
ApiResponse::Data(d) => {set_cmp.update(|cmp| *cmp = d.clone());
|
|
view! {<div>
|
|
<p><b>{d.name}</b></p>
|
|
<p>{d.street}" "{d.house_number}<br/>
|
|
{d.zip_code}" "{d.city}
|
|
</p>
|
|
<p>{trl("Customers can cancel a booking until (hours before its start)")}": "{d.cancel_hours}</p>
|
|
</div>}.into_any()
|
|
}
|
|
ApiResponse::Error(_) => {view! {<div><p>{trl("Error loading data")}</p></div>}.into_any()}
|
|
}
|
|
|
|
}
|
|
})
|
|
}}
|
|
</Transition>
|
|
</div>
|
|
<a href="javascript:void(0)" class="card-link" on:click = move |_| editor.show()>
|
|
<i class="bx bx-edit-alt fs-4 lh-0"></i></a>
|
|
</div>
|
|
</div>
|
|
}
|
|
} |