function UI() {
const undoLog: string[] = [];
+ function perform(forward: string, reverse: string) {
+ undoLog.push(reverse);
+ return log.recordAndApply(`${clock.now()} ${forward}`);
+ }
return {
addTask: function (description: string): Element {
const now = clock.now();
return <Element>log.recordAndApply(`${now} Create ${description}`);
},
addTag: function (createTimestamp: string, tag: string) {
- undoLog.push(`Untag ${createTimestamp} ${tag}`);
- return log.recordAndApply(`${clock.now()} Tag ${createTimestamp} ${tag}`);
+ return perform(`Tag ${createTimestamp} ${tag}`, `Untag ${createTimestamp} ${tag}`);
},
edit: function (createTimestamp: string, newDescription: string, oldDescription: string) {
- undoLog.push(`Edit ${createTimestamp} ${oldDescription}`);
- return log.recordAndApply(`${clock.now()} Edit ${createTimestamp} ${newDescription}`);
+ return perform(`Edit ${createTimestamp} ${newDescription}`, `Edit ${createTimestamp} ${oldDescription}`);
},
removeTag: function (createTimestamp: string, tag: string) {
- undoLog.push(`Tag ${createTimestamp} ${tag}`);
- return log.recordAndApply(`${clock.now()} Untag ${createTimestamp} ${tag}`);
+ return perform(`Untag ${createTimestamp} ${tag}`, `Tag ${createTimestamp} ${tag}`);
},
setPriority: function (createTimestamp: string, newPriority: number, oldPriority: number) {
- undoLog.push(`Priority ${createTimestamp} ${oldPriority}`);
- return log.recordAndApply(`${clock.now()} Priority ${createTimestamp} ${newPriority}`);
+ return perform(`Priority ${createTimestamp} ${newPriority}`, `Priority ${createTimestamp} ${oldPriority}`);
},
setState: function (createTimestamp: string, newState: string, oldState: string) {
- undoLog.push(`State ${createTimestamp} ${oldState}`);
- return log.recordAndApply(`${clock.now()} State ${createTimestamp} ${newState}`);
+ return perform(`State ${createTimestamp} ${newState}`, `State ${createTimestamp} ${oldState}`);
},
undo: function () {
if (undoLog.length > 0) {