diff --git a/optuna_dashboard/ts/components/GraphContour.tsx b/optuna_dashboard/ts/components/GraphContour.tsx
index c0c296de..f2e64a91 100644
--- a/optuna_dashboard/ts/components/GraphContour.tsx
+++ b/optuna_dashboard/ts/components/GraphContour.tsx
@@ -15,8 +15,9 @@ import blue from "@mui/material/colors/blue"
import { plotlyDarkTemplate } from "./PlotlyDarkMode"
import { useMergedUnionSearchSpace } from "../searchSpace"
import { getAxisInfo } from "../graphUtil"
-import { getPlotAPI, PlotType } from "../apiClient"
+import { PlotType } from "../apiClient"
import { useBackendRender } from "../state"
+import { usePlot } from "../hooks/usePlot"
const plotDomId = "graph-contour"
@@ -36,18 +37,23 @@ const ContourBackend: FC<{
const studyId = study?.id
const numCompletedTrials =
study?.trials.filter((t) => t.state === "Complete").length || 0
+ const { data, layout, error } = usePlot({
+ numCompletedTrials,
+ studyId,
+ plotType: PlotType.Contour,
+ })
+
useEffect(() => {
- if (studyId === undefined) {
- return
+ if (data && layout) {
+ plotly.react(plotDomId, data, layout)
}
- getPlotAPI(studyId, PlotType.Contour)
- .then(({ data, layout }) => {
- plotly.react(plotDomId, data, layout)
- })
- .catch((err) => {
- console.error(err)
- })
- }, [studyId, numCompletedTrials])
+ }, [data, layout])
+ useEffect(() => {
+ if (error) {
+ console.error(error)
+ }
+ }, [error])
+
return
}
diff --git a/optuna_dashboard/ts/components/GraphParallelCoordinate.tsx b/optuna_dashboard/ts/components/GraphParallelCoordinate.tsx
index 22d4852a..889a5097 100644
--- a/optuna_dashboard/ts/components/GraphParallelCoordinate.tsx
+++ b/optuna_dashboard/ts/components/GraphParallelCoordinate.tsx
@@ -17,8 +17,9 @@ import {
useParamTargets,
} from "../trialFilter"
import { useMergedUnionSearchSpace } from "../searchSpace"
-import { getPlotAPI, PlotType } from "../apiClient"
+import { PlotType } from "../apiClient"
import { useBackendRender } from "../state"
+import { usePlot } from "../hooks/usePlot"
const plotDomId = "graph-parallel-coordinate"
@@ -102,18 +103,24 @@ const GraphParallelCoordinateBackend: FC<{
const studyId = study?.id
const numCompletedTrials =
study?.trials.filter((t) => t.state === "Complete").length || 0
+
+ const { data, layout, error } = usePlot({
+ numCompletedTrials,
+ studyId,
+ plotType: PlotType.ParallelCoordinate,
+ })
+
useEffect(() => {
- if (studyId === undefined) {
- return
+ if (data && layout) {
+ plotly.react(plotDomId, data, layout)
}
- getPlotAPI(studyId, PlotType.ParallelCoordinate)
- .then(({ data, layout }) => {
- plotly.react(plotDomId, data, layout)
- })
- .catch((err) => {
- console.error(err)
- })
- }, [studyId, numCompletedTrials])
+ }, [data, layout])
+ useEffect(() => {
+ if (error) {
+ console.error(error)
+ }
+ }, [error])
+
return
}
diff --git a/optuna_dashboard/ts/components/GraphSlice.tsx b/optuna_dashboard/ts/components/GraphSlice.tsx
index 6abaca50..e59a369d 100644
--- a/optuna_dashboard/ts/components/GraphSlice.tsx
+++ b/optuna_dashboard/ts/components/GraphSlice.tsx
@@ -20,8 +20,9 @@ import {
useParamTargets,
} from "../trialFilter"
import { useMergedUnionSearchSpace } from "../searchSpace"
-import { getPlotAPI, PlotType } from "../apiClient"
+import { PlotType } from "../apiClient"
import { useBackendRender } from "../state"
+import { usePlot } from "../hooks/usePlot"
const plotDomId = "graph-slice"
@@ -48,18 +49,24 @@ const GraphSliceBackend: FC<{
const studyId = study?.id
const numCompletedTrials =
study?.trials.filter((t) => t.state === "Complete").length || 0
+
+ const { data, layout, error } = usePlot({
+ numCompletedTrials,
+ studyId,
+ plotType: PlotType.Slice,
+ })
+
useEffect(() => {
- if (studyId === undefined) {
- return
+ if (data && layout) {
+ plotly.react(plotDomId, data, layout)
}
- getPlotAPI(studyId, PlotType.Slice)
- .then(({ data, layout }) => {
- plotly.react(plotDomId, data, layout)
- })
- .catch((err) => {
- console.error(err)
- })
- }, [studyId, numCompletedTrials])
+ }, [data, layout])
+ useEffect(() => {
+ if (error) {
+ console.error(error)
+ }
+ }, [error])
+
return
}
diff --git a/optuna_dashboard/ts/hooks/usePlot.ts b/optuna_dashboard/ts/hooks/usePlot.ts
index 3c3036ad..594fce3f 100644
--- a/optuna_dashboard/ts/hooks/usePlot.ts
+++ b/optuna_dashboard/ts/hooks/usePlot.ts
@@ -17,7 +17,7 @@ export const usePlot = ({
AxiosError
>({
enabled: studyId !== undefined,
- queryKey: ["plot", studyId, numCompletedTrials],
+ queryKey: ["plot", studyId, numCompletedTrials, plotType],
queryFn: () => {
if (studyId === undefined) {
return Promise.reject(new Error("Invalid studyId"))