UI: Fixed exception in service view rendering
Some checks failed
checks-impure / test (pull_request) Successful in 25s
checks / test (pull_request) Failing after 1m26s

This commit is contained in:
2024-01-15 19:41:57 +01:00
parent 422a3f4da1
commit 4918f84e85
5 changed files with 73 additions and 88 deletions

View File

@@ -0,0 +1,42 @@
import React from "react";
class ErrorBoundary extends React.Component {
constructor(props: any) {
super(props);
// Define a state variable to track whether is an error or not
this.state = { hasError: false };
}
static getDerivedStateFromError(error: any) {
// Update state so the next render will show the fallback UI
return { hasError: true };
}
componentDidCatch(error: any, errorInfo: any) {
// You can use your own error logging service here
console.log({ error, errorInfo });
}
render() {
// Check if the error is thrown
if (this.state.hasError) {
// You can render any custom fallback UI
return (
<div>
<h2>Oops, there is an error!</h2>
<button
type="button"
onClick={() => this.setState({ hasError: false })}
>
Try again?
</button>
</div>
);
}
// Return children components in case of no error
return this.props.children;
}
}
export default ErrorBoundary;

View File

@@ -10,6 +10,7 @@ import { NoDataOverlay } from "@/components/noDataOverlay";
import { StyledTableCell, StyledTableRow } from "./style";
import { ICustomTable, CustomTableConfiguration } from "@/types";
import { Checkbox, Skeleton } from "@mui/material";
import ErrorBoundary from "@/components/error_boundary";
const CustomTable = ({ configuration, data, loading, tkey }: ICustomTable) => {
if (loading)
@@ -35,11 +36,15 @@ const CustomTable = ({ configuration, data, loading, tkey }: ICustomTable) => {
// cover use case if we want to render a component
if (render) renderedValue = render(value);
if (typeof renderedValue === "object" && render === undefined) {
console.warn("Missing render function for column " + cellKey);
}
return (
<StyledTableCell key={cellKey} align="left">
{renderedValue}
</StyledTableCell>
<ErrorBoundary>
<StyledTableCell key={cellKey} align="left">
{renderedValue}
</StyledTableCell>
</ErrorBoundary>
);
};

View File

@@ -54,19 +54,28 @@ export const ServiceTableConfig = [
{
key: "status",
label: "Status",
render: (value: any) => {
let renderedValue: any = "";
if (Array.isArray(value.data)) {
renderedValue = value.data.join(", ");
} else {
console.error("Status is not an array", value);
}
return renderedValue;
},
},
{
key: "other",
key: "action",
label: "Action",
render: (value: any) => {
let renderedValue: any = "";
console.log("value", value.data);
if (typeof value === "object")
renderedValue = (
<>
{value.action.map((actionType: string) => (
{value.data.map((actionType: any) => (
<>
<code>{actionType}</code>
<br />
<Button>{actionType.name}</Button>
</>
))}
</>

View File

@@ -1,77 +0,0 @@
import { Button } from "@mui/material";
export const Client2ConsumerTableConfig = [
{
key: "service_name",
label: "Service name",
},
{
key: "service_type",
label: "Service Type",
},
{
key: "endpoint_url",
label: "End Point",
render: () => {
return (
<Button disabled variant="outlined">
Consume
</Button>
);
},
},
// {
// key: "entity",
// label: "Entity",
// },
{
key: "entity_did",
label: "Entity DID",
},
// {
// key: "network",
// label: "Network",
// },
];
export const Client2ProducerTableConfig = [
{
key: "service_name",
label: "Service name",
},
{
key: "service_type",
label: "Service Type",
},
{
key: "endpoint_url",
label: "End Point",
},
{
key: "entity_did",
label: "Entity DID",
},
{
key: "status",
label: "Status",
},
{
key: "other",
label: "Action",
render: (value: any) => {
let renderedValue: any = "";
if (typeof value === "object")
renderedValue = (
<>
{value.action.map((actionType: string) => (
<>
<code>{actionType}</code>
<br />
</>
))}
</>
);
return renderedValue;
},
},
];