@paperbits/common
Version:
Paperbits common components.
40 lines (32 loc) • 1.44 kB
text/typescript
import * as ko from "knockout";
import { OfflineObjectStorage } from "../persistence";
import { ToolButton } from "../ui";
import { EventManager, Events } from "../events";
const defaultTooltip = `<h1>Redo</h1><p>Redo last undone action.</p><div class="subtle">(Ctrl+Y)</div>`;
export class RedoToolButton implements ToolButton {
public readonly iconClass: string = "paperbits-icon paperbits-redo-26";
public readonly title: string = "Redo";
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.canRedo());
const description = this.offlineObjectStorage.getNextStateDescription();
if (description) {
this.tooltip(`<h1>Redo</h1><p>Redo action: ${description}</p><div class="subtle">(Ctrl+Y)</div>`);
}
else {
this.tooltip(defaultTooltip);
}
}
public onActivate(): void {
this.eventManager.dispatchEvent(Events.Redo);
}
}