Skip to content

Commit 4eb4dc2

Browse files
feat: add Error Boundary to Visualization (#680)
1 parent ed6c72a commit 4eb4dc2

File tree

6 files changed

+43
-14
lines changed

6 files changed

+43
-14
lines changed

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
"prismjs": "^1.29.0",
4141
"react": "^18.3.1",
4242
"react-dom": "^18.3.1",
43+
"react-error-boundary": "^4.0.13",
4344
"react-hook-form": "^7.51.5",
4445
"react-joyride": "^2.8.2",
4546
"react-markdown": "^9.0.1",

pnpm-lock.yaml

Lines changed: 13 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/app/runs/[id]/_Tabs/Configuration/index.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,13 +38,13 @@ export function ConfigurationTab() {
3838
)}
3939
<CodeCollapsible runId={runId} />
4040
<EnvironmentCollapsible run={data} />
41-
<NestedCollapsible isInitialOpen title="Extra" data={data.metadata?.config.extra} />
4241
<NestedCollapsible
4342
isInitialOpen
4443
title="Resources"
4544
// eslint-disable-next-line @typescript-eslint/no-explicit-any
4645
data={(data.metadata?.config.settings as { [key: string]: any })?.resources || {}}
4746
/>
47+
<NestedCollapsible isInitialOpen title="Extra" data={data.metadata?.config.extra} />
4848
</div>
4949
);
5050
}

src/app/runs/[id]/page.tsx

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import Expand from "@/assets/icons/expand.svg?react";
22
import { useServerInfo } from "@/data/server/info-query";
33
import { checkIsLocalServer } from "@/lib/server";
4-
import { Button } from "@zenml-io/react-component-library";
4+
import { Button, ScrollArea } from "@zenml-io/react-component-library";
55
import { Dispatch, SetStateAction, useState } from "react";
66
import { DAG } from "./Dag";
77
import { RunsDetailHeader } from "./Header";
@@ -28,13 +28,13 @@ export default function RunDetailPage() {
2828
<div
2929
aria-hidden={!isPanelOpen}
3030
className={`h-full min-w-0 overflow-x-hidden text-ellipsis whitespace-nowrap bg-theme-surface-secondary transition-all duration-500 ${
31-
isPanelOpen
32-
? "w-1/2 border-l border-theme-border-moderate"
33-
: "w-0 overflow-x-hidden border-transparent"
31+
isPanelOpen ? "w-1/2 border-l border-theme-border-moderate" : "w-0 border-transparent"
3432
}`}
3533
>
36-
<TabsHeader setIsPanelOpen={setIsPanelOpen} />
37-
<RunsDetailTabs />
34+
<ScrollArea viewportClassName="[&>*]:!block">
35+
<TabsHeader setIsPanelOpen={setIsPanelOpen} />
36+
<RunsDetailTabs />
37+
</ScrollArea>
3838
</div>
3939
</div>
4040
</div>

src/components/artifacts/artifact-node-sheet/SheetContent.tsx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,11 @@ import {
1313
TabsList,
1414
TabsTrigger
1515
} from "@zenml-io/react-component-library";
16+
import { ErrorBoundary } from "react-error-boundary";
1617
import { ArtifactIcon } from "../../ArtifactIcon";
1718
import { ArtifactDetailTab } from "./DetailsTab";
1819
import { ArtifactMetadataTab } from "./MetadataTab";
19-
import { VisualizationTab } from "./VisualizationTab";
20+
import { VisualizationErrorFallback, VisualizationTab } from "./VisualizationTab";
2021

2122
type Props = {
2223
artifactVersionId: string;
@@ -85,7 +86,9 @@ export function ArtifactSheetContent({ artifactVersionId }: Props) {
8586
<ArtifactMetadataTab artifactVersionId={artifactVersionId} />
8687
</TabsContent>
8788
<TabsContent className="m-0 mt-5 border-0 bg-transparent p-0" value="visualization">
88-
<VisualizationTab artifactVersionId={artifactVersionId} />
89+
<ErrorBoundary FallbackComponent={VisualizationErrorFallback}>
90+
<VisualizationTab artifactVersionId={artifactVersionId} />
91+
</ErrorBoundary>
8992
</TabsContent>
9093
</Tabs>
9194
</VisualizationConfirmProvider>

src/components/artifacts/artifact-node-sheet/VisualizationTab.tsx

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
// import { Visualization } from "@/components/tenants-dashboard/artifacts/Visualization";
2-
import { Button, Skeleton } from "@zenml-io/react-component-library";
3-
import { useArtifactVersion } from "@/data/artifact-versions/artifact-version-detail-query";
2+
import { default as Barchart, default as BarChart } from "@/assets/icons/bar-chart.svg?react";
43
import { EmptyState } from "@/components/EmptyState";
5-
import BarChart from "@/assets/icons/bar-chart.svg?react";
6-
import { Visualization } from "../Visualization";
4+
import { useArtifactVersion } from "@/data/artifact-versions/artifact-version-detail-query";
5+
import { FIVEMEGABYTES } from "@/lib/constants";
76
import { MetadataMap } from "@/types/common";
7+
import { Button, Skeleton } from "@zenml-io/react-component-library";
88
import { useState } from "react";
9-
import { FIVEMEGABYTES } from "@/lib/constants";
9+
import { FallbackProps } from "react-error-boundary";
10+
import { Visualization } from "../Visualization";
1011

1112
type Props = {
1213
artifactVersionId: string;
@@ -65,3 +66,14 @@ export function VisualizationTab({ artifactVersionId }: Props) {
6566
</div>
6667
);
6768
}
69+
70+
export function VisualizationErrorFallback({ error }: FallbackProps) {
71+
return (
72+
<EmptyState icon={<Barchart className="h-[120px] w-[120px] fill-neutral-300" />}>
73+
<div className="text-center">
74+
<p className="mb-2 text-display-xs font-semibold">Something went wrong</p>
75+
<p className="text-lg text-theme-text-secondary">{error.message}</p>
76+
</div>
77+
</EmptyState>
78+
);
79+
}

0 commit comments

Comments
 (0)