diff --git a/js/src/views/Application/Requests/savedRequests.js b/js/src/views/Application/Requests/savedRequests.js index 54f1a7a9a..546324a56 100644 --- a/js/src/views/Application/Requests/savedRequests.js +++ b/js/src/views/Application/Requests/savedRequests.js @@ -16,22 +16,11 @@ import store from 'store'; -import { ERROR_CODES } from '~/api/transport/error'; - export const LS_REQUESTS_KEY = '_parity::requests'; export default class SavedRequests { - network = null; - - /** - * Load the network version, and then the related requests - */ load (api) { - return api.net.version() - .then((network) => { - this.network = network; - return this.loadRequests(api); - }) + return this.loadRequests(api) .catch((error) => { console.error(error); return []; @@ -43,28 +32,38 @@ export default class SavedRequests { */ loadRequests (api) { const requests = this._get(); - const promises = Object.values(requests).map((request) => { - const { requestId, transactionHash } = request; - // The request hasn't been signed yet - if (transactionHash) { - return request; - } + return api.parity.localTransactions() + .then((localTransactions) => { + const promises = Object.values(requests).map((request) => { + const { requestId, transactionHash } = request; - return this._requestExists(api, requestId) - .then((exists) => { - if (!exists) { - return null; + if (transactionHash) { + // The transaction might be from an other + // chain + if (!localTransactions[transactionHash]) { + this.remove(requestId); + return null; + } + + return request; } - return request; - }) - .catch(() => { - this.remove(requestId); - }); - }); + // The request hasn't been signed yet + return this._requestExists(api, requestId) + .then((exists) => { + if (!exists) { + this.remove(requestId); + return null; + } - return Promise.all(promises).then((requests) => requests.filter((request) => request)); + return request; + }); + }); + + return Promise.all(promises); + }) + .then((requests) => requests.filter((request) => request)); } save (requestId, requestData) { @@ -86,33 +85,23 @@ export default class SavedRequests { } _get () { - const allRequests = store.get(LS_REQUESTS_KEY) || {}; - - return allRequests[this.network] || {}; + return store.get(LS_REQUESTS_KEY) || {}; } _set (requests = {}) { - const allRequests = store.get(LS_REQUESTS_KEY) || {}; - if (Object.keys(requests).length > 0) { - allRequests[this.network] = requests; - } else { - delete allRequests[this.network]; + return store.set(LS_REQUESTS_KEY, requests); } - return store.set(LS_REQUESTS_KEY, allRequests); + return store.remove(LS_REQUESTS_KEY); } _requestExists (api, requestId) { return api.parity .checkRequest(requestId) .then(() => true) - .catch((error) => { - if (error.code === ERROR_CODES.REQUEST_NOT_FOUND) { - return false; - } - - throw error; + .catch(() => { + return false; }); } } diff --git a/js/src/views/Application/Requests/savedRequests.spec.js b/js/src/views/Application/Requests/savedRequests.spec.js index acf3adc39..8e8362f20 100644 --- a/js/src/views/Application/Requests/savedRequests.spec.js +++ b/js/src/views/Application/Requests/savedRequests.spec.js @@ -19,23 +19,25 @@ import store from 'store'; import SavedRequests, { LS_REQUESTS_KEY } from './savedRequests'; -const NETWORK_ID = 42; const DEFAULT_REQUEST = { requestId: '0x1', transaction: {} }; -const api = createApi(NETWORK_ID); -const api2 = createApi(1); +const SIGNED_REQUEST = { + requestId: '0x2', + transactionHash: '0xabcdef', + transaction: {} +}; + +const api = createApi(); const savedRequests = new SavedRequests(); -function createApi (networkVersion) { +function createApi () { return { parity: { - checkRequest: sinon.stub().resolves() - }, - net: { - version: sinon.stub().resolves(networkVersion) + checkRequest: sinon.stub().resolves(), + localTransactions: sinon.stub().resolves([]) } }; } @@ -43,9 +45,8 @@ function createApi (networkVersion) { describe('views/Application/Requests/savedRequests', () => { beforeEach((done) => { store.set(LS_REQUESTS_KEY, { - [NETWORK_ID]: { - [DEFAULT_REQUEST.requestId]: DEFAULT_REQUEST - } + [DEFAULT_REQUEST.requestId]: DEFAULT_REQUEST, + [SIGNED_REQUEST.requestId]: SIGNED_REQUEST }); savedRequests.load(api) @@ -75,7 +76,7 @@ describe('views/Application/Requests/savedRequests', () => { const requests = savedRequests._get(); - expect(requests).to.deep.equal({}); + expect(requests[DEFAULT_REQUEST.requestId]).to.be.undefined; }); it('saves new requests', () => { @@ -92,14 +93,7 @@ describe('views/Application/Requests/savedRequests', () => { it('loads requests', () => { return savedRequests.load(api) .then((requests) => { - expect(requests[0]).to.deep.equal(DEFAULT_REQUEST); - }); - }); - - it('loads requests from the right network', () => { - return savedRequests.load(api2) - .then((requests) => { - expect(requests).to.deep.equal([]); + expect(requests).to.deep.equal([ DEFAULT_REQUEST ]); }); }); });