Implemented mail settings.
This commit is contained in:
@@ -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>
|
||||
}
|
||||
}
|
||||
@@ -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>
|
||||
}
|
||||
}
|
||||
@@ -17,4 +17,6 @@ mod property_delete;
|
||||
mod res_dialogs;
|
||||
mod today_reservations;
|
||||
mod new_reservations;
|
||||
pub mod mail_settings;
|
||||
mod mail_view;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user