Reduce calls to get_user by not having logged_in resource
This commit is contained in:
parent
f1affc66bc
commit
d8fab0e068
@ -18,7 +18,6 @@ pub fn Profile() -> impl IntoView {
|
|||||||
let (dropdown_open, set_dropdown_open) = create_signal(false);
|
let (dropdown_open, set_dropdown_open) = create_signal(false);
|
||||||
let (image_error, set_image_error) = create_signal(false);
|
let (image_error, set_image_error) = create_signal(false);
|
||||||
let user = create_local_resource(move || dropdown_open.get(), |_| async move { get_user().await });
|
let user = create_local_resource(move || dropdown_open.get(), |_| async move { get_user().await });
|
||||||
let logged_in = create_local_resource(move || dropdown_open.get(), |_| async move { get_user().await.is_ok() });
|
|
||||||
|
|
||||||
let open_dropdown = move |_| {
|
let open_dropdown = move |_| {
|
||||||
set_dropdown_open.update(|value| *value = !*value);
|
set_dropdown_open.update(|value| *value = !*value);
|
||||||
@ -34,7 +33,7 @@ pub fn Profile() -> impl IntoView {
|
|||||||
<div class="profile-container">
|
<div class="profile-container">
|
||||||
<div class="profile-name">
|
<div class="profile-name">
|
||||||
<Show
|
<Show
|
||||||
when=move || logged_in.get().unwrap_or_default()
|
when=move || user.get().map(|user| user.is_ok()).unwrap_or_default()
|
||||||
fallback=|| view!{
|
fallback=|| view!{
|
||||||
<h1>Not Logged In</h1>
|
<h1>Not Logged In</h1>
|
||||||
}>
|
}>
|
||||||
@ -43,7 +42,7 @@ pub fn Profile() -> impl IntoView {
|
|||||||
</div>
|
</div>
|
||||||
<div class="profile-icon" on:click=open_dropdown>
|
<div class="profile-icon" on:click=open_dropdown>
|
||||||
<Show
|
<Show
|
||||||
when=move || logged_in.get().unwrap_or_default()
|
when=move || user.get().map(|user| user.is_ok()).unwrap_or_default()
|
||||||
fallback=|| view! { <Icon icon=icondata::CgProfile width="45" height="45"/> }
|
fallback=|| view! { <Icon icon=icondata::CgProfile width="45" height="45"/> }
|
||||||
>
|
>
|
||||||
<Show
|
<Show
|
||||||
@ -59,11 +58,11 @@ pub fn Profile() -> impl IntoView {
|
|||||||
</div>
|
</div>
|
||||||
<div class="dropdown-container" style={move || if dropdown_open() {"display: flex"} else {"display: none"}}>
|
<div class="dropdown-container" style={move || if dropdown_open() {"display: flex"} else {"display: none"}}>
|
||||||
<Show
|
<Show
|
||||||
when=move || logged_in.get().unwrap_or_default()
|
when=move || user.get().map(|user| user.is_ok()).unwrap_or_default()
|
||||||
fallback=|| view!{
|
fallback=|| view!{
|
||||||
<DropDownNotLoggedIn />
|
<DropDownNotLoggedIn />
|
||||||
}>
|
}>
|
||||||
<DropDownLoggedIn logged_in=logged_in />
|
<DropDownLoggedIn />
|
||||||
</Show>
|
</Show>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -80,16 +79,15 @@ pub fn DropDownNotLoggedIn() -> impl IntoView {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#[component]
|
#[component]
|
||||||
pub fn DropDownLoggedIn(logged_in: Resource<bool, bool>) -> impl IntoView {
|
pub fn DropDownLoggedIn() -> impl IntoView {
|
||||||
|
|
||||||
let logout = move |_| {
|
let logout = move |_| {
|
||||||
spawn_local(async move {
|
spawn_local(async move {
|
||||||
let result = logout().await;
|
let result = logout().await;
|
||||||
if let Err(err) = result {
|
if let Err(err) = result {
|
||||||
log!("Error logging out: {:?}", err);
|
log!("Error logging out: {:?}", err);
|
||||||
} else {
|
} else {
|
||||||
log!("Logged out successfully");
|
log!("Logged out successfully");
|
||||||
logged_in.set(false);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user