From b6a32726fd0b534fd939c59ca67ddeba6cf7523f Mon Sep 17 00:00:00 2001 From: Severin Ibarluzea Date: Thu, 9 Apr 2026 19:37:04 -0700 Subject: [PATCH] Add solver reset control after completion --- lib/react/GenericSolverDebugger.tsx | 27 ++++++++++++++++++++++++++- lib/react/GenericSolverToolbar.tsx | 26 +++++++++++++++++++------- 2 files changed, 45 insertions(+), 8 deletions(-) diff --git a/lib/react/GenericSolverDebugger.tsx b/lib/react/GenericSolverDebugger.tsx index 4e46d8c..232e3b7 100644 --- a/lib/react/GenericSolverDebugger.tsx +++ b/lib/react/GenericSolverDebugger.tsx @@ -48,7 +48,7 @@ export const GenericSolverDebugger = ({ onSolverCompleted, }: GenericSolverDebuggerProps) => { const [renderCount, incRenderCount] = useReducer((x) => x + 1, 0) - const [solver] = useState(() => { + const [solver, setSolver] = useState(() => { if (createSolver) { return createSolver() } @@ -142,6 +142,30 @@ export const GenericSolverDebugger = ({ } } + const handleSolverReset = () => { + if (createSolver) { + setSolver(createSolver()) + incRenderCount() + return + } + + try { + const constructorParams = solver.getConstructorParams() + const constructorArgs = Array.isArray(constructorParams) + ? constructorParams + : [] + const nextSolver = new ( + solver.constructor as new ( + ...args: any[] + ) => BaseSolver + )(...constructorArgs) + setSolver(nextSolver) + incRenderCount() + } catch (error) { + console.warn(`Could not reset solver ${solver.getSolverName()}:`, error) + } + } + return (
{graphicsAreEmpty ? (
No Graphics Yet
diff --git a/lib/react/GenericSolverToolbar.tsx b/lib/react/GenericSolverToolbar.tsx index 018a350..5838b46 100644 --- a/lib/react/GenericSolverToolbar.tsx +++ b/lib/react/GenericSolverToolbar.tsx @@ -15,6 +15,7 @@ export interface GenericSolverToolbarProps { onDownloadVisualization: () => void onSolverStarted?: (solver: BaseSolver) => void onSolverCompleted?: (solver: BaseSolver) => void + onSolverReset?: () => void } export const GenericSolverToolbar = ({ @@ -27,6 +28,7 @@ export const GenericSolverToolbar = ({ onDownloadVisualization, onSolverStarted, onSolverCompleted, + onSolverReset, }: GenericSolverToolbarProps) => { const [isAnimating, setIsAnimating] = useReducer((x) => !x, false) const animationRef = useRef(undefined) @@ -317,13 +319,23 @@ export const GenericSolverToolbar = ({ Step - + {solver.solved || solver.failed ? ( + + ) : ( + + )}