Undo/Redo
All change history is preserved. Making versioning simple.
import React, { useState } from "react";
import { CanvasGrid, CellData } from "@rowsncolumns/spreadsheet";
import { produceWithPatches } from "immer";
import {
SheetData,
useSpreadsheetState,
} from "@rowsncolumns/spreadsheet-state";
const MySpreadsheet = () => {
const [sheetData, onChangeSheetData] = useState<SheetData<CellData>>({});
const { createHistory } = useSpreadsheetState({});
return (
<CanvasGrid
sheetId={1}
rowCount={100}
columnCount={100}
onChange={(sheetId, activeCell, value) => {
const saveHistory = createHistory();
// Update sheet data
onChangeSheetData?.((prevSheetData) => {
const [nextState, patches, inversePatches] = produceWithPatches(
prevSheetData,
(draft) => {
draft[sheetId][activeCell.rowIndex].values[
activeCell.columnIndex
] = {
userEnteredValue: value,
};
}
);
saveHistory({
sheetData: { patches, inversePatches },
});
return nextState;
});
}}
/>
);
};Last updated