Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 26 additions & 1 deletion lib/react/GenericSolverDebugger.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ export const GenericSolverDebugger = ({
onSolverCompleted,
}: GenericSolverDebuggerProps) => {
const [renderCount, incRenderCount] = useReducer((x) => x + 1, 0)
const [solver] = useState<BaseSolver>(() => {
const [solver, setSolver] = useState<BaseSolver>(() => {
if (createSolver) {
return createSolver()
}
Expand Down Expand Up @@ -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 (
<div>
<GenericSolverToolbar
Expand All @@ -154,6 +178,7 @@ export const GenericSolverDebugger = ({
onDownloadVisualization={handleDownloadVisualization}
onSolverStarted={onSolverStarted}
onSolverCompleted={onSolverCompleted}
onSolverReset={handleSolverReset}
/>
{graphicsAreEmpty ? (
<div className="p-4 text-gray-500">No Graphics Yet</div>
Expand Down
26 changes: 19 additions & 7 deletions lib/react/GenericSolverToolbar.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ export interface GenericSolverToolbarProps {
onDownloadVisualization: () => void
onSolverStarted?: (solver: BaseSolver) => void
onSolverCompleted?: (solver: BaseSolver) => void
onSolverReset?: () => void
}

export const GenericSolverToolbar = ({
Expand All @@ -27,6 +28,7 @@ export const GenericSolverToolbar = ({
onDownloadVisualization,
onSolverStarted,
onSolverCompleted,
onSolverReset,
}: GenericSolverToolbarProps) => {
const [isAnimating, setIsAnimating] = useReducer((x) => !x, false)
const animationRef = useRef<NodeJS.Timeout | undefined>(undefined)
Expand Down Expand Up @@ -317,13 +319,23 @@ export const GenericSolverToolbar = ({
Step
</button>

<button
onClick={handleSolve}
disabled={solver.solved || solver.failed || isAnimating}
className="rounded bg-green-500 px-3 py-1 text-sm text-white hover:bg-green-600 disabled:bg-gray-300"
>
Solve
</button>
{solver.solved || solver.failed ? (
<button
onClick={onSolverReset}
disabled={!onSolverReset || isAnimating}
className="rounded bg-purple-500 px-3 py-1 text-sm text-white hover:bg-purple-600 disabled:bg-gray-300"
>
Reset
</button>
) : (
<button
onClick={handleSolve}
disabled={isAnimating}
className="rounded bg-green-500 px-3 py-1 text-sm text-white hover:bg-green-600 disabled:bg-gray-300"
>
Solve
</button>
)}

<button
onClick={handleAnimate}
Expand Down
Loading