From 832aa2b162b66c4a2cc22824f6806ebfb5211df5 Mon Sep 17 00:00:00 2001 From: Nikola Glumac Date: Fri, 17 Jan 2020 15:18:57 +0100 Subject: [PATCH] [DDW-1180] Implements API and data handling logic --- .../app/actions/wallet-settings-actions.js | 1 + source/renderer/app/api/api.js | 22 ++++++++++++++++- .../api/wallets/requests/forceWalletResync.js | 24 +++++++++++++++++++ source/renderer/app/api/wallets/types.js | 5 ++++ .../app/stores/WalletSettingsStore.js | 10 ++++++++ 5 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 source/renderer/app/api/wallets/requests/forceWalletResync.js diff --git a/source/renderer/app/actions/wallet-settings-actions.js b/source/renderer/app/actions/wallet-settings-actions.js index 9051392a53..db24fc0856 100644 --- a/source/renderer/app/actions/wallet-settings-actions.js +++ b/source/renderer/app/actions/wallet-settings-actions.js @@ -22,4 +22,5 @@ export default class WalletSettingsActions { exportToFile: Action = new Action(); startWalletUtxoPolling: Action = new Action(); stopWalletUtxoPolling: Action = new Action(); + forceWalletResync: Action<{ walletId: string }> = new Action(); } diff --git a/source/renderer/app/api/api.js b/source/renderer/app/api/api.js index 546fee4fe9..42eac9996a 100644 --- a/source/renderer/app/api/api.js +++ b/source/renderer/app/api/api.js @@ -49,6 +49,7 @@ import { restoreWallet } from './wallets/requests/restoreWallet'; import { restoreLegacyWallet } from './wallets/requests/restoreLegacyWallet'; import { restoreByronWallet } from './wallets/requests/restoreByronWallet'; import { updateWallet } from './wallets/requests/updateWallet'; +import { forceWalletResync } from './wallets/requests/forceWalletResync'; import { getWalletUtxos } from './wallets/requests/getWalletUtxos'; import { getWallet } from './wallets/requests/getWallet'; import { getWalletIdAndBalance } from './wallets/requests/getWalletIdAndBalance'; @@ -136,7 +137,7 @@ import type { GetWalletRecoveryPhraseFromCertificateRequest, ImportWalletFromKeyRequest, ImportWalletFromFileRequest, - UpdateWalletRequest, + ForceWalletResyncRequest, GetWalletUtxosRequest, GetWalletRequest, GetWalletIdAndBalanceRequest, @@ -145,6 +146,7 @@ import type { TransferFundsCalculateFeeResponse, TransferFundsRequest, TransferFundsResponse, + UpdateWalletRequest, } from './wallets/types'; // News Types @@ -1253,6 +1255,24 @@ export default class AdaApi { } }; + forceWalletResync = async ( + request: ForceWalletResyncRequest + ): Promise => { + const { walletId } = request; + Logger.debug('AdaApi::forceWalletResync called', { + walletId, + }); + try { + const response = await forceWalletResync(this.config, { + walletId, + }); + Logger.debug('AdaApi::forceWalletResync success', { response }); + } catch (error) { + Logger.error('AdaApi::forceWalletResync error', { error }); + throw new GenericApiError(); + } + }; + transferFundsCalculateFee = async ( request: TransferFundsCalculateFeeRequest ): Promise => { diff --git a/source/renderer/app/api/wallets/requests/forceWalletResync.js b/source/renderer/app/api/wallets/requests/forceWalletResync.js new file mode 100644 index 0000000000..f02ec245b9 --- /dev/null +++ b/source/renderer/app/api/wallets/requests/forceWalletResync.js @@ -0,0 +1,24 @@ +// @flow +import type { RequestConfig } from '../../common/types'; +import { request } from '../../utils/request'; + +export type ForceWalletResyncParams = { + walletId: string, +}; + +export const forceWalletResync = ( + config: RequestConfig, + { walletId }: ForceWalletResyncParams +): Promise<*> => + request( + { + method: 'PUT', + path: `/v2/wallets/${walletId}/tip`, + ...config, + }, + {}, + { + slot_number: 0, + epoch_number: 0, + } + ); diff --git a/source/renderer/app/api/wallets/types.js b/source/renderer/app/api/wallets/types.js index c2f1de4c74..56df2243f4 100644 --- a/source/renderer/app/api/wallets/types.js +++ b/source/renderer/app/api/wallets/types.js @@ -178,6 +178,11 @@ export type UpdateWalletRequest = { walletId: string, name: string, }; + +export type ForceWalletResyncRequest = { + walletId: string, +}; + export type ImportWalletFromKeyRequest = { filePath: string, spendingPassword: string, diff --git a/source/renderer/app/stores/WalletSettingsStore.js b/source/renderer/app/stores/WalletSettingsStore.js index 0245e51285..eb8707a3ab 100644 --- a/source/renderer/app/stores/WalletSettingsStore.js +++ b/source/renderer/app/stores/WalletSettingsStore.js @@ -21,6 +21,9 @@ export default class WalletSettingsStore extends Store { @observable getWalletUtxosRequest: Request = new Request( this.api.ada.getWalletUtxos ); + @observable forceWalletResyncRequest: Request = new Request( + this.api.ada.forceWalletResync + ); @observable walletFieldBeingEdited = null; @observable lastUpdatedWalletField = null; @@ -54,6 +57,7 @@ export default class WalletSettingsStore extends Store { walletSettingsActions.stopWalletUtxoPolling.listen( this._stopWalletUtxoPolling ); + walletSettingsActions.forceWalletResync.listen(this._forceWalletResync); sidebarActions.walletSelected.listen(this._onWalletSelected); } @@ -161,4 +165,10 @@ export default class WalletSettingsStore extends Store { @action _onWalletSelected = () => { this._updateWalletUtxos(null); }; + + @action _forceWalletResync = async ({ walletId }: { walletId: string }) => { + await this.forceWalletResyncRequest.execute({ walletId }); + this.forceWalletResyncRequest.reset(); + this.stores.wallets.refreshWalletsData(); + }; }