@@ -42,20 +42,34 @@ struct UpdateCategoryRequest {
4242 enabled : Option < bool > ,
4343}
4444
45- async fn fetch_categories ( ) -> Option < Vec < CategoryDto > > {
46- let resp = Request :: get ( "/api/categories" ) . send ( ) . await . ok ( ) ?;
45+ async fn fetch_categories ( ) -> Result < Vec < CategoryDto > , String > {
46+ let resp = Request :: get ( "/api/categories" )
47+ . send ( )
48+ . await
49+ . map_err ( |e| e. to_string ( ) ) ?;
4750 if resp. status ( ) != 200 {
48- return None ;
51+ let status = resp. status ( ) ;
52+ let body = resp. text ( ) . await . unwrap_or_default ( ) ;
53+ return Err ( format ! ( "HTTP {}: {}" , status, body) ) ;
4954 }
50- resp. json :: < Vec < CategoryDto > > ( ) . await . ok ( )
55+ resp. json :: < Vec < CategoryDto > > ( )
56+ . await
57+ . map_err ( |e| e. to_string ( ) )
5158}
5259
53- async fn fetch_settings ( ) -> Option < CategorySettingsDto > {
54- let resp = Request :: get ( "/api/categories/settings" ) . send ( ) . await . ok ( ) ?;
60+ async fn fetch_settings ( ) -> Result < CategorySettingsDto , String > {
61+ let resp = Request :: get ( "/api/categories/settings" )
62+ . send ( )
63+ . await
64+ . map_err ( |e| e. to_string ( ) ) ?;
5565 if resp. status ( ) != 200 {
56- return None ;
66+ let status = resp. status ( ) ;
67+ let body = resp. text ( ) . await . unwrap_or_default ( ) ;
68+ return Err ( format ! ( "HTTP {}: {}" , status, body) ) ;
5769 }
58- resp. json :: < CategorySettingsDto > ( ) . await . ok ( )
70+ resp. json :: < CategorySettingsDto > ( )
71+ . await
72+ . map_err ( |e| e. to_string ( ) )
5973}
6074
6175#[ function_component( CategoriesPage ) ]
@@ -102,22 +116,28 @@ pub fn categories_page() -> Html {
102116 let settings = settings. clone ( ) ;
103117 let loading = loading. clone ( ) ;
104118 let error = error. clone ( ) ;
119+ let i18n = i18n. clone ( ) ;
105120 Callback :: from ( move |_| {
106121 let categories = categories. clone ( ) ;
107122 let settings = settings. clone ( ) ;
108123 let loading = loading. clone ( ) ;
109124 let error = error. clone ( ) ;
125+ let i18n = i18n. clone ( ) ;
110126 spawn_local ( async move {
111127 loading. set ( true ) ;
112128 let cats = fetch_categories ( ) . await ;
113129 let s = fetch_settings ( ) . await ;
114130 match ( cats, s) {
115- ( Some ( c) , Some ( s) ) => {
131+ ( Ok ( c) , Ok ( s) ) => {
116132 categories. set ( c) ;
117133 settings. set ( Some ( s) ) ;
118134 error. set ( None ) ;
119135 }
120- _ => error. set ( Some ( "Failed to load" . to_string ( ) ) ) ,
136+ ( Err ( e) , _) | ( _, Err ( e) ) => error. set ( Some ( format ! (
137+ "{}: {}" ,
138+ i18n. t( "panel.categories.error_load" ) ,
139+ e
140+ ) ) ) ,
121141 }
122142 loading. set ( false ) ;
123143 } ) ;
0 commit comments