Skip to content
Snippets Groups Projects
Commit 6533cd44 authored by Niklas Schrötler's avatar Niklas Schrötler
Browse files

App: Added error handling for panels and backgroundImage functionality

parent 2e2c327a
No related branches found
No related tags found
No related merge requests found
import React from 'react'; import React from 'react';
import './App.css'; import './App.css';
import ScreenWrapper from "./meta/ScreenWrapper"; import ScreenWrapper from "./meta/ScreenWrapper";
import PanelWrapper from "./meta/PanelWrapper";
import PanelTitle from "./meta/PanelTitle";
import PanelContent from "./meta/PanelContent";
import FahrplanPanel from "./panels/Fahrplan/FahrplanPanel";
import LayoutElement from "./layout/LayoutElement";
import useLayout from "./hooks/useLayout"; import useLayout from "./hooks/useLayout";
import {PanelRenderers} from "./panels/_Panels"; import {PanelRenderers} from "./panels/_Panels";
import LayoutElement from "./layout/LayoutElement";
import ErrorPanel from "./panels/Error";
import {ErrorBoundary} from "react-error-boundary";
function App() { function App() {
const layout = useLayout(); const layout = useLayout();
...@@ -22,14 +20,37 @@ function App() { ...@@ -22,14 +20,37 @@ function App() {
return ( return (
<div className={"overflow-hidden w-screen h-screen bg-zinc-950 text-white"} style={{fontFamily: "Inter"}}> <div className={"overflow-hidden w-screen h-screen bg-zinc-950 text-white"} style={{fontFamily: "Inter"}}>
<ScreenWrapper> <ScreenWrapper backgroundImage={layout.background}>
{ {
layout.panels.map(panel => { layout.panels.map(panel => {
const Renderer = PanelRenderers[panel.type]; try {
const Renderer = PanelRenderers[panel.type];
if(!Renderer) {
console.error(`Rendering a panel of type ${panel.type} at (${panel.position.x}, ${panel.position.y}) failed. Config:`, panel.config)
return (
<LayoutElement config={panel}>
<ErrorPanel
message={`Unable to find a panel definition for type "${panel.type}"`}
/>
</LayoutElement>
)
}
return (
<LayoutElement config={panel}>
<ErrorBoundary fallback={
<ErrorPanel
message={`Panel of type ${panel.type} failed to render. Please check the config you provided.`}
/>
}>
<Renderer definition={panel.config} />
</ErrorBoundary>
</LayoutElement>
)
} catch (e) {
return ( }
<Renderer definition={panel.config} />
)
}) })
} }
</ScreenWrapper> </ScreenWrapper>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment