diff options
author | frankiebee <frankie.diamond@gmail.com> | 2017-03-24 06:44:29 +0800 |
---|---|---|
committer | frankiebee <frankie.diamond@gmail.com> | 2017-03-24 06:44:29 +0800 |
commit | 8e30acb41a2cd97efd5428c60c2a5c910758b412 (patch) | |
tree | ae797e27d776827424fb9f15be07d3b02e5c9f92 /app/scripts/controllers/address-book.js | |
parent | c8540261c1c9b60c98845bdd19095efc064fdde8 (diff) | |
parent | f29a116d4027e387180aa1232d35afcc15b920b0 (diff) | |
download | tangerine-wallet-browser-8e30acb41a2cd97efd5428c60c2a5c910758b412.tar tangerine-wallet-browser-8e30acb41a2cd97efd5428c60c2a5c910758b412.tar.gz tangerine-wallet-browser-8e30acb41a2cd97efd5428c60c2a5c910758b412.tar.bz2 tangerine-wallet-browser-8e30acb41a2cd97efd5428c60c2a5c910758b412.tar.lz tangerine-wallet-browser-8e30acb41a2cd97efd5428c60c2a5c910758b412.tar.xz tangerine-wallet-browser-8e30acb41a2cd97efd5428c60c2a5c910758b412.tar.zst tangerine-wallet-browser-8e30acb41a2cd97efd5428c60c2a5c910758b412.zip |
Merge branch 'master' into mascara
Diffstat (limited to 'app/scripts/controllers/address-book.js')
-rw-r--r-- | app/scripts/controllers/address-book.js | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/app/scripts/controllers/address-book.js b/app/scripts/controllers/address-book.js new file mode 100644 index 000000000..c66eb2bd4 --- /dev/null +++ b/app/scripts/controllers/address-book.js @@ -0,0 +1,79 @@ +const ObservableStore = require('obs-store') +const extend = require('xtend') + +class AddressBookController { + + + // Controller in charge of managing the address book functionality from the + // recipients field on the send screen. Manages a history of all saved + // addresses and all currently owned addresses. + constructor (opts = {}, keyringController) { + const initState = extend({ + addressBook: [], + }, opts.initState) + this.store = new ObservableStore(initState) + this.keyringController = keyringController + } + + // + // PUBLIC METHODS + // + + // Sets a new address book in store by accepting a new address and nickname. + setAddressBook (address, name) { + return this._addToAddressBook(address, name) + .then((addressBook) => { + this.store.updateState({ + addressBook, + }) + return Promise.resolve() + }) + } + + // + // PRIVATE METHODS + // + + + // Performs the logic to add the address and name into the address book. The + // pushed object is an object of two fields. Current behavior does not set an + // upper limit to the number of addresses. + _addToAddressBook (address, name) { + let addressBook = this._getAddressBook() + let identities = this._getIdentities() + + let addressBookIndex = addressBook.findIndex((element) => { return element.address.toLowerCase() === address.toLowerCase() || element.name === name }) + let identitiesIndex = Object.keys(identities).findIndex((element) => { return element.toLowerCase() === address.toLowerCase() }) + // trigger this condition if we own this address--no need to overwrite. + if (identitiesIndex !== -1) { + return Promise.resolve(addressBook) + // trigger this condition if we've seen this address before--may need to update nickname. + } else if (addressBookIndex !== -1) { + addressBook.splice(addressBookIndex, 1) + } else if (addressBook.length > 15) { + addressBook.shift() + } + + + addressBook.push({ + address: address, + name, + }) + return Promise.resolve(addressBook) + } + + // Internal method to get the address book. Current persistence behavior + // should not require that this method be called from the UI directly. + _getAddressBook () { + return this.store.getState().addressBook + } + + // Retrieves identities from the keyring controller in order to avoid + // duplication + _getIdentities () { + return this.keyringController.memStore.getState().identities + } + +} + +module.exports = AddressBookController |