mirror of
https://github.com/ANL-CEEESA/UnitCommitment.jl.git
synced 2025-12-06 08:18:51 -06:00
web: Add undo functionality
This commit is contained in:
@@ -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} />
|
||||||
|
|||||||
Reference in New Issue
Block a user