Skip to main content

Memento Usage

MementoBaseCaretaker

Class Definition

class MementoBaseCaretaker<
TMemento,
Originator extends MementoBaseOriginator<TMemento>
> {
constructor(
originator: Originator,
options?: MementoAbstractCaretakerProps<TMemento, Originator>
);

saveState(): void;
undo(): void;
redo(): void;

get history(): ReactiveArray<TMemento>;
get historyPointer(): ReactiveValue<number>;
get canUndo(): ComputedValue<boolean>;
get canRedo(): ComputedValue<boolean>;
}

Usage Example

import { MementoBaseCaretaker } from '@xndrjs/memento';
import { ReactiveValue } from '@xndrjs/core';

class TodoListOriginator implements MementoBaseOriginator<Todo[]> {
private todos = new ReactiveValue<Todo[]>([]);

getMemento(): Todo[] {
return this.todos.get();
}

setMemento(memento: Todo[]): void {
this.todos.set(memento);
}

get todosPort() {
return this.todos;
}
}

const originator = new TodoListOriginator();
const caretaker = new MementoBaseCaretaker(originator);

// Save initial state
caretaker.saveState();

// Make changes
originator.todosPort.set([...originator.todosPort.get(), { id: 1, text: 'Todo 1' }]);
caretaker.saveState();

// Undo
caretaker.undo(); // Restores previous state

// Redo
caretaker.redo(); // Restores next state

// Check if undo/redo is possible
const canUndo = caretaker.canUndo.get(); // boolean
const canRedo = caretaker.canRedo.get(); // boolean