UNPKG

jstps

Version:

A Transaction Processing System to be used for implementing Undo/Redo in a JavaScript applicaiton.

78 lines (67 loc) 2.56 kB
import Person from "../test/person/Person.js" import ChangeName_Transaction from "../test/person/ChangeName_Transaction.js" import IncrementAge_Transaction from "../test/person/IncrementAge_Transaction.js" import { jsTPS } from "../index.js"; import readline from "node:readline"; const IO = readline.createInterface({ input: process.stdin, output: process.stdout }); let tps = new jsTPS(); let person = new Person("No Name", 0); function displayGreeting() { console.log("*** jsTPS Demo - Demonstrates use of the jsTPS Framework ***"); } function displayMenu() { console.log('\n--- ' + person.toString() + ' ---'); console.log('C: Change Person Name'); console.log('I: Increment Person Age'); if (tps.hasTransactionToUndo()) console.log('U: Undo'); if (tps.hasTransactionToDo()) console.log('R: Redo'); console.log('X: Exit Demo'); IO.question('---', (selection) => { selection = selection.trim(); if ((selection == 'C') || (selection == 'c')) { IO.question('Enter Name: ', (numInput) => { let newName = numInput.trim(); let transaction = new ChangeName_Transaction(person, newName); tps.processTransaction(transaction); displayMenu(); }); } else if ((selection == 'I') || (selection == 'i')) { IO.question('Enter Age Increment: ', (userInput) => { let newAge = Number(userInput); if (isNaN(newAge)) IO.output.log(userInput + " is not a valid age increment"); else { let transaction = new IncrementAge_Transaction(person, newAge); tps.processTransaction(transaction); } displayMenu(); }); } else if (((selection == 'U') || (selection == 'u')) && tps.hasTransactionToUndo()) { tps.undoTransaction(); displayMenu(); } else if (((selection == 'R') || (selection == 'r')) && tps.hasTransactionToDo()) { tps.doTransaction(); displayMenu(); } else if ((selection == 'X') || (selection == 'x')) { console.log("GOODBYE"); IO.close(); } else { console.log('❌ INVALID SELECTION\n'); displayMenu(); } }); } displayGreeting(); displayMenu();