aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author alemi <me@alemi.dev>2024-05-03 04:51:59 +0200
committer alemi <me@alemi.dev>2024-05-03 04:52:49 +0200
commitf8473a5ce197ebff4587838b5b95347644476264 (patch)
treef06a3c02d3b7ea6a36f0fc6105ebbb4d298eb3b5
parent9e42d4b4606b0f0b44e1389f6c65769316545292 (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.rs8
-rw-r--r--web/src/page.rs34
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(),