1
0
Fork 0
forked from alemi/upub

feat(web): user timeline persists too

it will reset every time you view another user, but at least won't reset
if you go into a thread and then back to your user
This commit is contained in:
əlemi 2024-04-19 06:58:54 +02:00
parent 01d0e4df85
commit fc2a62239b
Signed by: alemi
GPG key ID: A4895B84D311642C
2 changed files with 8 additions and 3 deletions

View file

@ -17,6 +17,7 @@ pub fn App() -> impl IntoView {
let home_tl = Timeline::new(format!("{URL_BASE}/users/{}/inbox/page", username.get().unwrap_or_default())); let home_tl = Timeline::new(format!("{URL_BASE}/users/{}/inbox/page", username.get().unwrap_or_default()));
let server_tl = Timeline::new(format!("{URL_BASE}/inbox/page")); let server_tl = Timeline::new(format!("{URL_BASE}/inbox/page"));
let user_tl = Timeline::new(format!("{URL_BASE}/users/{}/outbox/page", username.get().unwrap_or_default()));
let screen_width = window().screen().map(|x| x.avail_width().unwrap_or_default()).unwrap_or_default(); let screen_width = window().screen().map(|x| x.avail_width().unwrap_or_default()).unwrap_or_default();
@ -94,8 +95,8 @@ pub fn App() -> impl IntoView {
<Route path="/web/config" view=ConfigPage /> <Route path="/web/config" view=ConfigPage />
<Route path="/web/about" view=AboutPage /> <Route path="/web/about" view=AboutPage />
<Route path="/web/users/:id" view=UserPage />
<Route path="/web/objects/:id" view=ObjectPage /> <Route path="/web/objects/:id" view=ObjectPage />
<Route path="/web/users/:id" view=move || view! { <UserPage tl=user_tl /> } />
<Route path="/" view=move || view! { <Redirect path="/web" /> } /> <Route path="/" view=move || view! { <Redirect path="/web" /> } />
</Routes> </Routes>

View file

@ -31,7 +31,7 @@ pub fn ConfigPage() -> impl IntoView {
} }
#[component] #[component]
pub fn UserPage() -> impl IntoView { pub fn UserPage(tl: Timeline) -> impl IntoView {
let params = use_params_map(); let params = use_params_map();
let auth = use_context::<Auth>().expect("missing auth context"); let auth = use_context::<Auth>().expect("missing auth context");
let id = params.get().get("id").cloned().unwrap_or_default(); let id = params.get().get("id").cloned().unwrap_or_default();
@ -71,6 +71,10 @@ pub fn UserPage() -> impl IntoView {
let following = object.following().get().map(|x| x.total_items().unwrap_or(0)).unwrap_or(0); let following = object.following().get().map(|x| x.total_items().unwrap_or(0)).unwrap_or(0);
let followers = object.followers().get().map(|x| x.total_items().unwrap_or(0)).unwrap_or(0); let followers = object.followers().get().map(|x| x.total_items().unwrap_or(0)).unwrap_or(0);
let statuses = object.outbox().get().map(|x| x.total_items().unwrap_or(0)).unwrap_or(0); let statuses = object.outbox().get().map(|x| x.total_items().unwrap_or(0)).unwrap_or(0);
let tl_url = format!("{}/outbox/page", Uri::api("users", &id.clone(), false));
if !tl.next.get().starts_with(&tl_url) {
tl.reset(tl_url);
}
view! { view! {
<div class="ml-3 mr-3"> <div class="ml-3 mr-3">
<div <div
@ -117,7 +121,7 @@ pub fn UserPage() -> impl IntoView {
}</blockquote> }</blockquote>
</div> </div>
</div> </div>
<TimelineFeed tl=Timeline::new(format!("{}/outbox/page", Uri::api("users", &id.clone(), false))) /> <TimelineFeed tl=tl />
}.into_view() }.into_view()
}, },
}} }}