Añade ComponentError con HTML alternativo

`prepare_component()` ahora devuelve `Result<Markup, ComponentError>` en
lugar de `Markup`, para que los componentes señalen fallos durante el
renderizado de forma explícita.

`ComponentError` encapsula un mensaje de error y un marcado HTML
alternativo opcional (`fallback`). Si se produce un error, el ciclo de
renderizado registra la traza y muestra el `fallback` en lugar del
componente fallido, sin interrumpir el resto de la página.

Lo mismo aplica a los errores devueltos por la acción `PrepareRender` de
los temas, que siguen el mismo mecanismo.
This commit is contained in:
Manuel Cillero 2026-03-21 13:15:39 +01:00
parent a0b14aec36
commit 34aeeab2d7
26 changed files with 232 additions and 100 deletions

View file

@ -33,10 +33,10 @@ impl Component for Container {
self.alter_classes(ClassesOp::Prepend, self.container_width().to_class());
}
fn prepare_component(&self, cx: &mut Context) -> Markup {
fn prepare_component(&self, cx: &mut Context) -> Result<Markup, ComponentError> {
let output = self.children().render(cx);
if output.is_empty() {
return html! {};
return Ok(html! {});
}
let style = match self.container_width() {
container::Width::FluidMax(w) if w.is_measurable() => {
@ -44,7 +44,7 @@ impl Component for Container {
}
_ => None,
};
match self.container_kind() {
Ok(match self.container_kind() {
container::Kind::Default => html! {
div id=[self.id()] class=[self.classes().get()] style=[style] {
(output)
@ -75,7 +75,7 @@ impl Component for Container {
(output)
}
},
}
})
}
}