DHTMLX Kanban. Undo/redo with backend example
Undo and redo let users reverse accidental changes without fear of breaking the board. When combined with a backend, undo/redo operations also sync with the server, ensuring the database stays consistent with what users see.
Live example
const { Kanban, Toolbar, RestDataProvider, defaultEditorShape, defaultCardShape } = kanban;
// Check Node.js backend repository here - https://github.com/web-widgets/kanban-node
// Check Go backend repository here - https://github.com/web-widgets/kanban-go
const url = "https://docs.dhtmlx.com/kanban-backend";
const restProvider = new RestDataProvider(url);
const cardShape = {
...defaultCardShape,
label: true,
description: true,
progress: true,
start_date: true,
end_date: true,
priority: true,
color: true,
cover: true,
};
Promise.all([
restProvider.getCards(),
restProvider.getColumns(),
restProvider.getRows(),
]).then(([cards, columns, rows]) => {
const board = new Kanban("#root", {
cards,
columns,
rows,
rowKey: "row",
cardShape,
});
board.api.setNext(restProvider);
new Toolbar("#toolbar", { api: board.api, items:["undo", "redo", "spacer", "addColumn", "addRow"]});
});<!-- component containers -->
<div id="toolbar"></div>
<div id="root" style="height: calc(100% - 56px);"></div>
<!-- dataset -->
<script src="https://snippet.dhtmlx.com/codebase/data/kanban/01/dataset.js"></script>The code adds "undo" and "redo" to the Toolbar items array alongside the standard buttons. The Kanban tracks an internal history of operations, and the toolbar buttons trigger undo/redo actions that both update the UI and send the corresponding reverse operations to the backend via RestDataProvider. No additional code is needed beyond specifying the toolbar items.
Solution overview
- Set up backend integration with
RestDataProviderandboard.api.setNext(restProvider) - Add
"undo"and"redo"to the Toolbaritemsarray:items: ["undo", "redo", "spacer", "addColumn", "addRow"] - Undo/redo operations are automatically synced with the backend
Key points
- Built-in toolbar items: Just add
"undo"and"redo"strings to the toolbar items array. No custom handler code needed - Backend sync is automatic: When connected via
setNext, undo/redo operations are sent to the backend as reverse mutations - History is session-scoped: The undo history resets on page reload. It's not persisted to the backend
- Works with all operations: Card add/update/delete/move, column changes, and row changes are all undoable
API reference
- Toolbar items: Toolbar configuration including undo/redo buttons
- RestDataProvider: REST client for backend communication