Implemented mail settings.

This commit is contained in:
2024-02-10 19:52:20 +01:00
parent 88ac17008c
commit d18ef72d03
9 changed files with 276 additions and 19 deletions
+27
View File
@@ -0,0 +1,27 @@
use leptos::*;
use crate::backend::data::MessageType;
use crate::locales::trl;
use crate::pages::mail_view::MailView;
#[component]
pub fn mail_settings() -> impl IntoView {
view! {
<h1>{trl("Mail settings")}</h1>
<div class="row mb-5">
<div class="col-md">
<MailView title="New booking" mail_type=MessageType::NewReservation/>
</div>
<div class="col-md">
<MailView title="New booking - for customer" mail_type=MessageType::NewReservationCust/>
</div>
</div>
<div class="row mb-5">
<div class="col-md">
<MailView title="Booking approved" mail_type=MessageType::ReservationApp/>
</div>
<div class="col-md">
<MailView title="Booking canceled" mail_type=MessageType::ReservationCanceled/>
</div>
</div>
}
}
+81
View File
@@ -0,0 +1,81 @@
use leptos::*;
use crate::backend::data::{Message, MessageType};
use crate::backend::mail::{get_message, UpdateMessage};
use crate::components::data_form::DataForm;
use crate::components::modal_box::DialogOpener;
use crate::locales::trl;
#[component]
fn mail_edit(opener: DialogOpener, mail: ReadSignal<Message>) -> impl IntoView {
let update = create_server_action::<UpdateMessage>();
view! {
<DataForm opener=opener title="Edit mail" action=update>
<input type="hidden" prop:value={move || mail.get().id()} name="message[id]"/>
<input type="hidden" prop:value={move || mail.get().msg_type.to_string()} name="message[msg_type]"/>
<div class="row">
<div class="col mb-3">
<label for="subject" class="form-label">"Subject"</label>
<input
type="text"
id="nameWithTitle"
class="form-control"
placeholder="Enter Subject"
prop:value={move || mail.get().subject}
name="message[subject]"
/>
</div>
</div>
<div class="row">
<div class="col mb-3">
<label for="text" class="form-label">"Text"</label>
<textarea
id="text"
class="form-control"
prop:value={move || mail.get().text}
name="message[text]"
/>
</div>
</div>
</DataForm>
}
}
#[component]
pub fn mail_view(title: &'static str, mail_type: MessageType) -> impl IntoView {
let editor = DialogOpener::new();
let mail = create_blocking_resource( move || editor.visible(), move |_| get_message(mail_type.clone()));
let for_edit = create_rw_signal(Message::default());
view! {
<MailEdit opener=editor mail={for_edit.read_only()}/>
<div class="card mb-3">
<div class="card-body">
<h5 class="card-title"><i class="bx bx-buildings"></i>" "{trl(title)}</h5>
<p class="card-text">
<Transition fallback=move || view! {<p>{trl("Loading...")}</p> }>
{
mail.get().map(|m| match m {
Ok(m) => {
for_edit.set(m.clone());
view! {
<div>
<p>{trl("Subject: ")}{m.subject}</p>
<p>{m.text}</p>
</div>
}
}
Err(_) => {
view! {
<div>"Error loading data"</div>
}
}})
}
</Transition>
</p>
<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>
}
}
+2
View File
@@ -17,4 +17,6 @@ mod property_delete;
mod res_dialogs;
mod today_reservations;
mod new_reservations;
pub mod mail_settings;
mod mail_view;