diff options
author | alemi <me@alemi.dev> | 2024-05-03 04:51:59 +0200 |
---|---|---|
committer | alemi <me@alemi.dev> | 2024-05-03 04:52:49 +0200 |
commit | f8473a5ce197ebff4587838b5b95347644476264 (patch) | |
tree | f06a3c02d3b7ea6a36f0fc6105ebbb4d298eb3b5 | |
parent | 9e42d4b4606b0f0b44e1389f6c65769316545292 (diff) |
feat(web): refresh button for context and user
i really dont like this tho it shifts the breadcrumb a lot and its weird
that it appears also implemented kinda jankily idkkkk
-rw-r--r-- | web/src/components/timeline.rs | 8 | ||||
-rw-r--r-- | web/src/page.rs | 34 |
2 files changed, 40 insertions, 2 deletions
diff --git a/web/src/components/timeline.rs b/web/src/components/timeline.rs index 9749ac5..0f6ed6d 100644 --- a/web/src/components/timeline.rs +++ b/web/src/components/timeline.rs @@ -21,6 +21,14 @@ impl Timeline { Timeline { feed, next, over, loading } } + pub fn len(&self) -> usize { + self.feed.get().len() + } + + pub fn is_empty(&self) -> bool { + self.feed.get().is_empty() + } + pub fn reset(&self, url: String) { self.feed.set(vec![]); self.next.set(url); diff --git a/web/src/page.rs b/web/src/page.rs index f3c3df7..03ba6af 100644 --- a/web/src/page.rs +++ b/web/src/page.rs @@ -75,7 +75,22 @@ pub fn UserPage(tl: Timeline) -> impl IntoView { }); view! { <div> - <Breadcrumb back=true >users::view</Breadcrumb> + <Breadcrumb back=true > + users::view + <a + class="clean ml-1" href="#" + class:hidden=move || tl.is_empty() + on:click=move |_| { + tl.reset(tl.next.get().split('?').next().unwrap_or_default().to_string()); + spawn_local(async move { + if let Err(e) = tl.more(auth).await { + tracing::error!("error fetching more items for timeline: {e}"); + } + }) + }><span class="emoji"> + "\u{1f5d8}" + </span></a> + </Breadcrumb> <div> {move || { let uid = uid.clone(); @@ -194,7 +209,22 @@ pub fn ObjectPage(tl: Timeline) -> impl IntoView { }); view! { <div> - <Breadcrumb back=true >objects::view</Breadcrumb> + <Breadcrumb back=true > + objects::view + <a + class="clean ml-1" href="#" + class:hidden=move || tl.is_empty() + on:click=move |_| { + tl.reset(tl.next.get().split('?').next().unwrap_or_default().to_string()); + spawn_local(async move { + if let Err(e) = tl.more(auth).await { + tracing::error!("error fetching more items for timeline: {e}"); + } + }) + }><span class="emoji"> + "\u{1f5d8}" + </span></a> + </Breadcrumb> <div class="ma-2" > {move || match object.get() { None => view! { <p class="center"> loading ... </p> }.into_view(), |