web: Add undo functionality

web
Alinson S. Xavier 3 months ago
parent 9d48112bb9
commit be500b920e

@ -29,11 +29,22 @@ const CaseBuilder = () => {
// return savedScenario ? JSON.parse(savedScenario) : TEST_SCENARIO; // return savedScenario ? JSON.parse(savedScenario) : TEST_SCENARIO;
return TEST_SCENARIO; return TEST_SCENARIO;
}); });
const [undoStack, setUndoStack] = useState<UnitCommitmentScenario[]>([]);
const [toastMessage, setToastMessage] = useState<string>(""); const [toastMessage, setToastMessage] = useState<string>("");
const setAndSaveScenario = (scenario: UnitCommitmentScenario) => { const setAndSaveScenario = (
setScenario(scenario); newScenario: UnitCommitmentScenario,
localStorage.setItem("scenario", JSON.stringify(scenario)); updateUndoStack = true,
) => {
if (updateUndoStack) {
const newUndoStack = [...undoStack, scenario];
if (newUndoStack.length > 25) {
newUndoStack.splice(0, newUndoStack.length - 25);
}
setUndoStack(newUndoStack);
}
setScenario(newScenario);
localStorage.setItem("scenario", JSON.stringify(newScenario));
}; };
const onClear = () => { const onClear = () => {
@ -68,9 +79,20 @@ const CaseBuilder = () => {
setToastMessage("Data loaded successfully"); setToastMessage("Data loaded successfully");
}; };
const onUndo = () => {
if (undoStack.length === 0) return;
setUndoStack(undoStack.slice(0, -1));
setAndSaveScenario(undoStack[undoStack.length - 1]!, false);
};
return ( return (
<div> <div>
<Header onClear={onClear} onSave={onSave} onLoad={onLoad} /> <Header
onClear={onClear}
onSave={onSave}
onLoad={onLoad}
onUndo={onUndo}
/>
<div className="content"> <div className="content">
<Parameters <Parameters
scenario={scenario} scenario={scenario}

@ -13,6 +13,7 @@ import FileUploadElement from "../Common/Buttons/FileUploadElement";
interface HeaderProps { interface HeaderProps {
onClear: () => void; onClear: () => void;
onSave: () => void; onSave: () => void;
onUndo: () => void;
onLoad: (data: UnitCommitmentScenario) => void; onLoad: (data: UnitCommitmentScenario) => void;
} }
@ -32,6 +33,7 @@ function Header(props: HeaderProps) {
<h1>UnitCommitment.jl</h1> <h1>UnitCommitment.jl</h1>
<h2>Case Builder</h2> <h2>Case Builder</h2>
<div className={styles.buttonContainer}> <div className={styles.buttonContainer}>
<SiteHeaderButton title="Undo" onClick={props.onUndo} />
<SiteHeaderButton title="Clear" onClick={props.onClear} /> <SiteHeaderButton title="Clear" onClick={props.onClear} />
<SiteHeaderButton title="Load" onClick={onLoad} /> <SiteHeaderButton title="Load" onClick={onLoad} />
<SiteHeaderButton title="Save" onClick={props.onSave} /> <SiteHeaderButton title="Save" onClick={props.onSave} />

Loading…
Cancel
Save