summary refs log tree commit diff stats
path: root/src/components/catch_errors.rs
blob: d5a452dbe7b6ce2957132ec4026f2c0fd3ae219d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
use leptos::{
    IntoView, component,
    error::ErrorBoundary,
    prelude::{Children, ClassAttribute, CollectView, ElementChild, Get},
    view,
};

use crate::components::site_header::SiteHeader;

#[component]
pub(crate) fn CatchErrors(children: Children) -> impl IntoView {
    view! {
        <ErrorBoundary fallback=|errors| {
            view! {
                <SiteHeader
                    logo=icondata_io::IoRoseSharp
                    back_location="/"
                    name="Errors occurred"
                />

                <h1>"Uh oh! Something went wrong!"</h1>

                <p>"Errors: "</p>
                <ul class="flex flex-col gap-1">
                    {move || {
                        errors
                            .get()
                            .into_iter()
                            .map(|(_, e)| {
                                view! {
                                    <li class="bg-gray-200 rounded-lg m-2 p-1">{e.to_string()}</li>
                                }
                            })
                            .collect_view()
                    }}
                </ul>
            }
        }>{children()}</ErrorBoundary>
    }
}