fix: show route-specific skeleton screens in SuspenseBoundary fallback

This commit is contained in:
xfy 2026-06-04 11:06:42 +08:00
parent c2f68b9c2d
commit 88cd23f74f
2 changed files with 6300 additions and 4 deletions

6284
scripts/seed_posts.sql Normal file

File diff suppressed because it is too large Load Diff

View File

@ -3,11 +3,25 @@ use dioxus::prelude::*;
use crate::components::footer::Footer;
use crate::components::header::Header;
use crate::components::nav::use_nav_items;
use crate::components::skeletons::home_skeleton::HomeSkeleton;
use crate::components::skeletons::archive_skeleton::ArchiveSkeleton;
use crate::components::skeletons::delayed_skeleton::DelayedSkeleton;
use crate::components::skeletons::home_skeleton::HomeSkeleton;
use crate::components::skeletons::post_detail_skeleton::PostDetailSkeleton;
use crate::components::skeletons::search_skeleton::SearchSkeleton;
use crate::components::skeletons::tags_skeleton::TagsSkeleton;
use crate::router::Route;
use crate::theme::ThemeToggle;
fn route_skeleton(route: &Route) -> Element {
match route {
Route::Archives {} => rsx! { DelayedSkeleton { ArchiveSkeleton {} } },
Route::Tags {} | Route::TagDetail { .. } => rsx! { DelayedSkeleton { TagsSkeleton {} } },
Route::Search {} => rsx! { DelayedSkeleton { SearchSkeleton {} } },
Route::PostDetail { .. } => rsx! { DelayedSkeleton { PostDetailSkeleton {} } },
_ => rsx! { DelayedSkeleton { HomeSkeleton {} } },
}
}
#[component]
pub fn FrontendLayout() -> Element {
let route = use_route::<Route>();
@ -18,9 +32,7 @@ pub fn FrontendLayout() -> Element {
Header { nav_items, right_content: rsx! { ThemeToggle {} } }
main { class: "flex-1 w-full max-w-3xl mx-auto px-6 py-6",
SuspenseBoundary {
fallback: |_| rsx! {
DelayedSkeleton { HomeSkeleton {} }
},
fallback: move |_| route_skeleton(&route),
Outlet::<Route> {}
}
}