@paperbits/common
Version:
Paperbits common components.
41 lines (32 loc) • 1.42 kB
text/typescript
import * as ko from "knockout";
import { OfflineObjectStorage } from "../persistence";
import { ToolButton } from "../ui";
import { EventManager } from "../events";
const defaultTooltip = `<h1>Undo</h1><p>Undo last action.</p><div class="subtle">(Ctrl+Z)</div>`;
export class UndoToolButton implements ToolButton {
public readonly iconClass: string = "paperbits-icon paperbits-undo-25";
public readonly title: string = "Undo";
public readonly tooltip: ko.Observable<string>;
public readonly disabled: ko.Observable<boolean>;
constructor(
private readonly eventManager: EventManager,
private readonly offlineObjectStorage: OfflineObjectStorage
) {
this.disabled = ko.observable(true);
this.tooltip = ko.observable(defaultTooltip);
this.eventManager.addEventListener("onDataChange", this.onDataChange.bind(this));
}
private onDataChange(): void {
this.disabled(!this.offlineObjectStorage.canUndo());
const description = this.offlineObjectStorage.getPrevStateDescription();
if (description) {
this.tooltip(`<h1>Undo</h1><p>Undo action: ${description}</p><div class="subtle">(Ctrl+Z)</div>`);
}
else {
this.tooltip(defaultTooltip);
}
}
public onActivate(): void {
this.eventManager.dispatchEvent("onUndo");
}
}