+ address list for recipient

+ filter table helper
* copy address simply by clicking on it
This commit is contained in:
Taegus
2018-12-17 17:42:19 +01:00
parent 6013c6f2d7
commit 1468eba97c
11 changed files with 153 additions and 65 deletions

View File

@@ -124,6 +124,12 @@ body.pg-loaded > .inner {
height: 150px;
}
#dlgAddressListBody {
margin: 0px;
padding: 20px;
background-color: #333;
}
.btn-dialog-confirm {
position: absolute;
bottom: 10px;
@@ -316,6 +322,18 @@ div.noWalletsWrapper {
justify-content: center;
}
.btnCopyWalletAddress {
margin-right: 10px;
.textAddress {
cursor: pointer;
}
.addressInputWrapper {
display: flex;
}
#addressToolbar {
display: flex;
}
#addressListFilter {
color: #aaa;
}

View File

@@ -0,0 +1,28 @@
<div id="addressToolbar">
<input id="addressListFilter" placeholder="enter search text" type="text">
<button type="button" class="btn btn-etho" id="btnClearSearchField"><i class="far fa-trash-alt"></i></button>
</div>
<div id="addressList" class="{{#if addressData.length}}walletsWrapper{{else}}noWalletsWrapper{{/if}}">
{{#if addressData.length}}
<table class="bordered" id="addressTable">
<thead>
<tr>
<th scope="col"></th>
<th scope="col">Name</th>
<th scope="col">Address</th>
</tr>
</thead>
<tbody>
{{#addressData}}
<tr>
<th scope="row" class="colEdit"><button type="button" class="btn btn-etho btnSelectToAddress" data-wallet="{{address}}">Select</button></th>
<td>{{name}}</td>
<td><span class="textAddress">{{address}}</span></td>
</tr>
{{/addressData}}
</tbody>
</table>
{{else}}
<div id="noWalletsPresent">You don't have any wallets, please import them, or create a new one</div>
{{/if}}
</div>

View File

@@ -11,9 +11,10 @@
</select>
<label for="sendFromAddress">From address:</label>
</div>
<div class="input-field col s6">
<div class="input-field col s6 addressInputWrapper">
<input id="sendToAddress" placeholder="recipient address" type="text">
<label for="sendToAddress" class="active">To address:</label>
<button type="button" class="btn btn-etho addressLookup" id="btnLookForToAddress"><i class="fas fa-search"></i></button>
</div>
</div>
<div class="row">
@@ -84,3 +85,10 @@
<button type="button" class="btn btn-etho btn-dialog-confirm" id="btnSendWalletPasswordConfirm">Confirm</button>
</div>
</div>
<!-- The modal for address list -->
<div id="dlgAddressList" class="modalDialog" data-iziModal-title="AddressList" data-iziModal-subtitle="Please select an address from the list" data-iziModal-icon="icon-home">
<div class="modalBodyPassword" id="dlgAddressListBody">
</div>
</div>

View File

@@ -18,7 +18,7 @@
<tr>
<th scope="row" class="colEdit"><button type="button" class="btn btn-etho btnChangWalletName" data-wallet="{{address}}" data-name="{{name}}">Edit</button></th>
<td>{{name}}</td>
<td><button type="button" class="btn btn-etho btnCopyWalletAddress" data-wallet="{{address}}"><i class="far fa-copy"></i></button><span class="textAddress">{{address}}</span></td>
<td><span class="textAddress">{{address}}</span></td>
<td>{{balance}}</td>
</tr>
{{/addressData}}
@@ -28,8 +28,6 @@
<div id="noWalletsPresent">You don't have any wallets, please import them, or create a new one</div>
{{/if}}
</div>
<div id="transactionList">
</div>
<!-- The modal for new wallet -->
<div id="dlgCreateWalletPassword" class="modalDialog" data-iziModal-title="Wallet Password" data-iziModal-subtitle="Make sure to write it down or remember it!!!" data-iziModal-icon="icon-home">

View File

@@ -12,8 +12,8 @@ function createWindow () {
mainWindow = new BrowserWindow({
width: 1200,
height: 800,
minWidth: 1000,
minHeight: 800,
minWidth: 1100,
minHeight: 700,
backgroundColor: "#000000"
});

View File

@@ -13,16 +13,14 @@
"appId": "Ether1DesktopWallet",
"win": {
"icon": "build/icon.png",
"target": "portable"
"target": "7z"
}
},
"repository": "https://github.com/electron/electron-quick-start",
"repository": "https://github.com/taeguscromis/Ether1DesktopWallet",
"keywords": [
"Electron",
"quick",
"start",
"tutorial",
"demo"
"Ether1",
"Desktop",
"Wallet"
],
"author": "Ether1",
"license": "CC0-1.0",

View File

@@ -164,6 +164,34 @@ class Blockchain {
}
}
getAddressListData(clbError, clbSuccess) {
var rendererData = {};
rendererData.addressData = [];
var wallets = ipcRenderer.sendSync('getJSONFile', 'wallets.json');
var counter = 0;
web3Local.eth.getAccounts(function(err, res) {
if (err) {
clbError(err);
} else {
for (var i = 0; i < res.length; i++) {
var walletName = vsprintf("Account %d", [i + 1]);
if (wallets) {
walletName = wallets.names[res[i]] || walletName;
}
var addressInfo = {};
addressInfo.address = res[i];
addressInfo.name = walletName;
rendererData.addressData.push(addressInfo);
}
clbSuccess(rendererData);
}
});
}
createNewAccount(password, clbError, clbSuccess) {
web3Local.eth.personal.newAccount(password, function(error, account) {
if (error) {

View File

@@ -43,11 +43,15 @@ class MainGUI {
});
}
renderTemplate(template, data) {
renderTemplate(template, data, container) {
var template = Handlebars.compile(ipcRenderer.sendSync('getTemplateContent', template));
$("#mainContent").empty();
$("#mainContent").html(template(data));
if (!container) {
container = $("#mainContent")
}
container.empty();
container.html(template(data));
}
copyToClipboard(text) {

View File

@@ -66,48 +66,6 @@ $(document).on("render_send", function() {
web3Local.eth.getBalance(this.value, function(error, balance) {
$("#sendMaxAmmount").html(parseFloat(web3Local.utils.fromWei(balance, 'ether')));
});
/*
// list all transactions for this address
if (this.value) {
$("#cardTransactionsForAddress").css("display", "block");
setTimeout(() => {
// render the transactions
$('#tableTransactionsForAddress').DataTable({
"paging": false,
"scrollY": "calc(100vh - 115px)",
"responsive": true,
"processing": true,
"order": [[ 0, "desc" ]],
"data": ipcRenderer.sendSync('getTransactions', this.value),
"columnDefs": [
{
"className": "transactionsBlockNum",
"targets": 0
},
{
"targets": 1,
"render": function ( data, type, row ) {
return moment(data).format("MMM Do YYYY");
}
},
{
"targets": 4,
"render": function ( data, type, row ) {
return parseFloat(web3Local.utils.fromWei(EthoUtils.toFixed(parseFloat(data)).toString(), 'ether')).toFixed(2);
}
}
],
"drawCallback": function( settings ) {
$("#loadingTransactionsOverlay").css("display", "none");
}
});
}, 200);
} else {
$("#cardTransactionsForAddress").css("display", "none");
}
*/
});
$("#btnSendAll").off('click').on('click', function() {
@@ -115,6 +73,33 @@ $(document).on("render_send", function() {
$("#sendAmmount").val($("#sendMaxAmmount").html());
});
$("#btnLookForToAddress").off('click').on('click', function() {
EthoBlockchain.getAddressListData(
function(error) {
EthoMainGUI.showGeneralError(error);
},
function(data) {
$("#dlgAddressList").iziModal({ width: "800px" });
EthoMainGUI.renderTemplate("addresslist.html", data, $("#dlgAddressListBody"));
$('#dlgAddressList').iziModal('open');
$(".btnSelectToAddress").off('click').on('click', function() {
$("#sendToAddress").val($(this).attr('data-wallet'));
$('#dlgAddressList').iziModal('close');
});
$('#addressListFilter').off('input').on('input',function(e){
EthoUtils.filterTable($("#addressTable"), $('#addressListFilter').val());
});
$("#btnClearSearchField").off('click').on('click', function() {
EthoUtils.filterTable($("#addressTable"), "");
$('#addressListFilter').val("")
});
}
);
});
$("#btnSendTransaction").off('click').on('click', function() {
if (EthoSend.validateSendForm()) {
EthoBlockchain.getTranasctionFee($("#sendFromAddress").val(), $("#sendToAddress").val(), $("#sendAmmount").val(),

View File

@@ -18,6 +18,27 @@ class Utils {
}
return x;
}
filterTable(table, text) {
// Declare variables
var filter, tr, td, i, txtValue;
filter = text.toUpperCase();
tr = $(table).find("tr");
// Loop through all table rows, and hide those who don't match the search query
for (i = 0; i < tr.length; i++) {
td = $(tr[i]).find("td")[0];
if (td) {
txtValue = td.textContent || td.innerText;
if (txtValue.toUpperCase().indexOf(filter) > -1) {
$(tr[i]).css("display", "");
} else {
$(tr[i]).css("display", "none");
}
}
}
}
}
EthoUtils = new Utils();

View File

@@ -62,8 +62,8 @@ renderWalletsState() {
EthoMainGUI.renderTemplate("wallets.html", data);
$(document).trigger("render_wallets");
}
);
}
);
}
}
// the event to tell us that the wallets are rendered
@@ -142,8 +142,8 @@ $(document).on("render_wallets", function() {
});
});
$(".btnCopyWalletAddress").off('click').on('click', function() {
EthoMainGUI.copyToClipboard($(this).attr('data-wallet'));
$(".textAddress").off('click').on('click', function() {
EthoMainGUI.copyToClipboard($(this).html());
iziToast.success({
title: 'Copied',