Merge pull request #8 from status-im/improve_menus

Improve menus
This commit is contained in:
Iuri Matias 2019-05-23 09:01:15 -04:00 committed by GitHub
commit 61b356079b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 114 additions and 96 deletions

View File

@ -8,33 +8,36 @@ const web3 = new Web3();
function doAction(actionText, action) { function doAction(actionText, action) {
console.dir(actionText) console.dir(actionText)
const confirmation = inquirer return new Promise(async(resolve, reject) => {
.prompt([ inquirer
{ .prompt([
type: 'confirm', {
name: 'action', type: 'confirm',
message: 'Execute?', name: 'action',
} message: 'Execute?',
]).then((answer) => { }
if (answer.action === false) return; ]).then((answer) => {
console.dir("executing..."); if (answer.action === false) return resolve();
try { console.dir("executing...");
action() try {
} catch (e) { action()
console.dir("== error") } catch (e) {
console.dir(e) console.dir("== error")
} console.dir(e)
}) }
resolve()
})
});
} }
class Actions { class Actions {
constructor(chain) { constructor(chain) {
this.chain = chain || "development"; this.chain = chain || "development";
} }
connect(url, cb) { connect(url, cb) {
console.dir("connecting to: " + url); console.dir("connecting to: " + url);
web3.setProvider(url); web3.setProvider(url);
setTimeout(async () => { setTimeout(async () => {
@ -44,8 +47,8 @@ class Actions {
web3.eth.defaultAccount = accounts[0] web3.eth.defaultAccount = accounts[0]
let contracts = new Contracts(this.chain, web3); let contracts = new Contracts(this.chain, web3);
contracts.loadContracts(); contracts.loadContracts();
this.contracts = contracts.contracts; this.contracts = contracts.contracts;
cb(); cb();
}, 1000); }, 1000);
@ -55,9 +58,9 @@ class Actions {
return web3; return web3;
} }
addProject(params) { async addProject(params) {
let text = `await LiquidPledging.methods.addProject(\"${params.name}\", \"${params.url}\", \"${params.account}\", ${params.parentProject}, ${params.commitTime}, \"${params.plugin}\").send({from: \"${web3.eth.defaultAccount}\", gas: 2000000})` let text = `await LiquidPledging.methods.addProject(\"${params.name}\", \"${params.url}\", \"${params.account}\", ${params.parentProject}, ${params.commitTime}, \"${params.plugin}\").send({from: \"${web3.eth.defaultAccount}\", gas: 2000000})`
doAction(text, async () => { return doAction(text, async () => {
const toSend = this.contracts.LiquidPledging.methods.addProject(params.name, params.url, params.account, params.parentProject, params.commitTime, params.plugin); const toSend = this.contracts.LiquidPledging.methods.addProject(params.name, params.url, params.account, params.parentProject, params.commitTime, params.plugin);
const receipt = await TrxUtils.executeAndWait(toSend, web3.eth.defaultAccount); const receipt = await TrxUtils.executeAndWait(toSend, web3.eth.defaultAccount);
console.dir("txHash: " + receipt.transactionHash); console.dir("txHash: " + receipt.transactionHash);
@ -67,18 +70,21 @@ class Actions {
} }
async listProjects() { async listProjects() {
try { return new Promise(async (resolve, reject) => {
const pledgeAdmins = await PledgeAdminUtils.getPledgeAdmins(this.contracts.LiquidPledging); try {
PledgeAdminUtils.printTable(pledgeAdmins.filter(x => x.adminType === PledgeAdminUtils.constants.PROJECT)); const pledgeAdmins = await PledgeAdminUtils.getPledgeAdmins(this.contracts.LiquidPledging);
} catch(error){ PledgeAdminUtils.printTable(pledgeAdmins.filter(x => x.adminType === PledgeAdminUtils.constants.PROJECT));
console.log(error); } catch(error){
console.log("Couldn't obtain the list of projects: ", error.message); console.log(error);
} console.log("Couldn't obtain the list of projects: ", error.message);
}
resolve();
});
} }
viewProject(params) { async viewProject(params) {
let text = `await LiquidPledging.methods.getPledgeAdmin(\"${params.id}\").call()` let text = `await LiquidPledging.methods.getPledgeAdmin(\"${params.id}\").call()`
doAction(text, async () => { return doAction(text, async () => {
try { try {
const pledgeAdmin = await this.contracts.LiquidPledging.methods.getPledgeAdmin(params.id).call(); const pledgeAdmin = await this.contracts.LiquidPledging.methods.getPledgeAdmin(params.id).call();
PledgeAdminUtils.printTable([pledgeAdmin].filter(x => x.adminType === PledgeAdminUtils.constants.PROJECT)); PledgeAdminUtils.printTable([pledgeAdmin].filter(x => x.adminType === PledgeAdminUtils.constants.PROJECT));
@ -89,18 +95,21 @@ class Actions {
} }
async listFunders() { async listFunders() {
try { return new Promise(async (resolve, reject) => {
const pledgeAdmins = await PledgeAdminUtils.getPledgeAdmins(this.contracts.LiquidPledging); try {
PledgeAdminUtils.printTable(pledgeAdmins.filter(x => x.adminType === PledgeAdminUtils.constants.FUNDER)); const pledgeAdmins = await PledgeAdminUtils.getPledgeAdmins(this.contracts.LiquidPledging);
} catch(error){ PledgeAdminUtils.printTable(pledgeAdmins.filter(x => x.adminType === PledgeAdminUtils.constants.FUNDER));
console.log(error); } catch(error){
console.log("Couldn't obtain the list of funders: ", error.message); console.log(error);
} console.log("Couldn't obtain the list of funders: ", error.message);
}
resolve();
});
} }
addGiver(params) { async addGiver(params) {
let text = `await LiquidPledging.methods.addGiver(\"${params.name}\", \"${params.url}\", ${params.commitTime}, \"${params.plugin}\").send({from: \"${web3.eth.defaultAccount}\", gas: 2000000})` let text = `await LiquidPledging.methods.addGiver(\"${params.name}\", \"${params.url}\", ${params.commitTime}, \"${params.plugin}\").send({from: \"${web3.eth.defaultAccount}\", gas: 2000000})`
doAction(text, async () => { return doAction(text, async () => {
const toSend = this.contracts.LiquidPledging.methods.addGiver(params.name, params.url, params.commitTime, params.plugin); const toSend = this.contracts.LiquidPledging.methods.addGiver(params.name, params.url, params.commitTime, params.plugin);
const receipt = await TrxUtils.executeAndWait(toSend, web3.eth.defaultAccount); const receipt = await TrxUtils.executeAndWait(toSend, web3.eth.defaultAccount);
console.dir("txHash: " + receipt.transactionHash); console.dir("txHash: " + receipt.transactionHash);
@ -109,27 +118,27 @@ class Actions {
}); });
} }
mintToken(params) { async mintToken(params) {
let text = `await StandardToken.methods.mint(\"${params.account}\", web3.utils.toWei(\"${params.amount}\", \"ether\")).send({gas: 2000000})` let text = `await StandardToken.methods.mint(\"${params.account}\", web3.utils.toWei(\"${params.amount}\", \"ether\")).send({gas: 2000000})`
doAction(text, async () => { return doAction(text, async () => {
const toSend = this.contracts.StandardToken.methods.mint(params.account, web3.utils.toWei(params.amount.toString(), "ether")); const toSend = this.contracts.StandardToken.methods.mint(params.account, web3.utils.toWei(params.amount.toString(), "ether"));
const receipt = await TrxUtils.executeAndWait(toSend, web3.eth.defaultAccount); const receipt = await TrxUtils.executeAndWait(toSend, web3.eth.defaultAccount);
console.dir("txHash: " + receipt.transactionHash); console.dir("txHash: " + receipt.transactionHash);
}); });
} }
approveToken(params) { async approveToken(params) {
let text = `await StandardToken.methods.approve(\"${this.contracts.LiquidPledging.options.address}\", web3.utils.toWei(\"${params.amount}\", \"ether\")).send({gas: 2000000})` let text = `await StandardToken.methods.approve(\"${this.contracts.LiquidPledging.options.address}\", web3.utils.toWei(\"${params.amount}\", \"ether\")).send({gas: 2000000})`
doAction(text, async () => { return doAction(text, async () => {
const toSend = this.contracts.StandardToken.methods.approve(this.contracts.LiquidPledging.options.address, web3.utils.toWei(params.amount.toString(), "ether")); const toSend = this.contracts.StandardToken.methods.approve(this.contracts.LiquidPledging.options.address, web3.utils.toWei(params.amount.toString(), "ether"));
const receipt = await TrxUtils.executeAndWait(toSend, web3.eth.defaultAccount); const receipt = await TrxUtils.executeAndWait(toSend, web3.eth.defaultAccount);
console.dir("txHash: " + receipt.transactionHash); console.dir("txHash: " + receipt.transactionHash);
}); });
} }
donate(params) { async donate(params) {
let text = `await LiquidPledging.methods.donate(${params.funderId}, ${params.projectId}, \"${this.contracts.LiquidPledging.options.address}\", web3.utils.toWei(\"${params.amount}\", \"ether\")).send({gas: 2000000});` let text = `await LiquidPledging.methods.donate(${params.funderId}, ${params.projectId}, \"${this.contracts.LiquidPledging.options.address}\", web3.utils.toWei(\"${params.amount}\", \"ether\")).send({gas: 2000000});`
doAction(text, async () => { return doAction(text, async () => {
const toSend = this.contracts.LiquidPledging.methods.donate(params.funderId, params.projectId, this.contracts.LiquidPledging.options.address, web3.utils.toWei(params.amount.toString(), "ether")); const toSend = this.contracts.LiquidPledging.methods.donate(params.funderId, params.projectId, this.contracts.LiquidPledging.options.address, web3.utils.toWei(params.amount.toString(), "ether"));
const receipt = await TrxUtils.executeAndWait(toSend, web3.eth.defaultAccount); const receipt = await TrxUtils.executeAndWait(toSend, web3.eth.defaultAccount);
console.dir("txHash: " + receipt.transactionHash); console.dir("txHash: " + receipt.transactionHash);

View File

@ -1,49 +1,58 @@
var inquirer = require('inquirer'); var inquirer = require('inquirer');
const menus = require('./menus.js'); const menus = require('./menus.js');
function mainMenu(actions) {
return new Promise(async (resolve, reject) => {
let action = (await menus.main()).action
let subAction
if (action === 'Projects') {
subAction = (await menus.projects()).action
if (subAction === 'List Projects') {
await actions.listProjects();
} if (subAction === 'Create Project') {
let params = (await menus.createProject(actions.web3().eth.defaultAccount))
await actions.addProject(params);
} if (subAction === 'View Project') {
let params = (await menus.viewProject())
await actions.viewProject(params);
} if (subAction === 'Donate to Project') {
let params = (await menus.donate())
await actions.donate(params);
}
} else if (action === 'Funders') {
subAction = (await menus.funders()).action
if (subAction === 'List Funders') {
await actions.listFunders();
} if (subAction === 'Create Funder') {
let params = (await menus.createFunder())
await actions.addGiver(params);
}
} else if (action === 'Tokens') {
subAction = (await menus.tokens()).action
if (subAction === 'Mint') {
let params = (await menus.mintToken())
await actions.mintToken(params);
} if (subAction === 'Approve') {
let params = (await menus.approveToken())
await actions.approveToken(params);
}
} else if (action === 'Exit') {
process.exit()
} else {
console.dir("unknown action: " + action)
}
resolve();
});
}
async function app(actions) { async function app(actions) {
console.dir("### Liquid Funding Console") console.dir("### Liquid Funding Console")
let action = (await menus.main()).action while (true) {
let subAction await mainMenu(actions);
if (action === 'Projects') {
subAction = (await menus.projects()).action
if (subAction === 'List Projects') {
actions.listProjects();
} if (subAction === 'Create Project') {
let params = (await menus.createProject(actions.web3().eth.defaultAccount))
actions.addProject(params);
} if (subAction === 'View Project') {
let params = (await menus.viewProject())
actions.viewProject(params);
} if (subAction === 'Donate to Project') {
let params = (await menus.donate())
actions.donate(params);
}
} else if (action === 'Funders') {
subAction = (await menus.funders()).action
if (subAction === 'List Funders') {
actions.listFunders();
} if (subAction === 'Create Funder') {
let params = (await menus.createFunder())
actions.addGiver(params);
}
} else if (action === 'Tokens') {
subAction = (await menus.tokens()).action
if (subAction === 'Mint') {
let params = (await menus.mintToken())
actions.mintToken(params);
} if (subAction === 'Approve') {
let params = (await menus.approveToken())
actions.approveToken(params);
}
} else if (action === 'Exit') {
process.exit()
} else {
console.dir("unknown action: " + action)
} }
} }

View File

@ -33,8 +33,8 @@ const menus = {
'Create Project', 'Create Project',
'View Project', 'View Project',
'Donate to Project', 'Donate to Project',
// new inquirer.Separator(), new inquirer.Separator(),
// 'Back', 'Back',
// new inquirer.Separator(), // new inquirer.Separator(),
// 'Exit' // 'Exit'
] ]
@ -52,8 +52,8 @@ const menus = {
choices: [ choices: [
'List Funders', 'List Funders',
'Create Funder', 'Create Funder',
// new inquirer.Separator(), new inquirer.Separator(),
// 'Back', 'Back',
// new inquirer.Separator(), // new inquirer.Separator(),
// 'Exit' // 'Exit'
] ]
@ -71,8 +71,8 @@ const menus = {
choices: [ choices: [
'Mint', 'Mint',
'Approve', 'Approve',
// new inquirer.Separator(), new inquirer.Separator(),
// 'Back', 'Back',
// new inquirer.Separator(), // new inquirer.Separator(),
// 'Exit' // 'Exit'
] ]
@ -89,8 +89,8 @@ const menus = {
message: 'Project> ' + id, message: 'Project> ' + id,
choices: [ choices: [
'Donate/Pledge', 'Donate/Pledge',
// new inquirer.Separator(), new inquirer.Separator(),
// 'Back', 'Back',
// new inquirer.Separator(), // new inquirer.Separator(),
// 'Exit' // 'Exit'
] ]