Opening hours completed. Leptos upgraded to 0.5.2.
This commit is contained in:
@@ -0,0 +1,29 @@
|
||||
use leptos::*;
|
||||
use crate::backend::data::WeekHours;
|
||||
use crate::backend::opening_hours::UpdateHours;
|
||||
use crate::components::data_form::DataForm;
|
||||
use crate::components::modal_box::DialogOpener;
|
||||
|
||||
#[component]
|
||||
pub fn EditHours(opener: DialogOpener, hours: ReadSignal<WeekHours>) -> impl IntoView {
|
||||
let update_hours = create_server_action::<UpdateHours>();
|
||||
|
||||
view! {
|
||||
<DataForm opener=opener action=update_hours title="Edit hours">
|
||||
<input type="hidden" value={move || hours.get().day().to_string()} name="hours[day]"/>
|
||||
<div class="row">
|
||||
<div class="col mb-3">
|
||||
<label for="hours" class="form-label">"Hours"</label>
|
||||
<input
|
||||
type="text"
|
||||
id="hours"
|
||||
class="form-control"
|
||||
placeholder="12:00 - 15:00, 17:00 - 21:00"
|
||||
prop:value={move || hours.get().hours().to_string()}
|
||||
name="hours[hours]"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</DataForm>
|
||||
}
|
||||
}
|
||||
+7
-4
@@ -1,11 +1,14 @@
|
||||
pub mod home_page;
|
||||
pub mod settings;
|
||||
pub mod company_info;
|
||||
mod company_info;
|
||||
mod company_edit;
|
||||
pub mod login;
|
||||
pub mod public;
|
||||
pub mod profile_edit;
|
||||
pub mod change_pwd;
|
||||
pub mod users;
|
||||
pub mod user_edit;
|
||||
pub mod user_delete;
|
||||
mod users;
|
||||
mod user_edit;
|
||||
mod user_delete;
|
||||
mod opening_hours;
|
||||
mod hours_edit;
|
||||
|
||||
|
||||
@@ -0,0 +1,81 @@
|
||||
use chrono::Weekday;
|
||||
use leptos::*;
|
||||
use crate::backend::data::{DayHours, WeekHours};
|
||||
use crate::backend::opening_hours::get_hours;
|
||||
use crate::components::modal_box::DialogOpener;
|
||||
use crate::locales::trl;
|
||||
use crate::pages::hours_edit::EditHours;
|
||||
|
||||
fn show_time(tm: &str) -> impl Fn() -> String {
|
||||
if tm.is_empty() {
|
||||
trl("Closed")
|
||||
} else {
|
||||
trl(tm)
|
||||
}
|
||||
}
|
||||
|
||||
fn show_day(day: &Weekday) -> impl Fn() -> String {
|
||||
match day {
|
||||
Weekday::Mon => { trl("Monday") }
|
||||
Weekday::Tue => { trl("Tuesday") }
|
||||
Weekday::Wed => { trl("Wednesday") }
|
||||
Weekday::Thu => { trl("Thursday") }
|
||||
Weekday::Fri => { trl("Friday") }
|
||||
Weekday::Sat => { trl("Saturday") }
|
||||
Weekday::Sun => { trl("Sunday") }
|
||||
}
|
||||
}
|
||||
|
||||
#[component]
|
||||
pub fn OpeningHours() -> impl IntoView {
|
||||
let editor = DialogOpener::new();
|
||||
let hours = create_blocking_resource(move || editor.visible(), move |_| {get_hours()});
|
||||
let hrs = create_rw_signal(WeekHours::default());
|
||||
|
||||
view! {
|
||||
<EditHours opener=editor hours=hrs.read_only() />
|
||||
<div class="card mb-3">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title"><i class="bx bxs-watch"></i>" "{trl("Opening hours")}</h5>
|
||||
<p class="card-text">
|
||||
<Transition fallback=move || view! {<p>{trl("Loading...")}</p> }>
|
||||
{move || {
|
||||
hours.get().map(|h| match h {
|
||||
Ok(h) => {
|
||||
let h = create_rw_signal(h);
|
||||
let d = create_rw_signal((0..7).collect::<Vec<u8>>());
|
||||
view! {
|
||||
<div>
|
||||
<table class="table card-table">
|
||||
<For each=move || d.get() key=|day| *day
|
||||
children=move |day| {
|
||||
let week_day = Weekday::try_from(day).unwrap_or(Weekday::Mon);
|
||||
let hr_c = h.get().get(&week_day).unwrap_or(&Vec::new()).clone();
|
||||
let hr_day = hr_c.clone();
|
||||
view! {
|
||||
<tr>
|
||||
<td>{show_day(&week_day)}</td>
|
||||
<td>{show_time(&DayHours(hr_day).to_string())}</td>
|
||||
<td><a href="javascript:void(0)" class="card-link" on:click = move |_| {
|
||||
hrs.set(WeekHours::new(week_day, hr_c.clone()));
|
||||
editor.show();
|
||||
}><i class="bx bx-edit-alt me-1"></i></a></td>
|
||||
</tr>
|
||||
}
|
||||
}
|
||||
/>
|
||||
</table>
|
||||
</div>
|
||||
}
|
||||
}
|
||||
Err(e) => {view! {<div><p>{trl("Error loading data")}</p>
|
||||
<p>{e.to_string()}</p></div>
|
||||
}}
|
||||
})
|
||||
}}
|
||||
</Transition>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
use leptos::*;
|
||||
use crate::locales::trl;
|
||||
use crate::pages::company_info::CompanyInfo;
|
||||
use crate::pages::opening_hours::OpeningHours;
|
||||
use crate::pages::users::Users;
|
||||
|
||||
#[component]
|
||||
@@ -15,5 +16,13 @@ pub fn Settings() -> impl IntoView {
|
||||
<Users/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-5">
|
||||
<div class="col-md">
|
||||
<OpeningHours/>
|
||||
</div>
|
||||
<div class="col-md">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user