From b8e36f41a26f5dfa51b0e10df102bee10b377f6a Mon Sep 17 00:00:00 2001 From: kumavis Date: Fri, 11 Mar 2016 17:13:48 -0800 Subject: notifications - add tx confirm+cancel buttons --- app/scripts/background.js | 17 +++++++------ app/scripts/lib/idStore.js | 2 ++ app/scripts/lib/tx-notification.js | 49 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 61 insertions(+), 7 deletions(-) create mode 100644 app/scripts/lib/tx-notification.js (limited to 'app/scripts') diff --git a/app/scripts/background.js b/app/scripts/background.js index 4567dc656..a724a87e8 100644 --- a/app/scripts/background.js +++ b/app/scripts/background.js @@ -8,6 +8,7 @@ const EthStore = require('eth-store') const PortStream = require('./lib/port-stream.js') const MetaMaskProvider = require('web3-provider-engine/zero.js') const IdentityStore = require('./lib/idStore') +const createTxNotification = require('./lib/tx-notification.js') console.log('ready to roll') @@ -159,13 +160,13 @@ function updateBadge(state){ // function addUnconfirmedTx(txParams, cb){ - chrome.notifications.create({ - type: 'basic', - iconUrl: '/images/icon-128.png', - title: 'New Transaction', - message: 'click the extension to confirm...', + var txId = idStore.addUnconfirmedTransaction(txParams, cb) + createTxNotification({ + title: 'New Unsigned Transaction', + txParams: txParams, + confirm: idStore.approveTransaction.bind(idStore, txId, noop), + cancel: idStore.cancelTransaction.bind(idStore, txId), }) - idStore.addUnconfirmedTransaction(txParams, cb) } // @@ -204,4 +205,6 @@ function jsonStringifyStream(){ this.push(JSON.stringify(obj)) cb() }) -} \ No newline at end of file +} + +function noop(){} \ No newline at end of file diff --git a/app/scripts/lib/idStore.js b/app/scripts/lib/idStore.js index f31d4562d..148947cd7 100644 --- a/app/scripts/lib/idStore.js +++ b/app/scripts/lib/idStore.js @@ -113,6 +113,8 @@ IdentityStore.prototype.addUnconfirmedTransaction = function(txParams, cb){ // signal update self._didUpdate() + + return txId } // comes from metamask ui diff --git a/app/scripts/lib/tx-notification.js b/app/scripts/lib/tx-notification.js new file mode 100644 index 000000000..c7f62408b --- /dev/null +++ b/app/scripts/lib/tx-notification.js @@ -0,0 +1,49 @@ +const createId = require('hat') +const uiUtils = require('metamask-ui/app/util') +var notificationHandlers = {} + +module.exports = createTxNotification + + +// notification button press +chrome.notifications.onButtonClicked.addListener(function(notificationId, buttonIndex){ + var handlers = notificationHandlers[notificationId] + if (buttonIndex === 0) { + handlers.confirm() + } else { + handlers.cancel() + } + chrome.notifications.clear(notificationId) +}) + +// notification teardown +chrome.notifications.onClosed.addListener(function(notificationId){ + delete notificationHandlers[notificationId] +}) + +// creation helper +function createTxNotification(opts){ + var message = [ + 'to: '+uiUtils.addressSummary(opts.txParams.to), + 'from: '+uiUtils.addressSummary(opts.txParams.from), + 'value: '+uiUtils.formatBalance(opts.txParams.value), + 'data: '+uiUtils.dataSize(opts.txParams.data), + ].join('\n') + + var id = createId() + chrome.notifications.create(id, { + type: 'basic', + iconUrl: '/images/icon-128.png', + title: opts.title, + message: message, + buttons: [{ + title: 'confirm', + },{ + title: 'cancel', + }] + }) + notificationHandlers[id] = { + confirm: opts.confirm, + cancel: opts.cancel, + } +} \ No newline at end of file -- cgit