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.

81 lines
3.3 KiB
Rust

use leptos::*;
use crate::backend::data::User;
use crate::backend::user::{get_user, UpdateProfile};
use crate::components::data_form::DataForm;
use crate::components::modal_box::DialogOpener;
#[component]
pub fn ProfileEdit(user: ReadSignal<User>, opener: DialogOpener) -> impl IntoView {
let update_user = create_server_action::<UpdateProfile>();
let logged_in = create_resource(||(), move |_| get_user());
view! {
<DataForm opener=opener action=update_user title="Edit profile">
<input type="hidden" prop:value={move || user.get().login} name="user[login]"/>
<div class="row">
<div class="col mb-3">
<label for="name" class="form-label">"Full name"</label>
<input
type="text"
id="name"
class="form-control"
placeholder="Enter Full name"
prop:value={move || user.get().full_name}
name="user[full_name]"
/>
</div>
</div>
<div class="row">
<div class="col mb-3">
<label for="email" class="form-label">"Email"</label>
<input
type="text"
id="name"
class="form-control"
placeholder="Enter email"
prop:value={move || user.get().email.unwrap_or("".to_string())}
name="user[email]"
/>
</div>
</div>
<div class="row">
<div class="col mb-3">
<input
class="form-check-input"
type="checkbox"
id="getMail"
prop:value={move || if user.get().get_emails {"true"} else {"false"}}
prop:checked={move || user.get().get_emails}
name="user[get_emails]"
/>
<label class="form-check-label" for="getMail">"Get emails"</label>
</div>
</div>
<Suspense fallback=move || view! {<div></div>}>
<div class="row" style={move || {
logged_in.get().map(|u| match u {
Ok(usr) => {
let usr = usr.unwrap_or_default();
if usr.login == user.get().login && !usr.login.is_empty() { "display: none" }
else {""}
}
Err(_) => ""
})
} }>
<div class="col mb-3">
<input
class="form-check-input"
type="checkbox"
id="admin"
prop:value={move || if user.get().admin {"true"} else {"false"}}
prop:checked={move || user.get().admin}
name="user[admin]"
//disabled
/>
<label class="form-check-label" for="admin">"Admin"</label>
</div>
</div>
</Suspense>
</DataForm>
}
}